maxsim-flutter 1.36.0 → 1.37.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/claude-setup/agent-writer.d.ts.map +1 -1
- package/dist/claude-setup/agent-writer.js +174 -11
- package/dist/claude-setup/agent-writer.js.map +1 -1
- package/dist/claude-setup/claude-md-generator.d.ts +1 -1
- package/dist/claude-setup/claude-md-generator.d.ts.map +1 -1
- package/dist/claude-setup/claude-md-generator.js +24 -8
- package/dist/claude-setup/claude-md-generator.js.map +1 -1
- package/dist/claude-setup/commands-writer.d.ts.map +1 -1
- package/dist/claude-setup/commands-writer.js +173 -13
- package/dist/claude-setup/commands-writer.js.map +1 -1
- package/dist/claude-setup/hooks-writer.d.ts +2 -0
- package/dist/claude-setup/hooks-writer.d.ts.map +1 -1
- package/dist/claude-setup/hooks-writer.js +109 -17
- package/dist/claude-setup/hooks-writer.js.map +1 -1
- package/dist/claude-setup/rules-writer.d.ts.map +1 -1
- package/dist/claude-setup/rules-writer.js +73 -0
- package/dist/claude-setup/rules-writer.js.map +1 -1
- package/dist/claude-setup/settings-writer.d.ts.map +1 -1
- package/dist/claude-setup/settings-writer.js +11 -3
- package/dist/claude-setup/settings-writer.js.map +1 -1
- package/dist/claude-setup/setup-orchestrator.d.ts.map +1 -1
- package/dist/claude-setup/setup-orchestrator.js +5 -2
- package/dist/claude-setup/setup-orchestrator.js.map +1 -1
- package/dist/claude-setup/skill-writer.d.ts.map +1 -1
- package/dist/claude-setup/skill-writer.js +253 -0
- package/dist/claude-setup/skill-writer.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/agent-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"agent-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/agent-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,EAAE,CAgBhF"}
|
|
@@ -22,12 +22,16 @@ export async function writeAgents(context, outputPath) {
|
|
|
22
22
|
* Useful for testing and dry-run mode.
|
|
23
23
|
*/
|
|
24
24
|
export function buildAgentDefinitions(context) {
|
|
25
|
-
|
|
25
|
+
const agents = [
|
|
26
26
|
buildFlutterArchitectAgent(context),
|
|
27
27
|
buildFlutterBuilderAgent(context),
|
|
28
28
|
buildFlutterTesterAgent(context),
|
|
29
29
|
buildFlutterReviewerAgent(context),
|
|
30
30
|
];
|
|
31
|
+
if (context.claude?.agentTeams) {
|
|
32
|
+
agents.push(buildFlutterSpecifierAgent(context), buildFlutterPlannerAgent(context));
|
|
33
|
+
}
|
|
34
|
+
return agents;
|
|
31
35
|
}
|
|
32
36
|
function formatAgentMarkdown(agent) {
|
|
33
37
|
const toolsList = JSON.stringify(agent.tools);
|
|
@@ -77,12 +81,38 @@ function buildModuleContext(context) {
|
|
|
77
81
|
}
|
|
78
82
|
return `Active modules: ${modules.join(', ')}. Be aware of module boundaries and inter-module dependencies.`;
|
|
79
83
|
}
|
|
84
|
+
function buildSharedSections() {
|
|
85
|
+
return `
|
|
86
|
+
## Error Recovery Protocol
|
|
87
|
+
|
|
88
|
+
1. **Self-Correction**: Re-read the error, check recent changes, retry with fix
|
|
89
|
+
2. **AI-to-AI Escalation**: If stuck after 2 attempts, ask another agent for fresh perspective
|
|
90
|
+
3. **Human-Augmented**: After 3 failed attempts, ask the user for context or constraints
|
|
91
|
+
4. **Full Human Takeover**: If the issue requires domain knowledge or external access, hand off completely
|
|
92
|
+
|
|
93
|
+
## Context Management
|
|
94
|
+
|
|
95
|
+
- Monitor context usage — quality degrades at 70%+ fill
|
|
96
|
+
- Use \`/clear\` between unrelated tasks
|
|
97
|
+
- Delegate large file scans to haiku subagents
|
|
98
|
+
- When context feels heavy, summarize progress and start fresh
|
|
99
|
+
|
|
100
|
+
## Handoff Format
|
|
101
|
+
|
|
102
|
+
When handing off to the next agent, include:
|
|
103
|
+
1. Changed files — absolute paths
|
|
104
|
+
2. Tests added/modified — file paths and count
|
|
105
|
+
3. Quality status — last check output
|
|
106
|
+
4. Blockers — unresolved issues
|
|
107
|
+
5. Next step — what the receiving agent should do`;
|
|
108
|
+
}
|
|
80
109
|
function buildFlutterArchitectAgent(context) {
|
|
81
110
|
const moduleContext = buildModuleContext(context);
|
|
111
|
+
const sharedSections = buildSharedSections();
|
|
82
112
|
return {
|
|
83
113
|
filename: 'flutter-architect.md',
|
|
84
114
|
name: 'flutter-architect',
|
|
85
|
-
description: 'Read-only planning agent. Designs feature architecture, defines interfaces, and plans implementation
|
|
115
|
+
description: 'Read-only planning agent. Designs feature architecture, defines interfaces, and plans implementation order. Triggers on: new feature, design, architecture review, plan implementation.',
|
|
86
116
|
model: 'opus',
|
|
87
117
|
tools: ['Read', 'Grep', 'Glob', 'WebSearch'],
|
|
88
118
|
maxTurns: 30,
|
|
@@ -136,15 +166,17 @@ Consult \`.claude/rules/\` for the full set of project-specific rules and conven
|
|
|
136
166
|
- Do NOT write or edit files — planning only
|
|
137
167
|
- Do NOT make implementation decisions without checking existing patterns
|
|
138
168
|
- Do NOT skip dependency analysis between features
|
|
139
|
-
- Do NOT approve designs that violate Clean Architecture layer rules
|
|
169
|
+
- Do NOT approve designs that violate Clean Architecture layer rules
|
|
170
|
+
${sharedSections}`,
|
|
140
171
|
};
|
|
141
172
|
}
|
|
142
173
|
function buildFlutterBuilderAgent(context) {
|
|
143
174
|
const moduleContext = buildModuleContext(context);
|
|
175
|
+
const sharedSections = buildSharedSections();
|
|
144
176
|
return {
|
|
145
177
|
filename: 'flutter-builder.md',
|
|
146
178
|
name: 'flutter-builder',
|
|
147
|
-
description: 'Implements Flutter features following Clean Architecture.
|
|
179
|
+
description: 'Implements Flutter features following Clean Architecture. Triggers on: implement, build, code, create, modify, fix.',
|
|
148
180
|
model: 'opus',
|
|
149
181
|
tools: ['Read', 'Write', 'Edit', 'Grep', 'Glob', 'Bash'],
|
|
150
182
|
isolation: 'worktree',
|
|
@@ -236,15 +268,17 @@ dart run build_runner build --delete-conflicting-outputs
|
|
|
236
268
|
- Do NOT modify files outside the project directory
|
|
237
269
|
- Do NOT run \`flutter clean\` without explicit instruction
|
|
238
270
|
- Do NOT install new packages without checking acceptance criteria first
|
|
239
|
-
- Do NOT skip quality gates
|
|
271
|
+
- Do NOT skip quality gates
|
|
272
|
+
${sharedSections}`,
|
|
240
273
|
};
|
|
241
274
|
}
|
|
242
275
|
function buildFlutterTesterAgent(context) {
|
|
243
276
|
const moduleContext = buildModuleContext(context);
|
|
277
|
+
const sharedSections = buildSharedSections();
|
|
244
278
|
return {
|
|
245
279
|
filename: 'flutter-tester.md',
|
|
246
280
|
name: 'flutter-tester',
|
|
247
|
-
description: 'TDD-first testing agent. Writes tests before implementation and validates
|
|
281
|
+
description: 'TDD-first testing agent. Writes tests before implementation and validates coverage. Triggers on: test, verify, coverage, TDD, assertion.',
|
|
248
282
|
model: 'sonnet',
|
|
249
283
|
tools: ['Read', 'Write', 'Edit', 'Grep', 'Glob', 'Bash'],
|
|
250
284
|
isolation: 'worktree',
|
|
@@ -326,16 +360,18 @@ dart format --set-exit-if-changed . # Code is formatted
|
|
|
326
360
|
- Do NOT write implementation code — only tests
|
|
327
361
|
- Do NOT modify source files outside \`test/\`
|
|
328
362
|
- Do NOT mark tasks complete without all tests passing
|
|
329
|
-
- Do NOT skip edge case tests
|
|
363
|
+
- Do NOT skip edge case tests
|
|
364
|
+
${sharedSections}`,
|
|
330
365
|
};
|
|
331
366
|
}
|
|
332
367
|
function buildFlutterReviewerAgent(context) {
|
|
333
368
|
const moduleContext = buildModuleContext(context);
|
|
369
|
+
const sharedSections = buildSharedSections();
|
|
334
370
|
return {
|
|
335
371
|
filename: 'flutter-reviewer.md',
|
|
336
372
|
name: 'flutter-reviewer',
|
|
337
|
-
description: 'Read-only compliance checker. Reviews code for
|
|
338
|
-
model: '
|
|
373
|
+
description: 'Read-only compliance checker. Reviews code for architecture violations and quality. Triggers on: review, check, audit, compliance, quality.',
|
|
374
|
+
model: 'sonnet',
|
|
339
375
|
tools: ['Read', 'Grep', 'Glob'],
|
|
340
376
|
memory: 'user',
|
|
341
377
|
maxTurns: 20,
|
|
@@ -343,7 +379,7 @@ function buildFlutterReviewerAgent(context) {
|
|
|
343
379
|
|
|
344
380
|
## Model Selection Rationale
|
|
345
381
|
|
|
346
|
-
This agent uses **
|
|
382
|
+
This agent uses **Sonnet** for thorough code review — security analysis, architecture violation detection, and nuanced compliance checking require more reasoning capability than Haiku provides.
|
|
347
383
|
|
|
348
384
|
## Sub-Agent Policy
|
|
349
385
|
|
|
@@ -409,7 +445,134 @@ Consult \`.claude/rules/\` for the full set of project-specific rules and conven
|
|
|
409
445
|
- Do NOT write or edit any files — read-only analysis only
|
|
410
446
|
- Do NOT approve code with unresolved architecture violations
|
|
411
447
|
- Do NOT skip the review checklist
|
|
412
|
-
- Do NOT suggest changes without specific file/line references
|
|
448
|
+
- Do NOT suggest changes without specific file/line references
|
|
449
|
+
${sharedSections}`,
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
function buildFlutterSpecifierAgent(context) {
|
|
453
|
+
const moduleContext = buildModuleContext(context);
|
|
454
|
+
const sharedSections = buildSharedSections();
|
|
455
|
+
return {
|
|
456
|
+
filename: 'flutter-specifier.md',
|
|
457
|
+
name: 'flutter-specifier',
|
|
458
|
+
description: 'Specification-Driven Development agent. Writes detailed specifications before implementation. Triggers on: specify, spec, requirements, acceptance criteria, define behavior.',
|
|
459
|
+
model: 'opus',
|
|
460
|
+
tools: ['Read', 'Grep', 'Glob', 'WebSearch'],
|
|
461
|
+
maxTurns: 30,
|
|
462
|
+
body: `You are a Flutter specifier for **${context.projectName}**. You write detailed specifications before any implementation begins, following Specification-Driven Development (SDD).
|
|
463
|
+
|
|
464
|
+
## Model Selection Rationale
|
|
465
|
+
|
|
466
|
+
This agent uses **Opus** for deep specification reasoning — defining precise acceptance criteria, identifying edge cases, and analyzing cross-feature impacts requires Opus-level capability.
|
|
467
|
+
|
|
468
|
+
## Your Role
|
|
469
|
+
|
|
470
|
+
You are a **specification** teammate. You:
|
|
471
|
+
1. Read the story or feature request
|
|
472
|
+
2. Analyze the existing codebase for relevant patterns and constraints
|
|
473
|
+
3. Write detailed specifications with acceptance criteria
|
|
474
|
+
4. Define data models, interfaces, and behavior contracts
|
|
475
|
+
5. Identify edge cases, error scenarios, and cross-feature impacts
|
|
476
|
+
6. Hand off the specification to the planner or builder
|
|
477
|
+
|
|
478
|
+
## Specification Workflow
|
|
479
|
+
|
|
480
|
+
1. **Understand**: Read the story requirements thoroughly
|
|
481
|
+
2. **Research**: Search the codebase for related code, patterns, and conventions
|
|
482
|
+
3. **Specify**: Write detailed specs including:
|
|
483
|
+
- Acceptance criteria (with testable predicates)
|
|
484
|
+
- Data models and interface signatures
|
|
485
|
+
- Error scenarios and edge cases
|
|
486
|
+
- Performance and security considerations
|
|
487
|
+
4. **Validate**: Cross-check specs against existing architecture
|
|
488
|
+
5. **Hand off**: Provide the planner with complete specs
|
|
489
|
+
|
|
490
|
+
## Clean Architecture Compliance
|
|
491
|
+
|
|
492
|
+
All specifications must respect the layer rules:
|
|
493
|
+
- **Domain** (entities, repository interfaces, use cases) — no external dependencies
|
|
494
|
+
- **Data** (repository implementations, data sources, models) — depends only on Domain
|
|
495
|
+
- **Presentation** (pages, widgets, Riverpod providers) — depends on Domain, never directly on Data
|
|
496
|
+
|
|
497
|
+
## Module Context
|
|
498
|
+
|
|
499
|
+
${moduleContext}
|
|
500
|
+
|
|
501
|
+
## Scope Boundaries
|
|
502
|
+
|
|
503
|
+
### Do
|
|
504
|
+
- Read and analyze existing code patterns
|
|
505
|
+
- Write detailed specifications with acceptance criteria
|
|
506
|
+
- Research best practices and Flutter conventions
|
|
507
|
+
- Identify edge cases and error scenarios
|
|
508
|
+
|
|
509
|
+
### Do NOT
|
|
510
|
+
- Do NOT write or edit implementation files — specification only
|
|
511
|
+
- Do NOT skip edge case analysis
|
|
512
|
+
- Do NOT approve specifications that violate Clean Architecture
|
|
513
|
+
- Do NOT specify features without checking existing patterns
|
|
514
|
+
${sharedSections}`,
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
function buildFlutterPlannerAgent(context) {
|
|
518
|
+
const moduleContext = buildModuleContext(context);
|
|
519
|
+
const sharedSections = buildSharedSections();
|
|
520
|
+
return {
|
|
521
|
+
filename: 'flutter-planner.md',
|
|
522
|
+
name: 'flutter-planner',
|
|
523
|
+
description: 'Implementation planner for SDD workflow. Creates step-by-step implementation plans from specifications. Triggers on: plan, break down, implementation steps, task breakdown, sprint plan.',
|
|
524
|
+
model: 'sonnet',
|
|
525
|
+
tools: ['Read', 'Grep', 'Glob'],
|
|
526
|
+
maxTurns: 25,
|
|
527
|
+
body: `You are a Flutter implementation planner for **${context.projectName}**. You create step-by-step implementation plans from specifications, following Specification-Driven Development (SDD).
|
|
528
|
+
|
|
529
|
+
## Model Selection Rationale
|
|
530
|
+
|
|
531
|
+
This agent uses **Sonnet** for structured planning — breaking specifications into ordered implementation steps, identifying dependencies, and creating task breakdowns is well-suited to Sonnet's capabilities.
|
|
532
|
+
|
|
533
|
+
## Your Role
|
|
534
|
+
|
|
535
|
+
You are a **planning** teammate. You:
|
|
536
|
+
1. Read the specification from the specifier
|
|
537
|
+
2. Break it into ordered implementation steps
|
|
538
|
+
3. Identify dependencies between steps
|
|
539
|
+
4. Estimate complexity and assign to appropriate agents
|
|
540
|
+
5. Create a clear implementation plan for the builder and tester
|
|
541
|
+
|
|
542
|
+
## Planning Workflow
|
|
543
|
+
|
|
544
|
+
1. **Read spec**: Understand the full specification and acceptance criteria
|
|
545
|
+
2. **Decompose**: Break the spec into atomic implementation tasks
|
|
546
|
+
3. **Order**: Arrange tasks respecting Clean Architecture layer order (Domain → Data → Presentation)
|
|
547
|
+
4. **Dependencies**: Identify which tasks block others
|
|
548
|
+
5. **Assign**: Recommend which agent should handle each task
|
|
549
|
+
6. **Hand off**: Provide the ordered plan to the team
|
|
550
|
+
|
|
551
|
+
## Task Decomposition Rules
|
|
552
|
+
|
|
553
|
+
- Each task should be completable in a single agent turn
|
|
554
|
+
- Tasks follow Clean Architecture layer order
|
|
555
|
+
- Test tasks are paired with implementation tasks (TDD)
|
|
556
|
+
- Each task has clear acceptance criteria from the spec
|
|
557
|
+
|
|
558
|
+
## Module Context
|
|
559
|
+
|
|
560
|
+
${moduleContext}
|
|
561
|
+
|
|
562
|
+
## Scope Boundaries
|
|
563
|
+
|
|
564
|
+
### Do
|
|
565
|
+
- Read specifications and existing code
|
|
566
|
+
- Create ordered implementation plans
|
|
567
|
+
- Identify task dependencies and blockers
|
|
568
|
+
- Recommend agent assignments
|
|
569
|
+
|
|
570
|
+
### Do NOT
|
|
571
|
+
- Do NOT write or edit implementation files — planning only
|
|
572
|
+
- Do NOT skip dependency analysis
|
|
573
|
+
- Do NOT create plans that violate Clean Architecture layer order
|
|
574
|
+
- Do NOT plan tasks without clear acceptance criteria
|
|
575
|
+
${sharedSections}`,
|
|
413
576
|
};
|
|
414
577
|
}
|
|
415
578
|
//# sourceMappingURL=agent-writer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-writer.js","sourceRoot":"","sources":["../../src/claude-setup/agent-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAejC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,UAAkB;IAElB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAuB;IAC3D,
|
|
1
|
+
{"version":3,"file":"agent-writer.js","sourceRoot":"","sources":["../../src/claude-setup/agent-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ProjectContext } from '../core/context.js';
|
|
2
2
|
/**
|
|
3
|
-
* Generates a slim CLAUDE.md (~
|
|
3
|
+
* Generates a slim CLAUDE.md (~90 lines) for a scaffolded Flutter project.
|
|
4
4
|
* Detailed rules are referenced via @-imports to .claude/rules/ files.
|
|
5
5
|
*/
|
|
6
6
|
export declare function generateClaudeMd(context: ProjectContext): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md-generator.d.ts","sourceRoot":"","sources":["../../src/claude-setup/claude-md-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"claude-md-generator.d.ts","sourceRoot":"","sources":["../../src/claude-setup/claude-md-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAiBhE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generates a slim CLAUDE.md (~
|
|
2
|
+
* Generates a slim CLAUDE.md (~90 lines) for a scaffolded Flutter project.
|
|
3
3
|
* Detailed rules are referenced via @-imports to .claude/rules/ files.
|
|
4
4
|
*/
|
|
5
5
|
export function generateClaudeMd(context) {
|
|
@@ -8,8 +8,9 @@ export function generateClaudeMd(context) {
|
|
|
8
8
|
generateRules(context),
|
|
9
9
|
generateBuildCommands(),
|
|
10
10
|
generateQualityGates(),
|
|
11
|
+
generateSecurity(),
|
|
11
12
|
generateModelPolicy(),
|
|
12
|
-
generateDevelopmentWorkflow(),
|
|
13
|
+
generateDevelopmentWorkflow(context),
|
|
13
14
|
generateKeyPaths(),
|
|
14
15
|
];
|
|
15
16
|
if (context.claude.agentTeams) {
|
|
@@ -46,6 +47,8 @@ function generateRules(context) {
|
|
|
46
47
|
'@.claude/rules/security.md',
|
|
47
48
|
'@.claude/rules/git-workflow.md',
|
|
48
49
|
'@.claude/rules/code-quality.md',
|
|
50
|
+
'@.claude/rules/error-recovery.md',
|
|
51
|
+
'@.claude/rules/context-management.md',
|
|
49
52
|
];
|
|
50
53
|
if (context.modules.auth)
|
|
51
54
|
imports.push('@.claude/rules/auth.md');
|
|
@@ -87,6 +90,15 @@ function generateQualityGates() {
|
|
|
87
90
|
- \`flutter test\` — all pass
|
|
88
91
|
- \`dart format --set-exit-if-changed .\` — formatted`;
|
|
89
92
|
}
|
|
93
|
+
function generateSecurity() {
|
|
94
|
+
return `## Security
|
|
95
|
+
|
|
96
|
+
- **NEVER** hardcode secrets, API keys, or credentials in source code
|
|
97
|
+
- **NEVER** log PII (personal identifiable information) or sensitive data
|
|
98
|
+
- Validate ALL external input — user input, API responses, deep link parameters
|
|
99
|
+
- Use \`flutter_secure_storage\` for sensitive data, not \`SharedPreferences\`
|
|
100
|
+
- Always use HTTPS for network requests`;
|
|
101
|
+
}
|
|
90
102
|
function generateModelPolicy() {
|
|
91
103
|
return `## Model Usage Policy
|
|
92
104
|
|
|
@@ -94,12 +106,16 @@ function generateModelPolicy() {
|
|
|
94
106
|
- **Sonnet**: Simple, well-defined tasks with clear requirements.
|
|
95
107
|
- **Haiku**: Trivial tasks only (formatting, simple scans).`;
|
|
96
108
|
}
|
|
97
|
-
function generateDevelopmentWorkflow() {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
109
|
+
function generateDevelopmentWorkflow(context) {
|
|
110
|
+
const lines = [
|
|
111
|
+
'## Development Workflow',
|
|
112
|
+
'',
|
|
113
|
+
];
|
|
114
|
+
if (context.claude.agentTeams) {
|
|
115
|
+
lines.push('### SDD Pipeline (for new features)', '`/specify` → `/plan` → `/tasks` → `/start-team`', 'Use Spec-Driven Development for features with 3+ files across multiple layers.', '');
|
|
116
|
+
}
|
|
117
|
+
lines.push('- Commit: `feat: [StoryID] - description`', '- Files: `snake_case.dart`', '- Tests: `<source>_test.dart`');
|
|
118
|
+
return lines.join('\n');
|
|
103
119
|
}
|
|
104
120
|
function generateKeyPaths() {
|
|
105
121
|
return `## Key Paths
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md-generator.js","sourceRoot":"","sources":["../../src/claude-setup/claude-md-generator.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,MAAM,QAAQ,GAAa;QACzB,cAAc,CAAC,OAAO,CAAC;QACvB,aAAa,CAAC,OAAO,CAAC;QACtB,qBAAqB,EAAE;QACvB,oBAAoB,EAAE;QACtB,mBAAmB,EAAE;QACrB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"claude-md-generator.js","sourceRoot":"","sources":["../../src/claude-setup/claude-md-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/commands-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"commands-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/commands-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9F"}
|
|
@@ -7,11 +7,15 @@ import path from 'node:path';
|
|
|
7
7
|
export async function writeCommands(context, outputPath) {
|
|
8
8
|
const commandsDir = path.join(outputPath, '.claude', 'commands');
|
|
9
9
|
await fs.ensureDir(commandsDir);
|
|
10
|
-
|
|
10
|
+
const writes = [
|
|
11
11
|
fs.writeFile(path.join(commandsDir, 'add-feature.md'), generateAddFeatureCommand(context)),
|
|
12
12
|
fs.writeFile(path.join(commandsDir, 'analyze.md'), generateAnalyzeCommand()),
|
|
13
|
-
fs.writeFile(path.join(commandsDir, 'start-team.md'), generateStartTeamCommand()),
|
|
14
|
-
]
|
|
13
|
+
fs.writeFile(path.join(commandsDir, 'start-team.md'), generateStartTeamCommand(context)),
|
|
14
|
+
];
|
|
15
|
+
if (context.claude?.agentTeams) {
|
|
16
|
+
writes.push(fs.writeFile(path.join(commandsDir, 'specify.md'), generateSpecifyCommand()), fs.writeFile(path.join(commandsDir, 'plan.md'), generatePlanCommand()), fs.writeFile(path.join(commandsDir, 'tasks.md'), generateTasksCommand()));
|
|
17
|
+
}
|
|
18
|
+
await Promise.all(writes);
|
|
15
19
|
}
|
|
16
20
|
function generateAddFeatureCommand(context) {
|
|
17
21
|
const routerNote = context.modules.auth
|
|
@@ -304,7 +308,21 @@ flutter analyze && flutter test && dart format --set-exit-if-changed .
|
|
|
304
308
|
\`\`\`
|
|
305
309
|
`;
|
|
306
310
|
}
|
|
307
|
-
function generateStartTeamCommand() {
|
|
311
|
+
function generateStartTeamCommand(context) {
|
|
312
|
+
const sddNote = context.claude?.agentTeams
|
|
313
|
+
? `
|
|
314
|
+
## SDD Pipeline (recommended for 3+ file features)
|
|
315
|
+
|
|
316
|
+
Before spawning the team, use the SDD pipeline to produce a structured spec and plan:
|
|
317
|
+
|
|
318
|
+
1. \`/specify\` — Interview funnel to produce \`specs/<feature>.md\`
|
|
319
|
+
2. \`/plan\` — Analyze spec and codebase to produce \`specs/<feature>.plan.md\`
|
|
320
|
+
3. \`/tasks\` — Generate PRD stories with dependencies in \`prd.json\`
|
|
321
|
+
|
|
322
|
+
Then run \`/start-team\` to execute the stories with the agent team.
|
|
323
|
+
|
|
324
|
+
`
|
|
325
|
+
: '';
|
|
308
326
|
return `# Start Team Sprint
|
|
309
327
|
|
|
310
328
|
Orchestrate a Claude Code Agent Team sprint from \`prd.json\`.
|
|
@@ -318,7 +336,7 @@ git status # Working tree must be clean
|
|
|
318
336
|
flutter analyze # Zero errors/warnings
|
|
319
337
|
flutter test # All tests pass
|
|
320
338
|
\`\`\`
|
|
321
|
-
|
|
339
|
+
${sddNote}
|
|
322
340
|
## Step 1 — Read prd.json
|
|
323
341
|
|
|
324
342
|
Load \`prd.json\` and identify incomplete stories (\`passes: false\`). Group by phase, pick the next batch of stories to implement.
|
|
@@ -331,12 +349,12 @@ Create a team named \`flutter-sprint\` using TeamCreate. Create TaskCreate entri
|
|
|
331
349
|
|
|
332
350
|
Spawn 4 agents with the following roles and models:
|
|
333
351
|
|
|
334
|
-
| Agent | Model | Role |
|
|
335
|
-
|
|
336
|
-
| **architect** | opus | Designs implementation approach, identifies files and interfaces |
|
|
337
|
-
| **builder** | opus | Writes failing tests (RED), then minimal code to pass (GREEN) |
|
|
338
|
-
| **tester** | sonnet | Validates implementation, runs quality gates, checks coverage |
|
|
339
|
-
| **reviewer** |
|
|
352
|
+
| Agent | Model | Role | File Ownership |
|
|
353
|
+
|-------|-------|------|----------------|
|
|
354
|
+
| **architect** | opus | Designs implementation approach, identifies files and interfaces | \`specs/\`, \`docs/\` |
|
|
355
|
+
| **builder** | opus | Writes failing tests (RED), then minimal code to pass (GREEN) | \`lib/\`, \`test/\` |
|
|
356
|
+
| **tester** | sonnet | Validates implementation, runs quality gates, checks coverage | \`test/\`, quality reports |
|
|
357
|
+
| **reviewer** | sonnet | Reviews code for Clean Architecture compliance and best practices | Review comments only |
|
|
340
358
|
|
|
341
359
|
## Step 4 — TDD Flow Per Story
|
|
342
360
|
|
|
@@ -347,7 +365,15 @@ For each story, follow this orchestration:
|
|
|
347
365
|
3. **Tester** runs \`flutter analyze && flutter test\`, checks coverage
|
|
348
366
|
4. **Reviewer** reviews code for architecture compliance
|
|
349
367
|
|
|
350
|
-
## Step 5 —
|
|
368
|
+
## Step 5 — Error Recovery Protocol
|
|
369
|
+
|
|
370
|
+
If a step fails, follow the 4-tier escalation:
|
|
371
|
+
1. **Self-Correction**: Re-read error, check last changes, run diagnostics
|
|
372
|
+
2. **AI-to-AI**: Ask another agent for a fresh perspective
|
|
373
|
+
3. **Human-Augmented**: Ask the user for domain context
|
|
374
|
+
4. **Full Handoff**: Document what was tried and hand to user
|
|
375
|
+
|
|
376
|
+
## Step 6 — Commit + Push
|
|
351
377
|
|
|
352
378
|
After each story passes all quality gates:
|
|
353
379
|
|
|
@@ -359,9 +385,143 @@ git push
|
|
|
359
385
|
|
|
360
386
|
Mark the story as \`passes: true\` in \`prd.json\`.
|
|
361
387
|
|
|
362
|
-
## Step
|
|
388
|
+
## Step 7 — Repeat
|
|
363
389
|
|
|
364
390
|
Continue with the next story until the sprint batch is complete. Shut down agents when done.
|
|
365
391
|
`;
|
|
366
392
|
}
|
|
393
|
+
function generateSpecifyCommand() {
|
|
394
|
+
return `---
|
|
395
|
+
model: opus
|
|
396
|
+
---
|
|
397
|
+
# Specify Feature
|
|
398
|
+
|
|
399
|
+
Interview funnel to produce a structured feature specification.
|
|
400
|
+
|
|
401
|
+
## Interview Steps
|
|
402
|
+
|
|
403
|
+
### 1. Problem Statement
|
|
404
|
+
Ask: "What problem does this feature solve? Who benefits?"
|
|
405
|
+
|
|
406
|
+
### 2. Scope Definition
|
|
407
|
+
Ask: "What is in scope and what is explicitly out of scope?"
|
|
408
|
+
|
|
409
|
+
### 3. Data Model
|
|
410
|
+
Ask: "What are the core entities? What fields do they have? What are the relationships?"
|
|
411
|
+
Produce freezed entity definitions.
|
|
412
|
+
|
|
413
|
+
### 4. User Interface
|
|
414
|
+
Ask: "What screens/pages are needed? What user interactions?"
|
|
415
|
+
List pages with their navigation paths.
|
|
416
|
+
|
|
417
|
+
### 5. API Contracts
|
|
418
|
+
Ask: "What API endpoints are needed? What are request/response shapes?"
|
|
419
|
+
Define repository interfaces.
|
|
420
|
+
|
|
421
|
+
### 6. Edge Cases
|
|
422
|
+
Ask: "What happens when: network fails, data is empty, user cancels, input is invalid?"
|
|
423
|
+
|
|
424
|
+
### 7. Security Considerations
|
|
425
|
+
Ask: "Does this feature handle sensitive data? Authentication required? Input validation needs?"
|
|
426
|
+
|
|
427
|
+
### 8. Constraints
|
|
428
|
+
Ask: "Any performance requirements? Offline support needed? Accessibility requirements?"
|
|
429
|
+
|
|
430
|
+
## Output
|
|
431
|
+
|
|
432
|
+
Save the spec to \`specs/<feature-name>.md\` using the spec template from skills.
|
|
433
|
+
Include all answers structured into the template sections.
|
|
434
|
+
`;
|
|
435
|
+
}
|
|
436
|
+
function generatePlanCommand() {
|
|
437
|
+
return `---
|
|
438
|
+
model: opus
|
|
439
|
+
---
|
|
440
|
+
# Plan Feature Implementation
|
|
441
|
+
|
|
442
|
+
Read a feature spec and produce an implementation plan following Clean Architecture.
|
|
443
|
+
|
|
444
|
+
## Input
|
|
445
|
+
|
|
446
|
+
Read the spec from \`specs/<feature-name>.md\`.
|
|
447
|
+
|
|
448
|
+
## Analysis Steps
|
|
449
|
+
|
|
450
|
+
### 1. Analyze Current Codebase
|
|
451
|
+
- Identify existing patterns and conventions in \`lib/\`
|
|
452
|
+
- Check for reusable providers, entities, or utilities
|
|
453
|
+
- Review \`pubspec.yaml\` for available packages
|
|
454
|
+
|
|
455
|
+
### 2. Plan Domain Layer (Phase 1)
|
|
456
|
+
- List all entities with freezed annotations
|
|
457
|
+
- Define repository interfaces
|
|
458
|
+
- Design use cases (single-responsibility)
|
|
459
|
+
|
|
460
|
+
### 3. Plan Data Layer (Phase 2)
|
|
461
|
+
- Design data models with serialization
|
|
462
|
+
- Plan data sources (remote, local)
|
|
463
|
+
- Map repository implementations
|
|
464
|
+
|
|
465
|
+
### 4. Plan Presentation Layer (Phase 3)
|
|
466
|
+
- Design providers (AsyncNotifier pattern)
|
|
467
|
+
- Plan pages and their routes
|
|
468
|
+
- Identify reusable widgets
|
|
469
|
+
|
|
470
|
+
### 5. Plan Integration (Phase 4)
|
|
471
|
+
- Route registration in \`app_router.dart\`
|
|
472
|
+
- Code generation requirements
|
|
473
|
+
- Integration test scenarios
|
|
474
|
+
|
|
475
|
+
## Output
|
|
476
|
+
|
|
477
|
+
Save the plan to \`specs/<feature-name>.plan.md\` using the plan template from skills.
|
|
478
|
+
Include file ownership boundaries and complexity estimates for each file.
|
|
479
|
+
`;
|
|
480
|
+
}
|
|
481
|
+
function generateTasksCommand() {
|
|
482
|
+
return `---
|
|
483
|
+
model: sonnet
|
|
484
|
+
---
|
|
485
|
+
# Generate Tasks from Plan
|
|
486
|
+
|
|
487
|
+
Read a feature plan and generate PRD stories for \`prd.json\`.
|
|
488
|
+
|
|
489
|
+
## Input
|
|
490
|
+
|
|
491
|
+
Read the plan from \`specs/<feature-name>.plan.md\`.
|
|
492
|
+
|
|
493
|
+
## Steps
|
|
494
|
+
|
|
495
|
+
### 1. Break Plan into Stories
|
|
496
|
+
- Each story should be completable in a single TDD cycle
|
|
497
|
+
- One story per layer or sub-feature
|
|
498
|
+
- Include acceptance criteria with testable predicates
|
|
499
|
+
|
|
500
|
+
### 2. Define Dependencies
|
|
501
|
+
- Domain stories have no dependencies
|
|
502
|
+
- Data stories depend on their domain stories
|
|
503
|
+
- Presentation stories depend on domain stories
|
|
504
|
+
- Integration stories depend on data and presentation
|
|
505
|
+
|
|
506
|
+
### 3. Estimate Complexity
|
|
507
|
+
- 1-2 SP: Single file, straightforward
|
|
508
|
+
- 3 SP: 2-3 files, moderate logic
|
|
509
|
+
- 5 SP: Multiple files, complex logic
|
|
510
|
+
- 8 SP: Cross-cutting, architectural
|
|
511
|
+
|
|
512
|
+
### 4. Write to prd.json
|
|
513
|
+
Add stories with:
|
|
514
|
+
- Unique IDs following existing pattern
|
|
515
|
+
- Phase matching the plan phases
|
|
516
|
+
- Priority based on dependency order (P0 for domain, P1 for data, P2 for presentation)
|
|
517
|
+
- \`passes: false\`
|
|
518
|
+
|
|
519
|
+
### 5. Create Tasks
|
|
520
|
+
Use TaskCreate to generate task entries with \`blockedBy\` dependencies matching the story dependencies.
|
|
521
|
+
|
|
522
|
+
## Output
|
|
523
|
+
|
|
524
|
+
Report the number of stories created and their dependency graph.
|
|
525
|
+
`;
|
|
526
|
+
}
|
|
367
527
|
//# sourceMappingURL=commands-writer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-writer.js","sourceRoot":"","sources":["../../src/claude-setup/commands-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAuB,EAAE,UAAkB;IAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACjE,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAEhC,MAAM,
|
|
1
|
+
{"version":3,"file":"commands-writer.js","sourceRoot":"","sources":["../../src/claude-setup/commands-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/hooks-writer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,SAAS,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE;QACL,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;QAC5B,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;QAC3B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;QACzB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;QAC1B,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/hooks-writer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,SAAS,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE;QACL,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;QAC5B,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;QAC3B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;QACzB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;QAC1B,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;QAC3B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAmLD,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAoIlG"}
|