@haoyiyin/workflow 0.2.10 → 0.3.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.
Files changed (164) hide show
  1. package/dist/src/agents/contracts/implementer.d.ts +29 -0
  2. package/dist/src/agents/contracts/implementer.d.ts.map +1 -0
  3. package/dist/src/agents/contracts/implementer.js +94 -0
  4. package/dist/src/agents/contracts/implementer.js.map +1 -0
  5. package/dist/src/agents/contracts/index.d.ts +11 -0
  6. package/dist/src/agents/contracts/index.d.ts.map +1 -0
  7. package/dist/src/agents/contracts/index.js +11 -0
  8. package/dist/src/agents/contracts/index.js.map +1 -0
  9. package/dist/src/agents/contracts/planner.d.ts +25 -0
  10. package/dist/src/agents/contracts/planner.d.ts.map +1 -0
  11. package/dist/src/agents/contracts/planner.js +107 -0
  12. package/dist/src/agents/contracts/planner.js.map +1 -0
  13. package/dist/src/agents/contracts/router.d.ts +24 -0
  14. package/dist/src/agents/contracts/router.d.ts.map +1 -0
  15. package/dist/src/agents/contracts/router.js +137 -0
  16. package/dist/src/agents/contracts/router.js.map +1 -0
  17. package/dist/src/agents/contracts/verifier.d.ts +27 -0
  18. package/dist/src/agents/contracts/verifier.d.ts.map +1 -0
  19. package/dist/src/agents/contracts/verifier.js +115 -0
  20. package/dist/src/agents/contracts/verifier.js.map +1 -0
  21. package/dist/src/agents/dispatcher.d.ts +94 -51
  22. package/dist/src/agents/dispatcher.d.ts.map +1 -1
  23. package/dist/src/agents/dispatcher.js +207 -164
  24. package/dist/src/agents/dispatcher.js.map +1 -1
  25. package/dist/src/persistence/index.d.ts +4 -2
  26. package/dist/src/persistence/index.d.ts.map +1 -1
  27. package/dist/src/persistence/index.js +4 -1
  28. package/dist/src/persistence/index.js.map +1 -1
  29. package/dist/src/persistence/plan-md.d.ts +3 -2
  30. package/dist/src/persistence/plan-md.d.ts.map +1 -1
  31. package/dist/src/persistence/plan-md.js +47 -15
  32. package/dist/src/persistence/plan-md.js.map +1 -1
  33. package/dist/src/persistence/state-md.d.ts +2 -0
  34. package/dist/src/persistence/state-md.d.ts.map +1 -1
  35. package/dist/src/persistence/state-md.js +40 -22
  36. package/dist/src/persistence/state-md.js.map +1 -1
  37. package/dist/src/persistence/types.d.ts +35 -39
  38. package/dist/src/persistence/types.d.ts.map +1 -1
  39. package/dist/src/router/namespace/core/intent-router.d.ts +24 -0
  40. package/dist/src/router/namespace/core/intent-router.d.ts.map +1 -0
  41. package/dist/src/router/namespace/core/intent-router.js +190 -0
  42. package/dist/src/router/namespace/core/intent-router.js.map +1 -0
  43. package/dist/src/router/namespace/core/lifecycle-router.d.ts +28 -0
  44. package/dist/src/router/namespace/core/lifecycle-router.d.ts.map +1 -0
  45. package/dist/src/router/namespace/core/lifecycle-router.js +132 -0
  46. package/dist/src/router/namespace/core/lifecycle-router.js.map +1 -0
  47. package/dist/src/router/namespace/core/state-router.d.ts +32 -0
  48. package/dist/src/router/namespace/core/state-router.d.ts.map +1 -0
  49. package/dist/src/router/namespace/core/state-router.js +157 -0
  50. package/dist/src/router/namespace/core/state-router.js.map +1 -0
  51. package/dist/src/router/namespace/domain/code-router.d.ts +26 -0
  52. package/dist/src/router/namespace/domain/code-router.d.ts.map +1 -0
  53. package/dist/src/router/namespace/domain/code-router.js +171 -0
  54. package/dist/src/router/namespace/domain/code-router.js.map +1 -0
  55. package/dist/src/router/namespace/domain/debug-router.d.ts +25 -0
  56. package/dist/src/router/namespace/domain/debug-router.d.ts.map +1 -0
  57. package/dist/src/router/namespace/domain/debug-router.js +139 -0
  58. package/dist/src/router/namespace/domain/debug-router.js.map +1 -0
  59. package/dist/src/router/namespace/domain/plan-router.d.ts +29 -0
  60. package/dist/src/router/namespace/domain/plan-router.d.ts.map +1 -0
  61. package/dist/src/router/namespace/domain/plan-router.js +160 -0
  62. package/dist/src/router/namespace/domain/plan-router.js.map +1 -0
  63. package/dist/src/router/namespace/domain/review-router.d.ts +24 -0
  64. package/dist/src/router/namespace/domain/review-router.d.ts.map +1 -0
  65. package/dist/src/router/namespace/domain/review-router.js +116 -0
  66. package/dist/src/router/namespace/domain/review-router.js.map +1 -0
  67. package/dist/src/router/namespace/index.d.ts +19 -0
  68. package/dist/src/router/namespace/index.d.ts.map +1 -0
  69. package/dist/src/router/namespace/index.js +22 -0
  70. package/dist/src/router/namespace/index.js.map +1 -0
  71. package/dist/src/router/namespace/registry.d.ts +67 -0
  72. package/dist/src/router/namespace/registry.d.ts.map +1 -0
  73. package/dist/src/router/namespace/registry.js +197 -0
  74. package/dist/src/router/namespace/registry.js.map +1 -0
  75. package/dist/src/router/namespace/types.d.ts +124 -0
  76. package/dist/src/router/namespace/types.d.ts.map +1 -0
  77. package/dist/src/router/namespace/types.js +20 -0
  78. package/dist/src/router/namespace/types.js.map +1 -0
  79. package/dist/src/router/namespace/utility/fallback-router.d.ts +28 -0
  80. package/dist/src/router/namespace/utility/fallback-router.d.ts.map +1 -0
  81. package/dist/src/router/namespace/utility/fallback-router.js +88 -0
  82. package/dist/src/router/namespace/utility/fallback-router.js.map +1 -0
  83. package/dist/src/router/namespace/utility/quick-task-router.d.ts +28 -0
  84. package/dist/src/router/namespace/utility/quick-task-router.d.ts.map +1 -0
  85. package/dist/src/router/namespace/utility/quick-task-router.js +99 -0
  86. package/dist/src/router/namespace/utility/quick-task-router.js.map +1 -0
  87. package/dist/src/router/namespace/utility/research-router.d.ts +24 -0
  88. package/dist/src/router/namespace/utility/research-router.d.ts.map +1 -0
  89. package/dist/src/router/namespace/utility/research-router.js +84 -0
  90. package/dist/src/router/namespace/utility/research-router.js.map +1 -0
  91. package/dist/src/skills/agents-md/index.js +2 -2
  92. package/dist/src/skills/agents-md/index.js.map +1 -1
  93. package/dist/src/skills/execute-plan/index.d.ts +45 -65
  94. package/dist/src/skills/execute-plan/index.d.ts.map +1 -1
  95. package/dist/src/skills/execute-plan/index.js +325 -551
  96. package/dist/src/skills/execute-plan/index.js.map +1 -1
  97. package/dist/src/skills/index.d.ts +1 -0
  98. package/dist/src/skills/index.d.ts.map +1 -1
  99. package/dist/src/skills/index.js +1 -0
  100. package/dist/src/skills/index.js.map +1 -1
  101. package/dist/src/skills/quick-task/index.d.ts +4 -4
  102. package/dist/src/skills/quick-task/index.js +1 -1
  103. package/dist/src/skills/quick-task/index.js.map +1 -1
  104. package/dist/src/skills/review-diff/index.d.ts +6 -6
  105. package/dist/src/skills/review-diff/index.js +1 -1
  106. package/dist/src/skills/review-diff/index.js.map +1 -1
  107. package/dist/src/skills/router/index.d.ts +101 -0
  108. package/dist/src/skills/router/index.d.ts.map +1 -0
  109. package/dist/src/skills/router/index.js +450 -0
  110. package/dist/src/skills/router/index.js.map +1 -0
  111. package/dist/src/skills/router/types.d.ts +79 -0
  112. package/dist/src/skills/router/types.d.ts.map +1 -0
  113. package/dist/src/skills/router/types.js +8 -0
  114. package/dist/src/skills/router/types.js.map +1 -0
  115. package/dist/src/skills/systematic-debugging/index.js +1 -1
  116. package/dist/src/skills/systematic-debugging/index.js.map +1 -1
  117. package/dist/src/skills/tdd/index.d.ts +14 -14
  118. package/dist/src/skills/tdd/index.js +1 -1
  119. package/dist/src/skills/tdd/index.js.map +1 -1
  120. package/dist/src/skills/to-plan/index-enhanced.d.ts +4 -4
  121. package/dist/src/skills/to-plan/index-enhanced.d.ts.map +1 -1
  122. package/dist/src/skills/to-plan/index-enhanced.js +3 -5
  123. package/dist/src/skills/to-plan/index-enhanced.js.map +1 -1
  124. package/dist/src/skills/to-plan/index.d.ts +24 -91
  125. package/dist/src/skills/to-plan/index.d.ts.map +1 -1
  126. package/dist/src/skills/to-plan/index.js +214 -409
  127. package/dist/src/skills/to-plan/index.js.map +1 -1
  128. package/package.json +3 -5
  129. package/src/agents/contracts/implementer.ts +122 -0
  130. package/src/agents/contracts/index.ts +27 -0
  131. package/src/agents/contracts/planner.ts +129 -0
  132. package/src/agents/contracts/router.ts +168 -0
  133. package/src/agents/contracts/verifier.ts +137 -0
  134. package/src/agents/dispatcher.ts +387 -362
  135. package/src/persistence/index.ts +10 -4
  136. package/src/persistence/plan-md.ts +52 -18
  137. package/src/persistence/state-md.ts +45 -23
  138. package/src/persistence/types.ts +37 -40
  139. package/src/router/namespace/README.md +127 -0
  140. package/src/router/namespace/core/intent-router.ts +221 -0
  141. package/src/router/namespace/core/lifecycle-router.ts +156 -0
  142. package/src/router/namespace/core/state-router.ts +192 -0
  143. package/src/router/namespace/domain/code-router.ts +202 -0
  144. package/src/router/namespace/domain/debug-router.ts +167 -0
  145. package/src/router/namespace/domain/plan-router.ts +196 -0
  146. package/src/router/namespace/domain/review-router.ts +142 -0
  147. package/src/router/namespace/index.ts +84 -0
  148. package/src/router/namespace/registry.ts +242 -0
  149. package/src/router/namespace/types.ts +182 -0
  150. package/src/router/namespace/utility/fallback-router.ts +107 -0
  151. package/src/router/namespace/utility/quick-task-router.ts +121 -0
  152. package/src/router/namespace/utility/research-router.ts +105 -0
  153. package/src/skills/agents-md/index.ts +2 -2
  154. package/src/skills/execute-plan/index.ts +419 -673
  155. package/src/skills/index.ts +1 -0
  156. package/src/skills/quick-task/index.ts +1 -1
  157. package/src/skills/review-diff/index.ts +1 -1
  158. package/src/skills/router/SKILL.md +181 -0
  159. package/src/skills/router/index.ts +577 -0
  160. package/src/skills/router/types.ts +90 -0
  161. package/src/skills/systematic-debugging/index.ts +1 -1
  162. package/src/skills/tdd/index.ts +1 -1
  163. package/src/skills/to-plan/index-enhanced.ts +3 -5
  164. package/src/skills/to-plan/index.ts +231 -502
@@ -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 || 'sonnet' },
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` }