maxsim-flutter 1.33.0 → 1.35.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/claude-md-generator.d.ts.map +1 -1
- package/dist/claude-setup/claude-md-generator.js +12 -0
- 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 +61 -0
- package/dist/claude-setup/commands-writer.js.map +1 -1
- package/dist/claude-setup/hooks-writer.d.ts +23 -1
- package/dist/claude-setup/hooks-writer.d.ts.map +1 -1
- package/dist/claude-setup/hooks-writer.js +108 -3
- package/dist/claude-setup/hooks-writer.js.map +1 -1
- package/dist/claude-setup/index.d.ts +1 -0
- package/dist/claude-setup/index.d.ts.map +1 -1
- package/dist/claude-setup/index.js +1 -0
- package/dist/claude-setup/index.js.map +1 -1
- package/dist/claude-setup/rules-writer.d.ts.map +1 -1
- package/dist/claude-setup/rules-writer.js +53 -2
- package/dist/claude-setup/rules-writer.js.map +1 -1
- package/dist/claude-setup/settings-writer.d.ts +10 -0
- package/dist/claude-setup/settings-writer.d.ts.map +1 -0
- package/dist/claude-setup/settings-writer.js +56 -0
- package/dist/claude-setup/settings-writer.js.map +1 -0
- package/dist/claude-setup/setup-orchestrator.d.ts.map +1 -1
- package/dist/claude-setup/setup-orchestrator.js +10 -7
- 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 +65 -0
- package/dist/claude-setup/skill-writer.js.map +1 -1
- package/package.json +1 -1
|
@@ -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,CAgBhE"}
|
|
@@ -8,6 +8,7 @@ export function generateClaudeMd(context) {
|
|
|
8
8
|
generateRules(context),
|
|
9
9
|
generateBuildCommands(),
|
|
10
10
|
generateQualityGates(),
|
|
11
|
+
generateModelPolicy(),
|
|
11
12
|
generateDevelopmentWorkflow(),
|
|
12
13
|
generateKeyPaths(),
|
|
13
14
|
];
|
|
@@ -43,6 +44,8 @@ function generateRules(context) {
|
|
|
43
44
|
'@.claude/rules/go-router.md',
|
|
44
45
|
'@.claude/rules/testing.md',
|
|
45
46
|
'@.claude/rules/security.md',
|
|
47
|
+
'@.claude/rules/git-workflow.md',
|
|
48
|
+
'@.claude/rules/code-quality.md',
|
|
46
49
|
];
|
|
47
50
|
if (context.modules.auth)
|
|
48
51
|
imports.push('@.claude/rules/auth.md');
|
|
@@ -78,10 +81,19 @@ flutter analyze
|
|
|
78
81
|
function generateQualityGates() {
|
|
79
82
|
return `## Quality Gates
|
|
80
83
|
|
|
84
|
+
**IMPORTANT:** All gates MUST pass before every commit. NEVER skip these checks.
|
|
85
|
+
|
|
81
86
|
- \`flutter analyze\` — zero warnings
|
|
82
87
|
- \`flutter test\` — all pass
|
|
83
88
|
- \`dart format --set-exit-if-changed .\` — formatted`;
|
|
84
89
|
}
|
|
90
|
+
function generateModelPolicy() {
|
|
91
|
+
return `## Model Usage Policy
|
|
92
|
+
|
|
93
|
+
- **Opus**: Architecture, planning, non-trivial implementation. Prefer when in doubt.
|
|
94
|
+
- **Sonnet**: Simple, well-defined tasks with clear requirements.
|
|
95
|
+
- **Haiku**: Trivial tasks only (formatting, simple scans).`;
|
|
96
|
+
}
|
|
85
97
|
function generateDevelopmentWorkflow() {
|
|
86
98
|
return `## Development Workflow
|
|
87
99
|
|
|
@@ -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,2BAA2B,EAAE;QAC7B,gBAAgB,EAAE;KACnB,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,OAAuB;IAC7C,MAAM,KAAK,GAAG;QACZ,iBAAiB,OAAO,CAAC,WAAW,EAAE;QACtC,EAAE;QACF,qBAAqB;QACrB,EAAE;QACF,KAAK,OAAO,CAAC,WAAW,gEAAgE;KACzF,CAAC;IAEF,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE7D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,OAAuB;IAC5C,MAAM,OAAO,GAAG;QACd,UAAU;QACV,EAAE;QACF,gCAAgC;QAChC,4BAA4B;QAC5B,6BAA6B;QAC7B,2BAA2B;QAC3B,4BAA4B;
|
|
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,CAS9F"}
|
|
@@ -10,6 +10,7 @@ export async function writeCommands(context, outputPath) {
|
|
|
10
10
|
await Promise.all([
|
|
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()),
|
|
13
14
|
]);
|
|
14
15
|
}
|
|
15
16
|
function generateAddFeatureCommand(context) {
|
|
@@ -303,4 +304,64 @@ flutter analyze && flutter test && dart format --set-exit-if-changed .
|
|
|
303
304
|
\`\`\`
|
|
304
305
|
`;
|
|
305
306
|
}
|
|
307
|
+
function generateStartTeamCommand() {
|
|
308
|
+
return `# Start Team Sprint
|
|
309
|
+
|
|
310
|
+
Orchestrate a Claude Code Agent Team sprint from \`prd.json\`.
|
|
311
|
+
|
|
312
|
+
## Pre-Flight Checks
|
|
313
|
+
|
|
314
|
+
Before starting, verify the project is in a clean state:
|
|
315
|
+
|
|
316
|
+
\`\`\`bash
|
|
317
|
+
git status # Working tree must be clean
|
|
318
|
+
flutter analyze # Zero errors/warnings
|
|
319
|
+
flutter test # All tests pass
|
|
320
|
+
\`\`\`
|
|
321
|
+
|
|
322
|
+
## Step 1 — Read prd.json
|
|
323
|
+
|
|
324
|
+
Load \`prd.json\` and identify incomplete stories (\`passes: false\`). Group by phase, pick the next batch of stories to implement.
|
|
325
|
+
|
|
326
|
+
## Step 2 — Create Team
|
|
327
|
+
|
|
328
|
+
Create a team named \`flutter-sprint\` using TeamCreate. Create TaskCreate entries for each story.
|
|
329
|
+
|
|
330
|
+
## Step 3 — Spawn Agents
|
|
331
|
+
|
|
332
|
+
Spawn 4 agents with the following roles and models:
|
|
333
|
+
|
|
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** | haiku | Reviews code for Clean Architecture compliance and best practices |
|
|
340
|
+
|
|
341
|
+
## Step 4 — TDD Flow Per Story
|
|
342
|
+
|
|
343
|
+
For each story, follow this orchestration:
|
|
344
|
+
|
|
345
|
+
1. **Architect** designs the implementation spec with file list and test cases
|
|
346
|
+
2. **Builder** writes failing tests (RED phase), then implements minimal code (GREEN phase)
|
|
347
|
+
3. **Tester** runs \`flutter analyze && flutter test\`, checks coverage
|
|
348
|
+
4. **Reviewer** reviews code for architecture compliance
|
|
349
|
+
|
|
350
|
+
## Step 5 — Commit + Push
|
|
351
|
+
|
|
352
|
+
After each story passes all quality gates:
|
|
353
|
+
|
|
354
|
+
\`\`\`bash
|
|
355
|
+
git add <changed-files>
|
|
356
|
+
git commit -m "feat: [Story-ID] - Story title"
|
|
357
|
+
git push
|
|
358
|
+
\`\`\`
|
|
359
|
+
|
|
360
|
+
Mark the story as \`passes: true\` in \`prd.json\`.
|
|
361
|
+
|
|
362
|
+
## Step 6 — Repeat
|
|
363
|
+
|
|
364
|
+
Continue with the next story until the sprint batch is complete. Shut down agents when done.
|
|
365
|
+
`;
|
|
366
|
+
}
|
|
306
367
|
//# 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,OAAO,CAAC,GAAG,CAAC;QAChB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC1F,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,sBAAsB,EAAE,CAAC;
|
|
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,OAAO,CAAC,GAAG,CAAC;QAChB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC1F,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,sBAAsB,EAAE,CAAC;QAC5E,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,wBAAwB,EAAE,CAAC;KAClF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAuB;IACxD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI;QACrC,CAAC,CAAC;;;;;;;;;;;;;;CAcL;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI;QACnC,CAAC,CAAC;;;;;;;;CAQL;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmKP,UAAU,GAAG,QAAQ;;;;;;;;;;;;;CAatB,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiFR,CAAC;AACF,CAAC;AAED,SAAS,wBAAwB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDR,CAAC;AACF,CAAC"}
|
|
@@ -1,3 +1,25 @@
|
|
|
1
1
|
import type { ProjectContext } from '../core/context.js';
|
|
2
|
-
|
|
2
|
+
interface HookEntry {
|
|
3
|
+
matcher?: string;
|
|
4
|
+
hooks: Array<{
|
|
5
|
+
type: 'command';
|
|
6
|
+
command: string;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
export interface HooksConfig {
|
|
11
|
+
hooks: {
|
|
12
|
+
TaskCompleted?: HookEntry[];
|
|
13
|
+
TeammateIdle?: HookEntry[];
|
|
14
|
+
PreToolUse?: HookEntry[];
|
|
15
|
+
PostToolUse?: HookEntry[];
|
|
16
|
+
Notification?: HookEntry[];
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export interface HooksResult {
|
|
20
|
+
scripts: string[];
|
|
21
|
+
config: HooksConfig;
|
|
22
|
+
}
|
|
23
|
+
export declare function writeHooks(context: ProjectContext, outputPath: string): Promise<HooksResult>;
|
|
24
|
+
export {};
|
|
3
25
|
//# sourceMappingURL=hooks-writer.d.ts.map
|
|
@@ -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;
|
|
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;KAC5B,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAiHD,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAwGlG"}
|
|
@@ -32,6 +32,79 @@ if echo "$INPUT" | grep -qE '"file_path"\\s*:\\s*"[^"]*\\.dart"'; then
|
|
|
32
32
|
fi
|
|
33
33
|
fi
|
|
34
34
|
|
|
35
|
+
exit 0
|
|
36
|
+
`;
|
|
37
|
+
const PROTECT_SECRETS_SH = `#!/bin/bash
|
|
38
|
+
# PreToolUse hook: block access to secret/credential files
|
|
39
|
+
# Matches Read, Edit, Write tool invocations
|
|
40
|
+
|
|
41
|
+
INPUT=$(cat)
|
|
42
|
+
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // .tool_input.path // empty')
|
|
43
|
+
|
|
44
|
+
[ -z "$FILE" ] && exit 0
|
|
45
|
+
|
|
46
|
+
# Check for sensitive file patterns
|
|
47
|
+
case "$FILE" in
|
|
48
|
+
*.env|*.env.*|*.pem|*.key)
|
|
49
|
+
echo '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"Blocked: access to sensitive file '"$FILE"'"}}'
|
|
50
|
+
exit 0
|
|
51
|
+
;;
|
|
52
|
+
esac
|
|
53
|
+
|
|
54
|
+
BASENAME=$(basename "$FILE")
|
|
55
|
+
case "$BASENAME" in
|
|
56
|
+
credentials*|secrets*)
|
|
57
|
+
echo '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"Blocked: access to credentials/secrets file '"$FILE"'"}}'
|
|
58
|
+
exit 0
|
|
59
|
+
;;
|
|
60
|
+
esac
|
|
61
|
+
|
|
62
|
+
exit 0
|
|
63
|
+
`;
|
|
64
|
+
const NOTIFY_WAITING_SH = `#!/bin/bash
|
|
65
|
+
# Notification hook: send desktop notification when Claude needs attention
|
|
66
|
+
# Triggered on idle_prompt events
|
|
67
|
+
|
|
68
|
+
INPUT=$(cat)
|
|
69
|
+
|
|
70
|
+
# Cross-platform notification
|
|
71
|
+
MESSAGE="Claude Code needs your attention"
|
|
72
|
+
|
|
73
|
+
if command -v osascript &>/dev/null; then
|
|
74
|
+
# macOS
|
|
75
|
+
osascript -e "display notification \\"$MESSAGE\\" with title \\"Claude Code\\"" 2>/dev/null &
|
|
76
|
+
elif command -v notify-send &>/dev/null; then
|
|
77
|
+
# Linux (freedesktop)
|
|
78
|
+
notify-send "Claude Code" "$MESSAGE" 2>/dev/null &
|
|
79
|
+
elif command -v powershell.exe &>/dev/null; then
|
|
80
|
+
# Windows (WSL)
|
|
81
|
+
powershell.exe -Command "[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null; [System.Windows.Forms.MessageBox]::Show('$MESSAGE', 'Claude Code')" 2>/dev/null &
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
exit 0
|
|
85
|
+
`;
|
|
86
|
+
const QUALITY_GATE_TASK_SH = `#!/bin/bash
|
|
87
|
+
# TaskCompleted hook: remind about quality checks for implementation tasks
|
|
88
|
+
# Claude passes task result as JSON on stdin
|
|
89
|
+
|
|
90
|
+
INPUT=$(cat)
|
|
91
|
+
|
|
92
|
+
# Extract task subject from JSON
|
|
93
|
+
SUBJECT=$(echo "$INPUT" | jq -r '.task_subject // .subject // empty')
|
|
94
|
+
|
|
95
|
+
# Only trigger for implementation tasks (story IDs like P\\d+- or S-\\d+)
|
|
96
|
+
if ! echo "$SUBJECT" | grep -qE 'P[0-9]+-|S-[0-9]+'; then
|
|
97
|
+
exit 0
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# Output quality gate reminder
|
|
101
|
+
echo "Quality gate reminder for: $SUBJECT"
|
|
102
|
+
echo "Before marking complete, verify:"
|
|
103
|
+
echo " 1. flutter analyze — zero warnings"
|
|
104
|
+
echo " 2. flutter test — all tests pass"
|
|
105
|
+
echo " 3. dart format --set-exit-if-changed . — formatted"
|
|
106
|
+
echo " 4. Coverage meets thresholds"
|
|
107
|
+
|
|
35
108
|
exit 0
|
|
36
109
|
`;
|
|
37
110
|
export async function writeHooks(context, outputPath) {
|
|
@@ -42,11 +115,21 @@ export async function writeHooks(context, outputPath) {
|
|
|
42
115
|
// Write shell scripts
|
|
43
116
|
const blockDangerousPath = path.join(hooksDir, 'block-dangerous.sh');
|
|
44
117
|
const formatDartPath = path.join(hooksDir, 'format-dart.sh');
|
|
118
|
+
const protectSecretsPath = path.join(hooksDir, 'protect-secrets.sh');
|
|
119
|
+
const notifyWaitingPath = path.join(hooksDir, 'notify-waiting.sh');
|
|
120
|
+
const qualityGateTaskPath = path.join(hooksDir, 'quality-gate-task.sh');
|
|
45
121
|
await fs.writeFile(blockDangerousPath, BLOCK_DANGEROUS_SH);
|
|
46
122
|
await fs.writeFile(formatDartPath, FORMAT_DART_SH);
|
|
123
|
+
await fs.writeFile(protectSecretsPath, PROTECT_SECRETS_SH);
|
|
124
|
+
await fs.writeFile(notifyWaitingPath, NOTIFY_WAITING_SH);
|
|
125
|
+
await fs.writeFile(qualityGateTaskPath, QUALITY_GATE_TASK_SH);
|
|
47
126
|
// Make scripts executable (mode 0o755)
|
|
48
127
|
await chmod(blockDangerousPath, 0o755);
|
|
49
128
|
await chmod(formatDartPath, 0o755);
|
|
129
|
+
await chmod(protectSecretsPath, 0o755);
|
|
130
|
+
await chmod(notifyWaitingPath, 0o755);
|
|
131
|
+
await chmod(qualityGateTaskPath, 0o755);
|
|
132
|
+
const scripts = [blockDangerousPath, formatDartPath, protectSecretsPath, notifyWaitingPath, qualityGateTaskPath];
|
|
50
133
|
// Build hooks config
|
|
51
134
|
const hooks = {
|
|
52
135
|
PreToolUse: [
|
|
@@ -59,6 +142,16 @@ export async function writeHooks(context, outputPath) {
|
|
|
59
142
|
},
|
|
60
143
|
],
|
|
61
144
|
},
|
|
145
|
+
{
|
|
146
|
+
matcher: 'Read|Edit|Write',
|
|
147
|
+
hooks: [
|
|
148
|
+
{
|
|
149
|
+
type: 'command',
|
|
150
|
+
command: '.claude/hooks/protect-secrets.sh',
|
|
151
|
+
timeout: 5,
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
},
|
|
62
155
|
],
|
|
63
156
|
PostToolUse: [
|
|
64
157
|
{
|
|
@@ -76,7 +169,20 @@ export async function writeHooks(context, outputPath) {
|
|
|
76
169
|
hooks: [
|
|
77
170
|
{
|
|
78
171
|
type: 'command',
|
|
79
|
-
command: '
|
|
172
|
+
command: '.claude/hooks/quality-gate-task.sh',
|
|
173
|
+
timeout: 60,
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
Notification: [
|
|
179
|
+
{
|
|
180
|
+
matcher: 'idle_prompt',
|
|
181
|
+
hooks: [
|
|
182
|
+
{
|
|
183
|
+
type: 'command',
|
|
184
|
+
command: '.claude/hooks/notify-waiting.sh',
|
|
185
|
+
timeout: 10,
|
|
80
186
|
},
|
|
81
187
|
],
|
|
82
188
|
},
|
|
@@ -95,7 +201,6 @@ export async function writeHooks(context, outputPath) {
|
|
|
95
201
|
];
|
|
96
202
|
}
|
|
97
203
|
const config = { hooks };
|
|
98
|
-
|
|
99
|
-
await fs.writeFile(settingsPath, JSON.stringify(config, null, 2) + '\n');
|
|
204
|
+
return { scripts, config };
|
|
100
205
|
}
|
|
101
206
|
//# sourceMappingURL=hooks-writer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-writer.js","sourceRoot":"","sources":["../../src/claude-setup/hooks-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks-writer.js","sourceRoot":"","sources":["../../src/claude-setup/hooks-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ export { generateClaudeMd } from './claude-md-generator.js';
|
|
|
2
2
|
export { writeAgents, buildAgentDefinitions } from './agent-writer.js';
|
|
3
3
|
export { writeSkills } from './skill-writer.js';
|
|
4
4
|
export { writeHooks } from './hooks-writer.js';
|
|
5
|
+
export { writeSettings } from './settings-writer.js';
|
|
5
6
|
export { writeMcpConfig } from './mcp-config-writer.js';
|
|
6
7
|
export { writeCommands } from './commands-writer.js';
|
|
7
8
|
export { generatePrd } from './prd-generator.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/claude-setup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/claude-setup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -2,6 +2,7 @@ export { generateClaudeMd } from './claude-md-generator.js';
|
|
|
2
2
|
export { writeAgents, buildAgentDefinitions } from './agent-writer.js';
|
|
3
3
|
export { writeSkills } from './skill-writer.js';
|
|
4
4
|
export { writeHooks } from './hooks-writer.js';
|
|
5
|
+
export { writeSettings } from './settings-writer.js';
|
|
5
6
|
export { writeMcpConfig } from './mcp-config-writer.js';
|
|
6
7
|
export { writeCommands } from './commands-writer.js';
|
|
7
8
|
export { generatePrd } from './prd-generator.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/claude-setup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/claude-setup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/rules-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"rules-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/rules-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAwUzD,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC3F"}
|
|
@@ -23,7 +23,7 @@ This project follows Clean Architecture with three layers:
|
|
|
23
23
|
`);
|
|
24
24
|
}
|
|
25
25
|
function generateRiverpodRule() {
|
|
26
|
-
return (frontmatter(['lib/**']) +
|
|
26
|
+
return (frontmatter(['lib/**/providers/**', 'lib/**/presentation/**']) +
|
|
27
27
|
`# Riverpod Patterns
|
|
28
28
|
|
|
29
29
|
Use Riverpod for all state management and dependency injection.
|
|
@@ -37,7 +37,7 @@ Use Riverpod for all state management and dependency injection.
|
|
|
37
37
|
`);
|
|
38
38
|
}
|
|
39
39
|
function generateGoRouterRule() {
|
|
40
|
-
return (frontmatter(['lib/**']) +
|
|
40
|
+
return (frontmatter(['lib/**/router/**', 'lib/**/routes/**']) +
|
|
41
41
|
`# go_router Navigation Rules
|
|
42
42
|
|
|
43
43
|
Use go_router for declarative navigation.
|
|
@@ -228,6 +228,55 @@ Guidelines for localization.
|
|
|
228
228
|
- Use ICU message format for plurals and gender variations.
|
|
229
229
|
`);
|
|
230
230
|
}
|
|
231
|
+
function generateGitWorkflowRule() {
|
|
232
|
+
return (frontmatter(['**']) +
|
|
233
|
+
`# Git Workflow Rules
|
|
234
|
+
|
|
235
|
+
Guidelines for version control and commit conventions.
|
|
236
|
+
|
|
237
|
+
## Commit Messages (Conventional Commits)
|
|
238
|
+
- \`feat: description\` — new features
|
|
239
|
+
- \`fix: description\` — bug fixes
|
|
240
|
+
- \`chore: description\` — tooling, config, CI, deps
|
|
241
|
+
- \`refactor: description\` — code restructuring, no behavior change
|
|
242
|
+
- \`test: description\` — adding or fixing tests
|
|
243
|
+
- \`docs: description\` — documentation only
|
|
244
|
+
|
|
245
|
+
## Branch Naming
|
|
246
|
+
- Feature branches: \`feature/<short-description>\`
|
|
247
|
+
- Bug fix branches: \`fix/<short-description>\`
|
|
248
|
+
- Chore branches: \`chore/<short-description>\`
|
|
249
|
+
|
|
250
|
+
## Rules
|
|
251
|
+
- One logical change per commit — don't bundle unrelated changes.
|
|
252
|
+
- Never force-push to \`main\` or \`develop\`.
|
|
253
|
+
- Always push to remote after committing — no local-only commits.
|
|
254
|
+
- Never skip pre-commit hooks (\`--no-verify\` is forbidden).
|
|
255
|
+
`);
|
|
256
|
+
}
|
|
257
|
+
function generateCodeQualityRule() {
|
|
258
|
+
return (frontmatter(['lib/**', 'test/**']) +
|
|
259
|
+
`# Code Quality Rules
|
|
260
|
+
|
|
261
|
+
Guidelines for maintaining code quality standards.
|
|
262
|
+
|
|
263
|
+
## Static Analysis
|
|
264
|
+
- Run \`flutter analyze\` before every commit — zero warnings allowed.
|
|
265
|
+
- Run \`dart format .\` to ensure consistent formatting.
|
|
266
|
+
- Fix all analyzer warnings at the source — never suppress with \`// ignore:\`.
|
|
267
|
+
|
|
268
|
+
## Testing
|
|
269
|
+
- Run \`flutter test\` before every commit — all tests must pass.
|
|
270
|
+
- Aim for 80%+ statement and branch coverage.
|
|
271
|
+
- Write tests for every new public function — at least happy path + edge case.
|
|
272
|
+
|
|
273
|
+
## Code Review Checklist
|
|
274
|
+
- No \`print()\` statements in production code — use a logging framework.
|
|
275
|
+
- No unused imports or dead code.
|
|
276
|
+
- No \`dynamic\` types unless absolutely necessary.
|
|
277
|
+
- All public APIs have clear parameter names and return types.
|
|
278
|
+
`);
|
|
279
|
+
}
|
|
231
280
|
export async function writeRules(context, outputPath) {
|
|
232
281
|
const rulesDir = join(outputPath, '.claude', 'rules');
|
|
233
282
|
await mkdir(rulesDir, { recursive: true });
|
|
@@ -237,6 +286,8 @@ export async function writeRules(context, outputPath) {
|
|
|
237
286
|
await writeFile(join(rulesDir, 'go-router.md'), generateGoRouterRule(), 'utf-8');
|
|
238
287
|
await writeFile(join(rulesDir, 'testing.md'), generateTestingRule(), 'utf-8');
|
|
239
288
|
await writeFile(join(rulesDir, 'security.md'), generateSecurityRule(), 'utf-8');
|
|
289
|
+
await writeFile(join(rulesDir, 'git-workflow.md'), generateGitWorkflowRule(), 'utf-8');
|
|
290
|
+
await writeFile(join(rulesDir, 'code-quality.md'), generateCodeQualityRule(), 'utf-8');
|
|
240
291
|
// Conditional module rules
|
|
241
292
|
if (context.modules.auth) {
|
|
242
293
|
await writeFile(join(rulesDir, 'auth.md'), generateAuthRule(), 'utf-8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules-writer.js","sourceRoot":"","sources":["../../src/claude-setup/rules-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,SAAS,WAAW,CAAC,KAAe;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,gBAAgB,SAAS,WAAW,CAAC;AAC9C,CAAC;AAED,SAAS,wBAAwB;IAC/B,OAAO,CACL,WAAW,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClC;;;;;;;;;;;;;;CAcH,CACE,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,CACL,WAAW,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"rules-writer.js","sourceRoot":"","sources":["../../src/claude-setup/rules-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ProjectContext } from '../core/context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates .claude/settings.json (team-shared) and .claude/settings.local.json (personal).
|
|
4
|
+
* settings.json contains hooks, deny permissions, and env config.
|
|
5
|
+
* settings.local.json contains only allow permissions for local development.
|
|
6
|
+
*/
|
|
7
|
+
export declare function writeSettings(context: ProjectContext, outputPath: string, hooksConfig?: {
|
|
8
|
+
hooks: Record<string, unknown>;
|
|
9
|
+
}): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=settings-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/settings-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAiBzD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC/C,OAAO,CAAC,IAAI,CAAC,CA6Df"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { writeFile, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Generates .claude/settings.json (team-shared) and .claude/settings.local.json (personal).
|
|
5
|
+
* settings.json contains hooks, deny permissions, and env config.
|
|
6
|
+
* settings.local.json contains only allow permissions for local development.
|
|
7
|
+
*/
|
|
8
|
+
export async function writeSettings(context, outputPath, hooksConfig) {
|
|
9
|
+
const claudeDir = join(outputPath, '.claude');
|
|
10
|
+
await mkdir(claudeDir, { recursive: true });
|
|
11
|
+
// Build settings.json (team-shared)
|
|
12
|
+
const settings = {
|
|
13
|
+
$schema: 'https://json.schemastore.org/claude-code-settings.json',
|
|
14
|
+
permissions: {
|
|
15
|
+
deny: [
|
|
16
|
+
'Read(./.env)',
|
|
17
|
+
'Read(./.env.*)',
|
|
18
|
+
'Edit(./.env)',
|
|
19
|
+
'Edit(./.env.*)',
|
|
20
|
+
'Read(./credentials*)',
|
|
21
|
+
'Read(./secrets*)',
|
|
22
|
+
'Read(./**/*.pem)',
|
|
23
|
+
'Read(./**/*.key)',
|
|
24
|
+
'Bash(rm -rf *)',
|
|
25
|
+
'Bash(sudo *)',
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
if (hooksConfig) {
|
|
30
|
+
settings.hooks = hooksConfig.hooks;
|
|
31
|
+
}
|
|
32
|
+
if (context.claude?.agentTeams) {
|
|
33
|
+
settings.env = {
|
|
34
|
+
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
await writeFile(join(claudeDir, 'settings.json'), JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
38
|
+
// Build settings.local.json (personal)
|
|
39
|
+
const settingsLocal = {
|
|
40
|
+
permissions: {
|
|
41
|
+
allow: [
|
|
42
|
+
'Bash(flutter *)',
|
|
43
|
+
'Bash(dart *)',
|
|
44
|
+
'Bash(git diff *)',
|
|
45
|
+
'Bash(git status)',
|
|
46
|
+
'Bash(git log *)',
|
|
47
|
+
'Read(./lib/**)',
|
|
48
|
+
'Read(./test/**)',
|
|
49
|
+
'Edit(./lib/**)',
|
|
50
|
+
'Edit(./test/**)',
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
await writeFile(join(claudeDir, 'settings.local.json'), JSON.stringify(settingsLocal, null, 2) + '\n', 'utf-8');
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=settings-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-writer.js","sourceRoot":"","sources":["../../src/claude-setup/settings-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAkBjC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAuB,EACvB,UAAkB,EAClB,WAAgD;IAEhD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,oCAAoC;IACpC,MAAM,QAAQ,GAAiB;QAC7B,OAAO,EAAE,wDAAwD;QACjE,WAAW,EAAE;YACX,IAAI,EAAE;gBACJ,cAAc;gBACd,gBAAgB;gBAChB,cAAc;gBACd,gBAAgB;gBAChB,sBAAsB;gBACtB,kBAAkB;gBAClB,kBAAkB;gBAClB,kBAAkB;gBAClB,gBAAgB;gBAChB,cAAc;aACf;SACF;KACF,CAAC;IAEF,IAAI,WAAW,EAAE,CAAC;QAChB,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QAC/B,QAAQ,CAAC,GAAG,GAAG;YACb,oCAAoC,EAAE,GAAG;SAC1C,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,CACb,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAChC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACxC,OAAO,CACR,CAAC;IAEF,uCAAuC;IACvC,MAAM,aAAa,GAAsB;QACvC,WAAW,EAAE;YACX,KAAK,EAAE;gBACL,iBAAiB;gBACjB,cAAc;gBACd,kBAAkB;gBAClB,kBAAkB;gBAClB,iBAAiB;gBACjB,gBAAgB;gBAChB,iBAAiB;gBACjB,gBAAgB;gBAChB,iBAAiB;aAClB;SACF;KACF,CAAC;IAEF,MAAM,SAAS,CACb,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EACtC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAC7C,OAAO,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-orchestrator.d.ts","sourceRoot":"","sources":["../../src/claude-setup/setup-orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-orchestrator.d.ts","sourceRoot":"","sources":["../../src/claude-setup/setup-orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAYzD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CA8F5B"}
|
|
@@ -4,6 +4,7 @@ import { generateClaudeMd } from './claude-md-generator.js';
|
|
|
4
4
|
import { writeAgents } from './agent-writer.js';
|
|
5
5
|
import { writeSkills } from './skill-writer.js';
|
|
6
6
|
import { writeHooks } from './hooks-writer.js';
|
|
7
|
+
import { writeSettings } from './settings-writer.js';
|
|
7
8
|
import { writeMcpConfig } from './mcp-config-writer.js';
|
|
8
9
|
import { writeCommands } from './commands-writer.js';
|
|
9
10
|
import { writeRules } from './rules-writer.js';
|
|
@@ -32,7 +33,7 @@ export async function runClaudeSetup(context, outputPath, options) {
|
|
|
32
33
|
if (resolved.rules) {
|
|
33
34
|
await writeRules(context, outputPath);
|
|
34
35
|
const rulesDir = join(outputPath, '.claude', 'rules');
|
|
35
|
-
filesWritten.push(join(rulesDir, 'architecture.md'), join(rulesDir, 'riverpod.md'), join(rulesDir, 'go-router.md'), join(rulesDir, 'testing.md'), join(rulesDir, 'security.md'));
|
|
36
|
+
filesWritten.push(join(rulesDir, 'architecture.md'), join(rulesDir, 'riverpod.md'), join(rulesDir, 'go-router.md'), join(rulesDir, 'testing.md'), join(rulesDir, 'security.md'), join(rulesDir, 'git-workflow.md'), join(rulesDir, 'code-quality.md'));
|
|
36
37
|
if (context.modules.auth)
|
|
37
38
|
filesWritten.push(join(rulesDir, 'auth.md'));
|
|
38
39
|
if (context.modules.api)
|
|
@@ -47,23 +48,25 @@ export async function runClaudeSetup(context, outputPath, options) {
|
|
|
47
48
|
const agentFiles = await writeAgents(context, outputPath);
|
|
48
49
|
filesWritten.push(...agentFiles);
|
|
49
50
|
}
|
|
50
|
-
// 5. Write hooks config (.claude/hooks/
|
|
51
|
+
// 5. Write hooks config (.claude/hooks/) and settings files
|
|
51
52
|
if (resolved.hooks) {
|
|
52
|
-
await writeHooks(context, outputPath);
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
const hooksResult = await writeHooks(context, outputPath);
|
|
54
|
+
filesWritten.push(...hooksResult.scripts);
|
|
55
|
+
// Write settings.json (team-shared) and settings.local.json (personal)
|
|
56
|
+
await writeSettings(context, outputPath, hooksResult.config);
|
|
57
|
+
filesWritten.push(join(outputPath, '.claude', 'settings.json'), join(outputPath, '.claude', 'settings.local.json'));
|
|
55
58
|
}
|
|
56
59
|
// 6. Write skill files (.claude/skills/)
|
|
57
60
|
if (resolved.skills) {
|
|
58
61
|
await writeSkills(context, outputPath);
|
|
59
62
|
const skillsDir = join(outputPath, '.claude', 'skills');
|
|
60
|
-
filesWritten.push(join(skillsDir, 'flutter-patterns.md'), join(skillsDir, 'go-router-patterns.md'), join(skillsDir, 'module-conventions.md'), join(skillsDir, 'prd.md'), join(skillsDir, 'security-review.md'), join(skillsDir, 'performance-check.md'), join(skillsDir, 'add-feature.md'));
|
|
63
|
+
filesWritten.push(join(skillsDir, 'flutter-patterns.md'), join(skillsDir, 'go-router-patterns.md'), join(skillsDir, 'module-conventions.md'), join(skillsDir, 'prd.md'), join(skillsDir, 'security-review.md'), join(skillsDir, 'performance-check.md'), join(skillsDir, 'add-feature.md'), join(skillsDir, 'quality-gate.md'));
|
|
61
64
|
}
|
|
62
65
|
// 7. Write slash commands (.claude/commands/)
|
|
63
66
|
if (resolved.commands) {
|
|
64
67
|
await writeCommands(context, outputPath);
|
|
65
68
|
const commandsDir = join(outputPath, '.claude', 'commands');
|
|
66
|
-
filesWritten.push(join(commandsDir, 'add-feature.md'), join(commandsDir, 'analyze.md'));
|
|
69
|
+
filesWritten.push(join(commandsDir, 'add-feature.md'), join(commandsDir, 'analyze.md'), join(commandsDir, 'start-team.md'));
|
|
67
70
|
}
|
|
68
71
|
// 8. Write MCP server config (.mcp.json)
|
|
69
72
|
if (resolved.mcp) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-orchestrator.js","sourceRoot":"","sources":["../../src/claude-setup/setup-orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAiBjD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,UAAkB,EAClB,OAA4B;IAE5B,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,6DAA6D;IAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC;IACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEjE,kCAAkC;IAClC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9D,6BAA6B;IAC7B,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QACxD,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED,kCAAkC;IAClC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EACjC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAC7B,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAC9B,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAC5B,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"setup-orchestrator.js","sourceRoot":"","sources":["../../src/claude-setup/setup-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/skill-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"skill-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/skill-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc5F"}
|
|
@@ -11,6 +11,7 @@ export async function writeSkills(context, outputPath) {
|
|
|
11
11
|
fs.writeFile(path.join(skillsDir, 'security-review.md'), generateSecurityReview()),
|
|
12
12
|
fs.writeFile(path.join(skillsDir, 'performance-check.md'), generatePerformanceCheck()),
|
|
13
13
|
fs.writeFile(path.join(skillsDir, 'add-feature.md'), generateAddFeatureSkill(context)),
|
|
14
|
+
fs.writeFile(path.join(skillsDir, 'quality-gate.md'), generateQualityGate()),
|
|
14
15
|
]);
|
|
15
16
|
}
|
|
16
17
|
function generateFlutterPatterns() {
|
|
@@ -348,6 +349,10 @@ function generateSecurityReview() {
|
|
|
348
349
|
return [
|
|
349
350
|
'---',
|
|
350
351
|
'model: sonnet',
|
|
352
|
+
'user-invocable: true',
|
|
353
|
+
'description: >-',
|
|
354
|
+
' Run a security audit. Triggers on: security review, check for vulnerabilities,',
|
|
355
|
+
' audit secrets, scan for security issues.',
|
|
351
356
|
'---',
|
|
352
357
|
'',
|
|
353
358
|
'# Security Review Checklist',
|
|
@@ -396,6 +401,10 @@ function generatePerformanceCheck() {
|
|
|
396
401
|
return [
|
|
397
402
|
'---',
|
|
398
403
|
'model: haiku',
|
|
404
|
+
'user-invocable: true',
|
|
405
|
+
'description: >-',
|
|
406
|
+
' Check for Flutter performance issues. Triggers on: performance check, check performance,',
|
|
407
|
+
' audit rebuilds, optimize widgets.',
|
|
399
408
|
'---',
|
|
400
409
|
'',
|
|
401
410
|
'# Performance Check Checklist',
|
|
@@ -439,6 +448,62 @@ function generatePerformanceCheck() {
|
|
|
439
448
|
'- **Fix**: Specific code change with before/after snippet',
|
|
440
449
|
].join('\n');
|
|
441
450
|
}
|
|
451
|
+
function generateQualityGate() {
|
|
452
|
+
return [
|
|
453
|
+
'---',
|
|
454
|
+
'model: sonnet',
|
|
455
|
+
'user-invocable: true',
|
|
456
|
+
'description: >-',
|
|
457
|
+
' Run all quality checks. Triggers on: run quality checks, quality gate,',
|
|
458
|
+
' check code quality, run analysis.',
|
|
459
|
+
'---',
|
|
460
|
+
'',
|
|
461
|
+
'# Quality Gate',
|
|
462
|
+
'',
|
|
463
|
+
'Run the full quality gate pipeline for this Flutter project.',
|
|
464
|
+
'',
|
|
465
|
+
'## Step 1 — Static Analysis',
|
|
466
|
+
'',
|
|
467
|
+
'```bash',
|
|
468
|
+
'flutter analyze',
|
|
469
|
+
'```',
|
|
470
|
+
'',
|
|
471
|
+
'Fix all errors and warnings before proceeding.',
|
|
472
|
+
'',
|
|
473
|
+
'## Step 2 — Code Formatting',
|
|
474
|
+
'',
|
|
475
|
+
'```bash',
|
|
476
|
+
'dart format --set-exit-if-changed .',
|
|
477
|
+
'```',
|
|
478
|
+
'',
|
|
479
|
+
'Ensure all files are properly formatted.',
|
|
480
|
+
'',
|
|
481
|
+
'## Step 3 — Run Tests',
|
|
482
|
+
'',
|
|
483
|
+
'```bash',
|
|
484
|
+
'flutter test',
|
|
485
|
+
'```',
|
|
486
|
+
'',
|
|
487
|
+
'All tests must pass. Fix any failures before proceeding.',
|
|
488
|
+
'',
|
|
489
|
+
'## Step 4 — Coverage Check',
|
|
490
|
+
'',
|
|
491
|
+
'```bash',
|
|
492
|
+
'flutter test --coverage',
|
|
493
|
+
'```',
|
|
494
|
+
'',
|
|
495
|
+
'Review coverage report. Aim for 80%+ statement and branch coverage.',
|
|
496
|
+
'Write targeted tests for any uncovered critical paths.',
|
|
497
|
+
'',
|
|
498
|
+
'## Step 5 — Summary',
|
|
499
|
+
'',
|
|
500
|
+
'Report results:',
|
|
501
|
+
'- **flutter analyze**: pass/fail (number of issues)',
|
|
502
|
+
'- **dart format**: pass/fail',
|
|
503
|
+
'- **flutter test**: pass/fail (number of tests)',
|
|
504
|
+
'- **Coverage**: percentage and uncovered areas',
|
|
505
|
+
].join('\n');
|
|
506
|
+
}
|
|
442
507
|
function generateAddFeatureSkill(context) {
|
|
443
508
|
const authGuardStep = context.modules.auth
|
|
444
509
|
? [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-writer.js","sourceRoot":"","sources":["../../src/claude-setup/skill-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB,EAAE,UAAkB;IAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAE9B,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAAE,uBAAuB,EAAE,CAAC;QACpF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC9F,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,yBAAyB,EAAE,CAAC;QACxF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAChE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,sBAAsB,EAAE,CAAC;QAClF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,EAAE,wBAAwB,EAAE,CAAC;QACtF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-writer.js","sourceRoot":"","sources":["../../src/claude-setup/skill-writer.ts"],"names":[],"mappings":"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"}
|