switchroom 0.17.2 → 0.17.4
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/switchroom.js
CHANGED
|
@@ -28666,8 +28666,10 @@ function emitAgentService(lines, a, imageTag, buildMode, buildContext, homePrefi
|
|
|
28666
28666
|
env2.SWITCHROOM_WEBHOOK_RECEIVER_UID = String(operatorUid);
|
|
28667
28667
|
}
|
|
28668
28668
|
if (a.litellm.enabled && a.litellm.keyConfirmed && a.litellm.baseUrl) {
|
|
28669
|
+
const root = a.litellm.baseUrl.replace(/\/+$/, "");
|
|
28669
28670
|
env2.SWITCHROOM_LITELLM = "1";
|
|
28670
|
-
env2.
|
|
28671
|
+
env2.SWITCHROOM_LITELLM_BASE = root;
|
|
28672
|
+
env2.ANTHROPIC_BASE_URL = `${root}/anthropic`;
|
|
28671
28673
|
env2.ANTHROPIC_SMALL_FAST_MODEL = a.litellm.smallFastModel;
|
|
28672
28674
|
}
|
|
28673
28675
|
env2.SWITCHROOM_VOICE_ENGINE = voiceEngine;
|
|
@@ -63735,8 +63737,8 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
63735
63737
|
import { dirname, join } from "node:path";
|
|
63736
63738
|
|
|
63737
63739
|
// src/build-info.ts
|
|
63738
|
-
var VERSION = "0.17.
|
|
63739
|
-
var COMMIT_SHA = "
|
|
63740
|
+
var VERSION = "0.17.4";
|
|
63741
|
+
var COMMIT_SHA = "b842b0c9";
|
|
63740
63742
|
|
|
63741
63743
|
// src/cli/resolve-version.ts
|
|
63742
63744
|
function readPackageVersion() {
|
|
@@ -77584,7 +77586,7 @@ function startHindsight(ports, litellm, imageTag) {
|
|
|
77584
77586
|
`HINDSIGHT_API_CONSOLIDATION_MAX_MEMORIES_PER_ROUND=${HINDSIGHT_DEFAULT_CONSOLIDATION_MAX_MEMORIES_PER_ROUND}`
|
|
77585
77587
|
];
|
|
77586
77588
|
if (litellm) {
|
|
77587
|
-
envArgs.push("-e", `HINDSIGHT_API_PORT=${apiPort}`, "-e", `ANTHROPIC_BASE_URL=${litellm.baseUrl}`, "-e", `ANTHROPIC_CUSTOM_HEADERS=x-litellm-api-key: Bearer ${litellm.apiKey}
|
|
77589
|
+
envArgs.push("-e", `HINDSIGHT_API_PORT=${apiPort}`, "-e", `ANTHROPIC_BASE_URL=${litellm.baseUrl.replace(/\/+$/, "")}/anthropic`, "-e", `ANTHROPIC_CUSTOM_HEADERS=x-litellm-api-key: Bearer ${litellm.apiKey}
|
|
77588
77590
|
x-litellm-customer-id: hindsight
|
|
77589
77591
|
x-litellm-tags: service:hindsight`);
|
|
77590
77592
|
}
|
|
@@ -22670,7 +22670,7 @@ import { existsSync as existsSync6, readFileSync as readFileSync4 } from "node:f
|
|
|
22670
22670
|
import { dirname as dirname4, join as join2 } from "node:path";
|
|
22671
22671
|
|
|
22672
22672
|
// src/build-info.ts
|
|
22673
|
-
var VERSION = "0.17.
|
|
22673
|
+
var VERSION = "0.17.4";
|
|
22674
22674
|
|
|
22675
22675
|
// src/cli/resolve-version.ts
|
|
22676
22676
|
function readPackageVersion() {
|
|
@@ -24819,7 +24819,7 @@ class HostdServer {
|
|
|
24819
24819
|
});
|
|
24820
24820
|
return this.reconcileFailedRolledBack(`write failed: ${e.message}`, req, caller, started);
|
|
24821
24821
|
}
|
|
24822
|
-
const runner = this.opts.runReconcile ?? (async () => this.runSwitchroom(["apply"]));
|
|
24822
|
+
const runner = this.opts.runReconcile ?? (async () => this.runSwitchroom(caller.kind === "agent" ? ["apply", "--only", callerName, "--non-interactive"] : ["apply", "--non-interactive"]));
|
|
24823
24823
|
const recRes = await runner({ requestId: approvalId });
|
|
24824
24824
|
if (recRes.exit_code === 0) {
|
|
24825
24825
|
const blast = classifyBlastRadius(snapshot, postApply);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "switchroom",
|
|
3
3
|
"//version": "NOT the release version — source of truth is the git tag, resolved by scripts/build.mjs:resolveVersion() (see CLAUDE.md > Standard release process). This field is stale by design and only the Layer-4 dev/non-tag fallback for build.mjs + src/cli/resolve-version.ts; do NOT bump it expecting a release to pick it up. npm-pack tarball naming needs a real version — do that as an UNCOMMITTED pack-time bump (see release step 6), never a committed one.",
|
|
4
|
-
"version": "0.17.
|
|
4
|
+
"version": "0.17.4",
|
|
5
5
|
"description": "Run Claude Code 24/7 on your Claude Pro/Max subscription over Telegram. Open-source alternative to OpenClaw and NanoClaw — no API keys.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -101,8 +101,8 @@ if [ -n "${SWITCHROOM_LITELLM:-}" ] && command -v switchroom >/dev/null 2>&1; th
|
|
|
101
101
|
if [ -z "$sr_ll_key" ]; then
|
|
102
102
|
echo "litellm: no virtual key for cron '{{name}}' — falling back to direct OAuth (no tracking/guardrail)" >&2
|
|
103
103
|
elif command -v curl >/dev/null 2>&1 && [ -n "$ANTHROPIC_BASE_URL" ] \
|
|
104
|
-
&& ! curl -fsS -m 5 -o /dev/null "${ANTHROPIC_BASE_URL%/}/health/liveliness" 2>/dev/null; then
|
|
105
|
-
echo "litellm: proxy unreachable at $ANTHROPIC_BASE_URL — falling back to direct OAuth (no tracking/guardrail this session)" >&2
|
|
104
|
+
&& ! curl -fsS -m 5 -o /dev/null "${SWITCHROOM_LITELLM_BASE:-${ANTHROPIC_BASE_URL%/anthropic}}/health/liveliness" 2>/dev/null; then
|
|
105
|
+
echo "litellm: proxy unreachable at ${SWITCHROOM_LITELLM_BASE:-$ANTHROPIC_BASE_URL} — falling back to direct OAuth (no tracking/guardrail this session)" >&2
|
|
106
106
|
else
|
|
107
107
|
sr_ll_ok="1"
|
|
108
108
|
fi
|
|
@@ -114,7 +114,7 @@ x-litellm-tags: agent:$SWITCHROOM_AGENT_NAME,profile:${SWITCHROOM_AGENT_PROFILE:
|
|
|
114
114
|
else
|
|
115
115
|
# Fail-open: drop every routing var so the claude CLI talks to Anthropic
|
|
116
116
|
# directly on its OAuth credential (subscription path), unproxied.
|
|
117
|
-
unset ANTHROPIC_BASE_URL ANTHROPIC_SMALL_FAST_MODEL SWITCHROOM_LITELLM
|
|
117
|
+
unset ANTHROPIC_BASE_URL ANTHROPIC_SMALL_FAST_MODEL SWITCHROOM_LITELLM SWITCHROOM_LITELLM_BASE
|
|
118
118
|
fi
|
|
119
119
|
unset sr_ll_key sr_ll_ok
|
|
120
120
|
fi
|
|
@@ -70,8 +70,8 @@ if [ "$SWITCHROOM_RUNTIME" = "docker" ] && [ -z "$SWITCHROOM_DOCKER_TMUX_INNER"
|
|
|
70
70
|
if [ -z "$sr_ll_key" ]; then
|
|
71
71
|
echo "litellm(outer): no virtual key for agent '$SWITCHROOM_AGENT_NAME' — gateway will use direct OAuth (no tracking/guardrail)" >&2
|
|
72
72
|
elif command -v curl >/dev/null 2>&1 && [ -n "$ANTHROPIC_BASE_URL" ] \
|
|
73
|
-
&& ! curl -fsS -m 5 -o /dev/null "${ANTHROPIC_BASE_URL%/}/health/liveliness" 2>/dev/null; then
|
|
74
|
-
echo "litellm(outer): proxy unreachable at $ANTHROPIC_BASE_URL — falling back to direct OAuth (no tracking/guardrail this session)" >&2
|
|
73
|
+
&& ! curl -fsS -m 5 -o /dev/null "${SWITCHROOM_LITELLM_BASE:-${ANTHROPIC_BASE_URL%/anthropic}}/health/liveliness" 2>/dev/null; then
|
|
74
|
+
echo "litellm(outer): proxy unreachable at ${SWITCHROOM_LITELLM_BASE:-$ANTHROPIC_BASE_URL} — falling back to direct OAuth (no tracking/guardrail this session)" >&2
|
|
75
75
|
else
|
|
76
76
|
sr_ll_ok="1"
|
|
77
77
|
fi
|
|
@@ -81,7 +81,7 @@ x-litellm-customer-id: $SWITCHROOM_AGENT_NAME
|
|
|
81
81
|
x-litellm-tags: agent:$SWITCHROOM_AGENT_NAME,profile:${SWITCHROOM_AGENT_PROFILE:-default}"
|
|
82
82
|
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
|
|
83
83
|
else
|
|
84
|
-
unset ANTHROPIC_BASE_URL ANTHROPIC_SMALL_FAST_MODEL SWITCHROOM_LITELLM
|
|
84
|
+
unset ANTHROPIC_BASE_URL ANTHROPIC_SMALL_FAST_MODEL SWITCHROOM_LITELLM SWITCHROOM_LITELLM_BASE
|
|
85
85
|
fi
|
|
86
86
|
unset sr_ll_key sr_ll_ok
|
|
87
87
|
fi
|
|
@@ -890,8 +890,8 @@ if [ -n "${SWITCHROOM_LITELLM:-}" ] && command -v switchroom >/dev/null 2>&1; th
|
|
|
890
890
|
if [ -z "$sr_ll_key" ]; then
|
|
891
891
|
echo "litellm: no virtual key for agent '$SWITCHROOM_AGENT_NAME' — falling back to direct OAuth (no tracking/guardrail)" >&2
|
|
892
892
|
elif command -v curl >/dev/null 2>&1 && [ -n "$ANTHROPIC_BASE_URL" ] \
|
|
893
|
-
&& ! curl -fsS -m 5 -o /dev/null "${ANTHROPIC_BASE_URL%/}/health/liveliness" 2>/dev/null; then
|
|
894
|
-
echo "litellm: proxy unreachable at $ANTHROPIC_BASE_URL — falling back to direct OAuth (no tracking/guardrail this session)" >&2
|
|
893
|
+
&& ! curl -fsS -m 5 -o /dev/null "${SWITCHROOM_LITELLM_BASE:-${ANTHROPIC_BASE_URL%/anthropic}}/health/liveliness" 2>/dev/null; then
|
|
894
|
+
echo "litellm: proxy unreachable at ${SWITCHROOM_LITELLM_BASE:-$ANTHROPIC_BASE_URL} — falling back to direct OAuth (no tracking/guardrail this session)" >&2
|
|
895
895
|
else
|
|
896
896
|
sr_ll_ok="1"
|
|
897
897
|
fi
|
|
@@ -912,7 +912,7 @@ x-litellm-tags: agent:$SWITCHROOM_AGENT_NAME,profile:${SWITCHROOM_AGENT_PROFILE:
|
|
|
912
912
|
else
|
|
913
913
|
# Fail-open: drop every routing var so the claude CLI talks to Anthropic
|
|
914
914
|
# directly on its OAuth credential (subscription path), unproxied.
|
|
915
|
-
unset ANTHROPIC_BASE_URL ANTHROPIC_SMALL_FAST_MODEL SWITCHROOM_LITELLM
|
|
915
|
+
unset ANTHROPIC_BASE_URL ANTHROPIC_SMALL_FAST_MODEL SWITCHROOM_LITELLM SWITCHROOM_LITELLM_BASE
|
|
916
916
|
fi
|
|
917
917
|
unset sr_ll_key sr_ll_ok
|
|
918
918
|
fi
|
|
@@ -58590,10 +58590,10 @@ function readTurnActiveMarkerAgeMs(stateDir, now) {
|
|
|
58590
58590
|
}
|
|
58591
58591
|
|
|
58592
58592
|
// ../src/build-info.ts
|
|
58593
|
-
var VERSION = "0.17.
|
|
58594
|
-
var COMMIT_SHA = "
|
|
58595
|
-
var COMMIT_DATE = "2026-07-
|
|
58596
|
-
var LATEST_PR =
|
|
58593
|
+
var VERSION = "0.17.4";
|
|
58594
|
+
var COMMIT_SHA = "b842b0c9";
|
|
58595
|
+
var COMMIT_DATE = "2026-07-05T11:15:53Z";
|
|
58596
|
+
var LATEST_PR = 2839;
|
|
58597
58597
|
var COMMITS_AHEAD_OF_TAG = 0;
|
|
58598
58598
|
|
|
58599
58599
|
// gateway/boot-version.ts
|
|
@@ -68108,7 +68108,7 @@ function buildModelDeps(restartCtx) {
|
|
|
68108
68108
|
return {
|
|
68109
68109
|
discover: (a) => discoverModels(a),
|
|
68110
68110
|
discoverSrModels: async () => {
|
|
68111
|
-
const base = process.env.ANTHROPIC_BASE_URL;
|
|
68111
|
+
const base = process.env.SWITCHROOM_LITELLM_BASE ?? process.env.ANTHROPIC_BASE_URL?.replace(/\/anthropic\/?$/, "");
|
|
68112
68112
|
const headers = process.env.ANTHROPIC_CUSTOM_HEADERS;
|
|
68113
68113
|
if (!base || !headers)
|
|
68114
68114
|
return [];
|
|
@@ -17177,7 +17177,14 @@ function buildModelDeps(restartCtx?: ModelDepsRestartContext): ModelMenuDeps & M
|
|
|
17177
17177
|
return {
|
|
17178
17178
|
discover: (a) => discoverModels(a),
|
|
17179
17179
|
discoverSrModels: async () => {
|
|
17180
|
-
|
|
17180
|
+
// /model/info lives on the ROOT proxy (model-mapped surface), NOT the
|
|
17181
|
+
// Anthropic pass-through that ANTHROPIC_BASE_URL now points at
|
|
17182
|
+
// (<root>/anthropic). Prefer SWITCHROOM_LITELLM_BASE (the root emitted
|
|
17183
|
+
// by compose.ts); fall back to stripping a trailing /anthropic off
|
|
17184
|
+
// ANTHROPIC_BASE_URL so an agent booted from a pre-passthrough compose
|
|
17185
|
+
// (base_url == root) still resolves correctly.
|
|
17186
|
+
const base = process.env.SWITCHROOM_LITELLM_BASE
|
|
17187
|
+
?? process.env.ANTHROPIC_BASE_URL?.replace(/\/anthropic\/?$/, '')
|
|
17181
17188
|
const headers = process.env.ANTHROPIC_CUSTOM_HEADERS
|
|
17182
17189
|
if (!base || !headers) return []
|
|
17183
17190
|
const keyMatch = headers.match(/x-litellm-api-key:\s*Bearer\s*(\S+)/)
|