Skip to content

Releases

1.4.2

Choose a tag to compare

@Wonjader Wonjader released this 19 Oct 05:46
  • plus 预设下渲染文档不再反复要求提权:桌面版做 docx 排版任务时,每次把 docx 转图
    (@deepseek-ai/libreoffice-kit → soffice.exe)都被沙箱拦住,返回
    {"code":"failed","error":"spawn EPERM"},只能每次审批提升到 danger-full-access。
    根因是沙箱限制的是子进程/可执行文件,而 plus 预设此前只放宽了文件路径:Windows 运行器
    用「ACL + 受限令牌」起命令,受限令牌起不了 kit 自己 spawn 的 soffice.exe。
  • 现在把 DSH 自带的文档渲染链纳入 plus 的「宿主侧直通」(与睡眠/关机命令同一机制):
    命中 libreoffice-kit/lib/cli.js、libreoffice-kit/lib/index.js 或 soffice(.exe|.bin)
    的命令在 plus 会话里不受沙箱围栏执行,其余命令照旧受限。
  • 新增开关 allowOfficeTools(默认开):可在「设置 → 工作区内修改+」或
    settings.yaml 的 workspace-write-plus.allowOfficeTools 关掉,关掉后渲染又会回到
    「每次审批提权」的老行为。
  • 该规则不影响非 plus 会话,也不放宽任何文件路径:它只决定这一条命令是否在围栏外跑。

1.4.1

Choose a tag to compare

@Wonjader Wonjader released this 14 Oct 14:26
  • 修复最新本地建构版(0.2.x 一代)上「设置里没有本插件的页面」:该版本把
    settingsScope 服务整个删掉了(在它的 ui-settings 客户端 bundle 里出现 0 次),
    插件设置的唯一传输变成 configForms(按 profile 条目 id 派生表单)。1.4.0 的独立设置栏
    只在 settingsScope 存在时注册,因此在那一代宿主上从来没有注册成功过。
    1. 独立设置页改由 configForms 表单驱动:设置左侧导航重新出现「工作区内修改+」。
    2. 插件页的四个面全部注册:plugins.item、plugins.bundle.config、
      plugins.row.config(键 <包名>#<行 id>)、settings.plugins.tab。
      那一代宿主里插件设置页由侧边栏「插件」页(插件管理器)派发 plugins.item 渲染:
      owner 参数 {view:'summary'} 出摘要、{view:'page', form} 出设置页 —— 摘要只画一句描述,
      设置内容只在页面视图里画,避免同一个表单出现两次。
    3. 去掉 whileServed 注册门槛:它的实现是「命名空间已经出现在 host 的 describe 文档里,
      回调才跑」,而页面本身就是触碰该命名空间的唯一入口,构成死锁。表单控制器改为懒建,
      host 未供出表单时页面显示「不可用」,而不是整页消失。
  • 未声明的插槽不会触发(slots.inject 会等待声明),所以旧宿主行为不变:
    0.1.5-rc.2 及更早没有 configForms,仍走 settingsScope / connection 旧路与原有独立设置栏。

1.4.0

Choose a tag to compare

@Wonjader Wonjader released this 13 Oct 17:49

1.4.0

  • Port to the current session and executor contracts. Both upstream changes made the plugin silently ineffective on the current harness (0.2.1-alpha.2 generation).

  • Session no longer exposes the public events array (only eventAt()/snapshotEvents()/ownEvents()). The preset check read session.events, so every session looked like a non-plus one and no extra allowance was ever granted. It now reads snapshotEvents() -> ownEvents() -> the legacy array, and caches the answer per session by session.seq because the write path asks on every operation.

  • ShellExecutor now declares only resolve() and execute(spec); run()/start() are gone. The shell backend overrode run()/start(), so on the current harness it was never called and commands ran with no fence. It now overrides execute(spec) the way the shipped sandbox executor does (executeArgv + decorateResult + onProcessDone), while keeping the run()/start() pair for older harnesses.

1.3.2

Choose a tag to compare

@Wonjader Wonjader released this 13 Oct 05:41

1.3.2

  • Give the current client a real settings page. It does not generate a form from a plugin Config: the config area belongs to the keyed plugins.row.config slot, and registering <package>#<row id> is what gives that row its Configure control. 1.3.1 only exported Config, so opening the plugin showed the entry alone.
  • Register dsh-permission-workspace-write-plus#dsh-permission-workspace-write-plus, rendering the existing switch row (seven switches plus the extra-writable-directories editor) from the current configForms form (load/setField), with writes applied immediately like the older settings section.
  • Guard the registration with configForms.whileServed, as the shipped settings pages do, so a deployment that does not serve the namespace shows no trace of the page.
  • The older client dedicated section and the web edition are unchanged.

1.3.1

Choose a tag to compare

@Wonjader Wonjader released this 13 Oct 05:06

1.3.1

  • Fix the missing settings page on the current DSH. Its dsh-settings no longer has installSettingsSection/installSection: a plugin settings ARE its own profile entry config (forms are keyed by entry id and generated automatically), and the old registration branch threw there, which aborted the chain so the plugin never showed up in Settings.
  • Export the switch schema as the loader-reserved Config and mark every field volatile, which is what the current host volatileForm() collects. The mark is guarded: a schemastery without .volatile() (older hosts) is left untouched and keeps its existing workspace-write-plus settings section.
  • Publish the effective switches from the entry config in the package-root apply(), which the current host re-runs on every settings edit.
  • Both editions stay supported: the web/older client keeps its dedicated settings section, the desktop/current client gets the entry auto-generated page, and the extra write allowances behave identically on both.

1.3.0

Choose a tag to compare

@Wonjader Wonjader released this 13 Oct 04:36

1.3.0

  • Support the DSH desktop edition and the current permission UI.
  • The composer permission dropdown is portal-rendered on the current client (both permission dropdowns are now), so the icon-less General-settings row is identified by the open settings dialog instead of by portal-ness. Older clients keep their previous behaviour, and the Simplified Chinese permission name stays 工作区内修改+ / Workspace Write Plus.
  • Boot-time self-check: when the running permission table has no workspace-write-plus preset — the state a bundle-only install (the desktop app plugin manager) leaves behind — the log now reports the exact cordis.patch.yml rows to add instead of failing silently.
  • README documents the desktop edition install steps and why the preset cannot be contributed from the bundle: loader patches replace an entry config wholesale, and the profile patch layer is applied after every bundle.

1.2.2

Choose a tag to compare

@Wonjader Wonjader released this 14 Sep 16:03

1.2.2

  • Add a Simplified Chinese display name for the Workspace Write Plus permission preset: 工作区内修改+ (English remains Workspace Write Plus, unchanged).
  • Applied to every surface that renders the name: the conversation permission trigger (including its accessible name) and dropdown, the General-settings permission dropdown, the /permission popup, and the Workspace Write Plus settings navigation label and master switch.
  • The name refreshes immediately when the interface language changes, and falls back to the host string when the plugin is unloaded.
  • General-settings permission dropdown stays icon-less; all other icons are unchanged.

1.2.1

Choose a tag to compare

@Wonjader Wonjader released this 14 Sep 14:42

1.2.1

  • Remove the Workspace Write Plus glyph from the General settings permission dropdown, matching the built-in permission entries.
  • That menu is portal-rendered into document.body; the fix now skips portal menus instead of relying only on the dialog ancestor check.
  • Conversation permission trigger/dropdown and settings navigation icons are unchanged.

1.2.0

Choose a tag to compare

@Wonjader Wonjader released this 14 Sep 14:35

1.2.0

  • Add allowWriteDirs: user-configurable extra writable directories, editable in the Workspace Write Plus settings section.
  • Custom directories join the extra-write allowlist alongside config files, .dsh/profiles, .dsh/skills, and the DSH home directory.
  • Empty list keeps the previous behavior; the enabled master switch still gates every extra allowance.

1.1.1

Choose a tag to compare

@Wonjader Wonjader released this 11 Sep 14:30

1.1.1

  • Support the new DSH client settings transport (ctx.settingsScope), with legacy connection.api.settings fallback, restoring the Workspace Write Plus settings section on new DSH versions.
  • Keep host-side compatibility with both old installSettingsSection and new ctx.settings.installSection APIs.
  • Windows profile dshmarket upgraded to 1.45.1.