Skip to content

Releases: HernanJiang/CraftStation

CraftStation v1.11.17

Choose a tag to compare

@github-actions github-actions released this 24 Oct 17:19

CraftStation 1.11.17

用户可见

  • 右上角 CLI 更新卡片改为更清晰的主题灰色。
  • 修复非 100% 应用缩放下更新卡片向右错位、溢出窗口的问题;卡片现在会继续与更新按钮右对齐。

实现

  • 更新卡片复用其他菜单已有的 overlayZoomClasses 缩放补偿,外层校正定位坐标,内层保持文字和图标的应用缩放。
  • 卡片背景使用 --surface-secondary,保留现有圆角与菜单结构。
  • 新增灰色表面与 125% 缩放补偿的回归断言。

验证

  • CliUpdateMenu.test.tsx 12 项与 changelog 16 项测试通过;新增回归在修复前失败、修复后通过。
  • pnpm typecheck、pnpm lint 与 pnpm build 通过。
  • 隔离 Electron 在 125% 缩放下实测:背景为 rgb(33, 34, 40),弹层与按钮右边缘偏差约 0.6px,未溢出窗口;截图位于 C:/Users/Haona/.craftstation-smoke/debug-1792859588608-56944/cli-update-after-125.png。
  • changed-scope mock smoke 的 welcome、baseline 与 changed-surface gate 通过,控制台/运行时错误 0;既有 responsive-layout 场景在空节点 querySelector 断言失败,报告位于 C:/Users/Haona/.craftstation-smoke/automated-1792860064496-51480/artifacts/smoke-report.json,不宣称全量 smoke 通过。
  • 完整测试在允许 WSL 启动的测试配置下为 12839 项通过、13 项失败;失败均位于本次未修改的模块,不宣称完整测试全绿。
  • 本补丁仅发布 Windows x64 安装包与便携版。

CraftStation 1.11.17

User-facing

  • The CLI update card in the top-right corner now uses a clearer theme grey.
  • Fixed the update card drifting right and overflowing the window at non-100% app zoom. It now stays right-aligned with the update button.

Implementation

  • Reuse the existing overlayZoomClasses compensation: the outer layer corrects positioning coordinates while the inner layer preserves app-scaled text and icons.
  • Use --surface-secondary for the card background while retaining the existing corners and menu structure.
  • Add regression assertions for the grey surface and 125% zoom compensation.

Verification

  • All 12 CliUpdateMenu.test.tsx tests and 16 changelog tests passed. The new regression failed before the fix and passes after it.
  • pnpm typecheck, pnpm lint, and pnpm build passed.
  • In an isolated Electron app at 125% zoom, the card background is rgb(33, 34, 40), its right edge differs from the button's by about 0.6px, and it does not overflow the window. Screenshot: C:/Users/Haona/.craftstation-smoke/debug-1792859588608-56944/cli-update-after-125.png.
  • Changed-scope mock smoke passed welcome, baseline, and the changed-surface gate with zero console/runtime errors. The existing responsive-layout scenario still fails on a null-node querySelector assertion; see C:/Users/Haona/.craftstation-smoke/automated-1792860064496-51480/artifacts/smoke-report.json. This is not a claim of full smoke success.
  • The full suite passed 12839 tests and failed 13 under the test configuration that permits WSL startup. Every remaining failure is outside the files changed here; this is not a claim of a fully green suite.
  • This patch ships Windows x64 installer and portable packages.

CraftStation v1.11.16

Choose a tag to compare

@github-actions github-actions released this 24 Oct 12:59

CraftStation 1.11.16

用户可见

  • 模型目录每 15 分钟自动检查,回到窗口、打开管理模型页时检查过期目录;手动「获取模型」立即刷新。保留已有模型显示选择。
  • Kimi 可获取 K2.8 Preview、K3.1 Pro 及其 Highspeed 档;K2.7 Highspeed 保持独立型号,旧会话的快速模式不再把 K2.8 请求改发到 K2.7。
  • Claude 自动接纳 SDK 提供的新模型与名称;OpenCode 刷新官方目录,更新常驻服务里的旧模型信息。
  • Windows Codex 使用完整、独立的运行文件目录,防止 CLI 更新替换正在运行的工具辅助程序,导致文件占用或 IPC 版本不匹配。安装新版后新启动的会话使用此机制。
  • Windows 上更新 Step Code 时,官方安装脚本不再因为 PowerShell 模块路径丢失 Get-FileHash 而失败。内置 step update 若因发布包目录结构失败,会继续用官方脚本完成安装。

实现

  • Kimi API Key 配置不再每次启动都重置;官方目录更新使用原子写入,保留显式覆盖,失败保留原配置。
  • 并发渠道刷新合并最新缓存;前端自动与手动刷新共用去重、过期检查和超时处理。
  • Codex 快照包含主程序、辅助程序及配套资源,发布前检查源目录在复制期间未发生变化;保留运行中的旧快照。

验证

  • 模型目录、Kimi、Claude、OpenCode、Codex 快照与 Step 更新相关测试 232 项,以及更新器与路径测试 77 项通过。pnpm typecheck 与 pnpm lint 通过。
  • 隔离应用中已确认 Kimi 页面刷新,以及 Codex 真实回合执行 Get-Location 并返回 CODEX_TOOL_OK;主进程与 code-mode 辅助进程来自同一快照。本轮发布前没有重跑整应用 smoke。
  • Step 的 Get-FileHash 回归在修复前失败、修复后通过。官方安装脚本在修正模块路径后,于临时目录完成 0.1.6 安装;临时 PATH 已撤回,本机正式 step.exe 未替换。
  • 本补丁仅发布 Windows x64 安装包与便携版。

CraftStation 1.11.16

User-facing

  • Model catalogs refresh every 15 minutes and are checked for staleness on window focus and when opening model management. Manual refresh bypasses the age check and preserves visibility choices.
  • Kimi discovers K2.8 Preview, K3.1 Pro and its Highspeed tier. K2.7 Highspeed stays a separate model; a saved Fast setting no longer redirects K2.8 requests to K2.7.
  • Claude accepts new models and updated names from the SDK. OpenCode refreshes the official catalog instead of retaining stale metadata from a running server.
  • On Windows, new Codex sessions use a complete isolated runtime directory so CLI upgrades cannot replace helpers used by a running server and cause file locks or IPC version mismatches.
  • Updating Step Code on Windows no longer fails when the official installer cannot find Get-FileHash because PowerShell 7 module directories shadow Windows PowerShell 5.1. If the built-in step update fails on the release archive layout, the official installer still completes the update.

Implementation

  • Preserve managed Kimi API-key configurations across launches. Refresh official metadata atomically, retaining explicit overrides and the previous configuration on failure.
  • Merge concurrent channel refreshes against the latest cache. Share deduplication, age checks and timeout handling between automatic and manual refreshes.
  • Snapshot the complete Codex runtime, including helpers and resources, and check that the source stayed stable while copying. Retain old snapshots used by running processes.

Verification

  • 232 tests covering model catalogs, Kimi, Claude, OpenCode, the Codex snapshot and the Step updater passed, along with 77 updater and path tests. pnpm typecheck and pnpm lint passed.
  • An isolated app confirmed the Kimi model-page refresh and a real Codex turn that ran Get-Location and returned CODEX_TOOL_OK. The server and code-mode helper came from the same snapshot. The full app smoke was not repeated immediately before this publish.
  • The Get-FileHash regression failed before the fix and passed after it. With the repaired module path, the official installer completed a 0.1.6 install in a temporary directory. Those temporary PATH entries were removed, and the installed step.exe was left unchanged.
  • This patch ships Windows x64 installer and portable packages.

1.11.15 已完成时长恢复修复

Choose a tag to compare

@HernanJiang HernanJiang released this 23 Oct 10:06

1.11.15 已完成时长恢复修复(2026-10-23)

用户可见

  • 新回合独立计时,不再继承数天前的开始时间并显示数千分钟。
  • 已完成回合使用保存的开始、结束时间,重新打开会话或切换后不再继续增长;残留 active 时间不会覆盖有效的已完成时间对。
  • 缺少可靠开始、结束时间,或时间顺序错误时,只显示状态,不编造耗时或整轮速度估算。

实现

  • 原生 turn.started 同步重置 renderer 与 main/headless 持久化的 active 开始时间,覆盖单事件、批量与多线程批量。
  • 快照恢复及完成边界不再把会话 updatedAt 当作回合开始;重新打开正在活动的 GUI 回合保留新原生时间。
  • 已完成时长必须有有效、顺序正确且冻结的时间对;输出速度的整轮兜底遵循同一时间窗口。

验证

  • 200 项相关测试、完整 pnpm typecheck 与 pnpm lint 通过。
  • 隔离 Electron 的 6 项定向检查通过,覆盖 renderer 重载恢复、切换会话、新回合计时、完成后冻结与异常时间。
  • 本次变更范围的 mock smoke 全部通过,控制台/运行时错误 0。未测试真实账号回合、完整功能库存或整应用进程退出重启。
  • 已写入完整但错误的历史时间对,若缺少可信原始记录,不猜测重建;有效长回合不按任意时长截断。

1.11.15 Completed turn duration recovery fix (2026-10-23)

User-facing

  • New turns start their own clock instead of inheriting a start time from days earlier and showing thousands of minutes.
  • Completed turns use their saved start and end times, so their duration stays fixed when you reopen or switch conversations. A stale active clock no longer overrides a valid completed window.
  • When reliable timing is missing or the timestamps are reversed, only the status is shown without an invented duration or whole-turn speed estimate.

Implementation

  • Native turn.started resets the active start in both renderer state and main/headless persistence, including single events, batches and multi-thread batches.
  • Snapshot recovery and turn completion no longer use the thread's updatedAt as a turn start. Reopening an active GUI turn preserves its fresh native start.
  • Completed durations require valid, ordered and frozen timestamps. The whole-turn fallback for output speed uses the same timing window.

Verification

  • 200 related tests, full pnpm typecheck and pnpm lint passed.
  • Six targeted checks passed in an isolated Electron app, covering renderer reload recovery, conversation switching, a fresh turn clock, frozen completion and invalid timestamps.
  • All changed-scope mock smoke checks passed with zero console/runtime errors. Real provider turns, the full functional inventory and a full app process restart were not tested.
  • Complete but already incorrect historical timestamp pairs cannot be precisely rebuilt without reliable source records. This patch does not guess their timing or cap valid long-running turns.

v1.11.14 重开窗口检查与通知关闭修复

Choose a tag to compare

@HernanJiang HernanJiang released this 23 Oct 09:27

1.11.14 重开窗口检查与通知关闭修复(2026-10-23)

用户可见

  • 关闭到托盘后重新打开、或从最小化还原主窗口时,会检查界面内容;发现空白后自动重载,必要时重建窗口。首次打开仍保留加载时间。
  • 通知右上角的关闭图标在悬停时保持可见、可点。关闭通知不会触发其中的重试或打开对话操作。

实现

  • 主窗口的内容检查从启动时的一次检查扩展到 show / restore;hide / closed 清除待执行检查,异步探测期间隐藏也不会启动恢复。沿用已有的单窗口恢复合并与重建上限。
  • 合并 mvanhorn 的 PR #18,为通知关闭控件补齐可见性和交互状态样式及相关测试。感谢社区贡献。

验证

  • pnpm typecheck、pnpm lint 通过;窗口与通知 55 项测试、changelog 16 项测试通过。
  • 隔离 Electron 中连续 10 次关闭到托盘再打开通过;注入空白内容后重新打开,自动重载并恢复(约 4 秒);3 次渲染重载正常。悬停、鼠标关闭和键盘关闭通知通过,未误触其他 handler。定向 smoke 的启动和界面基线通过,控制台 / 运行时错误 0。
  • 全量 mock smoke 存在 schedules、webchat、provider-live、composer-caret 和 responsive-layout 场景失败,未宣称全量 PASS。未测试真实账号回合。本次确认并修复了内容恢复漏检;截图中偶发灰屏的首次触发原因尚未唯一定位。

1.11.14 Window reopen checks and toast dismissal fixes (2026-10-23)

User-facing

  • Reopening the main window from the tray or restoring it from a minimized state now checks its content. Blank content triggers a renderer reload and, if needed, window recreation. The first opening still has time to load normally.
  • The toast dismiss icon stays visible and clickable on hover. Dismissing a notification does not run its retry action or open its conversation.

Implementation

  • Main-window content checks now run on show / restore as well as startup. Hide / closed cancel pending checks, and hiding during an asynchronous probe prevents recovery from starting. Existing recovery coalescing and recreation limits remain in use.
  • Merged mvanhorn's PR #18, adding visibility and interaction-state styles for toast dismissal along with related tests. Thank you for the contribution.

Verification

  • pnpm typecheck and pnpm lint passed, along with 55 window / toast tests and 16 changelog tests.
  • An isolated Electron app passed 10 close-to-tray / reopen cycles. After blank content was injected, reopening automatically reloaded and restored the UI in about four seconds. Three renderer reloads also mounted normally. Toast hover, mouse dismissal, and keyboard dismissal passed without triggering other handlers. Targeted startup and renderer smoke checks passed with zero console / runtime errors.
  • The full mock smoke run had failures in schedules, webchat, provider-live, composer-caret, and responsive-layout; it is not reported as a full PASS. Real account turns were not tested. This release fixes a confirmed gap in content recovery; the original intermittent gray-screen trigger shown in the screenshot has not been uniquely identified.

v1.11.13

Choose a tag to compare

@HernanJiang HernanJiang released this 21 Oct 11:20

1.11.13 临时对话窄窗口可以点选模型(2026-10-21)

用户可见

  • 临时对话这种窄窗口里,打开参数菜单后可以直接点模型。点下去会换成底部那一栏显示的模型,菜单随后关上。
  • 上下文窗口、推理强度、快速模式仍是原来的二级菜单。它们打开时不再挡住模型点击。

实现

  • 窄窗口的模型选择画在参数菜单外面,用按钮接收点击。宽度超过 760px 时仍使用左侧的模型二级菜单。

验证

  • pnpm typecheck 通过。pnpm lint 0 警告 0 错误。DraftParameterMenu.test.tsx 26 项通过。新增断言:窄窗口里模型不在菜单节点内,点击后调用 onChange。
  • 正在运行的 1.11.12 窗口没有这版源码,安装前无法在那个窗口里点到修复后的列表。

1.11.13 Narrow temporary chat can pick a model (2026-10-21)

User-facing

  • In the narrow temporary-chat window, opening the parameter menu lets you click a model. The pick replaces the model shown on the bottom bar, and the menu closes.
  • Context size, reasoning, and fast mode stay in their existing submenus. Opening those no longer blocks a model click.

Implementation

  • On a narrow window the model choices are buttons drawn outside the parameter menu. Above 760px the model list remains the left-side submenu.

Verification

  • pnpm typecheck passed. pnpm lint reported 0 warnings and 0 errors. DraftParameterMenu.test.tsx passed 26 tests. New assertion: in a narrow window the model choice is outside the menu node, and a click calls onChange.
  • The running 1.11.12 window does not contain this source, so the fixed list could not be clicked there before install.

v1.11.12

Choose a tag to compare

@HernanJiang HernanJiang released this 21 Oct 10:28

1.11.12 临时对话记住窗口里的选择(2026-10-21)

用户可见

  • 临时对话重新打开时,使用上次在这个窗口里点选的模型与 Harness。主窗口当前用的模型不会填进来,全局菜单里的默认模型也不会填进来。在临时对话里点选后就会记住,不必先发送一条消息。
  • 临时对话这种窄窗口里,模型列表和上下文、推理强度放在同一张菜单中。鼠标从「模型列表」移到上面的模型时,列表保持打开,可以直接点选。

实现

  • 临时对话启动只读自己的 temporary-chat-model。解析时不再合并 defaultModels。目录里没有的模型 id 保持原样,不会收成列表第一项后再写回。
  • 窗口里换过一次模型之后,即使草稿还停在旧 id,也会把这次选择写入 temporary-chat-model。第一次打开时解析出的目录默认项不会覆盖已有记录。
  • 宽度不超过 760px 时,模型列表不再使用向上弹出的二级菜单。

验证

  • pnpm typecheck 通过。pnpm lint 0 警告 0 错误。DraftParameterMenu、ThreadDraftView、temporaryChat 共 91 项测试通过。新增断言:临时对话在全局默认是 Codex 时仍打开自己的 DeepSeek;目录里没有的 deepseek-v4.1-flash 不会被收成 gpt-5.4 并写回;窄窗口里指针移到模型上后,模型仍在同一张菜单里且可以点选。
  • 正在运行的 1.11.11 窗口没有这版源码,安装前无法在那个窗口里点到修复后的菜单。

1.11.12 Temporary chat keeps the model picked in that window (2026-10-21)

User-facing

  • Reopening a temporary chat uses the model and Harness last picked in that window. The main window's current model does not fill it in, and neither does the global menu default. A pick inside the temporary chat is remembered without sending a message.
  • In the narrow temporary-chat window, the model list stays in the same menu as context size and reasoning. Moving the pointer from Model list onto a model leaves the list open so it can be clicked.

Implementation

  • Temporary-chat startup reads only its own temporary-chat-model. Resolution no longer merges defaultModels. A model id that is absent from the catalog stays as saved, and is not snapped to the first catalog entry and written back.
  • After the model changes inside the window, that selection is written to temporary-chat-model even when the draft still names the previous id. The catalog default resolved on the first open does not replace an existing record.
  • At a width of 760px or below, the model list is no longer a submenu that opens upward.

Verification

  • pnpm typecheck passed. pnpm lint reported 0 warnings and 0 errors. 91 tests in DraftParameterMenu, ThreadDraftView, and temporaryChat passed. New assertions: a temporary chat whose global default is Codex still opens on its own DeepSeek; deepseek-v4.1-flash, which is absent from the catalog, is not snapped to gpt-5.4 and written back; in a narrow window, moving the pointer onto a model leaves it in the same menu and the click is delivered.
  • The running 1.11.11 window does not contain this source, so the fixed menu could not be clicked there before install.

v1.11.11

Choose a tag to compare

@HernanJiang HernanJiang released this 20 Oct 15:17

1.11.11 临时对话只记住自己的上次模型(2026-10-20)

用户可见

  • 临时对话重新打开时,使用上次在临时对话里实际发送过的模型与 Harness。主窗口之后换成别的模型,不会改掉这个默认值。空白预热不会写入。

实现

  • 只有临时对话窗口里的启动和后续发送写入 temporary-chat-model。主窗口请求不再写入,窗口打开和聚焦也不再读取主窗口记录。

验证

  • pnpm typecheck 通过。pnpm lint 0 警告 0 错误。临时对话记忆、启动与后续发送相关 113 项测试通过。其中新增断言:主窗口请求不写入临时对话记忆;临时对话发送 DeepSeek 后,即使同时存在主窗口的 Codex 记录,重新打开仍是 DeepSeek。

1.11.11 Temporary chat keeps its own last model (2026-10-20)

User-facing

  • Reopening a temporary chat uses the model and Harness from the last request sent in the temporary chat. Changing the model in the main window does not change that default. An empty prewarm does not write it.

Implementation

  • Only a launch or follow-up sent from the temporary chat window writes temporary-chat-model. Main-window requests no longer write it, and opening or focusing the window no longer reads the main-window record.

Verification

  • pnpm typecheck passed. pnpm lint reported 0 warnings and 0 errors. 113 tests covering temporary-chat memory, launch, and follow-up passed. New assertions: a main-window request does not write the temporary-chat memory; after the temporary chat sends DeepSeek, reopening it stays on DeepSeek even when a main-window Codex record exists.

v1.11.10

Choose a tag to compare

@HernanJiang HernanJiang released this 20 Oct 13:14

1.11.10 Claude 5.5 与临时对话默认模型(2026-10-20)

用户可见

  • Claude Code 可以选择 Opus 5.5、Sonnet 5.5、Haiku 5.5 和 Fable 5.1。新线程默认 Opus 5.5;推理档位与 1M 上下文随型号提供。已安装的 CLI 版本尚未收录的型号不会出现在菜单里。Command Code 的 Claude 目录同步这些名称。
  • 临时对话的空白草稿默认跟随最近一次实际发出的请求,包括主窗口和临时对话本身,使用当时的模型与 Harness。只打开选择器或后台预热不会改写这个默认值。已经开始的临时对话保持当前选择;隐藏窗口再次聚焦时,空白草稿会刷新到最新组合。
  • 最近一次请求如果是 Auto 目录通常隐藏的原生 DeepSeek Harness,临时对话仍能恢复该组合。

实现

  • src/supervisor/agents/claude/models.ts:内置目录加入四个新型号,并按 CLI 版本门槛隐藏(Fable 5.1 自 2.1.257,Opus 5.5 自 2.1.280,Sonnet 5.5 自 2.1.284,Haiku 5.5 自 2.1.293)。同步推理档位、1M 上下文,以及 Opus 5.5 的 Fast。
  • src/renderer/components/providers/claude/index.tsx:上述型号纳入 Auto 权限可选集。src/shared/commandCodeModelIds.ts 与 Command Code 标签同步新型号。
  • 实际提交请求时写入 last-submitted-chat-model(启动、合成台启动、后续发送)。空 prompt 预热不写入。临时对话优先读这份记忆,没有时才回退到窗口自己的旧选择;主进程在任一份记忆存在时才预热。聚焦时若草稿尚未进入对话,则刷新到最新组合。

验证

  • pnpm typecheck 通过。pnpm lint(含类型感知)0 警告 0 错误。Claude 目录、临时对话记忆、草稿恢复与 changelog 共 7 个文件 175 项测试通过。
  • 应用实测:空白临时对话从最近一次请求跟随到 Codex + 6.1 Sol,再跟随到 Claude Code + Opus 5.5;已有对话保持当前选择。空白预热不写入默认组合。

1.11.10 Claude 5.5 and temporary chat defaults (2026-10-20)

User-facing

  • Claude Code can select Opus 5.5, Sonnet 5.5, Haiku 5.5, and Fable 5.1. New threads default to Opus 5.5, with effort tiers and a 1M context option for those models. Models the installed CLI does not yet catalog stay out of the menu. The Command Code Claude catalog uses the same names.
  • A blank temporary chat follows the model and Harness from the most recent request that was actually sent, whether that request came from the main window or the temporary chat. Opening the picker or running an empty prewarm does not overwrite that default. A conversation already in progress keeps its current selection. When a hidden window is focused again, a blank draft refreshes to the latest pair.
  • If the latest request used the native DeepSeek Harness, which the Auto catalog normally hides, the temporary chat can still restore that pair.

Implementation

  • src/supervisor/agents/claude/models.ts: the built-in catalog adds the four models and hides each one until the CLI version that first listed it (Fable 5.1 at 2.1.257, Opus 5.5 at 2.1.280, Sonnet 5.5 at 2.1.284, Haiku 5.5 at 2.1.293). Effort tiers, the 1M context size, and Fast for Opus 5.5 are included.
  • src/renderer/components/providers/claude/index.tsx: those models are in the Auto permission set. src/shared/commandCodeModelIds.ts and the Command Code labels match.
  • A submitted request writes last-submitted-chat-model from launch, Craft launch, and follow-up send. An empty prewarm does not. The temporary chat reads that memory first and falls back to its older window choice. The main process prewarms when either memory exists. On focus, a draft that has not entered a conversation refreshes to the latest pair.

Verification

  • pnpm typecheck passed. pnpm lint, including the type-aware pass, reported 0 warnings and 0 errors. Claude catalog, temporary-chat memory, draft restore, and changelog tests passed: 175 tests across 7 files.
  • In the app, a blank temporary chat followed the latest request to Codex + 6.1 Sol, then to Claude Code + Opus 5.5. An existing conversation kept its current selection. An empty prewarm did not write the default pair.

v1.11.9

Choose a tag to compare

@HernanJiang HernanJiang released this 20 Oct 12:40

1.11.9 远程网页唤醒/休眠(2026-10-20)

用户可见

  • 远程浏览器线程(ChatGPT 网页等)切换标签页或线程后不再每次重新加载:30 分钟内切回秒开、页面状态完整保留;离开超过 30 分钟无交互后自动休眠释放内存,下次打开才重新加载。

实现

  • src/main/chatGptWeb/runtime.ts:选中网页的保活信号由 4 秒宽限改为 30 分钟闲置超时(VIEW_IDLE_TIMEOUT_MS)。页面打开期间轮询持续续期;切走后 webview 转入既有离屏 background 宿主保持挂载,超时后才卸载(休眠),复用 BrowserHost 既有 background/hidden 模式与 BrowserPanelManager automation session 机制,渲染层零改动。

验证

  • pnpm typecheck 通过,oxlint 0 警告 0 错误;隔离实例 changed 范围 mock 冒烟通过。

1.11.9 Remote webpage wake/sleep (2026-10-20)

User-facing

  • Remote browser threads (ChatGPT web and similar) no longer reload on every tab/thread switch: revisiting within 30 minutes is instant with full page state preserved; after 30 minutes without interaction the page sleeps to free memory and only reloads on the next open.

Implementation

  • src/main/chatGptWeb/runtime.ts: the selected webpage keep-alive signal changed from a 4-second grace to a 30-minute idle timeout (VIEW_IDLE_TIMEOUT_MS). Read polling re-arms it while the page is open; after switching away the webview stays mounted in the existing off-screen background host and only unmounts (sleeps) once the timeout elapses. Reuses the existing BrowserHost background/hidden modes and BrowserPanelManager automation sessions with zero renderer changes.

Verification

  • pnpm typecheck passed, oxlint reported 0 warnings and 0 errors; changed-scope mock smoke run passed on an isolated instance.

CraftStation v1.11.8

Choose a tag to compare

@github-actions github-actions released this 20 Oct 11:08

CraftStation 1.11.8

用户可见

  • Claude Code 不再安装失败(退出码 -1)。部分机器上 CraftStation 继承的 PowerShell 模块路径把 PowerShell 7 的目录排在系统目录之前,PS 5.1 加载不到 Get-FileHash,官方安装脚本一开始校验就中断并杀掉安装终端;现在启动安装终端前会把系统模块目录排回最前,安装脚本可以正常跑完。
  • 本补丁只发布 Windows x64 NSIS 安装包与便携版。安装后重新打开 CraftStation,再到 Harness 总览重新点「下载并安装」。

实现

  • src/supervisor/agents/base/processRuntime.ts 新增 repairWindowsPowerShellModulePath:Windows 下把 %ProgramFiles%\WindowsPowerShell\Modules 与 %SystemRoot%\system32\WindowsPowerShell\v1.0\Modules 去重后钉到 PSModulePath 最前,保留其余自定义目录;顺序已正确时不改动。
  • src/supervisor/runtime/threadSessionManager.ts 在原生 Windows 且 shell 为 Windows PowerShell(PS 5.1)时应用该修复:先清除 shell 环境里所有大小写变体的 PSModulePath 键,再写入修复后的规范值。pwsh(PS 7)与 cmd 不受影响。

验证

  • 新增 3 项 repairWindowsPowerShellModulePath 单测(污染值重排、已干净返回 undefined、缺失时给出系统默认);相关 54 项测试通过,类型检查与常规/类型感知 lint 0 警告。
  • 真实 Windows PowerShell 5.1 验证:以用户机器上实际污染值启动时 (Get-Command Get-FileHash) 返回 False(复现安装脚本失败点),以修复后的值启动时返回 True。
  • 以修复后的环境真实运行官方 claude.ai/install.ps1:版本查询、清单解析、280MB 安装器下载与 SHA256 校验全部通过,并成功启动官方安装器(修复前脚本在第一步 Get-FileHash 校验即中断退出)。

CraftStation 1.11.8

User-facing

  • Claude Code no longer fails to install (exit code -1). On some machines CraftStation inherits a PowerShell module path that puts the PowerShell 7 directories ahead of the system ones, so PS 5.1 cannot load Get-FileHash and the official install script aborts at its first checksum step, killing the install terminal. CraftStation now pins the system module directories back to the front before launching the install terminal, so the script runs to completion.
  • This patch publishes Windows x64 only: an NSIS installer and a portable package. Reopen CraftStation after installing, then click "Download and install" again in the Harness overview.

Implementation

  • src/supervisor/agents/base/processRuntime.ts adds repairWindowsPowerShellModulePath: on Windows it dedupes and pins %ProgramFiles%\WindowsPowerShell\Modules and %SystemRoot%\system32\WindowsPowerShell\v1.0\Modules to the front of PSModulePath, keeping any custom entries; already-correct values are left untouched.
  • src/supervisor/runtime/threadSessionManager.ts applies the repair when building the shell environment on native Windows for Windows PowerShell (PS 5.1): all case variants of the PSModulePath key are removed first, then the repaired canonical value is written. pwsh (PS 7) and cmd are unaffected.

Verification

  • Three new repairWindowsPowerShellModulePath unit tests (reordering a polluted value, returning undefined when already clean, falling back to system defaults when missing); 54 related tests passed, with typecheck and regular/type-aware lint at zero warnings.
  • Real Windows PowerShell 5.1 check: launched with the actual polluted value from the affected machine, (Get-Command Get-FileHash) returns False (reproducing the install script's failure point); launched with the repaired value, it returns True.
  • The official claude.ai/install.ps1 was run under the repaired environment: version lookup, manifest parsing, the 280MB installer download, and SHA256 verification all passed, and the official installer was launched successfully (previously the script died at its first Get-FileHash step).