wogiflow 1.5.12 → 1.5.13
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/.claude/commands/wogi-session-end.md +41 -2
- package/.claude/commands/wogi-suggest.md +98 -0
- package/.workflow/templates/claude-md.hbs +2 -0
- package/lib/installer.js +28 -0
- package/package.json +1 -1
- package/scripts/flow-community.js +1071 -0
- package/scripts/flow-orchestrate.js +5 -2
- package/scripts/flow-regression.js +9 -7
- package/scripts/flow-script-resolver.js +375 -0
- package/scripts/flow-spec-generator.js +38 -25
- package/scripts/flow-start.js +2 -1
- package/scripts/flow-step-coverage.js +8 -10
- package/scripts/flow-task-enforcer.js +14 -3
- package/scripts/flow-verify.js +77 -56
- package/scripts/hooks/core/extension-registry.js +83 -0
- package/scripts/hooks/core/index.js +7 -1
- package/scripts/hooks/core/session-context.js +42 -0
- package/scripts/hooks/entry/claude-code/session-start.js +47 -0
- package/scripts/postinstall.js +51 -0
|
@@ -5,8 +5,9 @@ Steps:
|
|
|
5
5
|
2. **Check log size** - If over 50 entries, suggest archiving
|
|
6
6
|
3. **Check app-map** - If new components created, verify they're added
|
|
7
7
|
4. **Update progress.md** - Add handoff notes for next session
|
|
8
|
-
5. **
|
|
9
|
-
6. **
|
|
8
|
+
5. **Community push** - If `config.community.enabled`, push anonymous learnings
|
|
9
|
+
6. **Commit changes** - Stage and commit all workflow files
|
|
10
|
+
7. **Offer to push** - Ask if should push to remote
|
|
10
11
|
|
|
11
12
|
Output:
|
|
12
13
|
```
|
|
@@ -22,6 +23,9 @@ Checking app-map...
|
|
|
22
23
|
Updating progress.md...
|
|
23
24
|
Added handoff notes
|
|
24
25
|
|
|
26
|
+
Pushing community learnings...
|
|
27
|
+
✓ Community data pushed (anonymous, PII-stripped)
|
|
28
|
+
|
|
25
29
|
Committing...
|
|
26
30
|
✓ Committed: "chore: End session - 3 changes logged"
|
|
27
31
|
|
|
@@ -48,6 +52,41 @@ Progress.md handoff format:
|
|
|
48
52
|
- Decided to use shadcn/ui for modal
|
|
49
53
|
```
|
|
50
54
|
|
|
55
|
+
## Community Push (Step 5)
|
|
56
|
+
|
|
57
|
+
When `config.community.enabled` is `true` and `config.community.pushOnSessionEnd` is `true`:
|
|
58
|
+
|
|
59
|
+
1. Check if consent has been acknowledged (`~/.wogiflow/consent-acknowledged`)
|
|
60
|
+
- If not: Display the consent message (informational — enabling in config IS consent)
|
|
61
|
+
- Acknowledge consent after display
|
|
62
|
+
2. Collect shareable data via `collectShareableData(config)` from `scripts/flow-community.js`
|
|
63
|
+
3. Push to server via `pushToServer(payload, config)` — 5-second timeout, fire-and-forget
|
|
64
|
+
4. On success: Show "Community data pushed (anonymous, PII-stripped)"
|
|
65
|
+
5. On failure: Show "Community push skipped — server unreachable" (warning, not error)
|
|
66
|
+
6. If `community.enabled` is `false`: Skip silently (don't show the step at all)
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
const { collectShareableData, pushToServer, isConsentAcknowledged, acknowledgeConsent, getConsentMessage } = require('../../scripts/flow-community');
|
|
70
|
+
|
|
71
|
+
// Only if community is enabled
|
|
72
|
+
if (config.community?.enabled && config.community?.pushOnSessionEnd !== false) {
|
|
73
|
+
// Check consent
|
|
74
|
+
if (!isConsentAcknowledged()) {
|
|
75
|
+
console.log(getConsentMessage());
|
|
76
|
+
acknowledgeConsent();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Collect and push
|
|
80
|
+
const payload = collectShareableData(config);
|
|
81
|
+
const success = await pushToServer(payload, config);
|
|
82
|
+
if (success) {
|
|
83
|
+
console.log('Community data pushed (anonymous, PII-stripped)');
|
|
84
|
+
} else {
|
|
85
|
+
console.log('Community push skipped — server unreachable');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
51
90
|
## Cross-Session Pattern Detection (v6.0)
|
|
52
91
|
|
|
53
92
|
At session end, the system analyzes request history across multiple sessions (default: 30 days) to detect repeated patterns.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Submit a suggestion, feature request, or improvement idea for WogiFlow.
|
|
2
|
+
|
|
3
|
+
Your suggestion is sent anonymously to the WogiFlow community server where AI agents evaluate and prioritize it. Popular suggestions get fast-tracked for implementation.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/wogi-suggest "The spec phase should support attaching Figma mockups"
|
|
9
|
+
/wogi-suggest "It would be great if wogi-review could suggest test cases"
|
|
10
|
+
/wogi-suggest --type=bug "Standards check false positive on utility files"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Options
|
|
14
|
+
|
|
15
|
+
- `--type=idea` (default) — Feature request or new idea
|
|
16
|
+
- `--type=bug` — Something broken in WogiFlow itself
|
|
17
|
+
- `--type=improvement` — Existing feature could be better
|
|
18
|
+
|
|
19
|
+
## What Happens
|
|
20
|
+
|
|
21
|
+
1. Validate the suggestion is non-empty
|
|
22
|
+
2. Attach metadata: WogiFlow version, anonymous UUID, timestamp
|
|
23
|
+
3. Send to `POST /api/community/suggest` (5-second timeout)
|
|
24
|
+
4. Show confirmation: "Suggestion submitted. Thanks for helping improve WogiFlow!"
|
|
25
|
+
5. If offline: queue to `~/.wogiflow/pending-suggestions.json` and show "Suggestion queued — will be sent on next session start."
|
|
26
|
+
6. Queued suggestions are automatically retried on next session-start hook
|
|
27
|
+
|
|
28
|
+
## Steps
|
|
29
|
+
|
|
30
|
+
1. **Parse arguments**: Extract suggestion text and optional `--type` flag
|
|
31
|
+
2. **Check community config**: Read `config.community.enabled`
|
|
32
|
+
- If `community.enabled` is `false`: Show message explaining how to enable community features, then still attempt submission (suggestions don't require full community to be enabled — anyone can suggest improvements)
|
|
33
|
+
3. **Validate suggestion**: Must be non-empty after trimming
|
|
34
|
+
4. **Check consent**: If `~/.wogiflow/consent-acknowledged` doesn't exist, display consent message first, then acknowledge
|
|
35
|
+
5. **Submit suggestion**: Call `submitSuggestion(text, type, config)` from `scripts/flow-community.js`
|
|
36
|
+
6. **Display result**:
|
|
37
|
+
|
|
38
|
+
**Success output:**
|
|
39
|
+
```
|
|
40
|
+
Suggestion submitted. Thanks for helping improve WogiFlow!
|
|
41
|
+
|
|
42
|
+
Type: idea
|
|
43
|
+
Content: "The spec phase should support attaching Figma mockups"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Queued output (offline):**
|
|
47
|
+
```
|
|
48
|
+
Suggestion queued — will be sent on next session start.
|
|
49
|
+
|
|
50
|
+
Type: idea
|
|
51
|
+
Content: "The spec phase should support attaching Figma mockups"
|
|
52
|
+
Queued to: ~/.wogiflow/pending-suggestions.json
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Empty suggestion:**
|
|
56
|
+
```
|
|
57
|
+
Please provide a suggestion. Example:
|
|
58
|
+
/wogi-suggest "Add dark mode support to the dashboard"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Implementation
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
const { submitSuggestion, isConsentAcknowledged, acknowledgeConsent, getConsentMessage } = require('../../scripts/flow-community');
|
|
65
|
+
const { getConfig } = require('../../scripts/flow-utils');
|
|
66
|
+
|
|
67
|
+
// 1. Parse args
|
|
68
|
+
const args = ARGUMENTS || '';
|
|
69
|
+
const typeMatch = args.match(/--type=(idea|bug|improvement)/);
|
|
70
|
+
const type = typeMatch ? typeMatch[1] : 'idea';
|
|
71
|
+
const text = args.replace(/--type=\w+/, '').replace(/^["']|["']$/g, '').trim();
|
|
72
|
+
|
|
73
|
+
// 2. Validate
|
|
74
|
+
if (!text) {
|
|
75
|
+
// Show empty suggestion message
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// 3. Check consent
|
|
80
|
+
if (!isConsentAcknowledged()) {
|
|
81
|
+
// Display consent message, then acknowledge
|
|
82
|
+
console.log(getConsentMessage());
|
|
83
|
+
acknowledgeConsent();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// 4. Submit
|
|
87
|
+
const config = getConfig();
|
|
88
|
+
const success = await submitSuggestion(text, type, config);
|
|
89
|
+
|
|
90
|
+
// 5. Display result
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Privacy
|
|
94
|
+
|
|
95
|
+
- Suggestions are sent with an anonymous UUID (no personal info)
|
|
96
|
+
- No code, file paths, or project names are included
|
|
97
|
+
- WogiFlow version is attached for context
|
|
98
|
+
- AI agents on the server evaluate suggestions for quality and feasibility
|
|
@@ -80,6 +80,7 @@ npm install wogiflow && npx flow onboard
|
|
|
80
80
|
| `/wogi-status` | Project overview |
|
|
81
81
|
| `/wogi-health` | Check workflow health |
|
|
82
82
|
| `/wogi-roadmap` | View/manage deferred work |
|
|
83
|
+
| `/wogi-suggest "text"` | Submit suggestion for WogiFlow |
|
|
83
84
|
|
|
84
85
|
See `.claude/docs/commands.md` for complete command reference.
|
|
85
86
|
|
|
@@ -104,6 +105,7 @@ See `.claude/docs/commands.md` for complete command reference.
|
|
|
104
105
|
| "learn from this", "we keep making", "promote pattern", "extract lessons", "what have we learned" | `/wogi-learn` |
|
|
105
106
|
| "retro", "what went well", "what can we improve", "lessons learned", "session retrospective" | `/wogi-retrospective` |
|
|
106
107
|
| "rescan project", "re-evaluate project", "project changed", "others made changes", "sync wogi", "things changed", "out of sync" | `/wogi-rescan` |
|
|
108
|
+
| "suggest improvement", "feature request for wogi", "wogi suggestion", "submit feedback" | `/wogi-suggest` |
|
|
107
109
|
|
|
108
110
|
**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. These `/wogi-*` commands satisfy the mandatory routing requirement — you do NOT also need to invoke `/wogi-start` when a detection match exists. `/wogi-start` is the fallback for messages that don't match this table.
|
|
109
111
|
|
package/lib/installer.js
CHANGED
|
@@ -291,6 +291,14 @@ function createWorkflowStructure(projectRoot, config) {
|
|
|
291
291
|
},
|
|
292
292
|
_comment_semanticMatching: "AI-driven semantic similarity: combined = (string * 0.3) + (semantic * 0.7). Match levels: definite (>=90) blocks, likely (70-89) warns, possible (50-69) info only."
|
|
293
293
|
},
|
|
294
|
+
scripts: {
|
|
295
|
+
lint: null,
|
|
296
|
+
typecheck: null,
|
|
297
|
+
test: null,
|
|
298
|
+
build: null,
|
|
299
|
+
fix: null,
|
|
300
|
+
coverage: null
|
|
301
|
+
},
|
|
294
302
|
validation: {
|
|
295
303
|
afterFileEdit: {
|
|
296
304
|
enabled: true,
|
|
@@ -419,6 +427,26 @@ function createWorkflowStructure(projectRoot, config) {
|
|
|
419
427
|
enabled: true,
|
|
420
428
|
debtBudget: { maxItems: 50 },
|
|
421
429
|
autoFix: { enabled: false }
|
|
430
|
+
},
|
|
431
|
+
community: {
|
|
432
|
+
enabled: false,
|
|
433
|
+
anonymousId: null,
|
|
434
|
+
categories: {
|
|
435
|
+
modelIntelligence: true,
|
|
436
|
+
errorRecovery: true,
|
|
437
|
+
patternConvergence: true,
|
|
438
|
+
sessionStatistics: true,
|
|
439
|
+
skillLearnings: true
|
|
440
|
+
},
|
|
441
|
+
pushOnSessionEnd: true,
|
|
442
|
+
pullOnSessionStart: true,
|
|
443
|
+
cacheTtlHours: 24,
|
|
444
|
+
serverUrl: 'https://api.wogiflow.com'
|
|
445
|
+
},
|
|
446
|
+
team: {
|
|
447
|
+
enabled: false,
|
|
448
|
+
projectId: null,
|
|
449
|
+
orgId: null
|
|
422
450
|
}
|
|
423
451
|
};
|
|
424
452
|
fs.writeFileSync(configPath, JSON.stringify(configContent, null, 2));
|