@litmers/cursorflow-orchestrator 0.1.37 → 0.1.40
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 +13 -13
- package/commands/cursorflow-init.md +113 -32
- package/commands/cursorflow-prepare.md +146 -339
- package/commands/cursorflow-run.md +148 -131
- package/dist/cli/add.js +8 -4
- package/dist/cli/add.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/new.js +3 -5
- package/dist/cli/new.js.map +1 -1
- package/dist/cli/prepare.js +0 -1
- package/dist/cli/prepare.js.map +1 -1
- package/dist/cli/resume.js +24 -15
- package/dist/cli/resume.js.map +1 -1
- package/dist/cli/run.js +1 -6
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/setup-commands.d.ts +1 -0
- package/dist/cli/setup-commands.js +1 -0
- package/dist/cli/setup-commands.js.map +1 -1
- package/dist/core/orchestrator.js +13 -5
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/runner/agent.d.ts +5 -1
- package/dist/core/runner/agent.js +31 -1
- package/dist/core/runner/agent.js.map +1 -1
- package/dist/core/runner/pipeline.d.ts +0 -1
- package/dist/core/runner/pipeline.js +136 -173
- package/dist/core/runner/pipeline.js.map +1 -1
- package/dist/core/runner/prompt.d.ts +0 -1
- package/dist/core/runner/prompt.js +11 -16
- package/dist/core/runner/prompt.js.map +1 -1
- package/dist/core/runner/task.d.ts +1 -2
- package/dist/core/runner/task.js +31 -40
- package/dist/core/runner/task.js.map +1 -1
- package/dist/core/runner.js +15 -2
- package/dist/core/runner.js.map +1 -1
- package/dist/core/stall-detection.d.ts +32 -4
- package/dist/core/stall-detection.js +151 -149
- package/dist/core/stall-detection.js.map +1 -1
- package/dist/services/logging/console.d.ts +7 -1
- package/dist/services/logging/console.js +13 -3
- package/dist/services/logging/console.js.map +1 -1
- package/dist/services/logging/formatter.d.ts +1 -0
- package/dist/services/logging/formatter.js +6 -3
- package/dist/services/logging/formatter.js.map +1 -1
- package/dist/types/config.d.ts +3 -1
- package/dist/types/logging.d.ts +1 -1
- package/dist/types/task.d.ts +3 -8
- package/dist/utils/config.js +5 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/doctor.js +4 -4
- package/dist/utils/doctor.js.map +1 -1
- package/dist/utils/enhanced-logger.d.ts +1 -1
- package/dist/utils/enhanced-logger.js +3 -3
- package/dist/utils/enhanced-logger.js.map +1 -1
- package/dist/utils/git.d.ts +12 -1
- package/dist/utils/git.js +56 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/health.js +13 -13
- package/dist/utils/health.js.map +1 -1
- package/dist/utils/log-formatter.d.ts +1 -1
- package/dist/utils/log-formatter.js +45 -8
- package/dist/utils/log-formatter.js.map +1 -1
- package/dist/utils/logger.js +2 -2
- package/dist/utils/logger.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/add.ts +9 -4
- package/src/cli/index.ts +3 -0
- package/src/cli/new.ts +3 -5
- package/src/cli/prepare.ts +0 -1
- package/src/cli/resume.ts +28 -19
- package/src/cli/run.ts +1 -6
- package/src/cli/setup-commands.ts +1 -1
- package/src/core/orchestrator.ts +14 -5
- package/src/core/runner/agent.ts +36 -4
- package/src/core/runner/pipeline.ts +149 -182
- package/src/core/runner/prompt.ts +11 -18
- package/src/core/runner/task.ts +32 -41
- package/src/core/runner.ts +17 -2
- package/src/core/stall-detection.ts +263 -147
- package/src/services/logging/console.ts +13 -3
- package/src/services/logging/formatter.ts +6 -3
- package/src/types/config.ts +3 -1
- package/src/types/logging.ts +4 -2
- package/src/types/task.ts +3 -8
- package/src/utils/config.ts +6 -0
- package/src/utils/doctor.ts +5 -5
- package/src/utils/enhanced-logger.ts +3 -3
- package/src/utils/flow.ts +1 -0
- package/src/utils/git.ts +61 -1
- package/src/utils/health.ts +15 -15
- package/src/utils/log-formatter.ts +51 -8
- package/src/utils/logger.ts +2 -2
- package/commands/cursorflow-add.md +0 -159
- package/commands/cursorflow-clean.md +0 -84
- package/commands/cursorflow-doctor.md +0 -102
- package/commands/cursorflow-models.md +0 -51
- package/commands/cursorflow-monitor.md +0 -90
- package/commands/cursorflow-new.md +0 -87
- package/commands/cursorflow-resume.md +0 -205
- package/commands/cursorflow-signal.md +0 -52
- package/commands/cursorflow-stop.md +0 -55
- package/commands/cursorflow-triggers.md +0 -250
|
@@ -12,7 +12,6 @@ export declare function wrapPromptForDependencyPolicy(prompt: string, policy: De
|
|
|
12
12
|
* Wrap prompt with global context, dependency policy, and worktree instructions
|
|
13
13
|
*/
|
|
14
14
|
export declare function wrapPrompt(prompt: string, config: RunnerConfig, options?: {
|
|
15
|
-
noGit?: boolean;
|
|
16
15
|
isWorktree?: boolean;
|
|
17
16
|
dependencyResults?: DependencyResult[];
|
|
18
17
|
worktreePath?: string;
|
|
@@ -60,16 +60,16 @@ function wrapPromptForDependencyPolicy(prompt, policy) {
|
|
|
60
60
|
* Wrap prompt with global context, dependency policy, and worktree instructions
|
|
61
61
|
*/
|
|
62
62
|
function wrapPrompt(prompt, config, options = {}) {
|
|
63
|
-
const {
|
|
63
|
+
const { isWorktree = true, dependencyResults = [], worktreePath, taskBranch, pipelineBranch } = options;
|
|
64
64
|
// 1. PREFIX: Environment & Worktree context
|
|
65
65
|
let wrapped = `### 🛠 Environment & Context\n`;
|
|
66
66
|
wrapped += `- **Workspace**: 당신은 독립된 **Git 워크트리** (프로젝트 루트)에서 작업 중입니다.\n`;
|
|
67
67
|
wrapped += `- **CWD**: 현재 터미널과 작업 경로는 이미 워크트리 루트(\`${worktreePath || 'current'}\`)로 설정되어 있습니다.\n`;
|
|
68
|
-
if (taskBranch
|
|
68
|
+
if (taskBranch) {
|
|
69
69
|
wrapped += `- **Current Branch**: \`${taskBranch}\` (현재 작업 중인 브랜치)\n`;
|
|
70
70
|
wrapped += `- **Branch Check**: 만약 브랜치가 다르다면 \`git checkout ${taskBranch}\`를 실행하세요.\n`;
|
|
71
71
|
}
|
|
72
|
-
if (pipelineBranch
|
|
72
|
+
if (pipelineBranch) {
|
|
73
73
|
wrapped += `- **Base Branch**: \`${pipelineBranch}\` (이 작업의 기준이 되는 상위 브랜치)\n`;
|
|
74
74
|
}
|
|
75
75
|
if (worktreePath) {
|
|
@@ -108,9 +108,6 @@ function wrapPrompt(prompt, config, options = {}) {
|
|
|
108
108
|
wrapped += `\n### 📦 Dependency Policy\n`;
|
|
109
109
|
wrapped += `- allowDependencyChange: ${policy.allowDependencyChange}\n`;
|
|
110
110
|
wrapped += `- lockfileReadOnly: ${policy.lockfileReadOnly}\n`;
|
|
111
|
-
if (noGit) {
|
|
112
|
-
wrapped += `- NO_GIT_MODE: Git 명령어를 사용하지 마세요. 파일 수정만 가능합니다.\n`;
|
|
113
|
-
}
|
|
114
111
|
wrapped += `\n**📦 Dependency Change Rules:**\n`;
|
|
115
112
|
wrapped += `1. 코드를 수정하기 전, 의존성 변경이 필요한지 **먼저** 판단하세요.\n`;
|
|
116
113
|
wrapped += `2. 의존성 변경이 필요하다면:\n`;
|
|
@@ -130,16 +127,14 @@ function wrapPrompt(prompt, config, options = {}) {
|
|
|
130
127
|
// 4. SUFFIX: Task Completion & Git Requirements
|
|
131
128
|
wrapped += `\n### 📝 Task Completion Requirements\n`;
|
|
132
129
|
wrapped += `**반드시 다음 순서로 작업을 마무리하세요 (매우 중요):**\n\n`;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
wrapped += ` ⚠️ **주의**: 커밋과 푸시를 생략하면 오케스트레이터가 변경 사항을 인식하지 못하며 작업이 손실됩니다.\n\n`;
|
|
142
|
-
}
|
|
130
|
+
wrapped += `1. **변경 사항 확인**: \`git status\`와 \`git diff\`로 수정된 내용을 최종 확인하세요.\n`;
|
|
131
|
+
wrapped += `2. **Git Commit & Push** (필수!):\n`;
|
|
132
|
+
wrapped += ` \`\`\`bash\n`;
|
|
133
|
+
wrapped += ` git add -A\n`;
|
|
134
|
+
wrapped += ` git commit -m "feat: <작업 내용 요약>"\n`;
|
|
135
|
+
wrapped += ` git push origin HEAD\n`;
|
|
136
|
+
wrapped += ` \`\`\`\n`;
|
|
137
|
+
wrapped += ` ⚠️ **주의**: 커밋과 푸시를 생략하면 오케스트레이터가 변경 사항을 인식하지 못하며 작업이 손실됩니다.\n\n`;
|
|
143
138
|
wrapped += `3. **최종 요약**: 작업 완료 후 아래 형식을 포함하여 요약해 주세요:\n`;
|
|
144
139
|
wrapped += ` - **수정된 파일**: [파일명1, 파일명2, ...]\n`;
|
|
145
140
|
wrapped += ` - **작업 결과**: [핵심 변경 사항 요약]\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/core/runner/prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,sEAWC;AAKD,
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/core/runner/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ export declare function mergeDependencyBranches(deps: string[], runDir: string,
|
|
|
12
12
|
/**
|
|
13
13
|
* Run a single task
|
|
14
14
|
*/
|
|
15
|
-
export declare function runTask({ task, config, index, worktreeDir, pipelineBranch, taskBranch, chatId, runDir, runRoot,
|
|
15
|
+
export declare function runTask({ task, config, index, worktreeDir, pipelineBranch, taskBranch, chatId, runDir, runRoot, }: {
|
|
16
16
|
task: Task;
|
|
17
17
|
config: RunnerConfig;
|
|
18
18
|
index: number;
|
|
@@ -22,5 +22,4 @@ export declare function runTask({ task, config, index, worktreeDir, pipelineBran
|
|
|
22
22
|
chatId: string;
|
|
23
23
|
runDir: string;
|
|
24
24
|
runRoot?: string;
|
|
25
|
-
noGit?: boolean;
|
|
26
25
|
}): Promise<TaskExecutionResult>;
|
package/dist/core/runner/task.js
CHANGED
|
@@ -93,10 +93,13 @@ async function mergeDependencyBranches(deps, runDir, worktreeDir, pipelineBranch
|
|
|
93
93
|
if (!state?.pipelineBranch)
|
|
94
94
|
continue;
|
|
95
95
|
logger.info(`Merging branch from ${laneName}: ${state.pipelineBranch}`);
|
|
96
|
-
// Ensure we have the latest
|
|
96
|
+
// Ensure we have the latest from remote
|
|
97
97
|
git.runGit(['fetch', 'origin', state.pipelineBranch], { cwd: worktreeDir, silent: true });
|
|
98
|
+
// Use the remote ref for merging (origin/<branch>) since dependency branches
|
|
99
|
+
// are pushed to remote by other lanes and may not exist as local branches
|
|
100
|
+
const remoteBranchRef = `origin/${state.pipelineBranch}`;
|
|
98
101
|
// Pre-check for conflicts before attempting merge
|
|
99
|
-
const conflictCheck = git.checkMergeConflict(
|
|
102
|
+
const conflictCheck = git.checkMergeConflict(remoteBranchRef, { cwd: worktreeDir });
|
|
100
103
|
if (conflictCheck.willConflict) {
|
|
101
104
|
logger.warn(`⚠️ Pre-check: Merge conflict detected with ${laneName}`);
|
|
102
105
|
logger.warn(` Conflicting files: ${conflictCheck.conflictingFiles.join(', ')}`);
|
|
@@ -109,8 +112,8 @@ async function mergeDependencyBranches(deps, runDir, worktreeDir, pipelineBranch
|
|
|
109
112
|
});
|
|
110
113
|
throw new Error(`Pre-merge conflict check failed: ${conflictCheck.conflictingFiles.join(', ')}. Consider rebasing or resolving conflicts manually.`);
|
|
111
114
|
}
|
|
112
|
-
// Use safe merge with conflict detection
|
|
113
|
-
const mergeResult = git.safeMerge(
|
|
115
|
+
// Use safe merge with conflict detection - merge from remote ref
|
|
116
|
+
const mergeResult = git.safeMerge(remoteBranchRef, {
|
|
114
117
|
cwd: worktreeDir,
|
|
115
118
|
noFf: true,
|
|
116
119
|
message: `chore: merge task dependency from ${laneName}`,
|
|
@@ -134,7 +137,7 @@ async function mergeDependencyBranches(deps, runDir, worktreeDir, pipelineBranch
|
|
|
134
137
|
/**
|
|
135
138
|
* Run a single task
|
|
136
139
|
*/
|
|
137
|
-
async function runTask({ task, config, index, worktreeDir, pipelineBranch, taskBranch, chatId, runDir, runRoot,
|
|
140
|
+
async function runTask({ task, config, index, worktreeDir, pipelineBranch, taskBranch, chatId, runDir, runRoot, }) {
|
|
138
141
|
// Calculate runRoot if not provided (runDir is lanes/{laneName}/, runRoot is parent of lanes/)
|
|
139
142
|
const calculatedRunRoot = runRoot || path.dirname(path.dirname(runDir));
|
|
140
143
|
const model = task.model || config.model || 'sonnet-4.5';
|
|
@@ -142,42 +145,33 @@ async function runTask({ task, config, index, worktreeDir, pipelineBranch, taskB
|
|
|
142
145
|
const convoPath = (0, path_1.safeJoin)(runDir, 'conversation.jsonl');
|
|
143
146
|
logger.section(`[${index + 1}/${config.tasks.length}] ${task.name}`);
|
|
144
147
|
logger.info(`Model: ${model}`);
|
|
145
|
-
|
|
146
|
-
logger.info('🚫 noGit mode: skipping branch operations');
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
logger.info(`Branch: ${taskBranch}`);
|
|
150
|
-
}
|
|
148
|
+
logger.info(`Branch: ${taskBranch}`);
|
|
151
149
|
events_1.events.emit('task.started', {
|
|
152
150
|
taskName: task.name,
|
|
153
151
|
taskBranch,
|
|
154
152
|
index,
|
|
155
153
|
});
|
|
156
|
-
// Sync pipelineBranch with remote before starting
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
logger.info(` Branch ${pipelineBranch} not yet on remote, skipping sync`);
|
|
166
|
-
}
|
|
167
|
-
// Try to fast-forward if behind
|
|
168
|
-
const syncResult = git.syncBranchWithRemote(pipelineBranch, { cwd: worktreeDir, createIfMissing: true });
|
|
169
|
-
if (syncResult.updated) {
|
|
170
|
-
logger.info(` ✓ Updated ${pipelineBranch} with ${syncResult.behind || 0} new commits from remote`);
|
|
171
|
-
}
|
|
172
|
-
else if (syncResult.error) {
|
|
173
|
-
logger.warn(` ⚠️ Could not sync: ${syncResult.error}`);
|
|
174
|
-
}
|
|
154
|
+
// Sync pipelineBranch with remote before starting
|
|
155
|
+
logger.info(`🔄 Syncing ${pipelineBranch} with remote...`);
|
|
156
|
+
// Fetch latest from remote
|
|
157
|
+
try {
|
|
158
|
+
git.runGit(['fetch', 'origin', pipelineBranch], { cwd: worktreeDir, silent: true });
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Branch might not exist on remote yet - that's OK
|
|
162
|
+
logger.info(` Branch ${pipelineBranch} not yet on remote, skipping sync`);
|
|
175
163
|
}
|
|
176
|
-
//
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
164
|
+
// Try to fast-forward if behind
|
|
165
|
+
const syncResult = git.syncBranchWithRemote(pipelineBranch, { cwd: worktreeDir, createIfMissing: true });
|
|
166
|
+
if (syncResult.updated) {
|
|
167
|
+
logger.info(` ✓ Updated ${pipelineBranch} with ${syncResult.behind || 0} new commits from remote`);
|
|
180
168
|
}
|
|
169
|
+
else if (syncResult.error) {
|
|
170
|
+
logger.warn(` ⚠️ Could not sync: ${syncResult.error}`);
|
|
171
|
+
}
|
|
172
|
+
// Checkout task branch from pipeline branch
|
|
173
|
+
logger.info(`🌿 Forking task branch: ${taskBranch} from ${pipelineBranch}`);
|
|
174
|
+
git.runGit(['checkout', '-B', taskBranch, pipelineBranch], { cwd: worktreeDir });
|
|
181
175
|
// Apply dependency permissions
|
|
182
176
|
(0, prompt_1.applyDependencyFilePermissions)(worktreeDir, config.dependencyPolicy);
|
|
183
177
|
// Load dependency results if this task has dependsOn
|
|
@@ -187,8 +181,7 @@ async function runTask({ task, config, index, worktreeDir, pipelineBranch, taskB
|
|
|
187
181
|
}
|
|
188
182
|
// Wrap prompt with context, dependency results, and completion instructions
|
|
189
183
|
const wrappedPrompt = (0, prompt_1.wrapPrompt)(task.prompt, config, {
|
|
190
|
-
|
|
191
|
-
isWorktree: !noGit,
|
|
184
|
+
isWorktree: true,
|
|
192
185
|
dependencyResults,
|
|
193
186
|
worktreePath: worktreeDir,
|
|
194
187
|
taskBranch,
|
|
@@ -263,10 +256,8 @@ async function runTask({ task, config, index, worktreeDir, pipelineBranch, taskB
|
|
|
263
256
|
};
|
|
264
257
|
}
|
|
265
258
|
}
|
|
266
|
-
// Push task branch
|
|
267
|
-
|
|
268
|
-
git.push(taskBranch, { cwd: worktreeDir, setUpstream: true });
|
|
269
|
-
}
|
|
259
|
+
// Push task branch
|
|
260
|
+
git.push(taskBranch, { cwd: worktreeDir, setUpstream: true });
|
|
270
261
|
// Save task result for dependency handoff
|
|
271
262
|
(0, utils_1.saveTaskResult)(runDir, index, task.name, r1.resultText || '');
|
|
272
263
|
events_1.events.emit('task.completed', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/core/runner/task.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,0DA0BC;AAKD,
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/core/runner/task.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,0DA0BC;AAKD,0DAmEC;AAKD,0BAgLC;AArTD,uCAAyB;AACzB,2CAA6B;AAC7B,qDAAuC;AACvC,2DAA6C;AAC7C,+CAA4C;AAC5C,2CAA4C;AAC5C,6CAAuE;AAEvE,6CAA8C;AAC9C,uDAAuG;AACvG,mCAGiB;AACjB,qCAGkB;AAClB,mCAMiB;AAEjB;;;GAGG;AACI,KAAK,UAAU,uBAAuB,CAC3C,IAAc,EACd,MAAc,EACd,UAAiC,EAAE;IAEnC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEvC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAW,EAAC,IAAI,EAAE,SAAS,EAAE;QAChD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,qBAAqB;QACrE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;QAC9C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM;QACtC,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,0BAA0B,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/I,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,uBAAuB,CAAC,IAAc,EAAE,MAAc,EAAE,WAAmB,EAAE,cAAsB;IACvH,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEvC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;IAE9D,mEAAmE;IACnE,MAAM,CAAC,IAAI,CAAC,mBAAmB,cAAc,8BAA8B,CAAC,CAAC;IAC7E,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IAE/D,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,IAAA,eAAQ,EAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAS;QAE3C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAA,iBAAS,EAAY,YAAY,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE,cAAc;gBAAE,SAAS;YAErC,MAAM,CAAC,IAAI,CAAC,uBAAuB,QAAQ,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;YAExE,wCAAwC;YACxC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1F,6EAA6E;YAC7E,0EAA0E;YAC1E,MAAM,eAAe,GAAG,UAAU,KAAK,CAAC,cAAc,EAAE,CAAC;YAEzD,kDAAkD;YAClD,MAAM,aAAa,GAAG,GAAG,CAAC,kBAAkB,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;YAEpF,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,8CAA8C,QAAQ,EAAE,CAAC,CAAC;gBACtE,MAAM,CAAC,IAAI,CAAC,yBAAyB,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAElF,yDAAyD;gBACzD,eAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;oBACrC,QAAQ;oBACR,YAAY,EAAE,KAAK,CAAC,cAAc;oBAClC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;oBAChD,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBAEH,MAAM,IAAI,KAAK,CAAC,oCAAoC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACvJ,CAAC;YAED,iEAAiE;YACjE,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE;gBACjD,GAAG,EAAE,WAAW;gBAChB,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,qCAAqC,QAAQ,EAAE;gBACxD,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;oBACzB,MAAM,CAAC,KAAK,CAAC,uBAAuB,QAAQ,KAAK,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC5F,MAAM,IAAI,KAAK,CAAC,mBAAmB,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChF,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,+BAA+B,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9D,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,OAAO,CAAC,EAC5B,IAAI,EACJ,MAAM,EACN,KAAK,EACL,WAAW,EACX,cAAc,EACd,UAAU,EACV,MAAM,EACN,MAAM,EACN,OAAO,GAWR;IACC,+FAA+F;IAC/F,MAAM,iBAAiB,GAAG,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,YAAY,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAA,eAAQ,EAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAEzD,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;IAErC,eAAM,CAAC,IAAI,CAAC,cAAc,EAAE;QAC1B,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,UAAU;QACV,KAAK;KACN,CAAC,CAAC;IAEH,kDAAkD;IAClD,MAAM,CAAC,IAAI,CAAC,cAAc,cAAc,iBAAiB,CAAC,CAAC;IAE3D,2BAA2B;IAC3B,IAAI,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;QACnD,MAAM,CAAC,IAAI,CAAC,YAAY,cAAc,mCAAmC,CAAC,CAAC;IAC7E,CAAC;IAED,gCAAgC;IAChC,MAAM,UAAU,GAAG,GAAG,CAAC,oBAAoB,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IACzG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,eAAe,cAAc,SAAS,UAAU,CAAC,MAAM,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACtG,CAAC;SAAM,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,wBAAwB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,4CAA4C;IAC5C,MAAM,CAAC,IAAI,CAAC,2BAA2B,UAAU,SAAS,cAAc,EAAE,CAAC,CAAC;IAC5E,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IAEjF,+BAA+B;IAC/B,IAAA,uCAA8B,EAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAErE,qDAAqD;IACrD,IAAI,iBAAiB,GAAuB,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,iBAAiB,GAAG,IAAA,6BAAqB,EAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC/E,CAAC;IAED,4EAA4E;IAC5E,MAAM,aAAa,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;QACpD,UAAU,EAAE,IAAI;QAChB,iBAAiB;QACjB,YAAY,EAAE,WAAW;QACzB,UAAU;QACV,cAAc;KACf,CAAC,CAAC;IAEH,kDAAkD;IAClD,IAAA,iBAAS,EAAC,SAAS,EAAE,IAAA,+BAAuB,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;QAChE,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK;KACN,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,eAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;QAC/B,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,KAAK;QACL,YAAY,EAAE,aAAa,CAAC,MAAM;KACnC,CAAC,CAAC;IAEH,MAAM,EAAE,GAAG,MAAM,IAAA,uBAAe,EAAC;QAC/B,YAAY,EAAE,WAAW;QACzB,MAAM;QACN,MAAM,EAAE,aAAa;QACrB,KAAK;QACL,SAAS,EAAE,MAAM;QACjB,OAAO;QACP,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,YAAY,EAAE,MAAM,CAAC,iBAAiB;QACtC,QAAQ,EAAE,IAAI,CAAC,IAAI;KACpB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,eAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;QACrC,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,EAAE,EAAE,EAAE,CAAC,EAAE;QACT,QAAQ;QACR,cAAc,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;QAC1C,KAAK,EAAE,EAAE,CAAC,KAAK;KAChB,CAAC,CAAC;IAEH,IAAA,iBAAS,EAAC,SAAS,EAAE,IAAA,+BAAuB,EAAC,WAAW,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,KAAK,IAAI,aAAa,EAAE;QACpG,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK;KACN,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACX,eAAM,CAAC,IAAI,CAAC,aAAa,EAAE;YACzB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,UAAU;YACV,KAAK,EAAE,EAAE,CAAC,KAAK;SAChB,CAAC,CAAC;QACH,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,UAAU;YACV,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,EAAE,CAAC,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,MAAM,UAAU,GAAG,IAAA,iCAAyB,EAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAA,gCAAwB,EAAC,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAEjE,mFAAmF;IACnF,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IAE7D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC,CAAC;QAE9F,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;YACnD,wDAAwD;YACxD,IAAA,kCAA0B,EAAC,WAAW,CAAC,CAAC;YAExC,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,UAAU;gBACV,MAAM,EAAE,oBAAoB;gBAC5B,iBAAiB,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;aACvC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9D,0CAA0C;IAC1C,IAAA,sBAAc,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAE9D,eAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;QAC5B,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,UAAU;QACV,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,UAAU;QACV,MAAM,EAAE,UAAU;KACnB,CAAC;AACJ,CAAC"}
|
package/dist/core/runner.js
CHANGED
|
@@ -43,6 +43,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
43
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
44
|
const fs = __importStar(require("fs"));
|
|
45
45
|
const path = __importStar(require("path"));
|
|
46
|
+
const logger = __importStar(require("../utils/logger"));
|
|
46
47
|
const config_1 = require("../utils/config");
|
|
47
48
|
const webhook_1 = require("../utils/webhook");
|
|
48
49
|
const events_1 = require("../utils/events");
|
|
@@ -50,6 +51,7 @@ const events_1 = require("../utils/events");
|
|
|
50
51
|
__exportStar(require("./runner/index"), exports);
|
|
51
52
|
// Import necessary parts for the CLI entry point
|
|
52
53
|
const pipeline_1 = require("./runner/pipeline");
|
|
54
|
+
const agent_1 = require("./runner/agent");
|
|
53
55
|
/**
|
|
54
56
|
* CLI entry point
|
|
55
57
|
*/
|
|
@@ -64,7 +66,6 @@ if (require.main === module) {
|
|
|
64
66
|
const startIdxIdx = args.indexOf('--start-index');
|
|
65
67
|
const pipelineBranchIdx = args.indexOf('--pipeline-branch');
|
|
66
68
|
const worktreeDirIdx = args.indexOf('--worktree-dir');
|
|
67
|
-
const noGit = args.includes('--no-git');
|
|
68
69
|
const runDir = runDirIdx >= 0 ? args[runDirIdx + 1] : '.';
|
|
69
70
|
const startIndex = startIdxIdx >= 0 ? parseInt(args[startIdxIdx + 1] || '0') : 0;
|
|
70
71
|
const forcedPipelineBranch = pipelineBranchIdx >= 0 ? args[pipelineBranchIdx + 1] : null;
|
|
@@ -111,8 +112,20 @@ if (require.main === module) {
|
|
|
111
112
|
};
|
|
112
113
|
// Add agent output format default
|
|
113
114
|
config.agentOutputFormat = config.agentOutputFormat || globalConfig?.agentOutputFormat || 'json';
|
|
115
|
+
// Merge intervention and logging settings
|
|
116
|
+
config.enableIntervention = config.enableIntervention ?? globalConfig?.enableIntervention ?? true;
|
|
117
|
+
config.verboseGit = config.verboseGit ?? globalConfig?.verboseGit ?? false;
|
|
118
|
+
// Handle process interruption to ensure cleanup
|
|
119
|
+
const handleSignal = (signal) => {
|
|
120
|
+
logger.warn(`\n⚠️ Runner received ${signal}. Shutting down...`);
|
|
121
|
+
// Cleanup any active agent child processes
|
|
122
|
+
(0, agent_1.cleanupAgentChildren)();
|
|
123
|
+
process.exit(1);
|
|
124
|
+
};
|
|
125
|
+
process.on('SIGINT', () => handleSignal('SIGINT'));
|
|
126
|
+
process.on('SIGTERM', () => handleSignal('SIGTERM'));
|
|
114
127
|
// Run tasks
|
|
115
|
-
(0, pipeline_1.runTasks)(tasksFile, config, runDir, { startIndex
|
|
128
|
+
(0, pipeline_1.runTasks)(tasksFile, config, runDir, { startIndex })
|
|
116
129
|
.then(() => {
|
|
117
130
|
process.exit(0);
|
|
118
131
|
})
|
package/dist/core/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -100,6 +100,10 @@ export interface LaneStallState {
|
|
|
100
100
|
laneName: string;
|
|
101
101
|
/** 현재 복구 단계 */
|
|
102
102
|
phase: StallPhase;
|
|
103
|
+
/** Lane의 현재 상태 (waiting, running 등) - waiting 시 stall 분석 스킵 */
|
|
104
|
+
laneStatus?: string;
|
|
105
|
+
/** Intervention 활성화 여부 - false면 continue 신호 스킵 */
|
|
106
|
+
interventionEnabled?: boolean;
|
|
103
107
|
/** 마지막 실제 활동 시간 (bytes > 0) */
|
|
104
108
|
lastRealActivityTime: number;
|
|
105
109
|
/** 마지막 상태 변경 시간 (phase 변경) */
|
|
@@ -202,6 +206,7 @@ export declare class StallDetectionService {
|
|
|
202
206
|
laneRunDir?: string;
|
|
203
207
|
childProcess?: ChildProcess;
|
|
204
208
|
startIndex?: number;
|
|
209
|
+
interventionEnabled?: boolean;
|
|
205
210
|
}): void;
|
|
206
211
|
/**
|
|
207
212
|
* Lane 해제
|
|
@@ -219,6 +224,16 @@ export declare class StallDetectionService {
|
|
|
219
224
|
* LaneRunDir 업데이트
|
|
220
225
|
*/
|
|
221
226
|
setLaneRunDir(laneName: string, dir: string): void;
|
|
227
|
+
/**
|
|
228
|
+
* Lane 상태 업데이트 (waiting, running 등)
|
|
229
|
+
* waiting 상태일 때는 stall 분석을 스킵함
|
|
230
|
+
*/
|
|
231
|
+
setLaneStatus(laneName: string, status: string): void;
|
|
232
|
+
/**
|
|
233
|
+
* Intervention 활성화 상태 설정
|
|
234
|
+
* false로 설정하면 continue 신호를 보내지 않음
|
|
235
|
+
*/
|
|
236
|
+
setInterventionEnabled(laneName: string, enabled: boolean): void;
|
|
222
237
|
/**
|
|
223
238
|
* 활동 기록 - stdout/stderr에서 데이터 수신 시 호출
|
|
224
239
|
*
|
|
@@ -239,19 +254,32 @@ export declare class StallDetectionService {
|
|
|
239
254
|
* 새 태스크 시작 기록
|
|
240
255
|
*/
|
|
241
256
|
recordTaskStart(laneName: string): void;
|
|
257
|
+
/** StallAnalysis 생성 헬퍼 */
|
|
258
|
+
private buildAnalysis;
|
|
242
259
|
/**
|
|
243
260
|
* Stall 상태 분석 - 현재 상태에서 필요한 액션 결정
|
|
244
261
|
*
|
|
245
262
|
* 분석 우선순위:
|
|
263
|
+
* 0. waiting 상태면 스킵 (의존성 대기 중)
|
|
246
264
|
* 1. Task timeout (30분) → RESTART/DOCTOR
|
|
247
|
-
* 2. Zero bytes + idle →
|
|
265
|
+
* 2. Zero bytes + idle → phase별 에스컬레이션
|
|
248
266
|
* 3. No progress (10분) → 단계별 에스컬레이션
|
|
249
267
|
* 4. Idle timeout (2분) → 단계별 에스컬레이션
|
|
250
268
|
*/
|
|
251
269
|
analyzeStall(laneName: string): StallAnalysis;
|
|
252
|
-
/**
|
|
253
|
-
|
|
254
|
-
|
|
270
|
+
/** 분석 컨텍스트 생성 */
|
|
271
|
+
private buildAnalysisContext;
|
|
272
|
+
/** Task timeout 체크 */
|
|
273
|
+
private checkTaskTimeout;
|
|
274
|
+
/** Zero bytes 체크 (grace period 존중) */
|
|
275
|
+
private checkZeroBytes;
|
|
276
|
+
/** Progress timeout 체크 */
|
|
277
|
+
private checkProgressTimeout;
|
|
278
|
+
/** Phase별 idle 상태 체크 */
|
|
279
|
+
private checkPhaseBasedIdle;
|
|
280
|
+
/** 재시작 또는 Doctor 실행 결정 헬퍼 */
|
|
281
|
+
private buildRestartOrDoctorAnalysis;
|
|
282
|
+
/** Progress timeout에 대한 에스컬레이션 액션 결정 */
|
|
255
283
|
private getEscalatedAction;
|
|
256
284
|
/**
|
|
257
285
|
* Stall 체크 및 복구 액션 실행
|