@agentteams/runner 0.0.90 → 0.0.92

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.
@@ -3,6 +3,7 @@ import { DaemonApiClient } from '../api-client.js';
3
3
  import { createRunnerFactory } from '../runners/index.js';
4
4
  import { TriggerLogReporter } from '../runners/log-reporter.js';
5
5
  import { resolveRunnerHistoryPaths } from '../utils/runner-history.js';
6
+ import { isGitRepo, createWorktree } from '../utils/git-worktree.js';
6
7
  type TriggerHandlerOptions = {
7
8
  config: RuntimeConfig;
8
9
  client: DaemonApiClient;
@@ -16,6 +17,8 @@ type RemoveAttachmentDirectory = (path: string) => Promise<void>;
16
17
  type TriggerHandlerDependencies = {
17
18
  createRunnerFactory?: typeof createRunnerFactory;
18
19
  createLogReporter?: (client: DaemonApiClient, triggerId: string) => ReporterLike;
20
+ isGitRepo?: typeof isGitRepo;
21
+ createWorktree?: typeof createWorktree;
19
22
  readHistoryFile?: ReadHistoryFile;
20
23
  writeHistoryFile?: WriteHistoryFile;
21
24
  fetchAttachmentFile?: FetchAttachmentFile;
@@ -14,6 +14,8 @@ function sanitizeErrorMessage(msg) {
14
14
  export const createTriggerHandler = (options, dependencies = {}) => {
15
15
  const { config, client, onAuthPathDiscovered } = options;
16
16
  const createRunner = (dependencies.createRunnerFactory ?? createRunnerFactory)(config.runnerCmd);
17
+ const checkIsGitRepo = dependencies.isGitRepo ?? isGitRepo;
18
+ const createRunnerWorktree = dependencies.createWorktree ?? createWorktree;
17
19
  const createLogReporter = dependencies.createLogReporter ??
18
20
  ((apiClient, triggerId) => new TriggerLogReporter(apiClient, triggerId));
19
21
  const readHistoryFile = dependencies.readHistoryFile ?? ((path, encoding) => readFile(path, encoding));
@@ -165,11 +167,11 @@ export const createTriggerHandler = (options, dependencies = {}) => {
165
167
  reporter?.append('WARN', 'Runner did not write a history file. Captured stdout was stored as fallback history.');
166
168
  }
167
169
  if (historyForUpload === null) {
168
- return { uploadedHistoryFile: false };
170
+ return { uploadedHistoryFile: false, hasHistoryFile };
169
171
  }
170
172
  try {
171
173
  await client.updateTriggerHistory(triggerId, historyForUpload);
172
- return { uploadedHistoryFile: hasHistoryFile };
174
+ return { uploadedHistoryFile: hasHistoryFile, hasHistoryFile };
173
175
  }
174
176
  catch (error) {
175
177
  // 히스토리 업로드 실패는 러너 성공을 뒤집지 않는다. 로컬 파일을 보존하고 경고만 남긴다.
@@ -179,13 +181,13 @@ export const createTriggerHandler = (options, dependencies = {}) => {
179
181
  error: error instanceof Error ? error.message : String(error),
180
182
  });
181
183
  reporter?.append('WARN', 'Failed to upload runner history to the server. The local history file is preserved.');
182
- return { uploadedHistoryFile: false };
184
+ return { uploadedHistoryFile: false, hasHistoryFile };
183
185
  }
184
186
  };
185
187
  const buildFallbackHistory = (outputText, errorMessage) => {
186
188
  const summaryLine = errorMessage
187
189
  ? `- Runner terminated with error: ${errorMessage}`
188
- : '- Runner completed successfully but did not write the requested history file.';
190
+ : '- Runner exited without writing the required history file (flagged for review).';
189
191
  const trimmed = outputText.trim();
190
192
  if (trimmed.length === 0) {
191
193
  return ['### Summary', summaryLine, '- No stdout captured.', '', '### Questions for User', 'None'].join('\n');
@@ -211,6 +213,18 @@ export const createTriggerHandler = (options, dependencies = {}) => {
211
213
  }
212
214
  await writeHistoryFile(parentHistoryPath, normalizedMarkdown.slice(0, maxHistoryLength));
213
215
  };
216
+ const reportWorktreeFailure = async (triggerId, reason, reporter) => {
217
+ reporter?.append('ERROR', reason);
218
+ try {
219
+ await client.reportWorktreeStatus(triggerId, 'FAILED', sanitizeErrorMessage(reason));
220
+ }
221
+ catch (error) {
222
+ logger.warn('Failed to report worktree failure status', {
223
+ triggerId,
224
+ error: error instanceof Error ? error.message : String(error),
225
+ });
226
+ }
227
+ };
214
228
  return async (trigger) => {
215
229
  let logReporter = null;
216
230
  let currentHistoryPath = null;
@@ -239,41 +253,45 @@ export const createTriggerHandler = (options, dependencies = {}) => {
239
253
  });
240
254
  activeLogReporter.append('INFO', `Runtime fetched (agentConfigId=${runtime.agentConfigId}).`);
241
255
  let effectiveAuthPath = runtime.authPath;
242
- if (runtime.useWorktree && runtime.authPath) {
256
+ if (runtime.useWorktree) {
257
+ if (!runtime.authPath) {
258
+ const reason = 'Worktree requested but authPath is not configured.';
259
+ logger.warn('Worktree requested but authPath is not configured', {
260
+ triggerId: trigger.id,
261
+ });
262
+ await reportWorktreeFailure(trigger.id, reason, activeLogReporter);
263
+ throw new Error(reason);
264
+ }
265
+ if (!checkIsGitRepo(runtime.authPath)) {
266
+ const reason = `Not a git repository: ${runtime.authPath}`;
267
+ logger.warn('Worktree requested but authPath is not a git repo', {
268
+ triggerId: trigger.id,
269
+ authPath: runtime.authPath,
270
+ });
271
+ await reportWorktreeFailure(trigger.id, reason, activeLogReporter);
272
+ throw new Error(reason);
273
+ }
243
274
  try {
244
- if (isGitRepo(runtime.authPath)) {
245
- const worktreePath = createWorktree(runtime.authPath, {
246
- worktreeId: runtime.worktreeId ?? trigger.id,
247
- baseBranch: runtime.baseBranch,
248
- });
249
- effectiveAuthPath = worktreePath;
250
- await client.reportWorktreeStatus(trigger.id, 'ACTIVE');
251
- activeLogReporter.append('INFO', `Worktree created at ${worktreePath}.`);
252
- logger.info('Worktree created for trigger', {
253
- triggerId: trigger.id,
254
- worktreePath,
255
- });
256
- }
257
- else {
258
- logger.warn('Worktree requested but authPath is not a git repo, falling back to authPath', {
259
- triggerId: trigger.id,
260
- authPath: runtime.authPath,
261
- });
262
- activeLogReporter.append('WARN', 'Worktree requested but authPath is not a git repo. Falling back to authPath.');
263
- }
275
+ const worktreePath = createRunnerWorktree(runtime.authPath, {
276
+ worktreeId: runtime.worktreeId ?? trigger.id,
277
+ baseBranch: runtime.baseBranch,
278
+ });
279
+ effectiveAuthPath = worktreePath;
280
+ await client.reportWorktreeStatus(trigger.id, 'ACTIVE');
281
+ activeLogReporter.append('INFO', `Worktree created at ${worktreePath}.`);
282
+ logger.info('Worktree created for trigger', {
283
+ triggerId: trigger.id,
284
+ worktreePath,
285
+ });
264
286
  }
265
287
  catch (err) {
266
- logger.warn('Failed to create worktree, falling back to authPath', {
288
+ const reason = err instanceof Error ? err.message : String(err);
289
+ logger.warn('Failed to create worktree', {
267
290
  triggerId: trigger.id,
268
- error: err instanceof Error ? err.message : String(err),
291
+ error: reason,
269
292
  });
270
- activeLogReporter.append('WARN', `Worktree creation failed: ${err instanceof Error ? err.message : String(err)}. Falling back to authPath.`);
271
- try {
272
- await client.reportWorktreeStatus(trigger.id, 'FAILED');
273
- }
274
- catch {
275
- // Ignore status report failure
276
- }
293
+ await reportWorktreeFailure(trigger.id, reason, activeLogReporter);
294
+ throw new Error(reason);
277
295
  }
278
296
  }
279
297
  const historyPaths = resolveHistoryPaths(effectiveAuthPath, trigger.id, trigger.parentTriggerId);
@@ -355,18 +373,26 @@ export const createTriggerHandler = (options, dependencies = {}) => {
355
373
  exitCode: runResult.exitCode,
356
374
  });
357
375
  logReporter.append('INFO', `Runner finished with exitCode=${runResult.exitCode}.`);
358
- const { uploadedHistoryFile } = await reportHistory(trigger.id, currentHistoryPath, logReporter, {
376
+ const { hasHistoryFile } = await reportHistory(trigger.id, currentHistoryPath, logReporter, {
359
377
  outputText: runResult.outputText ?? '',
360
378
  errorMessage: runResult.exitCode === 0 ? undefined : runResult.errorMessage,
361
379
  });
362
380
  // idle 워치독에 의해 종료됐지만 러너가 온전한 히스토리 파일을 남겼다면, 작업은 사실상
363
381
  // 완료됐는데 종료 시퀀스에서 행이 걸린 경우다(예: Antigravity print 모드 finalize 행).
364
382
  // hard-FAIL 대신 NEEDS_REVIEW로 강등해 사람이 산출물을 보고 승인/거부하도록 한다.
365
- const idleTimedOutWithHistory = runResult.idleTimedOut === true && uploadedHistoryFile && !runResult.cancelled;
383
+ // 산출물 존재 여부(hasHistoryFile)로 판단한다 서버 업로드 실패는 완료를 뒤집지 않는다.
384
+ const idleTimedOutWithHistory = runResult.idleTimedOut === true && hasHistoryFile && !runResult.cancelled;
366
385
  if (idleTimedOutWithHistory) {
367
386
  // 사유는 빨간 Error 탭이 아니라 INFO 로그로 남긴다(소프트 상태라 에러 스타일은 부적절).
368
387
  logReporter.append('INFO', 'Runner idle-timed-out during shutdown but a complete history file was produced; flagged for human review (approve to mark DONE, reject to mark FAILED).');
369
388
  }
389
+ // exitCode 0이라도 러너가 필수 히스토리 파일을 안 썼다면 작업 완료를 보장할 수 없다(턴이
390
+ // 산출물 작성 전에 끝났거나 모델이 마지막 쓰기 단계를 누락한 경우). DONE으로 단정하지 않고
391
+ // NEEDS_REVIEW로 강등해 사람이 폴백(정제된 출력)을 보고 승인/거부하게 한다.
392
+ const exitedCleanWithoutHistory = runResult.exitCode === 0 && !hasHistoryFile && !runResult.cancelled;
393
+ if (exitedCleanWithoutHistory) {
394
+ logReporter.append('INFO', 'Runner exited cleanly (exitCode=0) but did not write a history file; flagged for human review (approve to mark DONE, reject to mark FAILED).');
395
+ }
370
396
  await logReporter.stop();
371
397
  // 3차 방어: origin issue 자동 연결 안전장치 (fire-and-forget)
372
398
  void runOriginIssueSafeguard(trigger.prompt, currentHistoryPath, effectiveAuthPath).catch(() => {
@@ -375,7 +401,9 @@ export const createTriggerHandler = (options, dependencies = {}) => {
375
401
  const status = runResult.cancelled
376
402
  ? 'CANCELLED'
377
403
  : runResult.exitCode === 0
378
- ? 'DONE'
404
+ ? hasHistoryFile
405
+ ? 'DONE'
406
+ : 'NEEDS_REVIEW'
379
407
  : idleTimedOutWithHistory
380
408
  ? 'NEEDS_REVIEW'
381
409
  : 'FAILED';
@@ -1 +1 @@
1
- {"version":3,"file":"trigger-handler.js","sourceRoot":"","sources":["../../src/handlers/trigger-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trigger-handler.js","sourceRoot":"","sources":["../../src/handlers/trigger-handler.ts"],"names":[],"mappings":"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"}
@@ -170,6 +170,61 @@ test('createTriggerHandler preserves the local history file and still marks succ
170
170
  const statusCall = clientCalls.find((entry) => entry.method === 'updateTriggerStatus');
171
171
  assert.deepEqual(statusCall?.args, ['trigger-1', 'DONE', undefined]);
172
172
  });
173
+ test('createTriggerHandler flags NEEDS_REVIEW when the runner exits 0 without writing a history file', async () => {
174
+ const clientCalls = [];
175
+ const writeHistoryCalls = [];
176
+ const client = {
177
+ fetchTriggerRuntime: async () => runtime,
178
+ isTriggerCancelRequested: async () => false,
179
+ updateTriggerHistory: async (...args) => {
180
+ clientCalls.push({ method: 'updateTriggerHistory', args });
181
+ },
182
+ updateTriggerStatus: async (...args) => {
183
+ clientCalls.push({ method: 'updateTriggerStatus', args });
184
+ },
185
+ };
186
+ const handler = createTriggerHandler({
187
+ config: {
188
+ daemonToken: 'daemon-token',
189
+ apiUrl: 'https://api.example',
190
+ pollingIntervalMs: 5000,
191
+ timeoutMs: 1500,
192
+ idleTimeoutMs: 500,
193
+ runnerCmd: 'opencode',
194
+ preventSleepWhileBusy: false,
195
+ },
196
+ client: client,
197
+ }, {
198
+ createRunnerFactory: () => () => ({
199
+ run: async () => ({ exitCode: 0, outputText: 'The final summary.' }),
200
+ }),
201
+ createLogReporter: () => ({
202
+ start: () => undefined,
203
+ append: () => undefined,
204
+ stop: async () => undefined,
205
+ }),
206
+ // 러너가 필수 히스토리 파일을 남기지 않은 상태(파일 없음 → 읽기 실패).
207
+ readHistoryFile: async () => {
208
+ throw new Error('ENOENT: no such file');
209
+ },
210
+ writeHistoryFile: async (path, content) => {
211
+ writeHistoryCalls.push({ path, content });
212
+ },
213
+ resolveRunnerHistoryPaths: () => ({
214
+ currentHistoryPath: '/auth/path/.agentteams/runner/history/trigger-1.md',
215
+ parentHistoryPath: null,
216
+ }),
217
+ });
218
+ await handler(trigger);
219
+ // 캡처한 출력이 폴백 히스토리로 로컬 기록 + 서버 업로드되며, "completed successfully"라고 단정하지 않는다.
220
+ assert.equal(writeHistoryCalls.length, 1);
221
+ assert.match(writeHistoryCalls[0]?.content ?? '', /exited without writing the required history file/);
222
+ const uploadCall = clientCalls.find((entry) => entry.method === 'updateTriggerHistory');
223
+ assert.match(String(uploadCall?.args?.[1] ?? ''), /exited without writing the required history file/);
224
+ // 핵심: exitCode 0이어도 산출물이 없으면 DONE이 아니라 NEEDS_REVIEW로 강등된다.
225
+ const statusCall = clientCalls.find((entry) => entry.method === 'updateTriggerStatus');
226
+ assert.deepEqual(statusCall?.args, ['trigger-1', 'NEEDS_REVIEW', undefined]);
227
+ });
173
228
  test('createTriggerHandler strips a UTF-8 BOM before reporting history to the database', async () => {
174
229
  const clientCalls = [];
175
230
  const logEntries = [];
@@ -459,6 +514,131 @@ test('createTriggerHandler reports runner failures and falls back to last output
459
514
  await handler({ ...trigger, parentTriggerId: null });
460
515
  assert.deepEqual(clientCalls.at(-1)?.args, ['trigger-1', 'FAILED', 'last output']);
461
516
  });
517
+ test('createTriggerHandler fails without running the runner when worktree creation fails', async () => {
518
+ const clientCalls = [];
519
+ const runnerInputs = [];
520
+ const worktreeRuntime = {
521
+ ...runtime,
522
+ useWorktree: true,
523
+ baseBranch: 'dev',
524
+ worktreeId: 'worktree-1',
525
+ };
526
+ const client = {
527
+ fetchTriggerRuntime: async () => worktreeRuntime,
528
+ isTriggerCancelRequested: async (...args) => {
529
+ clientCalls.push({ method: 'isTriggerCancelRequested', args });
530
+ return false;
531
+ },
532
+ updateTriggerHistory: async (...args) => {
533
+ clientCalls.push({ method: 'updateTriggerHistory', args });
534
+ },
535
+ updateTriggerStatus: async (...args) => {
536
+ clientCalls.push({ method: 'updateTriggerStatus', args });
537
+ },
538
+ reportWorktreeStatus: async (...args) => {
539
+ clientCalls.push({ method: 'reportWorktreeStatus', args });
540
+ },
541
+ };
542
+ const handler = createTriggerHandler({
543
+ config: {
544
+ daemonToken: 'daemon-token',
545
+ apiUrl: 'https://api.example',
546
+ pollingIntervalMs: 5000,
547
+ timeoutMs: 1500,
548
+ idleTimeoutMs: 500,
549
+ runnerCmd: 'opencode',
550
+ preventSleepWhileBusy: false,
551
+ },
552
+ client: client,
553
+ }, {
554
+ createRunnerFactory: () => () => ({
555
+ run: async (input) => {
556
+ runnerInputs.push({ authPath: input.authPath });
557
+ return { exitCode: 0 };
558
+ },
559
+ }),
560
+ createLogReporter: () => ({
561
+ start: () => undefined,
562
+ append: () => undefined,
563
+ stop: async () => undefined,
564
+ }),
565
+ isGitRepo: () => true,
566
+ createWorktree: () => {
567
+ throw new Error('git worktree add failed');
568
+ },
569
+ readHistoryFile: async () => '',
570
+ resolveRunnerHistoryPaths: () => ({
571
+ currentHistoryPath: '/auth/path/.agentteams/runner/history/trigger-1.md',
572
+ parentHistoryPath: null,
573
+ }),
574
+ });
575
+ await handler({ ...trigger, useWorktree: true, baseBranch: 'dev', worktreeId: 'worktree-1', parentTriggerId: null });
576
+ assert.deepEqual(runnerInputs, []);
577
+ assert.deepEqual(clientCalls.at(0)?.args, ['trigger-1', 'FAILED', 'git worktree add failed']);
578
+ assert.deepEqual(clientCalls.at(-1)?.args, ['trigger-1', 'FAILED', 'git worktree add failed']);
579
+ assert.equal(clientCalls.some((entry) => entry.method === 'isTriggerCancelRequested'), false);
580
+ });
581
+ test('createTriggerHandler fails without running the runner when worktree authPath is not a git repo', async () => {
582
+ const clientCalls = [];
583
+ const runnerInputs = [];
584
+ const worktreeRuntime = {
585
+ ...runtime,
586
+ useWorktree: true,
587
+ baseBranch: 'dev',
588
+ worktreeId: 'worktree-1',
589
+ };
590
+ const client = {
591
+ fetchTriggerRuntime: async () => worktreeRuntime,
592
+ isTriggerCancelRequested: async (...args) => {
593
+ clientCalls.push({ method: 'isTriggerCancelRequested', args });
594
+ return false;
595
+ },
596
+ updateTriggerHistory: async (...args) => {
597
+ clientCalls.push({ method: 'updateTriggerHistory', args });
598
+ },
599
+ updateTriggerStatus: async (...args) => {
600
+ clientCalls.push({ method: 'updateTriggerStatus', args });
601
+ },
602
+ reportWorktreeStatus: async (...args) => {
603
+ clientCalls.push({ method: 'reportWorktreeStatus', args });
604
+ },
605
+ };
606
+ const handler = createTriggerHandler({
607
+ config: {
608
+ daemonToken: 'daemon-token',
609
+ apiUrl: 'https://api.example',
610
+ pollingIntervalMs: 5000,
611
+ timeoutMs: 1500,
612
+ idleTimeoutMs: 500,
613
+ runnerCmd: 'opencode',
614
+ preventSleepWhileBusy: false,
615
+ },
616
+ client: client,
617
+ }, {
618
+ createRunnerFactory: () => () => ({
619
+ run: async (input) => {
620
+ runnerInputs.push({ authPath: input.authPath });
621
+ return { exitCode: 0 };
622
+ },
623
+ }),
624
+ createLogReporter: () => ({
625
+ start: () => undefined,
626
+ append: () => undefined,
627
+ stop: async () => undefined,
628
+ }),
629
+ isGitRepo: () => false,
630
+ readHistoryFile: async () => '',
631
+ resolveRunnerHistoryPaths: () => ({
632
+ currentHistoryPath: '/auth/path/.agentteams/runner/history/trigger-1.md',
633
+ parentHistoryPath: null,
634
+ }),
635
+ });
636
+ await handler({ ...trigger, useWorktree: true, baseBranch: 'dev', worktreeId: 'worktree-1', parentTriggerId: null });
637
+ assert.deepEqual(runnerInputs, []);
638
+ assert.deepEqual(clientCalls.at(0)?.args, ['trigger-1', 'FAILED', 'Not a git repository: /auth/path']);
639
+ assert.deepEqual(clientCalls.at(-1)?.args, ['trigger-1', 'FAILED', 'Not a git repository: /auth/path']);
640
+ assert.equal(clientCalls.some((entry) => entry.method === 'isTriggerCancelRequested'), false);
641
+ });
462
642
  test('createTriggerHandler downgrades an idle-timeout to NEEDS_REVIEW when a history file was uploaded', async () => {
463
643
  const clientCalls = [];
464
644
  const client = {
@@ -607,7 +787,8 @@ test('createTriggerHandler stores stdout as fallback history when the runner omi
607
787
  assert.equal(writtenFiles[0]?.path, '/auth/path/.agentteams/runner/history/trigger-1.md');
608
788
  assert.match(String(clientCalls[0]?.args[1]), /Agent output \(history file not written\)/);
609
789
  assert.match(String(clientCalls[0]?.args[1]), /agentrunner version 0\.0\.11/);
610
- assert.deepEqual(clientCalls.at(-1)?.args, ['trigger-1', 'DONE', undefined]);
790
+ // exitCode 0이라도 히스토리 파일이 없으면 DONE으로 단정하지 않고 NEEDS_REVIEW로 강등한다.
791
+ assert.deepEqual(clientCalls.at(-1)?.args, ['trigger-1', 'NEEDS_REVIEW', undefined]);
611
792
  });
612
793
  test('createTriggerHandler truncates long agent output in fallback history', async () => {
613
794
  const clientCalls = [];