sequant 1.0.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/LICENSE +21 -0
- package/README.md +237 -0
- package/dist/bin/cli.d.ts +8 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +70 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +8 -0
- package/dist/src/commands/doctor.d.ts.map +1 -0
- package/dist/src/commands/doctor.js +171 -0
- package/dist/src/commands/doctor.js.map +1 -0
- package/dist/src/commands/init.d.ts +11 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +124 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/run.d.ts +18 -0
- package/dist/src/commands/run.d.ts.map +1 -0
- package/dist/src/commands/run.js +229 -0
- package/dist/src/commands/run.js.map +1 -0
- package/dist/src/commands/status.d.ts +5 -0
- package/dist/src/commands/status.d.ts.map +1 -0
- package/dist/src/commands/status.js +45 -0
- package/dist/src/commands/status.js.map +1 -0
- package/dist/src/commands/update.d.ts +10 -0
- package/dist/src/commands/update.d.ts.map +1 -0
- package/dist/src/commands/update.js +124 -0
- package/dist/src/commands/update.js.map +1 -0
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +13 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/fs.d.ts +10 -0
- package/dist/src/lib/fs.d.ts.map +1 -0
- package/dist/src/lib/fs.js +44 -0
- package/dist/src/lib/fs.js.map +1 -0
- package/dist/src/lib/manifest.d.ts +14 -0
- package/dist/src/lib/manifest.d.ts.map +1 -0
- package/dist/src/lib/manifest.js +37 -0
- package/dist/src/lib/manifest.js.map +1 -0
- package/dist/src/lib/stacks.d.ts +22 -0
- package/dist/src/lib/stacks.d.ts.map +1 -0
- package/dist/src/lib/stacks.js +131 -0
- package/dist/src/lib/stacks.js.map +1 -0
- package/dist/src/lib/templates.d.ts +16 -0
- package/dist/src/lib/templates.d.ts.map +1 -0
- package/dist/src/lib/templates.js +118 -0
- package/dist/src/lib/templates.js.map +1 -0
- package/dist/src/lib/workflow/cli-args.d.ts +138 -0
- package/dist/src/lib/workflow/cli-args.d.ts.map +1 -0
- package/dist/src/lib/workflow/cli-args.js +210 -0
- package/dist/src/lib/workflow/cli-args.js.map +1 -0
- package/dist/src/lib/workflow/execute-issues.d.ts +42 -0
- package/dist/src/lib/workflow/execute-issues.d.ts.map +1 -0
- package/dist/src/lib/workflow/execute-issues.js +463 -0
- package/dist/src/lib/workflow/execute-issues.js.map +1 -0
- package/dist/src/lib/workflow/logger.d.ts +168 -0
- package/dist/src/lib/workflow/logger.d.ts.map +1 -0
- package/dist/src/lib/workflow/logger.js +249 -0
- package/dist/src/lib/workflow/logger.js.map +1 -0
- package/dist/src/lib/workflow/types.d.ts +89 -0
- package/dist/src/lib/workflow/types.d.ts.map +1 -0
- package/dist/src/lib/workflow/types.js +23 -0
- package/dist/src/lib/workflow/types.js.map +1 -0
- package/package.json +69 -0
- package/stacks/go.yaml +22 -0
- package/stacks/nextjs.yaml +28 -0
- package/stacks/python.yaml +24 -0
- package/stacks/rust.yaml +23 -0
- package/templates/hooks/post-tool.sh +301 -0
- package/templates/hooks/pre-tool.sh +350 -0
- package/templates/memory/constitution.md +60 -0
- package/templates/scripts/cleanup-worktree.sh +78 -0
- package/templates/scripts/list-worktrees.sh +50 -0
- package/templates/scripts/new-feature.sh +156 -0
- package/templates/settings.json +26 -0
- package/templates/skills/assess/SKILL.md +428 -0
- package/templates/skills/clean/SKILL.md +196 -0
- package/templates/skills/docs/SKILL.md +323 -0
- package/templates/skills/exec/SKILL.md +426 -0
- package/templates/skills/fullsolve/SKILL.md +479 -0
- package/templates/skills/loop/SKILL.md +310 -0
- package/templates/skills/qa/SKILL.md +261 -0
- package/templates/skills/qa/references/code-quality-exemplars.md +112 -0
- package/templates/skills/qa/references/code-review-checklist.md +77 -0
- package/templates/skills/qa/references/quality-gates.md +95 -0
- package/templates/skills/qa/references/testing-requirements.md +109 -0
- package/templates/skills/qa/scripts/quality-checks.sh +109 -0
- package/templates/skills/reflect/SKILL.md +159 -0
- package/templates/skills/reflect/references/documentation-tiers.md +70 -0
- package/templates/skills/reflect/references/phase-reflection.md +95 -0
- package/templates/skills/reflect/scripts/workflow-queries.ts +165 -0
- package/templates/skills/security-review/SKILL.md +344 -0
- package/templates/skills/security-review/references/security-checklists.md +377 -0
- package/templates/skills/solve/SKILL.md +242 -0
- package/templates/skills/spec/SKILL.md +169 -0
- package/templates/skills/spec/references/parallel-groups.md +72 -0
- package/templates/skills/spec/references/verification-criteria.md +104 -0
- package/templates/skills/test/SKILL.md +508 -0
- package/templates/skills/testgen/SKILL.md +561 -0
- package/templates/skills/verify/SKILL.md +266 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Argument Parser for Pipeline Scripts
|
|
3
|
+
*
|
|
4
|
+
* Typed argument parsing with support for common flags used across all scripts.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { parseArgs } from './lib/cli-args'
|
|
9
|
+
*
|
|
10
|
+
* const args = parseArgs(process.argv.slice(2))
|
|
11
|
+
* console.log(args.city) // 'nashville'
|
|
12
|
+
* console.log(args.limit) // 10
|
|
13
|
+
* console.log(args.dryRun) // true
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Parse command line arguments into a typed object.
|
|
18
|
+
*
|
|
19
|
+
* Supports two flag formats:
|
|
20
|
+
* - `--flag=value` (equals format)
|
|
21
|
+
* - `--flag value` (space-separated format)
|
|
22
|
+
*
|
|
23
|
+
* Boolean flags:
|
|
24
|
+
* - `--dry-run` or `--dryRun` → dryRun: true
|
|
25
|
+
* - `--verbose` or `-v` → verbose: true
|
|
26
|
+
* - `--yes` or `-y` → yes: true
|
|
27
|
+
*
|
|
28
|
+
* @param argv - Command line arguments (typically `process.argv.slice(2)`)
|
|
29
|
+
* @param defaults - Optional default values
|
|
30
|
+
* @returns Parsed arguments object
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* // With default city
|
|
35
|
+
* const args = parseArgs(['--limit', '5'], { city: 'nashville' })
|
|
36
|
+
* // args.city === 'nashville'
|
|
37
|
+
* // args.limit === 5
|
|
38
|
+
*
|
|
39
|
+
* // Boolean flags
|
|
40
|
+
* const args2 = parseArgs(['--dry-run', '--verbose'])
|
|
41
|
+
* // args2.dryRun === true
|
|
42
|
+
* // args2.verbose === true
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export function parseArgs(argv, defaults) {
|
|
46
|
+
const result = {
|
|
47
|
+
city: defaults?.city,
|
|
48
|
+
limit: defaults?.limit,
|
|
49
|
+
dryRun: defaults?.dryRun ?? false,
|
|
50
|
+
verbose: defaults?.verbose ?? false,
|
|
51
|
+
yes: defaults?.yes ?? false,
|
|
52
|
+
positional: [],
|
|
53
|
+
};
|
|
54
|
+
let i = 0;
|
|
55
|
+
while (i < argv.length) {
|
|
56
|
+
const arg = argv[i];
|
|
57
|
+
// Boolean flags (no value)
|
|
58
|
+
if (arg === '--dry-run' || arg === '--dryRun') {
|
|
59
|
+
result.dryRun = true;
|
|
60
|
+
i++;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (arg === '--verbose' || arg === '-v') {
|
|
64
|
+
result.verbose = true;
|
|
65
|
+
i++;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (arg === '--yes' || arg === '-y') {
|
|
69
|
+
result.yes = true;
|
|
70
|
+
i++;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// Handle --flag=value format
|
|
74
|
+
if (arg.startsWith('--') && arg.includes('=')) {
|
|
75
|
+
const equalsIndex = arg.indexOf('=');
|
|
76
|
+
const key = arg.slice(2, equalsIndex);
|
|
77
|
+
const value = arg.slice(equalsIndex + 1);
|
|
78
|
+
const normalizedKey = normalizeKey(key);
|
|
79
|
+
result[normalizedKey] = parseValue(normalizedKey, value);
|
|
80
|
+
i++;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// Handle --flag value format
|
|
84
|
+
if (arg.startsWith('--')) {
|
|
85
|
+
const key = arg.slice(2);
|
|
86
|
+
const normalizedKey = normalizeKey(key);
|
|
87
|
+
const nextArg = argv[i + 1];
|
|
88
|
+
// Check if next argument exists and is not another flag
|
|
89
|
+
if (nextArg !== undefined && !nextArg.startsWith('-')) {
|
|
90
|
+
result[normalizedKey] = parseValue(normalizedKey, nextArg);
|
|
91
|
+
i += 2;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Treat as boolean flag
|
|
95
|
+
result[normalizedKey] = true;
|
|
96
|
+
i++;
|
|
97
|
+
}
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
// Handle short flags like -v, -y (already handled above)
|
|
101
|
+
if (arg.startsWith('-') && arg.length === 2) {
|
|
102
|
+
i++;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
// Positional argument
|
|
106
|
+
result.positional.push(arg);
|
|
107
|
+
i++;
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Normalize a flag key to camelCase.
|
|
113
|
+
* Converts kebab-case to camelCase (e.g., 'dry-run' → 'dryRun').
|
|
114
|
+
*
|
|
115
|
+
* @param key - The flag key to normalize
|
|
116
|
+
* @returns Normalized key in camelCase
|
|
117
|
+
*/
|
|
118
|
+
export function normalizeKey(key) {
|
|
119
|
+
return key.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Parse a value based on expected type for known keys.
|
|
123
|
+
* Numbers are parsed for 'limit', 'count', 'max', 'min', 'timeout'.
|
|
124
|
+
*
|
|
125
|
+
* @param key - The normalized key
|
|
126
|
+
* @param value - The string value
|
|
127
|
+
* @returns Parsed value (number or string)
|
|
128
|
+
*/
|
|
129
|
+
export function parseValue(key, value) {
|
|
130
|
+
const numericKeys = ['limit', 'count', 'max', 'min', 'timeout', 'since', 'days'];
|
|
131
|
+
if (numericKeys.includes(key)) {
|
|
132
|
+
const parsed = parseInt(value, 10);
|
|
133
|
+
return isNaN(parsed) ? value : parsed;
|
|
134
|
+
}
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get a required string argument, throwing an error if missing.
|
|
139
|
+
*
|
|
140
|
+
* @param args - Parsed arguments
|
|
141
|
+
* @param key - Argument key to get
|
|
142
|
+
* @param errorMessage - Custom error message if missing
|
|
143
|
+
* @returns The argument value
|
|
144
|
+
* @throws Error if argument is missing
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* const city = getRequiredArg(args, 'city', 'Missing required --city argument')
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export function getRequiredArg(args, key, errorMessage) {
|
|
152
|
+
const value = args[key];
|
|
153
|
+
if (value === undefined || value === '') {
|
|
154
|
+
throw new Error(errorMessage ?? `Missing required argument: --${key}`);
|
|
155
|
+
}
|
|
156
|
+
if (typeof value !== 'string') {
|
|
157
|
+
throw new Error(`Argument --${key} must be a string`);
|
|
158
|
+
}
|
|
159
|
+
return value;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if help was requested via --help or -h flag.
|
|
163
|
+
*
|
|
164
|
+
* @param argv - Command line arguments
|
|
165
|
+
* @returns True if help was requested
|
|
166
|
+
*/
|
|
167
|
+
export function isHelpRequested(argv) {
|
|
168
|
+
return argv.includes('--help') || argv.includes('-h');
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Print usage information for a script.
|
|
172
|
+
*
|
|
173
|
+
* @param scriptName - Name of the script
|
|
174
|
+
* @param description - Brief description
|
|
175
|
+
* @param options - Available options with descriptions
|
|
176
|
+
* @param examples - Usage examples
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```typescript
|
|
180
|
+
* if (isHelpRequested(process.argv)) {
|
|
181
|
+
* printUsage('discover-shops', 'Discover matcha shops for a city', {
|
|
182
|
+
* '--city <slug>': 'City slug (required)',
|
|
183
|
+
* '--limit <n>': 'Limit API calls',
|
|
184
|
+
* '--dry-run': 'Preview mode, no database writes',
|
|
185
|
+
* }, [
|
|
186
|
+
* 'npx tsx scripts/discover-shops.ts --city nashville',
|
|
187
|
+
* 'npx tsx scripts/discover-shops.ts --city nashville --limit 5',
|
|
188
|
+
* ])
|
|
189
|
+
* process.exit(0)
|
|
190
|
+
* }
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
export function printUsage(scriptName, description, options, examples) {
|
|
194
|
+
console.log(`\n${scriptName}`);
|
|
195
|
+
console.log(`${'─'.repeat(scriptName.length)}\n`);
|
|
196
|
+
console.log(description);
|
|
197
|
+
console.log('\nOptions:');
|
|
198
|
+
const maxKeyLen = Math.max(...Object.keys(options).map(k => k.length));
|
|
199
|
+
for (const [key, desc] of Object.entries(options)) {
|
|
200
|
+
console.log(` ${key.padEnd(maxKeyLen + 2)} ${desc}`);
|
|
201
|
+
}
|
|
202
|
+
if (examples && examples.length > 0) {
|
|
203
|
+
console.log('\nExamples:');
|
|
204
|
+
for (const example of examples) {
|
|
205
|
+
console.log(` ${example}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
console.log('');
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=cli-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../../../../src/lib/workflow/cli-args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* execute-issues.ts - TypeScript Claude Code Workflow Automation
|
|
4
|
+
*
|
|
5
|
+
* Executes /spec → /exec → /test → /qa workflow for GitHub issues.
|
|
6
|
+
* TypeScript port of scripts/execute-issues.sh with added features.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx tsx --env-file=.env.local scripts/dev/execute-issues.ts 123 # Single issue
|
|
10
|
+
* npx tsx --env-file=.env.local scripts/dev/execute-issues.ts 123 124 125 # Multiple parallel
|
|
11
|
+
* PHASES=exec,qa npx tsx --env-file=.env.local scripts/dev/execute-issues.ts 123 # Custom phases
|
|
12
|
+
* PHASES=spec,testgen,exec,qa npx tsx --env-file=.env.local scripts/dev/execute-issues.ts 123 # With test generation
|
|
13
|
+
* npx tsx --env-file=.env.local scripts/dev/execute-issues.ts --batch "123 124" --batch "125 126"
|
|
14
|
+
* npx tsx --env-file=.env.local scripts/dev/execute-issues.ts --sequential 123 124 125 # Respect dependencies
|
|
15
|
+
* QUALITY_LOOP=true npx tsx --env-file=.env.local scripts/dev/execute-issues.ts 123 # Auto-iterate
|
|
16
|
+
* npx tsx scripts/dev/execute-issues.ts --test # Run quick validation tests
|
|
17
|
+
* npx tsx scripts/dev/execute-issues.ts --cleanup-orphans # Clean stale runs
|
|
18
|
+
*
|
|
19
|
+
* Important:
|
|
20
|
+
* Use --env-file=.env.local to enable database logging to workflow_runs table.
|
|
21
|
+
* Without this flag, workflow runs will not be recorded (warning shown at startup).
|
|
22
|
+
*
|
|
23
|
+
* Environment Variables:
|
|
24
|
+
* PHASES - Comma-separated phases (default: spec,exec,qa)
|
|
25
|
+
* Available: spec, testgen, exec, test, qa, loop
|
|
26
|
+
* Note: testgen requires /spec to have run first with verification criteria
|
|
27
|
+
* PHASE_TIMEOUT - Timeout in seconds per phase (default: 1800)
|
|
28
|
+
* QUALITY_LOOP - Enable auto-iteration (default: false). Auto-includes testgen phase.
|
|
29
|
+
* MAX_ITERATIONS - Max fix iterations per phase (default: 3)
|
|
30
|
+
* SKIP_VERIFICATION - Skip /exec verification (default: false)
|
|
31
|
+
*
|
|
32
|
+
* Features:
|
|
33
|
+
* - Auto-detect UI issues for /test inclusion
|
|
34
|
+
* - Optional /testgen phase for shift-left testing (requires /spec comment)
|
|
35
|
+
* - Dependency detection and sequential execution (#355)
|
|
36
|
+
* - Quality loop mode with /loop iterations
|
|
37
|
+
* - Post-exec verification to catch hallucinated implementations
|
|
38
|
+
* - Structured logging to workflow_runs table
|
|
39
|
+
* - Crash cleanup for orphaned runs
|
|
40
|
+
*/
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=execute-issues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-issues.d.ts","sourceRoot":"","sources":["../../../../src/lib/workflow/execute-issues.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG"}
|