sequant 1.1.0 → 1.1.2
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/dist/bin/cli.js +21 -3
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +1 -25
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/doctor.test.js +28 -97
- package/dist/src/commands/doctor.test.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +3 -27
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/init.test.js +32 -75
- package/dist/src/commands/init.test.js.map +1 -1
- 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 +10 -1
- package/dist/src/commands/run.d.ts.map +1 -1
- package/dist/src/commands/run.js +429 -98
- package/dist/src/commands/run.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +16 -0
- package/dist/src/commands/update.js.map +1 -1
- 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/log-writer.test.d.ts +7 -0
- package/dist/src/lib/workflow/log-writer.test.d.ts.map +1 -0
- package/dist/src/lib/workflow/log-writer.test.js +451 -0
- package/dist/src/lib/workflow/log-writer.test.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/dist/src/lib/workflow/run-log-schema.test.d.ts +2 -0
- package/dist/src/lib/workflow/run-log-schema.test.d.ts.map +1 -0
- package/dist/src/lib/workflow/run-log-schema.test.js +455 -0
- package/dist/src/lib/workflow/run-log-schema.test.js.map +1 -0
- package/package.json +4 -2
- package/templates/hooks/pre-tool.sh +14 -2
- package/templates/scripts/cleanup-worktree.sh +23 -1
- package/templates/skills/assess/SKILL.md +15 -0
- package/templates/skills/clean/SKILL.md +15 -0
- package/templates/skills/docs/SKILL.md +16 -0
- package/templates/skills/exec/SKILL.md +32 -0
- package/templates/skills/fullsolve/SKILL.md +42 -0
- package/templates/skills/loop/SKILL.md +14 -0
- package/templates/skills/qa/SKILL.md +67 -0
- package/templates/skills/reflect/SKILL.md +14 -0
- package/templates/skills/security-review/SKILL.md +15 -0
- package/templates/skills/solve/SKILL.md +44 -0
- package/templates/skills/spec/SKILL.md +59 -0
- package/templates/skills/test/SKILL.md +14 -0
- package/templates/skills/testgen/SKILL.md +15 -0
- package/templates/skills/verify/SKILL.md +15 -0
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { execSync } from "child_process";
|
|
3
|
-
// Mock child_process
|
|
4
|
-
vi.mock("child_process", () => ({
|
|
5
|
-
execSync: vi.fn(),
|
|
6
|
-
}));
|
|
7
2
|
// Mock fs functions
|
|
8
3
|
vi.mock("../lib/fs.js", () => ({
|
|
9
4
|
fileExists: vi.fn(),
|
|
@@ -21,6 +16,18 @@ vi.mock("../lib/templates.js", () => ({
|
|
|
21
16
|
vi.mock("../lib/manifest.js", () => ({
|
|
22
17
|
createManifest: vi.fn(),
|
|
23
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
|
+
}));
|
|
24
31
|
// Mock inquirer
|
|
25
32
|
vi.mock("inquirer", () => ({
|
|
26
33
|
default: {
|
|
@@ -32,12 +39,14 @@ import { fileExists, ensureDir } from "../lib/fs.js";
|
|
|
32
39
|
import { detectStack } from "../lib/stacks.js";
|
|
33
40
|
import { copyTemplates } from "../lib/templates.js";
|
|
34
41
|
import { createManifest } from "../lib/manifest.js";
|
|
35
|
-
|
|
42
|
+
import { commandExists, isGhAuthenticated } from "../lib/system.js";
|
|
36
43
|
const mockFileExists = vi.mocked(fileExists);
|
|
37
44
|
const mockEnsureDir = vi.mocked(ensureDir);
|
|
38
45
|
const mockDetectStack = vi.mocked(detectStack);
|
|
39
46
|
const mockCopyTemplates = vi.mocked(copyTemplates);
|
|
40
47
|
const mockCreateManifest = vi.mocked(createManifest);
|
|
48
|
+
const mockCommandExists = vi.mocked(commandExists);
|
|
49
|
+
const mockIsGhAuthenticated = vi.mocked(isGhAuthenticated);
|
|
41
50
|
describe("init command", () => {
|
|
42
51
|
let consoleLogSpy;
|
|
43
52
|
beforeEach(() => {
|
|
@@ -49,22 +58,16 @@ describe("init command", () => {
|
|
|
49
58
|
mockDetectStack.mockResolvedValue(null);
|
|
50
59
|
mockCopyTemplates.mockResolvedValue(undefined);
|
|
51
60
|
mockCreateManifest.mockResolvedValue(undefined);
|
|
52
|
-
|
|
61
|
+
mockCommandExists.mockReturnValue(true);
|
|
62
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
53
63
|
});
|
|
54
64
|
afterEach(() => {
|
|
55
65
|
consoleLogSpy.mockRestore();
|
|
56
66
|
});
|
|
57
67
|
describe("prerequisite checks", () => {
|
|
58
68
|
it("shows no warnings when all prerequisites are met", async () => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return Buffer.from("/usr/local/bin/gh");
|
|
62
|
-
if (cmd === "gh auth status")
|
|
63
|
-
return Buffer.from("");
|
|
64
|
-
if (cmd === "command -v jq")
|
|
65
|
-
return Buffer.from("/usr/local/bin/jq");
|
|
66
|
-
return Buffer.from("");
|
|
67
|
-
});
|
|
69
|
+
mockCommandExists.mockReturnValue(true);
|
|
70
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
68
71
|
await initCommand({ yes: true, stack: "generic" });
|
|
69
72
|
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
70
73
|
expect(output).not.toContain("Prerequisites:");
|
|
@@ -73,32 +76,17 @@ describe("init command", () => {
|
|
|
73
76
|
expect(output).toContain("Sequant initialized successfully");
|
|
74
77
|
});
|
|
75
78
|
it("warns when gh CLI is not installed", async () => {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
throw new Error("command not found");
|
|
79
|
-
}
|
|
80
|
-
if (cmd === "command -v jq")
|
|
81
|
-
return Buffer.from("/usr/local/bin/jq");
|
|
82
|
-
return Buffer.from("");
|
|
83
|
-
});
|
|
79
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "gh");
|
|
80
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
84
81
|
await initCommand({ yes: true, stack: "generic" });
|
|
85
82
|
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
86
83
|
expect(output).toContain("Prerequisites:");
|
|
87
84
|
expect(output).toContain("GitHub CLI (gh) is not installed");
|
|
88
|
-
expect(output).toContain("https://cli.github.com");
|
|
89
85
|
expect(output).toContain("Remember to address prerequisites");
|
|
90
86
|
});
|
|
91
87
|
it("warns when gh CLI is not authenticated", async () => {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return Buffer.from("/usr/local/bin/gh");
|
|
95
|
-
if (cmd === "gh auth status") {
|
|
96
|
-
throw new Error("not authenticated");
|
|
97
|
-
}
|
|
98
|
-
if (cmd === "command -v jq")
|
|
99
|
-
return Buffer.from("/usr/local/bin/jq");
|
|
100
|
-
return Buffer.from("");
|
|
101
|
-
});
|
|
88
|
+
mockCommandExists.mockReturnValue(true);
|
|
89
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
102
90
|
await initCommand({ yes: true, stack: "generic" });
|
|
103
91
|
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
104
92
|
expect(output).toContain("Prerequisites:");
|
|
@@ -107,16 +95,8 @@ describe("init command", () => {
|
|
|
107
95
|
expect(output).toContain("Remember to address prerequisites");
|
|
108
96
|
});
|
|
109
97
|
it("shows optional jq suggestion when jq is not installed", async () => {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
return Buffer.from("/usr/local/bin/gh");
|
|
113
|
-
if (cmd === "gh auth status")
|
|
114
|
-
return Buffer.from("");
|
|
115
|
-
if (cmd === "command -v jq") {
|
|
116
|
-
throw new Error("command not found");
|
|
117
|
-
}
|
|
118
|
-
return Buffer.from("");
|
|
119
|
-
});
|
|
98
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "jq");
|
|
99
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
120
100
|
await initCommand({ yes: true, stack: "generic" });
|
|
121
101
|
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
122
102
|
expect(output).toContain("Optional improvements:");
|
|
@@ -125,15 +105,8 @@ describe("init command", () => {
|
|
|
125
105
|
expect(output).not.toContain("Prerequisites:");
|
|
126
106
|
});
|
|
127
107
|
it("shows both gh warning and jq suggestion when both are missing", async () => {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
throw new Error("command not found");
|
|
131
|
-
}
|
|
132
|
-
if (cmd === "command -v jq") {
|
|
133
|
-
throw new Error("command not found");
|
|
134
|
-
}
|
|
135
|
-
return Buffer.from("");
|
|
136
|
-
});
|
|
108
|
+
mockCommandExists.mockReturnValue(false);
|
|
109
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
137
110
|
await initCommand({ yes: true, stack: "generic" });
|
|
138
111
|
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
139
112
|
expect(output).toContain("Prerequisites:");
|
|
@@ -142,17 +115,7 @@ describe("init command", () => {
|
|
|
142
115
|
expect(output).toContain("Install jq for faster JSON parsing");
|
|
143
116
|
});
|
|
144
117
|
it("skips auth check when gh is not installed", async () => {
|
|
145
|
-
|
|
146
|
-
if (cmd === "command -v gh") {
|
|
147
|
-
throw new Error("command not found");
|
|
148
|
-
}
|
|
149
|
-
if (cmd === "gh auth status") {
|
|
150
|
-
throw new Error("should not be called");
|
|
151
|
-
}
|
|
152
|
-
if (cmd === "command -v jq")
|
|
153
|
-
return Buffer.from("/usr/local/bin/jq");
|
|
154
|
-
return Buffer.from("");
|
|
155
|
-
});
|
|
118
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "gh");
|
|
156
119
|
await initCommand({ yes: true, stack: "generic" });
|
|
157
120
|
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
158
121
|
// Should only show "not installed", not "not authenticated"
|
|
@@ -162,15 +125,8 @@ describe("init command", () => {
|
|
|
162
125
|
});
|
|
163
126
|
describe("initialization flow", () => {
|
|
164
127
|
it("completes successfully with --yes and --stack flags", async () => {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
return Buffer.from("/usr/local/bin/gh");
|
|
168
|
-
if (cmd === "gh auth status")
|
|
169
|
-
return Buffer.from("");
|
|
170
|
-
if (cmd === "command -v jq")
|
|
171
|
-
return Buffer.from("/usr/local/bin/jq");
|
|
172
|
-
return Buffer.from("");
|
|
173
|
-
});
|
|
128
|
+
mockCommandExists.mockReturnValue(true);
|
|
129
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
174
130
|
await initCommand({ yes: true, stack: "nextjs" });
|
|
175
131
|
expect(mockEnsureDir).toHaveBeenCalledWith(".claude/skills");
|
|
176
132
|
expect(mockEnsureDir).toHaveBeenCalledWith(".claude/hooks");
|
|
@@ -185,7 +141,8 @@ describe("init command", () => {
|
|
|
185
141
|
mockFileExists.mockImplementation(async (path) => {
|
|
186
142
|
return path === ".claude/settings.json";
|
|
187
143
|
});
|
|
188
|
-
|
|
144
|
+
mockCommandExists.mockReturnValue(true);
|
|
145
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
189
146
|
await initCommand({ yes: true, stack: "generic" });
|
|
190
147
|
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
191
148
|
expect(output).toContain("already initialized");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../src/commands/init.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAwKD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyErE"}
|
|
@@ -0,0 +1,188 @@
|
|
|
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
|
+
import chalk from "chalk";
|
|
7
|
+
import * as fs from "fs";
|
|
8
|
+
import * as path from "path";
|
|
9
|
+
import * as os from "os";
|
|
10
|
+
import { RunLogSchema, LOG_PATHS, } from "../lib/workflow/run-log-schema.js";
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the log directory path
|
|
13
|
+
*/
|
|
14
|
+
function resolveLogPath(customPath) {
|
|
15
|
+
if (customPath) {
|
|
16
|
+
return customPath.replace("~", os.homedir());
|
|
17
|
+
}
|
|
18
|
+
// Check project-level logs first
|
|
19
|
+
const projectPath = LOG_PATHS.project;
|
|
20
|
+
if (fs.existsSync(projectPath)) {
|
|
21
|
+
return projectPath;
|
|
22
|
+
}
|
|
23
|
+
// Fall back to user-level logs
|
|
24
|
+
const userPath = LOG_PATHS.user.replace("~", os.homedir());
|
|
25
|
+
if (fs.existsSync(userPath)) {
|
|
26
|
+
return userPath;
|
|
27
|
+
}
|
|
28
|
+
// Default to project path (even if it doesn't exist yet)
|
|
29
|
+
return projectPath;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* List all log files in a directory
|
|
33
|
+
*/
|
|
34
|
+
function listLogFiles(logDir) {
|
|
35
|
+
if (!fs.existsSync(logDir)) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
return fs
|
|
39
|
+
.readdirSync(logDir)
|
|
40
|
+
.filter((f) => f.startsWith("run-") && f.endsWith(".json"))
|
|
41
|
+
.sort()
|
|
42
|
+
.reverse(); // Most recent first
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse a log file
|
|
46
|
+
*/
|
|
47
|
+
function parseLogFile(filePath) {
|
|
48
|
+
try {
|
|
49
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
50
|
+
const data = JSON.parse(content);
|
|
51
|
+
return RunLogSchema.parse(data);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Format duration in human-readable format
|
|
59
|
+
*/
|
|
60
|
+
function formatDuration(seconds) {
|
|
61
|
+
if (seconds < 60) {
|
|
62
|
+
return `${seconds.toFixed(1)}s`;
|
|
63
|
+
}
|
|
64
|
+
const mins = Math.floor(seconds / 60);
|
|
65
|
+
const secs = seconds % 60;
|
|
66
|
+
return `${mins}m ${secs.toFixed(0)}s`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Format a timestamp for display
|
|
70
|
+
*/
|
|
71
|
+
function formatTime(isoString) {
|
|
72
|
+
const date = new Date(isoString);
|
|
73
|
+
return date.toLocaleString();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Display a single log summary
|
|
77
|
+
*/
|
|
78
|
+
function displayLogSummary(log, filename) {
|
|
79
|
+
const passed = log.summary.passed;
|
|
80
|
+
const failed = log.summary.failed;
|
|
81
|
+
const total = log.summary.totalIssues;
|
|
82
|
+
const status = failed > 0
|
|
83
|
+
? chalk.red("FAILED")
|
|
84
|
+
: passed === total
|
|
85
|
+
? chalk.green("PASSED")
|
|
86
|
+
: chalk.yellow("PARTIAL");
|
|
87
|
+
console.log(chalk.blue(`\n Run: ${log.runId.slice(0, 8)}...`));
|
|
88
|
+
console.log(chalk.gray(` File: ${filename}`));
|
|
89
|
+
console.log(chalk.gray(` Time: ${formatTime(log.startTime)}`));
|
|
90
|
+
console.log(chalk.gray(` Duration: ${formatDuration(log.summary.totalDurationSeconds)}`));
|
|
91
|
+
console.log(chalk.gray(` Status: ${status} (${passed}/${total} passed, ${failed} failed)`));
|
|
92
|
+
console.log(chalk.gray(` Phases: ${log.config.phases.join(" → ")}`));
|
|
93
|
+
// Show issues
|
|
94
|
+
for (const issue of log.issues) {
|
|
95
|
+
const issueStatus = issue.status === "success"
|
|
96
|
+
? chalk.green("✓")
|
|
97
|
+
: issue.status === "failure"
|
|
98
|
+
? chalk.red("✗")
|
|
99
|
+
: chalk.yellow("~");
|
|
100
|
+
const duration = chalk.gray(`(${formatDuration(issue.totalDurationSeconds)})`);
|
|
101
|
+
console.log(` ${issueStatus} #${issue.issueNumber}: ${issue.title} ${duration}`);
|
|
102
|
+
// Show phases for this issue
|
|
103
|
+
for (const phase of issue.phases) {
|
|
104
|
+
const phaseStatus = phase.status === "success"
|
|
105
|
+
? chalk.green("✓")
|
|
106
|
+
: phase.status === "failure"
|
|
107
|
+
? chalk.red("✗")
|
|
108
|
+
: chalk.yellow("~");
|
|
109
|
+
const phaseDuration = chalk.gray(`(${formatDuration(phase.durationSeconds)})`);
|
|
110
|
+
const error = phase.error ? chalk.red(` - ${phase.error}`) : "";
|
|
111
|
+
console.log(` ${phaseStatus} ${phase.phase} ${phaseDuration}${error}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Filter logs based on options
|
|
117
|
+
*/
|
|
118
|
+
function filterLogs(logs, options) {
|
|
119
|
+
let filtered = logs;
|
|
120
|
+
// Filter by issue number
|
|
121
|
+
if (options.issue !== undefined) {
|
|
122
|
+
filtered = filtered.filter(({ log }) => log.issues.some((i) => i.issueNumber === options.issue));
|
|
123
|
+
}
|
|
124
|
+
// Filter by failed status
|
|
125
|
+
if (options.failed) {
|
|
126
|
+
filtered = filtered.filter(({ log }) => log.summary.failed > 0);
|
|
127
|
+
}
|
|
128
|
+
// Limit results
|
|
129
|
+
if (options.last !== undefined) {
|
|
130
|
+
filtered = filtered.slice(0, options.last);
|
|
131
|
+
}
|
|
132
|
+
return filtered;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Main logs command
|
|
136
|
+
*/
|
|
137
|
+
export async function logsCommand(options) {
|
|
138
|
+
const logDir = resolveLogPath(options.path);
|
|
139
|
+
console.log(chalk.blue("\n📝 Sequant Run Logs\n"));
|
|
140
|
+
console.log(chalk.gray(` Log directory: ${logDir}`));
|
|
141
|
+
// List log files
|
|
142
|
+
const logFiles = listLogFiles(logDir);
|
|
143
|
+
if (logFiles.length === 0) {
|
|
144
|
+
console.log(chalk.yellow("\n No logs found."));
|
|
145
|
+
console.log(chalk.gray(" Run `sequant run <issues> --log-json` to generate logs."));
|
|
146
|
+
console.log("");
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
console.log(chalk.gray(` Found ${logFiles.length} log file(s)\n`));
|
|
150
|
+
// Parse all logs
|
|
151
|
+
const logs = logFiles
|
|
152
|
+
.map((filename) => {
|
|
153
|
+
const filePath = path.join(logDir, filename);
|
|
154
|
+
const log = parseLogFile(filePath);
|
|
155
|
+
return log ? { log, filename } : null;
|
|
156
|
+
})
|
|
157
|
+
.filter((item) => item !== null);
|
|
158
|
+
// Apply filters
|
|
159
|
+
const filteredLogs = filterLogs(logs, options);
|
|
160
|
+
if (filteredLogs.length === 0) {
|
|
161
|
+
console.log(chalk.yellow(" No logs match the specified filters."));
|
|
162
|
+
console.log("");
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// Output
|
|
166
|
+
if (options.json) {
|
|
167
|
+
// JSON output
|
|
168
|
+
const output = filteredLogs.map(({ log }) => log);
|
|
169
|
+
console.log(JSON.stringify(output, null, 2));
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
// Human-readable output
|
|
173
|
+
for (const { log, filename } of filteredLogs) {
|
|
174
|
+
displayLogSummary(log, filename);
|
|
175
|
+
}
|
|
176
|
+
// Summary
|
|
177
|
+
console.log(chalk.blue("\n" + "━".repeat(50)));
|
|
178
|
+
const totalPassed = filteredLogs.reduce((sum, { log }) => sum + log.summary.passed, 0);
|
|
179
|
+
const totalFailed = filteredLogs.reduce((sum, { log }) => sum + log.summary.failed, 0);
|
|
180
|
+
const totalDuration = filteredLogs.reduce((sum, { log }) => sum + log.summary.totalDurationSeconds, 0);
|
|
181
|
+
console.log(chalk.gray(`
|
|
182
|
+
Showing ${filteredLogs.length} of ${logs.length} runs
|
|
183
|
+
Total: ${totalPassed + totalFailed} issues (${totalPassed} passed, ${totalFailed} failed)
|
|
184
|
+
Combined duration: ${formatDuration(totalDuration)}
|
|
185
|
+
`));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* sequant run - Execute workflow for GitHub issues
|
|
3
3
|
*
|
|
4
|
-
* Runs the Sequant workflow (/spec → /exec → /qa) for one or more issues
|
|
4
|
+
* Runs the Sequant workflow (/spec → /exec → /qa) for one or more issues
|
|
5
|
+
* using the Claude Agent SDK for proper skill invocation.
|
|
5
6
|
*/
|
|
6
7
|
interface RunOptions {
|
|
7
8
|
phases?: string;
|
|
@@ -9,6 +10,14 @@ interface RunOptions {
|
|
|
9
10
|
dryRun?: boolean;
|
|
10
11
|
verbose?: boolean;
|
|
11
12
|
timeout?: number;
|
|
13
|
+
logJson?: boolean;
|
|
14
|
+
logPath?: string;
|
|
15
|
+
qualityLoop?: boolean;
|
|
16
|
+
maxIterations?: number;
|
|
17
|
+
batch?: string[];
|
|
18
|
+
smartTests?: boolean;
|
|
19
|
+
noSmartTests?: boolean;
|
|
20
|
+
testgen?: boolean;
|
|
12
21
|
}
|
|
13
22
|
/**
|
|
14
23
|
* Main run command
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwCH,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA2SD;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CA6Pf"}
|