awb-agent-manager 1.6.195 → 1.6.196

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.
@@ -5,23 +5,64 @@ export interface LockPayload {
5
5
  role: LockRole;
6
6
  version: string;
7
7
  started_at: string;
8
+ boot_id: string | null;
9
+ boot_time_ms: number;
10
+ pid_start_ticks: number | null;
8
11
  }
9
12
  export interface LockHandle {
10
13
  release(): void;
11
14
  path: string;
12
15
  payload: LockPayload;
13
16
  }
14
- interface ParsedLock {
17
+ export interface ParsedLock {
15
18
  pid: number;
16
19
  role?: string;
17
20
  started_at?: string;
18
21
  version?: string;
22
+ boot_id?: string;
23
+ boot_time_ms?: number;
24
+ pid_start_ticks?: number;
19
25
  }
20
26
  interface AcquireOptions {
21
27
  role: LockRole;
22
28
  version: string;
23
29
  force?: boolean;
24
30
  }
31
+ export type LockStaleReason = 'boot_id_mismatch' | 'boot_time_mismatch' | 'lock_predates_boot' | 'pid_dead' | 'pid_recycled';
32
+ export type LockOwnerVerdict = {
33
+ stale: true;
34
+ reason: LockStaleReason;
35
+ detail: string;
36
+ } | {
37
+ stale: false;
38
+ reason: 'owner_alive' | 'owner_unverifiable';
39
+ detail: string;
40
+ };
41
+ export interface LockOwnerFacts {
42
+ bootId: string | null;
43
+ bootTimeMs: number;
44
+ pidPresence: 'dead' | 'present';
45
+ pidStartTicks: number | null;
46
+ pidStartedAtMs: number | null;
47
+ }
48
+ export declare function judgeLockOwner(lock: ParsedLock, facts: LockOwnerFacts): LockOwnerVerdict;
49
+ export declare function probeLockOwner(lock: ParsedLock): LockOwnerFacts;
50
+ export interface RecoveryGuardFacts {
51
+ owner: ParsedLock | null;
52
+ ownerFacts: LockOwnerFacts | null;
53
+ guardMtimeMs: number | null;
54
+ bootTimeMs: number;
55
+ nowMs: number;
56
+ }
57
+ export type RecoveryGuardVerdict = {
58
+ reclaim: true;
59
+ reason: 'guard_gone' | 'owner_stale' | 'guard_predates_boot' | 'guard_expired';
60
+ detail: string;
61
+ } | {
62
+ reclaim: false;
63
+ detail: string;
64
+ };
65
+ export declare function judgeRecoveryGuard(facts: RecoveryGuardFacts): RecoveryGuardVerdict;
25
66
  export declare function acquireAgentLock(opts: AcquireOptions): Promise<LockHandle>;
26
67
  export declare function resolveLostCreateRace(read: () => ParsedLock | null, alive: (pid: number) => boolean): {
27
68
  outcome: 'locked';
@@ -4,6 +4,7 @@ import { setTimeout as delay } from 'node:timers/promises';
4
4
  import { AGENT_MANAGER_HOME } from './constants.js';
5
5
  import { join } from 'node:path';
6
6
  import { log } from './logging.js';
7
+ import { currentBootIdentity, processStartTimeMs, readProcessStartTicks, } from './boot-identity.js';
7
8
  export const LOCK_PATH = join(AGENT_MANAGER_HOME, 'agent.lock');
8
9
  const RECOVERY_LOCK_PATH = `${LOCK_PATH}.recovery`;
9
10
  const RECOVERY_OWNER_PATH = join(RECOVERY_LOCK_PATH, 'owner.json');
@@ -11,19 +12,33 @@ const FORCE_KILL_GRACE_MS = 30_000;
11
12
  const FORCE_KILL_CONFIRM_MS = 5_000;
12
13
  const RECOVERY_LOCK_STALE_MS = 60_000;
13
14
  const MAX_ACQUIRE_ATTEMPTS = 5;
15
+ const BOOT_TIME_TOLERANCE_MS = 120_000;
16
+ const PID_START_TOLERANCE_MS = 60_000;
17
+ function parseLockPayload(parsed) {
18
+ const pid = Number.isFinite(parsed?.pid) ? parsed.pid : 0;
19
+ if (!(pid > 0))
20
+ return null;
21
+ return {
22
+ pid,
23
+ role: parsed.role,
24
+ started_at: parsed.started_at,
25
+ version: parsed.version,
26
+ boot_id: typeof parsed.boot_id === 'string' && parsed.boot_id ? parsed.boot_id : undefined,
27
+ boot_time_ms: Number.isFinite(parsed.boot_time_ms) ? parsed.boot_time_ms : undefined,
28
+ pid_start_ticks: Number.isFinite(parsed.pid_start_ticks) ? parsed.pid_start_ticks : undefined,
29
+ };
30
+ }
14
31
  function readLock() {
15
32
  try {
16
- const raw = readFileSync(LOCK_PATH, 'utf8');
17
- const parsed = JSON.parse(raw);
18
- const pid = Number.isFinite(parsed?.pid) ? parsed.pid : 0;
19
- return pid > 0
20
- ? {
21
- pid,
22
- role: parsed.role,
23
- started_at: parsed.started_at,
24
- version: parsed.version,
25
- }
26
- : null;
33
+ return parseLockPayload(JSON.parse(readFileSync(LOCK_PATH, 'utf8')));
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ function readRecoveryOwner() {
40
+ try {
41
+ return parseLockPayload(JSON.parse(readFileSync(RECOVERY_OWNER_PATH, 'utf8')));
27
42
  }
28
43
  catch {
29
44
  return null;
@@ -40,6 +55,174 @@ function isPidAlive(pid) {
40
55
  return err?.code === 'EPERM';
41
56
  }
42
57
  }
58
+ function parseIsoMs(value) {
59
+ if (!value)
60
+ return null;
61
+ const ms = Date.parse(value);
62
+ return Number.isFinite(ms) ? ms : null;
63
+ }
64
+ function compareBootGeneration(lock, facts) {
65
+ if (lock.boot_id && facts.bootId) {
66
+ return lock.boot_id === facts.bootId
67
+ ? { same: true, detail: `boot_id=${facts.bootId} 일치` }
68
+ : {
69
+ same: false,
70
+ reason: 'boot_id_mismatch',
71
+ detail: `lock boot_id=${lock.boot_id} 이 현재 부팅 ${facts.bootId} 과 다름`,
72
+ };
73
+ }
74
+ if (typeof lock.boot_time_ms === 'number') {
75
+ const driftMs = Math.abs(facts.bootTimeMs - lock.boot_time_ms);
76
+ if (driftMs > BOOT_TIME_TOLERANCE_MS) {
77
+ return {
78
+ same: false,
79
+ reason: 'boot_time_mismatch',
80
+ detail: `부팅 시각 근사치가 ${Math.round(driftMs / 1000)}s 어긋남 ` +
81
+ `(허용 ${BOOT_TIME_TOLERANCE_MS / 1000}s, lock=${new Date(lock.boot_time_ms).toISOString()})`,
82
+ };
83
+ }
84
+ return {
85
+ same: null,
86
+ detail: `부팅 시각 근사치가 ${Math.round(driftMs / 1000)}s 이내 — 같은 부팅으로 단정하지는 않음`,
87
+ };
88
+ }
89
+ const startedAtMs = parseIsoMs(lock.started_at);
90
+ if (startedAtMs !== null && startedAtMs < facts.bootTimeMs - BOOT_TIME_TOLERANCE_MS) {
91
+ return {
92
+ same: false,
93
+ reason: 'lock_predates_boot',
94
+ detail: `구버전 lock(boot 필드 없음)의 started_at=${lock.started_at} 이 ` +
95
+ `이번 부팅(${new Date(facts.bootTimeMs).toISOString()})보다 이른 시각`,
96
+ };
97
+ }
98
+ return { same: null, detail: '구버전 lock(boot 필드 없음) — 부팅 세대를 판별할 수 없음' };
99
+ }
100
+ function judgePidRecycled(lock, facts) {
101
+ if (typeof lock.pid_start_ticks === 'number' && facts.pidStartTicks !== null) {
102
+ return lock.pid_start_ticks === facts.pidStartTicks
103
+ ? null
104
+ : `pid=${lock.pid} 의 starttime tick 이 ${lock.pid_start_ticks} → ${facts.pidStartTicks} 로 바뀜 ` +
105
+ `— 번호만 물려받은 다른 프로세스`;
106
+ }
107
+ const startedAtMs = parseIsoMs(lock.started_at);
108
+ if (facts.pidStartedAtMs !== null &&
109
+ startedAtMs !== null &&
110
+ facts.pidStartedAtMs > startedAtMs + PID_START_TOLERANCE_MS) {
111
+ return (`pid=${lock.pid} 의 프로세스 시작 시각(${new Date(facts.pidStartedAtMs).toISOString()})이 ` +
112
+ `lock started_at(${lock.started_at})보다 나중 — 재사용된 번호`);
113
+ }
114
+ return null;
115
+ }
116
+ export function judgeLockOwner(lock, facts) {
117
+ const boot = compareBootGeneration(lock, facts);
118
+ if (boot.same === false) {
119
+ return { stale: true, reason: boot.reason, detail: boot.detail };
120
+ }
121
+ if (facts.pidPresence === 'dead') {
122
+ return { stale: true, reason: 'pid_dead', detail: `pid=${lock.pid} 를 쓰는 프로세스가 없음 (ESRCH)` };
123
+ }
124
+ const recycled = judgePidRecycled(lock, facts);
125
+ if (recycled)
126
+ return { stale: true, reason: 'pid_recycled', detail: recycled };
127
+ return {
128
+ stale: false,
129
+ reason: boot.same === true ? 'owner_alive' : 'owner_unverifiable',
130
+ detail: `pid=${lock.pid} 가 살아 있고 재사용 근거 없음 — ${boot.detail}`,
131
+ };
132
+ }
133
+ function probePidPresence(pid) {
134
+ if (!Number.isFinite(pid) || pid <= 0)
135
+ return 'dead';
136
+ try {
137
+ process.kill(pid, 0);
138
+ return 'present';
139
+ }
140
+ catch (err) {
141
+ return err?.code === 'ESRCH' ? 'dead' : 'present';
142
+ }
143
+ }
144
+ export function probeLockOwner(lock) {
145
+ const boot = currentBootIdentity();
146
+ const pidStartTicks = readProcessStartTicks(lock.pid);
147
+ return {
148
+ bootId: boot.id,
149
+ bootTimeMs: boot.approxBootTimeMs,
150
+ pidPresence: probePidPresence(lock.pid),
151
+ pidStartTicks,
152
+ pidStartedAtMs: processStartTimeMs(pidStartTicks, boot.approxBootTimeMs),
153
+ };
154
+ }
155
+ function guardPredatesBoot(facts) {
156
+ return facts.guardMtimeMs !== null && facts.guardMtimeMs < facts.bootTimeMs - BOOT_TIME_TOLERANCE_MS;
157
+ }
158
+ function guardAgeMs(facts) {
159
+ return facts.guardMtimeMs === null ? null : facts.nowMs - facts.guardMtimeMs;
160
+ }
161
+ function hasBootGeneration(owner) {
162
+ return owner.boot_id !== undefined || owner.boot_time_ms !== undefined;
163
+ }
164
+ export function judgeRecoveryGuard(facts) {
165
+ if (facts.owner && facts.ownerFacts) {
166
+ const verdict = judgeLockOwner(facts.owner, facts.ownerFacts);
167
+ if (verdict.stale) {
168
+ return { reclaim: true, reason: 'owner_stale', detail: `${verdict.reason}: ${verdict.detail}` };
169
+ }
170
+ if (guardPredatesBoot(facts)) {
171
+ return {
172
+ reclaim: true,
173
+ reason: 'guard_predates_boot',
174
+ detail: `가드 디렉터리 mtime(${new Date(facts.guardMtimeMs).toISOString()})이 ` +
175
+ `이번 부팅(${new Date(facts.bootTimeMs).toISOString()})보다 이른 시각`,
176
+ };
177
+ }
178
+ const legacyAgeMs = guardAgeMs(facts);
179
+ if (!hasBootGeneration(facts.owner) && legacyAgeMs !== null && legacyAgeMs >= RECOVERY_LOCK_STALE_MS) {
180
+ return {
181
+ reclaim: true,
182
+ reason: 'guard_expired',
183
+ detail: `부팅 세대가 없는 구버전 가드(owner pid=${facts.owner.pid})가 ` +
184
+ `${Math.round(legacyAgeMs / 1000)}s 경과 (상한 ${RECOVERY_LOCK_STALE_MS / 1000}s)`,
185
+ };
186
+ }
187
+ return { reclaim: false, detail: `가드 owner pid=${facts.owner.pid} 를 회수할 근거 없음` };
188
+ }
189
+ if (facts.guardMtimeMs === null) {
190
+ return { reclaim: true, reason: 'guard_gone', detail: '가드 디렉터리가 이미 사라짐' };
191
+ }
192
+ if (guardPredatesBoot(facts)) {
193
+ return {
194
+ reclaim: true,
195
+ reason: 'guard_predates_boot',
196
+ detail: `owner 미상 가드의 mtime(${new Date(facts.guardMtimeMs).toISOString()})이 이번 부팅보다 이른 시각`,
197
+ };
198
+ }
199
+ const ageMs = guardAgeMs(facts);
200
+ if (ageMs >= RECOVERY_LOCK_STALE_MS) {
201
+ return {
202
+ reclaim: true,
203
+ reason: 'guard_expired',
204
+ detail: `owner 미상 가드가 ${Math.round(ageMs / 1000)}s 경과 (상한 ${RECOVERY_LOCK_STALE_MS / 1000}s)`,
205
+ };
206
+ }
207
+ return { reclaim: false, detail: `owner 미상 가드가 아직 ${Math.round(ageMs / 1000)}s 밖에 안 됨` };
208
+ }
209
+ function probeRecoveryGuard() {
210
+ const owner = readRecoveryOwner();
211
+ let guardMtimeMs = null;
212
+ try {
213
+ guardMtimeMs = statSync(RECOVERY_LOCK_PATH).mtimeMs;
214
+ }
215
+ catch {
216
+ guardMtimeMs = null;
217
+ }
218
+ return {
219
+ owner,
220
+ ownerFacts: owner ? probeLockOwner(owner) : null,
221
+ guardMtimeMs,
222
+ bootTimeMs: currentBootIdentity().approxBootTimeMs,
223
+ nowMs: Date.now(),
224
+ };
225
+ }
43
226
  function writeLockAtomic(payload) {
44
227
  try {
45
228
  mkdirSync(dirname(LOCK_PATH), { recursive: true });
@@ -55,11 +238,15 @@ export async function acquireAgentLock(opts) {
55
238
  if (role !== 'manager') {
56
239
  throw new Error(`acquireAgentLock: invalid role ${JSON.stringify(role)}`);
57
240
  }
241
+ const boot = currentBootIdentity();
58
242
  const payload = {
59
243
  pid: process.pid,
60
244
  role,
61
245
  version,
62
246
  started_at: new Date().toISOString(),
247
+ boot_id: boot.id,
248
+ boot_time_ms: boot.approxBootTimeMs,
249
+ pid_start_ticks: readProcessStartTicks(process.pid),
63
250
  };
64
251
  for (let attempt = 1;; attempt++) {
65
252
  try {
@@ -86,13 +273,17 @@ async function attemptAcquire(payload, force) {
86
273
  if (!existing) {
87
274
  return acquireAfterStaleCleanup(payload);
88
275
  }
89
- if (!isPidAlive(existing.pid)) {
90
- log(`[lockfile] reusing stale lock (previous owner pid=${existing.pid} role=${existing.role || '?'} dead)`);
276
+ const verdict = judgeLockOwner(existing, probeLockOwner(existing));
277
+ if (verdict.stale) {
278
+ log(`[lockfile] reusing stale lock — ${verdict.reason}: ${verdict.detail} ` +
279
+ `(previous owner pid=${existing.pid} role=${existing.role || '?'} ` +
280
+ `version=${existing.version || '?'} started_at=${existing.started_at || '?'})`);
91
281
  return acquireAfterStaleCleanup(payload);
92
282
  }
93
283
  if (!force) {
94
284
  const e = new Error(`AWB agent-manager lockfile held by pid=${existing.pid} role=${existing.role || '?'} ` +
95
- `version=${existing.version || '?'} since ${existing.started_at || '?'}. ` +
285
+ `version=${existing.version || '?'} since ${existing.started_at || '?'} ` +
286
+ `[${verdict.reason}: ${verdict.detail}]. ` +
96
287
  `Stop it first, or pass --force to take over.`);
97
288
  e.code = 'EAGENTLOCKED';
98
289
  throw e;
@@ -150,8 +341,12 @@ async function acquireAfterStaleCleanup(payload) {
150
341
  const releaseRecovery = await acquireRecoveryLock();
151
342
  try {
152
343
  const current = readLock();
153
- if (current && isPidAlive(current.pid))
154
- throw lockedBy(current);
344
+ if (current) {
345
+ const currentVerdict = judgeLockOwner(current, probeLockOwner(current));
346
+ if (!currentVerdict.stale) {
347
+ throw lockedBy(current, `${currentVerdict.reason}: ${currentVerdict.detail}`);
348
+ }
349
+ }
155
350
  try {
156
351
  unlinkSync(LOCK_PATH);
157
352
  }
@@ -192,7 +387,15 @@ async function acquireRecoveryLock() {
192
387
  for (;;) {
193
388
  try {
194
389
  mkdirSync(RECOVERY_LOCK_PATH);
195
- writeFileSync(RECOVERY_OWNER_PATH, JSON.stringify({ pid: process.pid }));
390
+ const guardBoot = currentBootIdentity();
391
+ writeFileSync(RECOVERY_OWNER_PATH, JSON.stringify({
392
+ pid: process.pid,
393
+ role: 'recovery-guard',
394
+ started_at: new Date().toISOString(),
395
+ boot_id: guardBoot.id,
396
+ boot_time_ms: guardBoot.approxBootTimeMs,
397
+ pid_start_ticks: readProcessStartTicks(process.pid),
398
+ }));
196
399
  return () => {
197
400
  try {
198
401
  rmSync(RECOVERY_LOCK_PATH, { recursive: true, force: true });
@@ -211,22 +414,11 @@ async function acquireRecoveryLock() {
211
414
  }
212
415
  }
213
416
  function reclaimStaleRecoveryLock() {
214
- let ownerPid = 0;
215
- let ageMs = 0;
216
- try {
217
- const parsed = JSON.parse(readFileSync(RECOVERY_OWNER_PATH, 'utf8'));
218
- ownerPid = Number.isFinite(parsed?.pid) ? parsed.pid : 0;
219
- }
220
- catch {
221
- try {
222
- ageMs = Date.now() - statSync(RECOVERY_LOCK_PATH).mtimeMs;
223
- }
224
- catch {
225
- return true;
226
- }
227
- }
228
- if ((ownerPid > 0 && isPidAlive(ownerPid)) || (ownerPid === 0 && ageMs < RECOVERY_LOCK_STALE_MS)) {
417
+ const verdict = judgeRecoveryGuard(probeRecoveryGuard());
418
+ if (!verdict.reclaim)
229
419
  return false;
420
+ if (verdict.reason !== 'guard_gone') {
421
+ log(`[lockfile] reclaiming stale recovery guard — ${verdict.reason}: ${verdict.detail}`);
230
422
  }
231
423
  const quarantine = `${RECOVERY_LOCK_PATH}.stale-${process.pid}-${Date.now()}`;
232
424
  try {
@@ -238,8 +430,8 @@ function reclaimStaleRecoveryLock() {
238
430
  rmSync(quarantine, { recursive: true, force: true });
239
431
  return true;
240
432
  }
241
- function lockedBy(existing) {
242
- const e = new Error(`AWB agent-manager lockfile held by pid=${existing.pid}`);
433
+ function lockedBy(existing, why) {
434
+ const e = new Error(`AWB agent-manager lockfile held by pid=${existing.pid}${why ? ` [${why}]` : ''}`);
243
435
  e.code = 'EAGENTLOCKED';
244
436
  return e;
245
437
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-lockfile.js","sourceRoot":"","sources":["../../src/lib/agent-lockfile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-lockfile.js","sourceRoot":"","sources":["../../src/lib/agent-lockfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface BootIdentity {
2
+ id: string | null;
3
+ approxBootTimeMs: number;
4
+ }
5
+ export declare function readBootId(): string | null;
6
+ export declare function approxBootTimeMs(): number;
7
+ export declare function currentBootIdentity(): BootIdentity;
8
+ export declare function readProcessStartTicks(pid: number): number | null;
9
+ export declare function processStartTimeMs(ticks: number | null, bootTimeMs: number, nowMs?: number): number | null;
@@ -0,0 +1,50 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { uptime } from 'node:os';
3
+ const USER_HZ = 100;
4
+ const PROCESS_START_SANITY_SLACK_MS = 60_000;
5
+ let cachedBootId;
6
+ export function readBootId() {
7
+ if (cachedBootId !== undefined)
8
+ return cachedBootId;
9
+ try {
10
+ const raw = readFileSync('/proc/sys/kernel/random/boot_id', 'utf8').trim();
11
+ cachedBootId = raw.length > 0 ? raw : null;
12
+ }
13
+ catch {
14
+ cachedBootId = null;
15
+ }
16
+ return cachedBootId;
17
+ }
18
+ export function approxBootTimeMs() {
19
+ return Date.now() - Math.round(uptime() * 1000);
20
+ }
21
+ export function currentBootIdentity() {
22
+ return { id: readBootId(), approxBootTimeMs: approxBootTimeMs() };
23
+ }
24
+ export function readProcessStartTicks(pid) {
25
+ if (!Number.isInteger(pid) || pid <= 0)
26
+ return null;
27
+ let stat;
28
+ try {
29
+ stat = readFileSync(`/proc/${pid}/stat`, 'utf8');
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ const tail = stat.slice(stat.lastIndexOf(')') + 1).trim();
35
+ if (!tail)
36
+ return null;
37
+ const ticks = Number(tail.split(/\s+/)[19]);
38
+ return Number.isFinite(ticks) && ticks >= 0 ? ticks : null;
39
+ }
40
+ export function processStartTimeMs(ticks, bootTimeMs, nowMs = Date.now()) {
41
+ if (ticks === null || !Number.isFinite(ticks))
42
+ return null;
43
+ const startedAt = bootTimeMs + Math.round((ticks / USER_HZ) * 1000);
44
+ if (startedAt < bootTimeMs - PROCESS_START_SANITY_SLACK_MS)
45
+ return null;
46
+ if (startedAt > nowMs + PROCESS_START_SANITY_SLACK_MS)
47
+ return null;
48
+ return startedAt;
49
+ }
50
+ //# sourceMappingURL=boot-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boot-identity.js","sourceRoot":"","sources":["../../src/lib/boot-identity.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMjC,MAAM,OAAO,GAAG,GAAG,CAAC;AAGpB,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAS7C,IAAI,YAAuC,CAAC;AAI5C,MAAM,UAAU,UAAU;IACxB,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3E,YAAY,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAKD,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,EAAE,CAAC;AACpE,CAAC;AAUD,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAMD,MAAM,UAAU,kBAAkB,CAChC,KAAoB,EACpB,UAAkB,EAClB,QAAgB,IAAI,CAAC,GAAG,EAAE;IAE1B,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACpE,IAAI,SAAS,GAAG,UAAU,GAAG,6BAA6B;QAAE,OAAO,IAAI,CAAC;IACxE,IAAI,SAAS,GAAG,KAAK,GAAG,6BAA6B;QAAE,OAAO,IAAI,CAAC;IACnE,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "awb-agent-manager",
3
- "version": "1.6.195",
3
+ "version": "1.6.196",
4
4
  "description": "Runtime Host for AWB agents, including Hermes ACP and managed CLI runtimes",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "awb-agent-manager",
3
- "version": "1.6.195",
3
+ "version": "1.6.196",
4
4
  "description": "Runtime Host for AWB agents, including Hermes ACP and managed CLI runtimes",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",