@openacp/cli 2026.403.7 → 2026.403.8
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.
- package/dist/cli.js +156 -58
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.js +117 -31
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -11411,7 +11411,7 @@ var BYPASS_KEYWORDS;
|
|
|
11411
11411
|
var init_bypass_detection = __esm({
|
|
11412
11412
|
"src/core/utils/bypass-detection.ts"() {
|
|
11413
11413
|
"use strict";
|
|
11414
|
-
BYPASS_KEYWORDS = ["bypass", "dangerous", "auto_accept"];
|
|
11414
|
+
BYPASS_KEYWORDS = ["bypass", "dangerous", "auto_accept", "yolo"];
|
|
11415
11415
|
}
|
|
11416
11416
|
});
|
|
11417
11417
|
|
|
@@ -18884,12 +18884,18 @@ ${stderr}`
|
|
|
18884
18884
|
cwd: workingDirectory,
|
|
18885
18885
|
mcpServers: resolvedMcp
|
|
18886
18886
|
});
|
|
18887
|
+
log29.info(response, "newSession response");
|
|
18887
18888
|
instance.sessionId = response.sessionId;
|
|
18888
18889
|
instance.initialSessionResponse = response;
|
|
18889
18890
|
instance.debugTracer = createDebugTracer(response.sessionId, workingDirectory);
|
|
18890
18891
|
instance.setupCrashDetection();
|
|
18891
18892
|
log29.info(
|
|
18892
|
-
{
|
|
18893
|
+
{
|
|
18894
|
+
sessionId: response.sessionId,
|
|
18895
|
+
durationMs: Date.now() - spawnStart,
|
|
18896
|
+
configOptions: response.configOptions ?? [],
|
|
18897
|
+
agentCapabilities: instance.agentCapabilities ?? null
|
|
18898
|
+
},
|
|
18893
18899
|
"Agent spawn complete"
|
|
18894
18900
|
);
|
|
18895
18901
|
return instance;
|
|
@@ -18901,24 +18907,47 @@ ${stderr}`
|
|
|
18901
18907
|
agentDef,
|
|
18902
18908
|
workingDirectory
|
|
18903
18909
|
);
|
|
18910
|
+
const resolvedMcp = _AgentInstance.mcpManager.resolve(mcpServers);
|
|
18904
18911
|
try {
|
|
18905
|
-
|
|
18906
|
-
|
|
18907
|
-
|
|
18908
|
-
|
|
18909
|
-
|
|
18910
|
-
|
|
18911
|
-
|
|
18912
|
-
|
|
18913
|
-
|
|
18914
|
-
|
|
18915
|
-
|
|
18912
|
+
if (instance.agentCapabilities?.loadSession) {
|
|
18913
|
+
const response = await instance.connection.loadSession({
|
|
18914
|
+
sessionId: agentSessionId,
|
|
18915
|
+
cwd: workingDirectory,
|
|
18916
|
+
mcpServers: resolvedMcp
|
|
18917
|
+
});
|
|
18918
|
+
instance.sessionId = agentSessionId;
|
|
18919
|
+
instance.initialSessionResponse = response;
|
|
18920
|
+
instance.debugTracer = createDebugTracer(agentSessionId, workingDirectory);
|
|
18921
|
+
log29.info(
|
|
18922
|
+
{
|
|
18923
|
+
sessionId: agentSessionId,
|
|
18924
|
+
durationMs: Date.now() - spawnStart,
|
|
18925
|
+
agentCapabilities: instance.agentCapabilities ?? null
|
|
18926
|
+
},
|
|
18927
|
+
"Agent load complete"
|
|
18928
|
+
);
|
|
18929
|
+
} else {
|
|
18930
|
+
const response = await instance.connection.unstable_resumeSession({
|
|
18931
|
+
sessionId: agentSessionId,
|
|
18932
|
+
cwd: workingDirectory
|
|
18933
|
+
});
|
|
18934
|
+
instance.sessionId = response.sessionId;
|
|
18935
|
+
instance.initialSessionResponse = response;
|
|
18936
|
+
instance.debugTracer = createDebugTracer(response.sessionId, workingDirectory);
|
|
18937
|
+
log29.info(
|
|
18938
|
+
{
|
|
18939
|
+
sessionId: response.sessionId,
|
|
18940
|
+
durationMs: Date.now() - spawnStart,
|
|
18941
|
+
agentCapabilities: instance.agentCapabilities ?? null
|
|
18942
|
+
},
|
|
18943
|
+
"Agent resume complete"
|
|
18944
|
+
);
|
|
18945
|
+
}
|
|
18916
18946
|
} catch (err) {
|
|
18917
18947
|
log29.warn(
|
|
18918
18948
|
{ err, agentSessionId },
|
|
18919
18949
|
"Resume failed, falling back to new session"
|
|
18920
18950
|
);
|
|
18921
|
-
const resolvedMcp = _AgentInstance.mcpManager.resolve(mcpServers);
|
|
18922
18951
|
const response = await instance.connection.newSession({
|
|
18923
18952
|
cwd: workingDirectory,
|
|
18924
18953
|
mcpServers: resolvedMcp
|
|
@@ -19149,11 +19178,31 @@ ${stderr}`
|
|
|
19149
19178
|
}
|
|
19150
19179
|
// ── New ACP methods ──────────────────────────────────────────────────
|
|
19151
19180
|
async setConfigOption(configId, value) {
|
|
19152
|
-
|
|
19153
|
-
|
|
19154
|
-
|
|
19155
|
-
|
|
19156
|
-
|
|
19181
|
+
try {
|
|
19182
|
+
return await this.connection.setSessionConfigOption({
|
|
19183
|
+
sessionId: this.sessionId,
|
|
19184
|
+
configId,
|
|
19185
|
+
...value
|
|
19186
|
+
});
|
|
19187
|
+
} catch (err) {
|
|
19188
|
+
if (typeof err === "object" && err !== null && err.code === -32601) {
|
|
19189
|
+
if (configId === "mode" && value.type === "select") {
|
|
19190
|
+
await this.connection.setSessionMode({
|
|
19191
|
+
sessionId: this.sessionId,
|
|
19192
|
+
modeId: value.value
|
|
19193
|
+
});
|
|
19194
|
+
return { configOptions: [] };
|
|
19195
|
+
}
|
|
19196
|
+
if (configId === "model" && value.type === "select") {
|
|
19197
|
+
await this.connection.unstable_setSessionModel({
|
|
19198
|
+
sessionId: this.sessionId,
|
|
19199
|
+
modelId: value.value
|
|
19200
|
+
});
|
|
19201
|
+
return { configOptions: [] };
|
|
19202
|
+
}
|
|
19203
|
+
}
|
|
19204
|
+
throw err;
|
|
19205
|
+
}
|
|
19157
19206
|
}
|
|
19158
19207
|
async listSessions(cwd, cursor) {
|
|
19159
19208
|
return await this.connection.listSessions({
|
|
@@ -19499,6 +19548,7 @@ Additionally, include a [TTS]...[/TTS] block with a spoken-friendly summary of y
|
|
|
19499
19548
|
(err) => {
|
|
19500
19549
|
this.log.error({ err }, "Prompt execution failed");
|
|
19501
19550
|
const message = err instanceof Error ? err.message : String(err);
|
|
19551
|
+
this.fail(message);
|
|
19502
19552
|
this.emit("agent_event", { type: "error", message: `Prompt execution failed: ${message}` });
|
|
19503
19553
|
}
|
|
19504
19554
|
);
|
|
@@ -19753,6 +19803,42 @@ ${result.text}` : result.text;
|
|
|
19753
19803
|
setAgentCapabilities(caps) {
|
|
19754
19804
|
this.agentCapabilities = caps;
|
|
19755
19805
|
}
|
|
19806
|
+
/**
|
|
19807
|
+
* Hydrate configOptions and agentCapabilities from a spawn response.
|
|
19808
|
+
* Handles both the native configOptions format and legacy modes/models fields.
|
|
19809
|
+
*/
|
|
19810
|
+
applySpawnResponse(resp, caps) {
|
|
19811
|
+
if (caps) this.agentCapabilities = caps;
|
|
19812
|
+
if (!resp) return;
|
|
19813
|
+
if (resp.configOptions) {
|
|
19814
|
+
this.configOptions = resp.configOptions;
|
|
19815
|
+
return;
|
|
19816
|
+
}
|
|
19817
|
+
const legacyOptions = [];
|
|
19818
|
+
if (resp.modes) {
|
|
19819
|
+
const m = resp.modes;
|
|
19820
|
+
legacyOptions.push({
|
|
19821
|
+
id: "mode",
|
|
19822
|
+
name: "Mode",
|
|
19823
|
+
category: "mode",
|
|
19824
|
+
type: "select",
|
|
19825
|
+
currentValue: m.currentModeId,
|
|
19826
|
+
options: m.availableModes.map((x) => ({ value: x.id, name: x.name, description: x.description }))
|
|
19827
|
+
});
|
|
19828
|
+
}
|
|
19829
|
+
if (resp.models) {
|
|
19830
|
+
const m = resp.models;
|
|
19831
|
+
legacyOptions.push({
|
|
19832
|
+
id: "model",
|
|
19833
|
+
name: "Model",
|
|
19834
|
+
category: "model",
|
|
19835
|
+
type: "select",
|
|
19836
|
+
currentValue: m.currentModelId,
|
|
19837
|
+
options: m.availableModels.map((x) => ({ value: x.modelId ?? x.id, name: x.name, description: x.description }))
|
|
19838
|
+
});
|
|
19839
|
+
}
|
|
19840
|
+
if (legacyOptions.length > 0) this.configOptions = legacyOptions;
|
|
19841
|
+
}
|
|
19756
19842
|
getConfigOption(id) {
|
|
19757
19843
|
return this.configOptions.find((o) => o.id === id);
|
|
19758
19844
|
}
|
|
@@ -19772,8 +19858,13 @@ ${result.text}` : result.text;
|
|
|
19772
19858
|
/** Send a config option change to the agent and update local state from the response. */
|
|
19773
19859
|
async setConfigOption(configId, value) {
|
|
19774
19860
|
const response = await this.agentInstance.setConfigOption(configId, value);
|
|
19775
|
-
if (response.configOptions) {
|
|
19861
|
+
if (response.configOptions && response.configOptions.length > 0) {
|
|
19776
19862
|
await this.updateConfigOptions(response.configOptions);
|
|
19863
|
+
} else if (value.type === "select") {
|
|
19864
|
+
const updated = this.configOptions.map(
|
|
19865
|
+
(o) => o.id === configId && o.type === "select" ? { ...o, currentValue: value.value } : o
|
|
19866
|
+
);
|
|
19867
|
+
await this.updateConfigOptions(updated);
|
|
19777
19868
|
}
|
|
19778
19869
|
}
|
|
19779
19870
|
async updateConfigOptions(options) {
|
|
@@ -19837,6 +19928,8 @@ ${result.text}` : result.text;
|
|
|
19837
19928
|
this.promptCount = 0;
|
|
19838
19929
|
this.agentCapabilities = void 0;
|
|
19839
19930
|
this.configOptions = [];
|
|
19931
|
+
this.latestCommands = null;
|
|
19932
|
+
this.applySpawnResponse(newAgent.initialSessionResponse, newAgent.agentCapabilities);
|
|
19840
19933
|
this.log.info({ from: this.agentSwitchHistory.at(-1).agentName, to: agentName }, "Agent switched");
|
|
19841
19934
|
}
|
|
19842
19935
|
async destroy() {
|
|
@@ -20116,6 +20209,9 @@ var init_session_bridge = __esm({
|
|
|
20116
20209
|
if (this.session.latestCommands !== null) {
|
|
20117
20210
|
this.session.emit("agent_event", { type: "commands_update", commands: this.session.latestCommands });
|
|
20118
20211
|
}
|
|
20212
|
+
if (this.session.configOptions.length > 0) {
|
|
20213
|
+
this.session.emit("agent_event", { type: "config_option_update", options: this.session.configOptions });
|
|
20214
|
+
}
|
|
20119
20215
|
}
|
|
20120
20216
|
disconnect() {
|
|
20121
20217
|
if (!this.connected) return;
|
|
@@ -21057,17 +21153,7 @@ var init_session_factory = __esm({
|
|
|
21057
21153
|
if (createParams.initialName) {
|
|
21058
21154
|
session.name = createParams.initialName;
|
|
21059
21155
|
}
|
|
21060
|
-
|
|
21061
|
-
if (resp) {
|
|
21062
|
-
if (resp.configOptions) {
|
|
21063
|
-
session.setInitialConfigOptions(resp.configOptions);
|
|
21064
|
-
}
|
|
21065
|
-
if (agentInstance.agentCapabilities) {
|
|
21066
|
-
session.setAgentCapabilities(agentInstance.agentCapabilities);
|
|
21067
|
-
}
|
|
21068
|
-
} else if (agentInstance.agentCapabilities) {
|
|
21069
|
-
session.setAgentCapabilities(agentInstance.agentCapabilities);
|
|
21070
|
-
}
|
|
21156
|
+
session.applySpawnResponse(agentInstance.initialSessionResponse, agentInstance.agentCapabilities);
|
|
21071
21157
|
this.sessionManager.registerSession(session);
|
|
21072
21158
|
this.eventBus.emit("session:created", {
|
|
21073
21159
|
sessionId: session.id,
|
|
@@ -22155,7 +22241,7 @@ function createPluginContext(opts) {
|
|
|
22155
22241
|
}
|
|
22156
22242
|
};
|
|
22157
22243
|
const baseLog = opts.log ?? noopLog;
|
|
22158
|
-
const
|
|
22244
|
+
const log45 = typeof baseLog.child === "function" ? baseLog.child({ plugin: pluginName }) : baseLog;
|
|
22159
22245
|
const storageImpl = new PluginStorageImpl(storagePath);
|
|
22160
22246
|
const storage = {
|
|
22161
22247
|
async get(key) {
|
|
@@ -22182,7 +22268,7 @@ function createPluginContext(opts) {
|
|
|
22182
22268
|
const ctx = {
|
|
22183
22269
|
pluginName,
|
|
22184
22270
|
pluginConfig,
|
|
22185
|
-
log:
|
|
22271
|
+
log: log45,
|
|
22186
22272
|
storage,
|
|
22187
22273
|
on(event, handler) {
|
|
22188
22274
|
requirePermission(permissions, "events:read", "on()");
|
|
@@ -22217,7 +22303,7 @@ function createPluginContext(opts) {
|
|
|
22217
22303
|
const registry = serviceRegistry.get("command-registry");
|
|
22218
22304
|
if (registry && typeof registry.register === "function") {
|
|
22219
22305
|
registry.register(def, pluginName);
|
|
22220
|
-
|
|
22306
|
+
log45.debug(`Command '/${def.name}' registered`);
|
|
22221
22307
|
}
|
|
22222
22308
|
},
|
|
22223
22309
|
async sendMessage(_sessionId, _content) {
|
|
@@ -24284,13 +24370,18 @@ function registerCategoryCommand(registry, core, category, commandName) {
|
|
|
24284
24370
|
configOption.id,
|
|
24285
24371
|
{ type: "select", value: raw }
|
|
24286
24372
|
);
|
|
24287
|
-
if (response.configOptions) {
|
|
24373
|
+
if (response.configOptions && response.configOptions.length > 0) {
|
|
24288
24374
|
session.configOptions = response.configOptions;
|
|
24375
|
+
} else {
|
|
24376
|
+
session.configOptions = session.configOptions.map(
|
|
24377
|
+
(o) => o.id === configOption.id && o.type === "select" ? { ...o, currentValue: raw } : o
|
|
24378
|
+
);
|
|
24289
24379
|
}
|
|
24290
24380
|
core.eventBus.emit("session:configChanged", { sessionId: session.id });
|
|
24291
24381
|
return { type: "text", text: labels.successMsg(match.name, configOption.name) };
|
|
24292
24382
|
} catch (err) {
|
|
24293
|
-
|
|
24383
|
+
log41.error({ err, commandName, configId: configOption.id }, "setConfigOption failed");
|
|
24384
|
+
const msg = err instanceof Error ? err.message : typeof err === "object" && err !== null && typeof err.message === "string" ? err.message : String(err);
|
|
24294
24385
|
return { type: "error", message: `Could not change ${commandName}: ${msg}` };
|
|
24295
24386
|
}
|
|
24296
24387
|
}
|
|
@@ -24351,8 +24442,12 @@ function registerDangerousCommand(registry, core) {
|
|
|
24351
24442
|
modeConfig.id,
|
|
24352
24443
|
{ type: "select", value: targetValue }
|
|
24353
24444
|
);
|
|
24354
|
-
if (response.configOptions) {
|
|
24445
|
+
if (response.configOptions && response.configOptions.length > 0) {
|
|
24355
24446
|
session.configOptions = response.configOptions;
|
|
24447
|
+
} else {
|
|
24448
|
+
session.configOptions = session.configOptions.map(
|
|
24449
|
+
(o) => o.id === modeConfig.id && o.type === "select" ? { ...o, currentValue: targetValue } : o
|
|
24450
|
+
);
|
|
24356
24451
|
}
|
|
24357
24452
|
core.eventBus.emit("session:configChanged", { sessionId: session.id });
|
|
24358
24453
|
return {
|
|
@@ -24360,7 +24455,8 @@ function registerDangerousCommand(registry, core) {
|
|
|
24360
24455
|
text: wantOn ? "\u2620\uFE0F **Bypass Permissions enabled** \u2014 all permission requests will be auto-approved. The agent can run any action without asking." : "\u{1F510} **Bypass Permissions disabled** \u2014 you will be asked to approve risky actions."
|
|
24361
24456
|
};
|
|
24362
24457
|
} catch (err) {
|
|
24363
|
-
|
|
24458
|
+
log41.error({ err }, "setConfigOption failed (bypass toggle)");
|
|
24459
|
+
const msg = err instanceof Error ? err.message : typeof err === "object" && err !== null && typeof err.message === "string" ? err.message : String(err);
|
|
24364
24460
|
return { type: "error", message: `Could not toggle bypass: ${msg}` };
|
|
24365
24461
|
}
|
|
24366
24462
|
}
|
|
@@ -24383,12 +24479,14 @@ function registerConfigCommands(registry, _core) {
|
|
|
24383
24479
|
registerCategoryCommand(registry, core, "thought_level", "thought");
|
|
24384
24480
|
registerDangerousCommand(registry, core);
|
|
24385
24481
|
}
|
|
24386
|
-
var CATEGORY_LABELS;
|
|
24482
|
+
var log41, CATEGORY_LABELS;
|
|
24387
24483
|
var init_config6 = __esm({
|
|
24388
24484
|
"src/core/commands/config.ts"() {
|
|
24389
24485
|
"use strict";
|
|
24486
|
+
init_log();
|
|
24390
24487
|
init_bypass_detection();
|
|
24391
24488
|
init_bypass_detection();
|
|
24489
|
+
log41 = createChildLogger({ module: "commands/config" });
|
|
24392
24490
|
CATEGORY_LABELS = {
|
|
24393
24491
|
mode: {
|
|
24394
24492
|
menuTitle: (cur) => `Choose session mode (current: ${cur})`,
|
|
@@ -24781,7 +24879,7 @@ function installAutoStart(logDir2) {
|
|
|
24781
24879
|
fs46.mkdirSync(dir, { recursive: true });
|
|
24782
24880
|
fs46.writeFileSync(LAUNCHD_PLIST_PATH, plist);
|
|
24783
24881
|
execFileSync7("launchctl", ["load", LAUNCHD_PLIST_PATH], { stdio: "pipe" });
|
|
24784
|
-
|
|
24882
|
+
log42.info("LaunchAgent installed");
|
|
24785
24883
|
return { success: true };
|
|
24786
24884
|
}
|
|
24787
24885
|
if (process.platform === "linux") {
|
|
@@ -24791,13 +24889,13 @@ function installAutoStart(logDir2) {
|
|
|
24791
24889
|
fs46.writeFileSync(SYSTEMD_SERVICE_PATH, unit);
|
|
24792
24890
|
execFileSync7("systemctl", ["--user", "daemon-reload"], { stdio: "pipe" });
|
|
24793
24891
|
execFileSync7("systemctl", ["--user", "enable", "openacp"], { stdio: "pipe" });
|
|
24794
|
-
|
|
24892
|
+
log42.info("systemd user service installed");
|
|
24795
24893
|
return { success: true };
|
|
24796
24894
|
}
|
|
24797
24895
|
return { success: false, error: "Unsupported platform" };
|
|
24798
24896
|
} catch (e) {
|
|
24799
24897
|
const msg = e.message;
|
|
24800
|
-
|
|
24898
|
+
log42.error({ err: msg }, "Failed to install auto-start");
|
|
24801
24899
|
return { success: false, error: msg };
|
|
24802
24900
|
}
|
|
24803
24901
|
}
|
|
@@ -24813,7 +24911,7 @@ function uninstallAutoStart() {
|
|
|
24813
24911
|
} catch {
|
|
24814
24912
|
}
|
|
24815
24913
|
fs46.unlinkSync(LAUNCHD_PLIST_PATH);
|
|
24816
|
-
|
|
24914
|
+
log42.info("LaunchAgent removed");
|
|
24817
24915
|
}
|
|
24818
24916
|
return { success: true };
|
|
24819
24917
|
}
|
|
@@ -24825,14 +24923,14 @@ function uninstallAutoStart() {
|
|
|
24825
24923
|
}
|
|
24826
24924
|
fs46.unlinkSync(SYSTEMD_SERVICE_PATH);
|
|
24827
24925
|
execFileSync7("systemctl", ["--user", "daemon-reload"], { stdio: "pipe" });
|
|
24828
|
-
|
|
24926
|
+
log42.info("systemd user service removed");
|
|
24829
24927
|
}
|
|
24830
24928
|
return { success: true };
|
|
24831
24929
|
}
|
|
24832
24930
|
return { success: false, error: "Unsupported platform" };
|
|
24833
24931
|
} catch (e) {
|
|
24834
24932
|
const msg = e.message;
|
|
24835
|
-
|
|
24933
|
+
log42.error({ err: msg }, "Failed to uninstall auto-start");
|
|
24836
24934
|
return { success: false, error: msg };
|
|
24837
24935
|
}
|
|
24838
24936
|
}
|
|
@@ -24845,12 +24943,12 @@ function isAutoStartInstalled() {
|
|
|
24845
24943
|
}
|
|
24846
24944
|
return false;
|
|
24847
24945
|
}
|
|
24848
|
-
var
|
|
24946
|
+
var log42, LAUNCHD_LABEL, LAUNCHD_PLIST_PATH, SYSTEMD_SERVICE_PATH;
|
|
24849
24947
|
var init_autostart = __esm({
|
|
24850
24948
|
"src/cli/autostart.ts"() {
|
|
24851
24949
|
"use strict";
|
|
24852
24950
|
init_log();
|
|
24853
|
-
|
|
24951
|
+
log42 = createChildLogger({ module: "autostart" });
|
|
24854
24952
|
LAUNCHD_LABEL = "com.openacp.daemon";
|
|
24855
24953
|
LAUNCHD_PLIST_PATH = path53.join(os24.homedir(), "Library", "LaunchAgents", `${LAUNCHD_LABEL}.plist`);
|
|
24856
24954
|
SYSTEMD_SERVICE_PATH = path53.join(os24.homedir(), ".config", "systemd", "user", "openacp.service");
|
|
@@ -24953,7 +25051,7 @@ async function setupIntegrations() {
|
|
|
24953
25051
|
if (integration) {
|
|
24954
25052
|
for (const item of integration.items) {
|
|
24955
25053
|
const result = await item.install();
|
|
24956
|
-
for (const
|
|
25054
|
+
for (const log45 of result.logs) console.log(` ${log45}`);
|
|
24957
25055
|
}
|
|
24958
25056
|
}
|
|
24959
25057
|
console.log("Claude CLI integration installed.\n");
|
|
@@ -25911,14 +26009,14 @@ async function runPostUpgradeChecks(config) {
|
|
|
25911
26009
|
const { ensureCloudflared: ensureCloudflared2 } = await Promise.resolve().then(() => (init_install_cloudflared(), install_cloudflared_exports));
|
|
25912
26010
|
await ensureCloudflared2();
|
|
25913
26011
|
} catch (err) {
|
|
25914
|
-
|
|
26012
|
+
log44.warn(
|
|
25915
26013
|
{ err: err.message },
|
|
25916
26014
|
"Could not install cloudflared. Tunnel may not work."
|
|
25917
26015
|
);
|
|
25918
26016
|
}
|
|
25919
26017
|
} else {
|
|
25920
26018
|
if (!commandExists(config.tunnel.provider)) {
|
|
25921
|
-
|
|
26019
|
+
log44.warn(
|
|
25922
26020
|
`Tunnel provider "${config.tunnel.provider}" is not installed. Install it or switch to cloudflare (free, auto-installed).`
|
|
25923
26021
|
);
|
|
25924
26022
|
}
|
|
@@ -25930,7 +26028,7 @@ async function runPostUpgradeChecks(config) {
|
|
|
25930
26028
|
if (integration) {
|
|
25931
26029
|
const allInstalled = integration.items.every((item) => item.isInstalled());
|
|
25932
26030
|
if (!allInstalled) {
|
|
25933
|
-
|
|
26031
|
+
log44.info(
|
|
25934
26032
|
'Claude CLI integration not installed. Run "openacp integrate claude" for session transfer + tunnel skill.'
|
|
25935
26033
|
);
|
|
25936
26034
|
}
|
|
@@ -25940,7 +26038,7 @@ async function runPostUpgradeChecks(config) {
|
|
|
25940
26038
|
const { ensureJq: ensureJq2 } = await Promise.resolve().then(() => (init_install_jq(), install_jq_exports));
|
|
25941
26039
|
await ensureJq2();
|
|
25942
26040
|
} catch (err) {
|
|
25943
|
-
|
|
26041
|
+
log44.warn(
|
|
25944
26042
|
{ err: err.message },
|
|
25945
26043
|
"Could not install jq. Handoff hooks may not work."
|
|
25946
26044
|
);
|
|
@@ -25950,7 +26048,7 @@ async function runPostUpgradeChecks(config) {
|
|
|
25950
26048
|
} catch {
|
|
25951
26049
|
}
|
|
25952
26050
|
if (!commandExists("unzip")) {
|
|
25953
|
-
|
|
26051
|
+
log44.warn(
|
|
25954
26052
|
"unzip is not installed. Some agent installations (binary distribution) may fail. Install: brew install unzip (macOS) or apt install unzip (Linux)"
|
|
25955
26053
|
);
|
|
25956
26054
|
}
|
|
@@ -25963,20 +26061,20 @@ async function runPostUpgradeChecks(config) {
|
|
|
25963
26061
|
(a) => a.distribution === "uvx"
|
|
25964
26062
|
);
|
|
25965
26063
|
if (hasUvxAgent && !commandExists("uvx")) {
|
|
25966
|
-
|
|
26064
|
+
log44.warn(
|
|
25967
26065
|
"uvx is not installed but you have Python-based agents. Install: pip install uv"
|
|
25968
26066
|
);
|
|
25969
26067
|
}
|
|
25970
26068
|
} catch {
|
|
25971
26069
|
}
|
|
25972
26070
|
}
|
|
25973
|
-
var
|
|
26071
|
+
var log44;
|
|
25974
26072
|
var init_post_upgrade = __esm({
|
|
25975
26073
|
"src/cli/post-upgrade.ts"() {
|
|
25976
26074
|
"use strict";
|
|
25977
26075
|
init_log();
|
|
25978
26076
|
init_agent_dependencies();
|
|
25979
|
-
|
|
26077
|
+
log44 = createChildLogger({ module: "post-upgrade" });
|
|
25980
26078
|
}
|
|
25981
26079
|
});
|
|
25982
26080
|
|
|
@@ -29711,7 +29809,7 @@ a "Handoff" slash command to Claude Code.
|
|
|
29711
29809
|
if (uninstall) {
|
|
29712
29810
|
console.log(`Removing ${agent}/${item.id}...`);
|
|
29713
29811
|
const result = await item.uninstall();
|
|
29714
|
-
for (const
|
|
29812
|
+
for (const log45 of result.logs) console.log(` ${log45}`);
|
|
29715
29813
|
if (result.success) {
|
|
29716
29814
|
console.log(` ${item.name} removed.`);
|
|
29717
29815
|
} else {
|
|
@@ -29721,7 +29819,7 @@ a "Handoff" slash command to Claude Code.
|
|
|
29721
29819
|
} else {
|
|
29722
29820
|
console.log(`Installing ${agent}/${item.id}...`);
|
|
29723
29821
|
const result = await item.install();
|
|
29724
|
-
for (const
|
|
29822
|
+
for (const log45 of result.logs) console.log(` ${log45}`);
|
|
29725
29823
|
if (result.success) {
|
|
29726
29824
|
console.log(` ${item.name} installed.`);
|
|
29727
29825
|
} else {
|