@winspan/claude-forge 0.4.8 → 0.5.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/README.md +7 -7
- package/dist/autopilot/intent-engine.d.ts +21 -2
- package/dist/autopilot/intent-engine.d.ts.map +1 -1
- package/dist/autopilot/intent-engine.js +66 -5
- package/dist/autopilot/intent-engine.js.map +1 -1
- package/dist/autopilot/rule-distiller.d.ts +38 -0
- package/dist/autopilot/rule-distiller.d.ts.map +1 -0
- package/dist/autopilot/rule-distiller.js +152 -0
- package/dist/autopilot/rule-distiller.js.map +1 -0
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +85 -0
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/daemon/engine-registry/init-autopilot.js +1 -1
- package/dist/daemon/engine-registry/init-autopilot.js.map +1 -1
- package/dist/daemon/engine-registry.d.ts.map +1 -1
- package/dist/daemon/engine-registry.js +3 -0
- package/dist/daemon/engine-registry.js.map +1 -1
- package/dist/daemon/handler-context.d.ts +3 -1
- package/dist/daemon/handler-context.d.ts.map +1 -1
- package/dist/daemon/handlers/session-cleanup.d.ts +6 -0
- package/dist/daemon/handlers/session-cleanup.d.ts.map +1 -1
- package/dist/daemon/handlers/session-cleanup.js +49 -0
- package/dist/daemon/handlers/session-cleanup.js.map +1 -1
- package/dist/daemon/handlers/stop-handler.d.ts.map +1 -1
- package/dist/daemon/handlers/stop-handler.js +40 -10
- package/dist/daemon/handlers/stop-handler.js.map +1 -1
- package/dist/daemon/handlers/user-prompt-handler.d.ts +18 -0
- package/dist/daemon/handlers/user-prompt-handler.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt-handler.js +175 -9
- package/dist/daemon/handlers/user-prompt-handler.js.map +1 -1
- package/dist/knowledge/graph.d.ts +53 -0
- package/dist/knowledge/graph.d.ts.map +1 -0
- package/dist/knowledge/graph.js +142 -0
- package/dist/knowledge/graph.js.map +1 -0
- package/dist/pattern-engine/index.d.ts +4 -0
- package/dist/pattern-engine/index.d.ts.map +1 -1
- package/dist/pattern-engine/index.js +4 -0
- package/dist/pattern-engine/index.js.map +1 -1
- package/dist/pipeline/index.d.ts +8 -2
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +41 -0
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/template-registry.d.ts +40 -0
- package/dist/pipeline/template-registry.d.ts.map +1 -0
- package/dist/pipeline/template-registry.js +222 -0
- package/dist/pipeline/template-registry.js.map +1 -0
- package/dist/pipeline/template-router.d.ts +32 -0
- package/dist/pipeline/template-router.d.ts.map +1 -0
- package/dist/pipeline/template-router.js +117 -0
- package/dist/pipeline/template-router.js.map +1 -0
- package/dist/pipeline/types.d.ts +55 -0
- package/dist/pipeline/types.d.ts.map +1 -1
- package/dist/pipeline/types.js.map +1 -1
- package/dist/retrospective/index.d.ts +2 -7
- package/dist/retrospective/index.d.ts.map +1 -1
- package/dist/retrospective/index.js +15 -22
- package/dist/retrospective/index.js.map +1 -1
- package/dist/retrospective/satisfaction-inferrer.d.ts +37 -0
- package/dist/retrospective/satisfaction-inferrer.d.ts.map +1 -0
- package/dist/retrospective/satisfaction-inferrer.js +137 -0
- package/dist/retrospective/satisfaction-inferrer.js.map +1 -0
- package/dist/storage/index.d.ts +74 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/sqlite.d.ts +84 -0
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +232 -2
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/utils/latency-tracer.d.ts +25 -0
- package/dist/utils/latency-tracer.d.ts.map +1 -0
- package/dist/utils/latency-tracer.js +53 -0
- package/dist/utils/latency-tracer.js.map +1 -0
- package/dist/utils/plan-reader.d.ts +22 -4
- package/dist/utils/plan-reader.d.ts.map +1 -1
- package/dist/utils/plan-reader.js +62 -16
- package/dist/utils/plan-reader.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,14 +7,14 @@ SDLC 智能编排引擎 — 透明旁听 Claude Code 对话,让 Claude 越用
|
|
|
7
7
|
## 核心功能
|
|
8
8
|
|
|
9
9
|
- **意图识别**:自动分析每条指令的复杂度,决定走直接执行还是多阶段编排
|
|
10
|
-
- **Pattern 工作流**:AI 语义匹配用户意图,按预定义多阶段 Pattern 注入结构化执行指令;支持项目级 Pattern 持久化和 Thompson Sampling 多臂老虎机策略选择(✅ 2026-04-16
|
|
10
|
+
- **Pattern 工作流**:AI 语义匹配用户意图,按预定义多阶段 Pattern 注入结构化执行指令;支持项目级 Pattern 持久化和 Thompson Sampling 多臂老虎机策略选择(✅ 2026-04-16)
|
|
11
11
|
- **技能编排**:根据意图自动匹配并注入高质量技能(TDD、调试、重构、代码审查等)
|
|
12
12
|
- **多 AI 提供商**:支持 Claude、OpenAI、Ollama 等多种 AI 提供商,可灵活切换
|
|
13
|
-
- **Pipeline 编排**:复杂任务 AI 智能评估复杂度(simple/moderate/complex)和任务类型(bugfix/feature/refactor/performance),动态规划阶段列表(3-6 阶段),每阶段完成时自动生成结构化产物文档;AI 失败时 Forge 管理项目保守判定为需要 Pipeline;支持 profile 阶段(性能分析)、复杂度自适应推进阈值、Pipeline 强制执行;SQLite Schema v7 新增 complexity/planned_phases/phase_artifacts/reasoning 字段;ArtifactManager 统一产物目录管理(docs/YYYY-MM-DD/);Write/Edit 无 Pipeline 时硬阻断(✅ 2026-04-16);simple 路径 Forge 管理项目有代码改动时提升为 moderate + requiresPipeline(✅ 2026-04-16);阶段推进使用 plannedPhases 动态顺序,活动阈值按复杂度调整,profile 阶段完整支持(✅ 2026-04-17);AI 智能编排完整实现(analyzer/store/phase-manager/artifact-generator 全部适配 v7 schema)(✅ 2026-04-17)
|
|
14
|
-
- **阶段产物生成**:Pipeline 每个阶段完成时,AI 自动生成对应文档(需求分析/PRD、架构设计/详细设计、性能分析报告、代码改动说明、测试报告、审查报告),存放在 `{project}
|
|
15
|
-
- **质量门禁**:Pipeline 每阶段完成时强制触发 AI 审查,阶段质量不过则阻止推进;Stop 时有未解决 fail 项则阻断会话结束;支持 Convention must 规范注入;支持质量问题持久化和抑制规则(✅ 2026-04-16
|
|
16
|
-
- **任务复盘分析**:每次会话结束后自动分析执行质量,检测失败信号(用户不满意/迭代请求),生成 `retrospective.md` 报告,并将数据写入 SQLite 供后续模式学习;支持满意度评分和学习闭环(✅ 2026-04-16
|
|
17
|
-
- **模式学习**:每 10 次 Stop 触发 AI 提炼同类任务的失败模式,下次同类任务开始时自动注入预防建议;支持基于真实成功率的效果评分更新(✅ 2026-04-16
|
|
13
|
+
- **Pipeline 编排**:复杂任务 AI 智能评估复杂度(simple/moderate/complex)和任务类型(bugfix/feature/refactor/performance),动态规划阶段列表(3-6 阶段),每阶段完成时自动生成结构化产物文档;AI 失败时 Forge 管理项目保守判定为需要 Pipeline;支持 profile 阶段(性能分析)、复杂度自适应推进阈值、Pipeline 强制执行;SQLite Schema v7 新增 complexity/planned_phases/phase_artifacts/reasoning 字段;ArtifactManager 统一产物目录管理(docs/YYYY-MM-DD/);Write/Edit 无 Pipeline 时硬阻断(✅ 2026-04-16);simple 路径 Forge 管理项目有代码改动时提升为 moderate + requiresPipeline(✅ 2026-04-16);阶段推进使用 plannedPhases 动态顺序,活动阈值按复杂度调整,profile 阶段完整支持(✅ 2026-04-17);AI 智能编排完整实现(analyzer/store/phase-manager/artifact-generator 全部适配 v7 schema)(✅ 2026-04-17);Daemon 事件缓冲区提升至 512KB(✅ 2026-04-17);Thompson Sampling bug 修复(✅ 2026-04-17);OpenAI/Ollama Token 追踪补全(✅ 2026-04-17);cf query stats 增强(成本汇总/满意度趋势)(✅ 2026-04-17);计划文档同步(Plan Mode 产物自动同步到 docs/YYYY-MM-DD/架构设计/)(✅ 2026-04-17);阶段产物生成支持中文文件名和阶段子目录(✅ 2026-04-17);BaseProvider 接口改造(doComplete 返回 usage 对象,支持 token 追踪和成本计算)(✅ 2026-04-17);Storage 方法扩展(getTotalCost/getCostByModel/getRecentSessions)(✅ 2026-04-17)
|
|
14
|
+
- **阶段产物生成**:Pipeline 每个阶段完成时,AI 自动生成对应文档(需求分析/PRD、架构设计/详细设计、性能分析报告、代码改动说明、测试报告、审查报告),存放在 `{project}/docs/YYYY-MM-DD/阶段名/`(统一使用项目 docs/ 目录);产物文件名自动加时间戳前缀避免冲突;支持按复杂度和任务类型动态调整产物清单;优先使用 AI 规划的 phaseArtifacts,降级到静态映射;中文文件名和阶段子目录(✅ 2026-04-17);幂等性保证(已存在则跳过)(✅ 2026-04-17);阶段产物生成失败时阻断阶段推进(✅ 2026-04-17);支持最多 2 次重试,超时延长至 90s(✅ 2026-04-17)
|
|
15
|
+
- **质量门禁**:Pipeline 每阶段完成时强制触发 AI 审查,阶段质量不过则阻止推进;Stop 时有未解决 fail 项则阻断会话结束;支持 Convention must 规范注入;支持质量问题持久化和抑制规则(✅ 2026-04-16)
|
|
16
|
+
- **任务复盘分析**:每次会话结束后自动分析执行质量,检测失败信号(用户不满意/迭代请求),生成 `retrospective.md` 报告,并将数据写入 SQLite 供后续模式学习;支持满意度评分和学习闭环(✅ 2026-04-16)
|
|
17
|
+
- **模式学习**:每 10 次 Stop 触发 AI 提炼同类任务的失败模式,下次同类任务开始时自动注入预防建议;支持基于真实成功率的效果评分更新(✅ 2026-04-16)
|
|
18
18
|
- **项目规范(Convention)**:根据项目技术栈 + 已安装规范自动蒸馏项目级自定义规范,注入 CLAUDE.md
|
|
19
19
|
- **会话蒸馏**:将对话中的决策和时间线自动提炼为 `decisions.md` 和 `timeline.md`;decisions.md 自动构建树索引,支持 AI 推理检索
|
|
20
20
|
- **上下文续接**:会话中断后,下次打开自动恢复上次工作状态
|
|
@@ -149,7 +149,7 @@ Claude 读取 additionalContext,按指令执行
|
|
|
149
149
|
| `{project}/.claude-forge/decisions.md` | 项目决策日志(含树索引 decisions.tree.json) |
|
|
150
150
|
| `{project}/.claude-forge/timeline.md` | 项目时间线 |
|
|
151
151
|
| `{project}/.claude-forge/retrospective.md` | 任务复盘日志(每次 Stop 自动追加) |
|
|
152
|
-
| `{project}
|
|
152
|
+
| `{project}/docs/YYYY-MM-DD/阶段名/` | 阶段产物目录(Pipeline 各阶段文档,按日期+阶段二级分组,统一存放在项目 docs/ 下) |
|
|
153
153
|
| `{project}/.claude-forge/custom-convention.yaml` | 项目级自定义规范 |
|
|
154
154
|
| `{project}/docs/plan-*.md` | Plan-First 计划文件(按版本存储,Claude 负责写,Forge 负责读;自动启动 Plan Mode 而非阻断) |
|
|
155
155
|
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { AIProvider } from '../ai-provider/types.js';
|
|
2
|
+
import type { StorageEngine } from '../storage/index.js';
|
|
3
|
+
import type { ActivePlanSummary } from '../utils/plan-reader.js';
|
|
2
4
|
export type IntentComplexity = 'simple' | 'moderate' | 'complex';
|
|
3
5
|
export interface IntentAnalysis {
|
|
4
6
|
complexity: IntentComplexity;
|
|
@@ -10,6 +12,15 @@ export interface IntentAnalysis {
|
|
|
10
12
|
clarifyQuestions?: string[];
|
|
11
13
|
searchKeywords?: string[];
|
|
12
14
|
}
|
|
15
|
+
/** 用户上下文:从 ProfileManager + 历史满意度构建,注入 AI 分析 */
|
|
16
|
+
export interface UserContext {
|
|
17
|
+
work_style: 'guided' | 'balanced' | 'autonomous';
|
|
18
|
+
experience_level: 'beginner' | 'intermediate' | 'expert';
|
|
19
|
+
skip_rate: number;
|
|
20
|
+
override_rate: number;
|
|
21
|
+
avg_satisfaction: number;
|
|
22
|
+
preferred_complexity: 'simple' | 'moderate' | 'complex';
|
|
23
|
+
}
|
|
13
24
|
/**
|
|
14
25
|
* IntentEngine — 意图识别引擎
|
|
15
26
|
*
|
|
@@ -20,17 +31,25 @@ export interface IntentAnalysis {
|
|
|
20
31
|
*/
|
|
21
32
|
export declare class IntentEngine {
|
|
22
33
|
private api;
|
|
34
|
+
private ruleDistiller;
|
|
23
35
|
/** 项目结构缓存,TTL=2min,避免每次分析都读文件系统 */
|
|
24
36
|
private structureCache;
|
|
25
37
|
/** decisions.md 内容缓存,TTL=5min */
|
|
26
38
|
private decisionsCache;
|
|
27
39
|
private static readonly CACHE_TTL_MS;
|
|
28
|
-
constructor(api: AIProvider);
|
|
40
|
+
constructor(api: AIProvider, storage?: StorageEngine);
|
|
41
|
+
/**
|
|
42
|
+
* 触发离线规则提炼(每 20 次 Stop 调用一次)
|
|
43
|
+
*/
|
|
44
|
+
distillRules(projectPath: string): Promise<number>;
|
|
29
45
|
/**
|
|
30
46
|
* 分析用户输入的意图和复杂度
|
|
31
47
|
* @param conversationHistory 会话上下文(最近的用户输入和工具调用摘要)
|
|
48
|
+
* @param activePlan 当前活跃计划摘要(跨 session 的任务续接状态)
|
|
32
49
|
*/
|
|
33
|
-
analyze(userPrompt: string, projectPath: string, techStack?: string, conversationHistory?: string, isForgeManaged?: boolean): Promise<IntentAnalysis>;
|
|
50
|
+
analyze(userPrompt: string, projectPath: string, techStack?: string, conversationHistory?: string, isForgeManaged?: boolean, activePlan?: ActivePlanSummary, userContext?: UserContext): Promise<IntentAnalysis>;
|
|
51
|
+
/** 从 StorageEngine 获取规则库(通过 RuleDistiller 的 storage 引用) */
|
|
52
|
+
private getRulesFromStorage;
|
|
34
53
|
/** 清理两个缓存 Map 中已过期的条目 */
|
|
35
54
|
private evictExpiredCache;
|
|
36
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent-engine.d.ts","sourceRoot":"","sources":["../../src/autopilot/intent-engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"intent-engine.d.ts","sourceRoot":"","sources":["../../src/autopilot/intent-engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,gDAAgD;AAChD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;IACjD,gBAAgB,EAAE,UAAU,GAAG,cAAc,GAAG,QAAQ,CAAC;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CACzD;AAED;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,aAAa,CAA8B;IACnD,mCAAmC;IACnC,OAAO,CAAC,cAAc,CAAyD;IAC/E,iCAAiC;IACjC,OAAO,CAAC,cAAc,CAAyD;IAC/E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAiB;gBAEzC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa;IAOpD;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxD;;;;OAIG;IACG,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,cAAc,CAAC,EAAE,OAAO,EACxB,UAAU,CAAC,EAAE,iBAAiB,EAC9B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,cAAc,CAAC;IAqC1B,2DAA2D;IAC3D,OAAO,CAAC,mBAAmB;IAM3B,yBAAyB;IACzB,OAAO,CAAC,iBAAiB;IAUzB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAkEnB;;OAEG;YACW,SAAS;IAuGvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiD3B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,aAAa;IAuBrB;;;OAGG;YACW,oBAAoB;IAqBlC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAiBpC;;OAEG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAInD,WAAW,IAAI,UAAU;IAIzB;OACG;IACH,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI;CAsB3D"}
|
|
@@ -2,6 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { logger } from '../utils/logger.js';
|
|
4
4
|
import { TreeIndexEngine } from '../distill/tree-index.js';
|
|
5
|
+
import { RuleDistiller } from './rule-distiller.js';
|
|
5
6
|
/**
|
|
6
7
|
* IntentEngine — 意图识别引擎
|
|
7
8
|
*
|
|
@@ -12,19 +13,32 @@ import { TreeIndexEngine } from '../distill/tree-index.js';
|
|
|
12
13
|
*/
|
|
13
14
|
export class IntentEngine {
|
|
14
15
|
api;
|
|
16
|
+
ruleDistiller = null;
|
|
15
17
|
/** 项目结构缓存,TTL=2min,避免每次分析都读文件系统 */
|
|
16
18
|
structureCache = new Map();
|
|
17
19
|
/** decisions.md 内容缓存,TTL=5min */
|
|
18
20
|
decisionsCache = new Map();
|
|
19
21
|
static CACHE_TTL_MS = 5 * 60 * 1000; // 5min
|
|
20
|
-
constructor(api) {
|
|
22
|
+
constructor(api, storage) {
|
|
21
23
|
this.api = api;
|
|
24
|
+
if (storage) {
|
|
25
|
+
this.ruleDistiller = new RuleDistiller(storage);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 触发离线规则提炼(每 20 次 Stop 调用一次)
|
|
30
|
+
*/
|
|
31
|
+
async distillRules(projectPath) {
|
|
32
|
+
if (!this.ruleDistiller)
|
|
33
|
+
return 0;
|
|
34
|
+
return this.ruleDistiller.distillRules(projectPath);
|
|
22
35
|
}
|
|
23
36
|
/**
|
|
24
37
|
* 分析用户输入的意图和复杂度
|
|
25
38
|
* @param conversationHistory 会话上下文(最近的用户输入和工具调用摘要)
|
|
39
|
+
* @param activePlan 当前活跃计划摘要(跨 session 的任务续接状态)
|
|
26
40
|
*/
|
|
27
|
-
async analyze(userPrompt, projectPath, techStack, conversationHistory, isForgeManaged) {
|
|
41
|
+
async analyze(userPrompt, projectPath, techStack, conversationHistory, isForgeManaged, activePlan, userContext) {
|
|
28
42
|
// 快速放行:纯对话和无改动操作
|
|
29
43
|
// 注意:有会话上下文时(多轮对话中),短输入可能是确认回复,不应被快速过滤
|
|
30
44
|
const quickResult = this.quickFilter(userPrompt, !!conversationHistory);
|
|
@@ -34,15 +48,37 @@ export class IntentEngine {
|
|
|
34
48
|
}
|
|
35
49
|
// 清理过期缓存条目(每次 analyze 时执行,避免长期积累)
|
|
36
50
|
this.evictExpiredCache();
|
|
51
|
+
// 规则库匹配(在 AI 分析之前,命中则跳过 AI 调用)
|
|
52
|
+
if (this.ruleDistiller) {
|
|
53
|
+
try {
|
|
54
|
+
const rules = this.getRulesFromStorage(projectPath);
|
|
55
|
+
if (rules.length > 0) {
|
|
56
|
+
const ruleResult = this.ruleDistiller.matchRules(userPrompt, rules);
|
|
57
|
+
if (ruleResult) {
|
|
58
|
+
logger.info(`[规则库命中] complexity=${ruleResult.complexity} | ${ruleResult.reasoning}`);
|
|
59
|
+
return ruleResult;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// 规则库查询失败,继续走 AI 分析
|
|
65
|
+
}
|
|
66
|
+
}
|
|
37
67
|
// 其他所有请求都走 AI 分析(带项目上下文)
|
|
38
68
|
try {
|
|
39
|
-
return await this.aiAnalyze(userPrompt, projectPath, techStack, conversationHistory);
|
|
69
|
+
return await this.aiAnalyze(userPrompt, projectPath, techStack, conversationHistory, activePlan, userContext);
|
|
40
70
|
}
|
|
41
71
|
catch (err) {
|
|
42
72
|
logger.warn(`[意图引擎] AI 分析失败,使用降级方案:${err}`);
|
|
43
73
|
return this.fallbackAnalyze(userPrompt, isForgeManaged);
|
|
44
74
|
}
|
|
45
75
|
}
|
|
76
|
+
/** 从 StorageEngine 获取规则库(通过 RuleDistiller 的 storage 引用) */
|
|
77
|
+
getRulesFromStorage(projectPath) {
|
|
78
|
+
// RuleDistiller 持有 storage 引用,通过它查询
|
|
79
|
+
// 这里通过 ruleDistiller 内部的 storage 访问,需要暴露一个方法
|
|
80
|
+
return this.ruleDistiller?.storage?.getIntentRules() ?? [];
|
|
81
|
+
}
|
|
46
82
|
/** 清理两个缓存 Map 中已过期的条目 */
|
|
47
83
|
evictExpiredCache() {
|
|
48
84
|
const now = Date.now();
|
|
@@ -122,17 +158,42 @@ export class IntentEngine {
|
|
|
122
158
|
/**
|
|
123
159
|
* AI 分析意图(带项目上下文)
|
|
124
160
|
*/
|
|
125
|
-
async aiAnalyze(userPrompt, projectPath, techStack, conversationHistory) {
|
|
161
|
+
async aiAnalyze(userPrompt, projectPath, techStack, conversationHistory, activePlan, userContext) {
|
|
126
162
|
const contextInfo = await this.readDecisionsContext(userPrompt, projectPath);
|
|
127
163
|
const projectStructure = this.getProjectStructure(projectPath);
|
|
128
164
|
const historySection = conversationHistory
|
|
129
165
|
? `\n## 会话上下文(最近的对话和操作)\n${conversationHistory}\n`
|
|
130
166
|
: '';
|
|
167
|
+
const planSection = activePlan
|
|
168
|
+
? `\n## 当前活跃计划(跨 session 任务续接状态)
|
|
169
|
+
计划文件: ${activePlan.relPath}
|
|
170
|
+
计划标题: ${activePlan.title}
|
|
171
|
+
进行中任务: ${activePlan.inProgress.length > 0 ? activePlan.inProgress.map(t => `\n - ${t}`).join('') : '无'}
|
|
172
|
+
待处理任务: ${activePlan.pending.length > 0 ? activePlan.pending.map(t => `\n - ${t}`).join('') : '无'}
|
|
173
|
+
已完成: ${activePlan.doneCount} 个任务
|
|
174
|
+
|
|
175
|
+
**重要**:如果用户输入是对上述任务的续接(如"继续"、"下一步"、任务相关的具体指令),应判定为 simple 或 moderate,直接执行,不要重新启动 Pipeline 或 Plan Mode。
|
|
176
|
+
`
|
|
177
|
+
: '';
|
|
178
|
+
const userContextSection = userContext
|
|
179
|
+
? `\n## 用户上下文
|
|
180
|
+
工作风格: ${userContext.work_style}
|
|
181
|
+
经验水平: ${userContext.experience_level}
|
|
182
|
+
历史跳过编排比例: ${(userContext.skip_rate * 100).toFixed(0)}%
|
|
183
|
+
历史覆盖 AI 建议比例: ${(userContext.override_rate * 100).toFixed(0)}%
|
|
184
|
+
近期平均满意度: ${(userContext.avg_satisfaction * 100).toFixed(0)}%
|
|
185
|
+
|
|
186
|
+
**重要**:
|
|
187
|
+
- 如果用户历史上经常跳过编排(skip_rate > 0.6),对于 moderate 任务倾向于判定为 simple
|
|
188
|
+
- 如果用户满意度持续低(avg_satisfaction < 0.4),对于 moderate 任务倾向于判定为 complex(需要更多结构)
|
|
189
|
+
- 如果用户是 expert 且 work_style 为 autonomous,降低 Pipeline 触发门槛
|
|
190
|
+
`
|
|
191
|
+
: '';
|
|
131
192
|
const prompt = `你是一个 SDLC 意图分析引擎。请根据用户需求和项目实际情况,判断这个任务的复杂度和是否需要 Pipeline 编排。
|
|
132
193
|
|
|
133
194
|
## 用户输入
|
|
134
195
|
${userPrompt}
|
|
135
|
-
${historySection}
|
|
196
|
+
${historySection}${planSection}${userContextSection}
|
|
136
197
|
## 项目信息
|
|
137
198
|
路径: ${projectPath}
|
|
138
199
|
${techStack ? `技术栈: ${techStack}` : ''}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent-engine.js","sourceRoot":"","sources":["../../src/autopilot/intent-engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"intent-engine.js","sourceRoot":"","sources":["../../src/autopilot/intent-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { StorageEngine } from '../storage/index.js';
|
|
2
|
+
import type { IntentAnalysis } from './intent-engine.js';
|
|
3
|
+
interface IntentRule {
|
|
4
|
+
id: string;
|
|
5
|
+
rule_type: string;
|
|
6
|
+
pattern: string;
|
|
7
|
+
confidence: number;
|
|
8
|
+
hit_count: number;
|
|
9
|
+
miss_count: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* RuleDistiller — 离线规则提炼器
|
|
13
|
+
*
|
|
14
|
+
* 每 20 次 Stop 触发一次,从 task_sessions 历史中提炼意图规则,
|
|
15
|
+
* 更新 intent_rules 表。运行时 matchRules() 优先查规则库,
|
|
16
|
+
* 命中则跳过 AI 调用(预期减少 30-50% AI 调用)。
|
|
17
|
+
*/
|
|
18
|
+
export declare class RuleDistiller {
|
|
19
|
+
private storage;
|
|
20
|
+
constructor(storage: StorageEngine);
|
|
21
|
+
/**
|
|
22
|
+
* 从历史 task_sessions 提炼规则(每 20 次 Stop 触发)
|
|
23
|
+
* 返回新增/更新的规则数
|
|
24
|
+
*/
|
|
25
|
+
distillRules(projectPath: string): Promise<number>;
|
|
26
|
+
/**
|
|
27
|
+
* 运行时规则匹配(在 quickFilter 之后、aiAnalyze 之前调用)
|
|
28
|
+
* 命中时更新 hit_count,未命中时更新 miss_count
|
|
29
|
+
* 返回 IntentAnalysis 或 null(未命中)
|
|
30
|
+
*/
|
|
31
|
+
matchRules(prompt: string, rules: IntentRule[]): IntentAnalysis | null;
|
|
32
|
+
/** 根据规则类型和 prompt 推断复杂度 */
|
|
33
|
+
private inferComplexity;
|
|
34
|
+
/** 简单关键词提取 */
|
|
35
|
+
private extractKeywords;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=rule-distiller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-distiller.d.ts","sourceRoot":"","sources":["../../src/autopilot/rule-distiller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAE1C;;;OAGG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiFxD;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,cAAc,GAAG,IAAI;IA2CtE,2BAA2B;IAC3B,OAAO,CAAC,eAAe;IAcvB,cAAc;IACd,OAAO,CAAC,eAAe;CASxB"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { logger } from '../utils/logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* RuleDistiller — 离线规则提炼器
|
|
4
|
+
*
|
|
5
|
+
* 每 20 次 Stop 触发一次,从 task_sessions 历史中提炼意图规则,
|
|
6
|
+
* 更新 intent_rules 表。运行时 matchRules() 优先查规则库,
|
|
7
|
+
* 命中则跳过 AI 调用(预期减少 30-50% AI 调用)。
|
|
8
|
+
*/
|
|
9
|
+
export class RuleDistiller {
|
|
10
|
+
storage;
|
|
11
|
+
constructor(storage) {
|
|
12
|
+
this.storage = storage;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 从历史 task_sessions 提炼规则(每 20 次 Stop 触发)
|
|
16
|
+
* 返回新增/更新的规则数
|
|
17
|
+
*/
|
|
18
|
+
async distillRules(projectPath) {
|
|
19
|
+
try {
|
|
20
|
+
// 查询近 100 条 task_sessions
|
|
21
|
+
const sessions = this.storage.getRecentSessions(projectPath, 100);
|
|
22
|
+
if (sessions.length < 5) {
|
|
23
|
+
logger.debug('[规则提炼] 历史数据不足(<5 条),跳过');
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
// 按 complexity 分组(从 task_sessions 获取)
|
|
27
|
+
const complexityMap = new Map();
|
|
28
|
+
for (const s of sessions) {
|
|
29
|
+
const req = s.requirement || '';
|
|
30
|
+
if (!req || req === '(未记录需求)')
|
|
31
|
+
continue;
|
|
32
|
+
// 简单关键词提取:取前 3 个有意义的词
|
|
33
|
+
const keywords = this.extractKeywords(req);
|
|
34
|
+
if (keywords.length === 0)
|
|
35
|
+
continue;
|
|
36
|
+
const key = keywords[0];
|
|
37
|
+
if (!complexityMap.has(key))
|
|
38
|
+
complexityMap.set(key, []);
|
|
39
|
+
complexityMap.get(key).push(req);
|
|
40
|
+
}
|
|
41
|
+
let count = 0;
|
|
42
|
+
// 生成关键词规则:出现 3 次以上的关键词 → 规则
|
|
43
|
+
for (const [keyword, reqs] of complexityMap) {
|
|
44
|
+
if (reqs.length < 3)
|
|
45
|
+
continue;
|
|
46
|
+
const ruleId = `rule_kw_${keyword.replace(/[^\w]/g, '_')}`;
|
|
47
|
+
const confidence = Math.min(0.95, 0.6 + reqs.length * 0.05);
|
|
48
|
+
this.storage.upsertIntentRule({
|
|
49
|
+
id: ruleId,
|
|
50
|
+
rule_type: 'keyword',
|
|
51
|
+
pattern: keyword,
|
|
52
|
+
confidence,
|
|
53
|
+
source: 'distilled',
|
|
54
|
+
});
|
|
55
|
+
count++;
|
|
56
|
+
}
|
|
57
|
+
// 生成动词规则:常见改动动词
|
|
58
|
+
const actionVerbs = ['修复', '添加', '删除', '重构', '优化', '实现', 'fix', 'add', 'remove', 'refactor', 'implement'];
|
|
59
|
+
for (const verb of actionVerbs) {
|
|
60
|
+
const matching = sessions.filter(s => s.requirement?.toLowerCase().includes(verb));
|
|
61
|
+
if (matching.length < 3)
|
|
62
|
+
continue;
|
|
63
|
+
const ruleId = `rule_verb_${verb}`;
|
|
64
|
+
const successRate = matching.filter(s => s.outcome === 'success').length / matching.length;
|
|
65
|
+
const confidence = Math.min(0.9, 0.5 + successRate * 0.4);
|
|
66
|
+
this.storage.upsertIntentRule({
|
|
67
|
+
id: ruleId,
|
|
68
|
+
rule_type: 'action_verb',
|
|
69
|
+
pattern: verb,
|
|
70
|
+
confidence,
|
|
71
|
+
source: 'distilled',
|
|
72
|
+
});
|
|
73
|
+
count++;
|
|
74
|
+
}
|
|
75
|
+
if (count > 0) {
|
|
76
|
+
logger.info(`[规则提炼] 提炼完成:新增/更新 ${count} 条规则`);
|
|
77
|
+
}
|
|
78
|
+
return count;
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
logger.warn(`[规则提炼] 提炼失败:${err}`);
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 运行时规则匹配(在 quickFilter 之后、aiAnalyze 之前调用)
|
|
87
|
+
* 命中时更新 hit_count,未命中时更新 miss_count
|
|
88
|
+
* 返回 IntentAnalysis 或 null(未命中)
|
|
89
|
+
*/
|
|
90
|
+
matchRules(prompt, rules) {
|
|
91
|
+
const lower = prompt.toLowerCase();
|
|
92
|
+
// 按 confidence DESC 遍历规则
|
|
93
|
+
const sorted = [...rules].sort((a, b) => b.confidence - a.confidence);
|
|
94
|
+
for (const rule of sorted) {
|
|
95
|
+
if (rule.confidence < 0.5)
|
|
96
|
+
break; // 低置信度规则跳过
|
|
97
|
+
const matched = lower.includes(rule.pattern.toLowerCase());
|
|
98
|
+
if (matched) {
|
|
99
|
+
// 异步更新命中计数
|
|
100
|
+
setImmediate(() => {
|
|
101
|
+
this.storage.recordIntentRuleHit(rule.id, true);
|
|
102
|
+
});
|
|
103
|
+
// 根据规则类型推断复杂度
|
|
104
|
+
const complexity = this.inferComplexity(rule, prompt);
|
|
105
|
+
logger.debug(`[规则库命中] rule=${rule.id} pattern="${rule.pattern}" confidence=${rule.confidence.toFixed(2)} complexity=${complexity}`);
|
|
106
|
+
return {
|
|
107
|
+
complexity,
|
|
108
|
+
requiresPipeline: complexity === 'complex',
|
|
109
|
+
requirement: prompt,
|
|
110
|
+
reasoning: `规则库命中:${rule.rule_type}="${rule.pattern}"(置信度=${rule.confidence.toFixed(2)})`,
|
|
111
|
+
estimatedFiles: complexity === 'simple' ? 0 : complexity === 'moderate' ? 3 : 8,
|
|
112
|
+
suggestedPhases: complexity === 'complex' ? ['analyze', 'code', 'test'] : complexity === 'moderate' ? ['code', 'test'] : [],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// 未命中:异步更新 miss_count(只对高置信度规则记录)
|
|
117
|
+
if (rule.confidence >= 0.7) {
|
|
118
|
+
setImmediate(() => {
|
|
119
|
+
this.storage.recordIntentRuleHit(rule.id, false);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
/** 根据规则类型和 prompt 推断复杂度 */
|
|
127
|
+
inferComplexity(rule, prompt) {
|
|
128
|
+
// 动词规则:改动动词 → moderate
|
|
129
|
+
if (rule.rule_type === 'action_verb') {
|
|
130
|
+
// 大范围改动词 → complex
|
|
131
|
+
const complexVerbs = ['重构', '架构', '迁移', 'refactor', 'migrate', 'redesign'];
|
|
132
|
+
if (complexVerbs.some(v => prompt.toLowerCase().includes(v)))
|
|
133
|
+
return 'complex';
|
|
134
|
+
return 'moderate';
|
|
135
|
+
}
|
|
136
|
+
// 关键词规则:根据置信度判断
|
|
137
|
+
if (rule.confidence >= 0.85)
|
|
138
|
+
return 'moderate';
|
|
139
|
+
return 'simple';
|
|
140
|
+
}
|
|
141
|
+
/** 简单关键词提取 */
|
|
142
|
+
extractKeywords(text) {
|
|
143
|
+
const stopwords = new Set(['的', '了', '是', '在', '和', '我', '你', '它', 'the', 'a', 'an', 'is', 'are', 'in', 'on', 'to', 'for', 'of', 'with', 'and', 'or', '请', '帮', '我', '需要', '一个', '这个']);
|
|
144
|
+
return text
|
|
145
|
+
.toLowerCase()
|
|
146
|
+
.replace(/[^\w\u4e00-\u9fff\s]/g, ' ')
|
|
147
|
+
.split(/\s+/)
|
|
148
|
+
.filter(w => w.length >= 2 && !stopwords.has(w))
|
|
149
|
+
.slice(0, 5);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=rule-distiller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-distiller.js","sourceRoot":"","sources":["../../src/autopilot/rule-distiller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmSzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0M1D"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import os from 'os';
|
|
4
|
+
import Database from 'better-sqlite3';
|
|
4
5
|
const EVENTS_DIR = path.join(os.homedir(), '.claude-forge');
|
|
5
6
|
const EVENTS_BASE = 'events';
|
|
6
7
|
const NOISY_EVENTS = new Set(['PreToolUse', 'PostToolUse']);
|
|
@@ -364,5 +365,89 @@ export function registerLogsCommand(program) {
|
|
|
364
365
|
for (const e of filtered)
|
|
365
366
|
printEntry(e, compact);
|
|
366
367
|
});
|
|
368
|
+
// ── latency 子命令 ──────────────────────────────────────────────────────────
|
|
369
|
+
program
|
|
370
|
+
.command('logs latency')
|
|
371
|
+
.description('查看各引擎端到端延迟统计(P50/P95/max)')
|
|
372
|
+
.option('--engine <name>', '按引擎名称过滤(子字符串匹配)')
|
|
373
|
+
.option('--type <type>', '按 trace_type 过滤(如 intent_analysis)')
|
|
374
|
+
.option('--days <n>', '统计最近 N 天数据', '7')
|
|
375
|
+
.action((opts) => {
|
|
376
|
+
const dbPath = path.join(os.homedir(), '.claude-forge', 'data.db');
|
|
377
|
+
if (!fs.existsSync(dbPath)) {
|
|
378
|
+
process.stdout.write('数据库不存在,请先启动守护进程\n');
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
let db;
|
|
382
|
+
try {
|
|
383
|
+
db = new Database(dbPath, { readonly: true });
|
|
384
|
+
}
|
|
385
|
+
catch (err) {
|
|
386
|
+
process.stderr.write(`无法打开数据库:${err}\n`);
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
try {
|
|
390
|
+
const days = Math.max(1, parseInt(opts.days, 10) || 7);
|
|
391
|
+
const since = new Date(Date.now() - days * 86400_000).toISOString();
|
|
392
|
+
const conditions = ['timestamp >= ?'];
|
|
393
|
+
const params = [since];
|
|
394
|
+
if (opts.type) {
|
|
395
|
+
conditions.push('trace_type = ?');
|
|
396
|
+
params.push(opts.type);
|
|
397
|
+
}
|
|
398
|
+
if (opts.engine) {
|
|
399
|
+
conditions.push('engine_name LIKE ?');
|
|
400
|
+
params.push(`%${opts.engine}%`);
|
|
401
|
+
}
|
|
402
|
+
const rows = db.prepare(`
|
|
403
|
+
SELECT engine_name, trace_type, duration_ms
|
|
404
|
+
FROM latency_traces
|
|
405
|
+
WHERE ${conditions.join(' AND ')}
|
|
406
|
+
ORDER BY engine_name, trace_type, duration_ms
|
|
407
|
+
`).all(...params);
|
|
408
|
+
if (rows.length === 0) {
|
|
409
|
+
process.stdout.write(`最近 ${days} 天无延迟追踪数据\n`);
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
// 按 engine_name::trace_type 分组
|
|
413
|
+
const groups = new Map();
|
|
414
|
+
const meta = new Map();
|
|
415
|
+
for (const r of rows) {
|
|
416
|
+
const key = `${r.engine_name}::${r.trace_type}`;
|
|
417
|
+
if (!groups.has(key)) {
|
|
418
|
+
groups.set(key, []);
|
|
419
|
+
meta.set(key, { engine_name: r.engine_name, trace_type: r.trace_type });
|
|
420
|
+
}
|
|
421
|
+
groups.get(key).push(r.duration_ms);
|
|
422
|
+
}
|
|
423
|
+
// 表头
|
|
424
|
+
process.stdout.write(`${BOLD}${DIM}${'引擎'.padEnd(20)}${'类型'.padEnd(20)}${'P50'.padStart(8)}${'P95'.padStart(8)}${'MAX'.padStart(8)}${'次数'.padStart(8)}${RESET}\n`);
|
|
425
|
+
process.stdout.write(`${DIM}${'─'.repeat(72)}${RESET}\n`);
|
|
426
|
+
for (const [key, vals] of groups) {
|
|
427
|
+
const m = meta.get(key);
|
|
428
|
+
vals.sort((a, b) => a - b);
|
|
429
|
+
const p = (pct) => vals[Math.floor(vals.length * pct)] ?? 0;
|
|
430
|
+
const p50 = p(0.5);
|
|
431
|
+
const p95 = p(0.95);
|
|
432
|
+
const max = vals[vals.length - 1] ?? 0;
|
|
433
|
+
const colorMs = (ms) => {
|
|
434
|
+
if (ms > 2000)
|
|
435
|
+
return `${RED}${ms}ms${RESET}`;
|
|
436
|
+
if (ms > 500)
|
|
437
|
+
return `${YELLOW}${ms}ms${RESET}`;
|
|
438
|
+
return `${GREEN}${ms}ms${RESET}`;
|
|
439
|
+
};
|
|
440
|
+
process.stdout.write(`${CYAN}${m.engine_name.padEnd(20)}${RESET}` +
|
|
441
|
+
`${DIM}${m.trace_type.padEnd(20)}${RESET}` +
|
|
442
|
+
`${colorMs(p50).padStart(8 + 10)}` +
|
|
443
|
+
`${colorMs(p95).padStart(8 + 10)}` +
|
|
444
|
+
`${colorMs(max).padStart(8 + 10)}` +
|
|
445
|
+
`${String(vals.length).padStart(8)}\n`);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
finally {
|
|
449
|
+
db.close();
|
|
450
|
+
}
|
|
451
|
+
});
|
|
367
452
|
}
|
|
368
453
|
//# sourceMappingURL=logs.js.map
|