@agentteams/runner 0.0.84 → 0.0.85-dev.209

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.
Files changed (123) hide show
  1. package/dist/api-client.d.ts +2 -2
  2. package/dist/api-client.js +66 -66
  3. package/dist/api-client.js.map +1 -1
  4. package/dist/api-client.test.js +63 -54
  5. package/dist/api-client.test.js.map +1 -1
  6. package/dist/autostart.js +81 -81
  7. package/dist/autostart.js.map +1 -1
  8. package/dist/autostart.test.js +35 -35
  9. package/dist/autostart.test.js.map +1 -1
  10. package/dist/commands/cleanup.js +4 -4
  11. package/dist/commands/init.js +14 -14
  12. package/dist/commands/restart.js +3 -3
  13. package/dist/commands/start.js +10 -10
  14. package/dist/commands/start.js.map +1 -1
  15. package/dist/commands/status.js +7 -7
  16. package/dist/commands/stop.js +7 -7
  17. package/dist/commands/uninstall.js +6 -6
  18. package/dist/commands/update.d.ts +4 -4
  19. package/dist/commands/update.js +20 -22
  20. package/dist/commands/update.js.map +1 -1
  21. package/dist/commands/update.test.js +38 -42
  22. package/dist/commands/update.test.js.map +1 -1
  23. package/dist/config.d.ts +1 -1
  24. package/dist/config.js +12 -12
  25. package/dist/config.test.js +61 -61
  26. package/dist/config.test.js.map +1 -1
  27. package/dist/daemon-control.d.ts +5 -5
  28. package/dist/daemon-control.js +21 -22
  29. package/dist/daemon-control.js.map +1 -1
  30. package/dist/daemon-control.test.js +29 -29
  31. package/dist/executable.d.ts +3 -3
  32. package/dist/executable.js +46 -49
  33. package/dist/executable.js.map +1 -1
  34. package/dist/executable.test.js +62 -62
  35. package/dist/executable.test.js.map +1 -1
  36. package/dist/handlers/trigger-handler.d.ts +6 -6
  37. package/dist/handlers/trigger-handler.js +172 -134
  38. package/dist/handlers/trigger-handler.js.map +1 -1
  39. package/dist/handlers/trigger-handler.test.js +442 -328
  40. package/dist/handlers/trigger-handler.test.js.map +1 -1
  41. package/dist/index.js +25 -25
  42. package/dist/logger.js +1 -1
  43. package/dist/pid.js +6 -6
  44. package/dist/poller.d.ts +7 -7
  45. package/dist/poller.js +54 -53
  46. package/dist/poller.js.map +1 -1
  47. package/dist/poller.test.js +209 -181
  48. package/dist/poller.test.js.map +1 -1
  49. package/dist/runners/amp.d.ts +1 -1
  50. package/dist/runners/amp.js +74 -81
  51. package/dist/runners/amp.js.map +1 -1
  52. package/dist/runners/antigravity.d.ts +3 -3
  53. package/dist/runners/antigravity.js +116 -127
  54. package/dist/runners/antigravity.js.map +1 -1
  55. package/dist/runners/antigravity.replay.test.js +25 -25
  56. package/dist/runners/antigravity.replay.test.js.map +1 -1
  57. package/dist/runners/antigravity.test.js +98 -98
  58. package/dist/runners/antigravity.test.js.map +1 -1
  59. package/dist/runners/claude-code.d.ts +1 -1
  60. package/dist/runners/claude-code.js +85 -84
  61. package/dist/runners/claude-code.js.map +1 -1
  62. package/dist/runners/claude-code.test.js +37 -40
  63. package/dist/runners/claude-code.test.js.map +1 -1
  64. package/dist/runners/codex.d.ts +1 -1
  65. package/dist/runners/codex.js +87 -96
  66. package/dist/runners/codex.js.map +1 -1
  67. package/dist/runners/codex.test.js +68 -68
  68. package/dist/runners/codex.test.js.map +1 -1
  69. package/dist/runners/index.d.ts +1 -1
  70. package/dist/runners/index.js +10 -10
  71. package/dist/runners/index.test.js +16 -16
  72. package/dist/runners/log-reporter.d.ts +2 -2
  73. package/dist/runners/log-reporter.js +12 -10
  74. package/dist/runners/log-reporter.js.map +1 -1
  75. package/dist/runners/log-reporter.test.js +70 -70
  76. package/dist/runners/log-reporter.test.js.map +1 -1
  77. package/dist/runners/opencode.d.ts +1 -1
  78. package/dist/runners/opencode.js +68 -75
  79. package/dist/runners/opencode.js.map +1 -1
  80. package/dist/runners/process-control.d.ts +1 -1
  81. package/dist/runners/process-control.js +13 -11
  82. package/dist/runners/process-control.js.map +1 -1
  83. package/dist/runners/stream-json-parser.d.ts +1 -1
  84. package/dist/runners/stream-json-parser.js +70 -67
  85. package/dist/runners/stream-json-parser.js.map +1 -1
  86. package/dist/runners/stream-json-parser.replay.test.js +17 -17
  87. package/dist/runners/stream-json-parser.replay.test.js.map +1 -1
  88. package/dist/runners/stream-json-parser.test.js +76 -78
  89. package/dist/runners/stream-json-parser.test.js.map +1 -1
  90. package/dist/types.d.ts +4 -4
  91. package/dist/utils/auth-path-store.js +7 -7
  92. package/dist/utils/auth-path-store.test.js +24 -29
  93. package/dist/utils/auth-path-store.test.js.map +1 -1
  94. package/dist/utils/auto-update.d.ts +4 -4
  95. package/dist/utils/auto-update.js +30 -28
  96. package/dist/utils/auto-update.js.map +1 -1
  97. package/dist/utils/auto-update.test.js +30 -30
  98. package/dist/utils/convention-evaluator.d.ts +1 -1
  99. package/dist/utils/convention-evaluator.js +22 -21
  100. package/dist/utils/convention-evaluator.js.map +1 -1
  101. package/dist/utils/convention-evaluator.test.js +120 -110
  102. package/dist/utils/convention-evaluator.test.js.map +1 -1
  103. package/dist/utils/convention-sync.d.ts +3 -3
  104. package/dist/utils/convention-sync.js +10 -10
  105. package/dist/utils/convention-sync.test.js +43 -25
  106. package/dist/utils/convention-sync.test.js.map +1 -1
  107. package/dist/utils/git-worktree.js +20 -18
  108. package/dist/utils/git-worktree.js.map +1 -1
  109. package/dist/utils/git-worktree.test.js +98 -98
  110. package/dist/utils/git-worktree.test.js.map +1 -1
  111. package/dist/utils/origin-issue-safeguard.js +35 -30
  112. package/dist/utils/origin-issue-safeguard.js.map +1 -1
  113. package/dist/utils/power-save-blocker.d.ts +4 -4
  114. package/dist/utils/power-save-blocker.js +33 -33
  115. package/dist/utils/power-save-blocker.test.js +37 -37
  116. package/dist/utils/power-save-blocker.test.js.map +1 -1
  117. package/dist/utils/runner-cleanup.d.ts +3 -3
  118. package/dist/utils/runner-cleanup.js +13 -13
  119. package/dist/utils/runner-cleanup.test.js +35 -35
  120. package/dist/utils/runner-history.js +3 -3
  121. package/dist/utils/runner-history.test.js +17 -17
  122. package/package.json +9 -2
  123. package/readme.md +10 -10
@@ -5,13 +5,13 @@
5
5
  * 러너 히스토리에서 플랜 생성이 감지되면,
6
6
  * `agentteams plan issue` CLI를 실행하여 이슈를 연결합니다.
7
7
  */
8
- import { execFile } from "node:child_process";
9
- import { readFile } from "node:fs/promises";
10
- import { logger } from "../logger.js";
8
+ import { execFile } from 'node:child_process';
9
+ import { readFile } from 'node:fs/promises';
10
+ import { logger } from '../logger.js';
11
11
  const ENTITY_TYPE_TO_PROVIDER = {
12
- GITHUB_ISSUE: "GITHUB",
13
- GITLAB_ISSUE: "GITLAB",
14
- LINEAR_ISSUE: "LINEAR",
12
+ GITHUB_ISSUE: 'GITHUB',
13
+ GITLAB_ISSUE: 'GITLAB',
14
+ LINEAR_ISSUE: 'LINEAR',
15
15
  };
16
16
  const ISSUE_ENTITY_TYPES = new Set(Object.keys(ENTITY_TYPE_TO_PROVIDER));
17
17
  /**
@@ -30,7 +30,7 @@ function extractIssueRefsFromText(text) {
30
30
  continue;
31
31
  const provider = ENTITY_TYPE_TO_PROVIDER[entityType];
32
32
  // rest may be "id" or "id:url" — for LINEAR_ISSUE it's typically a UUID
33
- const entityId = rest.split(":")[0];
33
+ const entityId = rest.split(':')[0];
34
34
  if (!entityId)
35
35
  continue;
36
36
  const key = `${provider}:${entityId}`;
@@ -40,7 +40,7 @@ function extractIssueRefsFromText(text) {
40
40
  results.push({
41
41
  provider,
42
42
  externalId: entityId,
43
- externalUrl: "", // URL not available from text format
43
+ externalUrl: '', // URL not available from text format
44
44
  externalTitle: label || undefined,
45
45
  });
46
46
  }
@@ -53,14 +53,14 @@ function extractIssueRefsFromTiptap(content) {
53
53
  const results = [];
54
54
  const seen = new Set();
55
55
  function walk(node) {
56
- if (node.type === "entityReference" && node.attrs) {
56
+ if (node.type === 'entityReference' && node.attrs) {
57
57
  const attrs = node.attrs;
58
58
  const entityType = attrs.entityType;
59
59
  const provider = ENTITY_TYPE_TO_PROVIDER[entityType];
60
60
  if (provider) {
61
- const entityId = attrs.entityId ?? "";
62
- const htmlUrl = attrs.htmlUrl ?? "";
63
- const label = attrs.label ?? "";
61
+ const entityId = attrs.entityId ?? '';
62
+ const htmlUrl = attrs.htmlUrl ?? '';
63
+ const label = attrs.label ?? '';
64
64
  if (entityId) {
65
65
  const key = `${provider}:${entityId}`;
66
66
  if (!seen.has(key)) {
@@ -88,7 +88,7 @@ function extractIssueRefsFromTiptap(content) {
88
88
  * 프롬프트에서 이슈 참조를 추출합니다 (문자열 / Tiptap JSON 모두 지원).
89
89
  */
90
90
  export function extractIssueRefsFromPrompt(prompt) {
91
- if (typeof prompt === "string") {
91
+ if (typeof prompt === 'string') {
92
92
  return extractIssueRefsFromText(prompt);
93
93
  }
94
94
  return extractIssueRefsFromTiptap(prompt);
@@ -105,14 +105,14 @@ function extractCreatedPlanIds(historyMarkdown) {
105
105
  // Pattern 3: UUID-like strings after "plan create" or "Plan created" context
106
106
  const uuidPattern = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi;
107
107
  // Look for lines that suggest plan creation
108
- const lines = historyMarkdown.split("\n");
108
+ const lines = historyMarkdown.split('\n');
109
109
  for (const line of lines) {
110
110
  const lower = line.toLowerCase();
111
- if (lower.includes("plan create") ||
112
- lower.includes("plan created") ||
113
- lower.includes("creating plan") ||
114
- lower.includes("plan-id") ||
115
- lower.includes("planid")) {
111
+ if (lower.includes('plan create') ||
112
+ lower.includes('plan created') ||
113
+ lower.includes('creating plan') ||
114
+ lower.includes('plan-id') ||
115
+ lower.includes('planid')) {
116
116
  const matches = line.match(uuidPattern);
117
117
  if (matches) {
118
118
  for (const id of matches) {
@@ -132,19 +132,24 @@ function extractCreatedPlanIds(historyMarkdown) {
132
132
  function execPlanIssue(cwd, planId, issue) {
133
133
  return new Promise((resolve) => {
134
134
  const args = [
135
- "plan", "issue",
136
- "--id", planId,
137
- "--provider", issue.provider,
138
- "--external-id", issue.externalId,
139
- "--external-url", issue.externalUrl || "unknown",
135
+ 'plan',
136
+ 'issue',
137
+ '--id',
138
+ planId,
139
+ '--provider',
140
+ issue.provider,
141
+ '--external-id',
142
+ issue.externalId,
143
+ '--external-url',
144
+ issue.externalUrl || 'unknown',
140
145
  ];
141
146
  if (issue.externalTitle) {
142
- args.push("--title", issue.externalTitle);
147
+ args.push('--title', issue.externalTitle);
143
148
  }
144
- execFile("agentteams", args, { cwd, timeout: 15000, windowsHide: true }, (error) => {
149
+ execFile('agentteams', args, { cwd, timeout: 15000, windowsHide: true }, (error) => {
145
150
  if (error) {
146
151
  // 409 or other failure — skip silently
147
- logger.warn("Origin issue safeguard: plan issue command failed", {
152
+ logger.warn('Origin issue safeguard: plan issue command failed', {
148
153
  planId,
149
154
  provider: issue.provider,
150
155
  externalId: issue.externalId,
@@ -170,7 +175,7 @@ export async function runOriginIssueSafeguard(prompt, historyPath, authPath) {
170
175
  // 2. 히스토리에서 플랜 생성 감지
171
176
  let historyContent;
172
177
  try {
173
- historyContent = await readFile(historyPath, "utf8");
178
+ historyContent = await readFile(historyPath, 'utf8');
174
179
  }
175
180
  catch {
176
181
  return; // 히스토리 파일 없으면 중단
@@ -179,7 +184,7 @@ export async function runOriginIssueSafeguard(prompt, historyPath, authPath) {
179
184
  if (planIds.length === 0)
180
185
  return;
181
186
  // 3. 각 플랜 × 이슈 조합에 대해 CLI 실행
182
- logger.info("Origin issue safeguard: linking issues to plans", {
187
+ logger.info('Origin issue safeguard: linking issues to plans', {
183
188
  planIds,
184
189
  issueCount: issueRefs.length,
185
190
  });
@@ -190,7 +195,7 @@ export async function runOriginIssueSafeguard(prompt, historyPath, authPath) {
190
195
  }
191
196
  }
192
197
  catch (error) {
193
- logger.warn("Origin issue safeguard failed (non-blocking)", {
198
+ logger.warn('Origin issue safeguard failed (non-blocking)', {
194
199
  error: error instanceof Error ? error.message : String(error),
195
200
  });
196
201
  }
@@ -1 +1 @@
1
- {"version":3,"file":"origin-issue-safeguard.js","sourceRoot":"","sources":["../../src/utils/origin-issue-safeguard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"origin-issue-safeguard.js","sourceRoot":"","sources":["../../src/utils/origin-issue-safeguard.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { execFileSync, spawn } from "node:child_process";
2
- import { logger } from "../logger.js";
3
- export type PowerSource = "AC" | "BATTERY" | "UNKNOWN";
1
+ import { execFileSync, spawn } from 'node:child_process';
2
+ import { logger } from '../logger.js';
3
+ export type PowerSource = 'AC' | 'BATTERY' | 'UNKNOWN';
4
4
  export type PowerSaveBlocker = {
5
5
  acquire: (label?: string) => () => void;
6
6
  };
@@ -8,7 +8,7 @@ type PowerSaveBlockerDeps = {
8
8
  platform?: () => NodeJS.Platform;
9
9
  spawn?: typeof spawn;
10
10
  execFileSync?: typeof execFileSync;
11
- logger?: Pick<typeof logger, "info" | "warn">;
11
+ logger?: Pick<typeof logger, 'info' | 'warn'>;
12
12
  setInterval?: typeof global.setInterval;
13
13
  clearInterval?: typeof global.clearInterval;
14
14
  recheckIntervalMs?: number;
@@ -1,27 +1,27 @@
1
- import { execFileSync, spawn } from "node:child_process";
2
- import { platform as osPlatform } from "node:os";
3
- import { logger } from "../logger.js";
1
+ import { execFileSync, spawn } from 'node:child_process';
2
+ import { platform as osPlatform } from 'node:os';
3
+ import { logger } from '../logger.js';
4
4
  // launchd 환경에서는 PATH가 비어 있을 수 있으므로 macOS 시스템 바이너리는 절대 경로로 호출한다.
5
- const CAFFEINATE_PATH = "/usr/bin/caffeinate";
6
- const PMSET_PATH = "/usr/bin/pmset";
5
+ const CAFFEINATE_PATH = '/usr/bin/caffeinate';
6
+ const PMSET_PATH = '/usr/bin/pmset';
7
7
  // -i: 시스템 idle 절전 방지, -m: 디스크 idle 절전 방지, -s: 시스템 절전 방지(AC 전원에서만 유효)
8
- const DEFAULT_CAFFEINATE_ARGS = ["-i", "-m", "-s"];
8
+ const DEFAULT_CAFFEINATE_ARGS = ['-i', '-m', '-s'];
9
9
  // 실행 도중 배터리로 전환되는 경우를 감지하기 위한 전원 상태 재확인 주기
10
10
  const DEFAULT_POWER_RECHECK_INTERVAL_MS = 30_000;
11
11
  // `pmset -g batt`의 첫 줄은 "Now drawing from 'AC Power'" 또는 "Now drawing from 'Battery Power'" 형태다.
12
12
  export const parsePowerSource = (output) => {
13
13
  const match = output.match(/Now drawing from '([^']+)'/i);
14
14
  if (!match) {
15
- return "UNKNOWN";
15
+ return 'UNKNOWN';
16
16
  }
17
17
  const source = match[1].toLowerCase();
18
- if (source.includes("ac")) {
19
- return "AC";
18
+ if (source.includes('ac')) {
19
+ return 'AC';
20
20
  }
21
- if (source.includes("battery")) {
22
- return "BATTERY";
21
+ if (source.includes('battery')) {
22
+ return 'BATTERY';
23
23
  }
24
- return "UNKNOWN";
24
+ return 'UNKNOWN';
25
25
  };
26
26
  const noopRelease = () => { };
27
27
  export const createPowerSaveBlocker = (deps = {}) => {
@@ -34,20 +34,20 @@ export const createPowerSaveBlocker = (deps = {}) => {
34
34
  const recheckIntervalMs = deps.recheckIntervalMs ?? DEFAULT_POWER_RECHECK_INTERVAL_MS;
35
35
  const caffeinateArgs = deps.caffeinateArgs ?? DEFAULT_CAFFEINATE_ARGS;
36
36
  // 기능 토글이 꺼져 있거나 macOS가 아니면 전부 no-op으로 동작한다.
37
- const supported = (deps.enabled ?? true) && platform() === "darwin";
37
+ const supported = (deps.enabled ?? true) && platform() === 'darwin';
38
38
  let activeSessions = 0;
39
39
  let caffeinate = null;
40
40
  let monitorInterval = null;
41
41
  const readPowerSource = () => {
42
42
  try {
43
- const output = String(execFileSyncFn(PMSET_PATH, ["-g", "batt"], { encoding: "utf8" }));
43
+ const output = String(execFileSyncFn(PMSET_PATH, ['-g', 'batt'], { encoding: 'utf8' }));
44
44
  return parsePowerSource(output);
45
45
  }
46
46
  catch (error) {
47
- log.warn("Failed to read power source via pmset", {
48
- error: error instanceof Error ? error.message : String(error)
47
+ log.warn('Failed to read power source via pmset', {
48
+ error: error instanceof Error ? error.message : String(error),
49
49
  });
50
- return "UNKNOWN";
50
+ return 'UNKNOWN';
51
51
  }
52
52
  };
53
53
  const startCaffeinate = () => {
@@ -55,26 +55,26 @@ export const createPowerSaveBlocker = (deps = {}) => {
55
55
  return;
56
56
  }
57
57
  try {
58
- const child = spawnFn(CAFFEINATE_PATH, caffeinateArgs, { stdio: "ignore" });
59
- child.on("error", (error) => {
60
- log.warn("caffeinate process failed", {
61
- error: error instanceof Error ? error.message : String(error)
58
+ const child = spawnFn(CAFFEINATE_PATH, caffeinateArgs, { stdio: 'ignore' });
59
+ child.on('error', (error) => {
60
+ log.warn('caffeinate process failed', {
61
+ error: error instanceof Error ? error.message : String(error),
62
62
  });
63
63
  if (caffeinate === child) {
64
64
  caffeinate = null;
65
65
  }
66
66
  });
67
- child.on("exit", () => {
67
+ child.on('exit', () => {
68
68
  if (caffeinate === child) {
69
69
  caffeinate = null;
70
70
  }
71
71
  });
72
72
  caffeinate = child;
73
- log.info("Sleep prevention started", { pid: child.pid ?? null, args: caffeinateArgs });
73
+ log.info('Sleep prevention started', { pid: child.pid ?? null, args: caffeinateArgs });
74
74
  }
75
75
  catch (error) {
76
- log.warn("Failed to start caffeinate", {
77
- error: error instanceof Error ? error.message : String(error)
76
+ log.warn('Failed to start caffeinate', {
77
+ error: error instanceof Error ? error.message : String(error),
78
78
  });
79
79
  }
80
80
  };
@@ -85,12 +85,12 @@ export const createPowerSaveBlocker = (deps = {}) => {
85
85
  const child = caffeinate;
86
86
  caffeinate = null;
87
87
  try {
88
- child.kill("SIGTERM");
88
+ child.kill('SIGTERM');
89
89
  }
90
90
  catch {
91
91
  // 이미 종료되었거나 종료할 수 없는 경우 무시한다.
92
92
  }
93
- log.info("Sleep prevention stopped", { reason });
93
+ log.info('Sleep prevention stopped', { reason });
94
94
  };
95
95
  // 의도한 상태(세션 존재 && AC 전원)와 실제 caffeinate 실행 여부를 일치시킨다.
96
96
  const reconcile = () => {
@@ -98,15 +98,15 @@ export const createPowerSaveBlocker = (deps = {}) => {
98
98
  return;
99
99
  }
100
100
  if (activeSessions <= 0) {
101
- stopCaffeinate("no-active-sessions");
101
+ stopCaffeinate('no-active-sessions');
102
102
  return;
103
103
  }
104
104
  const source = readPowerSource();
105
- if (source === "AC") {
105
+ if (source === 'AC') {
106
106
  startCaffeinate();
107
107
  }
108
108
  else {
109
- stopCaffeinate(source === "BATTERY" ? "on-battery" : "power-source-unknown");
109
+ stopCaffeinate(source === 'BATTERY' ? 'on-battery' : 'power-source-unknown');
110
110
  }
111
111
  };
112
112
  const startMonitor = () => {
@@ -115,7 +115,7 @@ export const createPowerSaveBlocker = (deps = {}) => {
115
115
  }
116
116
  monitorInterval = setIntervalFn(() => reconcile(), recheckIntervalMs);
117
117
  // 절전 방지 모니터가 데몬 종료를 막지 않도록 unref 처리한다.
118
- if (typeof monitorInterval.unref === "function") {
118
+ if (typeof monitorInterval.unref === 'function') {
119
119
  monitorInterval.unref();
120
120
  }
121
121
  };
@@ -132,8 +132,8 @@ export const createPowerSaveBlocker = (deps = {}) => {
132
132
  }
133
133
  activeSessions += 1;
134
134
  const source = readPowerSource();
135
- if (source !== "AC") {
136
- log.info("Sleep prevention skipped while on battery or unknown power", { source, label: label ?? null });
135
+ if (source !== 'AC') {
136
+ log.info('Sleep prevention skipped while on battery or unknown power', { source, label: label ?? null });
137
137
  }
138
138
  reconcile();
139
139
  startMonitor();
@@ -1,7 +1,7 @@
1
- import assert from "node:assert/strict";
2
- import { EventEmitter } from "node:events";
3
- import test from "node:test";
4
- import { createPowerSaveBlocker, parsePowerSource } from "./power-save-blocker.js";
1
+ import assert from 'node:assert/strict';
2
+ import { EventEmitter } from 'node:events';
3
+ import test from 'node:test';
4
+ import { createPowerSaveBlocker, parsePowerSource } from './power-save-blocker.js';
5
5
  const AC_OUTPUT = "Now drawing from 'AC Power'\n -InternalBattery-0 (id=123)\t100%; charged; 0:00 remaining present: true";
6
6
  const BATTERY_OUTPUT = "Now drawing from 'Battery Power'\n -InternalBattery-0 (id=123)\t80%; discharging; 3:20 remaining present: true";
7
7
  const createFakeChild = (pid) => {
@@ -16,59 +16,59 @@ const createFakeChild = (pid) => {
16
16
  };
17
17
  const silentLogger = {
18
18
  info: () => undefined,
19
- warn: () => undefined
19
+ warn: () => undefined,
20
20
  };
21
21
  // setInterval/clearInterval를 주입해 모니터 루프가 실제 타이머를 만들지 않게 한다.
22
22
  const noopTimers = {
23
23
  setInterval: (() => ({ unref: () => undefined })),
24
- clearInterval: (() => undefined)
24
+ clearInterval: (() => undefined),
25
25
  };
26
- test("parsePowerSource detects AC, battery, and unknown sources", () => {
27
- assert.equal(parsePowerSource(AC_OUTPUT), "AC");
28
- assert.equal(parsePowerSource(BATTERY_OUTPUT), "BATTERY");
29
- assert.equal(parsePowerSource("garbage output"), "UNKNOWN");
26
+ test('parsePowerSource detects AC, battery, and unknown sources', () => {
27
+ assert.equal(parsePowerSource(AC_OUTPUT), 'AC');
28
+ assert.equal(parsePowerSource(BATTERY_OUTPUT), 'BATTERY');
29
+ assert.equal(parsePowerSource('garbage output'), 'UNKNOWN');
30
30
  });
31
- test("acquire spawns caffeinate on macOS while on AC power", () => {
31
+ test('acquire spawns caffeinate on macOS while on AC power', () => {
32
32
  const spawned = [];
33
33
  const child = createFakeChild(4242);
34
34
  const blocker = createPowerSaveBlocker({
35
- platform: () => "darwin",
35
+ platform: () => 'darwin',
36
36
  execFileSync: (() => AC_OUTPUT),
37
37
  spawn: ((command, args) => {
38
38
  spawned.push({ command, args });
39
39
  return child;
40
40
  }),
41
41
  logger: silentLogger,
42
- ...noopTimers
42
+ ...noopTimers,
43
43
  });
44
- const release = blocker.acquire("trigger-1");
44
+ const release = blocker.acquire('trigger-1');
45
45
  assert.equal(spawned.length, 1);
46
- assert.equal(spawned[0]?.command, "/usr/bin/caffeinate");
47
- assert.deepEqual(spawned[0]?.args, ["-i", "-m", "-s"]);
46
+ assert.equal(spawned[0]?.command, '/usr/bin/caffeinate');
47
+ assert.deepEqual(spawned[0]?.args, ['-i', '-m', '-s']);
48
48
  release();
49
49
  assert.equal(child.killed, true);
50
50
  });
51
- test("acquire is a no-op while on battery power", () => {
51
+ test('acquire is a no-op while on battery power', () => {
52
52
  let spawnCalls = 0;
53
53
  const blocker = createPowerSaveBlocker({
54
- platform: () => "darwin",
54
+ platform: () => 'darwin',
55
55
  execFileSync: (() => BATTERY_OUTPUT),
56
56
  spawn: (() => {
57
57
  spawnCalls += 1;
58
58
  return createFakeChild(1);
59
59
  }),
60
60
  logger: silentLogger,
61
- ...noopTimers
61
+ ...noopTimers,
62
62
  });
63
63
  const release = blocker.acquire();
64
64
  assert.equal(spawnCalls, 0);
65
65
  release();
66
66
  });
67
- test("acquire is a no-op on non-macOS platforms", () => {
67
+ test('acquire is a no-op on non-macOS platforms', () => {
68
68
  let spawnCalls = 0;
69
69
  let pmsetCalls = 0;
70
70
  const blocker = createPowerSaveBlocker({
71
- platform: () => "linux",
71
+ platform: () => 'linux',
72
72
  execFileSync: (() => {
73
73
  pmsetCalls += 1;
74
74
  return AC_OUTPUT;
@@ -78,17 +78,17 @@ test("acquire is a no-op on non-macOS platforms", () => {
78
78
  return createFakeChild(1);
79
79
  }),
80
80
  logger: silentLogger,
81
- ...noopTimers
81
+ ...noopTimers,
82
82
  });
83
83
  const release = blocker.acquire();
84
84
  assert.equal(spawnCalls, 0);
85
85
  assert.equal(pmsetCalls, 0);
86
86
  release();
87
87
  });
88
- test("acquire is a no-op when the feature is disabled", () => {
88
+ test('acquire is a no-op when the feature is disabled', () => {
89
89
  let spawnCalls = 0;
90
90
  const blocker = createPowerSaveBlocker({
91
- platform: () => "darwin",
91
+ platform: () => 'darwin',
92
92
  enabled: false,
93
93
  execFileSync: (() => AC_OUTPUT),
94
94
  spawn: (() => {
@@ -96,12 +96,12 @@ test("acquire is a no-op when the feature is disabled", () => {
96
96
  return createFakeChild(1);
97
97
  }),
98
98
  logger: silentLogger,
99
- ...noopTimers
99
+ ...noopTimers,
100
100
  });
101
101
  blocker.acquire()();
102
102
  assert.equal(spawnCalls, 0);
103
103
  });
104
- test("release can be called multiple times without killing twice", () => {
104
+ test('release can be called multiple times without killing twice', () => {
105
105
  let killCount = 0;
106
106
  const child = createFakeChild(7);
107
107
  child.kill = () => {
@@ -110,11 +110,11 @@ test("release can be called multiple times without killing twice", () => {
110
110
  return true;
111
111
  };
112
112
  const blocker = createPowerSaveBlocker({
113
- platform: () => "darwin",
113
+ platform: () => 'darwin',
114
114
  execFileSync: (() => AC_OUTPUT),
115
115
  spawn: (() => child),
116
116
  logger: silentLogger,
117
- ...noopTimers
117
+ ...noopTimers,
118
118
  });
119
119
  const release = blocker.acquire();
120
120
  release();
@@ -122,21 +122,21 @@ test("release can be called multiple times without killing twice", () => {
122
122
  release();
123
123
  assert.equal(killCount, 1);
124
124
  });
125
- test("concurrent sessions keep caffeinate alive until the last release", () => {
125
+ test('concurrent sessions keep caffeinate alive until the last release', () => {
126
126
  let spawnCalls = 0;
127
127
  const child = createFakeChild(9);
128
128
  const blocker = createPowerSaveBlocker({
129
- platform: () => "darwin",
129
+ platform: () => 'darwin',
130
130
  execFileSync: (() => AC_OUTPUT),
131
131
  spawn: (() => {
132
132
  spawnCalls += 1;
133
133
  return child;
134
134
  }),
135
135
  logger: silentLogger,
136
- ...noopTimers
136
+ ...noopTimers,
137
137
  });
138
- const releaseA = blocker.acquire("a");
139
- const releaseB = blocker.acquire("b");
138
+ const releaseA = blocker.acquire('a');
139
+ const releaseB = blocker.acquire('b');
140
140
  // 두 세션이 동일한 caffeinate 프로세스를 공유한다.
141
141
  assert.equal(spawnCalls, 1);
142
142
  releaseA();
@@ -144,12 +144,12 @@ test("concurrent sessions keep caffeinate alive until the last release", () => {
144
144
  releaseB();
145
145
  assert.equal(child.killed, true);
146
146
  });
147
- test("monitor releases caffeinate when power switches to battery mid-run", () => {
147
+ test('monitor releases caffeinate when power switches to battery mid-run', () => {
148
148
  let powerOutput = AC_OUTPUT;
149
149
  const monitorTicks = [];
150
150
  const child = createFakeChild(11);
151
151
  const blocker = createPowerSaveBlocker({
152
- platform: () => "darwin",
152
+ platform: () => 'darwin',
153
153
  execFileSync: (() => powerOutput),
154
154
  spawn: (() => child),
155
155
  logger: silentLogger,
@@ -157,13 +157,13 @@ test("monitor releases caffeinate when power switches to battery mid-run", () =>
157
157
  monitorTicks.push(handler);
158
158
  return { unref: () => undefined };
159
159
  }),
160
- clearInterval: (() => undefined)
160
+ clearInterval: (() => undefined),
161
161
  });
162
162
  blocker.acquire();
163
163
  assert.equal(child.killed, false);
164
164
  // 배터리로 전환된 뒤 모니터가 동작하면 caffeinate가 종료되어야 한다.
165
165
  powerOutput = BATTERY_OUTPUT;
166
- assert.equal(monitorTicks.length, 1, "monitor interval should be registered");
166
+ assert.equal(monitorTicks.length, 1, 'monitor interval should be registered');
167
167
  monitorTicks[0]?.();
168
168
  assert.equal(child.killed, true);
169
169
  });
@@ -1 +1 @@
1
- {"version":3,"file":"power-save-blocker.test.js","sourceRoot":"","sources":["../../src/utils/power-save-blocker.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"power-save-blocker.test.js","sourceRoot":"","sources":["../../src/utils/power-save-blocker.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { readdir, stat, unlink } from "node:fs/promises";
2
- import { logger } from "../logger.js";
1
+ import { readdir, stat, unlink } from 'node:fs/promises';
2
+ import { logger } from '../logger.js';
3
3
  type CleanupDeps = {
4
4
  readdir?: typeof readdir;
5
5
  stat?: typeof stat;
6
6
  unlink?: typeof unlink;
7
- logger?: Pick<typeof logger, "info" | "warn">;
7
+ logger?: Pick<typeof logger, 'info' | 'warn'>;
8
8
  };
9
9
  export declare const runCleanup: (authPath: string, deps?: CleanupDeps) => Promise<void>;
10
10
  export {};
@@ -1,6 +1,6 @@
1
- import { readdir, stat, unlink } from "node:fs/promises";
2
- import { join } from "node:path";
3
- import { logger } from "../logger.js";
1
+ import { readdir, stat, unlink } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { logger } from '../logger.js';
4
4
  const LOG_TTL_MS = 6 * 60 * 60 * 1000;
5
5
  const HISTORY_TTL_MS = 3 * 24 * 60 * 60 * 1000;
6
6
  const purgeExpiredFiles = async (directory, ttlMs, deps) => {
@@ -10,7 +10,7 @@ const purgeExpiredFiles = async (directory, ttlMs, deps) => {
10
10
  entries = await deps.readdir(directory);
11
11
  }
12
12
  catch (error) {
13
- if (error.code === "ENOENT") {
13
+ if (error.code === 'ENOENT') {
14
14
  return 0;
15
15
  }
16
16
  throw error;
@@ -26,12 +26,12 @@ const purgeExpiredFiles = async (directory, ttlMs, deps) => {
26
26
  }
27
27
  }
28
28
  catch (error) {
29
- if (error.code === "ENOENT") {
29
+ if (error.code === 'ENOENT') {
30
30
  continue;
31
31
  }
32
- deps.logger.warn("Failed to delete expired file", {
32
+ deps.logger.warn('Failed to delete expired file', {
33
33
  filePath,
34
- error: error instanceof Error ? error.message : String(error)
34
+ error: error instanceof Error ? error.message : String(error),
35
35
  });
36
36
  }
37
37
  }
@@ -42,18 +42,18 @@ export const runCleanup = async (authPath, deps = {}) => {
42
42
  readdir: deps.readdir ?? readdir,
43
43
  stat: deps.stat ?? stat,
44
44
  unlink: deps.unlink ?? unlink,
45
- logger: deps.logger ?? logger
45
+ logger: deps.logger ?? logger,
46
46
  };
47
- const logDir = join(authPath, ".agentteams", "runner", "log");
48
- const historyDir = join(authPath, ".agentteams", "runner", "history");
47
+ const logDir = join(authPath, '.agentteams', 'runner', 'log');
48
+ const historyDir = join(authPath, '.agentteams', 'runner', 'history');
49
49
  const [logDeleted, historyDeleted] = await Promise.all([
50
50
  purgeExpiredFiles(logDir, LOG_TTL_MS, resolvedDeps),
51
- purgeExpiredFiles(historyDir, HISTORY_TTL_MS, resolvedDeps)
51
+ purgeExpiredFiles(historyDir, HISTORY_TTL_MS, resolvedDeps),
52
52
  ]);
53
- resolvedDeps.logger.info("Runner cleanup completed", {
53
+ resolvedDeps.logger.info('Runner cleanup completed', {
54
54
  authPath,
55
55
  logDeleted,
56
- historyDeleted
56
+ historyDeleted,
57
57
  });
58
58
  };
59
59
  //# sourceMappingURL=runner-cleanup.js.map