Merge pull request #2901 from pikasTech/fix/hwlab-l2-workbench-runtime-align
修复 Workbench L2 运行配置漂移
This commit is contained in:
@@ -124,10 +124,9 @@ function patchCodeAgentRuntimeWorkloads() {
|
||||
fileChanged = patchCloudApiRuntimeEnv(container, runtime) || fileChanged;
|
||||
if (kafka) fileChanged = patchCloudApiKafkaEnv(container, kafka) || fileChanged;
|
||||
}
|
||||
if (kafka && workloadName === "hwlab-cloud-web" && container.name === "hwlab-cloud-web") {
|
||||
fileChanged = setEnvValue(container, "HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED", String(kafka.enabled && kafka.features.liveKafkaSse)) || fileChanged;
|
||||
fileChanged = setEnvValue(container, "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_ENABLED", String(kafka.enabled && kafka.features.kafkaRefreshReplay)) || fileChanged;
|
||||
fileChanged = setEnvValue(container, "HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED", String(kafka.enabled && kafka.features.projectionRealtime)) || fileChanged;
|
||||
if (workloadName === "hwlab-cloud-web" && container.name === "hwlab-cloud-web") {
|
||||
if (kafka) fileChanged = patchCloudWebKafkaEnv(container, kafka) || fileChanged;
|
||||
fileChanged = patchCloudWebRuntimeEnv(container, runtime.workbench?.webRuntimeConfig) || fileChanged;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -157,6 +156,14 @@ function patchCloudApiRuntimeEnv(container, runtime) {
|
||||
}
|
||||
changed = setEnvValue(container, "HWLAB_CODE_AGENT_DEFAULT_PROVIDER_PROFILE", String(runtime.defaultProviderProfile)) || changed;
|
||||
changed = setEnvValue(container, "HWLAB_CODE_AGENT_CODEX_STDIO_SUPERVISOR", String(runtime.codexStdioSupervisor)) || changed;
|
||||
const workbench = runtime.workbench;
|
||||
if (typeof workbench?.emptySessionGc?.enabled === "boolean") {
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_EMPTY_SESSION_GC_ENABLED", String(workbench.emptySessionGc.enabled)) || changed;
|
||||
}
|
||||
const isolatedKafka = workbench?.webRuntimeConfig?.workbench?.debugCapabilities?.isolatedKafka;
|
||||
if (typeof isolatedKafka === "boolean") {
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_ENABLED", String(isolatedKafka)) || changed;
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
@@ -186,6 +193,16 @@ function patchCloudApiKafkaEnv(container, kafka) {
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_MATCHED_EVENT_LIMIT: kafka.refreshReplay?.matchedEventLimit,
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_LIVE_BUFFER_LIMIT: kafka.refreshReplay?.liveBufferLimit,
|
||||
}) || changed;
|
||||
const sessionIndex = kafka.refreshReplay?.sessionIndex;
|
||||
const sessionIndexConfigured = refreshReplayEnabled && typeof sessionIndex?.enabled === "boolean";
|
||||
changed = patchOptionalEnvGroup(container, sessionIndexConfigured, {
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_ENABLED: sessionIndex?.enabled,
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_MAX_EVENTS: sessionIndex?.maxEvents,
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_MAX_EVENTS_PER_SESSION: sessionIndex?.maxEventsPerSession,
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_BOOTSTRAP_TIMEOUT_MS: sessionIndex?.bootstrapTimeoutMs,
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_REBUILD_INTERVAL_MS: sessionIndex?.rebuildIntervalMs,
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_REBUILD_COOLDOWN_MS: sessionIndex?.rebuildCooldownMs,
|
||||
}) || changed;
|
||||
changed = removeEnvValues(container, [
|
||||
"HWLAB_KAFKA_PROJECTOR_HEARTBEAT_INTERVAL_MS",
|
||||
"HWLAB_KAFKA_OUTBOX_RELAY_INTERVAL_MS",
|
||||
@@ -200,6 +217,42 @@ function patchCloudApiKafkaEnv(container, kafka) {
|
||||
return changed;
|
||||
}
|
||||
|
||||
function patchCloudWebKafkaEnv(container, kafka) {
|
||||
let changed = false;
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED", String(kafka.enabled && kafka.features.liveKafkaSse)) || changed;
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_ENABLED", String(kafka.enabled && kafka.features.kafkaRefreshReplay)) || changed;
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED", String(kafka.enabled && kafka.features.projectionRealtime)) || changed;
|
||||
return changed;
|
||||
}
|
||||
|
||||
function patchCloudWebRuntimeEnv(container, webRuntimeConfig) {
|
||||
if (!webRuntimeConfig) return false;
|
||||
let changed = false;
|
||||
const displayTime = webRuntimeConfig.displayTime;
|
||||
const workbench = webRuntimeConfig.workbench;
|
||||
const debug = workbench?.debugCapabilities;
|
||||
const rawEvents = debug?.rawHwlabEventWindow;
|
||||
const traceTimeline = workbench?.traceTimeline;
|
||||
if (displayTime) {
|
||||
changed = setEnvValue(container, "HWLAB_CLOUD_WEB_DISPLAY_TIME_ZONE", String(displayTime.timeZone)) || changed;
|
||||
changed = setEnvValue(container, "HWLAB_CLOUD_WEB_DISPLAY_TIME_LOCALE", String(displayTime.locale)) || changed;
|
||||
changed = setEnvValue(container, "HWLAB_CLOUD_WEB_DISPLAY_TIME_LABEL", String(displayTime.label)) || changed;
|
||||
}
|
||||
if (typeof debug?.isolatedKafka === "boolean") {
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_ENABLED", String(debug.isolatedKafka)) || changed;
|
||||
}
|
||||
if (rawEvents) {
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_RAW_HWLAB_EVENT_WINDOW_ENABLED", String(rawEvents.enabled)) || changed;
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_RAW_HWLAB_EVENT_WINDOW_MAX_ENTRIES", String(rawEvents.maxEntries)) || changed;
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_RAW_HWLAB_EVENT_WINDOW_MAX_RETAINED_BYTES", String(rawEvents.maxRetainedBytes)) || changed;
|
||||
}
|
||||
if (traceTimeline) {
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_TRACE_AUTO_EXPAND_RUNNING", String(traceTimeline.autoExpandRunning)) || changed;
|
||||
changed = setEnvValue(container, "HWLAB_WORKBENCH_TRACE_AUTO_COLLAPSE_TERMINAL", String(traceTimeline.autoCollapseTerminal)) || changed;
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
function patchOptionalEnvGroup(container, enabled, values) {
|
||||
let changed = false;
|
||||
for (const [name, value] of Object.entries(values)) {
|
||||
|
||||
@@ -50,6 +50,14 @@ test("patches YAML-owned Code Agent and Kafka runtime settings", () => {
|
||||
HWLAB_KAFKA_TRANSACTIONAL_PROJECTOR_ENABLED: "false",
|
||||
HWLAB_KAFKA_PROJECTOR_GROUP_ID: "hwlab-projector",
|
||||
HWLAB_KAFKA_HWLAB_EVENT_GROUP_ID: "hwlab-events",
|
||||
HWLAB_WORKBENCH_EMPTY_SESSION_GC_ENABLED: "false",
|
||||
HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_ENABLED: "false",
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_ENABLED: "true",
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_MAX_EVENTS: "100000",
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_MAX_EVENTS_PER_SESSION: "10000",
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_BOOTSTRAP_TIMEOUT_MS: "30000",
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_REBUILD_INTERVAL_MS: "300000",
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_INDEX_REBUILD_COOLDOWN_MS: "30000",
|
||||
});
|
||||
expect(envSecret(api, "AGENTRUN_API_KEY")).toEqual({ name: "hwlab-v03-master-server-admin-api-key", key: "api-key" });
|
||||
|
||||
@@ -59,6 +67,15 @@ test("patches YAML-owned Code Agent and Kafka runtime settings", () => {
|
||||
HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED: "true",
|
||||
HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_ENABLED: "true",
|
||||
HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED: "false",
|
||||
HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_ENABLED: "false",
|
||||
HWLAB_WORKBENCH_RAW_HWLAB_EVENT_WINDOW_ENABLED: "false",
|
||||
HWLAB_WORKBENCH_RAW_HWLAB_EVENT_WINDOW_MAX_ENTRIES: "1",
|
||||
HWLAB_WORKBENCH_RAW_HWLAB_EVENT_WINDOW_MAX_RETAINED_BYTES: "1",
|
||||
HWLAB_WORKBENCH_TRACE_AUTO_EXPAND_RUNNING: "true",
|
||||
HWLAB_WORKBENCH_TRACE_AUTO_COLLAPSE_TERMINAL: "true",
|
||||
HWLAB_CLOUD_WEB_DISPLAY_TIME_ZONE: "Asia/Shanghai",
|
||||
HWLAB_CLOUD_WEB_DISPLAY_TIME_LOCALE: "zh-CN",
|
||||
HWLAB_CLOUD_WEB_DISPLAY_TIME_LABEL: "北京时间",
|
||||
});
|
||||
|
||||
const list = Bun.YAML.parse(readFileSync(join(runtimeDir, "list.yaml"), "utf8")) as any;
|
||||
@@ -169,6 +186,19 @@ function overlay(runtimePath: string) {
|
||||
},
|
||||
defaultProviderProfile: "gpt.pika",
|
||||
codexStdioSupervisor: "repo-owned",
|
||||
workbench: {
|
||||
emptySessionGc: { enabled: false },
|
||||
webRuntimeConfig: {
|
||||
displayTime: { timeZone: "Asia/Shanghai", locale: "zh-CN", label: "北京时间" },
|
||||
workbench: {
|
||||
debugCapabilities: {
|
||||
isolatedKafka: false,
|
||||
rawHwlabEventWindow: { enabled: false, maxEntries: 1, maxRetainedBytes: 1 },
|
||||
},
|
||||
traceTimeline: { autoExpandRunning: true, autoCollapseTerminal: true },
|
||||
},
|
||||
},
|
||||
},
|
||||
kafkaEventBridge: {
|
||||
enabled: true,
|
||||
bootstrapServers: "kafka.platform-infra.svc.cluster.local:9092",
|
||||
@@ -193,6 +223,14 @@ function overlay(runtimePath: string) {
|
||||
scanLimit: 1000,
|
||||
matchedEventLimit: 100,
|
||||
liveBufferLimit: 100,
|
||||
sessionIndex: {
|
||||
enabled: true,
|
||||
maxEvents: 100000,
|
||||
maxEventsPerSession: 10000,
|
||||
bootstrapTimeoutMs: 30000,
|
||||
rebuildIntervalMs: 300000,
|
||||
rebuildCooldownMs: 30000,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user