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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 admarble
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Sequant
|
|
2
|
+
|
|
3
|
+
**Structured AI workflow for GitHub issues.**
|
|
4
|
+
|
|
5
|
+
Turn GitHub issues into working code through sequential AI-assisted phases with quality gates.
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/sequant)
|
|
8
|
+
[](https://opensource.org/licenses/MIT)
|
|
9
|
+
|
|
10
|
+
## Why Sequant?
|
|
11
|
+
|
|
12
|
+
When using AI coding assistants, work can become scattered and quality inconsistent. Sequant solves this by:
|
|
13
|
+
|
|
14
|
+
- **Consistent quality** ā Every issue goes through the same review gates
|
|
15
|
+
- **Traceable decisions** ā Plans and progress documented in GitHub issues
|
|
16
|
+
- **Isolated work** ā Git worktrees prevent half-finished features from polluting main
|
|
17
|
+
- **AI-assisted** ā Claude Code handles implementation while you review and approve
|
|
18
|
+
|
|
19
|
+
## How It Works
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
āāāāāāāāāāā āāāāāāāāāāā āāāāāāāāāāā āāāāāāāāāāā
|
|
23
|
+
ā /spec āāāāā¶ā /exec āāāāā¶ā /test āāāāā¶ā /qa āāāāā¶ Merge
|
|
24
|
+
āāāāāāāāāāā āāāāāāāāāāā āāāāāāāāāāā āāāāāāāāāāā
|
|
25
|
+
ā ā ā ā
|
|
26
|
+
ā¼ ā¼ ā¼ ā¼
|
|
27
|
+
Plan Build Verify Review
|
|
28
|
+
(drafts AC) (worktree) (optional) (vs criteria)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
1. **`/spec`** ā Reads issue, drafts implementation plan, posts to GitHub for your approval
|
|
32
|
+
2. **`/exec`** ā Creates isolated git worktree, implements changes, runs tests
|
|
33
|
+
3. **`/test`** ā Optional browser/CLI verification
|
|
34
|
+
4. **`/qa`** ā Reviews code against acceptance criteria, suggests fixes
|
|
35
|
+
|
|
36
|
+
## Quick Start
|
|
37
|
+
|
|
38
|
+
### Prerequisites
|
|
39
|
+
|
|
40
|
+
| Requirement | Check Command |
|
|
41
|
+
|------------|---------------|
|
|
42
|
+
| [Claude Code](https://claude.ai/code) | `claude --version` |
|
|
43
|
+
| [GitHub CLI](https://cli.github.com/) | `gh auth status` |
|
|
44
|
+
| Node.js 18+ | `node --version` |
|
|
45
|
+
| Git | `git --version` |
|
|
46
|
+
|
|
47
|
+
### Setup
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Install and initialize in your project
|
|
51
|
+
npx sequant init
|
|
52
|
+
|
|
53
|
+
# Verify installation
|
|
54
|
+
npx sequant doctor
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### First Workflow
|
|
58
|
+
|
|
59
|
+
Open Claude Code in your project, then:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
/spec 123 # Plan implementation for GitHub issue #123
|
|
63
|
+
/exec 123 # Implement the feature in a worktree
|
|
64
|
+
/qa 123 # Quality review before merge
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
> Replace `123` with an actual GitHub issue number from your repository.
|
|
68
|
+
|
|
69
|
+
## Installation
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install -g sequant
|
|
73
|
+
# or use npx
|
|
74
|
+
npx sequant init
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Features
|
|
78
|
+
|
|
79
|
+
- **š¢ Quantized** - Each issue is an atomic unit of work
|
|
80
|
+
- **š Sequential** - Phases execute in order with gates
|
|
81
|
+
- **š¦ Gated** - Quality checks before progression
|
|
82
|
+
- **š³ Isolated** - Git worktrees prevent cross-contamination
|
|
83
|
+
- **š¦ Stack Adapters** - Pre-configured for Next.js, Rust, Python, Go
|
|
84
|
+
- **š Update-Safe** - Customize without losing updates
|
|
85
|
+
|
|
86
|
+
## Commands
|
|
87
|
+
|
|
88
|
+
### CLI Commands
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
sequant init # Initialize in your project
|
|
92
|
+
sequant update # Update templates from package
|
|
93
|
+
sequant doctor # Check installation health
|
|
94
|
+
sequant status # Show version and config
|
|
95
|
+
sequant run <issues...> # Execute workflow for issues
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
#### Run Command Options
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
sequant run 123 # Single issue
|
|
102
|
+
sequant run 1 2 3 # Multiple issues in parallel
|
|
103
|
+
sequant run 1 2 3 --sequential # Run in order
|
|
104
|
+
sequant run 123 --phases spec,qa # Custom phases
|
|
105
|
+
sequant run 123 --dry-run # Preview without execution
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Workflow Commands (in Claude Code)
|
|
109
|
+
|
|
110
|
+
| Command | Phase | Purpose |
|
|
111
|
+
|---------|-------|---------|
|
|
112
|
+
| `/assess` | 0 | Issue triage and status assessment |
|
|
113
|
+
| `/spec` | 1 | Plan implementation vs acceptance criteria |
|
|
114
|
+
| `/exec` | 2 | Implement in feature worktree |
|
|
115
|
+
| `/test` | 2.5 | Browser-based UI testing (optional) |
|
|
116
|
+
| `/verify` | 2.5 | CLI/script verification (optional) |
|
|
117
|
+
| `/qa` | 3 | Code review and quality gate |
|
|
118
|
+
| `/docs` | 4 | Generate feature documentation |
|
|
119
|
+
| `/loop` | * | Fix iteration when tests fail |
|
|
120
|
+
| `/fullsolve` | 1-4 | Complete pipeline in one command |
|
|
121
|
+
|
|
122
|
+
## Platform Support
|
|
123
|
+
|
|
124
|
+
| Platform | Status | Notes |
|
|
125
|
+
|----------|--------|-------|
|
|
126
|
+
| macOS | ā
Tested | Full support with Claude Code, Cursor, VS Code |
|
|
127
|
+
| Linux | ā
Supported | Bash required for shell scripts |
|
|
128
|
+
| Windows WSL | ā
Supported | Use WSL2 with bash |
|
|
129
|
+
| Windows Native | ā ļø Limited | CLI works, but shell scripts require WSL |
|
|
130
|
+
|
|
131
|
+
### Requirements
|
|
132
|
+
|
|
133
|
+
- **Node.js** 18.0.0 or higher
|
|
134
|
+
- **Git** for worktree support
|
|
135
|
+
- **GitHub CLI** (`gh`) for issue integration
|
|
136
|
+
- **Bash** for shell scripts (included in macOS/Linux, use WSL on Windows)
|
|
137
|
+
|
|
138
|
+
### IDE Compatibility
|
|
139
|
+
|
|
140
|
+
| IDE | Status |
|
|
141
|
+
|-----|--------|
|
|
142
|
+
| Claude Code | ā
Full support |
|
|
143
|
+
| Cursor | ā
Supported |
|
|
144
|
+
| VS Code + Copilot | ā
Supported |
|
|
145
|
+
|
|
146
|
+
## Stack Support
|
|
147
|
+
|
|
148
|
+
Sequant auto-detects your project stack and configures appropriate commands:
|
|
149
|
+
|
|
150
|
+
| Stack | Detection | Test | Build | Lint |
|
|
151
|
+
|-------|-----------|------|-------|------|
|
|
152
|
+
| Next.js | `next.config.*` | `npm test` | `npm run build` | `npm run lint` |
|
|
153
|
+
| Rust | `Cargo.toml` | `cargo test` | `cargo build --release` | `cargo clippy` |
|
|
154
|
+
| Python | `pyproject.toml` | `pytest` | `python -m build` | `ruff check .` |
|
|
155
|
+
| Go | `go.mod` | `go test ./...` | `go build ./...` | `golangci-lint run` |
|
|
156
|
+
|
|
157
|
+
## Customization
|
|
158
|
+
|
|
159
|
+
### Local Overrides
|
|
160
|
+
|
|
161
|
+
Create files in `.claude/.local/` to override templates without losing updates:
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
.claude/
|
|
165
|
+
āāā skills/ # Package-provided (updated by sequant update)
|
|
166
|
+
āāā skills.local/ # Your overrides (never modified)
|
|
167
|
+
āāā hooks/ # Package-provided
|
|
168
|
+
āāā hooks.local/ # Your overrides
|
|
169
|
+
āāā memory/ # Your project context (never modified)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Constitution
|
|
173
|
+
|
|
174
|
+
Edit `.claude/memory/constitution.md` to define project-specific principles:
|
|
175
|
+
|
|
176
|
+
```markdown
|
|
177
|
+
# My Project Constitution
|
|
178
|
+
|
|
179
|
+
## Core Principles
|
|
180
|
+
1. Always use TypeScript strict mode
|
|
181
|
+
2. Test coverage must exceed 80%
|
|
182
|
+
3. All PRs require security review
|
|
183
|
+
|
|
184
|
+
## Naming Conventions
|
|
185
|
+
- Components: PascalCase
|
|
186
|
+
- Utilities: camelCase
|
|
187
|
+
- Constants: SCREAMING_SNAKE_CASE
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Directory Structure
|
|
191
|
+
|
|
192
|
+
After `sequant init`:
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
.claude/
|
|
196
|
+
āāā skills/ # Workflow commands
|
|
197
|
+
ā āāā spec/SKILL.md
|
|
198
|
+
ā āāā exec/SKILL.md
|
|
199
|
+
ā āāā qa/SKILL.md
|
|
200
|
+
ā āāā ...
|
|
201
|
+
āāā hooks/ # Pre/post tool hooks
|
|
202
|
+
ā āāā pre-tool.sh
|
|
203
|
+
ā āāā post-tool.sh
|
|
204
|
+
āāā memory/ # Project context
|
|
205
|
+
ā āāā constitution.md
|
|
206
|
+
āāā settings.json # Hooks configuration
|
|
207
|
+
|
|
208
|
+
.sequant-manifest.json # Version tracking
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## Documentation
|
|
212
|
+
|
|
213
|
+
- [Run Command](docs/run-command.md) ā Batch execution options
|
|
214
|
+
- [Customization Guide](docs/customization.md) ā Override templates safely
|
|
215
|
+
- [Troubleshooting](docs/troubleshooting.md) ā Common issues and solutions
|
|
216
|
+
- [Testing Guide](docs/testing.md) ā Cross-platform testing matrix
|
|
217
|
+
- Stack Guides: [Next.js](docs/stacks/nextjs.md) | [Rust](docs/stacks/rust.md) | [Python](docs/stacks/python.md) | [Go](docs/stacks/go.md)
|
|
218
|
+
|
|
219
|
+
## Philosophy
|
|
220
|
+
|
|
221
|
+
Sequant is built on these principles:
|
|
222
|
+
|
|
223
|
+
1. **Explicit over implicit** ā Every phase has clear inputs and outputs
|
|
224
|
+
2. **Quality gates** ā No phase completes without validation
|
|
225
|
+
3. **Isolation** ā Work happens in dedicated worktrees
|
|
226
|
+
4. **Traceability** ā All decisions recorded in GitHub issues
|
|
227
|
+
5. **Composability** ā Use phases individually or combine them
|
|
228
|
+
|
|
229
|
+
## Acknowledgments
|
|
230
|
+
|
|
231
|
+
Built on ideas from:
|
|
232
|
+
- [Agent Skills](https://agentskills.io) ā Open standard for cross-platform skills
|
|
233
|
+
- [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD) ā Update-safe directories
|
|
234
|
+
|
|
235
|
+
## License
|
|
236
|
+
|
|
237
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|
package/dist/bin/cli.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Sequant CLI - Quantize your development workflow
|
|
4
|
+
*
|
|
5
|
+
* Sequential AI phases with quality gates for any codebase.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from "commander";
|
|
8
|
+
import chalk from "chalk";
|
|
9
|
+
import { initCommand } from "../src/commands/init.js";
|
|
10
|
+
import { updateCommand } from "../src/commands/update.js";
|
|
11
|
+
import { doctorCommand } from "../src/commands/doctor.js";
|
|
12
|
+
import { statusCommand } from "../src/commands/status.js";
|
|
13
|
+
import { runCommand } from "../src/commands/run.js";
|
|
14
|
+
const program = new Command();
|
|
15
|
+
// Handle --no-color before parsing
|
|
16
|
+
if (process.argv.includes("--no-color")) {
|
|
17
|
+
process.env.FORCE_COLOR = "0";
|
|
18
|
+
}
|
|
19
|
+
program
|
|
20
|
+
.name("sequant")
|
|
21
|
+
.description("Quantize your development workflow - Sequential AI phases with quality gates")
|
|
22
|
+
.version("1.0.0")
|
|
23
|
+
.option("--no-color", "Disable colored output");
|
|
24
|
+
program
|
|
25
|
+
.command("init")
|
|
26
|
+
.description("Initialize Sequant in your project")
|
|
27
|
+
.option("-s, --stack <stack>", "Specify stack (nextjs, rust, python, go)")
|
|
28
|
+
.option("-y, --yes", "Skip confirmation prompts")
|
|
29
|
+
.option("-f, --force", "Overwrite existing configuration")
|
|
30
|
+
.action(initCommand);
|
|
31
|
+
program
|
|
32
|
+
.command("update")
|
|
33
|
+
.description("Update templates from the Sequant package")
|
|
34
|
+
.option("-d, --dry-run", "Show what would be updated without making changes")
|
|
35
|
+
.option("-f, --force", "Overwrite local modifications")
|
|
36
|
+
.action(updateCommand);
|
|
37
|
+
program
|
|
38
|
+
.command("doctor")
|
|
39
|
+
.description("Check your Sequant installation for issues")
|
|
40
|
+
.action(doctorCommand);
|
|
41
|
+
program
|
|
42
|
+
.command("status")
|
|
43
|
+
.description("Show Sequant version and configuration status")
|
|
44
|
+
.action(statusCommand);
|
|
45
|
+
program
|
|
46
|
+
.command("run")
|
|
47
|
+
.description("Execute workflow for GitHub issues")
|
|
48
|
+
.argument("<issues...>", "Issue numbers to process")
|
|
49
|
+
.option("--phases <list>", "Phases to run (default: spec,exec,qa)")
|
|
50
|
+
.option("--sequential", "Run issues sequentially")
|
|
51
|
+
.option("-d, --dry-run", "Preview without execution")
|
|
52
|
+
.option("-v, --verbose", "Verbose output")
|
|
53
|
+
.option("--timeout <seconds>", "Timeout per phase in seconds", parseInt)
|
|
54
|
+
.action(runCommand);
|
|
55
|
+
// Parse and execute
|
|
56
|
+
program.parse();
|
|
57
|
+
// Show help if no command provided
|
|
58
|
+
if (!process.argv.slice(2).length) {
|
|
59
|
+
console.log(chalk.green(`
|
|
60
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
61
|
+
ā ā
|
|
62
|
+
ā ${chalk.bold("Sequant")} - Quantize your development workflow ā
|
|
63
|
+
ā ā
|
|
64
|
+
ā Sequential AI phases with quality gates ā
|
|
65
|
+
ā ā
|
|
66
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
67
|
+
`));
|
|
68
|
+
program.help();
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,mCAAmC;AACnC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;AAChC,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CACV,8EAA8E,CAC/E;KACA,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;AAElD,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;KACzE,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;KAChD,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;KACzD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,eAAe,EAAE,mDAAmD,CAAC;KAC5E,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,oCAAoC,CAAC;KACjD,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACnD,MAAM,CAAC,iBAAiB,EAAE,uCAAuC,CAAC;KAClE,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC;KACjD,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;KACzC,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,EAAE,QAAQ,CAAC;KACvE,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,oBAAoB;AACpB,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC;;;QAGR,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;;;;;GAK1B,CAAC,CACD,CAAC;IACF,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,UAAU,aAAa;CAEtB;AASD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA0KzE"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sequant doctor - Check installation health
|
|
3
|
+
*/
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { fileExists, isExecutable } from "../lib/fs.js";
|
|
6
|
+
import { getManifest } from "../lib/manifest.js";
|
|
7
|
+
export async function doctorCommand(options) {
|
|
8
|
+
console.log(chalk.blue("\nš Running health checks...\n"));
|
|
9
|
+
const checks = [];
|
|
10
|
+
// Check 1: Manifest exists
|
|
11
|
+
const manifest = await getManifest();
|
|
12
|
+
if (manifest) {
|
|
13
|
+
checks.push({
|
|
14
|
+
name: "Manifest",
|
|
15
|
+
status: "pass",
|
|
16
|
+
message: `Found .sequant-manifest.json (v${manifest.version})`,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
checks.push({
|
|
21
|
+
name: "Manifest",
|
|
22
|
+
status: "fail",
|
|
23
|
+
message: "Missing .sequant-manifest.json - run `sequant init`",
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
// Check 2: Skills directory
|
|
27
|
+
const skillsExist = await fileExists(".claude/skills");
|
|
28
|
+
if (skillsExist) {
|
|
29
|
+
checks.push({
|
|
30
|
+
name: "Skills",
|
|
31
|
+
status: "pass",
|
|
32
|
+
message: "Skills directory exists",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
checks.push({
|
|
37
|
+
name: "Skills",
|
|
38
|
+
status: "fail",
|
|
39
|
+
message: "Missing .claude/skills/ directory",
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// Check 3: Core skills present
|
|
43
|
+
const coreSkills = ["spec", "exec", "qa"];
|
|
44
|
+
const missingSkills = [];
|
|
45
|
+
for (const skill of coreSkills) {
|
|
46
|
+
if (!(await fileExists(`.claude/skills/${skill}/SKILL.md`))) {
|
|
47
|
+
missingSkills.push(skill);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (missingSkills.length === 0) {
|
|
51
|
+
checks.push({
|
|
52
|
+
name: "Core Skills",
|
|
53
|
+
status: "pass",
|
|
54
|
+
message: "All core skills present (spec, exec, qa)",
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
checks.push({
|
|
59
|
+
name: "Core Skills",
|
|
60
|
+
status: "fail",
|
|
61
|
+
message: `Missing skills: ${missingSkills.join(", ")}`,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Check 4: Hooks directory
|
|
65
|
+
const hooksExist = await fileExists(".claude/hooks");
|
|
66
|
+
if (hooksExist) {
|
|
67
|
+
checks.push({
|
|
68
|
+
name: "Hooks",
|
|
69
|
+
status: "pass",
|
|
70
|
+
message: "Hooks directory exists",
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
checks.push({
|
|
75
|
+
name: "Hooks",
|
|
76
|
+
status: "warn",
|
|
77
|
+
message: "No hooks directory (optional but recommended)",
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// Check 5: Hook scripts executable
|
|
81
|
+
const preToolHook = ".claude/hooks/pre-tool.sh";
|
|
82
|
+
if (await fileExists(preToolHook)) {
|
|
83
|
+
if (await isExecutable(preToolHook)) {
|
|
84
|
+
checks.push({
|
|
85
|
+
name: "Hook Permissions",
|
|
86
|
+
status: "pass",
|
|
87
|
+
message: "Hook scripts are executable",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
checks.push({
|
|
92
|
+
name: "Hook Permissions",
|
|
93
|
+
status: "warn",
|
|
94
|
+
message: "Hook scripts not executable - run: chmod +x .claude/hooks/*.sh",
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Check 6: Settings.json
|
|
99
|
+
const settingsExist = await fileExists(".claude/settings.json");
|
|
100
|
+
if (settingsExist) {
|
|
101
|
+
checks.push({
|
|
102
|
+
name: "Settings",
|
|
103
|
+
status: "pass",
|
|
104
|
+
message: "Settings file exists",
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
checks.push({
|
|
109
|
+
name: "Settings",
|
|
110
|
+
status: "warn",
|
|
111
|
+
message: "No settings.json (hooks won't be triggered)",
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// Check 7: Git repo
|
|
115
|
+
const gitExists = await fileExists(".git");
|
|
116
|
+
if (gitExists) {
|
|
117
|
+
checks.push({
|
|
118
|
+
name: "Git Repository",
|
|
119
|
+
status: "pass",
|
|
120
|
+
message: "Git repository detected",
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
checks.push({
|
|
125
|
+
name: "Git Repository",
|
|
126
|
+
status: "warn",
|
|
127
|
+
message: "Not a git repository (worktree features won't work)",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// Display results
|
|
131
|
+
let passCount = 0;
|
|
132
|
+
let warnCount = 0;
|
|
133
|
+
let failCount = 0;
|
|
134
|
+
for (const check of checks) {
|
|
135
|
+
const icon = check.status === "pass"
|
|
136
|
+
? chalk.green("ā")
|
|
137
|
+
: check.status === "warn"
|
|
138
|
+
? chalk.yellow("ā ")
|
|
139
|
+
: chalk.red("ā");
|
|
140
|
+
const color = check.status === "pass"
|
|
141
|
+
? chalk.green
|
|
142
|
+
: check.status === "warn"
|
|
143
|
+
? chalk.yellow
|
|
144
|
+
: chalk.red;
|
|
145
|
+
console.log(`${icon} ${chalk.bold(check.name)}: ${color(check.message)}`);
|
|
146
|
+
if (check.status === "pass")
|
|
147
|
+
passCount++;
|
|
148
|
+
else if (check.status === "warn")
|
|
149
|
+
warnCount++;
|
|
150
|
+
else
|
|
151
|
+
failCount++;
|
|
152
|
+
}
|
|
153
|
+
// Summary
|
|
154
|
+
console.log(chalk.bold("\nSummary:"));
|
|
155
|
+
console.log(chalk.green(` ā Passed: ${passCount}`));
|
|
156
|
+
if (warnCount > 0)
|
|
157
|
+
console.log(chalk.yellow(` ā Warnings: ${warnCount}`));
|
|
158
|
+
if (failCount > 0)
|
|
159
|
+
console.log(chalk.red(` ā Failed: ${failCount}`));
|
|
160
|
+
if (failCount > 0) {
|
|
161
|
+
console.log(chalk.red("\nā Some checks failed. Run `sequant init` to fix."));
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
else if (warnCount > 0) {
|
|
165
|
+
console.log(chalk.yellow("\nā ļø Some warnings found but Sequant should work."));
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.log(chalk.green("\nā
All checks passed!"));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sequant init - Initialize Sequant in a project
|
|
3
|
+
*/
|
|
4
|
+
interface InitOptions {
|
|
5
|
+
stack?: string;
|
|
6
|
+
yes?: boolean;
|
|
7
|
+
force?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function initCommand(options: InitOptions): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiIrE"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sequant init - Initialize Sequant in a project
|
|
3
|
+
*/
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import inquirer from "inquirer";
|
|
6
|
+
import { detectStack } from "../lib/stacks.js";
|
|
7
|
+
import { copyTemplates } from "../lib/templates.js";
|
|
8
|
+
import { createManifest } from "../lib/manifest.js";
|
|
9
|
+
import { fileExists, ensureDir } from "../lib/fs.js";
|
|
10
|
+
export async function initCommand(options) {
|
|
11
|
+
console.log(chalk.green("\nš Initializing Sequant...\n"));
|
|
12
|
+
// Check if already initialized
|
|
13
|
+
const configExists = await fileExists(".claude/settings.json");
|
|
14
|
+
if (configExists && !options.force) {
|
|
15
|
+
console.log(chalk.yellow("ā ļø Sequant appears to be already initialized (.claude/settings.json exists)"));
|
|
16
|
+
console.log(chalk.gray(" Use --force to reinitialize\n"));
|
|
17
|
+
if (!options.yes) {
|
|
18
|
+
const { proceed } = await inquirer.prompt([
|
|
19
|
+
{
|
|
20
|
+
type: "confirm",
|
|
21
|
+
name: "proceed",
|
|
22
|
+
message: "Continue anyway?",
|
|
23
|
+
default: false,
|
|
24
|
+
},
|
|
25
|
+
]);
|
|
26
|
+
if (!proceed) {
|
|
27
|
+
console.log(chalk.gray("Aborted."));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Detect or prompt for stack
|
|
33
|
+
let stack = options.stack;
|
|
34
|
+
if (!stack) {
|
|
35
|
+
const detected = await detectStack();
|
|
36
|
+
if (detected && options.yes) {
|
|
37
|
+
stack = detected;
|
|
38
|
+
console.log(chalk.blue(`š¦ Detected stack: ${stack}`));
|
|
39
|
+
}
|
|
40
|
+
else if (detected) {
|
|
41
|
+
const { confirmedStack } = await inquirer.prompt([
|
|
42
|
+
{
|
|
43
|
+
type: "list",
|
|
44
|
+
name: "confirmedStack",
|
|
45
|
+
message: `Detected ${detected} project. Is this correct?`,
|
|
46
|
+
choices: [
|
|
47
|
+
{ name: `Yes, use ${detected}`, value: detected },
|
|
48
|
+
{ name: "No, let me choose", value: null },
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
]);
|
|
52
|
+
stack = confirmedStack;
|
|
53
|
+
}
|
|
54
|
+
if (!stack) {
|
|
55
|
+
const { selectedStack } = await inquirer.prompt([
|
|
56
|
+
{
|
|
57
|
+
type: "list",
|
|
58
|
+
name: "selectedStack",
|
|
59
|
+
message: "Select your project stack:",
|
|
60
|
+
choices: [
|
|
61
|
+
{ name: "Next.js / React", value: "nextjs" },
|
|
62
|
+
{ name: "Rust", value: "rust" },
|
|
63
|
+
{ name: "Python", value: "python" },
|
|
64
|
+
{ name: "Go", value: "go" },
|
|
65
|
+
{ name: "Generic (no stack-specific config)", value: "generic" },
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
]);
|
|
69
|
+
stack = selectedStack;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
console.log(chalk.blue(`\nš Stack: ${stack}`));
|
|
73
|
+
// Show what will be created
|
|
74
|
+
console.log(chalk.gray("\nWill create:"));
|
|
75
|
+
console.log(chalk.gray(" .claude/"));
|
|
76
|
+
console.log(chalk.gray(" āāā skills/ (14 workflow skills)"));
|
|
77
|
+
console.log(chalk.gray(" āāā hooks/ (pre/post tool hooks)"));
|
|
78
|
+
console.log(chalk.gray(" āāā memory/ (constitution & context)"));
|
|
79
|
+
console.log(chalk.gray(" āāā settings.json (hooks configuration)"));
|
|
80
|
+
console.log(chalk.gray(" scripts/dev/"));
|
|
81
|
+
console.log(chalk.gray(" āāā *.sh (worktree helpers)"));
|
|
82
|
+
if (!options.yes) {
|
|
83
|
+
const { confirm } = await inquirer.prompt([
|
|
84
|
+
{
|
|
85
|
+
type: "confirm",
|
|
86
|
+
name: "confirm",
|
|
87
|
+
message: "Proceed with installation?",
|
|
88
|
+
default: true,
|
|
89
|
+
},
|
|
90
|
+
]);
|
|
91
|
+
if (!confirm) {
|
|
92
|
+
console.log(chalk.gray("Aborted."));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Create directories
|
|
97
|
+
console.log(chalk.blue("\nš Creating directories..."));
|
|
98
|
+
await ensureDir(".claude/skills");
|
|
99
|
+
await ensureDir(".claude/hooks");
|
|
100
|
+
await ensureDir(".claude/memory");
|
|
101
|
+
await ensureDir("scripts/dev");
|
|
102
|
+
// Copy templates
|
|
103
|
+
console.log(chalk.blue("š Copying templates..."));
|
|
104
|
+
await copyTemplates(stack);
|
|
105
|
+
// Create manifest
|
|
106
|
+
console.log(chalk.blue("š Creating manifest..."));
|
|
107
|
+
await createManifest(stack);
|
|
108
|
+
// Success message
|
|
109
|
+
console.log(chalk.green(`
|
|
110
|
+
ā
Sequant initialized successfully!
|
|
111
|
+
|
|
112
|
+
${chalk.bold("Next steps:")}
|
|
113
|
+
1. Review .claude/memory/constitution.md and customize for your project
|
|
114
|
+
2. Start using workflow commands in Claude Code:
|
|
115
|
+
|
|
116
|
+
${chalk.cyan("/spec 123")} - Plan implementation for issue #123
|
|
117
|
+
${chalk.cyan("/exec 123")} - Implement the feature
|
|
118
|
+
${chalk.cyan("/qa 123")} - Quality review
|
|
119
|
+
|
|
120
|
+
${chalk.bold("Documentation:")}
|
|
121
|
+
https://github.com/admarble/sequant#readme
|
|
122
|
+
`));
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=init.js.map
|