@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.
- 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/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/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/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 +181 -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/src/skills/index.ts
CHANGED
|
@@ -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
|