@haoyiyin/workflow 0.2.11 → 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
@@ -11,3 +11,4 @@ export { reviewDiffSkill, ReviewDiffSkill } from './review-diff/index.js'
11
11
  export { tddSkill, TDDSkill } from './tdd/index.js'
12
12
  export { systematicDebuggingSkill, SystematicDebuggingSkill } from './systematic-debugging/index.js'
13
13
  export { agentsMdSkill, AgentsMdSkill } from './agents-md/index.js'
14
+ export { routerSkill, RouterSkill } from './router/index.js'
@@ -134,7 +134,7 @@ export class QuickTaskSkill extends Skill<QuickTaskInput, QuickTaskOutput> {
134
134
  context: SkillContext,
135
135
  ): Promise<QuickTaskOutput> {
136
136
  const { config, logger } = context
137
- const dispatcher = createDispatcher(logger)
137
+ const dispatcher = createDispatcher({ logger })
138
138
  const guard = createMainAgentGuard({}, logger)
139
139
  let totalTokens = 0
140
140
 
@@ -213,7 +213,7 @@ export class ReviewDiffSkill extends Skill<ReviewDiffInput, ReviewDiffOutput> {
213
213
  context: SkillContext,
214
214
  ): Promise<ReviewDiffOutput> {
215
215
  const { config, logger } = context
216
- const dispatcher = createDispatcher(logger)
216
+ const dispatcher = createDispatcher({ logger })
217
217
  const guard = createMainAgentGuard({}, logger)
218
218
 
219
219
  guard.activateEmbargo()
@@ -0,0 +1,181 @@
1
+ ---
2
+ name: router
3
+ priority: 999
4
+ description: MANDATORY ENTRY POINT for ALL user requests. Implements 5-layer GSD routing (State → Lifecycle → Intent → Semantic → Confidence). Thin dispatcher - delegates all routing logic to subagents.
5
+ requires: []
6
+ ---
7
+
8
+ ## ⛔ MAIN AGENT CONSTRAINT (CRITICAL)
9
+
10
+ You are a THIN DISPATCHER. Your ONLY job is to dispatch subagents.
11
+
12
+ **YOU MUST NOT:**
13
+ - Read source files (except STATE.md and PLAN.md)
14
+ - Search code or explore the codebase
15
+ - Write or edit any files
16
+ - Run tests or commands
17
+ - Execute git operations
18
+ - Make routing decisions yourself
19
+ - Perform ANY work beyond dispatching
20
+
21
+ **YOU MAY ONLY:**
22
+ - Read STATE.md and PLAN.md files
23
+ - Dispatch subagents via the Agent tool
24
+ - Relay results between subagents
25
+ - Return the final routing decision from subagent output
26
+
27
+ **FOR EVERY USER REQUEST:** Dispatch a subagent. Never execute routing logic yourself.
28
+
29
+ ---
30
+
31
+ ## Purpose
32
+
33
+ The router skill is the **mandatory entry point** for all user requests in the GSD (Get Stuff Done) architecture. It implements a 5-layer filtering system to determine the appropriate target skill for any given request.
34
+
35
+ This skill enforces the thin dispatcher pattern: the main agent reads state/plan files and immediately dispatches to a routing subagent that performs the actual 5-layer analysis.
36
+
37
+ ---
38
+
39
+ ## 5-Layer GSD Routing Architecture
40
+
41
+ The routing subagent applies these layers in sequence:
42
+
43
+ ### Layer 1: State Check
44
+ - Read `.pi/state/STATE.md` for current workflow state
45
+ - Check if there's an active plan in progress
46
+ - Determine phase: `idle`, `planning`, `executing`, `verifying`, `blocked`
47
+ - If blocked, route to `systematic-debugging`
48
+ - If executing with active tasks, route to `execute-plan` continuation
49
+
50
+ ### Layer 2: Lifecycle Gate
51
+ - Check PLAN.md existence and status
52
+ - If no plan exists and request is complex, route to `to-plan`
53
+ - If plan exists but not approved, route to plan review
54
+ - If plan approved and ready to execute, proceed to execution routing
55
+
56
+ ### Layer 3: Intent Classification
57
+ - Parse user request for intent signals:
58
+ - **Plan signals**: "plan", "design", "break down", "how should I"
59
+ - **Quick signals**: "fix typo", "rename", "quick", "small"
60
+ - **Review signals**: "review", "check", "audit", "CR"
61
+ - **Debug signals**: "bug", "error", "failing", "investigate"
62
+ - **TDD signals**: "test", "TDD", "implement with tests"
63
+ - **Execute signals**: "do it", "implement", "execute", "start"
64
+
65
+ ### Layer 4: Semantic Analysis
66
+ - Analyze request complexity and scope:
67
+ - **Trivial**: <30 chars, single file, typo/rename/format
68
+ - **Small**: 1-5 files, well-understood change
69
+ - **Medium**: 5-10 files, some exploration needed
70
+ - **Large**: 10+ files or architectural changes
71
+ - Check for risk indicators: "refactor core", "migration", "upgrade"
72
+
73
+ ### Layer 5: Confidence Score
74
+ - Calculate routing confidence (0.0 - 1.0)
75
+ - High confidence (>0.8): Route directly to target skill
76
+ - Medium confidence (0.5-0.8): Dispatch clarifier subagent
77
+ - Low confidence (<0.5): Route to `to-plan` for exploration
78
+
79
+ ---
80
+
81
+ ## Target Skills
82
+
83
+ The router dispatches to one of these target skills:
84
+
85
+ | Skill | When Routed |
86
+ |-------|-------------|
87
+ | `to-plan` | Complex feature, unknown scope, architectural change, low confidence |
88
+ | `execute-plan` | Active plan ready to execute, continuation of execution |
89
+ | `quick-task` | Trivial change, typo/rename, <5 files, high confidence |
90
+ | `review-diff` | Code review request, PR audit, change validation |
91
+ | `systematic-debugging` | Bug investigation, test failures, blocked execution |
92
+ | `tdd` | Explicit TDD request, test-first implementation |
93
+
94
+ ---
95
+
96
+ ## Workflow
97
+
98
+ ```
99
+ User Request
100
+
101
+ [Main Agent] Read STATE.md + PLAN.md
102
+
103
+ [Main Agent] Dispatch routing subagent with 5-layer prompt
104
+
105
+ [Routing Subagent] Apply 5-layer filtering
106
+
107
+ [Routing Subagent] Return { targetSkill, confidence, reasoning }
108
+
109
+ [Main Agent] Return routing decision to caller
110
+ ```
111
+
112
+ ---
113
+
114
+ ## Dispatch Contract
115
+
116
+ ### Input to Routing Subagent
117
+
118
+ ```typescript
119
+ {
120
+ userRequest: string; // The original user request
121
+ stateContent: string; // Contents of STATE.md (if exists)
122
+ planContent: string; // Contents of PLAN.md (if exists)
123
+ conversationContext: string; // Recent conversation history
124
+ }
125
+ ```
126
+
127
+ ### Output from Routing Subagent
128
+
129
+ ```typescript
130
+ {
131
+ targetSkill: string; // One of: to-plan, execute-plan, quick-task,
132
+ // review-diff, systematic-debugging, tdd
133
+ confidence: number; // 0.0 - 1.0
134
+ reasoning: string; // Explanation of routing decision
135
+ layerDecisions: {
136
+ state: string; // State check result
137
+ lifecycle: string; // Lifecycle gate result
138
+ intent: string; // Intent classification
139
+ semantic: string; // Semantic analysis
140
+ confidence: string; // Confidence calculation
141
+ };
142
+ suggestedInput?: object; // Pre-processed input for target skill
143
+ }
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Error Handling
149
+
150
+ | Error | Action |
151
+ |-------|--------|
152
+ | STATE.md read fails | Proceed with empty state, assume `idle` phase |
153
+ | PLAN.md read fails | Proceed with no plan, assume planning needed |
154
+ | Routing subagent fails | Retry once; on second failure, default to `to-plan` |
155
+ | Invalid target skill returned | Validate against allowed list, fallback to `to-plan` |
156
+ | Confidence < 0.3 | Route to `to-plan` for exploration regardless of other signals |
157
+
158
+ ---
159
+
160
+ ## Routing Decision Matrix
161
+
162
+ | Request Pattern | State | Lifecycle | Intent | Semantic | Target |
163
+ |-----------------|-------|-----------|--------|----------|--------|
164
+ | "Fix typo in README" | idle | no plan | quick | trivial | `quick-task` |
165
+ | "Plan feature X" | idle | no plan | plan | unknown | `to-plan` |
166
+ | "Implement the plan" | idle | plan approved | execute | - | `execute-plan` |
167
+ | "Review my changes" | any | any | review | - | `review-diff` |
168
+ | "Debug failing test" | blocked | plan executing | debug | - | `systematic-debugging` |
169
+ | "TDD this feature" | idle | no plan | tdd | small | `tdd` |
170
+ | "Refactor core module" | idle | no plan | refactor | large | `to-plan` |
171
+ | "Continue execution" | executing | plan active | execute | - | `execute-plan` |
172
+
173
+ ---
174
+
175
+ ## Constraints Summary
176
+
177
+ 1. **Never execute routing logic in main agent** - Always dispatch to subagent
178
+ 2. **Only read STATE.md and PLAN.md** - No codebase exploration
179
+ 3. **Return subagent output directly** - No transformation or filtering
180
+ 4. **Single dispatch per request** - One routing subagent per user request
181
+ 5. **Fail safe** - When uncertain, route to `to-plan` for exploration