@evalops/maestro 0.10.46 → 0.10.48

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 (152) hide show
  1. package/README.md +4 -0
  2. package/dist/agent/providers/openai-codex-session.js +1 -1
  3. package/dist/agent/providers/openai-codex-session.js.map +1 -1
  4. package/dist/app-server/in-process-client.d.ts +2 -2
  5. package/dist/app-server/in-process-client.js.map +1 -1
  6. package/dist/app-server/protocol-modes-api.js +1 -1
  7. package/dist/app-server/protocol-modes-api.js.map +1 -1
  8. package/dist/app-server/sandbox-check-api.d.ts +21 -0
  9. package/dist/app-server/{sandbox-proof-api.d.ts.map → sandbox-check-api.d.ts.map} +1 -1
  10. package/dist/app-server/{sandbox-proof-api.js → sandbox-check-api.js} +18 -18
  11. package/dist/app-server/{sandbox-proof-api.js.map → sandbox-check-api.js.map} +1 -1
  12. package/dist/app-server/session-api.d.ts +5 -5
  13. package/dist/app-server/session-api.js +18 -18
  14. package/dist/app-server/session-api.js.map +1 -1
  15. package/dist/audit/logger.d.ts +1 -1
  16. package/dist/cli/args.d.ts.map +1 -1
  17. package/dist/cli/args.js +3 -1
  18. package/dist/cli/args.js.map +1 -1
  19. package/dist/cli/commands/codex.js +30 -3
  20. package/dist/cli/commands/codex.js.map +1 -1
  21. package/dist/cli/commands/update.d.ts +12 -0
  22. package/dist/cli/commands/update.d.ts.map +1 -0
  23. package/dist/cli/commands/update.js +148 -0
  24. package/dist/cli/commands/update.js.map +1 -0
  25. package/dist/cli/help.d.ts.map +1 -1
  26. package/dist/cli/help.js +4 -0
  27. package/dist/cli/help.js.map +1 -1
  28. package/dist/cli-tui/auth-state.d.ts +7 -0
  29. package/dist/cli-tui/auth-state.d.ts.map +1 -0
  30. package/dist/cli-tui/auth-state.js +46 -0
  31. package/dist/cli-tui/auth-state.js.map +1 -0
  32. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  33. package/dist/cli-tui/commands/command-catalog.js +8 -3
  34. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  35. package/dist/cli-tui/commands/command-suite-handlers.d.ts +2 -5
  36. package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +1 -1
  37. package/dist/cli-tui/commands/command-suite-handlers.js.map +1 -1
  38. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +6 -5
  39. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
  40. package/dist/cli-tui/commands/subcommands/auth-commands.js +2 -2
  41. package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
  42. package/dist/cli-tui/commands/subcommands/ui-commands.d.ts +1 -1
  43. package/dist/cli-tui/commands/subcommands/ui-commands.js +2 -2
  44. package/dist/cli-tui/commands/subcommands/ui-commands.js.map +1 -1
  45. package/dist/cli-tui/footer.d.ts.map +1 -1
  46. package/dist/cli-tui/footer.js +1 -1
  47. package/dist/cli-tui/footer.js.map +1 -1
  48. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
  49. package/dist/cli-tui/oauth/oauth-flow-controller.js +24 -11
  50. package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
  51. package/dist/cli-tui/selectors/oauth-selector-view.d.ts +1 -0
  52. package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
  53. package/dist/cli-tui/selectors/oauth-selector-view.js +1 -1
  54. package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
  55. package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -1
  56. package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
  57. package/dist/cli-tui/selectors/oauth-selector.js +25 -2
  58. package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
  59. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +2 -5
  60. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +1 -1
  61. package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +1 -1
  62. package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts +1 -1
  63. package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts.map +1 -1
  64. package/dist/cli-tui/tui-renderer/ui-state-controller.js +5 -11
  65. package/dist/cli-tui/tui-renderer/ui-state-controller.js.map +1 -1
  66. package/dist/cli-tui/tui-renderer.d.ts +0 -4
  67. package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
  68. package/dist/cli-tui/tui-renderer.js +4 -29
  69. package/dist/cli-tui/tui-renderer.js.map +1 -1
  70. package/dist/cli-tui/ui-state.js +1 -1
  71. package/dist/cli-tui/ui-state.js.map +1 -1
  72. package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
  73. package/dist/cli-tui/utils/footer-utils.d.ts.map +1 -1
  74. package/dist/cli-tui/utils/footer-utils.js.map +1 -1
  75. package/dist/cli.js +4800 -3779
  76. package/dist/cli.js.map +1 -1
  77. package/dist/codex/app-server-client.d.ts +16 -2
  78. package/dist/codex/app-server-client.d.ts.map +1 -1
  79. package/dist/codex/app-server-client.js +67 -7
  80. package/dist/codex/app-server-client.js.map +1 -1
  81. package/dist/codex/auth.d.ts +4 -0
  82. package/dist/codex/auth.d.ts.map +1 -0
  83. package/dist/codex/auth.js +103 -0
  84. package/dist/codex/auth.js.map +1 -0
  85. package/dist/db/schema.d.ts +1 -1
  86. package/dist/evalops/agent-bootstrap.js +2 -2
  87. package/dist/evalops/agent-bootstrap.js.map +1 -1
  88. package/dist/main.d.ts.map +1 -1
  89. package/dist/main.js +10 -1
  90. package/dist/main.js.map +1 -1
  91. package/dist/models/config-loader.d.ts +12 -12
  92. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +19 -19
  93. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
  94. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +12 -13
  95. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
  96. package/dist/node_modules/@evalops/contracts/dist/scenario.d.ts +2 -0
  97. package/dist/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -1
  98. package/dist/node_modules/@evalops/contracts/dist/scenario.js.map +1 -1
  99. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  100. package/dist/node_modules/@evalops/tui/package.json +1 -1
  101. package/dist/oauth/index.d.ts +1 -0
  102. package/dist/oauth/index.d.ts.map +1 -1
  103. package/dist/oauth/index.js +42 -2
  104. package/dist/oauth/index.js.map +1 -1
  105. package/dist/platform/operating-plane-client.d.ts +3 -3
  106. package/dist/platform/operating-plane-client.d.ts.map +1 -1
  107. package/dist/platform/operating-plane-client.js.map +1 -1
  108. package/dist/platform/operating-plane-summary.js +3 -6
  109. package/dist/platform/operating-plane-summary.js.map +1 -1
  110. package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -1
  111. package/dist/server/agent-trajectory-scenarios.js +29 -6
  112. package/dist/server/agent-trajectory-scenarios.js.map +1 -1
  113. package/dist/server/app-context.d.ts +2 -0
  114. package/dist/server/app-context.d.ts.map +1 -1
  115. package/dist/server/app-context.js.map +1 -1
  116. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  117. package/dist/server/handlers/headless-sessions.js +44 -10
  118. package/dist/server/handlers/headless-sessions.js.map +1 -1
  119. package/dist/server/handlers/hosted-runner-identity.d.ts +2 -0
  120. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  121. package/dist/server/handlers/hosted-runner-identity.js +2 -0
  122. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  123. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  124. package/dist/server/handlers/platform-a2a-push.js +113 -2
  125. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  126. package/dist/server/handlers/ui.d.ts.map +1 -1
  127. package/dist/server/handlers/ui.js +5 -5
  128. package/dist/server/handlers/ui.js.map +1 -1
  129. package/dist/server/headless-in-process-host.d.ts.map +1 -1
  130. package/dist/server/headless-in-process-host.js +1 -1
  131. package/dist/server/headless-in-process-host.js.map +1 -1
  132. package/dist/server/headless-runtime-service.d.ts +9 -2
  133. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  134. package/dist/server/headless-runtime-service.js +54 -15
  135. package/dist/server/headless-runtime-service.js.map +1 -1
  136. package/dist/server/stores/ui-store.d.ts.map +1 -1
  137. package/dist/server/stores/ui-store.js +8 -1
  138. package/dist/server/stores/ui-store.js.map +1 -1
  139. package/dist/tools/background/task-runtime.js +1 -1
  140. package/dist/tools/background/task-runtime.js.map +1 -1
  141. package/dist/tools/background/task-types.d.ts +1 -1
  142. package/dist/update/check.d.ts +2 -0
  143. package/dist/update/check.d.ts.map +1 -1
  144. package/dist/update/check.js +100 -41
  145. package/dist/update/check.js.map +1 -1
  146. package/dist/update/startup-refresh.d.ts +56 -0
  147. package/dist/update/startup-refresh.d.ts.map +1 -0
  148. package/dist/update/startup-refresh.js +321 -0
  149. package/dist/update/startup-refresh.js.map +1 -0
  150. package/dist/version.json +2 -2
  151. package/package.json +297 -296
  152. package/dist/app-server/sandbox-proof-api.d.ts +0 -21
@@ -0,0 +1,321 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync, } from "node:fs";
3
+ import { basename, dirname, join, resolve } from "node:path";
4
+ import { parseArgs } from "../cli/args.js";
5
+ import { getAgentDir } from "../config/constants.js";
6
+ import { getGlobalInstallCommand, getPackageName, } from "../package-metadata.js";
7
+ import { withTimeout } from "../utils/async.js";
8
+ import { checkForUpdate, resolveUpdateUrls, } from "./check.js";
9
+ const SKIP_ENV = "MAESTRO_SKIP_STARTUP_UPDATE";
10
+ const STARTUP_UPDATE_ENV = "MAESTRO_STARTUP_UPDATE";
11
+ const STARTUP_UPDATE_STATE_ENV = "MAESTRO_STARTUP_UPDATE_STATE";
12
+ const STARTUP_UPDATE_TIMEOUT_ENV = "MAESTRO_STARTUP_UPDATE_TIMEOUT_MS";
13
+ const STARTUP_UPDATE_TTL_ENV = "MAESTRO_STARTUP_UPDATE_RETRY_MS";
14
+ const DEFAULT_INSTALL_TIMEOUT_MS = 60_000;
15
+ const DEFAULT_RETRY_MS = 24 * 60 * 60 * 1_000;
16
+ const DEFAULT_STARTUP_UPDATE_TIMEOUT_MS = 1_500;
17
+ const NPM_PREFIX_TIMEOUT_MS = 2_000;
18
+ const BUN_PREFIX_TIMEOUT_MS = 2_000;
19
+ const OFF_VALUES = new Set(["0", "false", "off", "skip", "disabled"]);
20
+ const CHECK_ONLY_VALUES = new Set(["check", "notice", "notify"]);
21
+ const INSTALLABLE_VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u;
22
+ const envValue = (env, key) => env[key]?.trim().toLowerCase() ?? "";
23
+ const toErrorMessage = (error) => {
24
+ if (error instanceof Error) {
25
+ return error.message;
26
+ }
27
+ if (typeof error === "string") {
28
+ return error;
29
+ }
30
+ return "Unknown error";
31
+ };
32
+ const shouldSkipForArgs = (args) => {
33
+ if (args[0] === "a2a") {
34
+ return "a2a command";
35
+ }
36
+ if (args[0] === "exec") {
37
+ return "non-interactive command";
38
+ }
39
+ if (args[0] === "update") {
40
+ return "manual update command";
41
+ }
42
+ if (args.includes("--version") ||
43
+ args.includes("-v") ||
44
+ args.includes("--help") ||
45
+ args.includes("-h")) {
46
+ return "immediate-exit command";
47
+ }
48
+ if (args.includes("--headless") ||
49
+ args.includes("--json") ||
50
+ args.includes("--rpc") ||
51
+ args.includes("rpc")) {
52
+ return "non-interactive command";
53
+ }
54
+ for (let i = 0; i < args.length; i++) {
55
+ const arg = args[i];
56
+ if (arg === "--mode" && args[i + 1] === "headless") {
57
+ return "headless command";
58
+ }
59
+ if (arg?.startsWith("--mode=") &&
60
+ arg.slice("--mode=".length) === "headless") {
61
+ return "headless command";
62
+ }
63
+ }
64
+ if (parseArgs(args).messages.length > 0) {
65
+ return "single-shot prompt";
66
+ }
67
+ return null;
68
+ };
69
+ export const isInstalledPackageEntrypoint = (entrypoint, packageName = getPackageName(), globalPrefix) => {
70
+ if (!entrypoint) {
71
+ return false;
72
+ }
73
+ if (isPackageEntrypointPath(entrypoint, packageName, globalPrefix)) {
74
+ return true;
75
+ }
76
+ try {
77
+ return isPackageEntrypointPath(realpathSync(entrypoint), packageName, globalPrefix);
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ };
83
+ const isPackageEntrypointPath = (entrypoint, packageName, globalPrefix) => {
84
+ const normalized = entrypoint.replace(/\\/g, "/");
85
+ const packageEntrypoint = `/node_modules/${packageName}/dist/cli.js`;
86
+ if (!normalized.endsWith(packageEntrypoint)) {
87
+ return false;
88
+ }
89
+ if (!globalPrefix) {
90
+ return true;
91
+ }
92
+ const normalizedPrefix = globalPrefix
93
+ .replace(/\\/g, "/")
94
+ .replace(/\/+$/u, "");
95
+ const normalizedPrefixes = new Set([normalizedPrefix]);
96
+ try {
97
+ normalizedPrefixes.add(realpathSync(globalPrefix).replace(/\\/g, "/").replace(/\/+$/u, ""));
98
+ }
99
+ catch {
100
+ // A missing prefix will fail the exact path checks below.
101
+ }
102
+ for (const prefix of normalizedPrefixes) {
103
+ if (normalized === `${prefix}/lib/node_modules/${packageName}/dist/cli.js` ||
104
+ normalized === `${prefix}/node_modules/${packageName}/dist/cli.js`) {
105
+ return true;
106
+ }
107
+ }
108
+ return false;
109
+ };
110
+ const resolveStatePath = (env = process.env, override) => {
111
+ if (override) {
112
+ return override;
113
+ }
114
+ if (env[STARTUP_UPDATE_STATE_ENV]) {
115
+ return resolve(env[STARTUP_UPDATE_STATE_ENV]);
116
+ }
117
+ return resolve(getAgentDir(), "startup-update-state.json");
118
+ };
119
+ const readState = (path) => {
120
+ if (!existsSync(path)) {
121
+ return null;
122
+ }
123
+ try {
124
+ return JSON.parse(readFileSync(path, "utf-8"));
125
+ }
126
+ catch {
127
+ return null;
128
+ }
129
+ };
130
+ const writeState = (path, state) => {
131
+ mkdirSync(dirname(path), { recursive: true });
132
+ writeFileSync(path, JSON.stringify(state, null, 2), "utf-8");
133
+ };
134
+ const retryMsFromEnv = (env) => {
135
+ const parsed = Number.parseInt(env[STARTUP_UPDATE_TTL_ENV] ?? "", 10);
136
+ if (Number.isFinite(parsed) && parsed >= 0) {
137
+ return parsed;
138
+ }
139
+ return DEFAULT_RETRY_MS;
140
+ };
141
+ const startupCheckTimeoutMsFromEnv = (env) => {
142
+ const parsed = Number.parseInt(env[STARTUP_UPDATE_TIMEOUT_ENV] ?? "", 10);
143
+ if (Number.isFinite(parsed) && parsed > 0) {
144
+ return parsed;
145
+ }
146
+ return DEFAULT_STARTUP_UPDATE_TIMEOUT_MS;
147
+ };
148
+ const startupSourceTimeoutMs = (totalTimeoutMs, sourceCount) => Math.max(1, Math.floor(totalTimeoutMs / Math.max(1, sourceCount)));
149
+ const shouldThrottleAttempt = (state, version, now, retryMs) => {
150
+ if (!state ||
151
+ state.version !== version ||
152
+ typeof state.lastAttemptAt !== "number" ||
153
+ state.lastStatus !== "failed") {
154
+ return false;
155
+ }
156
+ return now - state.lastAttemptAt < retryMs;
157
+ };
158
+ const isInstallableVersion = (version) => INSTALLABLE_VERSION.test(version);
159
+ const defaultInstallPackage = (packageManager, packageName, version) => {
160
+ const result = spawnSync(packageManager, ["install", "-g", `${packageName}@${version}`], {
161
+ encoding: "utf-8",
162
+ stdio: "pipe",
163
+ timeout: DEFAULT_INSTALL_TIMEOUT_MS,
164
+ });
165
+ return { status: result.status, error: result.error };
166
+ };
167
+ const resolveNpmGlobalPrefix = (env = process.env) => {
168
+ const result = spawnSync("npm", ["prefix", "-g"], {
169
+ encoding: "utf-8",
170
+ env,
171
+ stdio: ["ignore", "pipe", "ignore"],
172
+ timeout: NPM_PREFIX_TIMEOUT_MS,
173
+ });
174
+ if (result.error || result.status !== 0) {
175
+ return null;
176
+ }
177
+ const prefix = result.stdout.trim();
178
+ return prefix.length > 0 ? prefix : null;
179
+ };
180
+ const resolveBunGlobalPrefix = (env = process.env) => {
181
+ const result = spawnSync("bun", ["pm", "bin", "-g"], {
182
+ encoding: "utf-8",
183
+ env,
184
+ stdio: ["ignore", "pipe", "ignore"],
185
+ timeout: BUN_PREFIX_TIMEOUT_MS,
186
+ });
187
+ if (result.error || result.status !== 0) {
188
+ return null;
189
+ }
190
+ const binDir = result.stdout.trim();
191
+ if (!binDir) {
192
+ return null;
193
+ }
194
+ const bunHome = basename(binDir) === "bin" ? dirname(binDir) : binDir;
195
+ return join(bunHome, "install", "global");
196
+ };
197
+ const resolveGlobalInstallContexts = (env = process.env) => {
198
+ const contexts = [];
199
+ const npmPrefix = resolveNpmGlobalPrefix(env);
200
+ if (npmPrefix) {
201
+ contexts.push({ packageManager: "npm", prefix: npmPrefix });
202
+ }
203
+ const bunPrefix = resolveBunGlobalPrefix(env);
204
+ if (bunPrefix) {
205
+ contexts.push({ packageManager: "bun", prefix: bunPrefix });
206
+ }
207
+ return contexts;
208
+ };
209
+ export async function attemptStartupUpdate(options) {
210
+ const env = options.env ?? process.env;
211
+ const args = options.args ?? process.argv.slice(2);
212
+ const argv = options.argv ?? process.argv;
213
+ const packageName = options.packageName ?? getPackageName();
214
+ const updateMode = envValue(env, STARTUP_UPDATE_ENV);
215
+ const now = options.now ?? Date.now();
216
+ if (env[SKIP_ENV]) {
217
+ return { status: "skipped", reason: `${SKIP_ENV} is set` };
218
+ }
219
+ if (env.CI || env.NODE_ENV === "test") {
220
+ return { status: "skipped", reason: "test or CI environment" };
221
+ }
222
+ if (OFF_VALUES.has(updateMode)) {
223
+ return { status: "skipped", reason: `${STARTUP_UPDATE_ENV} is disabled` };
224
+ }
225
+ if (!(options.isTty ?? Boolean(process.stdin.isTTY && process.stdout.isTTY))) {
226
+ return { status: "skipped", reason: "non-TTY startup" };
227
+ }
228
+ const argsSkipReason = shouldSkipForArgs(args);
229
+ if (argsSkipReason) {
230
+ return { status: "skipped", reason: argsSkipReason };
231
+ }
232
+ const globalInstallContexts = options.globalInstallContexts ??
233
+ (options.globalPrefix === undefined
234
+ ? resolveGlobalInstallContexts(env)
235
+ : options.globalPrefix
236
+ ? [{ packageManager: "npm", prefix: options.globalPrefix }]
237
+ : []);
238
+ if (globalInstallContexts.length === 0) {
239
+ return {
240
+ status: "skipped",
241
+ reason: options.globalPrefix === null
242
+ ? "npm global prefix unavailable"
243
+ : "global package prefix unavailable",
244
+ };
245
+ }
246
+ const installContext = globalInstallContexts.find((context) => isInstalledPackageEntrypoint(argv[1], packageName, context.prefix));
247
+ if (!installContext) {
248
+ return {
249
+ status: "skipped",
250
+ reason: "not running installed global package",
251
+ };
252
+ }
253
+ const checkTimeoutMs = options.checkTimeoutMs ?? startupCheckTimeoutMsFromEnv(env);
254
+ const updateUrls = resolveUpdateUrls({}, env);
255
+ const checkOptions = {
256
+ timeoutMs: startupSourceTimeoutMs(checkTimeoutMs, updateUrls.length),
257
+ urls: updateUrls,
258
+ };
259
+ const check = await withTimeout((options.checkForUpdateImpl ?? checkForUpdate)(options.currentVersion, checkOptions), checkTimeoutMs, `Startup update check timed out after ${checkTimeoutMs}ms`).catch((error) => ({
260
+ currentVersion: options.currentVersion,
261
+ isUpdateAvailable: false,
262
+ sourceUrl: "",
263
+ error: toErrorMessage(error),
264
+ }));
265
+ if (check.error) {
266
+ return { status: "failed", check, error: check.error };
267
+ }
268
+ if (!check.isUpdateAvailable || !check.latestVersion) {
269
+ return { status: "current", check };
270
+ }
271
+ if (CHECK_ONLY_VALUES.has(updateMode)) {
272
+ return { status: "available", check };
273
+ }
274
+ if (!isInstallableVersion(check.latestVersion)) {
275
+ return {
276
+ status: "failed",
277
+ check,
278
+ error: `Refusing to install unsupported version ${check.latestVersion}`,
279
+ };
280
+ }
281
+ const statePath = resolveStatePath(env, options.statePath);
282
+ if (shouldThrottleAttempt(readState(statePath), check.latestVersion, now, retryMsFromEnv(env))) {
283
+ return { status: "available", check };
284
+ }
285
+ writeState(statePath, {
286
+ version: check.latestVersion,
287
+ lastAttemptAt: now,
288
+ lastStatus: "failed",
289
+ });
290
+ const install = (options.installPackage ?? defaultInstallPackage)(installContext.packageManager, packageName, check.latestVersion);
291
+ if (install.error || install.status !== 0) {
292
+ return {
293
+ status: "failed",
294
+ check,
295
+ error: install.error?.message ??
296
+ `${getGlobalInstallCommand(installContext.packageManager, `${packageName}@${check.latestVersion}`)} exited ${install.status}`,
297
+ };
298
+ }
299
+ writeState(statePath, {
300
+ version: check.latestVersion,
301
+ lastAttemptAt: now,
302
+ lastStatus: "updated",
303
+ });
304
+ if (options.restart === false) {
305
+ return { status: "updated", check };
306
+ }
307
+ const restart = options.restart ??
308
+ (() => {
309
+ const result = spawnSync(process.execPath, argv.slice(1), {
310
+ stdio: "inherit",
311
+ env: { ...env, [SKIP_ENV]: "1" },
312
+ });
313
+ return { status: result.status, error: result.error };
314
+ });
315
+ const restarted = restart();
316
+ if (restarted.error) {
317
+ return { status: "updated", check };
318
+ }
319
+ return { status: "restarted", check, exitCode: restarted.status ?? 0 };
320
+ }
321
+ //# sourceMappingURL=startup-refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-refresh.js","sourceRoot":"","sources":["../../src/update/startup-refresh.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport {\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\trealpathSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport { parseArgs } from \"../cli/args.js\";\nimport { getAgentDir } from \"../config/constants.js\";\nimport {\n\tgetGlobalInstallCommand,\n\tgetPackageName,\n} from \"../package-metadata.js\";\nimport { withTimeout } from \"../utils/async.js\";\nimport {\n\ttype UpdateCheckResult,\n\tcheckForUpdate,\n\tresolveUpdateUrls,\n} from \"./check.js\";\n\nconst SKIP_ENV = \"MAESTRO_SKIP_STARTUP_UPDATE\";\nconst STARTUP_UPDATE_ENV = \"MAESTRO_STARTUP_UPDATE\";\nconst STARTUP_UPDATE_STATE_ENV = \"MAESTRO_STARTUP_UPDATE_STATE\";\nconst STARTUP_UPDATE_TIMEOUT_ENV = \"MAESTRO_STARTUP_UPDATE_TIMEOUT_MS\";\nconst STARTUP_UPDATE_TTL_ENV = \"MAESTRO_STARTUP_UPDATE_RETRY_MS\";\nconst DEFAULT_INSTALL_TIMEOUT_MS = 60_000;\nconst DEFAULT_RETRY_MS = 24 * 60 * 60 * 1_000;\nconst DEFAULT_STARTUP_UPDATE_TIMEOUT_MS = 1_500;\nconst NPM_PREFIX_TIMEOUT_MS = 2_000;\nconst BUN_PREFIX_TIMEOUT_MS = 2_000;\n\ntype PackageManager = \"npm\" | \"bun\";\n\ntype GlobalInstallContext = {\n\tpackageManager: PackageManager;\n\tprefix: string;\n};\n\ntype StartupUpdateState = {\n\tversion?: string;\n\tlastAttemptAt?: number;\n\tlastStatus?: \"failed\" | \"updated\";\n};\n\nexport type StartupUpdateOutcome =\n\t| { status: \"skipped\"; reason: string }\n\t| { status: \"current\"; check: UpdateCheckResult }\n\t| { status: \"available\"; check: UpdateCheckResult }\n\t| { status: \"failed\"; check?: UpdateCheckResult; error: string }\n\t| { status: \"updated\"; check: UpdateCheckResult }\n\t| { status: \"restarted\"; check: UpdateCheckResult; exitCode: number };\n\ntype StartupUpdateOptions = {\n\targs?: string[];\n\targv?: string[];\n\tcurrentVersion: string;\n\tenv?: NodeJS.ProcessEnv;\n\tisTty?: boolean;\n\tnow?: number;\n\tpackageName?: string;\n\tcheckForUpdateImpl?: (\n\t\tcurrentVersion: string,\n\t\toptions?: { timeoutMs?: number; urls?: string[] },\n\t) => Promise<UpdateCheckResult>;\n\tcheckTimeoutMs?: number;\n\tglobalInstallContexts?: GlobalInstallContext[] | null;\n\tglobalPrefix?: string | null;\n\tinstallPackage?: (\n\t\tpackageManager: PackageManager,\n\t\tpackageName: string,\n\t\tversion: string,\n\t) => {\n\t\tstatus: number | null;\n\t\terror?: Error;\n\t};\n\trestart?: false | (() => { status: number | null; error?: Error });\n\tstatePath?: string;\n};\n\nconst OFF_VALUES = new Set([\"0\", \"false\", \"off\", \"skip\", \"disabled\"]);\nconst CHECK_ONLY_VALUES = new Set([\"check\", \"notice\", \"notify\"]);\nconst INSTALLABLE_VERSION = /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/u;\n\nconst envValue = (env: NodeJS.ProcessEnv, key: string): string =>\n\tenv[key]?.trim().toLowerCase() ?? \"\";\n\nconst toErrorMessage = (error: unknown): string => {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\tif (typeof error === \"string\") {\n\t\treturn error;\n\t}\n\treturn \"Unknown error\";\n};\n\nconst shouldSkipForArgs = (args: string[]): string | null => {\n\tif (args[0] === \"a2a\") {\n\t\treturn \"a2a command\";\n\t}\n\tif (args[0] === \"exec\") {\n\t\treturn \"non-interactive command\";\n\t}\n\tif (args[0] === \"update\") {\n\t\treturn \"manual update command\";\n\t}\n\tif (\n\t\targs.includes(\"--version\") ||\n\t\targs.includes(\"-v\") ||\n\t\targs.includes(\"--help\") ||\n\t\targs.includes(\"-h\")\n\t) {\n\t\treturn \"immediate-exit command\";\n\t}\n\tif (\n\t\targs.includes(\"--headless\") ||\n\t\targs.includes(\"--json\") ||\n\t\targs.includes(\"--rpc\") ||\n\t\targs.includes(\"rpc\")\n\t) {\n\t\treturn \"non-interactive command\";\n\t}\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg === \"--mode\" && args[i + 1] === \"headless\") {\n\t\t\treturn \"headless command\";\n\t\t}\n\t\tif (\n\t\t\targ?.startsWith(\"--mode=\") &&\n\t\t\targ.slice(\"--mode=\".length) === \"headless\"\n\t\t) {\n\t\t\treturn \"headless command\";\n\t\t}\n\t}\n\tif (parseArgs(args).messages.length > 0) {\n\t\treturn \"single-shot prompt\";\n\t}\n\treturn null;\n};\n\nexport const isInstalledPackageEntrypoint = (\n\tentrypoint: string | undefined,\n\tpackageName = getPackageName(),\n\tglobalPrefix?: string | null,\n): boolean => {\n\tif (!entrypoint) {\n\t\treturn false;\n\t}\n\tif (isPackageEntrypointPath(entrypoint, packageName, globalPrefix)) {\n\t\treturn true;\n\t}\n\ttry {\n\t\treturn isPackageEntrypointPath(\n\t\t\trealpathSync(entrypoint),\n\t\t\tpackageName,\n\t\t\tglobalPrefix,\n\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst isPackageEntrypointPath = (\n\tentrypoint: string,\n\tpackageName: string,\n\tglobalPrefix?: string | null,\n): boolean => {\n\tconst normalized = entrypoint.replace(/\\\\/g, \"/\");\n\tconst packageEntrypoint = `/node_modules/${packageName}/dist/cli.js`;\n\tif (!normalized.endsWith(packageEntrypoint)) {\n\t\treturn false;\n\t}\n\tif (!globalPrefix) {\n\t\treturn true;\n\t}\n\tconst normalizedPrefix = globalPrefix\n\t\t.replace(/\\\\/g, \"/\")\n\t\t.replace(/\\/+$/u, \"\");\n\tconst normalizedPrefixes = new Set([normalizedPrefix]);\n\ttry {\n\t\tnormalizedPrefixes.add(\n\t\t\trealpathSync(globalPrefix).replace(/\\\\/g, \"/\").replace(/\\/+$/u, \"\"),\n\t\t);\n\t} catch {\n\t\t// A missing prefix will fail the exact path checks below.\n\t}\n\tfor (const prefix of normalizedPrefixes) {\n\t\tif (\n\t\t\tnormalized === `${prefix}/lib/node_modules/${packageName}/dist/cli.js` ||\n\t\t\tnormalized === `${prefix}/node_modules/${packageName}/dist/cli.js`\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nconst resolveStatePath = (\n\tenv: NodeJS.ProcessEnv = process.env,\n\toverride?: string,\n): string => {\n\tif (override) {\n\t\treturn override;\n\t}\n\tif (env[STARTUP_UPDATE_STATE_ENV]) {\n\t\treturn resolve(env[STARTUP_UPDATE_STATE_ENV]);\n\t}\n\treturn resolve(getAgentDir(), \"startup-update-state.json\");\n};\n\nconst readState = (path: string): StartupUpdateState | null => {\n\tif (!existsSync(path)) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn JSON.parse(readFileSync(path, \"utf-8\")) as StartupUpdateState;\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nconst writeState = (path: string, state: StartupUpdateState): void => {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, JSON.stringify(state, null, 2), \"utf-8\");\n};\n\nconst retryMsFromEnv = (env: NodeJS.ProcessEnv): number => {\n\tconst parsed = Number.parseInt(env[STARTUP_UPDATE_TTL_ENV] ?? \"\", 10);\n\tif (Number.isFinite(parsed) && parsed >= 0) {\n\t\treturn parsed;\n\t}\n\treturn DEFAULT_RETRY_MS;\n};\n\nconst startupCheckTimeoutMsFromEnv = (env: NodeJS.ProcessEnv): number => {\n\tconst parsed = Number.parseInt(env[STARTUP_UPDATE_TIMEOUT_ENV] ?? \"\", 10);\n\tif (Number.isFinite(parsed) && parsed > 0) {\n\t\treturn parsed;\n\t}\n\treturn DEFAULT_STARTUP_UPDATE_TIMEOUT_MS;\n};\n\nconst startupSourceTimeoutMs = (\n\ttotalTimeoutMs: number,\n\tsourceCount: number,\n): number => Math.max(1, Math.floor(totalTimeoutMs / Math.max(1, sourceCount)));\n\nconst shouldThrottleAttempt = (\n\tstate: StartupUpdateState | null,\n\tversion: string,\n\tnow: number,\n\tretryMs: number,\n): boolean => {\n\tif (\n\t\t!state ||\n\t\tstate.version !== version ||\n\t\ttypeof state.lastAttemptAt !== \"number\" ||\n\t\tstate.lastStatus !== \"failed\"\n\t) {\n\t\treturn false;\n\t}\n\treturn now - state.lastAttemptAt < retryMs;\n};\n\nconst isInstallableVersion = (version: string): boolean =>\n\tINSTALLABLE_VERSION.test(version);\n\nconst defaultInstallPackage = (\n\tpackageManager: PackageManager,\n\tpackageName: string,\n\tversion: string,\n) => {\n\tconst result = spawnSync(\n\t\tpackageManager,\n\t\t[\"install\", \"-g\", `${packageName}@${version}`],\n\t\t{\n\t\t\tencoding: \"utf-8\",\n\t\t\tstdio: \"pipe\",\n\t\t\ttimeout: DEFAULT_INSTALL_TIMEOUT_MS,\n\t\t},\n\t);\n\treturn { status: result.status, error: result.error };\n};\n\nconst resolveNpmGlobalPrefix = (\n\tenv: NodeJS.ProcessEnv = process.env,\n): string | null => {\n\tconst result = spawnSync(\"npm\", [\"prefix\", \"-g\"], {\n\t\tencoding: \"utf-8\",\n\t\tenv,\n\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\ttimeout: NPM_PREFIX_TIMEOUT_MS,\n\t});\n\tif (result.error || result.status !== 0) {\n\t\treturn null;\n\t}\n\tconst prefix = result.stdout.trim();\n\treturn prefix.length > 0 ? prefix : null;\n};\n\nconst resolveBunGlobalPrefix = (\n\tenv: NodeJS.ProcessEnv = process.env,\n): string | null => {\n\tconst result = spawnSync(\"bun\", [\"pm\", \"bin\", \"-g\"], {\n\t\tencoding: \"utf-8\",\n\t\tenv,\n\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\ttimeout: BUN_PREFIX_TIMEOUT_MS,\n\t});\n\tif (result.error || result.status !== 0) {\n\t\treturn null;\n\t}\n\tconst binDir = result.stdout.trim();\n\tif (!binDir) {\n\t\treturn null;\n\t}\n\tconst bunHome = basename(binDir) === \"bin\" ? dirname(binDir) : binDir;\n\treturn join(bunHome, \"install\", \"global\");\n};\n\nconst resolveGlobalInstallContexts = (\n\tenv: NodeJS.ProcessEnv = process.env,\n): GlobalInstallContext[] => {\n\tconst contexts: GlobalInstallContext[] = [];\n\tconst npmPrefix = resolveNpmGlobalPrefix(env);\n\tif (npmPrefix) {\n\t\tcontexts.push({ packageManager: \"npm\", prefix: npmPrefix });\n\t}\n\tconst bunPrefix = resolveBunGlobalPrefix(env);\n\tif (bunPrefix) {\n\t\tcontexts.push({ packageManager: \"bun\", prefix: bunPrefix });\n\t}\n\treturn contexts;\n};\n\nexport async function attemptStartupUpdate(\n\toptions: StartupUpdateOptions,\n): Promise<StartupUpdateOutcome> {\n\tconst env = options.env ?? process.env;\n\tconst args = options.args ?? process.argv.slice(2);\n\tconst argv = options.argv ?? process.argv;\n\tconst packageName = options.packageName ?? getPackageName();\n\tconst updateMode = envValue(env, STARTUP_UPDATE_ENV);\n\tconst now = options.now ?? Date.now();\n\n\tif (env[SKIP_ENV]) {\n\t\treturn { status: \"skipped\", reason: `${SKIP_ENV} is set` };\n\t}\n\tif (env.CI || env.NODE_ENV === \"test\") {\n\t\treturn { status: \"skipped\", reason: \"test or CI environment\" };\n\t}\n\tif (OFF_VALUES.has(updateMode)) {\n\t\treturn { status: \"skipped\", reason: `${STARTUP_UPDATE_ENV} is disabled` };\n\t}\n\tif (\n\t\t!(options.isTty ?? Boolean(process.stdin.isTTY && process.stdout.isTTY))\n\t) {\n\t\treturn { status: \"skipped\", reason: \"non-TTY startup\" };\n\t}\n\tconst argsSkipReason = shouldSkipForArgs(args);\n\tif (argsSkipReason) {\n\t\treturn { status: \"skipped\", reason: argsSkipReason };\n\t}\n\tconst globalInstallContexts =\n\t\toptions.globalInstallContexts ??\n\t\t(options.globalPrefix === undefined\n\t\t\t? resolveGlobalInstallContexts(env)\n\t\t\t: options.globalPrefix\n\t\t\t\t? [{ packageManager: \"npm\" as const, prefix: options.globalPrefix }]\n\t\t\t\t: []);\n\tif (globalInstallContexts.length === 0) {\n\t\treturn {\n\t\t\tstatus: \"skipped\",\n\t\t\treason:\n\t\t\t\toptions.globalPrefix === null\n\t\t\t\t\t? \"npm global prefix unavailable\"\n\t\t\t\t\t: \"global package prefix unavailable\",\n\t\t};\n\t}\n\tconst installContext = globalInstallContexts.find((context) =>\n\t\tisInstalledPackageEntrypoint(argv[1], packageName, context.prefix),\n\t);\n\tif (!installContext) {\n\t\treturn {\n\t\t\tstatus: \"skipped\",\n\t\t\treason: \"not running installed global package\",\n\t\t};\n\t}\n\n\tconst checkTimeoutMs =\n\t\toptions.checkTimeoutMs ?? startupCheckTimeoutMsFromEnv(env);\n\tconst updateUrls = resolveUpdateUrls({}, env);\n\tconst checkOptions = {\n\t\ttimeoutMs: startupSourceTimeoutMs(checkTimeoutMs, updateUrls.length),\n\t\turls: updateUrls,\n\t};\n\tconst check = await withTimeout(\n\t\t(options.checkForUpdateImpl ?? checkForUpdate)(\n\t\t\toptions.currentVersion,\n\t\t\tcheckOptions,\n\t\t),\n\t\tcheckTimeoutMs,\n\t\t`Startup update check timed out after ${checkTimeoutMs}ms`,\n\t).catch(\n\t\t(error): UpdateCheckResult => ({\n\t\t\tcurrentVersion: options.currentVersion,\n\t\t\tisUpdateAvailable: false,\n\t\t\tsourceUrl: \"\",\n\t\t\terror: toErrorMessage(error),\n\t\t}),\n\t);\n\tif (check.error) {\n\t\treturn { status: \"failed\", check, error: check.error };\n\t}\n\tif (!check.isUpdateAvailable || !check.latestVersion) {\n\t\treturn { status: \"current\", check };\n\t}\n\tif (CHECK_ONLY_VALUES.has(updateMode)) {\n\t\treturn { status: \"available\", check };\n\t}\n\tif (!isInstallableVersion(check.latestVersion)) {\n\t\treturn {\n\t\t\tstatus: \"failed\",\n\t\t\tcheck,\n\t\t\terror: `Refusing to install unsupported version ${check.latestVersion}`,\n\t\t};\n\t}\n\n\tconst statePath = resolveStatePath(env, options.statePath);\n\tif (\n\t\tshouldThrottleAttempt(\n\t\t\treadState(statePath),\n\t\t\tcheck.latestVersion,\n\t\t\tnow,\n\t\t\tretryMsFromEnv(env),\n\t\t)\n\t) {\n\t\treturn { status: \"available\", check };\n\t}\n\n\twriteState(statePath, {\n\t\tversion: check.latestVersion,\n\t\tlastAttemptAt: now,\n\t\tlastStatus: \"failed\",\n\t});\n\tconst install = (options.installPackage ?? defaultInstallPackage)(\n\t\tinstallContext.packageManager,\n\t\tpackageName,\n\t\tcheck.latestVersion,\n\t);\n\tif (install.error || install.status !== 0) {\n\t\treturn {\n\t\t\tstatus: \"failed\",\n\t\t\tcheck,\n\t\t\terror:\n\t\t\t\tinstall.error?.message ??\n\t\t\t\t`${getGlobalInstallCommand(installContext.packageManager, `${packageName}@${check.latestVersion}`)} exited ${install.status}`,\n\t\t};\n\t}\n\n\twriteState(statePath, {\n\t\tversion: check.latestVersion,\n\t\tlastAttemptAt: now,\n\t\tlastStatus: \"updated\",\n\t});\n\n\tif (options.restart === false) {\n\t\treturn { status: \"updated\", check };\n\t}\n\n\tconst restart =\n\t\toptions.restart ??\n\t\t(() => {\n\t\t\tconst result = spawnSync(process.execPath, argv.slice(1), {\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tenv: { ...env, [SKIP_ENV]: \"1\" },\n\t\t\t});\n\t\t\treturn { status: result.status, error: result.error };\n\t\t});\n\tconst restarted = restart();\n\tif (restarted.error) {\n\t\treturn { status: \"updated\", check };\n\t}\n\treturn { status: \"restarted\", check, exitCode: restarted.status ?? 0 };\n}\n"]}
package/dist/version.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "0.10.46",
3
- "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.46 is now available."
2
+ "version": "0.10.48",
3
+ "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.48 is now available."
4
4
  }