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,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured Logger for Pipeline Scripts
|
|
3
|
+
*
|
|
4
|
+
* Provides log levels with emoji prefixes for visual scanning in terminal output.
|
|
5
|
+
* Supports verbose mode integration with CLI arguments.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createLogger } from './lib/logger'
|
|
10
|
+
*
|
|
11
|
+
* const log = createLogger({ verbose: args.verbose })
|
|
12
|
+
*
|
|
13
|
+
* log.debug('Processing item', { id: 123 }) // Only shown in verbose mode
|
|
14
|
+
* log.info('Starting process')
|
|
15
|
+
* log.success('Completed successfully')
|
|
16
|
+
* log.warn('Missing optional field')
|
|
17
|
+
* log.error('Failed to connect', error)
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Emoji prefixes for each log level.
|
|
22
|
+
*/
|
|
23
|
+
const LOG_PREFIXES = {
|
|
24
|
+
debug: "🔍",
|
|
25
|
+
info: "ℹ️",
|
|
26
|
+
success: "✅",
|
|
27
|
+
warn: "⚠️",
|
|
28
|
+
error: "❌",
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Format a log message with optional data.
|
|
32
|
+
*
|
|
33
|
+
* @param level - The log level
|
|
34
|
+
* @param message - The log message
|
|
35
|
+
* @param data - Optional data to include
|
|
36
|
+
* @param options - Additional formatting options
|
|
37
|
+
* @returns Formatted log string
|
|
38
|
+
*/
|
|
39
|
+
function formatMessage(level, message, data, options) {
|
|
40
|
+
const parts = [];
|
|
41
|
+
// Add timestamp if enabled
|
|
42
|
+
if (options?.timestamp) {
|
|
43
|
+
const now = new Date().toISOString().slice(11, 19); // HH:MM:SS
|
|
44
|
+
parts.push(`[${now}]`);
|
|
45
|
+
}
|
|
46
|
+
// Add emoji prefix
|
|
47
|
+
parts.push(LOG_PREFIXES[level]);
|
|
48
|
+
// Add custom prefix if provided
|
|
49
|
+
if (options?.prefix) {
|
|
50
|
+
parts.push(`[${options.prefix}]`);
|
|
51
|
+
}
|
|
52
|
+
// Add message
|
|
53
|
+
parts.push(message);
|
|
54
|
+
// Add data if provided
|
|
55
|
+
if (data !== undefined) {
|
|
56
|
+
if (data instanceof Error) {
|
|
57
|
+
parts.push(`- ${data.message}`);
|
|
58
|
+
if (data.stack) {
|
|
59
|
+
parts.push(`\n ${data.stack.split("\n").slice(1).join("\n ")}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else if (typeof data === "object") {
|
|
63
|
+
parts.push(`- ${JSON.stringify(data)}`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
parts.push(`- ${String(data)}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return parts.join(" ");
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a structured logger with configurable options.
|
|
73
|
+
*
|
|
74
|
+
* @param options - Logger configuration
|
|
75
|
+
* @returns A Logger instance
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* // Basic usage
|
|
80
|
+
* const log = createLogger()
|
|
81
|
+
* log.info('Hello')
|
|
82
|
+
*
|
|
83
|
+
* // With verbose mode
|
|
84
|
+
* const verboseLog = createLogger({ verbose: true })
|
|
85
|
+
* verboseLog.debug('Debug info') // Now visible
|
|
86
|
+
*
|
|
87
|
+
* // With timestamps
|
|
88
|
+
* const timedLog = createLogger({ timestamps: true })
|
|
89
|
+
* timedLog.info('With time') // [12:34:56] ℹ️ With time
|
|
90
|
+
*
|
|
91
|
+
* // Child logger with prefix
|
|
92
|
+
* const childLog = log.child('discovery')
|
|
93
|
+
* childLog.info('Finding shops') // ℹ️ [discovery] Finding shops
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export function createLogger(options = {}) {
|
|
97
|
+
const { verbose = false, silent = false, output = console.log, errorOutput = console.error, timestamps = false, } = options;
|
|
98
|
+
const createLogFunction = (prefix) => ({
|
|
99
|
+
debug(message, data) {
|
|
100
|
+
if (silent || !verbose)
|
|
101
|
+
return;
|
|
102
|
+
output(formatMessage("debug", message, data, {
|
|
103
|
+
prefix,
|
|
104
|
+
timestamp: timestamps,
|
|
105
|
+
}));
|
|
106
|
+
},
|
|
107
|
+
info(message, data) {
|
|
108
|
+
if (silent)
|
|
109
|
+
return;
|
|
110
|
+
output(formatMessage("info", message, data, { prefix, timestamp: timestamps }));
|
|
111
|
+
},
|
|
112
|
+
success(message, data) {
|
|
113
|
+
if (silent)
|
|
114
|
+
return;
|
|
115
|
+
output(formatMessage("success", message, data, {
|
|
116
|
+
prefix,
|
|
117
|
+
timestamp: timestamps,
|
|
118
|
+
}));
|
|
119
|
+
},
|
|
120
|
+
warn(message, data) {
|
|
121
|
+
if (silent)
|
|
122
|
+
return;
|
|
123
|
+
output(formatMessage("warn", message, data, { prefix, timestamp: timestamps }));
|
|
124
|
+
},
|
|
125
|
+
error(message, data) {
|
|
126
|
+
if (silent)
|
|
127
|
+
return;
|
|
128
|
+
errorOutput(formatMessage("error", message, data, {
|
|
129
|
+
prefix,
|
|
130
|
+
timestamp: timestamps,
|
|
131
|
+
}));
|
|
132
|
+
},
|
|
133
|
+
log(level, message, data) {
|
|
134
|
+
if (silent)
|
|
135
|
+
return;
|
|
136
|
+
if (level === "debug" && !verbose)
|
|
137
|
+
return;
|
|
138
|
+
const logFn = level === "error" ? errorOutput : output;
|
|
139
|
+
logFn(formatMessage(level, message, data, { prefix, timestamp: timestamps }));
|
|
140
|
+
},
|
|
141
|
+
child(childPrefix) {
|
|
142
|
+
const newPrefix = prefix ? `${prefix}:${childPrefix}` : childPrefix;
|
|
143
|
+
return createLogFunction(newPrefix);
|
|
144
|
+
},
|
|
145
|
+
isVerbose() {
|
|
146
|
+
return verbose;
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
return createLogFunction();
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Default logger instance (non-verbose).
|
|
153
|
+
* Use `createLogger({ verbose: true })` for verbose mode.
|
|
154
|
+
*/
|
|
155
|
+
export const defaultLogger = createLogger();
|
|
156
|
+
/**
|
|
157
|
+
* Quick logging functions using the default logger.
|
|
158
|
+
* For scripts that don't need verbose mode configuration.
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* import { log } from './lib/logger'
|
|
163
|
+
*
|
|
164
|
+
* log.info('Starting')
|
|
165
|
+
* log.success('Done')
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export const log = defaultLogger;
|
|
169
|
+
/**
|
|
170
|
+
* Create a logger that logs to an array for testing.
|
|
171
|
+
*
|
|
172
|
+
* @returns Object with logger and captured messages
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* const { logger, messages } = createTestLogger()
|
|
177
|
+
* logger.info('test')
|
|
178
|
+
* expect(messages).toContain(expect.stringContaining('test'))
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
export function createTestLogger(options = {}) {
|
|
182
|
+
const messages = [];
|
|
183
|
+
const errors = [];
|
|
184
|
+
const logger = createLogger({
|
|
185
|
+
...options,
|
|
186
|
+
output: (msg) => messages.push(msg),
|
|
187
|
+
errorOutput: (msg) => errors.push(msg),
|
|
188
|
+
});
|
|
189
|
+
return { logger, messages, errors };
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Log a step in a multi-step process.
|
|
193
|
+
*
|
|
194
|
+
* @param step - Current step number
|
|
195
|
+
* @param total - Total number of steps
|
|
196
|
+
* @param message - Step description
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* logStep(1, 3, 'Fetching data')
|
|
201
|
+
* // Output: ℹ️ [1/3] Fetching data
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
export function logStep(step, total, message) {
|
|
205
|
+
console.log(`ℹ️ [${step}/${total}] ${message}`);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Log a progress update within a step.
|
|
209
|
+
*
|
|
210
|
+
* @param current - Current progress
|
|
211
|
+
* @param total - Total items
|
|
212
|
+
* @param message - Progress description
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```typescript
|
|
216
|
+
* logProgress(5, 10, 'Processing shops')
|
|
217
|
+
* // Output: → 5/10 Processing shops
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
export function logProgress(current, total, message) {
|
|
221
|
+
console.log(` → ${current}/${total} ${message}`);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Log a section header for visual organization.
|
|
225
|
+
*
|
|
226
|
+
* @param title - Section title
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```typescript
|
|
230
|
+
* logSection('Discovery Results')
|
|
231
|
+
* // Output:
|
|
232
|
+
* // ════════════════════════════════════════
|
|
233
|
+
* // Discovery Results
|
|
234
|
+
* // ════════════════════════════════════════
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
export function logSection(title) {
|
|
238
|
+
const line = "═".repeat(40);
|
|
239
|
+
console.log(`\n${line}`);
|
|
240
|
+
console.log(title);
|
|
241
|
+
console.log(`${line}\n`);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Log a divider line.
|
|
245
|
+
*/
|
|
246
|
+
export function logDivider() {
|
|
247
|
+
console.log("─".repeat(40));
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../src/lib/workflow/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for workflow execution
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Available workflow phases
|
|
6
|
+
*/
|
|
7
|
+
export type Phase = "spec" | "testgen" | "exec" | "test" | "qa" | "loop";
|
|
8
|
+
/**
|
|
9
|
+
* Default phases for workflow execution
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_PHASES: Phase[];
|
|
12
|
+
/**
|
|
13
|
+
* Configuration for workflow execution
|
|
14
|
+
*/
|
|
15
|
+
export interface ExecutionConfig {
|
|
16
|
+
/** Phases to execute */
|
|
17
|
+
phases: Phase[];
|
|
18
|
+
/** Timeout per phase in seconds */
|
|
19
|
+
phaseTimeout: number;
|
|
20
|
+
/** Enable quality loop mode */
|
|
21
|
+
qualityLoop: boolean;
|
|
22
|
+
/** Max iterations for quality loop */
|
|
23
|
+
maxIterations: number;
|
|
24
|
+
/** Skip verification after exec */
|
|
25
|
+
skipVerification: boolean;
|
|
26
|
+
/** Run issues sequentially */
|
|
27
|
+
sequential: boolean;
|
|
28
|
+
/** Force parallel even with dependencies */
|
|
29
|
+
forceParallel: boolean;
|
|
30
|
+
/** Verbose output */
|
|
31
|
+
verbose: boolean;
|
|
32
|
+
/** Disable smart test detection */
|
|
33
|
+
noSmartTests: boolean;
|
|
34
|
+
/** Dry run mode - don't actually execute */
|
|
35
|
+
dryRun: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Default execution configuration
|
|
39
|
+
*/
|
|
40
|
+
export declare const DEFAULT_CONFIG: ExecutionConfig;
|
|
41
|
+
/**
|
|
42
|
+
* Result of executing a single phase
|
|
43
|
+
*/
|
|
44
|
+
export interface PhaseResult {
|
|
45
|
+
phase: Phase;
|
|
46
|
+
success: boolean;
|
|
47
|
+
durationSeconds?: number;
|
|
48
|
+
error?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Result of executing all phases for an issue
|
|
52
|
+
*/
|
|
53
|
+
export interface IssueResult {
|
|
54
|
+
issueNumber: number;
|
|
55
|
+
success: boolean;
|
|
56
|
+
phaseResults: PhaseResult[];
|
|
57
|
+
abortReason?: string;
|
|
58
|
+
loopTriggered?: boolean;
|
|
59
|
+
durationSeconds?: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* CLI arguments for run command
|
|
63
|
+
*/
|
|
64
|
+
export interface RunCommandOptions {
|
|
65
|
+
issues: number[];
|
|
66
|
+
phases?: string;
|
|
67
|
+
sequential?: boolean;
|
|
68
|
+
dryRun?: boolean;
|
|
69
|
+
verbose?: boolean;
|
|
70
|
+
timeout?: number;
|
|
71
|
+
maxIterations?: number;
|
|
72
|
+
qualityLoop?: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Batch of issues to run together
|
|
76
|
+
*/
|
|
77
|
+
export interface IssueBatch {
|
|
78
|
+
batchNumber: number;
|
|
79
|
+
issues: number[];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Result of a batch execution
|
|
83
|
+
*/
|
|
84
|
+
export interface BatchResult {
|
|
85
|
+
batchNumber: number;
|
|
86
|
+
issueResults: IssueResult[];
|
|
87
|
+
success: boolean;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/workflow/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,EAA2B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,eAW5B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for workflow execution
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Default phases for workflow execution
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_PHASES = ["spec", "exec", "qa"];
|
|
8
|
+
/**
|
|
9
|
+
* Default execution configuration
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_CONFIG = {
|
|
12
|
+
phases: DEFAULT_PHASES,
|
|
13
|
+
phaseTimeout: 1800,
|
|
14
|
+
qualityLoop: false,
|
|
15
|
+
maxIterations: 3,
|
|
16
|
+
skipVerification: false,
|
|
17
|
+
sequential: false,
|
|
18
|
+
forceParallel: false,
|
|
19
|
+
verbose: false,
|
|
20
|
+
noSmartTests: false,
|
|
21
|
+
dryRun: false,
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/workflow/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AA4B9D;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,CAAC;IAChB,gBAAgB,EAAE,KAAK;IACvB,UAAU,EAAE,KAAK;IACjB,aAAa,EAAE,KAAK;IACpB,OAAO,EAAE,KAAK;IACd,YAAY,EAAE,KAAK;IACnB,MAAM,EAAE,KAAK;CACd,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sequant",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Quantize your development workflow - Sequential AI phases with quality gates",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"sequant": "./dist/bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"templates",
|
|
20
|
+
"stacks"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc",
|
|
24
|
+
"dev": "tsx bin/cli.ts",
|
|
25
|
+
"test": "echo \"No tests yet\" && exit 0",
|
|
26
|
+
"lint": "echo \"No linter configured yet\" && exit 0",
|
|
27
|
+
"validate:skills": "for skill in templates/skills/*/; do npx skills-ref validate \"$skill\"; done",
|
|
28
|
+
"prepublishOnly": "npm run build"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"claude",
|
|
32
|
+
"claude-code",
|
|
33
|
+
"workflow",
|
|
34
|
+
"ai",
|
|
35
|
+
"automation",
|
|
36
|
+
"quality",
|
|
37
|
+
"sequential",
|
|
38
|
+
"agent-skills",
|
|
39
|
+
"cursor",
|
|
40
|
+
"vscode"
|
|
41
|
+
],
|
|
42
|
+
"author": "Sequant Contributors",
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"repository": {
|
|
45
|
+
"type": "git",
|
|
46
|
+
"url": "git+https://github.com/admarble/sequant.git"
|
|
47
|
+
},
|
|
48
|
+
"bugs": {
|
|
49
|
+
"url": "https://github.com/admarble/sequant/issues"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/admarble/sequant#readme",
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=18.0.0"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"chalk": "^5.3.0",
|
|
57
|
+
"commander": "^12.1.0",
|
|
58
|
+
"diff": "^7.0.0",
|
|
59
|
+
"inquirer": "^12.3.2",
|
|
60
|
+
"yaml": "^2.7.0"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@types/diff": "^7.0.0",
|
|
64
|
+
"@types/inquirer": "^9.0.7",
|
|
65
|
+
"@types/node": "^22.10.5",
|
|
66
|
+
"tsx": "^4.19.2",
|
|
67
|
+
"typescript": "^5.7.2"
|
|
68
|
+
}
|
|
69
|
+
}
|
package/stacks/go.yaml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: go
|
|
2
|
+
displayName: Go
|
|
3
|
+
description: Statically typed, compiled programming language
|
|
4
|
+
|
|
5
|
+
detection:
|
|
6
|
+
files:
|
|
7
|
+
- go.mod
|
|
8
|
+
|
|
9
|
+
commands:
|
|
10
|
+
test: go test ./...
|
|
11
|
+
build: go build ./...
|
|
12
|
+
lint: golangci-lint run
|
|
13
|
+
fmt: go fmt ./...
|
|
14
|
+
|
|
15
|
+
variables:
|
|
16
|
+
TEST_COMMAND: go test ./...
|
|
17
|
+
BUILD_COMMAND: go build ./...
|
|
18
|
+
LINT_COMMAND: golangci-lint run
|
|
19
|
+
|
|
20
|
+
patterns:
|
|
21
|
+
src: "**/*.go"
|
|
22
|
+
tests: "**/*_test.go"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: nextjs
|
|
2
|
+
displayName: Next.js
|
|
3
|
+
description: React framework for production
|
|
4
|
+
|
|
5
|
+
detection:
|
|
6
|
+
files:
|
|
7
|
+
- next.config.js
|
|
8
|
+
- next.config.mjs
|
|
9
|
+
- next.config.ts
|
|
10
|
+
packageDeps:
|
|
11
|
+
- next
|
|
12
|
+
|
|
13
|
+
commands:
|
|
14
|
+
test: npm test
|
|
15
|
+
build: npm run build
|
|
16
|
+
lint: npm run lint
|
|
17
|
+
dev: npm run dev
|
|
18
|
+
|
|
19
|
+
variables:
|
|
20
|
+
TEST_COMMAND: npm test
|
|
21
|
+
BUILD_COMMAND: npm run build
|
|
22
|
+
LINT_COMMAND: npm run lint
|
|
23
|
+
|
|
24
|
+
patterns:
|
|
25
|
+
components: components/**/*.tsx
|
|
26
|
+
pages: app/**/*.tsx
|
|
27
|
+
api: app/api/**/*.ts
|
|
28
|
+
tests: __tests__/**/*.test.{ts,tsx}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: python
|
|
2
|
+
displayName: Python
|
|
3
|
+
description: General-purpose programming language
|
|
4
|
+
|
|
5
|
+
detection:
|
|
6
|
+
files:
|
|
7
|
+
- pyproject.toml
|
|
8
|
+
- setup.py
|
|
9
|
+
- requirements.txt
|
|
10
|
+
|
|
11
|
+
commands:
|
|
12
|
+
test: pytest
|
|
13
|
+
build: python -m build
|
|
14
|
+
lint: ruff check .
|
|
15
|
+
format: ruff format .
|
|
16
|
+
|
|
17
|
+
variables:
|
|
18
|
+
TEST_COMMAND: pytest
|
|
19
|
+
BUILD_COMMAND: python -m build
|
|
20
|
+
LINT_COMMAND: ruff check .
|
|
21
|
+
|
|
22
|
+
patterns:
|
|
23
|
+
src: src/**/*.py
|
|
24
|
+
tests: tests/**/*.py
|
package/stacks/rust.yaml
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: rust
|
|
2
|
+
displayName: Rust
|
|
3
|
+
description: Systems programming language
|
|
4
|
+
|
|
5
|
+
detection:
|
|
6
|
+
files:
|
|
7
|
+
- Cargo.toml
|
|
8
|
+
|
|
9
|
+
commands:
|
|
10
|
+
test: cargo test
|
|
11
|
+
build: cargo build --release
|
|
12
|
+
lint: cargo clippy
|
|
13
|
+
check: cargo check
|
|
14
|
+
|
|
15
|
+
variables:
|
|
16
|
+
TEST_COMMAND: cargo test
|
|
17
|
+
BUILD_COMMAND: cargo build --release
|
|
18
|
+
LINT_COMMAND: cargo clippy
|
|
19
|
+
|
|
20
|
+
patterns:
|
|
21
|
+
src: src/**/*.rs
|
|
22
|
+
tests: tests/**/*.rs
|
|
23
|
+
benches: benches/**/*.rs
|