@dommaker/harness 1.5.0 → 1.7.0
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/CHANGELOG.md +26 -0
- package/README.md +0 -2
- package/dist/cli/commands/definitions.d.ts.map +1 -1
- package/dist/cli/commands/definitions.js +1 -32
- package/dist/cli/commands/definitions.js.map +1 -1
- package/dist/cli/commands/passes-gate.d.ts +0 -2
- package/dist/cli/commands/passes-gate.d.ts.map +1 -1
- package/dist/cli/commands/passes-gate.js +0 -1
- package/dist/cli/commands/passes-gate.js.map +1 -1
- package/dist/cli/commands/performance.d.ts +0 -4
- package/dist/cli/commands/performance.d.ts.map +1 -1
- package/dist/cli/commands/performance.js +10 -20
- package/dist/cli/commands/performance.js.map +1 -1
- package/dist/cli/commands/report.d.ts +1 -1
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +2 -55
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +4 -8
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/context/index.d.ts +2 -5
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +2 -8
- package/dist/context/index.js.map +1 -1
- package/dist/context/token-budget.d.ts +0 -29
- package/dist/context/token-budget.d.ts.map +1 -1
- package/dist/context/token-budget.js +1 -65
- package/dist/context/token-budget.js.map +1 -1
- package/dist/context/types.d.ts +0 -1
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/types.js +0 -9
- package/dist/context/types.js.map +1 -1
- package/dist/core/constraints/checker.d.ts +14 -0
- package/dist/core/constraints/checker.d.ts.map +1 -1
- package/dist/core/constraints/checker.js +22 -2
- package/dist/core/constraints/checker.js.map +1 -1
- package/dist/core/constraints/git-evidence.d.ts +6 -3
- package/dist/core/constraints/git-evidence.d.ts.map +1 -1
- package/dist/core/constraints/git-evidence.js +6 -3
- package/dist/core/constraints/git-evidence.js.map +1 -1
- package/dist/core/index.d.ts +1 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -9
- package/dist/core/index.js.map +1 -1
- package/dist/core/spec/validator.d.ts +2 -0
- package/dist/core/spec/validator.d.ts.map +1 -1
- package/dist/core/spec/validator.js +9 -11
- package/dist/core/spec/validator.js.map +1 -1
- package/dist/core/validators/index.d.ts +1 -1
- package/dist/core/validators/index.d.ts.map +1 -1
- package/dist/core/validators/passes-gate.d.ts +1 -15
- package/dist/core/validators/passes-gate.d.ts.map +1 -1
- package/dist/core/validators/passes-gate.js +2 -127
- package/dist/core/validators/passes-gate.js.map +1 -1
- package/dist/failure/index.d.ts +0 -1
- package/dist/failure/index.d.ts.map +1 -1
- package/dist/failure/index.js +1 -7
- package/dist/failure/index.js.map +1 -1
- package/dist/gates/definitions.d.ts.map +1 -1
- package/dist/gates/definitions.js +0 -4
- package/dist/gates/definitions.js.map +1 -1
- package/dist/gates/performance.d.ts +7 -22
- package/dist/gates/performance.d.ts.map +1 -1
- package/dist/gates/performance.js +7 -89
- package/dist/gates/performance.js.map +1 -1
- package/dist/gates/types.d.ts +2 -8
- package/dist/gates/types.d.ts.map +1 -1
- package/dist/index.d.ts +6 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -22
- package/dist/index.js.map +1 -1
- package/dist/knowledge/index.d.ts +0 -1
- package/dist/knowledge/index.d.ts.map +1 -1
- package/dist/knowledge/index.js +1 -3
- package/dist/knowledge/index.js.map +1 -1
- package/dist/monitoring/trace-analyzer.d.ts +25 -10
- package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
- package/dist/monitoring/trace-analyzer.js +147 -116
- package/dist/monitoring/trace-analyzer.js.map +1 -1
- package/dist/types/passes-gate.d.ts +0 -32
- package/dist/types/passes-gate.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/passes-gate-check.test.ts +20 -4
- package/src/__tests__/passes-gate.test.ts +5 -99
- package/src/__tests__/performance-gate.test.ts +3 -11
- package/src/__tests__/public-exports.test.ts +68 -16
- package/src/__tests__/public-type-surface.test.ts +359 -0
- package/src/__tests__/trace-analyzer.test.ts +52 -2
- package/src/cli/commands/CONTEXT.md +3 -2
- package/src/cli/commands/__tests__/passes-gate-dead-options.test.ts +158 -0
- package/src/cli/commands/__tests__/passes-gate.test.ts +7 -3
- package/src/cli/commands/__tests__/performance.test.ts +5 -16
- package/src/cli/commands/__tests__/registry.test.ts +46 -3
- package/src/cli/commands/__tests__/report-extra.test.ts +0 -19
- package/src/cli/commands/__tests__/report-false-green.test.ts +46 -0
- package/src/cli/commands/__tests__/report.test.ts +0 -20
- package/src/cli/commands/__tests__/status-analysis-wiring.test.ts +68 -0
- package/src/cli/commands/__tests__/status-extra.test.ts +63 -116
- package/src/cli/commands/__tests__/status.test.ts +66 -148
- package/src/cli/commands/definitions.ts +1 -32
- package/src/cli/commands/passes-gate.ts +0 -3
- package/src/cli/commands/performance.ts +13 -27
- package/src/cli/commands/report.ts +3 -61
- package/src/cli/commands/status.ts +5 -10
- package/src/context/CONTEXT.md +2 -3
- package/src/context/__tests__/token-budget.test.ts +1 -81
- package/src/context/index.ts +2 -7
- package/src/context/token-budget.ts +0 -73
- package/src/context/types.ts +0 -9
- package/src/core/CONTEXT.md +5 -6
- package/src/core/constraints/__tests__/collect-constraints.test.ts +66 -0
- package/src/core/constraints/checker.ts +33 -2
- package/src/core/constraints/git-evidence.ts +6 -3
- package/src/core/index.ts +0 -12
- package/src/core/spec/__tests__/validator.test.ts +24 -0
- package/src/core/spec/validator.ts +9 -10
- package/src/core/validators/__tests__/passes-gate.test.ts +2 -9
- package/src/core/validators/index.ts +0 -2
- package/src/core/validators/passes-gate.ts +3 -152
- package/src/failure/CONTEXT.md +8 -6
- package/src/failure/index.ts +0 -10
- package/src/gates/CONTEXT.md +3 -2
- package/src/gates/__tests__/performance.test.ts +6 -74
- package/src/gates/definitions.ts +0 -4
- package/src/gates/performance.ts +9 -111
- package/src/gates/types.ts +2 -8
- package/src/index.ts +1 -37
- package/src/knowledge/CONTEXT.md +1 -2
- package/src/knowledge/index.ts +0 -1
- package/src/monitoring/CONTEXT.md +2 -2
- package/src/monitoring/trace-analyzer.ts +160 -126
- package/src/types/passes-gate.ts +0 -43
- package/src/utils/__tests__/jsonl-skip-disposition.test.ts +0 -1
- package/dist/cli/commands/analyze-sessions.d.ts +0 -20
- package/dist/cli/commands/analyze-sessions.d.ts.map +0 -1
- package/dist/cli/commands/analyze-sessions.js +0 -290
- package/dist/cli/commands/analyze-sessions.js.map +0 -1
- package/dist/cli/commands/update-user-model.d.ts +0 -30
- package/dist/cli/commands/update-user-model.d.ts.map +0 -1
- package/dist/cli/commands/update-user-model.js +0 -406
- package/dist/cli/commands/update-user-model.js.map +0 -1
- package/dist/cli/session-mining/corrections.d.ts +0 -17
- package/dist/cli/session-mining/corrections.d.ts.map +0 -1
- package/dist/cli/session-mining/corrections.js +0 -58
- package/dist/cli/session-mining/corrections.js.map +0 -1
- package/dist/cli/session-mining/index.d.ts +0 -13
- package/dist/cli/session-mining/index.d.ts.map +0 -1
- package/dist/cli/session-mining/index.js +0 -29
- package/dist/cli/session-mining/index.js.map +0 -1
- package/dist/cli/session-mining/text.d.ts +0 -31
- package/dist/cli/session-mining/text.d.ts.map +0 -1
- package/dist/cli/session-mining/text.js +0 -126
- package/dist/cli/session-mining/text.js.map +0 -1
- package/dist/cli/session-mining/transcript.d.ts +0 -34
- package/dist/cli/session-mining/transcript.d.ts.map +0 -1
- package/dist/cli/session-mining/transcript.js +0 -130
- package/dist/cli/session-mining/transcript.js.map +0 -1
- package/dist/context/compaction.d.ts +0 -57
- package/dist/context/compaction.d.ts.map +0 -1
- package/dist/context/compaction.js +0 -165
- package/dist/context/compaction.js.map +0 -1
- package/dist/core/session/clean-state.d.ts +0 -17
- package/dist/core/session/clean-state.d.ts.map +0 -1
- package/dist/core/session/clean-state.js +0 -192
- package/dist/core/session/clean-state.js.map +0 -1
- package/dist/core/session/index.d.ts +0 -6
- package/dist/core/session/index.d.ts.map +0 -1
- package/dist/core/session/index.js +0 -15
- package/dist/core/session/index.js.map +0 -1
- package/dist/core/session/startup.d.ts +0 -47
- package/dist/core/session/startup.d.ts.map +0 -1
- package/dist/core/session/startup.js +0 -263
- package/dist/core/session/startup.js.map +0 -1
- package/dist/failure/constraint-handler.d.ts +0 -83
- package/dist/failure/constraint-handler.d.ts.map +0 -1
- package/dist/failure/constraint-handler.js +0 -138
- package/dist/failure/constraint-handler.js.map +0 -1
- package/dist/knowledge/lifecycle-hooks.d.ts +0 -62
- package/dist/knowledge/lifecycle-hooks.d.ts.map +0 -1
- package/dist/knowledge/lifecycle-hooks.js +0 -143
- package/dist/knowledge/lifecycle-hooks.js.map +0 -1
- package/dist/types/session.d.ts +0 -113
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js +0 -6
- package/dist/types/session.js.map +0 -1
- package/src/__tests__/clean-state-extra.test.ts +0 -301
- package/src/__tests__/clean-state.test.ts +0 -169
- package/src/__tests__/constraint-handler.test.ts +0 -132
- package/src/__tests__/passes-gate-extra.test.ts +0 -93
- package/src/__tests__/session-startup.test.ts +0 -334
- package/src/cli/commands/__tests__/analyze-sessions.test.ts +0 -184
- package/src/cli/commands/__tests__/update-user-model.test.ts +0 -268
- package/src/cli/commands/analyze-sessions.ts +0 -335
- package/src/cli/commands/update-user-model.ts +0 -476
- package/src/cli/session-mining/__tests__/transcript.test.ts +0 -118
- package/src/cli/session-mining/corrections.ts +0 -56
- package/src/cli/session-mining/index.ts +0 -13
- package/src/cli/session-mining/text.ts +0 -117
- package/src/cli/session-mining/transcript.ts +0 -125
- package/src/context/__tests__/compaction.test.ts +0 -169
- package/src/context/compaction.ts +0 -201
- package/src/core/session/__tests__/startup.test.ts +0 -281
- package/src/core/session/clean-state.ts +0 -178
- package/src/core/session/index.ts +0 -15
- package/src/core/session/startup.ts +0 -253
- package/src/failure/constraint-handler.ts +0 -171
- package/src/knowledge/__tests__/lifecycle-hooks.test.ts +0 -140
- package/src/knowledge/lifecycle-hooks.ts +0 -202
- package/src/types/session.ts +0 -132
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* 分词 / 停用词 / 相似度 / 文本清洗(工单 19-C)
|
|
4
|
-
*
|
|
5
|
-
* 合并 analyze-sessions 与 update-user-model 的重复实现。
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.STOP_WORDS = void 0;
|
|
9
|
-
exports.tokenize = tokenize;
|
|
10
|
-
exports.jaccardSimilarity = jaccardSimilarity;
|
|
11
|
-
exports.jaccardChinese = jaccardChinese;
|
|
12
|
-
exports.stripCodeBlocks = stripCodeBlocks;
|
|
13
|
-
exports.isPunctuation = isPunctuation;
|
|
14
|
-
exports.hasSemanticContent = hasSemanticContent;
|
|
15
|
-
exports.isCodeNoise = isCodeNoise;
|
|
16
|
-
/** N-gram 停用词表(中英) */
|
|
17
|
-
exports.STOP_WORDS = new Set([
|
|
18
|
-
'的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一',
|
|
19
|
-
'一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着',
|
|
20
|
-
'没有', '看', '好', '自己', '这', '他', '她', '它', '们', '那',
|
|
21
|
-
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
|
|
22
|
-
'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
|
|
23
|
-
'should', 'may', 'might', 'can', 'shall', 'to', 'of', 'in', 'for',
|
|
24
|
-
'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during',
|
|
25
|
-
'before', 'after', 'above', 'below', 'between', 'under', 'again',
|
|
26
|
-
'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why',
|
|
27
|
-
'how', 'all', 'both', 'each', 'few', 'more', 'most', 'other', 'some',
|
|
28
|
-
'such', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'just',
|
|
29
|
-
'因为', '所以', '但是', '而且', '如果', '虽然', '可以', '这个', '那个',
|
|
30
|
-
'什么', '怎么', '哪', '吗', '吧', '呢', '啊', '嗯', '哦',
|
|
31
|
-
]);
|
|
32
|
-
const CN_CHAR = /[\u4e00-\u9fff\u3400-\u4dbf]/;
|
|
33
|
-
/**
|
|
34
|
-
* 中英文混合分词:中文产出 bigram/trigram(短序列保留整体),
|
|
35
|
-
* 连续的拉丁/数字/路径字符作为整体 token。
|
|
36
|
-
*/
|
|
37
|
-
function tokenize(text) {
|
|
38
|
-
const tokens = [];
|
|
39
|
-
let current = '';
|
|
40
|
-
for (const char of text) {
|
|
41
|
-
if (CN_CHAR.test(char)) {
|
|
42
|
-
current += char;
|
|
43
|
-
}
|
|
44
|
-
else if (/[a-zA-Z0-9_\-/.]/.test(char)) {
|
|
45
|
-
current += char;
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
pushToken(current, tokens);
|
|
49
|
-
current = '';
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
pushToken(current, tokens);
|
|
53
|
-
return tokens;
|
|
54
|
-
}
|
|
55
|
-
function pushToken(current, tokens) {
|
|
56
|
-
if (current.length < 2)
|
|
57
|
-
return;
|
|
58
|
-
if (CN_CHAR.test(current)) {
|
|
59
|
-
for (let i = 0; i <= current.length - 2; i++) {
|
|
60
|
-
tokens.push(current.slice(i, i + 2));
|
|
61
|
-
}
|
|
62
|
-
for (let i = 0; i <= current.length - 3; i++) {
|
|
63
|
-
tokens.push(current.slice(i, i + 3));
|
|
64
|
-
}
|
|
65
|
-
if (current.length <= 6)
|
|
66
|
-
tokens.push(current);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
tokens.push(current);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* 基于 tokenize 的 Jaccard 相似度
|
|
74
|
-
*/
|
|
75
|
-
function jaccardSimilarity(a, b) {
|
|
76
|
-
const setA = new Set(tokenize(a));
|
|
77
|
-
const setB = new Set(tokenize(b));
|
|
78
|
-
const intersection = new Set([...setA].filter(x => setB.has(x)));
|
|
79
|
-
const union = new Set([...setA, ...setB]);
|
|
80
|
-
return union.size === 0 ? 0 : intersection.size / union.size;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* 仅取汉字字符集的 Jaccard 相似度(概念聚类用)
|
|
84
|
-
*/
|
|
85
|
-
function jaccardChinese(a, b) {
|
|
86
|
-
const charsA = new Set(a.split('').filter(c => /[\u4e00-\u9fff]/.test(c)));
|
|
87
|
-
const charsB = new Set(b.split('').filter(c => /[\u4e00-\u9fff]/.test(c)));
|
|
88
|
-
if (charsA.size === 0 || charsB.size === 0)
|
|
89
|
-
return 0;
|
|
90
|
-
const intersection = new Set([...charsA].filter(x => charsB.has(x)));
|
|
91
|
-
const union = new Set([...charsA, ...charsB]);
|
|
92
|
-
return intersection.size / union.size;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* 剥离代码块 / 行内代码 / JSON 片段,保留自然语言
|
|
96
|
-
*/
|
|
97
|
-
function stripCodeBlocks(text) {
|
|
98
|
-
return text
|
|
99
|
-
.replace(/```[\s\S]*?```/g, '')
|
|
100
|
-
.replace(/`[^`]+`/g, '')
|
|
101
|
-
.replace(/\{[^{}]*"[^"]+"\s*:\s*"[^"]*"[^}]*\}/g, '')
|
|
102
|
-
.replace(/\[[\s\S]*?\]/g, '')
|
|
103
|
-
.replace(/\\n/g, ' ')
|
|
104
|
-
.replace(/[{}[\]"':,\\]+/g, ' ');
|
|
105
|
-
}
|
|
106
|
-
/** 是否纯标点/空白 */
|
|
107
|
-
function isPunctuation(str) {
|
|
108
|
-
return /^[,。!?、;:""''()[\]【】「」『』《》〈〉\s]+$/.test(str);
|
|
109
|
-
}
|
|
110
|
-
/** 是否含语义内容(汉字,或 ≥7 字符的合法英文标识词) */
|
|
111
|
-
function hasSemanticContent(phrase) {
|
|
112
|
-
if (/[\u4e00-\u9fff]/.test(phrase))
|
|
113
|
-
return true;
|
|
114
|
-
if (phrase.length >= 7 && /^[a-zA-Z][a-zA-Z0-9_]*[a-zA-Z]$/.test(phrase))
|
|
115
|
-
return true;
|
|
116
|
-
return false;
|
|
117
|
-
}
|
|
118
|
-
/** 是否代码噪声(短拉丁片段 / 常见 JSON 字段名碎片) */
|
|
119
|
-
function isCodeNoise(phrase) {
|
|
120
|
-
if (!/[\u4e00-\u9fff]/.test(phrase) && phrase.length <= 6)
|
|
121
|
-
return true;
|
|
122
|
-
if (/^(?:clla|cood|odde|oppe|laaw|peen|enne|ennc|ddec|deco|ecod|code|type|role|name|text|file|path|tool|user|session)$/i.test(phrase))
|
|
123
|
-
return true;
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=text.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/cli/session-mining/text.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code transcript(.jsonl)读取(工单 19-C)
|
|
3
|
-
*
|
|
4
|
-
* 原 analyze-sessions.findSessions 与 update-user-model.findNewSessions
|
|
5
|
-
* 各持一份解析逻辑,收敛于此。
|
|
6
|
-
*/
|
|
7
|
-
export interface MinedTurn {
|
|
8
|
-
role: string;
|
|
9
|
-
content: string;
|
|
10
|
-
}
|
|
11
|
-
export interface MinedSession {
|
|
12
|
-
/** 会话 ID(文件名去掉 .jsonl,截断至 40 字符) */
|
|
13
|
-
id: string;
|
|
14
|
-
/** 文件修改日期(YYYY-MM-DD) */
|
|
15
|
-
date: string;
|
|
16
|
-
/** 修改时间戳(毫秒) */
|
|
17
|
-
mtimeMs: number;
|
|
18
|
-
turns: MinedTurn[];
|
|
19
|
-
/** 出现过的工具调用名(去重,保持出现顺序) */
|
|
20
|
-
toolCalls: string[];
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* 扫描目录下的 .jsonl transcript 文件
|
|
24
|
-
*
|
|
25
|
-
* 不可读/损坏的行静默跳过(与原实现一致)。
|
|
26
|
-
*/
|
|
27
|
-
export interface TranscriptFilter {
|
|
28
|
-
/** 只读 mtimeMs >= since 的文件(stat 级过滤,命中即不 parse);缺省不过滤 */
|
|
29
|
-
since?: number;
|
|
30
|
-
/** 按会话 ID(文件名去 .jsonl、截断 40 字符)排除(文件名级过滤,不 stat 不 parse);缺省不排除 */
|
|
31
|
-
excludeIds?: string[];
|
|
32
|
-
}
|
|
33
|
-
export declare function readTranscriptSessions(dir: string, filter?: TranscriptFilter): MinedSession[];
|
|
34
|
-
//# sourceMappingURL=transcript.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../../src/cli/session-mining/transcript.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAaD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,gBAAqB,GAAG,YAAY,EAAE,CAyEjG"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Claude Code transcript(.jsonl)读取(工单 19-C)
|
|
4
|
-
*
|
|
5
|
-
* 原 analyze-sessions.findSessions 与 update-user-model.findNewSessions
|
|
6
|
-
* 各持一份解析逻辑,收敛于此。
|
|
7
|
-
*/
|
|
8
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
-
if (k2 === undefined) k2 = k;
|
|
10
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
-
}
|
|
14
|
-
Object.defineProperty(o, k2, desc);
|
|
15
|
-
}) : (function(o, m, k, k2) {
|
|
16
|
-
if (k2 === undefined) k2 = k;
|
|
17
|
-
o[k2] = m[k];
|
|
18
|
-
}));
|
|
19
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
-
}) : function(o, v) {
|
|
22
|
-
o["default"] = v;
|
|
23
|
-
});
|
|
24
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
-
var ownKeys = function(o) {
|
|
26
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
-
var ar = [];
|
|
28
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
-
return ar;
|
|
30
|
-
};
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
41
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.readTranscriptSessions = readTranscriptSessions;
|
|
43
|
-
const fs = __importStar(require("fs"));
|
|
44
|
-
const path = __importStar(require("path"));
|
|
45
|
-
const jsonl_1 = require("../../utils/jsonl");
|
|
46
|
-
function extractText(content) {
|
|
47
|
-
if (typeof content === 'string')
|
|
48
|
-
return content;
|
|
49
|
-
if (Array.isArray(content)) {
|
|
50
|
-
return content
|
|
51
|
-
.filter((b) => b.type === 'text')
|
|
52
|
-
.map((b) => b.text)
|
|
53
|
-
.join(' ');
|
|
54
|
-
}
|
|
55
|
-
return '';
|
|
56
|
-
}
|
|
57
|
-
function readTranscriptSessions(dir, filter = {}) {
|
|
58
|
-
const sessions = [];
|
|
59
|
-
const exclude = filter.excludeIds && filter.excludeIds.length > 0
|
|
60
|
-
? new Set(filter.excludeIds)
|
|
61
|
-
: undefined;
|
|
62
|
-
let files;
|
|
63
|
-
try {
|
|
64
|
-
files = fs.readdirSync(dir);
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
return sessions;
|
|
68
|
-
}
|
|
69
|
-
for (const file of files) {
|
|
70
|
-
if (!file.endsWith('.jsonl'))
|
|
71
|
-
continue;
|
|
72
|
-
const id = file.replace('.jsonl', '').slice(0, 40);
|
|
73
|
-
if (exclude?.has(id))
|
|
74
|
-
continue;
|
|
75
|
-
const filePath = path.join(dir, file);
|
|
76
|
-
let stat;
|
|
77
|
-
try {
|
|
78
|
-
stat = fs.statSync(filePath);
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
if (filter.since !== undefined && stat.mtimeMs < filter.since)
|
|
84
|
-
continue;
|
|
85
|
-
const turns = [];
|
|
86
|
-
const toolCalls = [];
|
|
87
|
-
let records;
|
|
88
|
-
try {
|
|
89
|
-
// 损坏行静默跳过(坏行策略 skip,与原实现一致,harness#82 走 jsonl 正本);
|
|
90
|
-
// 外层 catch 兜文件不可读,沿用原「跳过该文件」语义
|
|
91
|
-
// 计数去向:豁免(harness#100)——读的是外部 Claude Code transcript(非 harness 写入面)。
|
|
92
|
-
// 影响方向如实:坏行使该会话少几条 turn,而 analyze-sessions 的候选按次数阈值筛
|
|
93
|
-
// (frequency>=4 / 跨会话>=2 / confidence=len/10)→ 只会少出候选,不会造出候选,且候选须人审;
|
|
94
|
-
// 告知需改 MinedSession 形状并波及 analyze-sessions/update-user-model 两个调用方,另票收口
|
|
95
|
-
records = (0, jsonl_1.readJsonl)(filePath, 'skip').records;
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
for (const entry of records) {
|
|
101
|
-
try {
|
|
102
|
-
const msg = entry.message;
|
|
103
|
-
if (msg?.role && (msg.content || entry.type === 'user')) {
|
|
104
|
-
turns.push({ role: msg.role, content: extractText(msg.content) });
|
|
105
|
-
}
|
|
106
|
-
if (msg?.role === 'assistant' && Array.isArray(msg.content)) {
|
|
107
|
-
for (const block of msg.content) {
|
|
108
|
-
if (block.type === 'tool_use' && block.name) {
|
|
109
|
-
toolCalls.push(block.name);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
// 单条记录提取异常跳过(原逐行 catch 语义:parse 已由 module skip,此处兜提取)
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
if (turns.length > 0) {
|
|
119
|
-
sessions.push({
|
|
120
|
-
id,
|
|
121
|
-
date: stat.mtime.toISOString().slice(0, 10),
|
|
122
|
-
mtimeMs: stat.mtimeMs,
|
|
123
|
-
turns,
|
|
124
|
-
toolCalls: [...new Set(toolCalls)],
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return sessions;
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=transcript.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../../src/cli/session-mining/transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 会话压缩
|
|
3
|
-
*
|
|
4
|
-
* 三档策略:eviction / summary / checkpoint
|
|
5
|
-
* 不调用 LLM,零 token 成本
|
|
6
|
-
*/
|
|
7
|
-
import type { CompactionConfig, CompactionLevel, SessionMessage } from './types';
|
|
8
|
-
export interface CompactionResult {
|
|
9
|
-
compacted: SessionMessage[];
|
|
10
|
-
summary?: string;
|
|
11
|
-
level: CompactionLevel;
|
|
12
|
-
originalTokens: number;
|
|
13
|
-
compactedTokens: number;
|
|
14
|
-
}
|
|
15
|
-
export declare class SessionCompaction {
|
|
16
|
-
private config;
|
|
17
|
-
constructor(config?: Partial<CompactionConfig>);
|
|
18
|
-
/**
|
|
19
|
-
* 检查是否需要压缩
|
|
20
|
-
*/
|
|
21
|
-
shouldCompact(messages: SessionMessage[], budget: number): boolean;
|
|
22
|
-
/**
|
|
23
|
-
* 执行压缩
|
|
24
|
-
*/
|
|
25
|
-
compact(messages: SessionMessage[], budget: number): CompactionResult;
|
|
26
|
-
/**
|
|
27
|
-
* 轻量压缩:按比例丢最早消息,保留 tool-call 边界对
|
|
28
|
-
*/
|
|
29
|
-
private evictionCompact;
|
|
30
|
-
/**
|
|
31
|
-
* 中等压缩:结构化总结 + 保留最近 N 轮
|
|
32
|
-
*/
|
|
33
|
-
private summaryCompact;
|
|
34
|
-
/**
|
|
35
|
-
* 重型压缩:checkpoint + 清空历史
|
|
36
|
-
*/
|
|
37
|
-
private checkpointCompact;
|
|
38
|
-
/**
|
|
39
|
-
* 生成结构化摘要(零 LLM 成本)
|
|
40
|
-
*/
|
|
41
|
-
generateStructuredSummary(messages: SessionMessage[]): string;
|
|
42
|
-
/**
|
|
43
|
-
* 保留 tool-call 边界对
|
|
44
|
-
*
|
|
45
|
-
* 如果 tool 结果被保留,对应的 tool 调用也要保留
|
|
46
|
-
*/
|
|
47
|
-
private preserveToolCallPairs;
|
|
48
|
-
/**
|
|
49
|
-
* 估算消息的 token 数
|
|
50
|
-
*/
|
|
51
|
-
private estimateMessages;
|
|
52
|
-
/**
|
|
53
|
-
* 获取配置
|
|
54
|
-
*/
|
|
55
|
-
getConfig(): CompactionConfig;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=compaction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/context/compaction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGjF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,eAAe,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAI9C;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAKlE;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAerE;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,yBAAyB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM;IA4B7D;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,SAAS,IAAI,gBAAgB;CAG9B"}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* 会话压缩
|
|
4
|
-
*
|
|
5
|
-
* 三档策略:eviction / summary / checkpoint
|
|
6
|
-
* 不调用 LLM,零 token 成本
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.SessionCompaction = void 0;
|
|
10
|
-
const token_budget_1 = require("./token-budget");
|
|
11
|
-
const types_1 = require("./types");
|
|
12
|
-
class SessionCompaction {
|
|
13
|
-
config;
|
|
14
|
-
constructor(config) {
|
|
15
|
-
this.config = { ...types_1.DEFAULT_COMPACTION_CONFIG, ...config };
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* 检查是否需要压缩
|
|
19
|
-
*/
|
|
20
|
-
shouldCompact(messages, budget) {
|
|
21
|
-
const totalTokens = this.estimateMessages(messages);
|
|
22
|
-
return totalTokens / budget > this.config.triggerRatio;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* 执行压缩
|
|
26
|
-
*/
|
|
27
|
-
compact(messages, budget) {
|
|
28
|
-
const originalTokens = this.estimateMessages(messages);
|
|
29
|
-
switch (this.config.level) {
|
|
30
|
-
case 'eviction':
|
|
31
|
-
return this.evictionCompact(messages, budget, originalTokens);
|
|
32
|
-
case 'summary':
|
|
33
|
-
return this.summaryCompact(messages, budget, originalTokens);
|
|
34
|
-
case 'checkpoint':
|
|
35
|
-
return this.checkpointCompact(messages, budget, originalTokens);
|
|
36
|
-
default:
|
|
37
|
-
return this.evictionCompact(messages, budget, originalTokens);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* 轻量压缩:按比例丢最早消息,保留 tool-call 边界对
|
|
42
|
-
*/
|
|
43
|
-
evictionCompact(messages, budget, originalTokens) {
|
|
44
|
-
const targetTokens = Math.floor(budget * 0.6); // 目标压缩到 60%
|
|
45
|
-
const keepRatio = targetTokens / originalTokens;
|
|
46
|
-
// 至少保留最近 2 条
|
|
47
|
-
const minKeep = Math.min(2, messages.length);
|
|
48
|
-
const keepCount = Math.max(minKeep, Math.floor(messages.length * keepRatio));
|
|
49
|
-
let compacted = messages.slice(-keepCount);
|
|
50
|
-
// 保留 tool-call 边界对
|
|
51
|
-
if (this.config.preserveToolCallPairs) {
|
|
52
|
-
compacted = this.preserveToolCallPairs(messages, compacted);
|
|
53
|
-
}
|
|
54
|
-
const compactedTokens = this.estimateMessages(compacted);
|
|
55
|
-
return {
|
|
56
|
-
compacted,
|
|
57
|
-
level: 'eviction',
|
|
58
|
-
originalTokens,
|
|
59
|
-
compactedTokens,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* 中等压缩:结构化总结 + 保留最近 N 轮
|
|
64
|
-
*/
|
|
65
|
-
summaryCompact(messages, _budget, originalTokens) {
|
|
66
|
-
const recentCount = Math.min(6, messages.length); // 保留最近 6 条
|
|
67
|
-
const recent = messages.slice(-recentCount);
|
|
68
|
-
const older = messages.slice(0, -recentCount);
|
|
69
|
-
// 生成结构化摘要
|
|
70
|
-
const summary = this.generateStructuredSummary(older);
|
|
71
|
-
// 摘要作为系统消息插入
|
|
72
|
-
const summarySessionMessage = {
|
|
73
|
-
role: 'assistant',
|
|
74
|
-
content: `[会话摘要]\n${summary}`,
|
|
75
|
-
timestamp: new Date().toISOString(),
|
|
76
|
-
};
|
|
77
|
-
const compacted = [summarySessionMessage, ...recent];
|
|
78
|
-
const compactedTokens = this.estimateMessages(compacted);
|
|
79
|
-
return {
|
|
80
|
-
compacted,
|
|
81
|
-
summary,
|
|
82
|
-
level: 'summary',
|
|
83
|
-
originalTokens,
|
|
84
|
-
compactedTokens,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* 重型压缩:checkpoint + 清空历史
|
|
89
|
-
*/
|
|
90
|
-
checkpointCompact(messages, _budget, originalTokens) {
|
|
91
|
-
const summary = this.generateStructuredSummary(messages);
|
|
92
|
-
const checkpointSessionMessage = {
|
|
93
|
-
role: 'assistant',
|
|
94
|
-
content: `[Checkpoint]\n${summary}\n\n[历史已压缩,共 ${messages.length} 条消息]`,
|
|
95
|
-
timestamp: new Date().toISOString(),
|
|
96
|
-
};
|
|
97
|
-
const compacted = [checkpointSessionMessage];
|
|
98
|
-
const compactedTokens = this.estimateMessages(compacted);
|
|
99
|
-
return {
|
|
100
|
-
compacted,
|
|
101
|
-
summary,
|
|
102
|
-
level: 'checkpoint',
|
|
103
|
-
originalTokens,
|
|
104
|
-
compactedTokens,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* 生成结构化摘要(零 LLM 成本)
|
|
109
|
-
*/
|
|
110
|
-
generateStructuredSummary(messages) {
|
|
111
|
-
const sections = [];
|
|
112
|
-
// 提取用户目标
|
|
113
|
-
const userSessionMessages = messages.filter(m => m.role === 'user');
|
|
114
|
-
if (userSessionMessages.length > 0) {
|
|
115
|
-
sections.push(`用户目标: ${userSessionMessages[0].content.slice(0, 200)}`);
|
|
116
|
-
}
|
|
117
|
-
// 提取工具调用
|
|
118
|
-
const toolCalls = messages.filter(m => m.role === 'tool');
|
|
119
|
-
if (toolCalls.length > 0) {
|
|
120
|
-
sections.push(`工具调用: ${toolCalls.length} 次`);
|
|
121
|
-
}
|
|
122
|
-
// 提取关键信息
|
|
123
|
-
const assistantSessionMessages = messages.filter(m => m.role === 'assistant');
|
|
124
|
-
if (assistantSessionMessages.length > 0) {
|
|
125
|
-
const lastAssistant = assistantSessionMessages[assistantSessionMessages.length - 1];
|
|
126
|
-
sections.push(`最近响应: ${lastAssistant.content.slice(0, 200)}`);
|
|
127
|
-
}
|
|
128
|
-
sections.push(`消息总数: ${messages.length}`);
|
|
129
|
-
sections.push(`时间范围: ${messages[0]?.timestamp || 'N/A'} → ${messages[messages.length - 1]?.timestamp || 'N/A'}`);
|
|
130
|
-
return sections.join('\n');
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* 保留 tool-call 边界对
|
|
134
|
-
*
|
|
135
|
-
* 如果 tool 结果被保留,对应的 tool 调用也要保留
|
|
136
|
-
*/
|
|
137
|
-
preserveToolCallPairs(all, compacted) {
|
|
138
|
-
const result = [];
|
|
139
|
-
for (const msg of compacted) {
|
|
140
|
-
// 如果是 tool 结果,确保对应的 tool 调用也在
|
|
141
|
-
if (msg.role === 'tool' && msg.toolCallId) {
|
|
142
|
-
const paired = all.find(m => m.toolCallId === msg.toolCallId && m.role === 'assistant');
|
|
143
|
-
if (paired && !compacted.some(m => m === paired)) {
|
|
144
|
-
result.push(paired);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
result.push(msg);
|
|
148
|
-
}
|
|
149
|
-
return result;
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* 估算消息的 token 数
|
|
153
|
-
*/
|
|
154
|
-
estimateMessages(messages) {
|
|
155
|
-
return messages.reduce((sum, m) => sum + token_budget_1.TokenEstimator.estimateText(m.content), 0);
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* 获取配置
|
|
159
|
-
*/
|
|
160
|
-
getConfig() {
|
|
161
|
-
return { ...this.config };
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
exports.SessionCompaction = SessionCompaction;
|
|
165
|
-
//# sourceMappingURL=compaction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/context/compaction.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,iDAAgD;AAEhD,mCAAoD;AAUpD,MAAa,iBAAiB;IACpB,MAAM,CAAmB;IAEjC,YAAY,MAAkC;QAC5C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,iCAAyB,EAAE,GAAG,MAAM,EAAE,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAA0B,EAAE,MAAc;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,QAA0B,EAAE,MAAc;QAChD,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEvD,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YAChE,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YAC/D,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YAClE;gBACE,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAA0B,EAAE,MAAc,EAAE,cAAsB;QACxF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY;QAC3D,MAAM,SAAS,GAAG,YAAY,GAAG,cAAc,CAAC;QAEhD,aAAa;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;QAE7E,IAAI,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;QAE3C,mBAAmB;QACnB,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;YACtC,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEzD,OAAO;YACL,SAAS;YACT,KAAK,EAAE,UAAU;YACjB,cAAc;YACd,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,QAA0B,EAAE,OAAe,EAAE,cAAsB;QACxF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW;QAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QAE9C,UAAU;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAEtD,aAAa;QACb,MAAM,qBAAqB,GAAmB;YAC5C,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,WAAW,OAAO,EAAE;YAC7B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,qBAAqB,EAAE,GAAG,MAAM,CAAC,CAAC;QACrD,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEzD,OAAO;YACL,SAAS;YACT,OAAO;YACP,KAAK,EAAE,SAAS;YAChB,cAAc;YACd,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,QAA0B,EAAE,OAAe,EAAE,cAAsB;QAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAEzD,MAAM,wBAAwB,GAAmB;YAC/C,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,iBAAiB,OAAO,gBAAgB,QAAQ,CAAC,MAAM,OAAO;YACvE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEzD,OAAO;YACL,SAAS;YACT,OAAO;YACP,KAAK,EAAE,YAAY;YACnB,cAAc;YACd,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,QAA0B;QAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,SAAS;QACT,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACpE,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,SAAS,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,SAAS;QACT,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC1D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,SAAS;QACT,MAAM,wBAAwB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAC9E,IAAI,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,aAAa,GAAG,wBAAwB,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpF,QAAQ,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,KAAK,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;QAEjH,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACK,qBAAqB,CAAC,GAAqB,EAAE,SAA2B;QAC9E,MAAM,MAAM,GAAqB,EAAE,CAAC;QAEpC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,8BAA8B;YAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;gBACxF,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC;oBACjD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,QAA0B;QACjD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,6BAAc,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF;AArLD,8CAqLC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CleanStateManager - Session 结束状态管理
|
|
3
|
-
*
|
|
4
|
-
* 确保 Agent 结束时必须"打扫干净",不留烂代码。
|
|
5
|
-
*/
|
|
6
|
-
import type { CleanStateConfig, CleanStateResult, SessionInfo } from '../../types/session';
|
|
7
|
-
export declare class CleanStateManager {
|
|
8
|
-
private config;
|
|
9
|
-
constructor(config?: Partial<CleanStateConfig>);
|
|
10
|
-
onSessionEnd(workDir: string, sessionInfo: SessionInfo): Promise<CleanStateResult>;
|
|
11
|
-
private hasUncommittedChanges;
|
|
12
|
-
private autoCommit;
|
|
13
|
-
private detectBugs;
|
|
14
|
-
private updateProgress;
|
|
15
|
-
}
|
|
16
|
-
export declare const createCleanStateManager: (config?: Partial<CleanStateConfig>) => CleanStateManager;
|
|
17
|
-
//# sourceMappingURL=clean-state.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clean-state.d.ts","sourceRoot":"","sources":["../../../src/core/session/clean-state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAEhB,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAkB7B,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAI5C,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAqC1E,qBAAqB;YASrB,UAAU;YAsBV,UAAU;YAmCV,cAAc;CA8B7B;AAED,eAAO,MAAM,uBAAuB,GAAI,SAAS,OAAO,CAAC,gBAAgB,CAAC,sBAC3C,CAAC"}
|