sequant 2.3.0 → 2.5.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 +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/README.md +125 -160
- package/dist/bin/cli.js +59 -4
- package/dist/dashboard/server.js +1 -0
- package/dist/marketplace/external_plugins/sequant/.claude-plugin/plugin.json +2 -2
- package/dist/marketplace/external_plugins/sequant/README.md +6 -3
- package/dist/marketplace/external_plugins/sequant/hooks/post-tool.sh +92 -0
- package/dist/marketplace/external_plugins/sequant/hooks/pre-tool.sh +18 -9
- package/dist/marketplace/external_plugins/sequant/hooks/relay-check.sh +107 -0
- package/dist/marketplace/external_plugins/sequant/skills/_shared/references/behavior-rule-detection.md +205 -0
- package/dist/marketplace/external_plugins/sequant/skills/_shared/references/subagent-types.md +21 -8
- package/dist/marketplace/external_plugins/sequant/skills/assess/SKILL.md +302 -86
- package/dist/marketplace/external_plugins/sequant/skills/assess/references/predicted-collision-detection.md +109 -0
- package/dist/marketplace/external_plugins/sequant/skills/docs/SKILL.md +141 -22
- package/dist/marketplace/external_plugins/sequant/skills/exec/SKILL.md +83 -78
- package/dist/marketplace/external_plugins/sequant/skills/fullsolve/SKILL.md +377 -137
- package/dist/marketplace/external_plugins/sequant/skills/loop/SKILL.md +28 -0
- package/dist/marketplace/external_plugins/sequant/skills/merger/SKILL.md +621 -0
- package/dist/marketplace/external_plugins/sequant/skills/qa/SKILL.md +741 -232
- package/dist/marketplace/external_plugins/sequant/skills/qa/scripts/quality-checks.sh +47 -1
- package/dist/marketplace/external_plugins/sequant/skills/setup/SKILL.md +12 -6
- package/dist/marketplace/external_plugins/sequant/skills/spec/SKILL.md +217 -964
- package/dist/marketplace/external_plugins/sequant/skills/spec/references/parallel-groups.md +7 -0
- package/dist/marketplace/external_plugins/sequant/skills/spec/references/quality-checklist.md +75 -0
- package/dist/marketplace/external_plugins/sequant/skills/spec/references/recommended-workflow.md +4 -2
- package/dist/marketplace/external_plugins/sequant/skills/test/SKILL.md +0 -27
- package/dist/marketplace/external_plugins/sequant/skills/testgen/SKILL.md +24 -44
- package/dist/src/commands/abort.d.ts +36 -0
- package/dist/src/commands/abort.js +138 -0
- package/dist/src/commands/prompt.d.ts +7 -0
- package/dist/src/commands/prompt.js +101 -7
- package/dist/src/commands/ready-tui-adapter.d.ts +59 -0
- package/dist/src/commands/ready-tui-adapter.js +130 -0
- package/dist/src/commands/ready.d.ts +49 -0
- package/dist/src/commands/ready.js +243 -0
- package/dist/src/commands/run-progress.d.ts +11 -1
- package/dist/src/commands/run-progress.js +20 -3
- package/dist/src/commands/run.js +12 -2
- package/dist/src/commands/status.js +4 -0
- package/dist/src/commands/watch.d.ts +2 -0
- package/dist/src/commands/watch.js +67 -3
- package/dist/src/lib/assess-collision-detect.js +1 -1
- package/dist/src/lib/cli-ui/run-renderer-types.d.ts +39 -0
- package/dist/src/lib/cli-ui/run-renderer.d.ts +34 -2
- package/dist/src/lib/cli-ui/run-renderer.js +250 -33
- package/dist/src/lib/cli-ui/scrollback-harness.d.ts +112 -0
- package/dist/src/lib/cli-ui/scrollback-harness.js +294 -0
- package/dist/src/lib/merge-check/types.js +1 -1
- package/dist/src/lib/relay/archive.js +6 -0
- package/dist/src/lib/relay/types.d.ts +2 -0
- package/dist/src/lib/relay/types.js +9 -0
- package/dist/src/lib/settings.d.ts +34 -0
- package/dist/src/lib/settings.js +23 -1
- package/dist/src/lib/workflow/batch-executor.js +34 -18
- package/dist/src/lib/workflow/drivers/agent-driver.d.ts +48 -1
- package/dist/src/lib/workflow/drivers/aider.d.ts +7 -1
- package/dist/src/lib/workflow/drivers/aider.js +9 -0
- package/dist/src/lib/workflow/drivers/claude-code.d.ts +17 -1
- package/dist/src/lib/workflow/drivers/claude-code.js +51 -2
- package/dist/src/lib/workflow/drivers/index.d.ts +1 -1
- package/dist/src/lib/workflow/event-emitter.d.ts +157 -0
- package/dist/src/lib/workflow/event-emitter.js +102 -0
- package/dist/src/lib/workflow/notice.d.ts +32 -0
- package/dist/src/lib/workflow/notice.js +38 -0
- package/dist/src/lib/workflow/phase-executor.d.ts +9 -21
- package/dist/src/lib/workflow/phase-executor.js +105 -117
- package/dist/src/lib/workflow/phase-mapper.d.ts +26 -13
- package/dist/src/lib/workflow/phase-mapper.js +55 -33
- package/dist/src/lib/workflow/phase-registry.d.ts +127 -0
- package/dist/src/lib/workflow/phase-registry.js +233 -0
- package/dist/src/lib/workflow/platforms/github.d.ts +6 -0
- package/dist/src/lib/workflow/platforms/github.js +17 -0
- package/dist/src/lib/workflow/ready-gate.d.ts +155 -0
- package/dist/src/lib/workflow/ready-gate.js +374 -0
- package/dist/src/lib/workflow/reconcile.js +6 -0
- package/dist/src/lib/workflow/run-log-schema.d.ts +5 -55
- package/dist/src/lib/workflow/run-orchestrator.d.ts +32 -2
- package/dist/src/lib/workflow/run-orchestrator.js +125 -11
- package/dist/src/lib/workflow/state-manager.d.ts +19 -1
- package/dist/src/lib/workflow/state-manager.js +27 -1
- package/dist/src/lib/workflow/state-schema.d.ts +23 -35
- package/dist/src/lib/workflow/state-schema.js +29 -3
- package/dist/src/lib/workflow/types.d.ts +74 -15
- package/dist/src/lib/workflow/types.js +18 -13
- package/dist/src/ui/tui/App.js +8 -2
- package/dist/src/ui/tui/IssueBox.js +3 -4
- package/dist/src/ui/tui/index.d.ts +13 -4
- package/dist/src/ui/tui/index.js +19 -5
- package/dist/src/ui/tui/row-cap.d.ts +51 -0
- package/dist/src/ui/tui/row-cap.js +76 -0
- package/dist/src/ui/tui/teardown.d.ts +20 -0
- package/dist/src/ui/tui/teardown.js +29 -0
- package/dist/src/ui/tui/theme.d.ts +3 -0
- package/dist/src/ui/tui/theme.js +3 -0
- package/package.json +23 -11
- package/templates/hooks/post-tool.sh +81 -0
- package/templates/skills/assess/SKILL.md +28 -28
- package/templates/skills/assess/references/predicted-collision-detection.md +1 -1
- package/templates/skills/qa/SKILL.md +5 -2
- package/templates/skills/setup/SKILL.md +6 -6
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"plugins": [
|
|
8
8
|
{
|
|
9
9
|
"name": "sequant",
|
|
10
|
-
"description": "
|
|
11
|
-
"version": "2.
|
|
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.5.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
|
-
"description": "
|
|
4
|
-
"version": "2.
|
|
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.5.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "sequant-io",
|
|
7
7
|
"email": "hello@sequant.io"
|
package/README.md
CHANGED
|
@@ -1,84 +1,96 @@
|
|
|
1
1
|
# Sequant
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Spec-driven AI coding agents — every acceptance criterion verified, stops at the human merge gate.**
|
|
4
4
|
|
|
5
|
-
Solve GitHub issues with structured phases and quality gates — from issue to merge-ready PR.
|
|
5
|
+
For teams that can't ship un-reviewed AI code. Solve GitHub issues with structured phases and quality gates — from issue to merge-ready PR.
|
|
6
6
|
|
|
7
7
|
**[sequant.io](https://sequant.io)** — docs, guides, and getting started.
|
|
8
8
|
|
|
9
9
|
[](https://www.npmjs.com/package/sequant)
|
|
10
|
+
[](https://www.npmjs.com/package/sequant)
|
|
11
|
+
[](https://github.com/sequant-io/sequant/stargazers)
|
|
12
|
+
[](https://github.com/sequant-io/sequant/actions/workflows/ci.yml)
|
|
10
13
|
[](https://opensource.org/licenses/MIT)
|
|
11
14
|
|
|
12
|
-
|
|
15
|
+
AI coding agents write code well, but leave you to run the workflow around it — planning, isolation, review, and merge safety. Sequant wraps an agent in a structured **spec → exec → qa** pipeline with isolated git worktrees and quality gates, taking a GitHub issue from triage to a merge-ready PR without babysitting each step.
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
- **`/assess` unification** — `/solve` is merged into `/assess` with a 6-action vocabulary (PROCEED, CLOSE, MERGE, REWRITE, CLARIFY, PARK). `/solve` still works as an alias.
|
|
16
|
-
- **Parallel execution** — multi-issue runs are concurrent by default with `--concurrency`.
|
|
17
|
-
- **Multi-agent** — `--agent aider` as an alternative backend, with a driver interface for future agents.
|
|
18
|
-
- **GitHub Actions** — label-triggered and comment-triggered CI workflows out of the box.
|
|
17
|
+
See the [CHANGELOG](CHANGELOG.md) for release notes, or the [migration guide](CHANGELOG.md#migration-from-v1x) if upgrading from v1.x.
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
### What's new in 2.5
|
|
20
|
+
|
|
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.
|
|
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.
|
|
21
24
|
|
|
22
25
|
## Quick Start
|
|
23
26
|
|
|
24
|
-
###
|
|
27
|
+
### Prerequisites
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
**An AI coding agent — one of:**
|
|
30
|
+
- [Claude Code](https://claude.ai/code) — default agent
|
|
31
|
+
- [Aider](https://aider.chat/) — alternative, via `--agent aider`
|
|
32
|
+
|
|
33
|
+
**Always required (both):**
|
|
34
|
+
- [GitHub CLI](https://cli.github.com/) — run `gh auth login`
|
|
35
|
+
- Git — for worktree-based isolation
|
|
36
|
+
|
|
37
|
+
**For the npm/CLI install path:** Node.js 22.12+
|
|
38
|
+
|
|
39
|
+
**Optional MCP (Model Context Protocol) servers — enhanced features:**
|
|
40
|
+
- `chrome-devtools` — enables `/test` for browser-based UI testing
|
|
41
|
+
- `sequential-thinking` — enhanced reasoning for complex decisions
|
|
42
|
+
- `context7` — library documentation lookup
|
|
43
|
+
|
|
44
|
+
> **Note:** Sequant is optimized for Node.js/TypeScript projects. The worktree workflow works with any git repository.
|
|
45
|
+
|
|
46
|
+
### Install
|
|
47
|
+
|
|
48
|
+
Pick the path that matches **where you run Sequant**:
|
|
49
|
+
|
|
50
|
+
**Inside Claude Code (plugin)** — skills, hooks, and MCP tools, no npm required:
|
|
27
51
|
```
|
|
28
52
|
/plugin install sequant@sequant-io/sequant
|
|
29
53
|
/sequant:setup
|
|
30
54
|
```
|
|
31
55
|
|
|
32
|
-
|
|
56
|
+
**Headless / CI (npm package)** — drive runs from the terminal or a CI job:
|
|
57
|
+
```bash
|
|
58
|
+
npm install sequant # or: pnpm add / yarn add / bun add sequant
|
|
59
|
+
npx sequant init # install skills into your project
|
|
60
|
+
npx sequant doctor # verify setup
|
|
61
|
+
```
|
|
33
62
|
|
|
34
|
-
###
|
|
63
|
+
### Your first run
|
|
35
64
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
yarn add sequant # yarn
|
|
40
|
-
bun add sequant # bun
|
|
65
|
+
Inside Claude Code, solve an issue end-to-end:
|
|
66
|
+
```
|
|
67
|
+
/fullsolve 123
|
|
41
68
|
```
|
|
42
69
|
|
|
43
|
-
|
|
70
|
+
Or headless from the terminal (`-Q` runs the quality loop):
|
|
44
71
|
```bash
|
|
45
|
-
npx sequant
|
|
46
|
-
npx sequant doctor # Verify setup
|
|
72
|
+
npx sequant run 123 -Q
|
|
47
73
|
```
|
|
48
74
|
|
|
49
|
-
|
|
75
|
+
Either way, Sequant creates an isolated worktree, posts a plan comment to the issue, and opens a merge-ready PR.
|
|
50
76
|
|
|
51
|
-
|
|
77
|
+
### What a run looks like
|
|
52
78
|
|
|
53
|
-
|
|
54
|
-
/fullsolve 123 # Solve issue #123 end-to-end
|
|
55
|
-
```
|
|
79
|
+
A real `/fullsolve 683` (the run that built `sequant ready` itself):
|
|
56
80
|
|
|
57
|
-
|
|
81
|
+
```text
|
|
82
|
+
SEQUANT WORKFLOW · #683
|
|
83
|
+
spec ✔ 9 ACs extracted · plan posted to the issue
|
|
84
|
+
exec ✔ 29 tests + docs + lint fix · committed to the feature branch
|
|
85
|
+
qa ✔ full build + suite · 8/9 ACs MET · 1 manual AC marked PENDING (not faked)
|
|
86
|
+
pr ✔ opened #686 · 7/7 checks green · MERGEABLE
|
|
58
87
|
|
|
88
|
+
→ stops at the human merge gate · never auto-merges · run `merge` to land it
|
|
59
89
|
```
|
|
60
|
-
/spec 123 # Plan implementation
|
|
61
|
-
/exec 123 # Build in isolated worktree
|
|
62
|
-
/qa 123 # Review before merge
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Prerequisites
|
|
66
|
-
|
|
67
|
-
**Required (one of):**
|
|
68
|
-
- [Claude Code](https://claude.ai/code) — default agent
|
|
69
|
-
- [Aider](https://aider.chat/) — alternative via `--agent aider`
|
|
70
|
-
- [GitHub CLI](https://cli.github.com/) — run `gh auth login`
|
|
71
|
-
- Git (for worktree-based isolation)
|
|
72
90
|
|
|
73
|
-
|
|
74
|
-
- Node.js 20+
|
|
91
|
+
QA findings post back to the issue as comments, with each acceptance criterion re-checked independently.
|
|
75
92
|
|
|
76
|
-
|
|
77
|
-
- `chrome-devtools` — enables `/test` for browser-based UI testing
|
|
78
|
-
- `sequential-thinking` — enhanced reasoning for complex decisions
|
|
79
|
-
- `context7` — library documentation lookup
|
|
80
|
-
|
|
81
|
-
> **Note:** Sequant is optimized for Node.js/TypeScript projects. The worktree workflow works with any git repository.
|
|
93
|
+
> 📹 A recorded demo GIF of the live run grid is coming — tracked in [#695](https://github.com/sequant-io/sequant/issues/695).
|
|
82
94
|
|
|
83
95
|
---
|
|
84
96
|
|
|
@@ -132,159 +144,111 @@ When checks fail, `/loop` automatically fixes and re-runs (up to 3x).
|
|
|
132
144
|
|
|
133
145
|
---
|
|
134
146
|
|
|
135
|
-
##
|
|
147
|
+
## Using Sequant
|
|
136
148
|
|
|
137
|
-
###
|
|
149
|
+
### Solve one issue (the 80% path)
|
|
138
150
|
|
|
139
|
-
|
|
151
|
+
The most common invocation — no flags. Auto-creates a worktree, posts a plan comment to the issue, and opens a PR.
|
|
140
152
|
|
|
153
|
+
In Claude Code:
|
|
141
154
|
```
|
|
142
|
-
/fullsolve 123
|
|
143
|
-
/spec 123 → /exec → /qa # Step by step
|
|
155
|
+
/fullsolve 123
|
|
144
156
|
```
|
|
145
157
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
Run without Claude Code UI:
|
|
149
|
-
|
|
158
|
+
Headless (`-Q` runs the quality loop):
|
|
150
159
|
```bash
|
|
151
|
-
npx sequant run 123
|
|
152
|
-
npx sequant run 1 2 3 # Batch (parallel)
|
|
153
|
-
npx sequant run 123 --quality-loop
|
|
154
|
-
npx sequant run 123 --base feature/dashboard # Custom base branch
|
|
155
|
-
npx sequant merge --check # Verify batch before merging
|
|
160
|
+
npx sequant run 123 -Q
|
|
156
161
|
```
|
|
157
162
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
## Commands
|
|
163
|
+
> `sequant run --help` is the authoritative flag list. There is **no** `--skip-spec` — to skip the plan phase, use `--phases exec,qa`.
|
|
161
164
|
|
|
162
|
-
###
|
|
165
|
+
### Batch: triage, then run
|
|
163
166
|
|
|
164
|
-
|
|
165
|
-
|---------|---------|
|
|
166
|
-
| `/spec` | Plan implementation, draft acceptance criteria |
|
|
167
|
-
| `/exec` | Implement in isolated git worktree |
|
|
168
|
-
| `/test` | Browser-based UI testing (optional) |
|
|
169
|
-
| `/qa` | Code review and quality gate |
|
|
167
|
+
For several issues at once, the ritual is `/assess` → paste the commands it emits:
|
|
170
168
|
|
|
171
|
-
|
|
169
|
+
```
|
|
170
|
+
/assess 101 102 103
|
|
171
|
+
```
|
|
172
172
|
|
|
173
|
-
|
|
174
|
-
|---------|---------|
|
|
175
|
-
| `/fullsolve` | Complete pipeline in one command |
|
|
176
|
-
| `/assess` | Triage issue, recommend workflow (6-action vocabulary) |
|
|
177
|
-
| `/loop` | Fix iteration when checks fail |
|
|
173
|
+
`/assess` returns a dashboard (PROCEED / PARK / CLOSE per issue), dependency ordering, and ready-to-paste commands like `npx sequant run 101 -Q`. The quality loop (`-Q`) is part of every command it generates.
|
|
178
174
|
|
|
179
|
-
###
|
|
175
|
+
### From Claude Code, via the MCP server
|
|
180
176
|
|
|
181
|
-
|
|
182
|
-
|---------|---------|
|
|
183
|
-
| `/merger` | Multi-issue merge coordination |
|
|
184
|
-
| `/testgen` | Generate test stubs from spec |
|
|
185
|
-
| `/verify` | CLI/script execution verification |
|
|
186
|
-
| `/setup` | Initialize Sequant in a project |
|
|
177
|
+
With the plugin installed, drive runs through the MCP server from inside Claude Code:
|
|
187
178
|
|
|
188
|
-
|
|
179
|
+
```
|
|
180
|
+
use sequant plugin to fullsolve 123
|
|
181
|
+
```
|
|
189
182
|
|
|
190
|
-
|
|
191
|
-
|---------|---------|
|
|
192
|
-
| `/docs` | Generate feature documentation |
|
|
193
|
-
| `/clean` | Repository cleanup |
|
|
194
|
-
| `/improve` | Codebase analysis and improvement discovery |
|
|
195
|
-
| `/security-review` | Deep security analysis |
|
|
196
|
-
| `/reflect` | Workflow improvement analysis |
|
|
183
|
+
You get back a structured phase-timing table and verdict. The same tools — `sequant_run`, `sequant_status`, `sequant_logs` — are available to any MCP client; `npx sequant serve` exposes them headlessly.
|
|
197
184
|
|
|
198
|
-
|
|
185
|
+
### QA on the issue
|
|
199
186
|
|
|
200
|
-
|
|
187
|
+
Re-verify a resolved issue or PR. Findings land as **issue comments**, with each acceptance criterion independently re-checked:
|
|
201
188
|
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
npx sequant doctor # Check installation
|
|
206
|
-
npx sequant status # Show version and config
|
|
207
|
-
npx sequant run <issues...> # Execute workflow
|
|
208
|
-
npx sequant merge <issues...> # Batch integration QA before merging
|
|
209
|
-
npx sequant state <cmd> # Manage workflow state (init/rebuild/clean)
|
|
210
|
-
npx sequant locks <cmd> # Inspect/clear per-issue concurrency locks
|
|
211
|
-
npx sequant stats # View local workflow analytics
|
|
212
|
-
npx sequant dashboard # Launch real-time workflow dashboard
|
|
189
|
+
```
|
|
190
|
+
123 any gaps? # re-QA issue #123
|
|
191
|
+
/qa pr488 # re-QA a PR
|
|
213
192
|
```
|
|
214
193
|
|
|
215
|
-
|
|
194
|
+
### Merge
|
|
216
195
|
|
|
217
|
-
|
|
196
|
+
```
|
|
197
|
+
merge # squash-merge + sync main + worktree cleanup + post-merge build/test
|
|
198
|
+
```
|
|
218
199
|
|
|
219
200
|
---
|
|
220
201
|
|
|
221
|
-
##
|
|
202
|
+
## Command Reference
|
|
222
203
|
|
|
223
|
-
|
|
224
|
-
same time. When `sequant run` starts, each issue claims a per-issue lock at
|
|
225
|
-
`.sequant/locks/<issue>.lock` containing the holder's PID, hostname, start
|
|
226
|
-
time, and command. A second session attempting the same issue is skipped
|
|
227
|
-
with a clear error and the rest of the batch continues.
|
|
204
|
+
Most work goes through a handful of top-level commands. The rest are either pipeline internals (run for you) or occasional tools.
|
|
228
205
|
|
|
229
|
-
|
|
206
|
+
### Everyday
|
|
230
207
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
208
|
+
| Command | What it does |
|
|
209
|
+
|---------|--------------|
|
|
210
|
+
| `/fullsolve <issue>` | Complete spec → exec → qa pipeline; opens a PR. The 80% path. |
|
|
211
|
+
| `/assess <issues…>` | Triage one or more issues; emits a dashboard + ready-to-paste `run` commands (6-action vocabulary). |
|
|
212
|
+
| `npx sequant run <issues…>` | Headless equivalent of `/fullsolve`; batches run in parallel. Add `-Q` for the quality loop. |
|
|
213
|
+
| `/qa <issue>` | Code review + quality gate; posts findings as issue comments. |
|
|
214
|
+
| `npx sequant merge <issues…>` | Batch integration QA before merging. |
|
|
235
215
|
|
|
236
|
-
|
|
237
|
-
new lock claiming the issue. Add `--signal-other` to also SIGTERM the prior
|
|
238
|
-
PID (same host, alive only). Plain `--force` does not signal — use it when
|
|
239
|
-
you already know the other session is dead.
|
|
216
|
+
### Pipeline internals
|
|
240
217
|
|
|
241
|
-
|
|
218
|
+
`/spec`, `/exec`, `/loop`, `/testgen`, `/test` are the phases that `/fullsolve` and `sequant run` orchestrate for you. You can invoke them directly, but rarely need to.
|
|
242
219
|
|
|
243
|
-
|
|
244
|
-
npx sequant locks list # Show every active lock
|
|
245
|
-
npx sequant locks clear 123 # Clear lock for #123 (refuses fresh)
|
|
246
|
-
npx sequant locks clear 123 --force # Clear unconditionally
|
|
247
|
-
```
|
|
220
|
+
### Occasional / advanced
|
|
248
221
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
222
|
+
| Command | What it does |
|
|
223
|
+
|---------|--------------|
|
|
224
|
+
| `sequant ready <issue>` | Post-resolve full-weight A+ QA gate; drives to merge-readiness, then stops at the human merge gate (never merges). |
|
|
225
|
+
| `/merger` | Multi-issue merge coordination. |
|
|
226
|
+
| `/improve` | Codebase analysis and improvement discovery. |
|
|
227
|
+
| `/security-review` | Deep security analysis. |
|
|
228
|
+
| `/verify` | CLI/script execution verification. |
|
|
229
|
+
| `/docs` · `/clean` · `/reflect` | Feature docs, repo cleanup, workflow reflection. |
|
|
230
|
+
|
|
231
|
+
### CLI utilities
|
|
255
232
|
|
|
256
233
|
```bash
|
|
257
|
-
npx sequant
|
|
258
|
-
npx sequant
|
|
259
|
-
npx sequant
|
|
260
|
-
npx sequant
|
|
234
|
+
npx sequant init # initialize in project
|
|
235
|
+
npx sequant update # update skill templates
|
|
236
|
+
npx sequant doctor # check installation
|
|
237
|
+
npx sequant status # show version and config
|
|
238
|
+
npx sequant state <cmd> # manage workflow state (init/rebuild/clean)
|
|
239
|
+
npx sequant locks <cmd> # inspect/clear per-issue concurrency locks
|
|
240
|
+
npx sequant stats # local workflow analytics (cohort filter: --label / --since)
|
|
241
|
+
npx sequant dashboard # real-time workflow dashboard
|
|
242
|
+
npx sequant serve # expose workflow tools over MCP
|
|
261
243
|
```
|
|
262
244
|
|
|
263
|
-
|
|
264
|
-
`locks acquire` exits immediately, so its PID is dead before the lock is
|
|
265
|
-
released. With the flag set, stale detection falls back to age-only on the
|
|
266
|
-
holder's own host. The default skill-lock TTL is **6h** (separate from the
|
|
267
|
-
2h cross-host TTL) — long enough to cover virtually every `/fullsolve` run
|
|
268
|
-
including multi-iteration QA loops. Override per-process via
|
|
269
|
-
`SEQUANT_SKILL_LOCK_TTL_MS=<milliseconds>`.
|
|
270
|
-
|
|
271
|
-
A skill that crashes mid-run leaves at most a 6h orphan; clear it manually
|
|
272
|
-
with `sequant locks clear <issue>` to recover sooner. The skill's explicit
|
|
273
|
-
release calls on every halt branch (see `.claude/skills/fullsolve/SKILL.md`
|
|
274
|
-
Phase 0.3 release contract) mean this corner case should be rare in practice.
|
|
245
|
+
See [Run Command Options](docs/reference/run-command.md), [Merge Command](docs/reference/merge-command.md), [State Command](docs/reference/state-command.md), and [Analytics](docs/reference/analytics.md) for details.
|
|
275
246
|
|
|
276
|
-
|
|
277
|
-
locked but do not block.
|
|
247
|
+
---
|
|
278
248
|
|
|
279
|
-
|
|
280
|
-
(in-process or remote MCP-driven runs), all lock operations are no-ops —
|
|
281
|
-
the orchestrator caller is responsible for any coordination.
|
|
249
|
+
## Concurrency
|
|
282
250
|
|
|
283
|
-
|
|
284
|
-
local filesystems. NFS and other network filesystems may not honor those
|
|
285
|
-
semantics; users on networked repos may see false positives. The
|
|
286
|
-
`SEQUANT_LOCKS_DIR` env var overrides the lock directory (used in tests
|
|
287
|
-
and unusual layouts).
|
|
251
|
+
Multi-issue runs are parallel by default, and a per-issue lock (`.sequant/locks/<issue>.lock`) stops two sessions from clobbering the same issue — see [Concurrency & Per-Issue Locks](docs/reference/concurrency.md) for stale recovery, takeover (`--force`), and `sequant locks` subcommands.
|
|
288
252
|
|
|
289
253
|
---
|
|
290
254
|
|
|
@@ -325,6 +289,7 @@ See [Customization Guide](docs/guides/customization.md) for all options.
|
|
|
325
289
|
- [What Is Sequant](docs/concepts/what-is-sequant.md) — Elevator pitch, pipeline diagram, architecture
|
|
326
290
|
- [Workflow Concepts](docs/concepts/workflow-phases.md)
|
|
327
291
|
- [Run Command](docs/reference/run-command.md)
|
|
292
|
+
- [Concurrency & Per-Issue Locks](docs/reference/concurrency.md)
|
|
328
293
|
- [Git Workflows](docs/guides/git-workflows.md)
|
|
329
294
|
- [Customization](docs/guides/customization.md)
|
|
330
295
|
- [Troubleshooting](docs/troubleshooting.md)
|
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 } from "commander";
|
|
7
|
+
import { Command, InvalidArgumentError } from "commander";
|
|
8
8
|
import chalk from "chalk";
|
|
9
9
|
import { fileURLToPath } from "url";
|
|
10
10
|
import { dirname, resolve } from "path";
|
|
@@ -46,11 +46,34 @@ import { dashboardCommand } from "../src/commands/dashboard.js";
|
|
|
46
46
|
import { stateInitCommand, stateRebuildCommand, stateCleanCommand, } from "../src/commands/state.js";
|
|
47
47
|
import { syncCommand, areSkillsOutdated } from "../src/commands/sync.js";
|
|
48
48
|
import { mergeCommand } from "../src/commands/merge.js";
|
|
49
|
+
import { readyCommand, } from "../src/commands/ready.js";
|
|
49
50
|
import { conventionsCommand } from "../src/commands/conventions.js";
|
|
50
51
|
import { locksListCommand, locksClearCommand, locksAcquireCommand, locksReleaseCommand, locksCheckCommand, locksCheckBatchCommand, } from "../src/commands/locks.js";
|
|
51
52
|
import { promptCommand } from "../src/commands/prompt.js";
|
|
52
53
|
import { watchCommand } from "../src/commands/watch.js";
|
|
54
|
+
import { abortCommand } from "../src/commands/abort.js";
|
|
53
55
|
import { getManifest } from "../src/lib/manifest.js";
|
|
56
|
+
import { phaseRegistry } from "../src/lib/workflow/phase-registry.js";
|
|
57
|
+
/**
|
|
58
|
+
* Validate `--phases` argument against the phase registry.
|
|
59
|
+
*
|
|
60
|
+
* Splits a comma-separated phase list, checks each name against
|
|
61
|
+
* `phaseRegistry`, and exits with a clear error message if any phase
|
|
62
|
+
* is unknown. Returns the original string unchanged so downstream
|
|
63
|
+
* `RunOptions.phases` parsing in `config-resolver.ts` is undisturbed.
|
|
64
|
+
*/
|
|
65
|
+
function validatePhasesFlag(value) {
|
|
66
|
+
const names = value
|
|
67
|
+
.split(",")
|
|
68
|
+
.map((p) => p.trim())
|
|
69
|
+
.filter((p) => p.length > 0);
|
|
70
|
+
const unknown = names.filter((n) => !phaseRegistry.has(n));
|
|
71
|
+
if (unknown.length > 0) {
|
|
72
|
+
const available = phaseRegistry.names().join(", ");
|
|
73
|
+
throw new InvalidArgumentError(`Unknown phase '${unknown[0]}'. Available: ${available}`);
|
|
74
|
+
}
|
|
75
|
+
return value;
|
|
76
|
+
}
|
|
54
77
|
const program = new Command();
|
|
55
78
|
// Handle --no-color before parsing
|
|
56
79
|
if (process.argv.includes("--no-color")) {
|
|
@@ -141,7 +164,7 @@ program
|
|
|
141
164
|
.command("run")
|
|
142
165
|
.description("Execute workflow for GitHub issues using Claude Agent SDK")
|
|
143
166
|
.argument("[issues...]", "Issue numbers to process")
|
|
144
|
-
.option("--phases <list>", "Phases to run (default: spec,exec,qa)")
|
|
167
|
+
.option("--phases <list>", "Phases to run (default: spec,exec,qa)", validatePhasesFlag)
|
|
145
168
|
.option("--sequential", "Stop on first issue failure (default: continue)")
|
|
146
169
|
.option("-d, --dry-run", "Preview without execution")
|
|
147
170
|
.option("-v, --verbose", "Verbose output with streaming")
|
|
@@ -149,14 +172,14 @@ program
|
|
|
149
172
|
.option("--log-json", "Enable structured JSON logging (default: true)")
|
|
150
173
|
.option("--no-log", "Disable JSON logging for this run")
|
|
151
174
|
.option("--log-path <path>", "Custom log directory path")
|
|
152
|
-
.option("-
|
|
175
|
+
.option("-Q, --quality-loop", "Enable quality loop with auto-retry")
|
|
153
176
|
.option("--max-iterations <n>", "Max iterations for quality loop (default: 3)", parseInt)
|
|
154
177
|
.option("--batch <issues>", 'Group of issues to run together (e.g., --batch "1 2" --batch "3")', (value, prev) => prev.concat([value]), [])
|
|
155
178
|
.option("--smart-tests", "Enable smart test detection (default)")
|
|
156
179
|
.option("--no-smart-tests", "Disable smart test detection")
|
|
157
180
|
.option("--testgen", "Run testgen phase after spec")
|
|
158
181
|
.option("--security-review", "Run security-review phase after spec")
|
|
159
|
-
.option("--quiet", "Suppress version warnings and non-essential output")
|
|
182
|
+
.option("-q, --quiet", "Suppress version warnings and non-essential output")
|
|
160
183
|
.option("--chain", "Chain issues: each branches from previous (implies --sequential)")
|
|
161
184
|
.option("--stacked", "Stack PRs: middle PRs target predecessor branch instead of main; first/last target main (implies --chain)")
|
|
162
185
|
.option("--qa-gate", "Wait for QA pass before starting next issue in chain (requires --chain)")
|
|
@@ -180,12 +203,14 @@ program
|
|
|
180
203
|
.description("Send a message into a running headless sequant session (#383)")
|
|
181
204
|
.argument("[args...]", '[<issue>] "<message>"')
|
|
182
205
|
.option("--type <type>", "Message type: query (default), directive, abort", "query")
|
|
206
|
+
.option("--wait <seconds>", "Block until a reply arrives or the timeout elapses (#645, Gap 4)", parseInt)
|
|
183
207
|
.option("--json", "Output as JSON")
|
|
184
208
|
.action((args, options) => {
|
|
185
209
|
return promptCommand({
|
|
186
210
|
args,
|
|
187
211
|
options: {
|
|
188
212
|
type: options.type,
|
|
213
|
+
waitSeconds: typeof options.wait === "number" ? options.wait : undefined,
|
|
189
214
|
json: Boolean(options.json),
|
|
190
215
|
},
|
|
191
216
|
});
|
|
@@ -201,6 +226,24 @@ program
|
|
|
201
226
|
options: { json: Boolean(options.json) },
|
|
202
227
|
});
|
|
203
228
|
});
|
|
229
|
+
program
|
|
230
|
+
.command("abort")
|
|
231
|
+
.description("Out-of-band abort: signal a running sequant session directly (#645)")
|
|
232
|
+
.argument("[issue]", "Issue number (auto-resolved when a single run is active)")
|
|
233
|
+
.option("--force", "Skip the SIGINT grace period; SIGTERM immediately")
|
|
234
|
+
.option("--grace <seconds>", "Seconds to wait after SIGINT before escalating (default: 10)", parseInt)
|
|
235
|
+
.option("--json", "Output as JSON")
|
|
236
|
+
.action((issueArg, options) => {
|
|
237
|
+
const args = issueArg === undefined ? [] : [issueArg];
|
|
238
|
+
return abortCommand({
|
|
239
|
+
args,
|
|
240
|
+
options: {
|
|
241
|
+
force: Boolean(options.force),
|
|
242
|
+
graceSeconds: typeof options.grace === "number" ? options.grace : undefined,
|
|
243
|
+
json: Boolean(options.json),
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
});
|
|
204
247
|
program
|
|
205
248
|
.command("merge")
|
|
206
249
|
.description("Batch-level integration QA — verify feature branches before merging")
|
|
@@ -213,6 +256,18 @@ program
|
|
|
213
256
|
.option("--json", "Output as JSON")
|
|
214
257
|
.option("-v, --verbose", "Enable verbose output")
|
|
215
258
|
.action(mergeCommand);
|
|
259
|
+
program
|
|
260
|
+
.command("ready")
|
|
261
|
+
.description("Post-resolve A+ QA gate — drive an issue to merge-readiness, then stop at the human merge gate (never merges)")
|
|
262
|
+
.argument("<issue>", "Issue number to drive to readiness")
|
|
263
|
+
.option("--policy <policy>", "Gate policy: 'ac' (default, stop at ACs met) or 'a-plus' (loop to READY_FOR_MERGE)")
|
|
264
|
+
.option("--max-iterations <n>", "Max QA passes before halting for human review (default: settings.run.maxIterations)", parseInt)
|
|
265
|
+
.option("--budget <tokens>", "Token budget; halt cleanly with a 'needs human' message on exhaustion", parseInt)
|
|
266
|
+
.option("--timeout <seconds>", "Timeout per phase in seconds", parseInt)
|
|
267
|
+
.option("--no-mcp", "Disable MCP server injection in headless mode")
|
|
268
|
+
.option("--json", "Output as JSON")
|
|
269
|
+
.option("-v, --verbose", "Enable verbose output")
|
|
270
|
+
.action((issue, options) => readyCommand(issue, options));
|
|
216
271
|
program
|
|
217
272
|
.command("conventions")
|
|
218
273
|
.description("View and manage codebase conventions")
|
package/dist/dashboard/server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sequant",
|
|
3
|
-
"description": "
|
|
4
|
-
"version": "2.0
|
|
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.5.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "sequant-io",
|
|
7
7
|
"email": "hello@sequant.io"
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Sequant
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
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
4
|
|
|
5
5
|
## Prerequisites
|
|
6
6
|
|
|
7
7
|
- **Git** with a GitHub remote
|
|
8
8
|
- **GitHub CLI** (`gh`) authenticated (`gh auth status`)
|
|
9
|
-
- **Node.js
|
|
9
|
+
- **Node.js 22.12+** (for MCP server via `npx`)
|
|
10
10
|
|
|
11
11
|
## Installation
|
|
12
12
|
|
|
@@ -47,7 +47,7 @@ sequant init
|
|
|
47
47
|
| `/improve` | Codebase analysis and improvement |
|
|
48
48
|
| `/clean` | Repository cleanup |
|
|
49
49
|
| `/security-review` | Deep security analysis |
|
|
50
|
-
| `/
|
|
50
|
+
| `/solve` | Generate the recommended workflow for one or more issues |
|
|
51
51
|
| `/merger` | Multi-issue integration and merge |
|
|
52
52
|
| `/setup` | Project initialization for plugin users |
|
|
53
53
|
|
|
@@ -74,10 +74,13 @@ sequant init
|
|
|
74
74
|
## Quick Start
|
|
75
75
|
|
|
76
76
|
```
|
|
77
|
+
sequant ready # Boxed pre-flight: which issues are ready to run?
|
|
77
78
|
/assess 123 # Analyze issue, get recommended workflow
|
|
78
79
|
/fullsolve 123 # End-to-end: spec → exec → qa → PR
|
|
79
80
|
```
|
|
80
81
|
|
|
82
|
+
See the [`sequant ready` command reference](https://github.com/sequant-io/sequant/blob/main/docs/reference/ready-command.md) for the full pre-flight readiness check.
|
|
83
|
+
|
|
81
84
|
## Documentation
|
|
82
85
|
|
|
83
86
|
- [Getting Started](https://github.com/sequant-io/sequant/tree/main/docs/getting-started)
|