@dommaker/harness 0.13.2 → 0.14.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 +24 -0
- package/bin/harness-knowledge-check.js +38 -23
- package/bin/harness-knowledge-track.js +30 -4
- package/bin/harness.js +24 -1
- package/dist/cli/commands/diagnose.d.ts +16 -0
- package/dist/cli/commands/diagnose.d.ts.map +1 -0
- package/dist/cli/commands/diagnose.js +195 -0
- package/dist/cli/commands/diagnose.js.map +1 -0
- package/dist/cli/commands/index.d.ts +1 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +4 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/knowledge.d.ts +21 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -1
- package/dist/cli/commands/knowledge.js +155 -4
- package/dist/cli/commands/knowledge.js.map +1 -1
- package/dist/cli/commands/propose.d.ts +18 -0
- package/dist/cli/commands/propose.d.ts.map +1 -0
- package/dist/cli/commands/propose.js +331 -0
- package/dist/cli/commands/propose.js.map +1 -0
- package/dist/cli/commands/traces.d.ts +15 -0
- package/dist/cli/commands/traces.d.ts.map +1 -0
- package/dist/cli/commands/traces.js +167 -0
- package/dist/cli/commands/traces.js.map +1 -0
- package/dist/constraints/definitions.d.ts +39 -0
- package/dist/constraints/definitions.d.ts.map +1 -0
- package/dist/constraints/definitions.js +71 -0
- package/dist/constraints/definitions.js.map +1 -0
- package/dist/constraints/quality.d.ts +11 -0
- package/dist/constraints/quality.d.ts.map +1 -0
- package/dist/constraints/quality.js +257 -0
- package/dist/constraints/quality.js.map +1 -0
- package/dist/constraints/safety.d.ts +13 -0
- package/dist/constraints/safety.d.ts.map +1 -0
- package/dist/constraints/safety.js +103 -0
- package/dist/constraints/safety.js.map +1 -0
- package/dist/core/constraints/definitions.d.ts.map +1 -1
- package/dist/core/constraints/definitions.js +4 -2
- package/dist/core/constraints/definitions.js.map +1 -1
- package/dist/extensions/long-running/constraints.d.ts +38 -0
- package/dist/extensions/long-running/constraints.d.ts.map +1 -0
- package/dist/extensions/long-running/constraints.js +153 -0
- package/dist/extensions/long-running/constraints.js.map +1 -0
- package/dist/extensions/long-running/index.d.ts +30 -0
- package/dist/extensions/long-running/index.d.ts.map +1 -0
- package/dist/extensions/long-running/index.js +50 -0
- package/dist/extensions/long-running/index.js.map +1 -0
- package/dist/extensions/long-running/types.d.ts +154 -0
- package/dist/extensions/long-running/types.d.ts.map +1 -0
- package/dist/extensions/long-running/types.js +9 -0
- package/dist/extensions/long-running/types.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/knowledge/audit.d.ts +76 -0
- package/dist/knowledge/audit.d.ts.map +1 -0
- package/dist/knowledge/audit.js +566 -0
- package/dist/knowledge/audit.js.map +1 -0
- package/dist/knowledge/import.d.ts.map +1 -1
- package/dist/knowledge/import.js +3 -0
- package/dist/knowledge/import.js.map +1 -1
- package/dist/knowledge/index.d.ts +5 -1
- package/dist/knowledge/index.d.ts.map +1 -1
- package/dist/knowledge/index.js +6 -1
- package/dist/knowledge/index.js.map +1 -1
- package/dist/knowledge/ingest.d.ts +27 -0
- package/dist/knowledge/ingest.d.ts.map +1 -1
- package/dist/knowledge/ingest.js +150 -5
- package/dist/knowledge/ingest.js.map +1 -1
- package/dist/knowledge/lifecycle-hooks.d.ts.map +1 -1
- package/dist/knowledge/lifecycle-hooks.js +3 -0
- package/dist/knowledge/lifecycle-hooks.js.map +1 -1
- package/dist/knowledge/lifecycle.d.ts +59 -7
- package/dist/knowledge/lifecycle.d.ts.map +1 -1
- package/dist/knowledge/lifecycle.js +213 -52
- package/dist/knowledge/lifecycle.js.map +1 -1
- package/dist/knowledge/lint.d.ts.map +1 -1
- package/dist/knowledge/lint.js +43 -2
- package/dist/knowledge/lint.js.map +1 -1
- package/dist/knowledge/migration.d.ts +25 -0
- package/dist/knowledge/migration.d.ts.map +1 -0
- package/dist/knowledge/migration.js +96 -0
- package/dist/knowledge/migration.js.map +1 -0
- package/dist/knowledge/query.d.ts +29 -1
- package/dist/knowledge/query.d.ts.map +1 -1
- package/dist/knowledge/query.js +58 -0
- package/dist/knowledge/query.js.map +1 -1
- package/dist/knowledge/store.d.ts +21 -1
- package/dist/knowledge/store.d.ts.map +1 -1
- package/dist/knowledge/store.js +103 -6
- package/dist/knowledge/store.js.map +1 -1
- package/dist/knowledge/types.d.ts +29 -1
- package/dist/knowledge/types.d.ts.map +1 -1
- package/dist/knowledge/types.js +1 -0
- package/dist/knowledge/types.js.map +1 -1
- package/dist/presets/long-running.d.ts +33 -0
- package/dist/presets/long-running.d.ts.map +1 -0
- package/dist/presets/long-running.js +52 -0
- package/dist/presets/long-running.js.map +1 -0
- package/package.json +1 -1
- package/src/cli/commands/__tests__/knowledge.test.ts +167 -0
- package/src/cli/commands/index.ts +1 -1
- package/src/cli/commands/knowledge.ts +175 -4
- package/src/context/__tests__/knowledge-injector.test.ts +3 -0
- package/src/core/constraints/definitions.ts +4 -2
- package/src/dashboard/__tests__/data.test.ts +3 -0
- package/src/dashboard/__tests__/stats.test.ts +3 -0
- package/src/index.ts +3 -1
- package/src/knowledge/CONTEXT.md +29 -7
- package/src/knowledge/__tests__/audit.test.ts +598 -0
- package/src/knowledge/__tests__/doctor.test.ts +27 -0
- package/src/knowledge/__tests__/ingest.test.ts +319 -0
- package/src/knowledge/__tests__/lifecycle-hooks.test.ts +3 -0
- package/src/knowledge/__tests__/lifecycle.test.ts +655 -2
- package/src/knowledge/__tests__/lint.test.ts +51 -0
- package/src/knowledge/__tests__/migration.test.ts +115 -0
- package/src/knowledge/__tests__/query.test.ts +86 -0
- package/src/knowledge/__tests__/reference-tracker.test.ts +3 -0
- package/src/knowledge/__tests__/store.test.ts +207 -0
- package/src/knowledge/audit.ts +640 -0
- package/src/knowledge/import.ts +3 -0
- package/src/knowledge/index.ts +5 -1
- package/src/knowledge/ingest.ts +169 -5
- package/src/knowledge/lifecycle-hooks.ts +3 -0
- package/src/knowledge/lifecycle.ts +218 -49
- package/src/knowledge/lint.ts +43 -2
- package/src/knowledge/migration.ts +73 -0
- package/src/knowledge/query.ts +71 -0
- package/src/knowledge/store.ts +100 -6
- package/src/knowledge/types.ts +33 -1
- package/src/monitoring/__tests__/knowledge-doctor.test.ts +3 -0
- package/src/monitoring/__tests__/knowledge-evolver.test.ts +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,30 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
6
6
|
|
|
7
|
+
## [0.14.0] - 2026-06-04
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **ConsumptionMode + KnowledgeOrigin types** (AS-021 P1): `rule | context | signal | reference` 消费模式,`system | agent | human | external` 知识来源
|
|
11
|
+
- **Per-mode lifecycle** (AS-021 P2): rule/context/signal 三条独立生命周期路径
|
|
12
|
+
- **queryByMode + consume()** (AS-021 P3): 按 consumptionMode 查询 + 消费时 recordReference
|
|
13
|
+
- **External content sanitization** (AS-021 P4): `ingestExternal()` 剥离 prompt injection 模式 + 长度限制
|
|
14
|
+
- **Migration script + CLI** (AS-021 P5): `harness knowledge migrate` 旧条目自动标记 consumptionMode
|
|
15
|
+
- **6-dimension quality audit engine**: `harness knowledge audit [--fix] [--dry-run]`,健康分 + 自动修复
|
|
16
|
+
- **KR4 snapshot mechanism**: 每日 index.json 快照 + 30 天存活率统计
|
|
17
|
+
- **GAP-11 promotion content quality gate**: draft→verified 要求 content ≥ 50 字符
|
|
18
|
+
- **Semantic dedup + test ID interception**: KnowledgeIngest 去重增强
|
|
19
|
+
- **Execution success rate tracking**: Path C 自动晋升依据
|
|
20
|
+
- **Human/auto contributor classification**: 晋升来源区分
|
|
21
|
+
- **D6 flywheel stats**: `harness knowledge stats` 展示飞轮指标
|
|
22
|
+
- **hooks → Agent Event Protocol API** (B9-016): 通用 hook 管线暴露为 API
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- **飞轮质量审计 5 项根因修复**: 噪音治理 + 资源优化
|
|
26
|
+
- **B12 噪音治理**: 低质量条目过滤 + 资源优化
|
|
27
|
+
- **E3 findFile 碰撞修复**: 文件查找哈希碰撞
|
|
28
|
+
- **`no_delete_without_context` 增强**: 零引用 ≠ 无价值
|
|
29
|
+
- **undefined tags/applicablePhases guard**: matchesFilter 空值保护
|
|
30
|
+
|
|
7
31
|
## [0.13.0] - 2026-05-26
|
|
8
32
|
|
|
9
33
|
### Breaking
|
|
@@ -14,7 +14,6 @@ const path = require('path');
|
|
|
14
14
|
const os = require('os');
|
|
15
15
|
const STATE_FILE = '/tmp/claude-knowledge-capture-state.json';
|
|
16
16
|
const LOG_FILE = '/tmp/claude-knowledge-hooks.log';
|
|
17
|
-
const EVENTS_FILE = path.join(os.homedir(), 'events', 'studio.jsonl');
|
|
18
17
|
const UNIQUE_DIR_THRESHOLD = 10;
|
|
19
18
|
|
|
20
19
|
function log(level, message, data) {
|
|
@@ -79,30 +78,46 @@ try {
|
|
|
79
78
|
|
|
80
79
|
console.log(JSON.stringify({ systemMessage: message }));
|
|
81
80
|
}
|
|
82
|
-
//
|
|
81
|
+
// B9-016: POST agent events to Studio API
|
|
83
82
|
try {
|
|
83
|
+
const events = state.events || [];
|
|
84
|
+
const sessionId = state.sessionId || ('cc-' + Date.now());
|
|
84
85
|
const now = Date.now();
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
86
|
+
|
|
87
|
+
// Append session:end event
|
|
88
|
+
events.push({
|
|
89
|
+
sessionId,
|
|
90
|
+
agentId: 'claude-code',
|
|
91
|
+
timestamp: now,
|
|
92
|
+
type: 'session:end',
|
|
93
|
+
payload: {
|
|
94
|
+
success: true,
|
|
95
|
+
durationMs: state.startTime ? now - state.startTime : 0,
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
// Read Studio API URL from env or default
|
|
100
|
+
const studioUrl = process.env.STUDIO_API_URL || 'http://127.0.0.1:13101';
|
|
101
|
+
const token = process.env.STUDIO_API_TOKEN || '';
|
|
102
|
+
|
|
103
|
+
if (events.length > 0 && token) {
|
|
104
|
+
const { execSync } = require('child_process');
|
|
105
|
+
const body = JSON.stringify(events);
|
|
106
|
+
try {
|
|
107
|
+
execSync(
|
|
108
|
+
`curl -s -X POST "${studioUrl}/api/v1/events/agent-events" ` +
|
|
109
|
+
`-H "Content-Type: application/json" ` +
|
|
110
|
+
`-H "Authorization: Bearer ${token}" ` +
|
|
111
|
+
`-d '${body.replace(/'/g, "'\\''")}'`,
|
|
112
|
+
{ timeout: 10000, stdio: 'pipe' }
|
|
113
|
+
);
|
|
114
|
+
log('info', 'agent-events-posted', { count: events.length, sessionId });
|
|
115
|
+
} catch (e) {
|
|
116
|
+
log('warn', 'agent-events-post-failed', { error: (e.message || String(e)).slice(0, 200) });
|
|
117
|
+
}
|
|
118
|
+
} else if (events.length > 0 && !token) {
|
|
119
|
+
log('info', 'agent-events-skipped-no-token', { count: events.length });
|
|
120
|
+
}
|
|
106
121
|
} catch {}
|
|
107
122
|
|
|
108
123
|
// Auto-ingest: scan memory files with ingest:true → call local-rag API
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* PostToolUse hook — track deep analysis signals
|
|
3
|
+
* PostToolUse hook — track deep analysis signals + collect AgentEvents
|
|
4
4
|
*
|
|
5
5
|
* Updates state file with:
|
|
6
6
|
* - planned: EnterPlanMode was called
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* - readDirs: Set of unique directories Read was called on
|
|
9
9
|
* - captured: Write to .harness/knowledge-docs/ or .harness/knowledge/
|
|
10
10
|
* - turnCount: session turn counter
|
|
11
|
+
* - events: AgentEvent[] (B9-016) — buffered for batch POST on session:end
|
|
11
12
|
*
|
|
12
|
-
* Usage: PostToolUse hook with matcher "EnterPlanMode|Agent|Read|Write|
|
|
13
|
+
* Usage: PostToolUse hook with matcher "EnterPlanMode|Agent|Read|Write|Edit|Bash"
|
|
13
14
|
*/
|
|
14
15
|
|
|
15
16
|
const fs = require('fs');
|
|
@@ -47,7 +48,9 @@ function loadState() {
|
|
|
47
48
|
return JSON.parse(fs.readFileSync(STATE_FILE, 'utf-8'));
|
|
48
49
|
}
|
|
49
50
|
} catch {}
|
|
50
|
-
|
|
51
|
+
// B9-016: generate sessionId for this Claude Code session
|
|
52
|
+
const sessionId = 'cc-' + Date.now() + '-' + Math.random().toString(36).slice(2, 8);
|
|
53
|
+
return { planned: false, explored: false, readDirs: [], captured: false, sessionId, events: [], startTime: Date.now() };
|
|
51
54
|
}
|
|
52
55
|
|
|
53
56
|
function updateState(state, event) {
|
|
@@ -75,13 +78,36 @@ function updateState(state, event) {
|
|
|
75
78
|
}
|
|
76
79
|
}
|
|
77
80
|
|
|
78
|
-
if (toolName === 'Write') {
|
|
81
|
+
if (toolName === 'Write' || toolName === 'Edit') {
|
|
79
82
|
const input = event.tool_input || {};
|
|
80
83
|
const filePath = input.file_path || '';
|
|
81
84
|
if (filePath.includes('.harness/knowledge-docs/') || filePath.includes('.harness/knowledge/')) {
|
|
82
85
|
state.captured = true;
|
|
83
86
|
log('info', 'captured', { file: filePath });
|
|
84
87
|
}
|
|
88
|
+
// B9-016: collect file:change event
|
|
89
|
+
if (filePath && !filePath.includes('.harness/')) {
|
|
90
|
+
state.events.push({
|
|
91
|
+
sessionId: state.sessionId,
|
|
92
|
+
agentId: 'claude-code',
|
|
93
|
+
timestamp: Date.now(),
|
|
94
|
+
type: 'file:change',
|
|
95
|
+
payload: { path: filePath, action: toolName === 'Write' ? 'create' : 'modify' },
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (toolName === 'Bash') {
|
|
101
|
+
const input = event.tool_input || {};
|
|
102
|
+
const command = input.command || '';
|
|
103
|
+
// B9-016: collect tool:call event
|
|
104
|
+
state.events.push({
|
|
105
|
+
sessionId: state.sessionId,
|
|
106
|
+
agentId: 'claude-code',
|
|
107
|
+
timestamp: Date.now(),
|
|
108
|
+
type: 'tool:call',
|
|
109
|
+
payload: { tool: 'Bash', command: command.slice(0, 200) },
|
|
110
|
+
});
|
|
85
111
|
}
|
|
86
112
|
}
|
|
87
113
|
|
package/bin/harness.js
CHANGED
|
@@ -39,6 +39,9 @@ const {
|
|
|
39
39
|
knowledgeUpsert,
|
|
40
40
|
knowledgeSyncStatus,
|
|
41
41
|
knowledgeSyncRag,
|
|
42
|
+
knowledgeAudit,
|
|
43
|
+
knowledgeSnapshot,
|
|
44
|
+
knowledgeMigrate,
|
|
42
45
|
failureList,
|
|
43
46
|
failureStats,
|
|
44
47
|
failureClear,
|
|
@@ -351,7 +354,7 @@ program
|
|
|
351
354
|
// ========================================
|
|
352
355
|
program
|
|
353
356
|
.command('knowledge [subcommand] [arg]')
|
|
354
|
-
.description('知识库管理(list/search/import/decay/stats)')
|
|
357
|
+
.description('知识库管理(list/search/import/decay/stats/audit)')
|
|
355
358
|
.alias('kb')
|
|
356
359
|
.option('-p, --project-path <path>', '项目路径')
|
|
357
360
|
.option('--type <types>', '按类型过滤(逗号分隔)')
|
|
@@ -365,6 +368,10 @@ program
|
|
|
365
368
|
.option('--content <content>', '知识内容 Markdown(用于 upsert)')
|
|
366
369
|
.option('--file <path>', '从文件读取内容(用于 upsert)')
|
|
367
370
|
.option('--source <source>', '知识来源 (analyst/cli/design)', 'cli')
|
|
371
|
+
.option('--fix', '自动修复(用于 audit)', false)
|
|
372
|
+
.option('--dry-run', '只输出报告不修改(用于 audit)', false)
|
|
373
|
+
.option('--threshold <n>', '短内容阈值(字符数,用于 audit)', '50')
|
|
374
|
+
.option('--dir <path>', '知识库目录(覆盖默认路径)')
|
|
368
375
|
.option('--json', 'JSON 格式输出', false)
|
|
369
376
|
.action(async (subcommand, arg, options) => {
|
|
370
377
|
const opts = { projectPath: options.projectPath, json: options.json };
|
|
@@ -408,6 +415,22 @@ program
|
|
|
408
415
|
source: options.source || 'cli',
|
|
409
416
|
});
|
|
410
417
|
break;
|
|
418
|
+
case 'audit':
|
|
419
|
+
case 'a':
|
|
420
|
+
await knowledgeAudit({
|
|
421
|
+
...opts,
|
|
422
|
+
fix: options.fix,
|
|
423
|
+
dryRun: options.dryRun,
|
|
424
|
+
threshold: options.threshold,
|
|
425
|
+
dir: options.dir,
|
|
426
|
+
});
|
|
427
|
+
break;
|
|
428
|
+
case 'snapshot':
|
|
429
|
+
knowledgeSnapshot({ ...opts, dir: options.dir });
|
|
430
|
+
break;
|
|
431
|
+
case 'migrate':
|
|
432
|
+
knowledgeMigrate({ ...opts, dir: options.dir });
|
|
433
|
+
break;
|
|
411
434
|
default:
|
|
412
435
|
// 无子命令时显示帮助
|
|
413
436
|
if (!subcommand) {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnose CLI 命令
|
|
3
|
+
*
|
|
4
|
+
* 运行诊断分析异常
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* diagnose 命令
|
|
8
|
+
*/
|
|
9
|
+
export declare function diagnoseCommand(subcommand: string, options: {
|
|
10
|
+
hours?: number;
|
|
11
|
+
constraintId?: string;
|
|
12
|
+
anomalyId?: string;
|
|
13
|
+
format?: 'json' | 'text';
|
|
14
|
+
save?: boolean;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=diagnose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/diagnose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Diagnose CLI 命令
|
|
4
|
+
*
|
|
5
|
+
* 运行诊断分析异常
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.diagnoseCommand = diagnoseCommand;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const traces_1 = require("../../monitoring/traces");
|
|
45
|
+
const trace_analyzer_1 = require("../../monitoring/trace-analyzer");
|
|
46
|
+
const constraint_doctor_1 = require("../../monitoring/constraint-doctor");
|
|
47
|
+
/**
|
|
48
|
+
* diagnose 命令
|
|
49
|
+
*/
|
|
50
|
+
async function diagnoseCommand(subcommand, options) {
|
|
51
|
+
switch (subcommand) {
|
|
52
|
+
case 'run':
|
|
53
|
+
await runDiagnose(options);
|
|
54
|
+
break;
|
|
55
|
+
case 'show':
|
|
56
|
+
await showDiagnose(options);
|
|
57
|
+
break;
|
|
58
|
+
case 'list':
|
|
59
|
+
await listDiagnoses(options);
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
console.log('Usage: harness diagnose <subcommand>');
|
|
63
|
+
console.log('');
|
|
64
|
+
console.log('Subcommands:');
|
|
65
|
+
console.log(' run Run diagnosis on detected anomalies');
|
|
66
|
+
console.log(' show Show a specific diagnosis result');
|
|
67
|
+
console.log(' list List all diagnosis results');
|
|
68
|
+
console.log('');
|
|
69
|
+
console.log('Options:');
|
|
70
|
+
console.log(' --hours <n> Analyze last N hours (default: 24)');
|
|
71
|
+
console.log(' --constraint <id> Filter by constraint ID');
|
|
72
|
+
console.log(' --anomaly <id> Show specific anomaly diagnosis');
|
|
73
|
+
console.log(' --format <format> Output format: json or text (default: text)');
|
|
74
|
+
console.log(' --save Save diagnosis to file');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 运行诊断
|
|
79
|
+
*/
|
|
80
|
+
async function runDiagnose(options) {
|
|
81
|
+
const hours = options.hours || 24;
|
|
82
|
+
const analyzer = (0, trace_analyzer_1.createAnalyzer)();
|
|
83
|
+
const doctor = (0, constraint_doctor_1.createDoctor)();
|
|
84
|
+
// 1. 检测异常
|
|
85
|
+
const anomalies = analyzer.runDailyAnomalyCheck();
|
|
86
|
+
// 过滤特定约束
|
|
87
|
+
let filteredAnomalies = anomalies;
|
|
88
|
+
if (options.constraintId) {
|
|
89
|
+
filteredAnomalies = anomalies.filter(a => a.constraintId === options.constraintId);
|
|
90
|
+
}
|
|
91
|
+
if (filteredAnomalies.length === 0) {
|
|
92
|
+
console.log('✅ No anomalies detected. No diagnosis needed.');
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
console.log(`🔍 Detected ${filteredAnomalies.length} anomalies, running diagnosis...`);
|
|
96
|
+
console.log('');
|
|
97
|
+
// 2. 获取 traces
|
|
98
|
+
const collector = (0, traces_1.getTraceCollector)();
|
|
99
|
+
const traces = collector.readRecent(hours);
|
|
100
|
+
// 3. 运行诊断
|
|
101
|
+
const diagnoses = [];
|
|
102
|
+
for (const anomaly of filteredAnomalies) {
|
|
103
|
+
doctor.setData(traces.filter(t => t.constraintId === anomaly.constraintId));
|
|
104
|
+
const diagnosis = await doctor.diagnose(anomaly);
|
|
105
|
+
diagnoses.push(diagnosis);
|
|
106
|
+
// 保存诊断
|
|
107
|
+
if (options.save) {
|
|
108
|
+
const outputPath = `.harness/diagnoses/${diagnosis.anomalyId}.json`;
|
|
109
|
+
doctor.saveDiagnosis(diagnosis, outputPath);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// 4. 输出结果
|
|
113
|
+
if (options.format === 'json') {
|
|
114
|
+
console.log(JSON.stringify(diagnoses, null, 2));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
for (const diagnosis of diagnoses) {
|
|
118
|
+
console.log(doctor.generateReport(diagnosis));
|
|
119
|
+
console.log('---');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// 5. 统计
|
|
123
|
+
const needsChange = diagnoses.filter(d => d.needsChange).length;
|
|
124
|
+
console.log('');
|
|
125
|
+
console.log(`📊 Summary: ${needsChange} diagnoses need constraint changes`);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 显示特定诊断
|
|
129
|
+
*/
|
|
130
|
+
async function showDiagnose(options) {
|
|
131
|
+
if (!options.anomalyId) {
|
|
132
|
+
console.log('❌ Please specify --anomaly <id>');
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const doctor = (0, constraint_doctor_1.createDoctor)();
|
|
136
|
+
const diagnosisPath = `.harness/diagnoses/${options.anomalyId}.json`;
|
|
137
|
+
if (!fs.existsSync(diagnosisPath)) {
|
|
138
|
+
console.log(`❌ Diagnosis not found: ${options.anomalyId}`);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const diagnosis = doctor.loadDiagnosis(diagnosisPath);
|
|
142
|
+
if (options.format === 'json') {
|
|
143
|
+
console.log(JSON.stringify(diagnosis, null, 2));
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
console.log(doctor.generateReport(diagnosis));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 列出所有诊断
|
|
151
|
+
*/
|
|
152
|
+
async function listDiagnoses(options) {
|
|
153
|
+
const diagnosesDir = '.harness/diagnoses';
|
|
154
|
+
if (!fs.existsSync(diagnosesDir)) {
|
|
155
|
+
console.log('❌ No diagnoses found. Run `harness diagnose run` first.');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const files = fs.readdirSync(diagnosesDir)
|
|
159
|
+
.filter(f => f.endsWith('.json'));
|
|
160
|
+
if (files.length === 0) {
|
|
161
|
+
console.log('❌ No diagnoses found.');
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const doctor = (0, constraint_doctor_1.createDoctor)();
|
|
165
|
+
const diagnoses = files.map(f => {
|
|
166
|
+
const content = fs.readFileSync(path.join(diagnosesDir, f), 'utf-8');
|
|
167
|
+
return JSON.parse(content);
|
|
168
|
+
});
|
|
169
|
+
if (options.format === 'json') {
|
|
170
|
+
console.log(JSON.stringify(diagnoses.map(d => ({
|
|
171
|
+
anomalyId: d.anomalyId,
|
|
172
|
+
constraintId: d.constraintId,
|
|
173
|
+
needsChange: d.needsChange,
|
|
174
|
+
urgency: d.urgency,
|
|
175
|
+
})), null, 2));
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
console.log('📋 Diagnosis List');
|
|
179
|
+
console.log('');
|
|
180
|
+
for (const diagnosis of diagnoses) {
|
|
181
|
+
const urgencyEmoji = {
|
|
182
|
+
low: '🟢',
|
|
183
|
+
medium: '🟡',
|
|
184
|
+
high: '🔴',
|
|
185
|
+
}[diagnosis.urgency] || '⚪';
|
|
186
|
+
console.log(`${urgencyEmoji} ${diagnosis.anomalyId}`);
|
|
187
|
+
console.log(` Constraint: ${diagnosis.constraintId}`);
|
|
188
|
+
console.log(` Needs Change: ${diagnosis.needsChange ? 'Yes' : 'No'}`);
|
|
189
|
+
console.log(` Urgency: ${diagnosis.urgency}`);
|
|
190
|
+
console.log('');
|
|
191
|
+
}
|
|
192
|
+
console.log(`Total: ${diagnoses.length} diagnoses`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=diagnose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../../src/cli/commands/diagnose.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export { contract, validateSchema, type ContractOptions } from './contract';
|
|
|
16
16
|
export { review, reviewStatus, type ReviewOptions } from './review';
|
|
17
17
|
export { executeCommand, type CommandCheckOptions } from './command';
|
|
18
18
|
export { syncDocs, type SyncDocsOptions } from './sync-docs';
|
|
19
|
-
export { knowledgeList, knowledgeSearch, knowledgeImport, knowledgeDecay, knowledgeStats, knowledgeUpsert, knowledgeSyncStatus, knowledgeSyncRag, type KnowledgeOptions, type KnowledgeUpsertOptions } from './knowledge';
|
|
19
|
+
export { knowledgeList, knowledgeSearch, knowledgeImport, knowledgeDecay, knowledgeStats, knowledgeUpsert, knowledgeSyncStatus, knowledgeSyncRag, knowledgeAudit, knowledgeSnapshot, knowledgeMigrate, type KnowledgeOptions, type KnowledgeUpsertOptions } from './knowledge';
|
|
20
20
|
export { failureList, failureStats, failureClear, type FailureOptions } from './failure';
|
|
21
21
|
export { postevalPlan, type PostEvalPlanOptions } from './posteval-plan';
|
|
22
22
|
export { release, type ReleaseOptions } from './release';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC/Q,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* CLI 命令导出
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getConstraintsMeta = exports.constraints = exports.updateUserModel = exports.analyzeSessions = exports.release = exports.postevalPlan = exports.failureClear = exports.failureStats = exports.failureList = exports.knowledgeSyncRag = exports.knowledgeSyncStatus = exports.knowledgeUpsert = exports.knowledgeStats = exports.knowledgeDecay = exports.knowledgeImport = exports.knowledgeSearch = exports.knowledgeList = exports.syncDocs = exports.executeCommand = exports.reviewStatus = exports.review = exports.validateSchema = exports.contract = exports.auditDetails = exports.security = exports.performance = exports.listAcceptanceCriteria = exports.acceptance = exports.listSpecTypes = exports.specValidate = exports.flow = exports.status = exports.report = exports.init = exports.checkCoverage = exports.runPassesGate = exports.DEFAULT_CHECKPOINTS = exports.createExampleCheckpoint = exports.validate = exports.listLaws = exports.check = void 0;
|
|
6
|
+
exports.getConstraintsMeta = exports.constraints = exports.updateUserModel = exports.analyzeSessions = exports.release = exports.postevalPlan = exports.failureClear = exports.failureStats = exports.failureList = exports.knowledgeMigrate = exports.knowledgeSnapshot = exports.knowledgeAudit = exports.knowledgeSyncRag = exports.knowledgeSyncStatus = exports.knowledgeUpsert = exports.knowledgeStats = exports.knowledgeDecay = exports.knowledgeImport = exports.knowledgeSearch = exports.knowledgeList = exports.syncDocs = exports.executeCommand = exports.reviewStatus = exports.review = exports.validateSchema = exports.contract = exports.auditDetails = exports.security = exports.performance = exports.listAcceptanceCriteria = exports.acceptance = exports.listSpecTypes = exports.specValidate = exports.flow = exports.status = exports.report = exports.init = exports.checkCoverage = exports.runPassesGate = exports.DEFAULT_CHECKPOINTS = exports.createExampleCheckpoint = exports.validate = exports.listLaws = exports.check = void 0;
|
|
7
7
|
var check_1 = require("./check");
|
|
8
8
|
Object.defineProperty(exports, "check", { enumerable: true, get: function () { return check_1.check; } });
|
|
9
9
|
Object.defineProperty(exports, "listLaws", { enumerable: true, get: function () { return check_1.listLaws; } });
|
|
@@ -52,6 +52,9 @@ Object.defineProperty(exports, "knowledgeStats", { enumerable: true, get: functi
|
|
|
52
52
|
Object.defineProperty(exports, "knowledgeUpsert", { enumerable: true, get: function () { return knowledge_1.knowledgeUpsert; } });
|
|
53
53
|
Object.defineProperty(exports, "knowledgeSyncStatus", { enumerable: true, get: function () { return knowledge_1.knowledgeSyncStatus; } });
|
|
54
54
|
Object.defineProperty(exports, "knowledgeSyncRag", { enumerable: true, get: function () { return knowledge_1.knowledgeSyncRag; } });
|
|
55
|
+
Object.defineProperty(exports, "knowledgeAudit", { enumerable: true, get: function () { return knowledge_1.knowledgeAudit; } });
|
|
56
|
+
Object.defineProperty(exports, "knowledgeSnapshot", { enumerable: true, get: function () { return knowledge_1.knowledgeSnapshot; } });
|
|
57
|
+
Object.defineProperty(exports, "knowledgeMigrate", { enumerable: true, get: function () { return knowledge_1.knowledgeMigrate; } });
|
|
55
58
|
var failure_1 = require("./failure");
|
|
56
59
|
Object.defineProperty(exports, "failureList", { enumerable: true, get: function () { return failure_1.failureList; } });
|
|
57
60
|
Object.defineProperty(exports, "failureStats", { enumerable: true, get: function () { return failure_1.failureStats; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iCAA6D;AAApD,8FAAA,KAAK,OAAA;AAAE,iGAAA,QAAQ,OAAA;AACxB,uCAA0G;AAAjG,oGAAA,QAAQ,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAC/D,6CAAqF;AAA5E,4GAAA,aAAa,OAAA;AAAE,4GAAA,aAAa,OAAA;AACrC,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,+BAA+E;AAAtE,oGAAA,YAAY,OAAA;AAAE,qGAAA,aAAa,OAAA;AACpC,2CAA0F;AAAjF,wGAAA,UAAU,OAAA;AAAE,oHAAA,sBAAsB,OAAA;AAC3C,6CAAqE;AAA5D,0GAAA,WAAW,OAAA;AACpB,uCAA0E;AAAjE,oGAAA,QAAQ,OAAA;AAAE,wGAAA,YAAY,OAAA;AAC/B,uCAA4E;AAAnE,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,mCAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC7B,qCAAqE;AAA5D,yGAAA,cAAc,OAAA;AACvB,yCAA6D;AAApD,qGAAA,QAAQ,OAAA;AACjB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iCAA6D;AAApD,8FAAA,KAAK,OAAA;AAAE,iGAAA,QAAQ,OAAA;AACxB,uCAA0G;AAAjG,oGAAA,QAAQ,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAC/D,6CAAqF;AAA5E,4GAAA,aAAa,OAAA;AAAE,4GAAA,aAAa,OAAA;AACrC,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,+BAA+E;AAAtE,oGAAA,YAAY,OAAA;AAAE,qGAAA,aAAa,OAAA;AACpC,2CAA0F;AAAjF,wGAAA,UAAU,OAAA;AAAE,oHAAA,sBAAsB,OAAA;AAC3C,6CAAqE;AAA5D,0GAAA,WAAW,OAAA;AACpB,uCAA0E;AAAjE,oGAAA,QAAQ,OAAA;AAAE,wGAAA,YAAY,OAAA;AAC/B,uCAA4E;AAAnE,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,mCAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC7B,qCAAqE;AAA5D,yGAAA,cAAc,OAAA;AACvB,yCAA6D;AAApD,qGAAA,QAAQ,OAAA;AACjB,yCAA+Q;AAAtQ,0GAAA,aAAa,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AACrM,qCAAyF;AAAhF,sGAAA,WAAW,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,uGAAA,YAAY,OAAA;AAChD,iDAAyE;AAAhE,6GAAA,YAAY,OAAA;AACrB,qCAAyD;AAAhD,kGAAA,OAAO,OAAA;AAChB,uDAAkF;AAAzE,mHAAA,eAAe,OAAA;AACxB,yDAAmF;AAA1E,oHAAA,eAAe,OAAA;AACxB,6CAAsF;AAA7E,0GAAA,WAAW,OAAA;AAAE,iHAAA,kBAAkB,OAAA"}
|
|
@@ -61,4 +61,25 @@ export declare function knowledgeSyncRag(options: KnowledgeOptions): Promise<voi
|
|
|
61
61
|
* 知识同步状态:检测所有 tracked scope 的新鲜度
|
|
62
62
|
*/
|
|
63
63
|
export declare function knowledgeSyncStatus(options: KnowledgeOptions): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* 知识库质量审计
|
|
66
|
+
*/
|
|
67
|
+
export declare function knowledgeAudit(options: KnowledgeOptions & {
|
|
68
|
+
fix?: boolean;
|
|
69
|
+
dryRun?: boolean;
|
|
70
|
+
threshold?: number;
|
|
71
|
+
dir?: string;
|
|
72
|
+
}): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* 知识库快照(KR4 存活率追踪)
|
|
75
|
+
*/
|
|
76
|
+
export declare function knowledgeSnapshot(options: KnowledgeOptions & {
|
|
77
|
+
dir?: string;
|
|
78
|
+
}): void;
|
|
79
|
+
/**
|
|
80
|
+
* 知识库迁移 — 为现有条目添加 AS-021 新字段
|
|
81
|
+
*/
|
|
82
|
+
export declare function knowledgeMigrate(options: KnowledgeOptions & {
|
|
83
|
+
dir?: string;
|
|
84
|
+
}): void;
|
|
64
85
|
//# sourceMappingURL=knowledge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/knowledge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/knowledge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAsChB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,gBAAgB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAChE,OAAO,CAAC,IAAI,CAAC,CA+Cf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB7E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D7E;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDpF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B/E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ClF;AAQD;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAC/D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFhB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUpF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA4BnF"}
|