@crewx/wbs 0.1.6 → 0.1.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 +7 -7
- package/SKILL.md +1198 -1198
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +718 -0
- package/dist/cli.js.map +1 -0
- package/dist/src/engine.d.ts +54 -0
- package/dist/src/engine.d.ts.map +1 -0
- package/dist/src/engine.js +551 -0
- package/dist/src/engine.js.map +1 -0
- package/dist/src/types.d.ts +60 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +55 -54
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { WbsProject, Job, Execution, StatusResult, RunResult } from './types';
|
|
2
|
+
export declare const DAEMON_INTERVAL_MS: number;
|
|
3
|
+
export declare const ZOMBIE_TIMEOUT_MS: number;
|
|
4
|
+
export declare function getJobSlug(job: Job): string;
|
|
5
|
+
export declare function resolveJobId(idOrSlug: string): Job | null;
|
|
6
|
+
export declare function generateDetailFile(wbsId: string): void;
|
|
7
|
+
export declare const engine: {
|
|
8
|
+
create(title: string, detailPath?: string | null, sourceBranch?: string, targetBranch?: string): string;
|
|
9
|
+
list(): WbsProject[];
|
|
10
|
+
getProject(wbsId: string): WbsProject | null;
|
|
11
|
+
status(wbsId: string): StatusResult;
|
|
12
|
+
delete(wbsId: string): void;
|
|
13
|
+
getActiveProjects(): WbsProject[];
|
|
14
|
+
setStatus(wbsId: string, status: string): void;
|
|
15
|
+
updateDetailPath(wbsId: string, detailPath: string): void;
|
|
16
|
+
addJob(wbsId: string, opts: {
|
|
17
|
+
title: string;
|
|
18
|
+
description?: string | null;
|
|
19
|
+
agent: string;
|
|
20
|
+
seq?: number;
|
|
21
|
+
issue_number?: number | null;
|
|
22
|
+
no_git?: boolean;
|
|
23
|
+
}): string;
|
|
24
|
+
getJob(jobId: string): Job | null;
|
|
25
|
+
listJobs(wbsId: string): Job[];
|
|
26
|
+
getJobsBySeq(wbsId: string, seq: number, status?: Job["status"]): Job[];
|
|
27
|
+
getNextSeq(wbsId: string): number | null;
|
|
28
|
+
getNextJob(wbsId: string): Job | null;
|
|
29
|
+
updateJob(jobId: string, fields: Partial<Job>): void;
|
|
30
|
+
createExecution(jobId: string, pid: number | null): string;
|
|
31
|
+
getExecution(execId: string): Execution | null;
|
|
32
|
+
listExecutions(jobId: string): Execution[];
|
|
33
|
+
getRunningExecutions(): Execution[];
|
|
34
|
+
updateExecution(execId: string, status: string, opts?: {
|
|
35
|
+
exitCode?: number | null;
|
|
36
|
+
error?: string;
|
|
37
|
+
taskId?: string;
|
|
38
|
+
}): void;
|
|
39
|
+
killExecution(execId: string): boolean;
|
|
40
|
+
runWorker(job: Job): Promise<RunResult>;
|
|
41
|
+
run(wbsId: string, opts?: {
|
|
42
|
+
parallel?: boolean;
|
|
43
|
+
}): Promise<void>;
|
|
44
|
+
daemonPidFile: string;
|
|
45
|
+
daemonLogFile: string;
|
|
46
|
+
isProcessAlive(pid: number): boolean;
|
|
47
|
+
checkAndFixZombies(): {
|
|
48
|
+
execId: string;
|
|
49
|
+
jobId: string;
|
|
50
|
+
pid: number | null;
|
|
51
|
+
reason: string;
|
|
52
|
+
}[];
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAW,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAU5F,eAAO,MAAM,kBAAkB,QAAgB,CAAC;AAChD,eAAO,MAAM,iBAAiB,QAAiB,CAAC;AAmHhD,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAG3C;AAGD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAiBzD;AAGD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAsDtD;AAED,eAAO,MAAM,MAAM;kBAKH,MAAM,eAAc,MAAM,GAAG,IAAI,iBAAwB,MAAM,iBAAiB,MAAM,GAAG,MAAM;YAOrG,UAAU,EAAE;sBAIF,MAAM,GAAG,UAAU,GAAG,IAAI;kBAK9B,MAAM,GAAG,YAAY;kBAMrB,MAAM,GAAG,IAAI;yBAQN,UAAU,EAAE;qBAIhB,MAAM,UAAU,MAAM,GAAG,IAAI;4BAKtB,MAAM,cAAc,MAAM,GAAG,IAAI;kBAS3C,MAAM,QAAQ;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM;kBAQlJ,MAAM,GAAG,GAAG,GAAG,IAAI;oBAKjB,MAAM,GAAG,GAAG,EAAE;wBAIV,MAAM,OAAO,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE;sBAOrD,MAAM,GAAG,MAAM,GAAG,IAAI;sBAKtB,MAAM,GAAG,GAAG,GAAG,IAAI;qBAKpB,MAAM,UAAU,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;2BA6B7B,MAAM,OAAO,MAAM,GAAG,IAAI,GAAG,MAAM;yBAQrC,MAAM,GAAG,SAAS,GAAG,IAAI;0BAKxB,MAAM,GAAG,SAAS,EAAE;4BAIlB,SAAS,EAAE;4BAIX,MAAM,UAAU,MAAM,SAAQ;QAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAQ,IAAI;0BAUzG,MAAM,GAAG,OAAO;mBAwBjB,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;eAsH5B,MAAM,SAAQ;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAQ,OAAO,CAAC,IAAI,CAAC;;;wBAkDtD,MAAM,GAAG,OAAO;0BAId;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE;CAqB9F,CAAC"}
|
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.engine = exports.ZOMBIE_TIMEOUT_MS = exports.DAEMON_INTERVAL_MS = void 0;
|
|
37
|
+
exports.getJobSlug = getJobSlug;
|
|
38
|
+
exports.resolveJobId = resolveJobId;
|
|
39
|
+
exports.generateDetailFile = generateDetailFile;
|
|
40
|
+
const child_process_1 = require("child_process");
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const yaml = __importStar(require("js-yaml"));
|
|
44
|
+
const alasql = require('alasql');
|
|
45
|
+
const CREWX_DIR = path.join(process.cwd(), '.crewx');
|
|
46
|
+
const DATA_FILE = path.join(CREWX_DIR, '.wbs-data.json');
|
|
47
|
+
const DAEMON_PID_FILE = path.join(CREWX_DIR, '.wbs-daemon.pid');
|
|
48
|
+
const DAEMON_LOG_FILE = path.join(CREWX_DIR, '.wbs-daemon.log');
|
|
49
|
+
exports.DAEMON_INTERVAL_MS = 5 * 60 * 1000;
|
|
50
|
+
exports.ZOMBIE_TIMEOUT_MS = 30 * 60 * 1000;
|
|
51
|
+
const runningProcesses = new Map();
|
|
52
|
+
function getProjectRoot() {
|
|
53
|
+
try {
|
|
54
|
+
return (0, child_process_1.execSync)('git rev-parse --show-toplevel', { encoding: 'utf8' }).trim();
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return process.cwd();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function getWbsConfig() {
|
|
61
|
+
try {
|
|
62
|
+
const configPath = process.env.CREWX_CONFIG ?? path.join(getProjectRoot(), 'crewx.yaml');
|
|
63
|
+
const raw = fs.readFileSync(configPath, 'utf8');
|
|
64
|
+
const config = yaml.load(raw);
|
|
65
|
+
const settings = config?.settings;
|
|
66
|
+
return settings?.wbs ?? {};
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return {};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function getCurrentBranch() {
|
|
73
|
+
try {
|
|
74
|
+
return (0, child_process_1.execSync)('git branch --show-current', { encoding: 'utf8' }).trim();
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return 'main';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function getSourceBranch() {
|
|
81
|
+
const wbs = getWbsConfig();
|
|
82
|
+
const legacyBase = wbs.base_branch;
|
|
83
|
+
const setting = wbs.source_branch ?? legacyBase;
|
|
84
|
+
if (!setting || setting === 'auto')
|
|
85
|
+
return getCurrentBranch();
|
|
86
|
+
return setting;
|
|
87
|
+
}
|
|
88
|
+
function getTargetBranch() {
|
|
89
|
+
const wbs = getWbsConfig();
|
|
90
|
+
const legacyBase = wbs.base_branch;
|
|
91
|
+
const setting = wbs.target_branch ?? legacyBase;
|
|
92
|
+
if (!setting || setting === 'auto')
|
|
93
|
+
return getCurrentBranch();
|
|
94
|
+
return setting;
|
|
95
|
+
}
|
|
96
|
+
function getMergeStrategy() {
|
|
97
|
+
const wbs = getWbsConfig();
|
|
98
|
+
if (wbs.merge_strategy === 'pr')
|
|
99
|
+
return 'pr';
|
|
100
|
+
return 'local';
|
|
101
|
+
}
|
|
102
|
+
function getNextId(table, prefix) {
|
|
103
|
+
const prefixLen = prefix.length;
|
|
104
|
+
const result = alasql(`SELECT MAX(CAST(SUBSTR(id, ${prefixLen + 1}) AS INT)) as max FROM ${table}`)[0];
|
|
105
|
+
return `${prefix}${(result.max || 0) + 1}`;
|
|
106
|
+
}
|
|
107
|
+
function saveData() {
|
|
108
|
+
if (!fs.existsSync(CREWX_DIR)) {
|
|
109
|
+
fs.mkdirSync(CREWX_DIR, { recursive: true });
|
|
110
|
+
}
|
|
111
|
+
const data = {
|
|
112
|
+
wbs: alasql('SELECT * FROM wbs'),
|
|
113
|
+
jobs: alasql('SELECT * FROM jobs'),
|
|
114
|
+
executions: alasql('SELECT * FROM executions'),
|
|
115
|
+
};
|
|
116
|
+
fs.writeFileSync(DATA_FILE, JSON.stringify(data, null, 2));
|
|
117
|
+
}
|
|
118
|
+
function initDB() {
|
|
119
|
+
alasql('CREATE TABLE IF NOT EXISTS wbs (id STRING PRIMARY KEY, title STRING, detail_path STRING, status STRING, created_at STRING, source_branch STRING, target_branch STRING)');
|
|
120
|
+
alasql('CREATE TABLE IF NOT EXISTS jobs (id STRING PRIMARY KEY, wbs_id STRING, title STRING, description STRING, agent STRING, status STRING, seq INT, created_at STRING, completed_at STRING, issue_number INT, no_git BOOLEAN)');
|
|
121
|
+
alasql('CREATE TABLE IF NOT EXISTS executions (id STRING PRIMARY KEY, job_id STRING, pid INT, status STRING, started_at STRING, ended_at STRING, exit_code INT, error STRING, task_id STRING)');
|
|
122
|
+
if (fs.existsSync(DATA_FILE)) {
|
|
123
|
+
try {
|
|
124
|
+
const data = JSON.parse(fs.readFileSync(DATA_FILE, 'utf8'));
|
|
125
|
+
(data.wbs || []).forEach(w => {
|
|
126
|
+
alasql('INSERT INTO wbs VALUES (?, ?, ?, ?, ?, ?, ?)', [w.id, w.title, w.detail_path ?? null, w.status, w.created_at, w.source_branch ?? null, w.target_branch ?? null]);
|
|
127
|
+
});
|
|
128
|
+
(data.jobs || []).forEach(j => {
|
|
129
|
+
alasql('INSERT INTO jobs VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [j.id, j.wbs_id, j.title, j.description ?? null, j.agent, j.status, j.seq, j.created_at, j.completed_at, j.issue_number ?? null, j.no_git ?? false]);
|
|
130
|
+
});
|
|
131
|
+
(data.executions || []).forEach(e => {
|
|
132
|
+
alasql('INSERT INTO executions VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', [e.id, e.job_id, e.pid, e.status, e.started_at, e.ended_at, e.exit_code, e.error, e.task_id ?? null]);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
const err = e;
|
|
137
|
+
console.error('Warning: Could not load persisted data:', err.message);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
initDB();
|
|
142
|
+
function getJobSlug(job) {
|
|
143
|
+
const wbsNum = job.wbs_id.replace('wbs-', '');
|
|
144
|
+
return `wbs-${wbsNum}-${job.seq}`;
|
|
145
|
+
}
|
|
146
|
+
function resolveJobId(idOrSlug) {
|
|
147
|
+
if (idOrSlug.startsWith('job-')) {
|
|
148
|
+
const rows = alasql('SELECT * FROM jobs WHERE id = ?', [idOrSlug]);
|
|
149
|
+
return rows[0] ?? null;
|
|
150
|
+
}
|
|
151
|
+
const slugMatch = idOrSlug.match(/^wbs-(\d+)-(\d+)$/);
|
|
152
|
+
if (slugMatch) {
|
|
153
|
+
const wbsId = `wbs-${slugMatch[1]}`;
|
|
154
|
+
const seq = parseInt(slugMatch[2] ?? '0', 10);
|
|
155
|
+
const rows = alasql('SELECT * FROM jobs WHERE wbs_id = ? AND seq = ? ORDER BY created_at ASC', [wbsId, seq]);
|
|
156
|
+
return rows[0] ?? null;
|
|
157
|
+
}
|
|
158
|
+
const rows = alasql('SELECT * FROM jobs WHERE id = ?', [idOrSlug]);
|
|
159
|
+
return rows[0] ?? null;
|
|
160
|
+
}
|
|
161
|
+
function generateDetailFile(wbsId) {
|
|
162
|
+
const project = alasql('SELECT * FROM wbs WHERE id = ?', [wbsId]);
|
|
163
|
+
if (!project[0])
|
|
164
|
+
return;
|
|
165
|
+
const wbs = project[0];
|
|
166
|
+
const jobs = alasql('SELECT * FROM jobs WHERE wbs_id = ? ORDER BY seq, created_at', [wbsId]);
|
|
167
|
+
const lines = [];
|
|
168
|
+
lines.push(`# ${wbs.title}`);
|
|
169
|
+
lines.push('');
|
|
170
|
+
lines.push(`> WBS ID: ${wbs.id} | Status: ${wbs.status} | Jobs: ${jobs.length}`);
|
|
171
|
+
lines.push('');
|
|
172
|
+
lines.push('## Jobs');
|
|
173
|
+
lines.push('');
|
|
174
|
+
if (jobs.length === 0) {
|
|
175
|
+
lines.push('(아직 등록된 Job이 없습니다)');
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
for (const job of jobs) {
|
|
179
|
+
const slug = getJobSlug(job);
|
|
180
|
+
lines.push(`### ${slug}: ${job.title}`);
|
|
181
|
+
lines.push('');
|
|
182
|
+
lines.push(`- **Agent**: ${job.agent}`);
|
|
183
|
+
lines.push(`- **Seq**: ${job.seq}`);
|
|
184
|
+
lines.push(`- **Status**: ${job.status}`);
|
|
185
|
+
lines.push(`- **ID**: ${job.id}`);
|
|
186
|
+
if (job.description) {
|
|
187
|
+
lines.push('');
|
|
188
|
+
lines.push('**AC / Description:**');
|
|
189
|
+
lines.push('');
|
|
190
|
+
lines.push(job.description);
|
|
191
|
+
}
|
|
192
|
+
lines.push('');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
let detailPath = wbs.detail_path;
|
|
196
|
+
if (!detailPath) {
|
|
197
|
+
const detailsDir = path.join(process.cwd(), 'wbs-details');
|
|
198
|
+
if (!fs.existsSync(detailsDir))
|
|
199
|
+
fs.mkdirSync(detailsDir, { recursive: true });
|
|
200
|
+
detailPath = `wbs-details/${wbsId}-detail.md`;
|
|
201
|
+
alasql('UPDATE wbs SET detail_path = ? WHERE id = ?', [detailPath, wbsId]);
|
|
202
|
+
saveData();
|
|
203
|
+
}
|
|
204
|
+
const fullPath = path.isAbsolute(detailPath)
|
|
205
|
+
? detailPath
|
|
206
|
+
: path.join(process.cwd(), detailPath);
|
|
207
|
+
const dir = path.dirname(fullPath);
|
|
208
|
+
if (!fs.existsSync(dir))
|
|
209
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
210
|
+
fs.writeFileSync(fullPath, lines.join('\n'));
|
|
211
|
+
}
|
|
212
|
+
exports.engine = {
|
|
213
|
+
create(title, detailPath = null, sourceBranch, targetBranch) {
|
|
214
|
+
const id = getNextId('wbs', 'wbs-');
|
|
215
|
+
alasql('INSERT INTO wbs VALUES (?, ?, ?, ?, ?, ?, ?)', [id, title, detailPath, 'planning', new Date().toISOString(), sourceBranch ?? null, targetBranch ?? null]);
|
|
216
|
+
saveData();
|
|
217
|
+
return id;
|
|
218
|
+
},
|
|
219
|
+
list() {
|
|
220
|
+
return alasql('SELECT * FROM wbs ORDER BY created_at DESC');
|
|
221
|
+
},
|
|
222
|
+
getProject(wbsId) {
|
|
223
|
+
const rows = alasql('SELECT * FROM wbs WHERE id = ?', [wbsId]);
|
|
224
|
+
return rows[0] ?? null;
|
|
225
|
+
},
|
|
226
|
+
status(wbsId) {
|
|
227
|
+
const project = this.getProject(wbsId);
|
|
228
|
+
const jobs = alasql('SELECT * FROM jobs WHERE wbs_id = ? ORDER BY seq', [wbsId]);
|
|
229
|
+
return { project, jobs };
|
|
230
|
+
},
|
|
231
|
+
delete(wbsId) {
|
|
232
|
+
const jobs = alasql('SELECT id FROM jobs WHERE wbs_id = ?', [wbsId]);
|
|
233
|
+
jobs.forEach(j => alasql('DELETE FROM executions WHERE job_id = ?', [j.id]));
|
|
234
|
+
alasql('DELETE FROM jobs WHERE wbs_id = ?', [wbsId]);
|
|
235
|
+
alasql('DELETE FROM wbs WHERE id = ?', [wbsId]);
|
|
236
|
+
saveData();
|
|
237
|
+
},
|
|
238
|
+
getActiveProjects() {
|
|
239
|
+
return alasql("SELECT * FROM wbs WHERE status = 'running'");
|
|
240
|
+
},
|
|
241
|
+
setStatus(wbsId, status) {
|
|
242
|
+
alasql('UPDATE wbs SET status = ? WHERE id = ?', [status, wbsId]);
|
|
243
|
+
saveData();
|
|
244
|
+
},
|
|
245
|
+
updateDetailPath(wbsId, detailPath) {
|
|
246
|
+
alasql('UPDATE wbs SET detail_path = ? WHERE id = ?', [detailPath, wbsId]);
|
|
247
|
+
saveData();
|
|
248
|
+
},
|
|
249
|
+
addJob(wbsId, opts) {
|
|
250
|
+
const id = getNextId('jobs', 'job-');
|
|
251
|
+
alasql('INSERT INTO jobs VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [id, wbsId, opts.title, opts.description ?? null, opts.agent, 'pending', opts.seq ?? 0, new Date().toISOString(), null, opts.issue_number ?? null, opts.no_git ?? false]);
|
|
252
|
+
saveData();
|
|
253
|
+
return id;
|
|
254
|
+
},
|
|
255
|
+
getJob(jobId) {
|
|
256
|
+
const rows = alasql('SELECT * FROM jobs WHERE id = ?', [jobId]);
|
|
257
|
+
return rows[0] ?? null;
|
|
258
|
+
},
|
|
259
|
+
listJobs(wbsId) {
|
|
260
|
+
return alasql('SELECT * FROM jobs WHERE wbs_id = ? ORDER BY seq', [wbsId]);
|
|
261
|
+
},
|
|
262
|
+
getJobsBySeq(wbsId, seq, status) {
|
|
263
|
+
if (status) {
|
|
264
|
+
return alasql('SELECT * FROM jobs WHERE wbs_id = ? AND seq = ? AND status = ? ORDER BY created_at ASC', [wbsId, seq, status]);
|
|
265
|
+
}
|
|
266
|
+
return alasql('SELECT * FROM jobs WHERE wbs_id = ? AND seq = ? ORDER BY created_at ASC', [wbsId, seq]);
|
|
267
|
+
},
|
|
268
|
+
getNextSeq(wbsId) {
|
|
269
|
+
const rows = alasql('SELECT MIN(seq) as nextSeq FROM jobs WHERE wbs_id = ? AND status = ?', [wbsId, 'pending']);
|
|
270
|
+
return rows[0]?.nextSeq ?? null;
|
|
271
|
+
},
|
|
272
|
+
getNextJob(wbsId) {
|
|
273
|
+
const jobs = alasql('SELECT * FROM jobs WHERE wbs_id = ? AND status = ? ORDER BY seq', [wbsId, 'pending']);
|
|
274
|
+
return jobs[0] ?? null;
|
|
275
|
+
},
|
|
276
|
+
updateJob(jobId, fields) {
|
|
277
|
+
const updates = [];
|
|
278
|
+
const values = [];
|
|
279
|
+
if (fields.status !== undefined) {
|
|
280
|
+
updates.push('status = ?');
|
|
281
|
+
values.push(fields.status);
|
|
282
|
+
if (fields.status === 'completed' || fields.status === 'failed') {
|
|
283
|
+
updates.push('completed_at = ?');
|
|
284
|
+
values.push(new Date().toISOString());
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (fields.title !== undefined) {
|
|
288
|
+
updates.push('title = ?');
|
|
289
|
+
values.push(fields.title);
|
|
290
|
+
}
|
|
291
|
+
if (fields.agent !== undefined) {
|
|
292
|
+
updates.push('agent = ?');
|
|
293
|
+
values.push(fields.agent);
|
|
294
|
+
}
|
|
295
|
+
if (fields.seq !== undefined) {
|
|
296
|
+
updates.push('seq = ?');
|
|
297
|
+
values.push(fields.seq);
|
|
298
|
+
}
|
|
299
|
+
if (fields.description !== undefined) {
|
|
300
|
+
updates.push('description = ?');
|
|
301
|
+
values.push(fields.description);
|
|
302
|
+
}
|
|
303
|
+
if (fields.issue_number !== undefined) {
|
|
304
|
+
updates.push('issue_number = ?');
|
|
305
|
+
values.push(fields.issue_number);
|
|
306
|
+
}
|
|
307
|
+
if (fields.no_git !== undefined) {
|
|
308
|
+
updates.push('no_git = ?');
|
|
309
|
+
values.push(fields.no_git);
|
|
310
|
+
}
|
|
311
|
+
if (updates.length === 0)
|
|
312
|
+
return;
|
|
313
|
+
values.push(jobId);
|
|
314
|
+
alasql(`UPDATE jobs SET ${updates.join(', ')} WHERE id = ?`, values);
|
|
315
|
+
saveData();
|
|
316
|
+
},
|
|
317
|
+
createExecution(jobId, pid) {
|
|
318
|
+
const id = getNextId('executions', 'exec-');
|
|
319
|
+
alasql('INSERT INTO executions VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', [id, jobId, pid, 'running', new Date().toISOString(), null, null, null, null]);
|
|
320
|
+
saveData();
|
|
321
|
+
return id;
|
|
322
|
+
},
|
|
323
|
+
getExecution(execId) {
|
|
324
|
+
const rows = alasql('SELECT * FROM executions WHERE id = ?', [execId]);
|
|
325
|
+
return rows[0] ?? null;
|
|
326
|
+
},
|
|
327
|
+
listExecutions(jobId) {
|
|
328
|
+
return alasql('SELECT * FROM executions WHERE job_id = ? ORDER BY started_at DESC', [jobId]);
|
|
329
|
+
},
|
|
330
|
+
getRunningExecutions() {
|
|
331
|
+
return alasql("SELECT * FROM executions WHERE status = 'running'");
|
|
332
|
+
},
|
|
333
|
+
updateExecution(execId, status, opts = {}) {
|
|
334
|
+
if (status !== 'running') {
|
|
335
|
+
alasql('UPDATE executions SET status = ?, ended_at = ?, exit_code = ?, error = ?, task_id = ? WHERE id = ?', [status, new Date().toISOString(), opts.exitCode ?? null, opts.error ?? null, opts.taskId ?? null, execId]);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
alasql('UPDATE executions SET status = ? WHERE id = ?', [status, execId]);
|
|
339
|
+
}
|
|
340
|
+
saveData();
|
|
341
|
+
},
|
|
342
|
+
killExecution(execId) {
|
|
343
|
+
const exec = this.getExecution(execId);
|
|
344
|
+
if (!exec || exec.status !== 'running')
|
|
345
|
+
return false;
|
|
346
|
+
const proc = runningProcesses.get(execId);
|
|
347
|
+
if (proc) {
|
|
348
|
+
try {
|
|
349
|
+
proc.kill('SIGTERM');
|
|
350
|
+
}
|
|
351
|
+
catch { }
|
|
352
|
+
runningProcesses.delete(execId);
|
|
353
|
+
}
|
|
354
|
+
else if (exec.pid) {
|
|
355
|
+
try {
|
|
356
|
+
process.kill(exec.pid, 'SIGTERM');
|
|
357
|
+
}
|
|
358
|
+
catch { }
|
|
359
|
+
}
|
|
360
|
+
this.updateExecution(execId, 'killed');
|
|
361
|
+
const job = this.getJob(exec.job_id);
|
|
362
|
+
if (job && job.status === 'running') {
|
|
363
|
+
this.updateJob(exec.job_id, { status: 'failed' });
|
|
364
|
+
}
|
|
365
|
+
return true;
|
|
366
|
+
},
|
|
367
|
+
async runWorker(job) {
|
|
368
|
+
this.updateJob(job.id, { status: 'running' });
|
|
369
|
+
console.log(`[WBS] Running job: ${job.title}`);
|
|
370
|
+
console.log(`[WBS] Agent: ${job.agent}`);
|
|
371
|
+
if (job.description) {
|
|
372
|
+
console.log(`[WBS] Description: ${job.description.substring(0, 100)}${job.description.length > 100 ? '...' : ''}`);
|
|
373
|
+
}
|
|
374
|
+
const project = this.getProject(job.wbs_id);
|
|
375
|
+
let detailContent = null;
|
|
376
|
+
if (project?.detail_path) {
|
|
377
|
+
const fullPath = path.isAbsolute(project.detail_path)
|
|
378
|
+
? project.detail_path
|
|
379
|
+
: path.join(process.cwd(), project.detail_path);
|
|
380
|
+
if (fs.existsSync(fullPath)) {
|
|
381
|
+
try {
|
|
382
|
+
detailContent = fs.readFileSync(fullPath, 'utf8');
|
|
383
|
+
}
|
|
384
|
+
catch { }
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
console.log('[WBS] Timeout: 30 minutes');
|
|
388
|
+
console.log('─'.repeat(50));
|
|
389
|
+
let prompt = job.title;
|
|
390
|
+
if (detailContent)
|
|
391
|
+
prompt = `[프로젝트 상세]\n${detailContent}\n\n[작업]\n${prompt}`;
|
|
392
|
+
if (job.description)
|
|
393
|
+
prompt += `\n\n상세 지시:\n${job.description}`;
|
|
394
|
+
if (job.issue_number) {
|
|
395
|
+
prompt += `\n\n## 작업 지시\nGitHub Issue #${job.issue_number}를 처리하세요.\n\n**당신의 기존 개발 프로세스를 따르세요:**\n1. \`gh issue view ${job.issue_number}\`로 이슈 확인\n2. 브랜치 생성 및 작업\n3. PR 생성\n4. 이슈에 결과 코멘트\n\nWBS 추적 정보:\n- WBS: ${job.wbs_id}\n- Job: ${job.id}\n`;
|
|
396
|
+
}
|
|
397
|
+
else if (!job.no_git) {
|
|
398
|
+
const branch = `feature/${getJobSlug(job)}`;
|
|
399
|
+
const sourceBranch = project?.source_branch || getSourceBranch();
|
|
400
|
+
const targetBranch = project?.target_branch || getTargetBranch();
|
|
401
|
+
const mergeStrategy = getMergeStrategy();
|
|
402
|
+
if (mergeStrategy === 'pr') {
|
|
403
|
+
prompt += `\n\n## 작업 지시 (WBS 독립 작업)\n\n이 작업은 GitHub Issue 없이 WBS에서 직접 생성된 작업입니다.\n\n### Git 워크플로우\n\`\`\`bash\ngit worktree add worktree/${branch} -b ${branch} ${sourceBranch}\ncd worktree/${branch}\ngh pr create --base ${targetBranch} --title "[WBS-${job.wbs_id}] ${job.title}" --body "WBS Job: ${job.id}"\n\`\`\`\n\n### 주의사항\n- main/develop에서 직접 작업 금지\n- 반드시 worktree에서 작업\n- PR 생성 후 링크 출력\n\nWBS 추적 정보:\n- WBS: ${job.wbs_id}\n- Job: ${job.id}\n- 브랜치: ${branch}\n- Source 브랜치: ${sourceBranch}\n- Target 브랜치: ${targetBranch}\n`;
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
prompt += `\n\n## 작업 지시 (WBS 독립 작업)\n\n이 작업은 GitHub Issue 없이 WBS에서 직접 생성된 작업입니다.\n\n### Git 워크플로우 (로컬 머지)\n\`\`\`bash\ngit worktree add worktree/${branch} -b ${branch} ${sourceBranch}\ncd worktree/${branch}\n# ... 작업 후 커밋 ...\ngit checkout ${targetBranch}\ngit merge ${branch} --no-ff -m 'merge: [WBS-${job.wbs_id}] ${job.title}'\ngit worktree remove worktree/${branch}\ngit branch -d ${branch}\n\`\`\`\n\n### 주의사항\n- main/develop에서 직접 작업 금지\n- 반드시 worktree에서 작업 후 로컬 머지\n- 머지 완료 후 worktree 및 브랜치 정리\n\nWBS 추적 정보:\n- WBS: ${job.wbs_id}\n- Job: ${job.id}\n- 브랜치: ${branch}\n- Source 브랜치: ${sourceBranch}\n- Target 브랜치: ${targetBranch}\n`;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
prompt += `\n\n## 작업 지시 (WBS 독립 작업)\n\n이 작업은 GitHub Issue 없이 WBS에서 직접 생성된 작업입니다.\n\n### 주의사항\n- 이 작업은 \`--no-git\`로 생성되어 Git worktree/PR 템플릿을 생략합니다.\n- 작업 성격에 맞는 절차(예: 디자인/리서치/문서 작업)를 따르세요.\n\nWBS 추적 정보:\n- WBS: ${job.wbs_id}\n- Job: ${job.id}\n- no_git: true\n`;
|
|
411
|
+
}
|
|
412
|
+
return new Promise((resolve) => {
|
|
413
|
+
const env = { ...process.env };
|
|
414
|
+
delete env.CLAUDECODE;
|
|
415
|
+
const child = (0, child_process_1.spawn)('crewx', ['x', `${job.agent} ${prompt}`], {
|
|
416
|
+
stdio: ['inherit', 'pipe', 'inherit'],
|
|
417
|
+
cwd: getProjectRoot(),
|
|
418
|
+
env,
|
|
419
|
+
});
|
|
420
|
+
let stdoutBuffer = '';
|
|
421
|
+
child.stdout?.on('data', (chunk) => {
|
|
422
|
+
const text = chunk.toString();
|
|
423
|
+
process.stdout.write(chunk);
|
|
424
|
+
stdoutBuffer += text;
|
|
425
|
+
});
|
|
426
|
+
const execId = this.createExecution(job.id, child.pid ?? null);
|
|
427
|
+
runningProcesses.set(execId, child);
|
|
428
|
+
console.log(`[WBS] Execution ID: ${execId}`);
|
|
429
|
+
console.log(`[WBS] PID: ${child.pid}`);
|
|
430
|
+
const extractTaskId = () => {
|
|
431
|
+
const match = stdoutBuffer.match(/Task ID:\s*(\S+)/);
|
|
432
|
+
return match?.[1];
|
|
433
|
+
};
|
|
434
|
+
const timeout = setTimeout(() => {
|
|
435
|
+
console.error('[WBS] Timeout reached, killing process...');
|
|
436
|
+
child.kill('SIGTERM');
|
|
437
|
+
this.updateExecution(execId, 'failed', { error: 'Timeout (30 minutes)', taskId: extractTaskId() });
|
|
438
|
+
this.updateJob(job.id, { status: 'failed' });
|
|
439
|
+
runningProcesses.delete(execId);
|
|
440
|
+
resolve({ success: false, error: 'Timeout', execId });
|
|
441
|
+
}, 30 * 60 * 1000);
|
|
442
|
+
child.on('close', (code) => {
|
|
443
|
+
clearTimeout(timeout);
|
|
444
|
+
runningProcesses.delete(execId);
|
|
445
|
+
const taskId = extractTaskId();
|
|
446
|
+
console.log('─'.repeat(50));
|
|
447
|
+
if (taskId) {
|
|
448
|
+
console.log(`[WBS] Traced Task ID: ${taskId}`);
|
|
449
|
+
}
|
|
450
|
+
if (code === 0) {
|
|
451
|
+
this.updateExecution(execId, 'completed', { exitCode: code, taskId });
|
|
452
|
+
this.updateJob(job.id, { status: 'completed' });
|
|
453
|
+
console.log(`[WBS] Job completed: ${job.title}`);
|
|
454
|
+
resolve({ success: true, execId });
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
this.updateExecution(execId, 'failed', { exitCode: code ?? undefined, error: `Exit code: ${code}`, taskId });
|
|
458
|
+
this.updateJob(job.id, { status: 'failed' });
|
|
459
|
+
console.error(`[WBS] Job failed: ${job.title} (exit: ${code})`);
|
|
460
|
+
resolve({ success: false, error: `Exit code: ${code}`, execId });
|
|
461
|
+
}
|
|
462
|
+
});
|
|
463
|
+
child.on('error', (err) => {
|
|
464
|
+
clearTimeout(timeout);
|
|
465
|
+
runningProcesses.delete(execId);
|
|
466
|
+
this.updateExecution(execId, 'failed', { error: err.message, taskId: extractTaskId() });
|
|
467
|
+
this.updateJob(job.id, { status: 'failed' });
|
|
468
|
+
console.error('─'.repeat(50));
|
|
469
|
+
console.error(`[WBS] Job failed: ${job.title}`);
|
|
470
|
+
console.error(`[WBS] Error: ${err.message}`);
|
|
471
|
+
resolve({ success: false, error: err.message, execId });
|
|
472
|
+
});
|
|
473
|
+
});
|
|
474
|
+
},
|
|
475
|
+
async run(wbsId, opts = {}) {
|
|
476
|
+
const project = this.getProject(wbsId);
|
|
477
|
+
if (!project) {
|
|
478
|
+
console.error(`[WBS] Project not found: ${wbsId}`);
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
const parallel = opts.parallel ?? false;
|
|
482
|
+
console.log(`\n${'═'.repeat(50)}`);
|
|
483
|
+
console.log(`[WBS] Starting project: ${project.title}`);
|
|
484
|
+
console.log(`[WBS] Mode: ${parallel ? 'parallel-by-seq' : 'sequential'}`);
|
|
485
|
+
console.log(`${'═'.repeat(50)}\n`);
|
|
486
|
+
this.setStatus(wbsId, 'running');
|
|
487
|
+
let completed = 0;
|
|
488
|
+
let failed = 0;
|
|
489
|
+
if (!parallel) {
|
|
490
|
+
let job;
|
|
491
|
+
while ((job = this.getNextJob(wbsId)) !== null) {
|
|
492
|
+
const result = await this.runWorker(job);
|
|
493
|
+
if (result.success)
|
|
494
|
+
completed++;
|
|
495
|
+
else
|
|
496
|
+
failed++;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
else {
|
|
500
|
+
let nextSeq;
|
|
501
|
+
while ((nextSeq = this.getNextSeq(wbsId)) !== null) {
|
|
502
|
+
const jobs = this.getJobsBySeq(wbsId, nextSeq, 'pending');
|
|
503
|
+
if (jobs.length === 0)
|
|
504
|
+
continue;
|
|
505
|
+
console.log(`[WBS] Running seq group ${nextSeq} (${jobs.length} job(s)) in parallel`);
|
|
506
|
+
const results = await Promise.all(jobs.map(job => this.runWorker(job)));
|
|
507
|
+
for (const result of results) {
|
|
508
|
+
if (result.success)
|
|
509
|
+
completed++;
|
|
510
|
+
else
|
|
511
|
+
failed++;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
this.setStatus(wbsId, failed === 0 ? 'completed' : 'partial');
|
|
516
|
+
console.log(`\n${'═'.repeat(50)}`);
|
|
517
|
+
console.log(`[WBS] Project ${failed === 0 ? 'completed' : 'partial'}: ${project.title}`);
|
|
518
|
+
console.log(`[WBS] Completed: ${completed}, Failed: ${failed}`);
|
|
519
|
+
console.log(`${'═'.repeat(50)}\n`);
|
|
520
|
+
},
|
|
521
|
+
daemonPidFile: DAEMON_PID_FILE,
|
|
522
|
+
daemonLogFile: DAEMON_LOG_FILE,
|
|
523
|
+
isProcessAlive(pid) {
|
|
524
|
+
try {
|
|
525
|
+
process.kill(pid, 0);
|
|
526
|
+
return true;
|
|
527
|
+
}
|
|
528
|
+
catch {
|
|
529
|
+
return false;
|
|
530
|
+
}
|
|
531
|
+
},
|
|
532
|
+
checkAndFixZombies() {
|
|
533
|
+
const running = this.getRunningExecutions();
|
|
534
|
+
const zombies = [];
|
|
535
|
+
const now = Date.now();
|
|
536
|
+
for (const exec of running) {
|
|
537
|
+
const elapsed = now - new Date(exec.started_at).getTime();
|
|
538
|
+
const alive = exec.pid ? this.isProcessAlive(exec.pid) : false;
|
|
539
|
+
if (!alive || elapsed > exports.ZOMBIE_TIMEOUT_MS) {
|
|
540
|
+
const reason = !alive ? 'Process dead' : 'Timeout (30min)';
|
|
541
|
+
alasql('UPDATE executions SET status = ?, ended_at = ?, error = ? WHERE id = ?', ['failed', new Date().toISOString(), `Zombie: ${reason}`, exec.id]);
|
|
542
|
+
alasql('UPDATE jobs SET status = ?, completed_at = ? WHERE id = ?', ['failed', new Date().toISOString(), exec.job_id]);
|
|
543
|
+
zombies.push({ execId: exec.id, jobId: exec.job_id, pid: exec.pid, reason });
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
if (zombies.length > 0)
|
|
547
|
+
saveData();
|
|
548
|
+
return zombies;
|
|
549
|
+
},
|
|
550
|
+
};
|
|
551
|
+
//# sourceMappingURL=engine.js.map
|