sequant 1.2.4 → 1.2.7
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 +18 -0
- package/dist/bin/cli.js +10 -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 +33 -1
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/doctor.test.js +84 -1
- 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 +5 -0
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/logs.d.ts +2 -0
- package/dist/src/commands/logs.d.ts.map +1 -1
- package/dist/src/commands/logs.js +41 -0
- package/dist/src/commands/logs.js.map +1 -1
- package/dist/src/commands/run.js +5 -1
- package/dist/src/commands/run.js.map +1 -1
- package/dist/src/commands/stats.d.ts +16 -0
- package/dist/src/commands/stats.d.ts.map +1 -0
- package/dist/src/commands/stats.js +271 -0
- package/dist/src/commands/stats.js.map +1 -0
- package/dist/src/commands/stats.test.d.ts +7 -0
- package/dist/src/commands/stats.test.d.ts.map +1 -0
- package/dist/src/commands/stats.test.js +218 -0
- package/dist/src/commands/stats.test.js.map +1 -0
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +2 -2
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/lib/settings.d.ts +17 -0
- package/dist/src/lib/settings.d.ts.map +1 -1
- package/dist/src/lib/settings.js +9 -0
- package/dist/src/lib/settings.js.map +1 -1
- package/dist/src/lib/system.d.ts +26 -0
- package/dist/src/lib/system.d.ts.map +1 -1
- package/dist/src/lib/system.js +72 -1
- package/dist/src/lib/system.js.map +1 -1
- package/dist/src/lib/workflow/log-rotation.d.ts +138 -0
- package/dist/src/lib/workflow/log-rotation.d.ts.map +1 -0
- package/dist/src/lib/workflow/log-rotation.js +232 -0
- package/dist/src/lib/workflow/log-rotation.js.map +1 -0
- package/dist/src/lib/workflow/log-rotation.test.d.ts +7 -0
- package/dist/src/lib/workflow/log-rotation.test.d.ts.map +1 -0
- package/dist/src/lib/workflow/log-rotation.test.js +248 -0
- package/dist/src/lib/workflow/log-rotation.test.js.map +1 -0
- package/dist/src/lib/workflow/log-writer.d.ts +6 -0
- package/dist/src/lib/workflow/log-writer.d.ts.map +1 -1
- package/dist/src/lib/workflow/log-writer.js +12 -0
- package/dist/src/lib/workflow/log-writer.js.map +1 -1
- package/dist/src/lib/workflow/log-writer.test.js +4 -1
- package/dist/src/lib/workflow/log-writer.test.js.map +1 -1
- package/package.json +1 -1
- package/templates/skills/exec/SKILL.md +75 -0
- package/templates/skills/qa/SKILL.md +8 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for stats command
|
|
3
|
+
*
|
|
4
|
+
* Tests the aggregate statistics functionality.
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
7
|
+
import * as fs from "fs";
|
|
8
|
+
import { statsCommand } from "./stats.js";
|
|
9
|
+
// Mock fs module before imports
|
|
10
|
+
vi.mock("fs");
|
|
11
|
+
// Mock path module to control joins
|
|
12
|
+
vi.mock("path", async () => {
|
|
13
|
+
const actual = await vi.importActual("path");
|
|
14
|
+
return {
|
|
15
|
+
...actual,
|
|
16
|
+
join: (...args) => args.join("/"),
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
describe("statsCommand", () => {
|
|
20
|
+
const mockLog = {
|
|
21
|
+
version: 1,
|
|
22
|
+
runId: "12345678-1234-4234-a234-123456789abc",
|
|
23
|
+
startTime: "2024-01-15T10:00:00.000Z",
|
|
24
|
+
endTime: "2024-01-15T10:05:00.000Z",
|
|
25
|
+
config: {
|
|
26
|
+
phases: ["spec", "exec", "qa"],
|
|
27
|
+
sequential: false,
|
|
28
|
+
qualityLoop: false,
|
|
29
|
+
maxIterations: 3,
|
|
30
|
+
},
|
|
31
|
+
issues: [
|
|
32
|
+
{
|
|
33
|
+
issueNumber: 123,
|
|
34
|
+
title: "Test Issue 1",
|
|
35
|
+
labels: ["bug"],
|
|
36
|
+
status: "success",
|
|
37
|
+
phases: [
|
|
38
|
+
{
|
|
39
|
+
phase: "spec",
|
|
40
|
+
issueNumber: 123,
|
|
41
|
+
startTime: "2024-01-15T10:00:00.000Z",
|
|
42
|
+
endTime: "2024-01-15T10:01:00.000Z",
|
|
43
|
+
durationSeconds: 60,
|
|
44
|
+
status: "success",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
phase: "exec",
|
|
48
|
+
issueNumber: 123,
|
|
49
|
+
startTime: "2024-01-15T10:01:00.000Z",
|
|
50
|
+
endTime: "2024-01-15T10:03:00.000Z",
|
|
51
|
+
durationSeconds: 120,
|
|
52
|
+
status: "success",
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
totalDurationSeconds: 180,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
issueNumber: 456,
|
|
59
|
+
title: "Test Issue 2",
|
|
60
|
+
labels: ["feature"],
|
|
61
|
+
status: "failure",
|
|
62
|
+
phases: [
|
|
63
|
+
{
|
|
64
|
+
phase: "spec",
|
|
65
|
+
issueNumber: 456,
|
|
66
|
+
startTime: "2024-01-15T10:03:00.000Z",
|
|
67
|
+
endTime: "2024-01-15T10:04:00.000Z",
|
|
68
|
+
durationSeconds: 60,
|
|
69
|
+
status: "success",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
phase: "exec",
|
|
73
|
+
issueNumber: 456,
|
|
74
|
+
startTime: "2024-01-15T10:04:00.000Z",
|
|
75
|
+
endTime: "2024-01-15T10:05:00.000Z",
|
|
76
|
+
durationSeconds: 60,
|
|
77
|
+
status: "failure",
|
|
78
|
+
error: "Build failed",
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
totalDurationSeconds: 120,
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
summary: {
|
|
85
|
+
totalIssues: 2,
|
|
86
|
+
passed: 1,
|
|
87
|
+
failed: 1,
|
|
88
|
+
totalDurationSeconds: 300,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
let consoleSpy;
|
|
92
|
+
beforeEach(() => {
|
|
93
|
+
vi.clearAllMocks();
|
|
94
|
+
consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
95
|
+
});
|
|
96
|
+
afterEach(() => {
|
|
97
|
+
consoleSpy.mockRestore();
|
|
98
|
+
});
|
|
99
|
+
describe("with no logs", () => {
|
|
100
|
+
beforeEach(() => {
|
|
101
|
+
fs.existsSync.mockReturnValue(true);
|
|
102
|
+
fs.readdirSync.mockReturnValue([]);
|
|
103
|
+
});
|
|
104
|
+
it("should show no logs message for human output", async () => {
|
|
105
|
+
await statsCommand({});
|
|
106
|
+
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("No logs found"));
|
|
107
|
+
});
|
|
108
|
+
it("should output error JSON for --json", async () => {
|
|
109
|
+
await statsCommand({ json: true });
|
|
110
|
+
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('"error"'));
|
|
111
|
+
});
|
|
112
|
+
it("should output header only for --csv", async () => {
|
|
113
|
+
await statsCommand({ csv: true });
|
|
114
|
+
expect(consoleSpy).toHaveBeenCalledWith("runId,startTime,duration,issues,passed,failed,phases");
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe("with logs", () => {
|
|
118
|
+
beforeEach(() => {
|
|
119
|
+
fs.existsSync.mockReturnValue(true);
|
|
120
|
+
fs.readdirSync.mockReturnValue([
|
|
121
|
+
"run-2024-01-15-abc.json",
|
|
122
|
+
]);
|
|
123
|
+
fs.readFileSync.mockImplementation(() => JSON.stringify(mockLog));
|
|
124
|
+
});
|
|
125
|
+
it("should show statistics for human output", async () => {
|
|
126
|
+
await statsCommand({});
|
|
127
|
+
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("Sequant Run Statistics"));
|
|
128
|
+
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("Total runs analyzed: 1"));
|
|
129
|
+
});
|
|
130
|
+
it("should output valid JSON for --json", async () => {
|
|
131
|
+
await statsCommand({ json: true });
|
|
132
|
+
const output = consoleSpy.mock.calls[0][0];
|
|
133
|
+
const parsed = JSON.parse(output);
|
|
134
|
+
expect(parsed.totalRuns).toBe(1);
|
|
135
|
+
expect(parsed.totalIssues).toBe(2);
|
|
136
|
+
expect(parsed.passed).toBe(1);
|
|
137
|
+
expect(parsed.failed).toBe(1);
|
|
138
|
+
expect(parsed.successRate).toBe(50);
|
|
139
|
+
});
|
|
140
|
+
it("should output valid CSV for --csv", async () => {
|
|
141
|
+
await statsCommand({ csv: true });
|
|
142
|
+
const output = consoleSpy.mock.calls[0][0];
|
|
143
|
+
const lines = output.split("\n");
|
|
144
|
+
expect(lines[0]).toBe("runId,startTime,duration,issues,passed,failed,phases");
|
|
145
|
+
expect(lines[1]).toContain(mockLog.runId);
|
|
146
|
+
expect(lines[1]).toContain('"spec;exec;qa"');
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
describe("statistics calculation", () => {
|
|
150
|
+
const mockLog2 = {
|
|
151
|
+
...mockLog,
|
|
152
|
+
runId: "87654321-4321-4321-a321-cba987654321",
|
|
153
|
+
summary: {
|
|
154
|
+
totalIssues: 3,
|
|
155
|
+
passed: 3,
|
|
156
|
+
failed: 0,
|
|
157
|
+
totalDurationSeconds: 600,
|
|
158
|
+
},
|
|
159
|
+
issues: [
|
|
160
|
+
{
|
|
161
|
+
issueNumber: 789,
|
|
162
|
+
title: "Test Issue 3",
|
|
163
|
+
labels: [],
|
|
164
|
+
status: "success",
|
|
165
|
+
phases: [
|
|
166
|
+
{
|
|
167
|
+
phase: "spec",
|
|
168
|
+
issueNumber: 789,
|
|
169
|
+
startTime: "2024-01-16T10:00:00.000Z",
|
|
170
|
+
endTime: "2024-01-16T10:02:00.000Z",
|
|
171
|
+
durationSeconds: 120,
|
|
172
|
+
status: "success",
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
totalDurationSeconds: 120,
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
};
|
|
179
|
+
beforeEach(() => {
|
|
180
|
+
fs.existsSync.mockReturnValue(true);
|
|
181
|
+
fs.readdirSync.mockReturnValue([
|
|
182
|
+
"run-1.json",
|
|
183
|
+
"run-2.json",
|
|
184
|
+
]);
|
|
185
|
+
fs.readFileSync.mockImplementation((path) => {
|
|
186
|
+
if (path.includes("run-1"))
|
|
187
|
+
return JSON.stringify(mockLog);
|
|
188
|
+
return JSON.stringify(mockLog2);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
it("should aggregate statistics across multiple logs", async () => {
|
|
192
|
+
await statsCommand({ json: true });
|
|
193
|
+
const output = consoleSpy.mock.calls[0][0];
|
|
194
|
+
const parsed = JSON.parse(output);
|
|
195
|
+
expect(parsed.totalRuns).toBe(2);
|
|
196
|
+
// mockLog has 2 issues (1 pass, 1 fail), mockLog2 has 1 issue (1 pass)
|
|
197
|
+
expect(parsed.totalIssues).toBe(3);
|
|
198
|
+
expect(parsed.passed).toBe(2);
|
|
199
|
+
expect(parsed.failed).toBe(1);
|
|
200
|
+
});
|
|
201
|
+
it("should calculate phase durations", async () => {
|
|
202
|
+
await statsCommand({ json: true });
|
|
203
|
+
const output = consoleSpy.mock.calls[0][0];
|
|
204
|
+
const parsed = JSON.parse(output);
|
|
205
|
+
// spec phase: 60s + 60s + 120s = 240s across 3 runs
|
|
206
|
+
expect(parsed.phaseDurations.spec).toBeDefined();
|
|
207
|
+
expect(parsed.phaseDurations.spec.count).toBe(3);
|
|
208
|
+
});
|
|
209
|
+
it("should track common failures", async () => {
|
|
210
|
+
await statsCommand({ json: true });
|
|
211
|
+
const output = consoleSpy.mock.calls[0][0];
|
|
212
|
+
const parsed = JSON.parse(output);
|
|
213
|
+
expect(Object.keys(parsed.commonFailures).length).toBeGreaterThan(0);
|
|
214
|
+
expect(parsed.commonFailures["exec: Build failed"]).toBe(1);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
//# sourceMappingURL=stats.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.test.js","sourceRoot":"","sources":["../../../src/commands/stats.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAQD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAQD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkNzE"}
|
|
@@ -28,8 +28,8 @@ export async function updateCommand(options) {
|
|
|
28
28
|
console.log(chalk.gray(`Dev URL: ${tokens.DEV_URL || "(not set)"}\n`));
|
|
29
29
|
}
|
|
30
30
|
else {
|
|
31
|
-
//
|
|
32
|
-
console.log(chalk.
|
|
31
|
+
// First-time config setup
|
|
32
|
+
console.log(chalk.blue("📝 Setting up configuration (one-time setup)\n"));
|
|
33
33
|
const stackConfig = getStackConfig(manifest.stack);
|
|
34
34
|
const defaultDevUrl = stackConfig.devUrl;
|
|
35
35
|
if (options.force) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAa/D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAE1D,uBAAuB;IACvB,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CACrE,CAAC;QACF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAEtD,sDAAsD;IACtD,IAAI,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IAC/B,IAAI,MAA8B,CAAC;IAEnC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,OAAO,IAAI,WAAW,IAAI,CAAC,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,17 @@
|
|
|
14
14
|
export declare const SETTINGS_PATH = ".sequant/settings.json";
|
|
15
15
|
/** Current settings schema version */
|
|
16
16
|
export declare const SETTINGS_VERSION = "1.0";
|
|
17
|
+
/**
|
|
18
|
+
* Log rotation settings
|
|
19
|
+
*/
|
|
20
|
+
export interface RotationSettings {
|
|
21
|
+
/** Enable automatic log rotation (default: true) */
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
/** Maximum total size in MB before rotation (default: 10) */
|
|
24
|
+
maxSizeMB: number;
|
|
25
|
+
/** Maximum file count before rotation (default: 100) */
|
|
26
|
+
maxFiles: number;
|
|
27
|
+
}
|
|
17
28
|
/**
|
|
18
29
|
* Run command settings
|
|
19
30
|
*/
|
|
@@ -34,6 +45,8 @@ export interface RunSettings {
|
|
|
34
45
|
maxIterations: number;
|
|
35
46
|
/** Enable smart test detection */
|
|
36
47
|
smartTests: boolean;
|
|
48
|
+
/** Log rotation settings */
|
|
49
|
+
rotation: RotationSettings;
|
|
37
50
|
}
|
|
38
51
|
/**
|
|
39
52
|
* Full settings schema
|
|
@@ -44,6 +57,10 @@ export interface SequantSettings {
|
|
|
44
57
|
/** Run command settings */
|
|
45
58
|
run: RunSettings;
|
|
46
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Default rotation settings
|
|
62
|
+
*/
|
|
63
|
+
export declare const DEFAULT_ROTATION_SETTINGS: RotationSettings;
|
|
47
64
|
/**
|
|
48
65
|
* Default settings
|
|
49
66
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/lib/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,0CAA0C;AAC1C,eAAO,MAAM,aAAa,2BAA2B,CAAC;AAEtD,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,UAAU,EAAE,OAAO,CAAC;IACpB,qCAAqC;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,UAAU,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/lib/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,0CAA0C;AAC1C,eAAO,MAAM,aAAa,2BAA2B,CAAC;AAEtD,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,UAAU,EAAE,OAAO,CAAC;IACpB,qCAAqC;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,GAAG,EAAE,WAAW,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,gBAIvC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAa9B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC,CAoB5D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3E;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAEtD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3D"}
|
package/dist/src/lib/settings.js
CHANGED
|
@@ -16,6 +16,14 @@ import { dirname } from "path";
|
|
|
16
16
|
export const SETTINGS_PATH = ".sequant/settings.json";
|
|
17
17
|
/** Current settings schema version */
|
|
18
18
|
export const SETTINGS_VERSION = "1.0";
|
|
19
|
+
/**
|
|
20
|
+
* Default rotation settings
|
|
21
|
+
*/
|
|
22
|
+
export const DEFAULT_ROTATION_SETTINGS = {
|
|
23
|
+
enabled: true,
|
|
24
|
+
maxSizeMB: 10,
|
|
25
|
+
maxFiles: 100,
|
|
26
|
+
};
|
|
19
27
|
/**
|
|
20
28
|
* Default settings
|
|
21
29
|
*/
|
|
@@ -30,6 +38,7 @@ export const DEFAULT_SETTINGS = {
|
|
|
30
38
|
qualityLoop: false,
|
|
31
39
|
maxIterations: 3,
|
|
32
40
|
smartTests: true,
|
|
41
|
+
rotation: DEFAULT_ROTATION_SETTINGS,
|
|
33
42
|
},
|
|
34
43
|
};
|
|
35
44
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/lib/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,0CAA0C;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAEtD,sCAAsC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/lib/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,0CAA0C;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAEtD,sCAAsC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAgDtC;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAqB;IACzD,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,GAAG;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,OAAO,EAAE,gBAAgB;IACzB,GAAG,EAAE;QACH,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,eAAe;QACxB,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,yBAAyB;KACpC;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA6B,CAAC;QAE/D,iDAAiD;QACjD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO;YACnD,GAAG,EAAE;gBACH,GAAG,gBAAgB,CAAC,GAAG;gBACvB,GAAG,MAAM,CAAC,GAAG;aACd;SACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gBAAgB,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAyB;IAC1D,MAAM,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IACxC,MAAM,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,YAAY,CAAC,gBAAgB,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/src/lib/system.d.ts
CHANGED
|
@@ -21,4 +21,30 @@ export declare function isNativeWindows(): boolean;
|
|
|
21
21
|
* Get platform-specific install hint for a package
|
|
22
22
|
*/
|
|
23
23
|
export declare function getInstallHint(pkg: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* MCP server information for Sequant integrations
|
|
26
|
+
*/
|
|
27
|
+
export interface McpServerInfo {
|
|
28
|
+
name: string;
|
|
29
|
+
purpose: string;
|
|
30
|
+
skills: string[];
|
|
31
|
+
installUrl: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Optional MCP servers that enhance Sequant functionality
|
|
35
|
+
*/
|
|
36
|
+
export declare const OPTIONAL_MCP_SERVERS: McpServerInfo[];
|
|
37
|
+
/**
|
|
38
|
+
* Get the path to Claude Desktop config file
|
|
39
|
+
*/
|
|
40
|
+
export declare function getClaudeConfigPath(): string;
|
|
41
|
+
/**
|
|
42
|
+
* Read configured MCP servers from Claude Desktop config
|
|
43
|
+
*/
|
|
44
|
+
export declare function getConfiguredMcpServers(): string[];
|
|
45
|
+
/**
|
|
46
|
+
* Check which optional MCP servers are configured
|
|
47
|
+
* Returns an object with server names as keys and configured status as values
|
|
48
|
+
*/
|
|
49
|
+
export declare function checkOptionalMcpServers(): Record<string, boolean>;
|
|
24
50
|
//# sourceMappingURL=system.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../src/lib/system.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../src/lib/system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,OAAO,CAa/B;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsBlD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAAa,EAqB/C,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAY5C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAYlD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAejE"}
|
package/dist/src/lib/system.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* System utility functions for checking prerequisites
|
|
3
3
|
*/
|
|
4
4
|
import { execSync } from "child_process";
|
|
5
|
+
import fs from "fs";
|
|
5
6
|
/**
|
|
6
7
|
* Check if a command exists on the system
|
|
7
8
|
*/
|
|
@@ -34,7 +35,6 @@ export function isWSL() {
|
|
|
34
35
|
return false;
|
|
35
36
|
}
|
|
36
37
|
try {
|
|
37
|
-
const fs = require("fs");
|
|
38
38
|
const procVersion = fs.readFileSync("/proc/version", "utf8");
|
|
39
39
|
return (procVersion.toLowerCase().includes("microsoft") ||
|
|
40
40
|
procVersion.toLowerCase().includes("wsl"));
|
|
@@ -72,4 +72,75 @@ export function getInstallHint(pkg) {
|
|
|
72
72
|
}
|
|
73
73
|
return pkgHints[platform] || pkgHints["linux"] || `Install ${pkg}`;
|
|
74
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Optional MCP servers that enhance Sequant functionality
|
|
77
|
+
*/
|
|
78
|
+
export const OPTIONAL_MCP_SERVERS = [
|
|
79
|
+
{
|
|
80
|
+
name: "chrome-devtools",
|
|
81
|
+
purpose: "Browser automation for UI testing",
|
|
82
|
+
skills: ["/test", "/testgen", "/loop"],
|
|
83
|
+
installUrl: "https://github.com/anthropics/anthropic-quickstarts/tree/main/mcp-chrome-devtools",
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: "context7",
|
|
87
|
+
purpose: "External library documentation lookup",
|
|
88
|
+
skills: ["/exec", "/fullsolve"],
|
|
89
|
+
installUrl: "https://github.com/upstash/context7",
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: "sequential-thinking",
|
|
93
|
+
purpose: "Complex multi-step reasoning",
|
|
94
|
+
skills: ["/fullsolve"],
|
|
95
|
+
installUrl: "https://github.com/anthropics/anthropic-quickstarts/tree/main/mcp-sequential-thinking",
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
/**
|
|
99
|
+
* Get the path to Claude Desktop config file
|
|
100
|
+
*/
|
|
101
|
+
export function getClaudeConfigPath() {
|
|
102
|
+
const platform = process.platform;
|
|
103
|
+
const home = process.env.HOME || process.env.USERPROFILE || "";
|
|
104
|
+
if (platform === "darwin") {
|
|
105
|
+
return `${home}/Library/Application Support/Claude/claude_desktop_config.json`;
|
|
106
|
+
}
|
|
107
|
+
else if (platform === "win32") {
|
|
108
|
+
return `${process.env.APPDATA}\\Claude\\claude_desktop_config.json`;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Linux
|
|
112
|
+
return `${home}/.config/claude/claude_desktop_config.json`;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Read configured MCP servers from Claude Desktop config
|
|
117
|
+
*/
|
|
118
|
+
export function getConfiguredMcpServers() {
|
|
119
|
+
const configPath = getClaudeConfigPath();
|
|
120
|
+
try {
|
|
121
|
+
const content = fs.readFileSync(configPath, "utf8");
|
|
122
|
+
const config = JSON.parse(content);
|
|
123
|
+
const servers = config.mcpServers || {};
|
|
124
|
+
return Object.keys(servers);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// Config file doesn't exist or is invalid
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Check which optional MCP servers are configured
|
|
133
|
+
* Returns an object with server names as keys and configured status as values
|
|
134
|
+
*/
|
|
135
|
+
export function checkOptionalMcpServers() {
|
|
136
|
+
const configuredServers = getConfiguredMcpServers();
|
|
137
|
+
const result = {};
|
|
138
|
+
for (const server of OPTIONAL_MCP_SERVERS) {
|
|
139
|
+
// Check for various naming conventions
|
|
140
|
+
const found = configuredServers.some((configured) => configured.toLowerCase().includes(server.name.toLowerCase()) ||
|
|
141
|
+
server.name.toLowerCase().includes(configured.toLowerCase()));
|
|
142
|
+
result[server.name] = found;
|
|
143
|
+
}
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
75
146
|
//# sourceMappingURL=system.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/lib/system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/lib/system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log rotation management for workflow run logs
|
|
3
|
+
*
|
|
4
|
+
* Implements automatic log rotation based on size and file count thresholds.
|
|
5
|
+
* Deletes oldest logs first until within limits.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { rotateIfNeeded, getLogStats, manualRotate } from './log-rotation';
|
|
10
|
+
*
|
|
11
|
+
* // Auto-rotate after a run
|
|
12
|
+
* await rotateIfNeeded('.sequant/logs');
|
|
13
|
+
*
|
|
14
|
+
* // Get statistics
|
|
15
|
+
* const stats = await getLogStats('.sequant/logs');
|
|
16
|
+
* console.log(`${stats.fileCount} files, ${stats.totalSizeMB.toFixed(2)}MB`);
|
|
17
|
+
*
|
|
18
|
+
* // Manual rotation with dry-run
|
|
19
|
+
* const result = await manualRotate('.sequant/logs', { dryRun: true });
|
|
20
|
+
* console.log(`Would delete ${result.deletedCount} files`);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Rotation settings
|
|
25
|
+
*/
|
|
26
|
+
export interface RotationSettings {
|
|
27
|
+
/** Enable automatic rotation (default: true) */
|
|
28
|
+
enabled: boolean;
|
|
29
|
+
/** Maximum total size in MB before rotation (default: 10) */
|
|
30
|
+
maxSizeMB: number;
|
|
31
|
+
/** Maximum file count before rotation (default: 100) */
|
|
32
|
+
maxFiles: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Default rotation settings
|
|
36
|
+
*/
|
|
37
|
+
export declare const DEFAULT_ROTATION_SETTINGS: RotationSettings;
|
|
38
|
+
/**
|
|
39
|
+
* Log directory statistics
|
|
40
|
+
*/
|
|
41
|
+
export interface LogStats {
|
|
42
|
+
/** Total size in bytes */
|
|
43
|
+
totalSizeBytes: number;
|
|
44
|
+
/** Total size in megabytes */
|
|
45
|
+
totalSizeMB: number;
|
|
46
|
+
/** Number of log files */
|
|
47
|
+
fileCount: number;
|
|
48
|
+
/** Oldest log file */
|
|
49
|
+
oldestFile: string | null;
|
|
50
|
+
/** Newest log file */
|
|
51
|
+
newestFile: string | null;
|
|
52
|
+
/** Whether size threshold is exceeded */
|
|
53
|
+
exceedsSizeThreshold: boolean;
|
|
54
|
+
/** Whether file count threshold is exceeded */
|
|
55
|
+
exceedsCountThreshold: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Result of a rotation operation
|
|
59
|
+
*/
|
|
60
|
+
export interface RotationResult {
|
|
61
|
+
/** Files that were deleted (or would be in dry-run) */
|
|
62
|
+
deletedFiles: string[];
|
|
63
|
+
/** Number of files deleted */
|
|
64
|
+
deletedCount: number;
|
|
65
|
+
/** Bytes reclaimed (or would be in dry-run) */
|
|
66
|
+
bytesReclaimed: number;
|
|
67
|
+
/** Whether rotation was performed */
|
|
68
|
+
rotated: boolean;
|
|
69
|
+
/** Error message if rotation failed */
|
|
70
|
+
error?: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* File info for sorting by age
|
|
74
|
+
*/
|
|
75
|
+
interface LogFileInfo {
|
|
76
|
+
filename: string;
|
|
77
|
+
filePath: string;
|
|
78
|
+
mtime: Date;
|
|
79
|
+
size: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get list of log files with metadata, sorted by modification time (oldest first)
|
|
83
|
+
*/
|
|
84
|
+
export declare function getLogFiles(logDir: string): LogFileInfo[];
|
|
85
|
+
/**
|
|
86
|
+
* Get statistics about the log directory
|
|
87
|
+
*
|
|
88
|
+
* @param logDir - Path to log directory
|
|
89
|
+
* @param settings - Rotation settings for threshold comparison
|
|
90
|
+
* @returns Log directory statistics
|
|
91
|
+
*/
|
|
92
|
+
export declare function getLogStats(logDir: string, settings?: RotationSettings): LogStats;
|
|
93
|
+
/**
|
|
94
|
+
* Calculate which files need to be deleted to meet thresholds
|
|
95
|
+
*
|
|
96
|
+
* Applies a 10% buffer (stops at 90% of threshold) to prevent
|
|
97
|
+
* immediate re-rotation on next run.
|
|
98
|
+
*
|
|
99
|
+
* @param logDir - Path to log directory
|
|
100
|
+
* @param settings - Rotation settings
|
|
101
|
+
* @returns List of files to delete (oldest first)
|
|
102
|
+
*/
|
|
103
|
+
export declare function getFilesToDelete(logDir: string, settings: RotationSettings): LogFileInfo[];
|
|
104
|
+
/**
|
|
105
|
+
* Rotate logs if needed (automatic rotation)
|
|
106
|
+
*
|
|
107
|
+
* Called after LogWriter.finalize() to clean up old logs.
|
|
108
|
+
*
|
|
109
|
+
* @param logDir - Path to log directory
|
|
110
|
+
* @param settings - Rotation settings
|
|
111
|
+
* @returns Rotation result
|
|
112
|
+
*/
|
|
113
|
+
export declare function rotateIfNeeded(logDir: string, settings?: RotationSettings): RotationResult;
|
|
114
|
+
/**
|
|
115
|
+
* Options for manual rotation
|
|
116
|
+
*/
|
|
117
|
+
export interface ManualRotateOptions {
|
|
118
|
+
/** Dry run - don't actually delete files */
|
|
119
|
+
dryRun?: boolean;
|
|
120
|
+
/** Custom rotation settings */
|
|
121
|
+
settings?: RotationSettings;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Manual rotation triggered by CLI command
|
|
125
|
+
*
|
|
126
|
+
* Supports dry-run mode to preview what would be deleted.
|
|
127
|
+
*
|
|
128
|
+
* @param logDir - Path to log directory
|
|
129
|
+
* @param options - Manual rotation options
|
|
130
|
+
* @returns Rotation result
|
|
131
|
+
*/
|
|
132
|
+
export declare function manualRotate(logDir: string, options?: ManualRotateOptions): RotationResult;
|
|
133
|
+
/**
|
|
134
|
+
* Format bytes for human-readable display
|
|
135
|
+
*/
|
|
136
|
+
export declare function formatBytes(bytes: number): string;
|
|
137
|
+
export {};
|
|
138
|
+
//# sourceMappingURL=log-rotation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-rotation.d.ts","sourceRoot":"","sources":["../../../../src/lib/workflow/log-rotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,gBAIvC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,sBAAsB;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,yCAAyC;IACzC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,+CAA+C;IAC/C,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AASD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAwBzD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,gBAA4C,GACrD,QAAQ,CA2BV;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,GACzB,WAAW,EAAE,CAqCf;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,gBAA4C,GACrD,cAAc,CA+ChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAwB,GAChC,cAAc,CAyBhB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQjD"}
|