wogiflow 1.0.16 → 1.0.18
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/.workflow/templates/api-map.md.template +37 -0
- package/.workflow/templates/claude-md.hbs +156 -7
- package/.workflow/templates/function-map.md.template +33 -0
- package/README.md +1 -77
- package/lib/installer.js +3 -1
- package/lib/utils.js +27 -13
- package/package.json +1 -1
- package/scripts/flow +62 -10
- package/scripts/flow-api-index.js +803 -0
- package/scripts/flow-context-compact/expander.js +430 -0
- package/scripts/flow-context-compact/index.js +295 -0
- package/scripts/flow-context-compact/section-extractor.js +345 -0
- package/scripts/flow-context-compact/summary-tree.js +464 -0
- package/scripts/flow-done.js +903 -11
- package/scripts/flow-durable-session.js +1 -1
- package/scripts/flow-epics.js +978 -0
- package/scripts/flow-error-recovery.js +788 -0
- package/scripts/flow-feature.js +797 -0
- package/scripts/flow-file-ops.js +13 -7
- package/scripts/flow-function-index.js +607 -0
- package/scripts/flow-hooks-install.js +291 -0
- package/scripts/flow-hooks.js +1 -0
- package/scripts/flow-hybrid-interactive.js +243 -33
- package/scripts/flow-hypothesis-generator.js +651 -0
- package/scripts/flow-item-link.js +272 -0
- package/scripts/flow-knowledge-sync.js +13 -9
- package/scripts/flow-morning.js +20 -7
- package/scripts/flow-orchestrate.js +48 -10
- package/scripts/flow-parallel.js +39 -0
- package/scripts/flow-phased-task.js +548 -0
- package/scripts/flow-plan.js +798 -0
- package/scripts/flow-ready.js +52 -1
- package/scripts/flow-review-passes/index.js +447 -0
- package/scripts/flow-review-passes/integration.js +637 -0
- package/scripts/flow-review-passes/logic.js +419 -0
- package/scripts/flow-review-passes/security.js +463 -0
- package/scripts/flow-review-passes/structure.js +378 -0
- package/scripts/flow-review.js +458 -0
- package/scripts/flow-roadmap.js +1008 -0
- package/scripts/flow-scanner-base.js +302 -0
- package/scripts/flow-semantic-match.js +460 -0
- package/scripts/flow-session-end.js +157 -0
- package/scripts/flow-session-learning.js +770 -0
- package/scripts/flow-session-state.js +150 -1
- package/scripts/flow-setup-hooks +63 -8
- package/scripts/flow-skill-matcher.js +2 -6
- package/scripts/flow-spec-verifier.js +819 -0
- package/scripts/flow-start.js +251 -4
- package/scripts/flow-story.js +102 -74
- package/scripts/{flow-loop-enforcer.js → flow-task-enforcer.js} +101 -85
- package/scripts/flow-utils.js +684 -22
- package/scripts/hooks/adapters/claude-code.js +78 -7
- package/scripts/hooks/core/component-check.js +123 -90
- package/scripts/hooks/core/index.js +6 -1
- package/scripts/hooks/core/session-context.js +51 -8
- package/scripts/hooks/core/setup-check.js +6 -8
- package/scripts/hooks/core/setup-handler.js +216 -0
- package/scripts/hooks/core/task-gate.js +38 -16
- package/scripts/hooks/entry/claude-code/session-start.js +25 -0
- package/scripts/hooks/entry/claude-code/setup.js +68 -0
- package/scripts/hooks/git/post-commit.js +153 -0
- package/scripts/postinstall.js +48 -34
- package/templates/roadmap.md +80 -0
- package/scripts/flow-new-feature +0 -86
- package/scripts/flow-voice-input.js +0 -638
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# API Registry
|
|
2
|
+
|
|
3
|
+
Quick reference of API calls and endpoints. **Check before creating anything new.**
|
|
4
|
+
|
|
5
|
+
> Run `flow api-index scan` to populate this file.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## User Endpoints
|
|
10
|
+
|
|
11
|
+
| Endpoint | Method | Purpose | File |
|
|
12
|
+
|----------|--------|---------|------|
|
|
13
|
+
| `/api/users` | GET | Fetch all users | `src/api/users.ts` |
|
|
14
|
+
| `/api/users/:id` | GET | Fetch single user | `src/api/users.ts` |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## API Client Functions
|
|
19
|
+
|
|
20
|
+
### Users
|
|
21
|
+
|
|
22
|
+
| Function | Method | Endpoint | File |
|
|
23
|
+
|----------|--------|----------|------|
|
|
24
|
+
| `fetchUsers` | GET | /api/users | `src/api/users.ts` |
|
|
25
|
+
| `createUser` | POST | /api/users | `src/api/users.ts` |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Rules
|
|
30
|
+
|
|
31
|
+
1. **Before creating** → Search this file for existing API calls
|
|
32
|
+
2. **If similar exists** → Extend with parameter or options
|
|
33
|
+
3. **After creating** → Run `flow api-index scan` to update
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
Last scanned: _Not yet scanned_
|
|
@@ -37,16 +37,25 @@ Check `.workflow/state/ready.json` for existing tasks.
|
|
|
37
37
|
|
|
38
38
|
### Step 3: Assess task size
|
|
39
39
|
|
|
40
|
-
|
|
|
41
|
-
|
|
42
|
-
| **
|
|
43
|
-
| **
|
|
44
|
-
| **
|
|
40
|
+
| Level | Type | Files | Criteria | Action |
|
|
41
|
+
|-------|------|-------|----------|--------|
|
|
42
|
+
| L3 | **Subtask** | 1 | Atomic operation, trivial | Execute inline |
|
|
43
|
+
| L2 | **Task** | 1-5 | Single concern, 1-3 AC | Create task, proceed with `/wogi-start` |
|
|
44
|
+
| L1 | **Story** | 5-15 | Multi-component, 3-10 AC | **STOP** - Create story first |
|
|
45
|
+
| L0 | **Epic** | 15+ | New subsystem, 3+ stories | **STOP** - Create epic, decompose to stories |
|
|
45
46
|
|
|
46
|
-
|
|
47
|
+
**Classification Keywords:**
|
|
48
|
+
- Epic indicators: system, architecture, migration, redesign, platform
|
|
49
|
+
- Story indicators: feature, flow, integration, module, workflow
|
|
50
|
+
- Task indicators: add, fix, update, change, remove
|
|
47
51
|
|
|
52
|
+
Note: WogiFlow can auto-classify requests. If unsure, default to creating a story for medium+ requests.
|
|
53
|
+
|
|
54
|
+
### For Story/Epic Requests:
|
|
55
|
+
|
|
56
|
+
**For Stories (L1):**
|
|
48
57
|
```
|
|
49
|
-
This looks like a
|
|
58
|
+
This looks like a story-level feature (5-15 files).
|
|
50
59
|
|
|
51
60
|
Before I start implementing, I need to create a story with acceptance criteria.
|
|
52
61
|
|
|
@@ -60,6 +69,22 @@ Then:
|
|
|
60
69
|
2. **WAIT for user approval** on the story
|
|
61
70
|
3. Only then proceed with `/wogi-start`
|
|
62
71
|
|
|
72
|
+
**For Epics (L0):**
|
|
73
|
+
```
|
|
74
|
+
This is a large feature that qualifies as an Epic (15+ files, multiple stories).
|
|
75
|
+
|
|
76
|
+
I'll need to decompose this into stories first.
|
|
77
|
+
|
|
78
|
+
**Proposed epic:** "[title based on request]"
|
|
79
|
+
|
|
80
|
+
Should I create this epic and decompose it into stories for your approval?
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Then:
|
|
84
|
+
1. Run `/wogi-epic "[title]"` to create the epic with story breakdown
|
|
85
|
+
2. **WAIT for user approval** on the epic structure
|
|
86
|
+
3. Start with the first story using `/wogi-start`
|
|
87
|
+
|
|
63
88
|
**This is NON-NEGOTIABLE when strict mode is enabled.**
|
|
64
89
|
|
|
65
90
|
---
|
|
@@ -92,6 +117,7 @@ npx flow onboard
|
|
|
92
117
|
| `/wogi-story "title"` | Create story with acceptance criteria |
|
|
93
118
|
| `/wogi-status` | Project overview |
|
|
94
119
|
| `/wogi-health` | Check workflow health |
|
|
120
|
+
| `/wogi-roadmap` | View/manage deferred work |
|
|
95
121
|
|
|
96
122
|
See `.claude/docs/commands.md` for complete command reference.
|
|
97
123
|
|
|
@@ -107,6 +133,7 @@ See `.claude/docs/commands.md` for complete command reference.
|
|
|
107
133
|
| "check health", "workflow health", "is everything ok" | `/wogi-health` |
|
|
108
134
|
| "wrap up", "end session", "that's all" | `/wogi-session-end` |
|
|
109
135
|
| "compact context", "save context", "running low on context" | `/wogi-compact` |
|
|
136
|
+
| "show roadmap", "what's planned", "future work", "deferred items" | `/wogi-roadmap` |
|
|
110
137
|
|
|
111
138
|
**IMPORTANT**: When a user's message matches one of these patterns, immediately invoke the Skill tool with the corresponding command. Do not ask for confirmation.
|
|
112
139
|
|
|
@@ -173,6 +200,29 @@ After EVERY request that changes files:
|
|
|
173
200
|
2. Search codebase for existing
|
|
174
201
|
3. Priority: Use existing → Add variant → Extend → Create new (last resort)
|
|
175
202
|
|
|
203
|
+
## Function & API Reuse
|
|
204
|
+
|
|
205
|
+
**Before creating ANY new utility function or API call:**
|
|
206
|
+
|
|
207
|
+
1. **Check `function-map.md`** for existing utilities
|
|
208
|
+
- Search by purpose (date formatting, validation, parsing)
|
|
209
|
+
- Check if extending an existing function makes sense
|
|
210
|
+
|
|
211
|
+
2. **Check `api-map.md`** for existing API endpoints
|
|
212
|
+
- Search by entity type (users, products, orders)
|
|
213
|
+
- Check if existing endpoint can be parameterized
|
|
214
|
+
|
|
215
|
+
3. **Evaluate**: Can you extend an existing item instead of creating new?
|
|
216
|
+
- Same intent? → Extend with variant/parameter
|
|
217
|
+
- Similar but different? → Create new, reference existing
|
|
218
|
+
- Completely new? → Create and register
|
|
219
|
+
|
|
220
|
+
**Decision criteria**: Does extending require LESS effort AND make logical sense?
|
|
221
|
+
|
|
222
|
+
**After creating new functions/APIs:**
|
|
223
|
+
- Run `flow function-index scan` to update the function registry
|
|
224
|
+
- Run `flow api-index scan` to update the API registry
|
|
225
|
+
|
|
176
226
|
{{#if skills}}
|
|
177
227
|
## Installed Skills
|
|
178
228
|
|
|
@@ -191,8 +241,11 @@ Check `.claude/skills/[name]/skill.md` for skill-specific guidance.
|
|
|
191
241
|
| Tasks | `.workflow/state/ready.json` |
|
|
192
242
|
| Logs | `.workflow/state/request-log.md` |
|
|
193
243
|
| Components | `.workflow/state/app-map.md` |
|
|
244
|
+
| Functions | `.workflow/state/function-map.md` |
|
|
245
|
+
| APIs | `.workflow/state/api-map.md` |
|
|
194
246
|
| Rules | `.workflow/state/decisions.md` |
|
|
195
247
|
| Progress | `.workflow/state/progress.md` |
|
|
248
|
+
| Roadmap | `.workflow/roadmap.md` |
|
|
196
249
|
|
|
197
250
|
## Commit Behavior
|
|
198
251
|
|
|
@@ -226,6 +279,102 @@ Check `config.json → qualityGates` before closing any task:
|
|
|
226
279
|
}
|
|
227
280
|
```
|
|
228
281
|
|
|
282
|
+
## Handling Large Requests (IMPORTANT)
|
|
283
|
+
|
|
284
|
+
When a user requests work that would require:
|
|
285
|
+
- More than 5 distinct tasks or files
|
|
286
|
+
- Multiple logical phases
|
|
287
|
+
- Work that spans beyond a reasonable session
|
|
288
|
+
- A "build me X" request for a substantial system
|
|
289
|
+
|
|
290
|
+
**You MUST:**
|
|
291
|
+
|
|
292
|
+
### Step 1: Acknowledge and Break Down
|
|
293
|
+
Break the request into logical phases. Present it clearly:
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
This is a substantial feature. Let me break it down:
|
|
297
|
+
|
|
298
|
+
**Phase 1 (Implement Now):**
|
|
299
|
+
- [Core foundation tasks]
|
|
300
|
+
|
|
301
|
+
**Phase 2 (Defer to Roadmap):**
|
|
302
|
+
- [Tasks that depend on Phase 1]
|
|
303
|
+
|
|
304
|
+
**Phase 3 (Defer to Roadmap):**
|
|
305
|
+
- [Future enhancements]
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Step 2: Ask User
|
|
309
|
+
```
|
|
310
|
+
Should I:
|
|
311
|
+
1. Implement Phase 1 now and add Phases 2-3 to your roadmap?
|
|
312
|
+
2. Create stories for all phases (you choose when to implement)?
|
|
313
|
+
3. Just implement Phase 1 (forget the rest)?
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Step 3: If User Chooses Option 1 (Recommended)
|
|
317
|
+
1. Create stories for Phase 1
|
|
318
|
+
2. Add remaining phases to `.workflow/roadmap.md` using this format:
|
|
319
|
+
|
|
320
|
+
```markdown
|
|
321
|
+
### [Phase Name]: [Feature]
|
|
322
|
+
|
|
323
|
+
**Status:** Deferred
|
|
324
|
+
**Created:** [TODAY]
|
|
325
|
+
**Depends On:** [Parent phase]
|
|
326
|
+
|
|
327
|
+
**Assumes:**
|
|
328
|
+
- [Key assumptions from current implementation]
|
|
329
|
+
- [Architectural decisions that must remain true]
|
|
330
|
+
|
|
331
|
+
**Key Files:**
|
|
332
|
+
- `path/to/file.ts` - [Why this file matters]
|
|
333
|
+
|
|
334
|
+
**Context When Deferred:**
|
|
335
|
+
[Brief description of current project state]
|
|
336
|
+
|
|
337
|
+
**Implementation Plan:**
|
|
338
|
+
1. [Step 1]
|
|
339
|
+
2. [Step 2]
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
3. Inform user: "Added N items to your roadmap. Run `/wogi-roadmap` to see them."
|
|
343
|
+
|
|
344
|
+
### Before Implementing Roadmap Items
|
|
345
|
+
|
|
346
|
+
When user asks to implement something from the roadmap:
|
|
347
|
+
|
|
348
|
+
1. **Find the item**: Check `.workflow/roadmap.md`
|
|
349
|
+
2. **Validate dependencies**:
|
|
350
|
+
- Is "Depends On" complete?
|
|
351
|
+
- Do "Key Files" still exist?
|
|
352
|
+
- Do "Assumes" still hold true?
|
|
353
|
+
3. **If validation fails**:
|
|
354
|
+
```
|
|
355
|
+
⚠️ This roadmap item may be outdated.
|
|
356
|
+
|
|
357
|
+
Issue: [What changed]
|
|
358
|
+
|
|
359
|
+
Options:
|
|
360
|
+
1. Update this item to match current architecture
|
|
361
|
+
2. Remove this item (no longer relevant)
|
|
362
|
+
3. Proceed anyway (you take responsibility)
|
|
363
|
+
```
|
|
364
|
+
4. **If validation passes**: Proceed with implementation
|
|
365
|
+
|
|
366
|
+
### When Modifying Code That Roadmap Items Depend On
|
|
367
|
+
|
|
368
|
+
If you're about to modify a file listed in any roadmap item's "Key Files":
|
|
369
|
+
|
|
370
|
+
```
|
|
371
|
+
Note: This change may affect roadmap items:
|
|
372
|
+
- [Item 1 name]
|
|
373
|
+
- [Item 2 name]
|
|
374
|
+
|
|
375
|
+
Should I review and update those items after this change?
|
|
376
|
+
```
|
|
377
|
+
|
|
229
378
|
## Context Management
|
|
230
379
|
|
|
231
380
|
Use `/wogi-compact` when:
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Function Registry
|
|
2
|
+
|
|
3
|
+
Quick reference of utility functions. **Check before creating anything new.**
|
|
4
|
+
|
|
5
|
+
> Run `flow function-index scan` to populate this file.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Utilities
|
|
10
|
+
|
|
11
|
+
| Function | Purpose | File | Parameters |
|
|
12
|
+
|----------|---------|------|------------|
|
|
13
|
+
| _Example_ | Format dates for display | `src/utils/date.ts` | date: Date, format?: string |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Helpers
|
|
18
|
+
|
|
19
|
+
| Function | Purpose | File | Parameters |
|
|
20
|
+
|----------|---------|------|------------|
|
|
21
|
+
| _Example_ | Validate email format | `src/helpers/validation.ts` | email: string |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
1. **Before creating** → Search this file
|
|
28
|
+
2. **If similar exists** → Extend with parameter, don't create new
|
|
29
|
+
3. **After creating** → Run `flow function-index scan` to update
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
Last scanned: _Not yet scanned_
|
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ A self-improving AI development workflow that learns from your feedback and accu
|
|
|
52
52
|
| [Task Execution](.claude/docs/knowledge-base/02-task-execution/) | The execution pipeline with trade-offs |
|
|
53
53
|
| [Self-Improvement](.claude/docs/knowledge-base/03-self-improvement/) | How WogiFlow learns and improves |
|
|
54
54
|
| [Memory & Context](.claude/docs/knowledge-base/04-memory-context/) | Context management and session persistence |
|
|
55
|
-
| [Development Tools](.claude/docs/knowledge-base/05-development-tools/) | Figma, traces,
|
|
55
|
+
| [Development Tools](.claude/docs/knowledge-base/05-development-tools/) | Figma, traces, MCP integrations |
|
|
56
56
|
| [Safety & Guardrails](.claude/docs/knowledge-base/06-safety-guardrails/) | Protection and recovery systems |
|
|
57
57
|
| [Configuration Reference](.claude/docs/knowledge-base/configuration/all-options.md) | All 200+ configuration options |
|
|
58
58
|
|
|
@@ -119,7 +119,6 @@ Daily commands for working with WogiFlow. Start with `/wogi-ready` to see tasks,
|
|
|
119
119
|
- [Parallel Auto-Detection](#parallel-auto-detection)
|
|
120
120
|
- [Skill Auto-Creation](#skill-auto-creation)
|
|
121
121
|
- [Project-Based Team Sync](#project-based-team-sync)
|
|
122
|
-
- [Voice Input](#voice-input)
|
|
123
122
|
- [Damage Control](#damage-control)
|
|
124
123
|
- [Safety & Verification](#safety--verification)
|
|
125
124
|
- [Execution Traces & Checkpoints](#execution-traces--checkpoints)
|
|
@@ -431,74 +430,6 @@ Sync workflow files at project scope - share decisions, patterns, and knowledge
|
|
|
431
430
|
|
|
432
431
|
---
|
|
433
432
|
|
|
434
|
-
## Voice Input
|
|
435
|
-
Voice-to-transcript support with multiple provider options. Create tasks, stories, and commands using your voice.
|
|
436
|
-
|
|
437
|
-
### How It Works
|
|
438
|
-
|
|
439
|
-
```
|
|
440
|
-
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
441
|
-
│ Microphone │ ──▶ │ Record │ ──▶ │ Transcribe │
|
|
442
|
-
│ Input │ │ Audio │ │ (Whisper) │
|
|
443
|
-
└─────────────┘ └─────────────┘ └─────────────┘
|
|
444
|
-
│
|
|
445
|
-
▼
|
|
446
|
-
┌──────────┐
|
|
447
|
-
│ Text │
|
|
448
|
-
│ Output │
|
|
449
|
-
└──────────┘
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
### Providers
|
|
453
|
-
|
|
454
|
-
| Provider | API Key | Description |
|
|
455
|
-
|----------|---------|-------------|
|
|
456
|
-
| **Local** | No | Whisper.cpp - works offline |
|
|
457
|
-
| **OpenAI** | Yes | Best accuracy |
|
|
458
|
-
| **Groq** | Yes (free tier) | Fast cloud transcription |
|
|
459
|
-
|
|
460
|
-
### Setup
|
|
461
|
-
|
|
462
|
-
```bash
|
|
463
|
-
./scripts/flow voice-input setup # Interactive setup
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
The setup wizard will:
|
|
467
|
-
1. Ask if you want to enable voice input
|
|
468
|
-
2. Let you choose a provider
|
|
469
|
-
3. Configure API keys (if using cloud)
|
|
470
|
-
|
|
471
|
-
### Configuration
|
|
472
|
-
|
|
473
|
-
```json
|
|
474
|
-
{
|
|
475
|
-
"voice": {
|
|
476
|
-
"enabled": true,
|
|
477
|
-
"provider": "groq",
|
|
478
|
-
"groqApiKey": "gsk_...",
|
|
479
|
-
"defaultDuration": 30
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
### Commands
|
|
485
|
-
|
|
486
|
-
```bash
|
|
487
|
-
./scripts/flow voice-input # Record and transcribe
|
|
488
|
-
./scripts/flow voice-input -d 60 # Record for 60 seconds
|
|
489
|
-
./scripts/flow voice-input -p openai # Use specific provider
|
|
490
|
-
./scripts/flow voice-input --to-story # Create story from voice
|
|
491
|
-
./scripts/flow voice-input status # Show configuration
|
|
492
|
-
./scripts/flow voice-input test # Test with 5-second recording
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
### Requirements
|
|
496
|
-
|
|
497
|
-
- **Recording**: `sox` - install with `brew install sox` (macOS) or `apt install sox` (Linux)
|
|
498
|
-
- **Local Whisper**: `pip install openai-whisper` or download whisper.cpp
|
|
499
|
-
|
|
500
|
-
---
|
|
501
|
-
|
|
502
433
|
## Damage Control
|
|
503
434
|
|
|
504
435
|
Prevents destructive commands from running accidentally. Pattern-based blocking with configurable protection levels.
|
|
@@ -1492,13 +1423,6 @@ flow parallel suggest # Check if suggestion available
|
|
|
1492
1423
|
flow team sync-init # Initialize project sync
|
|
1493
1424
|
flow team project-id # Show/set project ID
|
|
1494
1425
|
|
|
1495
|
-
# Voice Inputflow voice-input setup # Configure voice input
|
|
1496
|
-
flow voice-input # Record and transcribe
|
|
1497
|
-
flow voice-input -d 60 # Record for 60 seconds
|
|
1498
|
-
flow voice-input -p groq # Use specific provider
|
|
1499
|
-
flow voice-input status # Show configuration
|
|
1500
|
-
flow voice-input test # Test recording
|
|
1501
|
-
|
|
1502
1426
|
# Hybrid Mode
|
|
1503
1427
|
flow hybrid enable # Enable with wizard
|
|
1504
1428
|
flow hybrid disable # Disable
|
package/lib/installer.js
CHANGED
|
@@ -254,7 +254,9 @@ function createWorkflowStructure(projectRoot, config) {
|
|
|
254
254
|
{ name: 'request-log.md', content: '# Request Log\n\nAutomatic log of all requests that changed files.\n\n---\n' },
|
|
255
255
|
{ name: 'decisions.md', content: '# Project Decisions\n\nKey decisions and patterns for this project.\n\n---\n' },
|
|
256
256
|
{ name: 'app-map.md', content: '# Application Map\n\nComponent registry for this project.\n\n---\n' },
|
|
257
|
-
{ name: 'progress.md', content: '# Progress Notes\n\nSession handoff notes.\n\n---\n' }
|
|
257
|
+
{ name: 'progress.md', content: '# Progress Notes\n\nSession handoff notes.\n\n---\n' },
|
|
258
|
+
{ name: 'function-map.md', content: '# Function Registry\n\nUtility function registry. Run `flow function-index scan` to populate.\n\n---\n' },
|
|
259
|
+
{ name: 'api-map.md', content: '# API Registry\n\nAPI calls registry. Run `flow api-index scan` to populate.\n\n---\n' }
|
|
258
260
|
];
|
|
259
261
|
|
|
260
262
|
for (const file of stateFiles) {
|
package/lib/utils.js
CHANGED
|
@@ -37,27 +37,40 @@ function findProjectRoot() {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
|
-
* Safely parse JSON with prototype pollution protection
|
|
40
|
+
* Safely parse JSON content with prototype pollution protection
|
|
41
|
+
*
|
|
42
|
+
* Note: For parsing JSON files, use safeJsonParseFile from flow-file-ops.js
|
|
43
|
+
* or safeReadJson from this module instead.
|
|
44
|
+
*
|
|
41
45
|
* @param {string} content - JSON string to parse
|
|
42
46
|
* @param {*} defaultValue - Default value if parsing fails
|
|
43
47
|
* @returns {Object} Parsed object or default value
|
|
44
48
|
*/
|
|
45
|
-
function
|
|
49
|
+
function safeJsonParseContent(content, defaultValue = null) {
|
|
46
50
|
try {
|
|
51
|
+
// Check for prototype pollution attempts in raw content
|
|
52
|
+
// Covers various quote styles and whitespace variants
|
|
53
|
+
if (/__proto__|constructor\s*["'`:]|prototype\s*["'`:]/i.test(content)) {
|
|
54
|
+
console.warn('[safeJsonParse] Suspicious content detected');
|
|
55
|
+
return defaultValue;
|
|
56
|
+
}
|
|
57
|
+
|
|
47
58
|
const parsed = JSON.parse(content);
|
|
48
59
|
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
// Validate it's an object (not primitive)
|
|
61
|
+
if (typeof parsed !== 'object' || parsed === null) {
|
|
62
|
+
return parsed; // Allow primitives to pass through
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Additional check: ensure no proto/constructor keys were added
|
|
66
|
+
const keys = Object.getOwnPropertyNames(parsed);
|
|
67
|
+
if (keys.includes('__proto__') || keys.includes('constructor') || keys.includes('prototype')) {
|
|
68
|
+
console.warn('[safeJsonParse] Prototype pollution attempt detected');
|
|
69
|
+
return defaultValue;
|
|
57
70
|
}
|
|
58
71
|
|
|
59
72
|
return parsed;
|
|
60
|
-
} catch (
|
|
73
|
+
} catch (_err) {
|
|
61
74
|
return defaultValue;
|
|
62
75
|
}
|
|
63
76
|
}
|
|
@@ -74,7 +87,7 @@ function safeReadJson(filePath, defaultValue = null) {
|
|
|
74
87
|
return defaultValue;
|
|
75
88
|
}
|
|
76
89
|
const content = fs.readFileSync(filePath, 'utf8');
|
|
77
|
-
return
|
|
90
|
+
return safeJsonParseContent(content, defaultValue);
|
|
78
91
|
} catch (err) {
|
|
79
92
|
return defaultValue;
|
|
80
93
|
}
|
|
@@ -290,7 +303,8 @@ function safeWriteFile(basePath, relativePath, content) {
|
|
|
290
303
|
|
|
291
304
|
module.exports = {
|
|
292
305
|
findProjectRoot,
|
|
293
|
-
|
|
306
|
+
safeJsonParseContent,
|
|
307
|
+
safeJsonParse: safeJsonParseContent, // Backward-compatible alias (deprecated)
|
|
294
308
|
safeReadJson,
|
|
295
309
|
httpsGet,
|
|
296
310
|
copyDir,
|
package/package.json
CHANGED
package/scripts/flow
CHANGED
|
@@ -57,6 +57,13 @@ show_help() {
|
|
|
57
57
|
echo " new-feature <n> Create new feature"
|
|
58
58
|
echo " bug <title> Create bug report"
|
|
59
59
|
echo ""
|
|
60
|
+
echo "Roadmap & Planning:"
|
|
61
|
+
echo " roadmap Show project roadmap"
|
|
62
|
+
echo " roadmap add <title> Add item to roadmap"
|
|
63
|
+
echo " roadmap validate <t> Validate item dependencies"
|
|
64
|
+
echo " roadmap move <t> Move item between phases"
|
|
65
|
+
echo " roadmap list [phase] List items by phase"
|
|
66
|
+
echo ""
|
|
60
67
|
echo "Workflow:"
|
|
61
68
|
echo " morning Morning briefing - where you left off"
|
|
62
69
|
echo " health Check workflow health"
|
|
@@ -85,8 +92,17 @@ show_help() {
|
|
|
85
92
|
echo " map-index scan Rescan codebase"
|
|
86
93
|
echo " map-sync Compare index with app-map"
|
|
87
94
|
echo ""
|
|
95
|
+
echo "Functions & APIs:"
|
|
96
|
+
echo " function-index scan Scan for utility functions"
|
|
97
|
+
echo " function-index show Show function details"
|
|
98
|
+
echo " function-index map Regenerate function-map.md"
|
|
99
|
+
echo " api-index scan Scan for API calls"
|
|
100
|
+
echo " api-index show Show API function or endpoint"
|
|
101
|
+
echo " api-index map Regenerate api-map.md"
|
|
102
|
+
echo ""
|
|
88
103
|
echo "Skills & Learning:"
|
|
89
104
|
echo " skill-learn Extract learnings from recent changes"
|
|
105
|
+
echo " auto-learn Auto-learn from session reviews and bug fixes"
|
|
90
106
|
echo " skill-create <name> Create a new skill"
|
|
91
107
|
echo " skill-create --list List existing skills"
|
|
92
108
|
echo " skill detect Detect frameworks in project"
|
|
@@ -101,6 +117,22 @@ show_help() {
|
|
|
101
117
|
echo " correct list List recent corrections"
|
|
102
118
|
echo " aggregate Aggregate learnings across skills"
|
|
103
119
|
echo " aggregate --promote Interactive promotion wizard"
|
|
120
|
+
echo " pattern-enforce Enforce patterns from decisions/app-map"
|
|
121
|
+
echo ""
|
|
122
|
+
echo "Code Analysis:"
|
|
123
|
+
echo " code-intel analyze Analyze imports/exports in codebase"
|
|
124
|
+
echo " code-intel deps Show dependency graph"
|
|
125
|
+
echo " review Code review with auto multi-pass detection"
|
|
126
|
+
echo " review --multipass Force multi-pass review mode"
|
|
127
|
+
echo ""
|
|
128
|
+
echo "Error Recovery:"
|
|
129
|
+
echo " error-recovery analyze Analyze error output hierarchically"
|
|
130
|
+
echo " error-recovery status Show recovery session status"
|
|
131
|
+
echo ""
|
|
132
|
+
echo "Epics:"
|
|
133
|
+
echo " epic list List all epics"
|
|
134
|
+
echo " epic show <id> Show epic details and progress"
|
|
135
|
+
echo " epic create Create a new epic"
|
|
104
136
|
echo ""
|
|
105
137
|
echo "Code Traces:"
|
|
106
138
|
echo " trace \"<prompt>\" Generate task-focused code trace"
|
|
@@ -283,9 +315,6 @@ show_help() {
|
|
|
283
315
|
echo " confidence stats Show confidence statistics"
|
|
284
316
|
echo ""
|
|
285
317
|
echo "Input & Editing:"
|
|
286
|
-
echo " voice-input Voice-to-transcript input"
|
|
287
|
-
echo " voice-input setup Install/configure voice dependencies"
|
|
288
|
-
echo " voice-input record Record and transcribe audio"
|
|
289
318
|
echo " guided-edit \"task\" Step-by-step guided multi-file editing"
|
|
290
319
|
echo " guided-edit status Show current guided edit session"
|
|
291
320
|
echo ""
|
|
@@ -325,6 +354,9 @@ case "${1:-}" in
|
|
|
325
354
|
story)
|
|
326
355
|
node "$SCRIPT_DIR/flow-story.js" "${@:2}"
|
|
327
356
|
;;
|
|
357
|
+
roadmap)
|
|
358
|
+
node "$SCRIPT_DIR/flow-roadmap.js" "${@:2}"
|
|
359
|
+
;;
|
|
328
360
|
new-feature)
|
|
329
361
|
"$SCRIPT_DIR/flow-new-feature" "${@:2}"
|
|
330
362
|
;;
|
|
@@ -412,9 +444,33 @@ case "${1:-}" in
|
|
|
412
444
|
map-sync)
|
|
413
445
|
"$SCRIPT_DIR/flow-map-sync" "${@:2}"
|
|
414
446
|
;;
|
|
447
|
+
function-index)
|
|
448
|
+
node "$SCRIPT_DIR/flow-function-index.js" "${@:2}"
|
|
449
|
+
;;
|
|
450
|
+
api-index)
|
|
451
|
+
node "$SCRIPT_DIR/flow-api-index.js" "${@:2}"
|
|
452
|
+
;;
|
|
415
453
|
skill-learn)
|
|
416
454
|
node "$SCRIPT_DIR/flow-skill-learn.js" "${@:2}"
|
|
417
455
|
;;
|
|
456
|
+
auto-learn)
|
|
457
|
+
node "$SCRIPT_DIR/flow-auto-learn.js" "${@:2}"
|
|
458
|
+
;;
|
|
459
|
+
code-intel|code-intelligence)
|
|
460
|
+
node "$SCRIPT_DIR/flow-code-intelligence.js" "${@:2}"
|
|
461
|
+
;;
|
|
462
|
+
error-recovery)
|
|
463
|
+
node "$SCRIPT_DIR/flow-error-recovery.js" "${@:2}"
|
|
464
|
+
;;
|
|
465
|
+
epic|epics)
|
|
466
|
+
node "$SCRIPT_DIR/flow-epics.js" "${@:2}"
|
|
467
|
+
;;
|
|
468
|
+
pattern-enforce)
|
|
469
|
+
node "$SCRIPT_DIR/flow-pattern-enforcer.js" "${@:2}"
|
|
470
|
+
;;
|
|
471
|
+
review)
|
|
472
|
+
node "$SCRIPT_DIR/flow-review.js" "${@:2}"
|
|
473
|
+
;;
|
|
418
474
|
correct)
|
|
419
475
|
node "$SCRIPT_DIR/flow-correct.js" "${@:2}"
|
|
420
476
|
;;
|
|
@@ -479,13 +535,13 @@ case "${1:-}" in
|
|
|
479
535
|
loop)
|
|
480
536
|
case "${2:-status}" in
|
|
481
537
|
status)
|
|
482
|
-
node "$SCRIPT_DIR/flow-
|
|
538
|
+
node "$SCRIPT_DIR/flow-task-enforcer.js" status
|
|
483
539
|
;;
|
|
484
540
|
stats)
|
|
485
|
-
node "$SCRIPT_DIR/flow-
|
|
541
|
+
node "$SCRIPT_DIR/flow-task-enforcer.js" stats
|
|
486
542
|
;;
|
|
487
543
|
can-exit)
|
|
488
|
-
node "$SCRIPT_DIR/flow-
|
|
544
|
+
node "$SCRIPT_DIR/flow-task-enforcer.js" can-exit
|
|
489
545
|
;;
|
|
490
546
|
enable)
|
|
491
547
|
node "$SCRIPT_DIR/flow-config-set.js" loops.enforced true
|
|
@@ -930,9 +986,6 @@ case "${1:-}" in
|
|
|
930
986
|
# Phase 6: Background Sync Daemon
|
|
931
987
|
node "$SCRIPT_DIR/flow-sync-daemon.js" "${@:2}"
|
|
932
988
|
;;
|
|
933
|
-
voice-input|voice)
|
|
934
|
-
node "$SCRIPT_DIR/flow-voice-input.js" "${@:2}"
|
|
935
|
-
;;
|
|
936
989
|
guided-edit)
|
|
937
990
|
node "$SCRIPT_DIR/flow-guided-edit.js" "${@:2}"
|
|
938
991
|
;;
|
|
@@ -965,7 +1018,6 @@ case "${1:-}" in
|
|
|
965
1018
|
hybrid) echo "Manage hybrid mode. Subcommands: enable, disable, status, execute, test, learning" ;;
|
|
966
1019
|
parallel) echo "Manage parallel execution. Subcommands: config, check, enable, disable" ;;
|
|
967
1020
|
worktree) echo "Manage worktree isolation. Subcommands: enable, disable, list, cleanup" ;;
|
|
968
|
-
voice-input|voice) echo "Voice-to-transcript input. Subcommands: setup, status, test, record" ;;
|
|
969
1021
|
long-input|long-input-process|transcript-digest|digest) echo "Long input processing. Ensures nothing missed from long prompts/transcripts/specs. Subcommands: status, new, check, topics, save-topics" ;;
|
|
970
1022
|
guided-edit) echo "Step-by-step guided multi-file editing. Usage: flow guided-edit \"task description\"" ;;
|
|
971
1023
|
*) echo "No detailed help for '$2'. Run 'flow help' for all commands." ;;
|