Repository navigation
Conversation
默认跟随请求模型,调用方窗口经内部字段送到当前 job,面板值可热配置。
窗口在入站清理前提取,再经内部字段进入 native body。
窗口必须在 settings 删除前提取,再传给 native body。
A replaced helper keeps the old inode and the listen port. Ownership now treats that process as down and the next start or fleet refresh stops every helper bound to the proxy config, including one the pidfile no longer names.
Fleet refresh now waits for every helper bound to the proxy config to exit before binding the new one. install.sh no longer treats a failed refresh as a successful upgrade.
账本列出文件里的真实配置项,claude.setting 可编辑后播种。遥测开/关与进程状态分开,种子页打开时 2 秒刷新。
编辑框只显示当前槽文件的原文。文件缺失或为空都保持空白,不再回退到策略文本或默认串。
GET /seed-settings 不再用策略默认串填补不存在的文件。空文件仍返回空串,策略字段保持独立。
settings.json 的 env 改成输入框,播种时写回。缺少 CLAUDE_CODE_ATTRIBUTION_HEADER 时默认 0。
默认不拉取。打开后读取本槽 telemetry-upload.log,sidecar 在每次上传后追加正文。
theme 可编辑并随播种写回。autoUpdates 与 grove_enabled 由播种固定,只读显示,不再被环境项过滤掉。
落盘前去掉邮箱、账号、组织和设备标识。超过四十行时原子替换,不再无限追加。
调试开关会改变查询键。保存成功按种子前缀失效,避免日志继续显示旧记录。
batch 日志改为 PostBatch 发出的 BatchRequest。身份字段仍在包装内删除。
解锁和播种都要确认。时区与语言提供 en、cn、jp;时区也可以改成当前 SOCKS5 的时区。
TZ 为空表示跟随。展示用当前代理时区,播种时才写入;代理时区变化后下一次播种跟着变。
空 TZ 保持跟随,但时区选择不被禁用。选中 en、cn、jp 后写入固定值。
|
发版已拒(同 #606/#610 厨房水槽,
— vm2api代码 |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 5 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7ed4586. Configure here.
| const out = applyRequiredSeedEnv(env, pol) | ||
| // 2.1.283+ sends x-claude-code-prompt-id only when this is set. Default on. | ||
| out.CLAUDE_CODE_GATEWAY_HINT_HEADERS = '1' | ||
| if (out.CLAUDE_CODE_ATTRIBUTION_HEADER == null) out.CLAUDE_CODE_ATTRIBUTION_HEADER = '0' |
There was a problem hiding this comment.
Seed TZ and locale discarded
High Severity
The seed form now writes TZ, LANG, and LC_ALL through extra_env, including filling an empty TZ from the current SOCKS5 zone. buildSlotSettingsEnv then overwrites those keys from vm.timezone and vm.locale (locale always has a fallback), so a seeded zone or language does not land in settings.json. Follow-proxy and a pinned zone both lose to the slot identity values.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 7ed4586. Configure here.
| concurrency: 1, | ||
| routing: ctx.routingConfig, | ||
| }) | ||
| service = report.items?.[0] || report |
There was a problem hiding this comment.
Seed PUT restarts egress
High Severity
Toggling telemetry on seed PUT now runs fleet action: 'telemetry'. That path always restarts kin-egress and, on nodes, may migrate/recreate slot containers. Seed writes are supposed to stay a service-status payload without bouncing egress or reloading the slot. A telemetry switch can drop the slot’s proxy path and, for unmigrated node slots, replace the container.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 7ed4586. Configure here.
|
|
||
| export function needsLegacyServiceMigration(info, { sourceDir = '' } = {}) { | ||
| return !!info && !hasBindDestination(info, LIVE_BIN, sourceDir) | ||
| } |
There was a problem hiding this comment.
KVM live-bin migration misfires
High Severity
needsLegacyServiceMigration only looks for a read-only bind at /opt/kin-live. Cluster KVM slots mount slot-bin at /opt/kin-guest/opt/kin-live, so they always look legacy. Telemetry updates then recreate the runner and attach binaries at /opt/kin-live instead of the guest payload path, which can bounce the VM and leave kin-worker off the path startRemoteTelemetry uses.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 7ed4586. Configure here.
| toast.success('已播种') | ||
| await qc.invalidateQueries({ | ||
| queryKey: vmSeedQueryOptions(id).queryKey, | ||
| queryKey: ['panel', 'vm', id, 'seed'], |
There was a problem hiding this comment.
Seed toast ignores service failure
Medium Severity
Seed PUT now always returns HTTP 200 and reports sidecar/fleet outcome in service. The save mutation always toasts 已播种 on HTTP success and never reads service.ok. A failed telemetry restart still looks like a full seed success in the panel.
Triggered by learned rule: Seed GET honest files; PUT 200 on sidecar fail
Reviewed by Cursor Bugbot for commit 7ed4586. Configure here.
| telemetryEnabled(draft) !== telemetryEnabled(saved) || | ||
| REJECT_FLAGS.some(([k]) => !!draft[k] !== !!saved[k]) | ||
| setDraft(seedDraftOf(seed)) | ||
| }, [seed]) |
There was a problem hiding this comment.
Seed poll resets dirty draft
Medium Severity
The seed card copies seed into draft on every seed identity change, and the seed query now refetches every 2s on that tab. Unlocking and editing is wiped whenever GET payload changes, including when debug upload logs grow. Dirty edits are not preserved.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 7ed4586. Configure here.


Summary
Test plan
pnpm -C web exec vitest run src/features/vm/seed-settings.test.tspnpm -C web exec tsc -b不合并。
Note
High Risk
Touches slot container mounts, egress lifecycle, and fleet upgrade paths; a failed Go service refresh can leave stale kin-egress serving traffic while VMs look upgraded.
Overview
Reworks the VM seed tab so admins see and edit what is actually on the slot (
settings.jsonenv rows,claude.settingtext, reject flags) with lock → confirm → 播种 flow, 2s polling for telemetry config vs process state, optional debug upload log, and empty TZ meaning follow current SOCKS5 at save time.Adds service-only fleet updates for Go
kin-worker/kin-egress: persistent per-slotslot-binmounted at/opt/kin-live, layout v3, legacy container rename-and-replace migration,fleet-update/ install / panel upgrade hooks to publish binaries and restart telemetry + egress without rebuilding VMs. Hardens kin-egress when binaries are replaced or PID files lie.Protocol / routing: pins Anthropic betas across
threadcontinue turns; propagatesauto_compact_windowfrom panel compatibility and caller env into CLI hops andkernel.json; derives mid-conversation output-config beta whenthreadis present.Backend seed API reads/writes
claude_setting, toggling telemetry on a running slot triggers targeted telemetry fleet refresh instead of full slot reload; Go telemetry sidecar writes redacted rolling upload logs for?debug=1.Reviewed by Cursor Bugbot for commit 7ed4586. Configure here.