workflow-agent-cli 2.4.3 → 2.7.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/README.md +48 -15
- package/dist/{chunk-WXXFUPYO.js → chunk-6NWQLGHI.js} +3 -1
- package/dist/{chunk-RDVTKGQV.js → chunk-DEAF7P4L.js} +36 -2
- package/dist/chunk-DEAF7P4L.js.map +1 -0
- package/dist/chunk-HKRWHFVI.js +415 -0
- package/dist/chunk-HKRWHFVI.js.map +1 -0
- package/dist/cli/index.js +3308 -468
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/{schema-OJg7YAI_.d.ts → schema-D0zTM83x.d.ts} +111 -0
- package/dist/scripts/postinstall.js +51 -71
- package/dist/scripts/postinstall.js.map +1 -1
- package/dist/validators/index.d.ts +1 -1
- package/package.json +34 -2
- package/templates/PATTERN_ANALYSIS_WORKFLOW.md +72 -55
- package/dist/chunk-RDVTKGQV.js.map +0 -1
- /package/dist/{chunk-WXXFUPYO.js.map → chunk-6NWQLGHI.js.map} +0 -0
|
@@ -22,28 +22,30 @@
|
|
|
22
22
|
|
|
23
23
|
Initiate pattern analysis when:
|
|
24
24
|
|
|
25
|
-
| Trigger
|
|
26
|
-
|
|
27
|
-
| **Post-fix success**
|
|
28
|
-
| **User request**
|
|
29
|
-
| **Project setup complete** | A new project was scaffolded and configured successfully
|
|
30
|
-
| **Migration complete**
|
|
31
|
-
| **CI/CD passing**
|
|
25
|
+
| Trigger | Description |
|
|
26
|
+
| -------------------------- | ---------------------------------------------------------------------- |
|
|
27
|
+
| **Post-fix success** | A quality issue was detected and auto-fixed successfully |
|
|
28
|
+
| **User request** | User explicitly asks to "analyze patterns" or "record what we learned" |
|
|
29
|
+
| **Project setup complete** | A new project was scaffolded and configured successfully |
|
|
30
|
+
| **Migration complete** | A framework upgrade or refactor was completed without issues |
|
|
31
|
+
| **CI/CD passing** | All quality checks pass after non-trivial changes |
|
|
32
32
|
|
|
33
33
|
---
|
|
34
34
|
|
|
35
35
|
## Phase 1: Discovery
|
|
36
36
|
|
|
37
37
|
### Objective
|
|
38
|
+
|
|
38
39
|
Identify candidate patterns worth capturing from the current work session.
|
|
39
40
|
|
|
40
41
|
### Steps
|
|
41
42
|
|
|
42
43
|
1. **Review Recent Changes**
|
|
44
|
+
|
|
43
45
|
```bash
|
|
44
46
|
# Check what was modified
|
|
45
47
|
git diff HEAD~5 --name-only
|
|
46
|
-
|
|
48
|
+
|
|
47
49
|
# Review specific fix patterns
|
|
48
50
|
git log --oneline -10 --grep="fix"
|
|
49
51
|
```
|
|
@@ -58,6 +60,7 @@ Identify candidate patterns worth capturing from the current work session.
|
|
|
58
60
|
- ✅ Framework-specific workarounds
|
|
59
61
|
|
|
60
62
|
3. **Check Existing Patterns**
|
|
63
|
+
|
|
61
64
|
```bash
|
|
62
65
|
# List current patterns to avoid duplicates
|
|
63
66
|
workflow learn:list --framework <current-framework>
|
|
@@ -77,29 +80,30 @@ Identify candidate patterns worth capturing from the current work session.
|
|
|
77
80
|
## Phase 2: Categorization
|
|
78
81
|
|
|
79
82
|
### Objective
|
|
83
|
+
|
|
80
84
|
Classify each pattern candidate into the appropriate type and category.
|
|
81
85
|
|
|
82
86
|
### Pattern Types
|
|
83
87
|
|
|
84
|
-
| Type
|
|
85
|
-
|
|
86
|
-
| **Fix Pattern** | Solves a specific, repeatable error
|
|
87
|
-
| **Blueprint**
|
|
88
|
+
| Type | Use When | Example |
|
|
89
|
+
| --------------- | ----------------------------------------- | ----------------------------- |
|
|
90
|
+
| **Fix Pattern** | Solves a specific, repeatable error | ESLint rule violation fix |
|
|
91
|
+
| **Blueprint** | Represents complete project/feature setup | Next.js 14 TypeScript starter |
|
|
88
92
|
|
|
89
93
|
### Fix Pattern Categories
|
|
90
94
|
|
|
91
95
|
Choose the most specific category:
|
|
92
96
|
|
|
93
|
-
| Category
|
|
94
|
-
|
|
95
|
-
| `lint`
|
|
96
|
-
| `type-error` | TypeScript/type system errors | Missing types, inference issues
|
|
97
|
-
| `dependency` | Package/module resolution
|
|
98
|
-
| `config`
|
|
99
|
-
| `runtime`
|
|
100
|
-
| `build`
|
|
101
|
-
| `test`
|
|
102
|
-
| `security`
|
|
97
|
+
| Category | Description | Examples |
|
|
98
|
+
| ------------ | ----------------------------- | ---------------------------------- |
|
|
99
|
+
| `lint` | Linting rule violations | ESLint, Prettier, Stylelint |
|
|
100
|
+
| `type-error` | TypeScript/type system errors | Missing types, inference issues |
|
|
101
|
+
| `dependency` | Package/module resolution | Missing deps, version conflicts |
|
|
102
|
+
| `config` | Configuration file issues | tsconfig, next.config, vite.config |
|
|
103
|
+
| `runtime` | Runtime errors | Null refs, async issues |
|
|
104
|
+
| `build` | Build/compilation failures | Bundler errors, missing exports |
|
|
105
|
+
| `test` | Test failures | Jest, Vitest, Playwright |
|
|
106
|
+
| `security` | Security vulnerabilities | Dependency audits, secrets |
|
|
103
107
|
|
|
104
108
|
### Tag Schema
|
|
105
109
|
|
|
@@ -118,6 +122,7 @@ custom:<value> → custom:app-router, custom:server-component
|
|
|
118
122
|
## Phase 3: Pattern Extraction
|
|
119
123
|
|
|
120
124
|
### Objective
|
|
125
|
+
|
|
121
126
|
Convert the identified fixes into structured pattern definitions.
|
|
122
127
|
|
|
123
128
|
### For Fix Patterns
|
|
@@ -130,14 +135,14 @@ Extract these components:
|
|
|
130
135
|
name: string, // "ESLint prefer-const fix"
|
|
131
136
|
description: string, // "Replace let with const for variables that are never reassigned"
|
|
132
137
|
category: string, // "lint"
|
|
133
|
-
|
|
138
|
+
|
|
134
139
|
// TRIGGER (when does this apply?)
|
|
135
140
|
trigger: {
|
|
136
141
|
errorPattern: string, // Regex: "Prefer const over let"
|
|
137
142
|
errorMessage: string, // Example: "'x' is never reassigned"
|
|
138
143
|
filePattern: string, // Glob: "*.ts,*.tsx"
|
|
139
144
|
},
|
|
140
|
-
|
|
145
|
+
|
|
141
146
|
// SOLUTION (how to fix it)
|
|
142
147
|
solution: {
|
|
143
148
|
type: string, // "file-change" | "command" | "config-update"
|
|
@@ -148,7 +153,7 @@ Extract these components:
|
|
|
148
153
|
description: string, // Human-readable step
|
|
149
154
|
}]
|
|
150
155
|
},
|
|
151
|
-
|
|
156
|
+
|
|
152
157
|
// COMPATIBILITY (where does this work?)
|
|
153
158
|
compatibility: {
|
|
154
159
|
framework: string, // "next" | "react" | "vue" | ...
|
|
@@ -156,7 +161,7 @@ Extract these components:
|
|
|
156
161
|
runtime: string, // "node"
|
|
157
162
|
runtimeVersion: string, // ">=18.0.0"
|
|
158
163
|
},
|
|
159
|
-
|
|
164
|
+
|
|
160
165
|
// METADATA
|
|
161
166
|
tags: [{ name: string, category: string }],
|
|
162
167
|
source: "manual" | "auto-heal" | "verify-fix" | "imported",
|
|
@@ -173,7 +178,7 @@ Extract these components:
|
|
|
173
178
|
// IDENTIFICATION
|
|
174
179
|
name: string, // "Next.js 14 TypeScript Starter"
|
|
175
180
|
description: string, // "Complete setup with App Router, Tailwind, and testing"
|
|
176
|
-
|
|
181
|
+
|
|
177
182
|
// STACK DEFINITION
|
|
178
183
|
stack: {
|
|
179
184
|
framework: string, // "next"
|
|
@@ -183,20 +188,20 @@ Extract these components:
|
|
|
183
188
|
dependencies: [{ name: string, version: string }],
|
|
184
189
|
devDependencies: [{ name: string, version: string }],
|
|
185
190
|
},
|
|
186
|
-
|
|
191
|
+
|
|
187
192
|
// PROJECT STRUCTURE
|
|
188
193
|
structure: {
|
|
189
194
|
directories: [{ path: string, purpose: string }],
|
|
190
195
|
keyFiles: [{ path: string, purpose: string, template?: string }],
|
|
191
196
|
},
|
|
192
|
-
|
|
197
|
+
|
|
193
198
|
// SETUP STEPS
|
|
194
199
|
setup: {
|
|
195
200
|
prerequisites: string[],
|
|
196
201
|
steps: [{ order: number, command: string, description: string }],
|
|
197
202
|
configs: [{ file: string, content: string, description: string }],
|
|
198
203
|
},
|
|
199
|
-
|
|
204
|
+
|
|
200
205
|
// METADATA
|
|
201
206
|
tags: [{ name: string, category: string }],
|
|
202
207
|
relatedPatterns: string[], // UUIDs of related fix patterns
|
|
@@ -209,6 +214,7 @@ Extract these components:
|
|
|
209
214
|
## Phase 4: Validation
|
|
210
215
|
|
|
211
216
|
### Objective
|
|
217
|
+
|
|
212
218
|
Ensure patterns are high-quality before storing.
|
|
213
219
|
|
|
214
220
|
### Quality Checklist
|
|
@@ -236,19 +242,20 @@ workflow learn:record --type fix --name "..." --dry-run
|
|
|
236
242
|
|
|
237
243
|
Ensure these are NOT in the pattern:
|
|
238
244
|
|
|
239
|
-
| Data Type
|
|
240
|
-
|
|
241
|
-
| Absolute paths
|
|
242
|
-
| Email addresses
|
|
243
|
-
| API keys
|
|
244
|
-
| IP addresses
|
|
245
|
-
| Repo-specific names | `my-company-app`
|
|
245
|
+
| Data Type | Example | Action |
|
|
246
|
+
| ------------------- | -------------------- | ---------------------- |
|
|
247
|
+
| Absolute paths | `/home/user/project` | Remove or use `<PATH>` |
|
|
248
|
+
| Email addresses | `dev@company.com` | Remove entirely |
|
|
249
|
+
| API keys | `sk_live_...` | Never include |
|
|
250
|
+
| IP addresses | `192.168.1.100` | Remove or use `<IP>` |
|
|
251
|
+
| Repo-specific names | `my-company-app` | Generalize |
|
|
246
252
|
|
|
247
253
|
---
|
|
248
254
|
|
|
249
255
|
## Phase 5: Store Update
|
|
250
256
|
|
|
251
257
|
### Objective
|
|
258
|
+
|
|
252
259
|
Persist validated patterns to the central store.
|
|
253
260
|
|
|
254
261
|
### Recording Fix Patterns
|
|
@@ -280,7 +287,10 @@ workflow learn:record \
|
|
|
280
287
|
When automating pattern capture:
|
|
281
288
|
|
|
282
289
|
```typescript
|
|
283
|
-
import {
|
|
290
|
+
import {
|
|
291
|
+
PatternStore,
|
|
292
|
+
type FixPattern,
|
|
293
|
+
} from "@hawkinside_out/workflow-improvement-tracker";
|
|
284
294
|
|
|
285
295
|
const store = new PatternStore(process.cwd());
|
|
286
296
|
await store.initialize();
|
|
@@ -300,12 +310,14 @@ const pattern: FixPattern = {
|
|
|
300
310
|
},
|
|
301
311
|
solution: {
|
|
302
312
|
type: "file-change",
|
|
303
|
-
steps: [
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
313
|
+
steps: [
|
|
314
|
+
{
|
|
315
|
+
order: 1,
|
|
316
|
+
action: "modify",
|
|
317
|
+
target: "<file>",
|
|
318
|
+
description: "Change 'let' to 'const' for the flagged variable",
|
|
319
|
+
},
|
|
320
|
+
],
|
|
309
321
|
},
|
|
310
322
|
compatibility: {
|
|
311
323
|
framework: "node",
|
|
@@ -350,6 +362,7 @@ await store.saveFixPattern(existing);
|
|
|
350
362
|
## Phase 6: Reporting
|
|
351
363
|
|
|
352
364
|
### Objective
|
|
365
|
+
|
|
353
366
|
Communicate what patterns were captured and their status.
|
|
354
367
|
|
|
355
368
|
### Post-Analysis Report Template
|
|
@@ -360,18 +373,21 @@ After completing pattern analysis, report:
|
|
|
360
373
|
## 📚 Pattern Analysis Complete
|
|
361
374
|
|
|
362
375
|
### Patterns Recorded
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
|
366
|
-
| Fix
|
|
367
|
-
|
|
|
376
|
+
|
|
377
|
+
| Type | Name | Category | Status |
|
|
378
|
+
| --------- | ------------------- | ---------- | ---------------------- |
|
|
379
|
+
| Fix | ESLint prefer-const | lint | ✅ Saved |
|
|
380
|
+
| Fix | TS null assertion | type-error | ✅ Saved |
|
|
381
|
+
| Blueprint | Next.js 14 Starter | - | ⏭ Skipped (duplicate) |
|
|
368
382
|
|
|
369
383
|
### Store Statistics
|
|
384
|
+
|
|
370
385
|
- Total Fix Patterns: 45
|
|
371
386
|
- Total Blueprints: 7
|
|
372
387
|
- This Session: +2 fixes
|
|
373
388
|
|
|
374
389
|
### Next Steps
|
|
390
|
+
|
|
375
391
|
- Run `workflow learn:list` to view all patterns
|
|
376
392
|
- Run `workflow learn:sync --push` to share with community
|
|
377
393
|
```
|
|
@@ -388,12 +404,12 @@ workflow learn:stats
|
|
|
388
404
|
|
|
389
405
|
### Good Pattern Characteristics
|
|
390
406
|
|
|
391
|
-
| Criteria
|
|
392
|
-
|
|
393
|
-
| **Specificity**
|
|
394
|
-
| **Reusability**
|
|
395
|
-
| **Documentation** | Clear description with context
|
|
396
|
-
| **Versioning**
|
|
407
|
+
| Criteria | Good Example | Bad Example |
|
|
408
|
+
| ----------------- | ------------------------------------------- | ------------------------------- |
|
|
409
|
+
| **Specificity** | `errorPattern: "Cannot find module '@/.*'"` | `errorPattern: "error"` |
|
|
410
|
+
| **Reusability** | Works across similar projects | Only works in one specific repo |
|
|
411
|
+
| **Documentation** | Clear description with context | "Fixes the thing" |
|
|
412
|
+
| **Versioning** | `frameworkVersion: "^14.0.0"` | No version specified |
|
|
397
413
|
|
|
398
414
|
### Pattern Red Flags
|
|
399
415
|
|
|
@@ -502,6 +518,7 @@ workflow verify --fix --learn
|
|
|
502
518
|
```
|
|
503
519
|
|
|
504
520
|
This automatically:
|
|
521
|
+
|
|
505
522
|
1. Runs all quality checks
|
|
506
523
|
2. Applies auto-fixes
|
|
507
524
|
3. Re-validates
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/index.ts","../src/config/schema.ts"],"sourcesContent":["import { cosmiconfig } from \"cosmiconfig\";\nimport { WorkflowConfig, WorkflowConfigSchema } from \"./schema.js\";\nimport { join } from \"path\";\nimport { existsSync } from \"fs\";\n\nconst explorer = cosmiconfig(\"workflow\", {\n searchPlaces: [\n \"workflow.config.ts\",\n \"workflow.config.js\",\n \"workflow.config.json\",\n \".workflowrc\",\n \".workflowrc.json\",\n \"package.json\",\n ],\n});\n\nexport async function loadConfig(\n cwd: string = process.cwd(),\n): Promise<WorkflowConfig | null> {\n try {\n const result = await explorer.search(cwd);\n\n if (!result || !result.config) {\n return null;\n }\n\n // Validate config against schema\n const validated = WorkflowConfigSchema.parse(result.config);\n return validated;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to load workflow config: ${error.message}`);\n }\n throw error;\n }\n}\n\nexport function hasConfig(cwd: string = process.cwd()): boolean {\n const configPaths = [\n \"workflow.config.ts\",\n \"workflow.config.js\",\n \"workflow.config.json\",\n \".workflowrc\",\n \".workflowrc.json\",\n ];\n\n return configPaths.some((path) => existsSync(join(cwd, path)));\n}\n\nexport {\n WorkflowConfig,\n WorkflowConfigSchema,\n Scope,\n BranchType,\n ConventionalType,\n} from \"./schema.js\";\n","import { z } from \"zod\";\n\n// Reserved scope names that cannot be used\nconst RESERVED_SCOPE_NAMES = [\n \"init\",\n \"create\",\n \"build\",\n \"test\",\n \"config\",\n \"docs\",\n \"ci\",\n \"deps\",\n];\n\nexport const ScopeSchema = z.object({\n name: z\n .string()\n .min(1)\n .max(32, \"Scope name must be 32 characters or less\")\n .regex(\n /^[a-z0-9-]+$/,\n \"Scope name must be lowercase alphanumeric with hyphens\",\n )\n .refine((name) => !RESERVED_SCOPE_NAMES.includes(name), {\n message: `Scope name cannot be a reserved word: ${RESERVED_SCOPE_NAMES.join(\", \")}`,\n }),\n description: z\n .string()\n .min(10, \"Scope description must be at least 10 characters\"),\n emoji: z.string().optional(),\n category: z\n .enum([\n \"auth\",\n \"features\",\n \"infrastructure\",\n \"documentation\",\n \"testing\",\n \"performance\",\n \"other\",\n ])\n .optional(),\n});\n\nexport const BranchTypeSchema = z.enum([\n \"feature\",\n \"bugfix\",\n \"hotfix\",\n \"chore\",\n \"refactor\",\n \"docs\",\n \"test\",\n \"release\",\n]);\n\nexport const ConventionalTypeSchema = z.enum([\n \"feat\",\n \"fix\",\n \"refactor\",\n \"chore\",\n \"docs\",\n \"test\",\n \"perf\",\n \"style\",\n \"ci\",\n \"build\",\n \"revert\",\n]);\n\nexport const EnforcementLevelSchema = z.enum([\n \"strict\",\n \"advisory\",\n \"learning\",\n]);\n\nexport const AnalyticsConfigSchema = z.object({\n enabled: z.boolean().default(false),\n shareAnonymous: z.boolean().default(false),\n});\n\nexport const CIConfigSchema = z.object({\n provider: z.enum([\"github\", \"gitlab\", \"azure\"]).default(\"github\"),\n nodeVersions: z.array(z.string()).optional(),\n defaultBranch: z.string().default(\"main\"),\n checks: z\n .array(z.enum([\"lint\", \"typecheck\", \"format\", \"build\", \"test\"]))\n .optional(),\n});\n\nexport const HooksConfigSchema = z.object({\n preCommit: z.array(z.string()).optional(),\n commitMsg: z.array(z.string()).optional(),\n prePush: z.array(z.string()).optional(),\n});\n\nexport const GuidelinesConfigSchema = z.object({\n mandatoryTemplates: z.array(z.string()).optional(),\n optionalTemplates: z.array(z.string()).optional(),\n customTemplatesDir: z.string().optional(),\n additionalMandatory: z.array(z.string()).optional(),\n optionalOverrides: z.array(z.string()).optional(),\n});\n\nexport const WorkflowConfigSchema = z.object({\n projectName: z.string().min(1),\n scopes: z.array(ScopeSchema).min(1),\n branchTypes: z.array(BranchTypeSchema).optional(),\n conventionalTypes: z.array(ConventionalTypeSchema).optional(),\n enforcement: EnforcementLevelSchema.default(\"strict\"),\n language: z.string().default(\"en\"),\n analytics: AnalyticsConfigSchema.optional(),\n adapter: z.string().optional(),\n syncRemote: z.string().optional(),\n ci: CIConfigSchema.optional(),\n hooks: HooksConfigSchema.optional(),\n guidelines: GuidelinesConfigSchema.optional(),\n});\n\nexport type Scope = z.infer<typeof ScopeSchema>;\nexport type BranchType = z.infer<typeof BranchTypeSchema>;\nexport type ConventionalType = z.infer<typeof ConventionalTypeSchema>;\nexport type EnforcementLevel = z.infer<typeof EnforcementLevelSchema>;\nexport type AnalyticsConfig = z.infer<typeof AnalyticsConfigSchema>;\nexport type CIConfig = z.infer<typeof CIConfigSchema>;\nexport type HooksConfig = z.infer<typeof HooksConfigSchema>;\nexport type GuidelinesConfig = z.infer<typeof GuidelinesConfigSchema>;\nexport type WorkflowConfig = z.infer<typeof WorkflowConfigSchema>;\n\nexport const defaultBranchTypes: BranchType[] = [\n \"feature\",\n \"bugfix\",\n \"hotfix\",\n \"chore\",\n \"refactor\",\n \"docs\",\n \"test\",\n];\n\nexport const defaultConventionalTypes: ConventionalType[] = [\n \"feat\",\n \"fix\",\n \"refactor\",\n \"chore\",\n \"docs\",\n \"test\",\n \"perf\",\n \"style\",\n];\n\n/**\n * Validates scope definitions for duplicates, description quality, and category values\n * @param scopes Array of scope definitions to validate\n * @returns Object with validation result and error messages\n */\nexport function validateScopeDefinitions(scopes: Scope[]): {\n valid: boolean;\n errors: string[];\n} {\n const errors: string[] = [];\n const seenNames = new Set<string>();\n\n for (const scope of scopes) {\n // Check for duplicate names\n if (seenNames.has(scope.name)) {\n errors.push(`Duplicate scope name: \"${scope.name}\"`);\n }\n seenNames.add(scope.name);\n\n // Validate using schema (this will catch min length, reserved names, etc.)\n const result = ScopeSchema.safeParse(scope);\n if (!result.success) {\n result.error.errors.forEach((err) => {\n errors.push(`Scope \"${scope.name}\": ${err.message}`);\n });\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n"],"mappings":"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","names":[]}
|
|
File without changes
|