sequant 2.5.0 → 2.6.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/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/bin/cli.js +13 -3
- package/dist/marketplace/external_plugins/sequant/.claude-plugin/plugin.json +1 -1
- package/dist/src/commands/run-flags.d.ts +31 -0
- package/dist/src/commands/run-flags.js +34 -0
- package/dist/src/commands/run.js +7 -1
- package/dist/src/lib/workflow/types.d.ts +18 -3
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{
|
|
9
9
|
"name": "sequant",
|
|
10
10
|
"description": "AI coding agent orchestrator for Claude Code — resolve GitHub issues end-to-end with isolated git worktrees, quality gates, and an MCP server. Includes 17 skills, workflow MCP tools, and pre/post-tool hooks.",
|
|
11
|
-
"version": "2.
|
|
11
|
+
"version": "2.6.0",
|
|
12
12
|
"author": {
|
|
13
13
|
"name": "sequant-io",
|
|
14
14
|
"email": "hello@sequant.io"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sequant",
|
|
3
3
|
"description": "AI coding agent orchestrator for Claude Code — resolve GitHub issues end-to-end with isolated git worktrees and quality gates, through spec → exec → qa phases.",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.6.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "sequant-io",
|
|
7
7
|
"email": "hello@sequant.io"
|
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ See the [CHANGELOG](CHANGELOG.md) for release notes, or the [migration guide](CH
|
|
|
19
19
|
### What's new in 2.5
|
|
20
20
|
|
|
21
21
|
- **`sequant ready <issue>`** — a post-resolve A+ QA gate that drives a resolved issue through a full-weight `qa → loop → qa` pass and **stops at the human merge gate — it never merges**.
|
|
22
|
-
- **Live phase-matrix TUI** — `sequant ready` and `sequant run` render the active phase and quality-loop iteration in place (boxed Ink dashboard on a TTY), so a long run is never indistinguishable from a hang.
|
|
22
|
+
- **Live phase-matrix TUI** — `sequant ready` and `sequant run` render the active phase and quality-loop iteration in place (boxed Ink dashboard on a TTY by default), so a long run is never indistinguishable from a hang. Opt out with `--no-tui` (line renderer) or `-s`/`--quiet` (heartbeat-only); non-TTY output auto-degrades.
|
|
23
23
|
- **Per-issue concurrency locks** — a second session on the same issue is skipped with a clear message instead of clobbering the first; `sequant locks` inspects and clears them.
|
|
24
24
|
|
|
25
25
|
## Quick Start
|
package/dist/bin/cli.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Sequential AI phases with quality gates for any codebase.
|
|
6
6
|
*/
|
|
7
|
-
import { Command, InvalidArgumentError } from "commander";
|
|
7
|
+
import { Command, InvalidArgumentError, Option } from "commander";
|
|
8
8
|
import chalk from "chalk";
|
|
9
9
|
import { fileURLToPath } from "url";
|
|
10
10
|
import { dirname, resolve } from "path";
|
|
@@ -173,13 +173,18 @@ program
|
|
|
173
173
|
.option("--no-log", "Disable JSON logging for this run")
|
|
174
174
|
.option("--log-path <path>", "Custom log directory path")
|
|
175
175
|
.option("-Q, --quality-loop", "Enable quality loop with auto-retry")
|
|
176
|
+
// #705: `-q` is a hidden alias for the quality loop (Commander 14 allows only
|
|
177
|
+
// one short flag per Option, so it can't live on --quality-loop directly).
|
|
178
|
+
// `runCommand` ORs `qualityLoopAlias` into `qualityLoop`. `-q` no longer maps
|
|
179
|
+
// to --quiet, which moved to `-s` to end the `-q`/`-Q` collision.
|
|
180
|
+
.addOption(new Option("-q, --quality-loop-alias", "Alias for -Q/--quality-loop").hideHelp())
|
|
176
181
|
.option("--max-iterations <n>", "Max iterations for quality loop (default: 3)", parseInt)
|
|
177
182
|
.option("--batch <issues>", 'Group of issues to run together (e.g., --batch "1 2" --batch "3")', (value, prev) => prev.concat([value]), [])
|
|
178
183
|
.option("--smart-tests", "Enable smart test detection (default)")
|
|
179
184
|
.option("--no-smart-tests", "Disable smart test detection")
|
|
180
185
|
.option("--testgen", "Run testgen phase after spec")
|
|
181
186
|
.option("--security-review", "Run security-review phase after spec")
|
|
182
|
-
.option("-
|
|
187
|
+
.option("-s, --quiet", "Suppress version warnings and non-essential output (heartbeat-only)")
|
|
183
188
|
.option("--chain", "Chain issues: each branches from previous (implies --sequential)")
|
|
184
189
|
.option("--stacked", "Stack PRs: middle PRs target predecessor branch instead of main; first/last target main (implies --chain)")
|
|
185
190
|
.option("--qa-gate", "Wait for QA pass before starting next issue in chain (requires --chain)")
|
|
@@ -195,7 +200,12 @@ program
|
|
|
195
200
|
.option("--isolate-parallel", "Isolate parallel agent groups in separate worktrees (prevents file conflicts)")
|
|
196
201
|
.option("--reflect", "Analyze run results and suggest improvements")
|
|
197
202
|
.option("--agent <name>", 'Agent driver for phase execution (default: "claude-code")')
|
|
198
|
-
|
|
203
|
+
// #705: the boxed Ink TUI is now the default on a TTY. `--no-tui` opts out to
|
|
204
|
+
// the line-based phase-matrix renderer; non-TTY / piped output auto-degrades.
|
|
205
|
+
.option("--no-tui", "Disable the boxed Ink dashboard; use the line-based phase-matrix renderer")
|
|
206
|
+
// #705: `--experimental-tui` is now a hidden no-op alias (the TUI is the
|
|
207
|
+
// default) so existing scripts and muscle-memory keep parsing.
|
|
208
|
+
.addOption(new Option("--experimental-tui").hideHelp())
|
|
199
209
|
.option("--no-relay", "Disable interactive relay (#383); `sequant prompt` cannot reach this run")
|
|
200
210
|
.action(runCommand);
|
|
201
211
|
program
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sequant",
|
|
3
3
|
"description": "AI coding agent orchestrator for Claude Code — resolve GitHub issues end-to-end with isolated git worktrees and quality gates, through spec → exec → qa phases.",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.6.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "sequant-io",
|
|
7
7
|
"email": "hello@sequant.io"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run flag normalization (#705) — keeps run.ts thin (#503 AC-2: <200 LOC).
|
|
3
|
+
*
|
|
4
|
+
* Two pure resolvers for the `run` command's flag surface:
|
|
5
|
+
* - `normalizeQualityLoop`: ORs the hidden `-q` alias into `--quality-loop`.
|
|
6
|
+
* - `resolveTuiEnabled`: decides whether the boxed Ink TUI mounts.
|
|
7
|
+
*
|
|
8
|
+
* Extracted as pure functions so the flag behavior is unit-testable without
|
|
9
|
+
* driving the full `runCommand` side effects.
|
|
10
|
+
*/
|
|
11
|
+
import type { RunOptions } from "../lib/workflow/types.js";
|
|
12
|
+
/**
|
|
13
|
+
* #705: `-q` is a hidden alias for the quality loop (it no longer maps to
|
|
14
|
+
* `--quiet`, which moved to `-s`). Returns the effective quality-loop flag so
|
|
15
|
+
* `-q` and `-Q` produce identical behavior. Must run before any consumer reads
|
|
16
|
+
* `options.qualityLoop`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function normalizeQualityLoop(options: RunOptions): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* #705: the boxed Ink TUI is the default on a TTY.
|
|
21
|
+
*
|
|
22
|
+
* - `--no-tui` (Commander surfaces `options.tui === false`) opts out to the
|
|
23
|
+
* line-based phase-matrix renderer.
|
|
24
|
+
* - Non-TTY / piped output auto-degrades (`isTTY === false`), so no Ink writes
|
|
25
|
+
* corrupt pipes.
|
|
26
|
+
* - `--quiet`/`-s` suppresses the renderer entirely (heartbeat-only),
|
|
27
|
+
* regardless of the TUI default (AC-2).
|
|
28
|
+
* - `--experimental-tui` is a hidden no-op alias — the default already covers
|
|
29
|
+
* it, so it is intentionally not consulted here.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveTuiEnabled(options: RunOptions, isTTY: boolean): boolean;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run flag normalization (#705) — keeps run.ts thin (#503 AC-2: <200 LOC).
|
|
3
|
+
*
|
|
4
|
+
* Two pure resolvers for the `run` command's flag surface:
|
|
5
|
+
* - `normalizeQualityLoop`: ORs the hidden `-q` alias into `--quality-loop`.
|
|
6
|
+
* - `resolveTuiEnabled`: decides whether the boxed Ink TUI mounts.
|
|
7
|
+
*
|
|
8
|
+
* Extracted as pure functions so the flag behavior is unit-testable without
|
|
9
|
+
* driving the full `runCommand` side effects.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* #705: `-q` is a hidden alias for the quality loop (it no longer maps to
|
|
13
|
+
* `--quiet`, which moved to `-s`). Returns the effective quality-loop flag so
|
|
14
|
+
* `-q` and `-Q` produce identical behavior. Must run before any consumer reads
|
|
15
|
+
* `options.qualityLoop`.
|
|
16
|
+
*/
|
|
17
|
+
export function normalizeQualityLoop(options) {
|
|
18
|
+
return Boolean(options.qualityLoop || options.qualityLoopAlias);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* #705: the boxed Ink TUI is the default on a TTY.
|
|
22
|
+
*
|
|
23
|
+
* - `--no-tui` (Commander surfaces `options.tui === false`) opts out to the
|
|
24
|
+
* line-based phase-matrix renderer.
|
|
25
|
+
* - Non-TTY / piped output auto-degrades (`isTTY === false`), so no Ink writes
|
|
26
|
+
* corrupt pipes.
|
|
27
|
+
* - `--quiet`/`-s` suppresses the renderer entirely (heartbeat-only),
|
|
28
|
+
* regardless of the TUI default (AC-2).
|
|
29
|
+
* - `--experimental-tui` is a hidden no-op alias — the default already covers
|
|
30
|
+
* it, so it is intentionally not consulted here.
|
|
31
|
+
*/
|
|
32
|
+
export function resolveTuiEnabled(options, isTTY) {
|
|
33
|
+
return options.tui !== false && isTTY && !options.quiet;
|
|
34
|
+
}
|
package/dist/src/commands/run.js
CHANGED
|
@@ -8,10 +8,14 @@ import { parseBatches } from "../lib/workflow/batch-executor.js";
|
|
|
8
8
|
import { RunOrchestrator } from "../lib/workflow/run-orchestrator.js";
|
|
9
9
|
import { displayConfig, displaySummary } from "./run-display.js";
|
|
10
10
|
import { buildProgressWiring } from "./run-progress.js";
|
|
11
|
+
import { normalizeQualityLoop, resolveTuiEnabled } from "./run-flags.js";
|
|
11
12
|
// Re-export public API for backwards compatibility
|
|
12
13
|
export * from "./run-compat.js";
|
|
13
14
|
/** Parse CLI args → validate → delegate to RunOrchestrator.run() → display summary. */
|
|
14
15
|
export async function runCommand(issues, options) {
|
|
16
|
+
// #705: fold the hidden `-q` alias into qualityLoop before any consumer reads
|
|
17
|
+
// it (`-q` no longer maps to --quiet, which moved to `-s`). See run-flags.ts.
|
|
18
|
+
options.qualityLoop = normalizeQualityLoop(options);
|
|
15
19
|
console.log(ui.headerBox("SEQUANT WORKFLOW"));
|
|
16
20
|
if (!options.quiet) {
|
|
17
21
|
try {
|
|
@@ -69,7 +73,9 @@ export async function runCommand(issues, options) {
|
|
|
69
73
|
};
|
|
70
74
|
const resolved = RunOrchestrator.resolveConfig(init, issues, batches);
|
|
71
75
|
displayConfig(resolved);
|
|
72
|
-
|
|
76
|
+
// #705: boxed Ink TUI is the default on a TTY; resolveTuiEnabled owns the
|
|
77
|
+
// --no-tui / non-TTY / --quiet precedence (see run-flags.ts).
|
|
78
|
+
const tuiEnabled = resolveTuiEnabled(options, Boolean(process.stdout.isTTY));
|
|
73
79
|
// RunRenderer (#618) + LivenessHeartbeat (#574) wiring lives in
|
|
74
80
|
// run-progress.ts to keep this adapter under the 200-LOC cap (#503 AC-2).
|
|
75
81
|
const { renderer, heartbeat, onProgress, onPhasePlan } = buildProgressWiring({
|
|
@@ -214,6 +214,13 @@ export interface RunOptions {
|
|
|
214
214
|
noLog?: boolean;
|
|
215
215
|
logPath?: string;
|
|
216
216
|
qualityLoop?: boolean;
|
|
217
|
+
/**
|
|
218
|
+
* #705: hidden `-q` alias for the quality loop. Commander 14 allows only one
|
|
219
|
+
* short flag per Option, so `-q` lives on its own `--quality-loop-alias`
|
|
220
|
+
* Option and `runCommand` ORs it into `qualityLoop` before any consumer reads
|
|
221
|
+
* it. `-q` no longer maps to `--quiet` (which moved to `-s`).
|
|
222
|
+
*/
|
|
223
|
+
qualityLoopAlias?: boolean;
|
|
217
224
|
maxIterations?: number;
|
|
218
225
|
batch?: string[];
|
|
219
226
|
smartTests?: boolean;
|
|
@@ -303,9 +310,17 @@ export interface RunOptions {
|
|
|
303
310
|
*/
|
|
304
311
|
isolateParallel?: boolean;
|
|
305
312
|
/**
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
*
|
|
313
|
+
* #705: the boxed Ink dashboard is the default on a TTY. Set via `--no-tui`,
|
|
314
|
+
* which Commander surfaces as `options.tui === false` to opt out to the
|
|
315
|
+
* line-based phase-matrix renderer. Non-TTY / piped output auto-degrades, and
|
|
316
|
+
* `--quiet`/`-s` suppresses the renderer entirely regardless of this flag.
|
|
317
|
+
* Resolution: `tuiEnabled = options.tui !== false && isTTY && !quiet`.
|
|
318
|
+
*/
|
|
319
|
+
tui?: boolean;
|
|
320
|
+
/**
|
|
321
|
+
* #705: now a hidden no-op alias — the boxed Ink TUI is the default, so
|
|
322
|
+
* `--experimental-tui` only parses for backward compatibility and no longer
|
|
323
|
+
* gates rendering. Kept so existing scripts/muscle-memory don't break.
|
|
309
324
|
*/
|
|
310
325
|
experimentalTui?: boolean;
|
|
311
326
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sequant",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "AI coding agent orchestrator — resolve GitHub issues end-to-end with isolated git worktrees, quality gates, and an MCP server. Works with Claude Code or Aider.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|