@haoyiyin/workflow 0.2.11 → 0.3.1
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/dist/src/agents/contracts/implementer.d.ts +29 -0
- package/dist/src/agents/contracts/implementer.d.ts.map +1 -0
- package/dist/src/agents/contracts/implementer.js +94 -0
- package/dist/src/agents/contracts/implementer.js.map +1 -0
- package/dist/src/agents/contracts/index.d.ts +11 -0
- package/dist/src/agents/contracts/index.d.ts.map +1 -0
- package/dist/src/agents/contracts/index.js +11 -0
- package/dist/src/agents/contracts/index.js.map +1 -0
- package/dist/src/agents/contracts/planner.d.ts +25 -0
- package/dist/src/agents/contracts/planner.d.ts.map +1 -0
- package/dist/src/agents/contracts/planner.js +107 -0
- package/dist/src/agents/contracts/planner.js.map +1 -0
- package/dist/src/agents/contracts/router.d.ts +24 -0
- package/dist/src/agents/contracts/router.d.ts.map +1 -0
- package/dist/src/agents/contracts/router.js +137 -0
- package/dist/src/agents/contracts/router.js.map +1 -0
- package/dist/src/agents/contracts/verifier.d.ts +27 -0
- package/dist/src/agents/contracts/verifier.d.ts.map +1 -0
- package/dist/src/agents/contracts/verifier.js +115 -0
- package/dist/src/agents/contracts/verifier.js.map +1 -0
- package/dist/src/agents/dispatcher.d.ts +94 -51
- package/dist/src/agents/dispatcher.d.ts.map +1 -1
- package/dist/src/agents/dispatcher.js +207 -164
- package/dist/src/agents/dispatcher.js.map +1 -1
- package/dist/src/persistence/index.d.ts +4 -2
- package/dist/src/persistence/index.d.ts.map +1 -1
- package/dist/src/persistence/index.js +4 -1
- package/dist/src/persistence/index.js.map +1 -1
- package/dist/src/persistence/plan-md.d.ts +3 -2
- package/dist/src/persistence/plan-md.d.ts.map +1 -1
- package/dist/src/persistence/plan-md.js +47 -15
- package/dist/src/persistence/plan-md.js.map +1 -1
- package/dist/src/persistence/state-md.d.ts +2 -0
- package/dist/src/persistence/state-md.d.ts.map +1 -1
- package/dist/src/persistence/state-md.js +40 -22
- package/dist/src/persistence/state-md.js.map +1 -1
- package/dist/src/persistence/types.d.ts +35 -39
- package/dist/src/persistence/types.d.ts.map +1 -1
- package/dist/src/pi-extension.d.ts +4 -3
- package/dist/src/pi-extension.d.ts.map +1 -1
- package/dist/src/pi-extension.js +36 -67
- package/dist/src/pi-extension.js.map +1 -1
- package/dist/src/router/namespace/core/intent-router.d.ts +24 -0
- package/dist/src/router/namespace/core/intent-router.d.ts.map +1 -0
- package/dist/src/router/namespace/core/intent-router.js +190 -0
- package/dist/src/router/namespace/core/intent-router.js.map +1 -0
- package/dist/src/router/namespace/core/lifecycle-router.d.ts +28 -0
- package/dist/src/router/namespace/core/lifecycle-router.d.ts.map +1 -0
- package/dist/src/router/namespace/core/lifecycle-router.js +132 -0
- package/dist/src/router/namespace/core/lifecycle-router.js.map +1 -0
- package/dist/src/router/namespace/core/state-router.d.ts +32 -0
- package/dist/src/router/namespace/core/state-router.d.ts.map +1 -0
- package/dist/src/router/namespace/core/state-router.js +157 -0
- package/dist/src/router/namespace/core/state-router.js.map +1 -0
- package/dist/src/router/namespace/domain/code-router.d.ts +26 -0
- package/dist/src/router/namespace/domain/code-router.d.ts.map +1 -0
- package/dist/src/router/namespace/domain/code-router.js +171 -0
- package/dist/src/router/namespace/domain/code-router.js.map +1 -0
- package/dist/src/router/namespace/domain/debug-router.d.ts +25 -0
- package/dist/src/router/namespace/domain/debug-router.d.ts.map +1 -0
- package/dist/src/router/namespace/domain/debug-router.js +139 -0
- package/dist/src/router/namespace/domain/debug-router.js.map +1 -0
- package/dist/src/router/namespace/domain/plan-router.d.ts +29 -0
- package/dist/src/router/namespace/domain/plan-router.d.ts.map +1 -0
- package/dist/src/router/namespace/domain/plan-router.js +160 -0
- package/dist/src/router/namespace/domain/plan-router.js.map +1 -0
- package/dist/src/router/namespace/domain/review-router.d.ts +24 -0
- package/dist/src/router/namespace/domain/review-router.d.ts.map +1 -0
- package/dist/src/router/namespace/domain/review-router.js +116 -0
- package/dist/src/router/namespace/domain/review-router.js.map +1 -0
- package/dist/src/router/namespace/index.d.ts +19 -0
- package/dist/src/router/namespace/index.d.ts.map +1 -0
- package/dist/src/router/namespace/index.js +22 -0
- package/dist/src/router/namespace/index.js.map +1 -0
- package/dist/src/router/namespace/registry.d.ts +67 -0
- package/dist/src/router/namespace/registry.d.ts.map +1 -0
- package/dist/src/router/namespace/registry.js +197 -0
- package/dist/src/router/namespace/registry.js.map +1 -0
- package/dist/src/router/namespace/types.d.ts +124 -0
- package/dist/src/router/namespace/types.d.ts.map +1 -0
- package/dist/src/router/namespace/types.js +20 -0
- package/dist/src/router/namespace/types.js.map +1 -0
- package/dist/src/router/namespace/utility/fallback-router.d.ts +28 -0
- package/dist/src/router/namespace/utility/fallback-router.d.ts.map +1 -0
- package/dist/src/router/namespace/utility/fallback-router.js +88 -0
- package/dist/src/router/namespace/utility/fallback-router.js.map +1 -0
- package/dist/src/router/namespace/utility/quick-task-router.d.ts +28 -0
- package/dist/src/router/namespace/utility/quick-task-router.d.ts.map +1 -0
- package/dist/src/router/namespace/utility/quick-task-router.js +99 -0
- package/dist/src/router/namespace/utility/quick-task-router.js.map +1 -0
- package/dist/src/router/namespace/utility/research-router.d.ts +24 -0
- package/dist/src/router/namespace/utility/research-router.d.ts.map +1 -0
- package/dist/src/router/namespace/utility/research-router.js +84 -0
- package/dist/src/router/namespace/utility/research-router.js.map +1 -0
- package/dist/src/skills/agents-md/index.js +2 -2
- package/dist/src/skills/agents-md/index.js.map +1 -1
- package/dist/src/skills/execute-plan/index.d.ts +45 -65
- package/dist/src/skills/execute-plan/index.d.ts.map +1 -1
- package/dist/src/skills/execute-plan/index.js +325 -551
- package/dist/src/skills/execute-plan/index.js.map +1 -1
- package/dist/src/skills/index.d.ts +1 -0
- package/dist/src/skills/index.d.ts.map +1 -1
- package/dist/src/skills/index.js +1 -0
- package/dist/src/skills/index.js.map +1 -1
- package/dist/src/skills/quick-task/index.d.ts +4 -4
- package/dist/src/skills/quick-task/index.js +1 -1
- package/dist/src/skills/quick-task/index.js.map +1 -1
- package/dist/src/skills/review-diff/index.d.ts +6 -6
- package/dist/src/skills/review-diff/index.js +1 -1
- package/dist/src/skills/review-diff/index.js.map +1 -1
- package/dist/src/skills/router/index.d.ts +101 -0
- package/dist/src/skills/router/index.d.ts.map +1 -0
- package/dist/src/skills/router/index.js +450 -0
- package/dist/src/skills/router/index.js.map +1 -0
- package/dist/src/skills/router/types.d.ts +79 -0
- package/dist/src/skills/router/types.d.ts.map +1 -0
- package/dist/src/skills/router/types.js +8 -0
- package/dist/src/skills/router/types.js.map +1 -0
- package/dist/src/skills/systematic-debugging/index.js +1 -1
- package/dist/src/skills/systematic-debugging/index.js.map +1 -1
- package/dist/src/skills/tdd/index.d.ts +14 -14
- package/dist/src/skills/tdd/index.js +1 -1
- package/dist/src/skills/tdd/index.js.map +1 -1
- package/dist/src/skills/to-plan/index-enhanced.d.ts +4 -4
- package/dist/src/skills/to-plan/index-enhanced.d.ts.map +1 -1
- package/dist/src/skills/to-plan/index-enhanced.js +3 -5
- package/dist/src/skills/to-plan/index-enhanced.js.map +1 -1
- package/dist/src/skills/to-plan/index.d.ts +24 -91
- package/dist/src/skills/to-plan/index.d.ts.map +1 -1
- package/dist/src/skills/to-plan/index.js +214 -409
- package/dist/src/skills/to-plan/index.js.map +1 -1
- package/package.json +3 -5
- package/scripts/postinstall.js +42 -47
- package/src/agents/contracts/implementer.ts +122 -0
- package/src/agents/contracts/index.ts +27 -0
- package/src/agents/contracts/planner.ts +129 -0
- package/src/agents/contracts/router.ts +168 -0
- package/src/agents/contracts/verifier.ts +137 -0
- package/src/agents/dispatcher.ts +387 -362
- package/src/persistence/index.ts +10 -4
- package/src/persistence/plan-md.ts +52 -18
- package/src/persistence/state-md.ts +45 -23
- package/src/persistence/types.ts +37 -40
- package/src/pi-extension.ts +38 -76
- package/src/router/namespace/README.md +127 -0
- package/src/router/namespace/core/intent-router.ts +221 -0
- package/src/router/namespace/core/lifecycle-router.ts +156 -0
- package/src/router/namespace/core/state-router.ts +192 -0
- package/src/router/namespace/domain/code-router.ts +202 -0
- package/src/router/namespace/domain/debug-router.ts +167 -0
- package/src/router/namespace/domain/plan-router.ts +196 -0
- package/src/router/namespace/domain/review-router.ts +142 -0
- package/src/router/namespace/index.ts +84 -0
- package/src/router/namespace/registry.ts +242 -0
- package/src/router/namespace/types.ts +182 -0
- package/src/router/namespace/utility/fallback-router.ts +107 -0
- package/src/router/namespace/utility/quick-task-router.ts +121 -0
- package/src/router/namespace/utility/research-router.ts +105 -0
- package/src/skills/agents-md/index.ts +2 -2
- package/src/skills/execute-plan/index.ts +419 -673
- package/src/skills/index.ts +1 -0
- package/src/skills/quick-task/index.ts +1 -1
- package/src/skills/review-diff/index.ts +1 -1
- package/src/skills/router/SKILL.md +81 -0
- package/src/skills/router/index.ts +577 -0
- package/src/skills/router/types.ts +90 -0
- package/src/skills/systematic-debugging/index.ts +1 -1
- package/src/skills/tdd/index.ts +1 -1
- package/src/skills/to-plan/index-enhanced.ts +3 -5
- package/src/skills/to-plan/index.ts +231 -502
- package/dist/src/extension/classifier.d.ts +0 -18
- package/dist/src/extension/classifier.d.ts.map +0 -1
- package/dist/src/extension/classifier.js +0 -143
- package/dist/src/extension/classifier.js.map +0 -1
- package/src/extension/classifier.ts +0 -160
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quick Task Router - Utility Layer
|
|
3
|
+
*
|
|
4
|
+
* 处理简单、快速的路由决策
|
|
5
|
+
* 低复杂度任务直接路由,无需复杂决策
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type {
|
|
9
|
+
NamespaceRouter,
|
|
10
|
+
RoutingContext,
|
|
11
|
+
RouteDecision,
|
|
12
|
+
NamespaceHealth,
|
|
13
|
+
AlternativeRoute,
|
|
14
|
+
} from '../types.js'
|
|
15
|
+
|
|
16
|
+
export class QuickTaskRouter implements NamespaceRouter {
|
|
17
|
+
readonly name = 'quick-task'
|
|
18
|
+
readonly layer = 'utility' as const
|
|
19
|
+
readonly priority = 50 // 较低优先级,作为 fallback
|
|
20
|
+
readonly patterns = [
|
|
21
|
+
/fix|修复/i,
|
|
22
|
+
/typo|拼写/i,
|
|
23
|
+
/rename|重命名/i,
|
|
24
|
+
/update|更新.*(text|comment|doc)/i,
|
|
25
|
+
/small|小/i,
|
|
26
|
+
/tiny|微小/i,
|
|
27
|
+
/quick|快速/i,
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
private routeCount = 0
|
|
31
|
+
private successCount = 0
|
|
32
|
+
private totalLatency = 0
|
|
33
|
+
|
|
34
|
+
async canRoute(context: RoutingContext): Promise<boolean> {
|
|
35
|
+
// 检查是否为简单任务
|
|
36
|
+
const text = context.request.text
|
|
37
|
+
return this.isQuickTask(text)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async route(context: RoutingContext): Promise<RouteDecision> {
|
|
41
|
+
const startTime = Date.now()
|
|
42
|
+
|
|
43
|
+
this.routeCount++
|
|
44
|
+
this.totalLatency += Date.now() - startTime
|
|
45
|
+
this.successCount++
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
skill: 'quick-task',
|
|
49
|
+
confidence: 0.85,
|
|
50
|
+
reasoning: 'Quick task detected: simple change, fast execution',
|
|
51
|
+
namespace: this.name,
|
|
52
|
+
alternatives: [],
|
|
53
|
+
metadata: {
|
|
54
|
+
layer: this.layer,
|
|
55
|
+
processingTime: Date.now() - startTime,
|
|
56
|
+
hops: 1,
|
|
57
|
+
},
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* 快速判断是否为简单任务
|
|
63
|
+
*/
|
|
64
|
+
private isQuickTask(request: string): boolean {
|
|
65
|
+
// 简单任务特征
|
|
66
|
+
const quickPatterns = [
|
|
67
|
+
/fix.*typo|修复.*拼写/i,
|
|
68
|
+
/rename.*to|重命名为/i,
|
|
69
|
+
/update.*comment|更新.*注释/i,
|
|
70
|
+
/^\s*fix\s+/i, // 以 "fix " 开头
|
|
71
|
+
/^\s*update\s+/i, // 以 "update " 开头
|
|
72
|
+
/^\s*change\s+/i, // 以 "change " 开头
|
|
73
|
+
/^\s*add\s+(a|the)\s+/i, // 添加单个东西
|
|
74
|
+
/^\s*remove\s+/i, // 移除
|
|
75
|
+
/^\s*delete\s+/i, // 删除
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
// 长度检查 - 短请求更可能是简单任务
|
|
79
|
+
if (request.length < 50) {
|
|
80
|
+
return quickPatterns.some((p) => p.test(request))
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// 复杂任务特征(排除)
|
|
84
|
+
const complexPatterns = [
|
|
85
|
+
/implement|实现/i,
|
|
86
|
+
/architecture|架构/i,
|
|
87
|
+
/design|设计/i,
|
|
88
|
+
/refactor|重构/i,
|
|
89
|
+
/and|和.*then|然后/i,
|
|
90
|
+
/step|步骤/i,
|
|
91
|
+
/phase|阶段/i,
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
if (complexPatterns.some((p) => p.test(request))) {
|
|
95
|
+
return false
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return quickPatterns.some((p) => p.test(request))
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
getSupportedSkills(): string[] {
|
|
102
|
+
return ['quick-task']
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
getHealth(): NamespaceHealth {
|
|
106
|
+
return {
|
|
107
|
+
name: this.name,
|
|
108
|
+
status: this.successRate() > 0.9 ? 'healthy' : 'degraded',
|
|
109
|
+
totalRoutes: this.routeCount,
|
|
110
|
+
successRate: this.successRate(),
|
|
111
|
+
avgLatency: this.routeCount > 0 ? this.totalLatency / this.routeCount : 0,
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private successRate(): number {
|
|
116
|
+
return this.routeCount > 0 ? this.successCount / this.routeCount : 1.0
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export const quickTaskRouter = new QuickTaskRouter()
|
|
121
|
+
export default quickTaskRouter
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Research Router - Utility Layer
|
|
3
|
+
*
|
|
4
|
+
* 处理研究和探索相关的路由决策
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
NamespaceRouter,
|
|
9
|
+
RoutingContext,
|
|
10
|
+
RouteDecision,
|
|
11
|
+
NamespaceHealth,
|
|
12
|
+
AlternativeRoute,
|
|
13
|
+
} from '../types.js'
|
|
14
|
+
|
|
15
|
+
export class ResearchRouter implements NamespaceRouter {
|
|
16
|
+
readonly name = 'research'
|
|
17
|
+
readonly layer = 'utility' as const
|
|
18
|
+
readonly priority = 45
|
|
19
|
+
readonly patterns = [
|
|
20
|
+
/research|研究/i,
|
|
21
|
+
/explore|探索/i,
|
|
22
|
+
/learn|学习/i,
|
|
23
|
+
/understand|理解/i,
|
|
24
|
+
/how.*work|如何.*工作/i,
|
|
25
|
+
/what is|什么是/i,
|
|
26
|
+
/compare|比较/i,
|
|
27
|
+
/analyze|分析/i,
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
private routeCount = 0
|
|
31
|
+
private successCount = 0
|
|
32
|
+
private totalLatency = 0
|
|
33
|
+
|
|
34
|
+
async canRoute(context: RoutingContext): Promise<boolean> {
|
|
35
|
+
const text = context.request.text.toLowerCase()
|
|
36
|
+
return /research|研究|explore|探索|learn|学习|understand|理解|how.*work|如何.*工作|what is|什么是|compare|比较|analyze|分析/.test(text)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async route(context: RoutingContext): Promise<RouteDecision> {
|
|
40
|
+
const startTime = Date.now()
|
|
41
|
+
|
|
42
|
+
const decision = this.makeResearchDecision(context.request.text)
|
|
43
|
+
|
|
44
|
+
this.routeCount++
|
|
45
|
+
this.totalLatency += Date.now() - startTime
|
|
46
|
+
this.successCount++
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
...decision,
|
|
50
|
+
namespace: this.name,
|
|
51
|
+
metadata: {
|
|
52
|
+
layer: this.layer,
|
|
53
|
+
processingTime: Date.now() - startTime,
|
|
54
|
+
hops: 1,
|
|
55
|
+
},
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private makeResearchDecision(requestText: string): Omit<RouteDecision, 'namespace' | 'metadata'> {
|
|
60
|
+
// 研究请求通常不涉及代码修改
|
|
61
|
+
// 但如果后面跟着实现需求,应该路由到 to-plan
|
|
62
|
+
|
|
63
|
+
if (/research.*then|研究.*然后|explore.*implement/i.test(requestText)) {
|
|
64
|
+
return {
|
|
65
|
+
skill: 'to-plan',
|
|
66
|
+
confidence: 0.7,
|
|
67
|
+
reasoning: 'Research followed by implementation requires planning',
|
|
68
|
+
alternatives: [
|
|
69
|
+
{ skill: 'quick-task', confidence: 0.3, reasoning: 'Quick research only' },
|
|
70
|
+
],
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 纯研究请求
|
|
75
|
+
return {
|
|
76
|
+
skill: 'quick-task', // 使用 quick-task 进行探索
|
|
77
|
+
confidence: 0.6,
|
|
78
|
+
reasoning: 'Research/exploration task',
|
|
79
|
+
alternatives: [
|
|
80
|
+
{ skill: 'to-plan', confidence: 0.4, reasoning: 'If research leads to implementation' },
|
|
81
|
+
],
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
getSupportedSkills(): string[] {
|
|
86
|
+
return ['quick-task', 'to-plan', 'research']
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
getHealth(): NamespaceHealth {
|
|
90
|
+
return {
|
|
91
|
+
name: this.name,
|
|
92
|
+
status: this.successRate() > 0.7 ? 'healthy' : 'degraded',
|
|
93
|
+
totalRoutes: this.routeCount,
|
|
94
|
+
successRate: this.successRate(),
|
|
95
|
+
avgLatency: this.routeCount > 0 ? this.totalLatency / this.routeCount : 0,
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private successRate(): number {
|
|
100
|
+
return this.routeCount > 0 ? this.successCount / this.routeCount : 1.0
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export const researchRouter = new ResearchRouter()
|
|
105
|
+
export default researchRouter
|
|
@@ -12,7 +12,7 @@ export class AgentsMdSkill extends Skill<any, any> {
|
|
|
12
12
|
constructor() { super({ name: 'agents-md', description: 'Create/update agent instructions', requires: [], inputSchema: AgentsMdInputSchema as any }) }
|
|
13
13
|
async execute(input: any, context: SkillContext): Promise<any> {
|
|
14
14
|
const { config, logger } = context
|
|
15
|
-
const dispatcher = createDispatcher(logger)
|
|
15
|
+
const dispatcher = createDispatcher({ logger })
|
|
16
16
|
const guard = createMainAgentGuard({}, logger)
|
|
17
17
|
const filename = `${input.type}.md`
|
|
18
18
|
guard.activateEmbargo()
|
|
@@ -22,7 +22,7 @@ export class AgentsMdSkill extends Skill<any, any> {
|
|
|
22
22
|
{ permissions: P, prompt: `Collect repo evidence: package.json, README, configs.`, owns: [], reads: ['package.json','README.md',filename] },
|
|
23
23
|
)
|
|
24
24
|
await dispatcher.dispatch(
|
|
25
|
-
{ role: 'implementer', model: input.model || '
|
|
25
|
+
{ role: 'implementer', model: input.model || 'glm-5' },
|
|
26
26
|
{ permissions: PRW, prompt: `${input.update?'Update':'Create'} ${filename}. Evidence: ${explore.output.slice(0,3000)}. Include: Overview, Tech Stack, Commands, Conventions.`, owns: [filename], reads: [] },
|
|
27
27
|
)
|
|
28
28
|
return { filePath: filename, mode: input.update?'updated':'created', evidence: ['package.json'], rules: ['Overview'], assumptions: [], summary: `${filename} done` }
|