@agentteams/runner 0.0.61-dev.113 → 0.0.61
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.
|
@@ -9,7 +9,6 @@ const COOLDOWN_MS = 60 * 60 * 1000; // 1시간
|
|
|
9
9
|
let lastCliUpdateAttempt = 0;
|
|
10
10
|
let lastRunnerUpdateAttempt = 0;
|
|
11
11
|
let lastSuccessfulRunnerVersion = null;
|
|
12
|
-
let lastNotifiedRunnerVersion = null;
|
|
13
12
|
const getCurrentRunnerVersion = () => packageJson.version ?? "0.0.0";
|
|
14
13
|
const getInstalledCliVersion = (deps) => {
|
|
15
14
|
try {
|
|
@@ -69,8 +68,7 @@ export const maybeAutoUpdate = async (meta, deps = {}) => {
|
|
|
69
68
|
if (meta.runnerLatestVersion && now - lastRunnerUpdateAttempt >= COOLDOWN_MS) {
|
|
70
69
|
lastRunnerUpdateAttempt = now;
|
|
71
70
|
const currentRunnerVersion = getCurrentRunnerVersion();
|
|
72
|
-
|
|
73
|
-
if (!isAlreadyInstalled && needsUpdate(currentRunnerVersion, meta.runnerLatestVersion)) {
|
|
71
|
+
if (needsUpdate(currentRunnerVersion, meta.runnerLatestVersion) && lastSuccessfulRunnerVersion !== meta.runnerLatestVersion) {
|
|
74
72
|
try {
|
|
75
73
|
resolvedLogger.info("Auto-updating Runner", {
|
|
76
74
|
currentVersion: currentRunnerVersion,
|
|
@@ -84,6 +82,16 @@ export const maybeAutoUpdate = async (meta, deps = {}) => {
|
|
|
84
82
|
resolvedLogger.info("Runner auto-update completed — restart required", {
|
|
85
83
|
version: meta.runnerLatestVersion
|
|
86
84
|
});
|
|
85
|
+
if (deps.onRunnerUpdated) {
|
|
86
|
+
try {
|
|
87
|
+
await deps.onRunnerUpdated(meta.runnerLatestVersion);
|
|
88
|
+
}
|
|
89
|
+
catch (notifyError) {
|
|
90
|
+
resolvedLogger.error("Failed to notify runner update", {
|
|
91
|
+
error: notifyError instanceof Error ? notifyError.message : String(notifyError)
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
87
95
|
}
|
|
88
96
|
catch (error) {
|
|
89
97
|
resolvedLogger.error("Runner auto-update failed", {
|
|
@@ -92,19 +100,6 @@ export const maybeAutoUpdate = async (meta, deps = {}) => {
|
|
|
92
100
|
}
|
|
93
101
|
}
|
|
94
102
|
}
|
|
95
|
-
// Runner 알림: 설치 성공 후 알림 미완료 시 매 폴링마다 재시도
|
|
96
|
-
if (meta.runnerLatestVersion && lastSuccessfulRunnerVersion === meta.runnerLatestVersion
|
|
97
|
-
&& lastNotifiedRunnerVersion !== meta.runnerLatestVersion && deps.onRunnerUpdated) {
|
|
98
|
-
try {
|
|
99
|
-
await deps.onRunnerUpdated(meta.runnerLatestVersion);
|
|
100
|
-
lastNotifiedRunnerVersion = meta.runnerLatestVersion;
|
|
101
|
-
}
|
|
102
|
-
catch (notifyError) {
|
|
103
|
-
resolvedLogger.error("Failed to notify runner update", {
|
|
104
|
-
error: notifyError instanceof Error ? notifyError.message : String(notifyError)
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
103
|
return { cliUpdated, runnerUpdated };
|
|
109
104
|
};
|
|
110
105
|
/** 테스트용: 쿨다운 타이머 리셋 */
|
|
@@ -112,6 +107,5 @@ export const resetAutoUpdateState = () => {
|
|
|
112
107
|
lastCliUpdateAttempt = 0;
|
|
113
108
|
lastRunnerUpdateAttempt = 0;
|
|
114
109
|
lastSuccessfulRunnerVersion = null;
|
|
115
|
-
lastNotifiedRunnerVersion = null;
|
|
116
110
|
};
|
|
117
111
|
//# sourceMappingURL=auto-update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../src/utils/auto-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAyB,CAAC;AAE1E,MAAM,WAAW,GAAG,iBAAiB,CAAC;AACtC,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAE5C,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM;AAS1C,IAAI,oBAAoB,GAAG,CAAC,CAAC;AAC7B,IAAI,uBAAuB,GAAG,CAAC,CAAC;AAChC,IAAI,2BAA2B,GAAkB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../src/utils/auto-update.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { test } from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { maybeAutoUpdate, resetAutoUpdateState } from "./auto-update.js";
|
|
4
|
-
test("maybeAutoUpdate calls onRunnerUpdated after successful install", async () => {
|
|
5
|
-
resetAutoUpdateState();
|
|
6
|
-
let installCalled = false;
|
|
7
|
-
let notifiedVersion = null;
|
|
8
|
-
const deps = {
|
|
9
|
-
runExecutableSync: (name, args) => {
|
|
10
|
-
if (name === "npm" && args[0] === "install") {
|
|
11
|
-
installCalled = true;
|
|
12
|
-
}
|
|
13
|
-
return "";
|
|
14
|
-
},
|
|
15
|
-
logger: {
|
|
16
|
-
info: () => { },
|
|
17
|
-
warn: () => { },
|
|
18
|
-
error: () => { }
|
|
19
|
-
},
|
|
20
|
-
now: () => Date.now(),
|
|
21
|
-
onRunnerUpdated: async (version) => {
|
|
22
|
-
notifiedVersion = version;
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
const meta = {
|
|
26
|
-
cliLatestVersion: null,
|
|
27
|
-
runnerLatestVersion: "99.9.9",
|
|
28
|
-
};
|
|
29
|
-
await maybeAutoUpdate(meta, deps);
|
|
30
|
-
assert.ok(installCalled, "installPackage should be called");
|
|
31
|
-
assert.equal(notifiedVersion, "99.9.9", "onRunnerUpdated should be called with new version");
|
|
32
|
-
});
|
|
33
|
-
test("maybeAutoUpdate does not call onRunnerUpdated again if it already succeeded for that version", async () => {
|
|
34
|
-
resetAutoUpdateState();
|
|
35
|
-
let installCount = 0;
|
|
36
|
-
let notifyCount = 0;
|
|
37
|
-
const deps = {
|
|
38
|
-
runExecutableSync: () => {
|
|
39
|
-
installCount++;
|
|
40
|
-
return "";
|
|
41
|
-
},
|
|
42
|
-
logger: {
|
|
43
|
-
info: () => { },
|
|
44
|
-
warn: () => { },
|
|
45
|
-
error: () => { }
|
|
46
|
-
},
|
|
47
|
-
now: () => Date.now(),
|
|
48
|
-
onRunnerUpdated: async () => {
|
|
49
|
-
notifyCount++;
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
const meta = {
|
|
53
|
-
cliLatestVersion: null,
|
|
54
|
-
runnerLatestVersion: "99.9.9",
|
|
55
|
-
};
|
|
56
|
-
// First call
|
|
57
|
-
await maybeAutoUpdate(meta, deps);
|
|
58
|
-
assert.equal(installCount, 1);
|
|
59
|
-
assert.equal(notifyCount, 1);
|
|
60
|
-
// Second call with same version
|
|
61
|
-
await maybeAutoUpdate(meta, { ...deps, now: () => Date.now() + 60 * 60 * 1000 + 1 });
|
|
62
|
-
assert.equal(installCount, 1, "should not install again");
|
|
63
|
-
assert.equal(notifyCount, 1, "should not notify again");
|
|
64
|
-
});
|
|
65
|
-
test("maybeAutoUpdate RETRIES notification if it failed before", async () => {
|
|
66
|
-
resetAutoUpdateState();
|
|
67
|
-
let notifyCount = 0;
|
|
68
|
-
let shouldFailNotify = true;
|
|
69
|
-
const deps = {
|
|
70
|
-
runExecutableSync: () => "",
|
|
71
|
-
logger: {
|
|
72
|
-
info: () => { },
|
|
73
|
-
warn: () => { },
|
|
74
|
-
error: () => { }
|
|
75
|
-
},
|
|
76
|
-
now: () => 10000000,
|
|
77
|
-
onRunnerUpdated: async () => {
|
|
78
|
-
if (shouldFailNotify) {
|
|
79
|
-
shouldFailNotify = false;
|
|
80
|
-
throw new Error("Network error");
|
|
81
|
-
}
|
|
82
|
-
notifyCount++;
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
const meta = {
|
|
86
|
-
cliLatestVersion: null,
|
|
87
|
-
runnerLatestVersion: "99.9.9",
|
|
88
|
-
};
|
|
89
|
-
// First call: install succeeds, notification fails
|
|
90
|
-
console.log("First call starting...");
|
|
91
|
-
await maybeAutoUpdate(meta, deps);
|
|
92
|
-
console.log("First call done. notifyCount:", notifyCount);
|
|
93
|
-
assert.equal(notifyCount, 0, "Notification should have failed");
|
|
94
|
-
// Second call: after cooldown
|
|
95
|
-
console.log("Second call starting...");
|
|
96
|
-
await maybeAutoUpdate(meta, { ...deps, now: () => 10000000 + 60 * 60 * 1000 + 1 });
|
|
97
|
-
console.log("Second call done. notifyCount:", notifyCount);
|
|
98
|
-
assert.equal(notifyCount, 1, "Should retry notification successfully");
|
|
99
|
-
});
|
|
100
|
-
//# sourceMappingURL=auto-update.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.test.js","sourceRoot":"","sources":["../../src/utils/auto-update.test.ts"],"names":[],"mappings":"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"}
|