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
|
@@ -0,0 +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;AAQrD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAE3D,+BAA+B;IAC/B,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAC/D,IAAI,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,8EAA8E,CAC/E,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAE5D,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACxC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,kBAAkB;oBAC3B,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;QACrC,IAAI,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5B,KAAK,GAAG,QAAQ,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC/C;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,YAAY,QAAQ,4BAA4B;oBACzD,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,YAAY,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACjD,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE;qBAC3C;iBACF;aACF,CAAC,CAAC;YACH,KAAK,GAAG,cAAc,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,4BAA4B;oBACrC,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;wBAC5C,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;wBAC/B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACnC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;wBAC3B,EAAE,IAAI,EAAE,oCAAoC,EAAE,KAAK,EAAE,SAAS,EAAE;qBACjE;iBACF;aACF,CAAC,CAAC;YACH,KAAK,GAAG,aAAa,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC,CAAC;IAEhD,4BAA4B;IAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;IAEpE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,4BAA4B;gBACrC,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACxD,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAClC,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;IACjC,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAClC,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;IAE/B,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACnD,MAAM,aAAa,CAAC,KAAM,CAAC,CAAC;IAE5B,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACnD,MAAM,cAAc,CAAC,KAAM,CAAC,CAAC;IAE7B,kBAAkB;IAClB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC;;;EAGd,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;;;;OAIpB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;OACvB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;OACvB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;;EAE1B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;;CAE7B,CAAC,CACC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sequant run - Execute workflow for GitHub issues
|
|
3
|
+
*
|
|
4
|
+
* Runs the Sequant workflow (/spec → /exec → /qa) for one or more issues.
|
|
5
|
+
*/
|
|
6
|
+
interface RunOptions {
|
|
7
|
+
phases?: string;
|
|
8
|
+
sequential?: boolean;
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
verbose?: boolean;
|
|
11
|
+
timeout?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Main run command
|
|
15
|
+
*/
|
|
16
|
+
export declare function runCommand(issues: string[], options: RunOptions): Promise<void>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyBH,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;CAClB;AA8ID;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CA+Hf"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sequant run - Execute workflow for GitHub issues
|
|
3
|
+
*
|
|
4
|
+
* Runs the Sequant workflow (/spec → /exec → /qa) for one or more issues.
|
|
5
|
+
*/
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import { spawn, spawnSync } from "child_process";
|
|
8
|
+
import { getManifest } from "../lib/manifest.js";
|
|
9
|
+
/**
|
|
10
|
+
* Check if claude CLI is available
|
|
11
|
+
*/
|
|
12
|
+
function checkClaudeCli() {
|
|
13
|
+
const result = spawnSync("claude", ["--version"], {
|
|
14
|
+
stdio: "pipe",
|
|
15
|
+
shell: true,
|
|
16
|
+
});
|
|
17
|
+
return result.status === 0;
|
|
18
|
+
}
|
|
19
|
+
import { DEFAULT_PHASES, DEFAULT_CONFIG, } from "../lib/workflow/types.js";
|
|
20
|
+
/**
|
|
21
|
+
* Format duration in human-readable format
|
|
22
|
+
*/
|
|
23
|
+
function formatDuration(seconds) {
|
|
24
|
+
if (seconds < 60) {
|
|
25
|
+
return `${seconds.toFixed(1)}s`;
|
|
26
|
+
}
|
|
27
|
+
const mins = Math.floor(seconds / 60);
|
|
28
|
+
const secs = seconds % 60;
|
|
29
|
+
return `${mins}m ${secs.toFixed(0)}s`;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Execute a single phase for an issue using claude CLI
|
|
33
|
+
*/
|
|
34
|
+
async function executePhase(issueNumber, phase, config) {
|
|
35
|
+
const startTime = Date.now();
|
|
36
|
+
if (config.dryRun) {
|
|
37
|
+
// Dry run - just simulate
|
|
38
|
+
if (config.verbose) {
|
|
39
|
+
console.log(chalk.gray(` Would execute: /${phase} ${issueNumber}`));
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
phase,
|
|
43
|
+
success: true,
|
|
44
|
+
durationSeconds: 0,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Execute claude CLI with the skill
|
|
48
|
+
return new Promise((resolve) => {
|
|
49
|
+
const command = `/${phase} ${issueNumber}`;
|
|
50
|
+
const timeout = config.phaseTimeout * 1000;
|
|
51
|
+
if (config.verbose) {
|
|
52
|
+
console.log(chalk.gray(` Executing: ${command}`));
|
|
53
|
+
}
|
|
54
|
+
const proc = spawn("claude", ["--print", "--dangerously-skip-permissions", "-p", command], {
|
|
55
|
+
stdio: config.verbose ? "inherit" : "pipe",
|
|
56
|
+
shell: true,
|
|
57
|
+
timeout,
|
|
58
|
+
});
|
|
59
|
+
let killed = false;
|
|
60
|
+
const timer = setTimeout(() => {
|
|
61
|
+
killed = true;
|
|
62
|
+
proc.kill("SIGTERM");
|
|
63
|
+
}, timeout);
|
|
64
|
+
proc.on("close", (code) => {
|
|
65
|
+
clearTimeout(timer);
|
|
66
|
+
const durationSeconds = (Date.now() - startTime) / 1000;
|
|
67
|
+
if (killed) {
|
|
68
|
+
resolve({
|
|
69
|
+
phase,
|
|
70
|
+
success: false,
|
|
71
|
+
durationSeconds,
|
|
72
|
+
error: `Timeout after ${config.phaseTimeout}s`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
else if (code === 0) {
|
|
76
|
+
resolve({
|
|
77
|
+
phase,
|
|
78
|
+
success: true,
|
|
79
|
+
durationSeconds,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
resolve({
|
|
84
|
+
phase,
|
|
85
|
+
success: false,
|
|
86
|
+
durationSeconds,
|
|
87
|
+
error: `Exit code ${code}`,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
proc.on("error", (err) => {
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
const durationSeconds = (Date.now() - startTime) / 1000;
|
|
94
|
+
resolve({
|
|
95
|
+
phase,
|
|
96
|
+
success: false,
|
|
97
|
+
durationSeconds,
|
|
98
|
+
error: err.message,
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Execute all phases for a single issue
|
|
105
|
+
*/
|
|
106
|
+
async function runIssue(issueNumber, config) {
|
|
107
|
+
const startTime = Date.now();
|
|
108
|
+
const phaseResults = [];
|
|
109
|
+
console.log(chalk.blue(`\n Issue #${issueNumber}`));
|
|
110
|
+
for (const phase of config.phases) {
|
|
111
|
+
console.log(chalk.gray(` ⏳ ${phase}...`));
|
|
112
|
+
const result = await executePhase(issueNumber, phase, config);
|
|
113
|
+
phaseResults.push(result);
|
|
114
|
+
if (result.success) {
|
|
115
|
+
const duration = result.durationSeconds
|
|
116
|
+
? ` (${formatDuration(result.durationSeconds)})`
|
|
117
|
+
: "";
|
|
118
|
+
console.log(chalk.green(` ✓ ${phase}${duration}`));
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.log(chalk.red(` ✗ ${phase}: ${result.error}`));
|
|
122
|
+
// Stop on first failure
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const durationSeconds = (Date.now() - startTime) / 1000;
|
|
127
|
+
const success = phaseResults.every((r) => r.success);
|
|
128
|
+
return {
|
|
129
|
+
issueNumber,
|
|
130
|
+
success,
|
|
131
|
+
phaseResults,
|
|
132
|
+
durationSeconds,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Main run command
|
|
137
|
+
*/
|
|
138
|
+
export async function runCommand(issues, options) {
|
|
139
|
+
console.log(chalk.blue("\n🚀 Sequant Workflow Execution\n"));
|
|
140
|
+
// Check if initialized
|
|
141
|
+
const manifest = await getManifest();
|
|
142
|
+
if (!manifest) {
|
|
143
|
+
console.log(chalk.red("❌ Sequant is not initialized. Run `sequant init` first."));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Check if claude CLI is available (skip for dry-run)
|
|
147
|
+
if (!options.dryRun && !checkClaudeCli()) {
|
|
148
|
+
console.log(chalk.red("❌ Claude CLI not found. Install it from https://claude.ai/code"));
|
|
149
|
+
console.log(chalk.gray(" Or use --dry-run to preview without execution."));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
// Parse issue numbers
|
|
153
|
+
const issueNumbers = issues
|
|
154
|
+
.map((i) => parseInt(i, 10))
|
|
155
|
+
.filter((n) => !isNaN(n));
|
|
156
|
+
if (issueNumbers.length === 0) {
|
|
157
|
+
console.log(chalk.red("❌ No valid issue numbers provided."));
|
|
158
|
+
console.log(chalk.gray("\nUsage: sequant run <issues...> [options]"));
|
|
159
|
+
console.log(chalk.gray("Example: sequant run 1 2 3 --sequential"));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Build config
|
|
163
|
+
const config = {
|
|
164
|
+
...DEFAULT_CONFIG,
|
|
165
|
+
phases: options.phases
|
|
166
|
+
? options.phases.split(",").map((p) => p.trim())
|
|
167
|
+
: DEFAULT_PHASES,
|
|
168
|
+
sequential: options.sequential ?? false,
|
|
169
|
+
dryRun: options.dryRun ?? false,
|
|
170
|
+
verbose: options.verbose ?? false,
|
|
171
|
+
phaseTimeout: options.timeout ?? DEFAULT_CONFIG.phaseTimeout,
|
|
172
|
+
};
|
|
173
|
+
// Display configuration
|
|
174
|
+
console.log(chalk.gray(` Stack: ${manifest.stack}`));
|
|
175
|
+
console.log(chalk.gray(` Phases: ${config.phases.join(" → ")}`));
|
|
176
|
+
console.log(chalk.gray(` Mode: ${config.sequential ? "sequential" : "parallel"}`));
|
|
177
|
+
if (config.dryRun) {
|
|
178
|
+
console.log(chalk.yellow(` ⚠️ DRY RUN - no actual execution`));
|
|
179
|
+
}
|
|
180
|
+
console.log(chalk.gray(` Issues: ${issueNumbers.map((n) => `#${n}`).join(", ")}`));
|
|
181
|
+
// Execute
|
|
182
|
+
const results = [];
|
|
183
|
+
if (config.sequential) {
|
|
184
|
+
// Sequential execution
|
|
185
|
+
for (const issueNumber of issueNumbers) {
|
|
186
|
+
const result = await runIssue(issueNumber, config);
|
|
187
|
+
results.push(result);
|
|
188
|
+
if (!result.success) {
|
|
189
|
+
console.log(chalk.yellow(`\n ⚠️ Issue #${issueNumber} failed, stopping sequential execution`));
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// Parallel execution (for now, just run sequentially but don't stop on failure)
|
|
196
|
+
// TODO: Add proper parallel execution with listr2
|
|
197
|
+
for (const issueNumber of issueNumbers) {
|
|
198
|
+
const result = await runIssue(issueNumber, config);
|
|
199
|
+
results.push(result);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Summary
|
|
203
|
+
console.log(chalk.blue("\n" + "━".repeat(50)));
|
|
204
|
+
console.log(chalk.blue(" Summary"));
|
|
205
|
+
console.log(chalk.blue("━".repeat(50)));
|
|
206
|
+
const passed = results.filter((r) => r.success).length;
|
|
207
|
+
const failed = results.filter((r) => !r.success).length;
|
|
208
|
+
console.log(chalk.gray(`\n Results: ${chalk.green(`${passed} passed`)}, ${chalk.red(`${failed} failed`)}`));
|
|
209
|
+
for (const result of results) {
|
|
210
|
+
const status = result.success ? chalk.green("✓") : chalk.red("✗");
|
|
211
|
+
const duration = result.durationSeconds
|
|
212
|
+
? chalk.gray(` (${formatDuration(result.durationSeconds)})`)
|
|
213
|
+
: "";
|
|
214
|
+
const phases = result.phaseResults
|
|
215
|
+
.map((p) => (p.success ? chalk.green(p.phase) : chalk.red(p.phase)))
|
|
216
|
+
.join(" → ");
|
|
217
|
+
console.log(` ${status} #${result.issueNumber}: ${phases}${duration}`);
|
|
218
|
+
}
|
|
219
|
+
console.log("");
|
|
220
|
+
if (config.dryRun) {
|
|
221
|
+
console.log(chalk.yellow(" ℹ️ This was a dry run. Use without --dry-run to execute."));
|
|
222
|
+
console.log("");
|
|
223
|
+
}
|
|
224
|
+
// Exit with error if any failed
|
|
225
|
+
if (failed > 0 && !config.dryRun) {
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,SAAS,cAAc;IACrB,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;QAChD,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AACD,OAAO,EAEL,cAAc,EACd,cAAc,GAIf,MAAM,0BAA0B,CAAC;AAUlC;;GAEG;AACH,SAAS,cAAc,CAAC,OAAe;IACrC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QACjB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,CAAC;IAC1B,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,WAAmB,EACnB,KAAY,EACZ,MAAuB;IAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,0BAA0B;QAC1B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,OAAO;YACL,KAAK;YACL,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,CAAC;SACnB,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;QAE3C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAChB,QAAQ,EACR,CAAC,SAAS,EAAE,gCAAgC,EAAE,IAAI,EAAE,OAAO,CAAC,EAC5D;YACE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YAC1C,KAAK,EAAE,IAAI;YACX,OAAO;SACR,CACF,CAAC;QAEF,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,GAAG,IAAI,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC,EAAE,OAAO,CAAC,CAAC;QAEZ,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;YAExD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC;oBACN,KAAK;oBACL,OAAO,EAAE,KAAK;oBACd,eAAe;oBACf,KAAK,EAAE,iBAAiB,MAAM,CAAC,YAAY,GAAG;iBAC/C,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC;oBACN,KAAK;oBACL,OAAO,EAAE,IAAI;oBACb,eAAe;iBAChB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC;oBACN,KAAK;oBACL,OAAO,EAAE,KAAK;oBACd,eAAe;oBACf,KAAK,EAAE,aAAa,IAAI,EAAE;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;YACxD,OAAO,CAAC;gBACN,KAAK;gBACL,OAAO,EAAE,KAAK;gBACd,eAAe;gBACf,KAAK,EAAE,GAAG,CAAC,OAAO;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,QAAQ,CACrB,WAAmB,EACnB,MAAuB;IAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,YAAY,GAAkB,EAAE,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC,CAAC;IAErD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9D,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe;gBACrC,CAAC,CAAC,KAAK,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG;gBAChD,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC1D,wBAAwB;YACxB,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;IACxD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAErD,OAAO;QACL,WAAW;QACX,OAAO;QACP,YAAY;QACZ,eAAe;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAgB,EAChB,OAAmB;IAEnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAE7D,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,sDAAsD;IACtD,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,gEAAgE,CACjE,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,MAAM,YAAY,GAAG,MAAM;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,eAAe;IACf,MAAM,MAAM,GAAoB;QAC9B,GAAG,cAAc;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM;YACpB,CAAC,CAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAa;YAC7D,CAAC,CAAC,cAAc;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;QACvC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;QACjC,YAAY,EAAE,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,YAAY;KAC7D,CAAC;IAEF,wBAAwB;IACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CACvE,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,aAAa,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CACvE,CAAC;IAEF,UAAU;IACV,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,uBAAuB;QACvB,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAErB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,kBAAkB,WAAW,wCAAwC,CACtE,CACF,CAAC;gBACF,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,gFAAgF;QAChF,kDAAkD;QAClD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAExC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAExD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,gBAAgB,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,SAAS,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,SAAS,CAAC,EAAE,CACpF,CACF,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe;YACrC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC;YAC5D,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aACnE,IAAI,CAAC,KAAK,CAAC,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,KAAK,MAAM,CAAC,WAAW,KAAK,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,6DAA6D,CAC9D,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,gCAAgC;IAChC,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAyCnD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sequant status - Show version and configuration
|
|
3
|
+
*/
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { getManifest } from "../lib/manifest.js";
|
|
6
|
+
import { fileExists } from "../lib/fs.js";
|
|
7
|
+
import { readdir } from "fs/promises";
|
|
8
|
+
export async function statusCommand() {
|
|
9
|
+
console.log(chalk.bold("\n📊 Sequant Status\n"));
|
|
10
|
+
// Package version
|
|
11
|
+
console.log(chalk.gray("Package version: 0.1.0"));
|
|
12
|
+
// Check initialization
|
|
13
|
+
const manifest = await getManifest();
|
|
14
|
+
if (!manifest) {
|
|
15
|
+
console.log(chalk.yellow("Status: Not initialized"));
|
|
16
|
+
console.log(chalk.gray("\nRun `sequant init` to get started."));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
console.log(chalk.green("Status: Initialized"));
|
|
20
|
+
console.log(chalk.gray(`Installed version: ${manifest.version}`));
|
|
21
|
+
console.log(chalk.gray(`Stack: ${manifest.stack}`));
|
|
22
|
+
console.log(chalk.gray(`Installed: ${manifest.installedAt}`));
|
|
23
|
+
if (manifest.updatedAt) {
|
|
24
|
+
console.log(chalk.gray(`Last updated: ${manifest.updatedAt}`));
|
|
25
|
+
}
|
|
26
|
+
// Count skills
|
|
27
|
+
const skillsDir = ".claude/skills";
|
|
28
|
+
if (await fileExists(skillsDir)) {
|
|
29
|
+
try {
|
|
30
|
+
const skills = await readdir(skillsDir);
|
|
31
|
+
const skillCount = skills.filter((s) => !s.startsWith(".")).length;
|
|
32
|
+
console.log(chalk.gray(`Skills: ${skillCount}`));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Ignore errors
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Check for local customizations
|
|
39
|
+
const localDir = ".claude/.local";
|
|
40
|
+
if (await fileExists(localDir)) {
|
|
41
|
+
console.log(chalk.blue("Custom overrides: Yes (.claude/.local/)"));
|
|
42
|
+
}
|
|
43
|
+
console.log(chalk.gray("\nRun `sequant doctor` for detailed health check."));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEjD,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAElD,uBAAuB;IACvB,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9D,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,eAAe;IACf,MAAM,SAAS,GAAG,gBAAgB,CAAC;IACnC,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,MAAM,QAAQ,GAAG,gBAAgB,CAAC;IAClC,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sequant update - Update templates from the package
|
|
3
|
+
*/
|
|
4
|
+
interface UpdateOptions {
|
|
5
|
+
dryRun?: boolean;
|
|
6
|
+
force?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function updateCommand(options: UpdateOptions): Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,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,CAsIzE"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sequant update - Update templates from the package
|
|
3
|
+
*/
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { diffLines } from "diff";
|
|
6
|
+
import inquirer from "inquirer";
|
|
7
|
+
import { getManifest, updateManifest } from "../lib/manifest.js";
|
|
8
|
+
import { getTemplateContent, listTemplateFiles } from "../lib/templates.js";
|
|
9
|
+
import { readFile, writeFile, fileExists } from "../lib/fs.js";
|
|
10
|
+
export async function updateCommand(options) {
|
|
11
|
+
console.log(chalk.blue("\n🔄 Checking for updates...\n"));
|
|
12
|
+
// Check if initialized
|
|
13
|
+
const manifest = await getManifest();
|
|
14
|
+
if (!manifest) {
|
|
15
|
+
console.log(chalk.red("❌ Sequant is not initialized. Run `sequant init` first."));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
console.log(chalk.gray(`Current version: ${manifest.version}`));
|
|
19
|
+
console.log(chalk.gray(`Stack: ${manifest.stack}\n`));
|
|
20
|
+
// Get list of template files
|
|
21
|
+
const templateFiles = await listTemplateFiles();
|
|
22
|
+
const changes = [];
|
|
23
|
+
for (const templatePath of templateFiles) {
|
|
24
|
+
const localPath = templatePath.replace("templates/", ".claude/");
|
|
25
|
+
// Skip if in .local directory (user customizations)
|
|
26
|
+
if (localPath.includes(".local/")) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const templateContent = await getTemplateContent(templatePath);
|
|
30
|
+
const exists = await fileExists(localPath);
|
|
31
|
+
if (!exists) {
|
|
32
|
+
changes.push({ path: localPath, status: "new" });
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const localContent = await readFile(localPath);
|
|
36
|
+
if (localContent === templateContent) {
|
|
37
|
+
changes.push({ path: localPath, status: "unchanged" });
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Check if there's a local override
|
|
41
|
+
const localOverridePath = localPath.replace(".claude/", ".claude/.local/");
|
|
42
|
+
const hasLocalOverride = await fileExists(localOverridePath);
|
|
43
|
+
if (hasLocalOverride) {
|
|
44
|
+
changes.push({ path: localPath, status: "local-override" });
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const diff = diffLines(localContent, templateContent)
|
|
48
|
+
.map((part) => {
|
|
49
|
+
const prefix = part.added ? "+" : part.removed ? "-" : " ";
|
|
50
|
+
return part.value
|
|
51
|
+
.split("\n")
|
|
52
|
+
.filter((l) => l)
|
|
53
|
+
.map((l) => `${prefix} ${l}`)
|
|
54
|
+
.join("\n");
|
|
55
|
+
})
|
|
56
|
+
.join("\n");
|
|
57
|
+
changes.push({ path: localPath, status: "modified", diff });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Show summary
|
|
63
|
+
const newFiles = changes.filter((c) => c.status === "new");
|
|
64
|
+
const modifiedFiles = changes.filter((c) => c.status === "modified");
|
|
65
|
+
const unchangedFiles = changes.filter((c) => c.status === "unchanged");
|
|
66
|
+
const localOverrides = changes.filter((c) => c.status === "local-override");
|
|
67
|
+
console.log(chalk.bold("Summary:"));
|
|
68
|
+
console.log(chalk.green(` ✨ New files: ${newFiles.length}`));
|
|
69
|
+
console.log(chalk.yellow(` 📝 Modified: ${modifiedFiles.length}`));
|
|
70
|
+
console.log(chalk.gray(` ✓ Unchanged: ${unchangedFiles.length}`));
|
|
71
|
+
console.log(chalk.blue(` 🔒 Local overrides: ${localOverrides.length}`));
|
|
72
|
+
if (newFiles.length === 0 && modifiedFiles.length === 0) {
|
|
73
|
+
console.log(chalk.green("\n✅ Everything is up to date!"));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Show changes
|
|
77
|
+
if (modifiedFiles.length > 0) {
|
|
78
|
+
console.log(chalk.bold("\nModified files:"));
|
|
79
|
+
for (const file of modifiedFiles) {
|
|
80
|
+
console.log(chalk.yellow(` ${file.path}`));
|
|
81
|
+
if (options.dryRun && file.diff) {
|
|
82
|
+
console.log(chalk.gray(file.diff));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (newFiles.length > 0) {
|
|
87
|
+
console.log(chalk.bold("\nNew files:"));
|
|
88
|
+
for (const file of newFiles) {
|
|
89
|
+
console.log(chalk.green(` ${file.path}`));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (options.dryRun) {
|
|
93
|
+
console.log(chalk.gray("\n(dry-run mode - no changes made)"));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Confirm update
|
|
97
|
+
if (!options.force) {
|
|
98
|
+
const { proceed } = await inquirer.prompt([
|
|
99
|
+
{
|
|
100
|
+
type: "confirm",
|
|
101
|
+
name: "proceed",
|
|
102
|
+
message: "Apply updates?",
|
|
103
|
+
default: true,
|
|
104
|
+
},
|
|
105
|
+
]);
|
|
106
|
+
if (!proceed) {
|
|
107
|
+
console.log(chalk.gray("Aborted."));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Apply updates
|
|
112
|
+
console.log(chalk.blue("\n📥 Applying updates..."));
|
|
113
|
+
let updated = 0;
|
|
114
|
+
for (const file of [...newFiles, ...modifiedFiles]) {
|
|
115
|
+
const templatePath = file.path.replace(".claude/", "templates/");
|
|
116
|
+
const content = await getTemplateContent(templatePath);
|
|
117
|
+
await writeFile(file.path, content);
|
|
118
|
+
updated++;
|
|
119
|
+
}
|
|
120
|
+
// Update manifest
|
|
121
|
+
await updateManifest();
|
|
122
|
+
console.log(chalk.green(`\n✅ Updated ${updated} files`));
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sequant - Quantize your development workflow
|
|
3
|
+
*
|
|
4
|
+
* Sequential AI phases with quality gates for any codebase.
|
|
5
|
+
*/
|
|
6
|
+
export { initCommand } from "./commands/init.js";
|
|
7
|
+
export { updateCommand } from "./commands/update.js";
|
|
8
|
+
export { doctorCommand } from "./commands/doctor.js";
|
|
9
|
+
export { statusCommand } from "./commands/status.js";
|
|
10
|
+
export { detectStack, getStackConfig, STACKS } from "./lib/stacks.js";
|
|
11
|
+
export { getManifest, createManifest, updateManifest } from "./lib/manifest.js";
|
|
12
|
+
export { copyTemplates, listTemplateFiles, getTemplateContent, } from "./lib/templates.js";
|
|
13
|
+
export type { StackConfig } from "./lib/stacks.js";
|
|
14
|
+
export type { Manifest } from "./lib/manifest.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sequant - Quantize your development workflow
|
|
3
|
+
*
|
|
4
|
+
* Sequential AI phases with quality gates for any codebase.
|
|
5
|
+
*/
|
|
6
|
+
export { initCommand } from "./commands/init.js";
|
|
7
|
+
export { updateCommand } from "./commands/update.js";
|
|
8
|
+
export { doctorCommand } from "./commands/doctor.js";
|
|
9
|
+
export { statusCommand } from "./commands/status.js";
|
|
10
|
+
export { detectStack, getStackConfig, STACKS } from "./lib/stacks.js";
|
|
11
|
+
export { getManifest, createManifest, updateManifest } from "./lib/manifest.js";
|
|
12
|
+
export { copyTemplates, listTemplateFiles, getTemplateContent, } from "./lib/templates.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File system utilities
|
|
3
|
+
*/
|
|
4
|
+
export declare function fileExists(path: string): Promise<boolean>;
|
|
5
|
+
export declare function isExecutable(path: string): Promise<boolean>;
|
|
6
|
+
export declare function ensureDir(path: string): Promise<void>;
|
|
7
|
+
export declare function readFile(path: string): Promise<string>;
|
|
8
|
+
export declare function writeFile(path: string, content: string): Promise<void>;
|
|
9
|
+
export declare function getFileStats(path: string): Promise<import("fs").Stats>;
|
|
10
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/lib/fs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,+BAE9C"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File system utilities
|
|
3
|
+
*/
|
|
4
|
+
import { access, constants, mkdir, readFile as fsReadFile, writeFile as fsWriteFile, stat, } from "fs/promises";
|
|
5
|
+
import { dirname } from "path";
|
|
6
|
+
export async function fileExists(path) {
|
|
7
|
+
try {
|
|
8
|
+
await access(path, constants.F_OK);
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function isExecutable(path) {
|
|
16
|
+
try {
|
|
17
|
+
await access(path, constants.X_OK);
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export async function ensureDir(path) {
|
|
25
|
+
try {
|
|
26
|
+
await mkdir(path, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (error.code !== "EEXIST") {
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export async function readFile(path) {
|
|
35
|
+
return fsReadFile(path, "utf-8");
|
|
36
|
+
}
|
|
37
|
+
export async function writeFile(path, content) {
|
|
38
|
+
await ensureDir(dirname(path));
|
|
39
|
+
await fsWriteFile(path, content, "utf-8");
|
|
40
|
+
}
|
|
41
|
+
export async function getFileStats(path) {
|
|
42
|
+
return stat(path);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/lib/fs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,IAAI,UAAU,EACtB,SAAS,IAAI,WAAW,EACxB,IAAI,GACL,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,OAAe;IAC3D,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest management for tracking installed version
|
|
3
|
+
*/
|
|
4
|
+
export interface Manifest {
|
|
5
|
+
version: string;
|
|
6
|
+
stack: string;
|
|
7
|
+
installedAt: string;
|
|
8
|
+
updatedAt?: string;
|
|
9
|
+
files: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
export declare function getManifest(): Promise<Manifest | null>;
|
|
12
|
+
export declare function createManifest(stack: string): Promise<void>;
|
|
13
|
+
export declare function updateManifest(): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/lib/manifest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAW5D;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASjE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAUpD"}
|