sequant 1.0.0 → 1.1.1
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/README.md +12 -8
- package/dist/bin/cli.js +12 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +46 -0
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/doctor.test.d.ts +2 -0
- package/dist/src/commands/doctor.test.d.ts.map +1 -0
- package/dist/src/commands/doctor.test.js +140 -0
- package/dist/src/commands/doctor.test.js.map +1 -0
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +45 -2
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/init.test.d.ts +2 -0
- package/dist/src/commands/init.test.d.ts.map +1 -0
- package/dist/src/commands/init.test.js +152 -0
- package/dist/src/commands/init.test.js.map +1 -0
- package/dist/src/commands/logs.d.ts +18 -0
- package/dist/src/commands/logs.d.ts.map +1 -0
- package/dist/src/commands/logs.js +188 -0
- package/dist/src/commands/logs.js.map +1 -0
- package/dist/src/commands/run.d.ts +2 -0
- package/dist/src/commands/run.d.ts.map +1 -1
- package/dist/src/commands/run.js +114 -29
- package/dist/src/commands/run.js.map +1 -1
- package/dist/src/lib/stacks.d.ts.map +1 -1
- package/dist/src/lib/stacks.js +39 -0
- package/dist/src/lib/stacks.js.map +1 -1
- package/dist/src/lib/stacks.test.d.ts +2 -0
- package/dist/src/lib/stacks.test.d.ts.map +1 -0
- package/dist/src/lib/stacks.test.js +145 -0
- package/dist/src/lib/stacks.test.js.map +1 -0
- package/dist/src/lib/system.d.ts +16 -0
- package/dist/src/lib/system.d.ts.map +1 -0
- package/dist/src/lib/system.js +52 -0
- package/dist/src/lib/system.js.map +1 -0
- package/dist/src/lib/system.test.d.ts +2 -0
- package/dist/src/lib/system.test.d.ts.map +1 -0
- package/dist/src/lib/system.test.js +80 -0
- package/dist/src/lib/system.test.js.map +1 -0
- package/dist/src/lib/workflow/log-writer.d.ts +83 -0
- package/dist/src/lib/workflow/log-writer.d.ts.map +1 -0
- package/dist/src/lib/workflow/log-writer.js +193 -0
- package/dist/src/lib/workflow/log-writer.js.map +1 -0
- package/dist/src/lib/workflow/run-log-schema.d.ts +261 -0
- package/dist/src/lib/workflow/run-log-schema.d.ts.map +1 -0
- package/dist/src/lib/workflow/run-log-schema.js +234 -0
- package/dist/src/lib/workflow/run-log-schema.js.map +1 -0
- package/package.json +6 -4
- package/stacks/astro.yaml +35 -0
- package/templates/hooks/post-tool.sh +0 -11
- package/templates/hooks/pre-tool.sh +2 -2
- package/templates/memory/constitution.md +8 -0
- package/templates/scripts/cleanup-worktree.sh +1 -1
- package/templates/scripts/new-feature.sh +7 -5
- package/templates/skills/assess/SKILL.md +31 -16
- package/templates/skills/clean/SKILL.md +17 -2
- package/templates/skills/docs/SKILL.md +48 -34
- package/templates/skills/exec/SKILL.md +31 -25
- package/templates/skills/fullsolve/SKILL.md +34 -16
- package/templates/skills/loop/SKILL.md +22 -5
- package/templates/skills/qa/SKILL.md +89 -4
- package/templates/skills/qa/references/code-quality-exemplars.md +23 -28
- package/templates/skills/qa/references/code-review-checklist.md +6 -17
- package/templates/skills/qa/scripts/quality-checks.sh +4 -17
- package/templates/skills/reflect/SKILL.md +18 -2
- package/templates/skills/reflect/references/documentation-tiers.md +3 -3
- package/templates/skills/security-review/SKILL.md +15 -0
- package/templates/skills/security-review/references/security-checklists.md +10 -8
- package/templates/skills/solve/SKILL.md +147 -149
- package/templates/skills/spec/SKILL.md +61 -3
- package/templates/skills/spec/references/parallel-groups.md +1 -1
- package/templates/skills/spec/references/verification-criteria.md +1 -1
- package/templates/skills/test/SKILL.md +20 -5
- package/templates/skills/testgen/SKILL.md +15 -1
- package/templates/skills/verify/SKILL.md +20 -5
- package/templates/skills/reflect/scripts/workflow-queries.ts +0 -165
package/README.md
CHANGED
|
@@ -37,12 +37,13 @@ When using AI coding assistants, work can become scattered and quality inconsist
|
|
|
37
37
|
|
|
38
38
|
### Prerequisites
|
|
39
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` |
|
|
40
|
+
| Requirement | Check Command | Notes |
|
|
41
|
+
|------------|---------------|-------|
|
|
42
|
+
| [Claude Code](https://claude.ai/code) | `claude --version` | Required |
|
|
43
|
+
| [GitHub CLI](https://cli.github.com/) | `gh auth status` | Required, must be authenticated |
|
|
44
|
+
| Node.js 18+ | `node --version` | Required |
|
|
45
|
+
| Git | `git --version` | Required |
|
|
46
|
+
| [jq](https://jqlang.github.io/jq/) | `jq --version` | Optional, improves hook performance |
|
|
46
47
|
|
|
47
48
|
### Setup
|
|
48
49
|
|
|
@@ -50,10 +51,12 @@ When using AI coding assistants, work can become scattered and quality inconsist
|
|
|
50
51
|
# Install and initialize in your project
|
|
51
52
|
npx sequant init
|
|
52
53
|
|
|
53
|
-
# Verify installation
|
|
54
|
+
# Verify installation and prerequisites
|
|
54
55
|
npx sequant doctor
|
|
55
56
|
```
|
|
56
57
|
|
|
58
|
+
The `doctor` command checks all prerequisites including GitHub CLI authentication.
|
|
59
|
+
|
|
57
60
|
### First Workflow
|
|
58
61
|
|
|
59
62
|
Open Claude Code in your project, then:
|
|
@@ -132,8 +135,9 @@ sequant run 123 --dry-run # Preview without execution
|
|
|
132
135
|
|
|
133
136
|
- **Node.js** 18.0.0 or higher
|
|
134
137
|
- **Git** for worktree support
|
|
135
|
-
- **GitHub CLI** (`gh`) for issue integration
|
|
138
|
+
- **GitHub CLI** (`gh`) for issue integration — must be authenticated via `gh auth login`
|
|
136
139
|
- **Bash** for shell scripts (included in macOS/Linux, use WSL on Windows)
|
|
140
|
+
- **jq** (optional) for faster JSON parsing in hooks — falls back to grep if not installed
|
|
137
141
|
|
|
138
142
|
### IDE Compatibility
|
|
139
143
|
|
package/dist/bin/cli.js
CHANGED
|
@@ -11,6 +11,7 @@ import { updateCommand } from "../src/commands/update.js";
|
|
|
11
11
|
import { doctorCommand } from "../src/commands/doctor.js";
|
|
12
12
|
import { statusCommand } from "../src/commands/status.js";
|
|
13
13
|
import { runCommand } from "../src/commands/run.js";
|
|
14
|
+
import { logsCommand } from "../src/commands/logs.js";
|
|
14
15
|
const program = new Command();
|
|
15
16
|
// Handle --no-color before parsing
|
|
16
17
|
if (process.argv.includes("--no-color")) {
|
|
@@ -51,7 +52,18 @@ program
|
|
|
51
52
|
.option("-d, --dry-run", "Preview without execution")
|
|
52
53
|
.option("-v, --verbose", "Verbose output")
|
|
53
54
|
.option("--timeout <seconds>", "Timeout per phase in seconds", parseInt)
|
|
55
|
+
.option("--log-json", "Enable structured JSON logging")
|
|
56
|
+
.option("--log-path <path>", "Custom log directory path")
|
|
54
57
|
.action(runCommand);
|
|
58
|
+
program
|
|
59
|
+
.command("logs")
|
|
60
|
+
.description("View and analyze workflow run logs")
|
|
61
|
+
.option("-p, --path <path>", "Custom log directory path")
|
|
62
|
+
.option("-n, --last <n>", "Show last N runs", parseInt)
|
|
63
|
+
.option("--json", "Output as JSON")
|
|
64
|
+
.option("-i, --issue <number>", "Filter by issue number", parseInt)
|
|
65
|
+
.option("--failed", "Show only failed runs")
|
|
66
|
+
.action(logsCommand);
|
|
55
67
|
// Parse and execute
|
|
56
68
|
program.parse();
|
|
57
69
|
// Show help if no command provided
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,UAAU,aAAa;CAEtB;AASD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuNzE"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import chalk from "chalk";
|
|
5
5
|
import { fileExists, isExecutable } from "../lib/fs.js";
|
|
6
6
|
import { getManifest } from "../lib/manifest.js";
|
|
7
|
+
import { commandExists, isGhAuthenticated } from "../lib/system.js";
|
|
7
8
|
export async function doctorCommand(options) {
|
|
8
9
|
console.log(chalk.blue("\n🔍 Running health checks...\n"));
|
|
9
10
|
const checks = [];
|
|
@@ -127,6 +128,51 @@ export async function doctorCommand(options) {
|
|
|
127
128
|
message: "Not a git repository (worktree features won't work)",
|
|
128
129
|
});
|
|
129
130
|
}
|
|
131
|
+
// Check 8: GitHub CLI installed
|
|
132
|
+
if (commandExists("gh")) {
|
|
133
|
+
checks.push({
|
|
134
|
+
name: "GitHub CLI",
|
|
135
|
+
status: "pass",
|
|
136
|
+
message: "gh CLI is installed",
|
|
137
|
+
});
|
|
138
|
+
// Check 9: GitHub CLI authenticated (only if gh exists)
|
|
139
|
+
if (isGhAuthenticated()) {
|
|
140
|
+
checks.push({
|
|
141
|
+
name: "GitHub Auth",
|
|
142
|
+
status: "pass",
|
|
143
|
+
message: "gh CLI is authenticated",
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
checks.push({
|
|
148
|
+
name: "GitHub Auth",
|
|
149
|
+
status: "fail",
|
|
150
|
+
message: "gh CLI not authenticated - run: gh auth login",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
checks.push({
|
|
156
|
+
name: "GitHub CLI",
|
|
157
|
+
status: "fail",
|
|
158
|
+
message: "gh CLI not installed - see: https://cli.github.com",
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// Check 10: jq installed (optional but recommended)
|
|
162
|
+
if (commandExists("jq")) {
|
|
163
|
+
checks.push({
|
|
164
|
+
name: "jq",
|
|
165
|
+
status: "pass",
|
|
166
|
+
message: "jq is installed (faster JSON parsing in hooks)",
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
checks.push({
|
|
171
|
+
name: "jq",
|
|
172
|
+
status: "warn",
|
|
173
|
+
message: "jq not installed (optional, hooks will use grep fallback)",
|
|
174
|
+
});
|
|
175
|
+
}
|
|
130
176
|
// Display results
|
|
131
177
|
let passCount = 0;
|
|
132
178
|
let warnCount = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.test.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
+
// Mock fs functions
|
|
3
|
+
vi.mock("../lib/fs.js", () => ({
|
|
4
|
+
fileExists: vi.fn(),
|
|
5
|
+
isExecutable: vi.fn(),
|
|
6
|
+
}));
|
|
7
|
+
// Mock manifest
|
|
8
|
+
vi.mock("../lib/manifest.js", () => ({
|
|
9
|
+
getManifest: vi.fn(),
|
|
10
|
+
}));
|
|
11
|
+
// Mock system functions
|
|
12
|
+
vi.mock("../lib/system.js", () => ({
|
|
13
|
+
commandExists: vi.fn(),
|
|
14
|
+
isGhAuthenticated: vi.fn(),
|
|
15
|
+
}));
|
|
16
|
+
import { doctorCommand } from "./doctor.js";
|
|
17
|
+
import { fileExists, isExecutable } from "../lib/fs.js";
|
|
18
|
+
import { getManifest } from "../lib/manifest.js";
|
|
19
|
+
import { commandExists, isGhAuthenticated } from "../lib/system.js";
|
|
20
|
+
const mockFileExists = vi.mocked(fileExists);
|
|
21
|
+
const mockIsExecutable = vi.mocked(isExecutable);
|
|
22
|
+
const mockGetManifest = vi.mocked(getManifest);
|
|
23
|
+
const mockCommandExists = vi.mocked(commandExists);
|
|
24
|
+
const mockIsGhAuthenticated = vi.mocked(isGhAuthenticated);
|
|
25
|
+
describe("doctor command", () => {
|
|
26
|
+
let consoleLogSpy;
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
+
let processExitSpy;
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
vi.resetAllMocks();
|
|
31
|
+
consoleLogSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
32
|
+
processExitSpy = vi
|
|
33
|
+
.spyOn(process, "exit")
|
|
34
|
+
.mockImplementation((() => undefined));
|
|
35
|
+
// Default: all files exist, all commands work
|
|
36
|
+
mockFileExists.mockResolvedValue(true);
|
|
37
|
+
mockIsExecutable.mockResolvedValue(true);
|
|
38
|
+
mockGetManifest.mockResolvedValue({
|
|
39
|
+
version: "0.1.0",
|
|
40
|
+
stack: "nextjs",
|
|
41
|
+
installedAt: "2024-01-01T00:00:00.000Z",
|
|
42
|
+
files: {},
|
|
43
|
+
});
|
|
44
|
+
mockCommandExists.mockReturnValue(true);
|
|
45
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
46
|
+
});
|
|
47
|
+
afterEach(() => {
|
|
48
|
+
consoleLogSpy.mockRestore();
|
|
49
|
+
processExitSpy.mockRestore();
|
|
50
|
+
});
|
|
51
|
+
describe("GitHub CLI checks", () => {
|
|
52
|
+
it("passes when gh CLI is installed", async () => {
|
|
53
|
+
mockCommandExists.mockReturnValue(true);
|
|
54
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
55
|
+
await doctorCommand({});
|
|
56
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
57
|
+
expect(output).toContain("GitHub CLI");
|
|
58
|
+
expect(output).toContain("gh CLI is installed");
|
|
59
|
+
});
|
|
60
|
+
it("fails when gh CLI is not installed", async () => {
|
|
61
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "gh");
|
|
62
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
63
|
+
await doctorCommand({});
|
|
64
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
65
|
+
expect(output).toContain("GitHub CLI");
|
|
66
|
+
expect(output).toContain("gh CLI not installed");
|
|
67
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
68
|
+
});
|
|
69
|
+
it("passes when gh CLI is authenticated", async () => {
|
|
70
|
+
mockCommandExists.mockReturnValue(true);
|
|
71
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
72
|
+
await doctorCommand({});
|
|
73
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
74
|
+
expect(output).toContain("GitHub Auth");
|
|
75
|
+
expect(output).toContain("gh CLI is authenticated");
|
|
76
|
+
});
|
|
77
|
+
it("fails when gh CLI is not authenticated", async () => {
|
|
78
|
+
mockCommandExists.mockReturnValue(true);
|
|
79
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
80
|
+
await doctorCommand({});
|
|
81
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
82
|
+
expect(output).toContain("GitHub Auth");
|
|
83
|
+
expect(output).toContain("gh CLI not authenticated");
|
|
84
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
85
|
+
});
|
|
86
|
+
it("skips auth check when gh CLI is not installed", async () => {
|
|
87
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "gh");
|
|
88
|
+
await doctorCommand({});
|
|
89
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
90
|
+
// Should not contain auth check result since gh is not installed
|
|
91
|
+
expect(output).not.toContain("GitHub Auth");
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe("jq checks", () => {
|
|
95
|
+
it("passes when jq is installed", async () => {
|
|
96
|
+
mockCommandExists.mockReturnValue(true);
|
|
97
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
98
|
+
await doctorCommand({});
|
|
99
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
100
|
+
expect(output).toContain("jq");
|
|
101
|
+
expect(output).toContain("jq is installed");
|
|
102
|
+
});
|
|
103
|
+
it("warns when jq is not installed", async () => {
|
|
104
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "jq");
|
|
105
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
106
|
+
await doctorCommand({});
|
|
107
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
108
|
+
expect(output).toContain("jq");
|
|
109
|
+
expect(output).toContain("jq not installed");
|
|
110
|
+
expect(output).toContain("Warnings: 1");
|
|
111
|
+
// Should not exit with failure since jq is optional
|
|
112
|
+
expect(processExitSpy).not.toHaveBeenCalled();
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe("combined scenarios", () => {
|
|
116
|
+
it("all checks pass when everything is installed and configured", async () => {
|
|
117
|
+
mockCommandExists.mockReturnValue(true);
|
|
118
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
119
|
+
await doctorCommand({});
|
|
120
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
121
|
+
expect(output).toContain("All checks passed");
|
|
122
|
+
expect(processExitSpy).not.toHaveBeenCalled();
|
|
123
|
+
});
|
|
124
|
+
it("exits with failure when gh is missing even if jq is present", async () => {
|
|
125
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "gh");
|
|
126
|
+
await doctorCommand({});
|
|
127
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
128
|
+
});
|
|
129
|
+
it("shows only warnings (no failure) when only jq is missing", async () => {
|
|
130
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "jq");
|
|
131
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
132
|
+
await doctorCommand({});
|
|
133
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
134
|
+
expect(output).toContain("Warnings:");
|
|
135
|
+
expect(output).toContain("should work");
|
|
136
|
+
expect(processExitSpy).not.toHaveBeenCalled();
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=doctor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.test.js","sourceRoot":"","sources":["../../../src/commands/doctor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0CH,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,CA+JrE"}
|
|
@@ -7,8 +7,42 @@ import { detectStack } from "../lib/stacks.js";
|
|
|
7
7
|
import { copyTemplates } from "../lib/templates.js";
|
|
8
8
|
import { createManifest } from "../lib/manifest.js";
|
|
9
9
|
import { fileExists, ensureDir } from "../lib/fs.js";
|
|
10
|
+
import { commandExists, isGhAuthenticated, getInstallHint, } from "../lib/system.js";
|
|
11
|
+
/**
|
|
12
|
+
* Check prerequisites and display warnings
|
|
13
|
+
*/
|
|
14
|
+
function checkPrerequisites() {
|
|
15
|
+
const warnings = [];
|
|
16
|
+
const suggestions = [];
|
|
17
|
+
// Check for gh CLI
|
|
18
|
+
if (!commandExists("gh")) {
|
|
19
|
+
warnings.push("GitHub CLI (gh) is not installed. Required for issue workflows.");
|
|
20
|
+
suggestions.push(`Install: ${getInstallHint("gh")}`);
|
|
21
|
+
}
|
|
22
|
+
else if (!isGhAuthenticated()) {
|
|
23
|
+
warnings.push("GitHub CLI is not authenticated.");
|
|
24
|
+
suggestions.push("Run: gh auth login");
|
|
25
|
+
}
|
|
26
|
+
// Check for jq (optional)
|
|
27
|
+
if (!commandExists("jq")) {
|
|
28
|
+
suggestions.push(`Optional: Install jq for faster JSON parsing (${getInstallHint("jq")})`);
|
|
29
|
+
}
|
|
30
|
+
return { warnings, suggestions };
|
|
31
|
+
}
|
|
10
32
|
export async function initCommand(options) {
|
|
11
33
|
console.log(chalk.green("\n🚀 Initializing Sequant...\n"));
|
|
34
|
+
// Check prerequisites and display warnings
|
|
35
|
+
const { warnings, suggestions } = checkPrerequisites();
|
|
36
|
+
if (warnings.length > 0) {
|
|
37
|
+
console.log(chalk.yellow("⚠️ Prerequisites:\n"));
|
|
38
|
+
for (const warning of warnings) {
|
|
39
|
+
console.log(chalk.yellow(` • ${warning}`));
|
|
40
|
+
}
|
|
41
|
+
for (const suggestion of suggestions.filter((s) => !s.startsWith("Optional"))) {
|
|
42
|
+
console.log(chalk.gray(` ${suggestion}`));
|
|
43
|
+
}
|
|
44
|
+
console.log();
|
|
45
|
+
}
|
|
12
46
|
// Check if already initialized
|
|
13
47
|
const configExists = await fileExists(".claude/settings.json");
|
|
14
48
|
if (configExists && !options.force) {
|
|
@@ -105,10 +139,19 @@ export async function initCommand(options) {
|
|
|
105
139
|
// Create manifest
|
|
106
140
|
console.log(chalk.blue("📋 Creating manifest..."));
|
|
107
141
|
await createManifest(stack);
|
|
142
|
+
// Build optional suggestions section
|
|
143
|
+
const optionalSuggestions = suggestions.filter((s) => s.startsWith("Optional"));
|
|
144
|
+
const optionalSection = optionalSuggestions.length > 0
|
|
145
|
+
? `\n${chalk.bold("Optional improvements:")}\n${optionalSuggestions.map((s) => ` • ${s.replace("Optional: ", "")}`).join("\n")}\n`
|
|
146
|
+
: "";
|
|
147
|
+
// Build prerequisites reminder if there were warnings
|
|
148
|
+
const prereqReminder = warnings.length > 0
|
|
149
|
+
? `\n${chalk.yellow("⚠️ Remember to address prerequisites above before using issue workflows.")}\n`
|
|
150
|
+
: "";
|
|
108
151
|
// Success message
|
|
109
152
|
console.log(chalk.green(`
|
|
110
153
|
✅ Sequant initialized successfully!
|
|
111
|
-
|
|
154
|
+
${prereqReminder}
|
|
112
155
|
${chalk.bold("Next steps:")}
|
|
113
156
|
1. Review .claude/memory/constitution.md and customize for your project
|
|
114
157
|
2. Start using workflow commands in Claude Code:
|
|
@@ -116,7 +159,7 @@ ${chalk.bold("Next steps:")}
|
|
|
116
159
|
${chalk.cyan("/spec 123")} - Plan implementation for issue #123
|
|
117
160
|
${chalk.cyan("/exec 123")} - Implement the feature
|
|
118
161
|
${chalk.cyan("/qa 123")} - Quality review
|
|
119
|
-
|
|
162
|
+
${optionalSection}
|
|
120
163
|
${chalk.bold("Documentation:")}
|
|
121
164
|
https://github.com/admarble/sequant#readme
|
|
122
165
|
`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.test.d.ts","sourceRoot":"","sources":["../../../src/commands/init.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
+
// Mock fs functions
|
|
3
|
+
vi.mock("../lib/fs.js", () => ({
|
|
4
|
+
fileExists: vi.fn(),
|
|
5
|
+
ensureDir: vi.fn(),
|
|
6
|
+
}));
|
|
7
|
+
// Mock stacks
|
|
8
|
+
vi.mock("../lib/stacks.js", () => ({
|
|
9
|
+
detectStack: vi.fn(),
|
|
10
|
+
}));
|
|
11
|
+
// Mock templates
|
|
12
|
+
vi.mock("../lib/templates.js", () => ({
|
|
13
|
+
copyTemplates: vi.fn(),
|
|
14
|
+
}));
|
|
15
|
+
// Mock manifest
|
|
16
|
+
vi.mock("../lib/manifest.js", () => ({
|
|
17
|
+
createManifest: vi.fn(),
|
|
18
|
+
}));
|
|
19
|
+
// Mock system functions
|
|
20
|
+
vi.mock("../lib/system.js", () => ({
|
|
21
|
+
commandExists: vi.fn(),
|
|
22
|
+
isGhAuthenticated: vi.fn(),
|
|
23
|
+
getInstallHint: vi.fn((pkg) => {
|
|
24
|
+
if (pkg === "gh")
|
|
25
|
+
return "brew install gh";
|
|
26
|
+
if (pkg === "jq")
|
|
27
|
+
return "brew install jq";
|
|
28
|
+
return `Install ${pkg}`;
|
|
29
|
+
}),
|
|
30
|
+
}));
|
|
31
|
+
// Mock inquirer
|
|
32
|
+
vi.mock("inquirer", () => ({
|
|
33
|
+
default: {
|
|
34
|
+
prompt: vi.fn(),
|
|
35
|
+
},
|
|
36
|
+
}));
|
|
37
|
+
import { initCommand } from "./init.js";
|
|
38
|
+
import { fileExists, ensureDir } from "../lib/fs.js";
|
|
39
|
+
import { detectStack } from "../lib/stacks.js";
|
|
40
|
+
import { copyTemplates } from "../lib/templates.js";
|
|
41
|
+
import { createManifest } from "../lib/manifest.js";
|
|
42
|
+
import { commandExists, isGhAuthenticated } from "../lib/system.js";
|
|
43
|
+
const mockFileExists = vi.mocked(fileExists);
|
|
44
|
+
const mockEnsureDir = vi.mocked(ensureDir);
|
|
45
|
+
const mockDetectStack = vi.mocked(detectStack);
|
|
46
|
+
const mockCopyTemplates = vi.mocked(copyTemplates);
|
|
47
|
+
const mockCreateManifest = vi.mocked(createManifest);
|
|
48
|
+
const mockCommandExists = vi.mocked(commandExists);
|
|
49
|
+
const mockIsGhAuthenticated = vi.mocked(isGhAuthenticated);
|
|
50
|
+
describe("init command", () => {
|
|
51
|
+
let consoleLogSpy;
|
|
52
|
+
beforeEach(() => {
|
|
53
|
+
vi.resetAllMocks();
|
|
54
|
+
consoleLogSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
55
|
+
// Default: not initialized, all commands work
|
|
56
|
+
mockFileExists.mockResolvedValue(false);
|
|
57
|
+
mockEnsureDir.mockResolvedValue(undefined);
|
|
58
|
+
mockDetectStack.mockResolvedValue(null);
|
|
59
|
+
mockCopyTemplates.mockResolvedValue(undefined);
|
|
60
|
+
mockCreateManifest.mockResolvedValue(undefined);
|
|
61
|
+
mockCommandExists.mockReturnValue(true);
|
|
62
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
63
|
+
});
|
|
64
|
+
afterEach(() => {
|
|
65
|
+
consoleLogSpy.mockRestore();
|
|
66
|
+
});
|
|
67
|
+
describe("prerequisite checks", () => {
|
|
68
|
+
it("shows no warnings when all prerequisites are met", async () => {
|
|
69
|
+
mockCommandExists.mockReturnValue(true);
|
|
70
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
71
|
+
await initCommand({ yes: true, stack: "generic" });
|
|
72
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
73
|
+
expect(output).not.toContain("Prerequisites:");
|
|
74
|
+
expect(output).not.toContain("GitHub CLI (gh) is not installed");
|
|
75
|
+
expect(output).not.toContain("GitHub CLI is not authenticated");
|
|
76
|
+
expect(output).toContain("Sequant initialized successfully");
|
|
77
|
+
});
|
|
78
|
+
it("warns when gh CLI is not installed", async () => {
|
|
79
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "gh");
|
|
80
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
81
|
+
await initCommand({ yes: true, stack: "generic" });
|
|
82
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
83
|
+
expect(output).toContain("Prerequisites:");
|
|
84
|
+
expect(output).toContain("GitHub CLI (gh) is not installed");
|
|
85
|
+
expect(output).toContain("Remember to address prerequisites");
|
|
86
|
+
});
|
|
87
|
+
it("warns when gh CLI is not authenticated", async () => {
|
|
88
|
+
mockCommandExists.mockReturnValue(true);
|
|
89
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
90
|
+
await initCommand({ yes: true, stack: "generic" });
|
|
91
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
92
|
+
expect(output).toContain("Prerequisites:");
|
|
93
|
+
expect(output).toContain("GitHub CLI is not authenticated");
|
|
94
|
+
expect(output).toContain("gh auth login");
|
|
95
|
+
expect(output).toContain("Remember to address prerequisites");
|
|
96
|
+
});
|
|
97
|
+
it("shows optional jq suggestion when jq is not installed", async () => {
|
|
98
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "jq");
|
|
99
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
100
|
+
await initCommand({ yes: true, stack: "generic" });
|
|
101
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
102
|
+
expect(output).toContain("Optional improvements:");
|
|
103
|
+
expect(output).toContain("Install jq for faster JSON parsing");
|
|
104
|
+
// Should NOT show prerequisites warning since jq is optional
|
|
105
|
+
expect(output).not.toContain("Prerequisites:");
|
|
106
|
+
});
|
|
107
|
+
it("shows both gh warning and jq suggestion when both are missing", async () => {
|
|
108
|
+
mockCommandExists.mockReturnValue(false);
|
|
109
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
110
|
+
await initCommand({ yes: true, stack: "generic" });
|
|
111
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
112
|
+
expect(output).toContain("Prerequisites:");
|
|
113
|
+
expect(output).toContain("GitHub CLI (gh) is not installed");
|
|
114
|
+
expect(output).toContain("Optional improvements:");
|
|
115
|
+
expect(output).toContain("Install jq for faster JSON parsing");
|
|
116
|
+
});
|
|
117
|
+
it("skips auth check when gh is not installed", async () => {
|
|
118
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "gh");
|
|
119
|
+
await initCommand({ yes: true, stack: "generic" });
|
|
120
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
121
|
+
// Should only show "not installed", not "not authenticated"
|
|
122
|
+
expect(output).toContain("GitHub CLI (gh) is not installed");
|
|
123
|
+
expect(output).not.toContain("GitHub CLI is not authenticated");
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
describe("initialization flow", () => {
|
|
127
|
+
it("completes successfully with --yes and --stack flags", async () => {
|
|
128
|
+
mockCommandExists.mockReturnValue(true);
|
|
129
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
130
|
+
await initCommand({ yes: true, stack: "nextjs" });
|
|
131
|
+
expect(mockEnsureDir).toHaveBeenCalledWith(".claude/skills");
|
|
132
|
+
expect(mockEnsureDir).toHaveBeenCalledWith(".claude/hooks");
|
|
133
|
+
expect(mockEnsureDir).toHaveBeenCalledWith(".claude/memory");
|
|
134
|
+
expect(mockEnsureDir).toHaveBeenCalledWith("scripts/dev");
|
|
135
|
+
expect(mockCopyTemplates).toHaveBeenCalledWith("nextjs");
|
|
136
|
+
expect(mockCreateManifest).toHaveBeenCalledWith("nextjs");
|
|
137
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
138
|
+
expect(output).toContain("Sequant initialized successfully");
|
|
139
|
+
});
|
|
140
|
+
it("warns but continues when already initialized without --force", async () => {
|
|
141
|
+
mockFileExists.mockImplementation(async (path) => {
|
|
142
|
+
return path === ".claude/settings.json";
|
|
143
|
+
});
|
|
144
|
+
mockCommandExists.mockReturnValue(true);
|
|
145
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
146
|
+
await initCommand({ yes: true, stack: "generic" });
|
|
147
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
148
|
+
expect(output).toContain("already initialized");
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=init.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../src/commands/init.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sequant logs - View and analyze workflow run logs
|
|
3
|
+
*
|
|
4
|
+
* Provides access to structured JSON logs produced by `sequant run --log-json`.
|
|
5
|
+
*/
|
|
6
|
+
interface LogsOptions {
|
|
7
|
+
path?: string;
|
|
8
|
+
last?: number;
|
|
9
|
+
json?: boolean;
|
|
10
|
+
issue?: number;
|
|
11
|
+
failed?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Main logs command
|
|
15
|
+
*/
|
|
16
|
+
export declare function logsCommand(options: LogsOptions): Promise<void>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=logs.d.ts.map
|