sequant 1.18.0 → 1.19.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/.claude-plugin/plugin.json +1 -1
- package/dist/bin/cli.js +7 -0
- package/dist/src/commands/conventions.d.ts +9 -0
- package/dist/src/commands/conventions.js +61 -0
- package/dist/src/commands/init.js +12 -0
- package/dist/src/lib/conventions-detector.d.ts +62 -0
- package/dist/src/lib/conventions-detector.js +510 -0
- package/dist/src/lib/settings.d.ts +8 -0
- package/dist/src/lib/settings.js +1 -0
- package/dist/src/lib/stacks.d.ts +4 -2
- package/dist/src/lib/stacks.js +43 -3
- package/dist/src/lib/workflow/state-schema.d.ts +5 -5
- package/package.json +1 -1
- package/templates/skills/exec/SKILL.md +1086 -29
- package/templates/skills/qa/SKILL.md +1732 -156
- package/templates/skills/test/SKILL.md +246 -1
|
@@ -87,6 +87,14 @@ export interface RunSettings {
|
|
|
87
87
|
* Default: true
|
|
88
88
|
*/
|
|
89
89
|
retry: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Threshold for stale branch detection in pre-flight checks.
|
|
92
|
+
* If feature branch is more than this many commits behind main,
|
|
93
|
+
* QA/test skills block execution and recommend rebase.
|
|
94
|
+
* exec skill warns but doesn't block.
|
|
95
|
+
* Default: 5
|
|
96
|
+
*/
|
|
97
|
+
staleBranchThreshold: number;
|
|
90
98
|
}
|
|
91
99
|
/**
|
|
92
100
|
* Scope assessment threshold configuration
|
package/dist/src/lib/settings.js
CHANGED
|
@@ -85,6 +85,7 @@ export const DEFAULT_SETTINGS = {
|
|
|
85
85
|
rotation: DEFAULT_ROTATION_SETTINGS,
|
|
86
86
|
mcp: true, // Enable MCP servers by default in headless mode
|
|
87
87
|
retry: true, // Enable automatic retry with MCP fallback by default
|
|
88
|
+
staleBranchThreshold: 5, // Block QA/test if feature is >5 commits behind main
|
|
88
89
|
},
|
|
89
90
|
agents: DEFAULT_AGENT_SETTINGS,
|
|
90
91
|
scopeAssessment: DEFAULT_SCOPE_ASSESSMENT_SETTINGS,
|
package/dist/src/lib/stacks.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export interface StackConfig_Persisted {
|
|
|
28
28
|
/**
|
|
29
29
|
* Supported package managers
|
|
30
30
|
*/
|
|
31
|
-
export type PackageManager = "npm" | "bun" | "yarn" | "pnpm";
|
|
31
|
+
export type PackageManager = "npm" | "bun" | "yarn" | "pnpm" | "pip" | "poetry" | "uv";
|
|
32
32
|
/**
|
|
33
33
|
* Package manager command configuration
|
|
34
34
|
*/
|
|
@@ -44,8 +44,10 @@ export interface PackageManagerConfig {
|
|
|
44
44
|
export declare const PM_CONFIG: Record<PackageManager, PackageManagerConfig>;
|
|
45
45
|
/**
|
|
46
46
|
* Detect package manager from lockfiles
|
|
47
|
-
* Priority: bun > yarn > pnpm > npm
|
|
47
|
+
* Priority: bun > yarn > pnpm > npm (for JS)
|
|
48
|
+
* Priority: uv > poetry > pip (for Python)
|
|
48
49
|
* Falls back to npm if no lockfile found but package.json exists
|
|
50
|
+
* Falls back to pip if no lockfile found but pyproject.toml/requirements.txt exists
|
|
49
51
|
*/
|
|
50
52
|
export declare function detectPackageManager(): Promise<PackageManager | null>;
|
|
51
53
|
/**
|
package/dist/src/lib/stacks.js
CHANGED
|
@@ -48,6 +48,25 @@ export const PM_CONFIG = {
|
|
|
48
48
|
install: "pnpm install",
|
|
49
49
|
installSilent: "pnpm install --silent",
|
|
50
50
|
},
|
|
51
|
+
// Python package managers
|
|
52
|
+
pip: {
|
|
53
|
+
run: "python -m",
|
|
54
|
+
exec: "python -m",
|
|
55
|
+
install: "pip install",
|
|
56
|
+
installSilent: "pip install -q",
|
|
57
|
+
},
|
|
58
|
+
poetry: {
|
|
59
|
+
run: "poetry run",
|
|
60
|
+
exec: "poetry run",
|
|
61
|
+
install: "poetry install",
|
|
62
|
+
installSilent: "poetry install -q",
|
|
63
|
+
},
|
|
64
|
+
uv: {
|
|
65
|
+
run: "uv run",
|
|
66
|
+
exec: "uvx",
|
|
67
|
+
install: "uv pip install",
|
|
68
|
+
installSilent: "uv pip install -q",
|
|
69
|
+
},
|
|
51
70
|
};
|
|
52
71
|
/**
|
|
53
72
|
* Lockfile to package manager mapping (priority order: bun > yarn > pnpm > npm)
|
|
@@ -59,13 +78,23 @@ const LOCKFILE_PRIORITY = [
|
|
|
59
78
|
{ file: "pnpm-lock.yaml", pm: "pnpm" },
|
|
60
79
|
{ file: "package-lock.json", pm: "npm" },
|
|
61
80
|
];
|
|
81
|
+
/**
|
|
82
|
+
* Python lockfile to package manager mapping (priority order: uv > poetry > pip)
|
|
83
|
+
*/
|
|
84
|
+
const PYTHON_LOCKFILE_PRIORITY = [
|
|
85
|
+
{ file: "uv.lock", pm: "uv" },
|
|
86
|
+
{ file: "poetry.lock", pm: "poetry" },
|
|
87
|
+
// requirements.txt is a fallback when no lockfile is found
|
|
88
|
+
];
|
|
62
89
|
/**
|
|
63
90
|
* Detect package manager from lockfiles
|
|
64
|
-
* Priority: bun > yarn > pnpm > npm
|
|
91
|
+
* Priority: bun > yarn > pnpm > npm (for JS)
|
|
92
|
+
* Priority: uv > poetry > pip (for Python)
|
|
65
93
|
* Falls back to npm if no lockfile found but package.json exists
|
|
94
|
+
* Falls back to pip if no lockfile found but pyproject.toml/requirements.txt exists
|
|
66
95
|
*/
|
|
67
96
|
export async function detectPackageManager() {
|
|
68
|
-
// Check lockfiles in priority order
|
|
97
|
+
// Check JS lockfiles in priority order
|
|
69
98
|
for (const { file, pm } of LOCKFILE_PRIORITY) {
|
|
70
99
|
if (await fileExists(file)) {
|
|
71
100
|
return pm;
|
|
@@ -75,7 +104,18 @@ export async function detectPackageManager() {
|
|
|
75
104
|
if (await fileExists("package.json")) {
|
|
76
105
|
return "npm";
|
|
77
106
|
}
|
|
78
|
-
//
|
|
107
|
+
// Check Python lockfiles in priority order
|
|
108
|
+
for (const { file, pm } of PYTHON_LOCKFILE_PRIORITY) {
|
|
109
|
+
if (await fileExists(file)) {
|
|
110
|
+
return pm;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Fallback to pip if pyproject.toml or requirements.txt exists
|
|
114
|
+
if ((await fileExists("pyproject.toml")) ||
|
|
115
|
+
(await fileExists("requirements.txt"))) {
|
|
116
|
+
return "pip";
|
|
117
|
+
}
|
|
118
|
+
// Not a recognized project type
|
|
79
119
|
return null;
|
|
80
120
|
}
|
|
81
121
|
/**
|
|
@@ -137,10 +137,10 @@ export type ACStatus = z.infer<typeof ACStatusSchema>;
|
|
|
137
137
|
* Acceptance criteria verification method
|
|
138
138
|
*/
|
|
139
139
|
export declare const ACVerificationMethodSchema: z.ZodEnum<{
|
|
140
|
+
manual: "manual";
|
|
140
141
|
unit_test: "unit_test";
|
|
141
142
|
integration_test: "integration_test";
|
|
142
143
|
browser_test: "browser_test";
|
|
143
|
-
manual: "manual";
|
|
144
144
|
}>;
|
|
145
145
|
export type ACVerificationMethod = z.infer<typeof ACVerificationMethodSchema>;
|
|
146
146
|
/**
|
|
@@ -150,10 +150,10 @@ export declare const AcceptanceCriterionSchema: z.ZodObject<{
|
|
|
150
150
|
id: z.ZodString;
|
|
151
151
|
description: z.ZodString;
|
|
152
152
|
verificationMethod: z.ZodEnum<{
|
|
153
|
+
manual: "manual";
|
|
153
154
|
unit_test: "unit_test";
|
|
154
155
|
integration_test: "integration_test";
|
|
155
156
|
browser_test: "browser_test";
|
|
156
|
-
manual: "manual";
|
|
157
157
|
}>;
|
|
158
158
|
status: z.ZodEnum<{
|
|
159
159
|
pending: "pending";
|
|
@@ -173,10 +173,10 @@ export declare const AcceptanceCriteriaSchema: z.ZodObject<{
|
|
|
173
173
|
id: z.ZodString;
|
|
174
174
|
description: z.ZodString;
|
|
175
175
|
verificationMethod: z.ZodEnum<{
|
|
176
|
+
manual: "manual";
|
|
176
177
|
unit_test: "unit_test";
|
|
177
178
|
integration_test: "integration_test";
|
|
178
179
|
browser_test: "browser_test";
|
|
179
|
-
manual: "manual";
|
|
180
180
|
}>;
|
|
181
181
|
status: z.ZodEnum<{
|
|
182
182
|
pending: "pending";
|
|
@@ -252,10 +252,10 @@ export declare const IssueStateSchema: z.ZodObject<{
|
|
|
252
252
|
id: z.ZodString;
|
|
253
253
|
description: z.ZodString;
|
|
254
254
|
verificationMethod: z.ZodEnum<{
|
|
255
|
+
manual: "manual";
|
|
255
256
|
unit_test: "unit_test";
|
|
256
257
|
integration_test: "integration_test";
|
|
257
258
|
browser_test: "browser_test";
|
|
258
|
-
manual: "manual";
|
|
259
259
|
}>;
|
|
260
260
|
status: z.ZodEnum<{
|
|
261
261
|
pending: "pending";
|
|
@@ -377,10 +377,10 @@ export declare const WorkflowStateSchema: z.ZodObject<{
|
|
|
377
377
|
id: z.ZodString;
|
|
378
378
|
description: z.ZodString;
|
|
379
379
|
verificationMethod: z.ZodEnum<{
|
|
380
|
+
manual: "manual";
|
|
380
381
|
unit_test: "unit_test";
|
|
381
382
|
integration_test: "integration_test";
|
|
382
383
|
browser_test: "browser_test";
|
|
383
|
-
manual: "manual";
|
|
384
384
|
}>;
|
|
385
385
|
status: z.ZodEnum<{
|
|
386
386
|
pending: "pending";
|