@mstar-harness/dsh 3.2.6 → 3.4.0

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.
Files changed (32) hide show
  1. package/README.i18n.yaml +2 -2
  2. package/README.md +4 -4
  3. package/README.zh.md +4 -4
  4. package/bundle/README.md +1 -1
  5. package/dist/gates/_shared.d.ts +3 -3
  6. package/dist/index.js +1072 -997
  7. package/harness-commands/amazing-pr-review.md +54 -0
  8. package/harness-skills/mstar-audit/SKILL.md +7 -6
  9. package/harness-skills/mstar-audit/references/audit-playbook.md +19 -1
  10. package/harness-skills/mstar-audit/references/codebase-audit.md +21 -3
  11. package/harness-skills/mstar-audit/references/finding-format.md +5 -1
  12. package/harness-skills/mstar-audit/references/pr-review-seat-evidence.md +28 -0
  13. package/harness-skills/mstar-audit/references/pr-review.md +169 -69
  14. package/harness-skills/mstar-audit/references/security-review.md +219 -0
  15. package/harness-skills/mstar-conventions/SKILL.md +4 -2
  16. package/harness-skills/mstar-conventions/references/harness-bootstrap-and-agents-layering.md +5 -1
  17. package/harness-skills/mstar-harness-core/SKILL.md +1 -1
  18. package/harness-skills/mstar-roles/SKILL.md +17 -13
  19. package/harness-skills/mstar-roles/references/_shared/leaf-executor-core.md +5 -7
  20. package/harness-skills/mstar-roles/references/architect.md +9 -11
  21. package/harness-skills/mstar-roles/references/code-reviewer.md +19 -22
  22. package/harness-skills/mstar-roles/references/frontend-dev.md +10 -11
  23. package/harness-skills/mstar-roles/references/fullstack-dev-shared.md +12 -13
  24. package/harness-skills/mstar-roles/references/ops-engineer.md +10 -12
  25. package/harness-skills/mstar-roles/references/product-manager.md +9 -11
  26. package/harness-skills/mstar-roles/references/project-manager/dispatch-and-assignment.md +2 -0
  27. package/harness-skills/mstar-roles/references/prompt-engineer.md +11 -14
  28. package/harness-skills/mstar-roles/references/qa-engineer.md +9 -13
  29. package/harness-skills/mstar-roles/references/qc-specialist-shared.md +10 -17
  30. package/harness-skills/mstar-roles/references/writing-specialist.md +8 -9
  31. package/package.json +1 -1
  32. package/harness-commands/pr-deep-review.md +0 -39
package/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # Blob hashes (git hash-object) of each side as of the last confirmation that
3
3
  # both languages say the same thing (dsh i18n contract: a pair is three
4
4
  # sibling files; editing either side obligates re-confirming and re-recording).
5
- README.md: c328842bbac14e2a1540209a5339369ec390a40e
6
- README.zh.md: da5d2a839fd39c3b9a58a1a4d2648f638da5c1f3
5
+ README.md: eff5613d26d4ca7cae84f6970cae737603ccf73e
6
+ README.zh.md: 908af5a5e893f39b8479928adeca722b07d49f0e
package/README.md CHANGED
@@ -156,7 +156,7 @@ Decoration rides the `subagent/start` EMIT — not `tools/pre-execute` (tool arg
156
156
 
157
157
  ### Role seeds + adoption advisory
158
158
 
159
- When the optional `dsh-llm-fallbacks` capability is **mounted** (the second install command — see Install paths), the mstar plugin **zero-config declares the 13 `mode: subagent` mstar role seeds** into the fallbacks seed registry: persona = the `harness-agents/` mirror `description` (verbatim) + one mandatory-load guide line (`Load mstar-roles (references/<role-id>.md) and the role's Required Skill Dependencies before acting.`); a persona carrying the `{{...}}` interpolation hazard is skipped + warned, never declared. The declaration **merge-preserves the currently-seeded non-mstar ids** from the readback — e.g. the 7 omp-style preset roles the upstream package self-declares at its own apply: upstream `declare` REPLACES the whole registry, so without preservation a mstar-only batch would strip preset ids of their seeded annotations (rows remain, unseeded). The declaration re-fires idempotently on every fallbacks (re-)apply (HMR/fiber swap) — never from a one-shot latch — so either boot order (presets first or mstar first) converges to the same 20-id fully-seeded registry.
159
+ When the optional `dsh-llm-fallbacks` capability is **mounted** (the second install command — see Install paths), the mstar plugin **zero-config declares the 13 `mode: subagent` mstar role seeds** into the fallbacks seed registry: persona = the `harness-agents/` mirror `description` (verbatim) + one mandatory-load guide line (`Load mstar-roles (references/<role-id>.md) first — identity comes before skills; load topic skills only when the Assignment activates them via its Skill presets field.`); a persona carrying the `{{...}}` interpolation hazard is skipped + warned, never declared. The declaration **merge-preserves the currently-seeded non-mstar ids** from the readback — e.g. the 7 omp-style preset roles the upstream package self-declares at its own apply: upstream `declare` REPLACES the whole registry, so without preservation a mstar-only batch would strip preset ids of their seeded annotations (rows remain, unseeded). The declaration re-fires idempotently on every fallbacks (re-)apply (HMR/fiber swap) — never from a one-shot latch — so either boot order (presets first or mstar first) converges to the same 20-id fully-seeded registry.
160
160
 
161
161
  A warn-only advisory pass (logger `mstar/fallbacks-advisory`) runs **once per apply** — attempted at apply and, when the fallbacks row mounts after `dsh` (the loader mounts entries concurrently), once at the first `subagent/start` decision point. With the service present, the pass FIRST awaits the idempotent re-declare (closing the boot race) then reads the EFFECTIVE state (`getEffectiveRoles`) and reports, bounded to **at most one warn per category**:
162
162
 
@@ -191,7 +191,7 @@ The mstar skills mount through the dsh skill-filesystem provider as a **single c
191
191
 
192
192
  | Path | Mechanism | When |
193
193
  | --- | --- | --- |
194
- | Bundled default | `bundledSkillDir` defaults to the package's OWN `harness-skills/` mirror — the repo-root `skills/` (19 `mstar-*` + `pm`) synced by `bundle-assets` at build/postinstall (gitignored), resolved **package-relative** (not cwd-anchored — works from any launch cwd) | Published package / any deployment without an override |
194
+ | Bundled default | `bundledSkillDir` defaults to the package's OWN `harness-skills/` mirror — the repo-root `skills/` (19 `mstar-*` + `pm`) synced by `bundle-assets` at build time (gitignored), resolved **package-relative** (not cwd-anchored — works from any launch cwd) | Published package / any deployment without an override |
195
195
  | Custom roots | `skillRoots` / explicit `bundledSkillDir` → skill-filesystem `customSkillDirs` / `bundledSkillDir` entries (explicit values win) | Local development / tests / deployments with a different mirror |
196
196
 
197
197
  The packaged mirror is a **single canonical mount**: skill content lives once in the repo-root `skills/` mirror and is synced into the package (like opencode's `harness-skills/`), so mstar skills stay standalone-usable everywhere. No double-loading: the opencode plugin ships the same skills in its own package, so dsh must mount them ONLY through this single skill-filesystem path.
@@ -200,7 +200,7 @@ Dev-time reality: the `@deepseek-ai/dsh-skill-filesystem` runtime is a peer-stub
200
200
 
201
201
  ## Commands
202
202
 
203
- The plugin registers the bundled mstar commands (omp/opencode parity surface) on `ctx.commands`: `harness-commands/*.md` — the repo-root `commands/` mirror (`iteration-start`, `iteration-drive`, `iteration-loop`, `codebase-audit`) synced by `bundle-assets` at build/postinstall (gitignored). Each registration reads the command's `name`/`description`/`input` frontmatter; a declared `input` hint is advertised as `input.hint`, which flips the dsh web client's decision table from detached bare execution to a leadingInput **claim** — the menu pick inserts `/name ` into the composer (command-colored token, the hint as ghost text) and the line submits only on Enter, so the user can type follow-up args (the `/plan` / `/goal` / `/advisor` interaction). The handler **steers the command body into the receiving agent as a USER-source message** (the dsh-plan-mode command precedent — `source: { kind: 'user' }`, so the model treats the body as a task to execute, not injected context; the dsh-commands "explicitly schedule model-visible work through the receiving Agent" path), appending the user's typed args as a `## User input` section when present, and returns a success result. Registration is deferred with `ctx.inject(['commands'], …)` — the same optional-unit pattern as the tools — so the plugin boots without the commands service; an absent mirror (no `bundle-assets` run) registers nothing.
203
+ The plugin registers the bundled mstar commands (omp/opencode parity surface) on `ctx.commands`: `harness-commands/*.md` — the repo-root `commands/` mirror (`iteration-start`, `iteration-drive`, `iteration-loop`, `codebase-audit`) synced by `bundle-assets` at build time (gitignored). Each registration reads the command's `name`/`description`/`input` frontmatter; a declared `input` hint is advertised as `input.hint`, which flips the dsh web client's decision table from detached bare execution to a leadingInput **claim** — the menu pick inserts `/name ` into the composer (command-colored token, the hint as ghost text) and the line submits only on Enter, so the user can type follow-up args (the `/plan` / `/goal` / `/advisor` interaction). The handler **steers the command body into the receiving agent as a USER-source message** (the dsh-plan-mode command precedent — `source: { kind: 'user' }`, so the model treats the body as a task to execute, not injected context; the dsh-commands "explicitly schedule model-visible work through the receiving Agent" path), appending the user's typed args as a `## User input` section when present, and returns a success result. Registration is deferred with `ctx.inject(['commands'], …)` — the same optional-unit pattern as the tools — so the plugin boots without the commands service; an absent mirror (no `bundle-assets` run) registers nothing.
204
204
 
205
205
  ## Engine seam mapping
206
206
 
@@ -554,7 +554,7 @@ The catalog row is appended at the END of the composed step messages, after dele
554
554
  - **skill-lint × roles-seam double-fire on `<root>/mstar-roles/SKILL.md`** — when a configured skill root contains the `mstar-roles` dir (the repo-root mirror case in dev, and the bundled mirror in the published form), one write to `mstar-roles/SKILL.md` fires BOTH the skill-authoring lint gate and the roles seam gate (two advisories / two repair-escape logs in hard). Both validators legitimately apply — the double-lint is advisory-only, not a correctness break; the "scopes are disjoint" property holds among the four seams only, not across the skill gate.
555
555
  - **Content-blind skill-lint blind spots** — the `fs/write-intent` slot carries only `(target, actor)`: first-create incoming content is not linted, and valid→invalid overwrites are not detected on the listener path (it lints the pre-write on-disk document only). Warn/hard advisories surface pre-existing on-disk violations only — the same class of limitation as the status gate.
556
556
  - **Explicit relative `bundledSkillDir` overrides are cwd-anchored** — skill-filesystem resolves a relative bundled root with plain `join()` semantics against the dsh **process cwd** at boot. The plugin's DEFAULT bundled root is the package's OWN `harness-skills/` mirror resolved package-relative (NOT cwd-anchored — works from any launch cwd); only an explicit RELATIVE override inherits the cwd anchoring, so deployments overriding the default should pass an **absolute path in the profile layer** (see `bundle/README.md`).
557
- - **Bundled mirror is a build-time sync** — `harness-skills/` + `harness-commands/` are produced by `bundle-assets` at build/postinstall (repo-root `skills/` + `commands/` mirrors; gitignored). A checkout where `bundle-assets` has not run mounts no bundled skills and registers no commands (the default mount is inert, not an error).
557
+ - **Bundled mirror is a build-time sync** — `harness-skills/` + `harness-commands/` are produced by `bundle-assets` at build time (repo-root `skills/` + `commands/` mirrors; gitignored). A checkout where `bundle-assets` has not run mounts no bundled skills and registers no commands (the default mount is inert, not an error).
558
558
  - **Profile-bundle install into the `web` profile: registry and local checkout** — `dsh plugin --profile web add @mstar-harness/dsh` (registry) and `add <local checkout>` are the supported paths; both run through the same pnpm + reconcile mechanism (the reconcile step joins `@mstar-harness/dsh` to `dsh.profile.bundles`). A local checkout needs a prior `bun run build` — the package has no `prepare` script (the monorepo builds packages explicitly), so an unbuilt checkout installs an empty `dist/`.
559
559
  - **`lintSkillWrite` typed veto not production-wired** — the incoming-document hard veto (`SkillLintVetoError`, code `skill-lint.veto`) is exported and test-covered, but has no production caller yet: the engine `HostAdapter` has no content-carrying skill-write hook (only `beforeStatusWrite`/`beforeDispatch`/`beforeMerge`), and the fs intent slot is content-blind. Wiring lands with a future content-carrying hook; until then the listener path enforces only via the repair-escape advisory (never a veto).
560
560
  - **CLI `HOST_SIGNALS` lacks the `subagent` token** — the engine `ToolSignal` union includes it and `detectHost` handles it, but `packages/cli` `HOST_SIGNALS` is not updated yet, so `mstar host detect --signals subagent` would reject until the CLI list is updated on upstreaming.
package/README.zh.md CHANGED
@@ -156,7 +156,7 @@ profile bundle 组合出以下行——注册表行来自 `@deepseek-ai/dsh-base
156
156
 
157
157
  ### 角色 seeds 与采纳建议(Adoption advisory)
158
158
 
159
- 当可选的 `dsh-llm-fallbacks` 能力**已挂载**(第二条安装命令——见 Install paths)时,mstar 插件会向 fallbacks seed registry **零配置声明 13 个 `mode: subagent` mstar 角色 seed**:persona = `harness-agents/` 镜像 `description`(原样)+ 一行强制加载引导(`Load mstar-roles (references/<role-id>.md) and the role's Required Skill Dependencies before acting.`);含 `{{...}}` 插值风险的 persona 跳过并告警,绝不声明。声明会**合并保留 readback 中当前已 seeded 的非 mstar id**——例如上游包在其自身 apply 时自声明的 7 个 omp 风格 preset 角色:上游 `declare` **全量替换** registry,若不保留,mstar-only 批会摘掉 preset id 的 seeded 注记(行仍在,仅失去 seeded)。声明在每次 fallbacks(重新)apply(HMR/纤程切换)时幂等重放——绝不用一次性 latch——因此两种 boot 顺序(presets 先或 mstar 先)都收敛到同一 20-id 全 seeded registry。
159
+ 当可选的 `dsh-llm-fallbacks` 能力**已挂载**(第二条安装命令——见 Install paths)时,mstar 插件会向 fallbacks seed registry **零配置声明 13 个 `mode: subagent` mstar 角色 seed**:persona = `harness-agents/` 镜像 `description`(原样)+ 一行强制加载引导(`Load mstar-roles (references/<role-id>.md) first — identity comes before skills; load topic skills only when the Assignment activates them via its Skill presets field.`);含 `{{...}}` 插值风险的 persona 跳过并告警,绝不声明。声明会**合并保留 readback 中当前已 seeded 的非 mstar id**——例如上游包在其自身 apply 时自声明的 7 个 omp 风格 preset 角色:上游 `declare` **全量替换** registry,若不保留,mstar-only 批会摘掉 preset id 的 seeded 注记(行仍在,仅失去 seeded)。声明在每次 fallbacks(重新)apply(HMR/纤程切换)时幂等重放——绝不用一次性 latch——因此两种 boot 顺序(presets 先或 mstar 先)都收敛到同一 20-id 全 seeded registry。
160
160
 
161
161
  一条只告警的采纳建议通道(日志器 `mstar/fallbacks-advisory`)**每次 apply 只跑一遍**——apply 时先尝试一次;当 fallbacks 行在 `dsh` 之后挂载(loader 并发挂载条目)时,改在首个 `subagent/start` 决策点只跑一遍。服务存在时,通道**先 await 幂等 re-declare**(闭合 boot 竞争窗口)再读取**有效状态**(`getEffectiveRoles`),并按**每类至多一条告警**有界报告:
162
162
 
@@ -191,7 +191,7 @@ mstar 技能通过 dsh skill-filesystem 提供者以**单一规范挂载**接入
191
191
 
192
192
  | 路径 | 机制 | 时机 |
193
193
  | --- | --- | --- |
194
- | Bundled 默认 | `bundledSkillDir` 默认取包内自带的 `harness-skills/` 镜像——仓库根 `skills/`(19 个 `mstar-*` + `pm`)由 `bundle-assets` 在构建/postinstall 时同步(gitignore),按**包相对路径**解析(非 cwd 锚定——任意启动 cwd 都可用) | 发布包 / 无覆盖的任何部署 |
194
+ | Bundled 默认 | `bundledSkillDir` 默认取包内自带的 `harness-skills/` 镜像——仓库根 `skills/`(19 个 `mstar-*` + `pm`)由 `bundle-assets` 在构建时同步(gitignore),按**包相对路径**解析(非 cwd 锚定——任意启动 cwd 都可用) | 发布包 / 无覆盖的任何部署 |
195
195
  | 自定义根 | `skillRoots` / 显式 `bundledSkillDir` → skill-filesystem `customSkillDirs` / `bundledSkillDir` 条目(显式值优先) | 本地开发 / 测试 / 使用不同镜像的部署 |
196
196
 
197
197
  打包镜像是**单一规范挂载**:技能内容只在仓库根 `skills/` 镜像中存一份并同步进包(与 opencode 的 `harness-skills/` 相同),mstar 技能在任何地方都保持可独立使用。不重复加载:opencode 插件在自己的包里携带同一批技能,因此 dsh 只能通过这条 skill-filesystem 路径挂载它们。
@@ -200,7 +200,7 @@ mstar 技能通过 dsh skill-filesystem 提供者以**单一规范挂载**接入
200
200
 
201
201
  ## Commands
202
202
 
203
- 插件把 bundled 的 mstar 命令(omp/opencode 对齐面)注册到 `ctx.commands`:`harness-commands/*.md`——仓库根 `commands/` 镜像(`iteration-start`、`iteration-drive`、`iteration-loop`、`codebase-audit`)由 `bundle-assets` 在构建/postinstall 时同步(gitignore)。每条注册读取命令的 `name`/`description`/`input` frontmatter;声明了 `input` hint 的注册会将其作为 `input.hint` 公布,使 dsh web 客户端的决策表从「脱离式裸执行」翻转为 leadingInput **claim**——菜单点选后把 `/name ` 插入输入框(命令色 token + ghost hint),按 Enter 才提交,用户可以键入后续参数(与 `/plan`、`/goal`、`/advisor` 相同的交互)。handler 把**命令正文以 USER source 消息 steer 进接收 agent**(dsh-plan-mode 命令先例——`source: { kind: 'user' }`,模型把正文当作要执行的任务而非注入上下文;即 dsh-commands 的「经接收 Agent 显式调度模型可见工作」路径),用户键入的参数以 `## User input` 小节追加在正文后,返回成功结果。注册以 `ctx.inject(['commands'], …)` 延迟进行——与工具注册相同的可选单元模式——插件在无 commands 服务时也能启动;镜像缺失(未跑 `bundle-assets`)则不注册任何命令。
203
+ 插件把 bundled 的 mstar 命令(omp/opencode 对齐面)注册到 `ctx.commands`:`harness-commands/*.md`——仓库根 `commands/` 镜像(`iteration-start`、`iteration-drive`、`iteration-loop`、`codebase-audit`)由 `bundle-assets` 在构建时同步(gitignore)。每条注册读取命令的 `name`/`description`/`input` frontmatter;声明了 `input` hint 的注册会将其作为 `input.hint` 公布,使 dsh web 客户端的决策表从「脱离式裸执行」翻转为 leadingInput **claim**——菜单点选后把 `/name ` 插入输入框(命令色 token + ghost hint),按 Enter 才提交,用户可以键入后续参数(与 `/plan`、`/goal`、`/advisor` 相同的交互)。handler 把**命令正文以 USER source 消息 steer 进接收 agent**(dsh-plan-mode 命令先例——`source: { kind: 'user' }`,模型把正文当作要执行的任务而非注入上下文;即 dsh-commands 的「经接收 Agent 显式调度模型可见工作」路径),用户键入的参数以 `## User input` 小节追加在正文后,返回成功结果。注册以 `ctx.inject(['commands'], …)` 延迟进行——与工具注册相同的可选单元模式——插件在无 commands 服务时也能启动;镜像缺失(未跑 `bundle-assets`)则不注册任何命令。
204
204
 
205
205
  ## Engine seam mapping
206
206
 
@@ -327,7 +327,7 @@ catalog 行在委托之后追加到组合步骤消息的**末尾**——请求
327
327
  - **`<root>/mstar-roles/SKILL.md` 上 skill-lint × roles seam 双重触发**——当某个已配置技能根包含 `mstar-roles` 目录(开发期的仓库根镜像情形,以及发布形态的打包镜像)时,对 `mstar-roles/SKILL.md` 的一次写入会同时触发技能撰写 lint 闸门与 roles seam 闸门(hard 下两条咨询 / 两条修复逃生日志)。两个校验器都合理适用——双重 lint 仅为咨询,并非正确性破坏;「作用域互不重叠」的性质只在四个 seam 之间成立,不跨技能闸门。
328
328
  - **内容盲的 skill-lint 盲区**——`fs/write-intent` 槽位只携带 `(target, actor)`:首次创建的传入内容不被 lint,合法→非法覆盖在监听器路径上无法检出(它只 lint 写入前的磁盘文档)。告警/hard 咨询只呈现**已存在**的磁盘违规——与状态闸门同类限制。
329
329
  - **显式相对 `bundledSkillDir` 覆盖锚定 cwd**——skill-filesystem 对相对打包根按普通 `join()` 语义解析到 dsh **进程 cwd**。插件的**默认**打包根是包内自带的 `harness-skills/` 镜像,按包相对路径解析(**非** cwd 锚定——任意启动 cwd 都可用);只有显式的**相对**覆盖继承 cwd 锚定,因此覆盖默认的部署应在 **profile 层传绝对路径**(见 `bundle/README.md`)。
330
- - **Bundled 镜像是构建期同步**——`harness-skills/` + `harness-commands/` 由 `bundle-assets` 在构建/postinstall 时产出(仓库根 `skills/` + `commands/` 镜像;gitignore)。未跑 `bundle-assets` 的检出不挂载 bundled 技能、不注册命令(默认挂载惰性,而非报错)。
330
+ - **Bundled 镜像是构建期同步**——`harness-skills/` + `harness-commands/` 由 `bundle-assets` 在构建时产出(仓库根 `skills/` + `commands/` 镜像;gitignore)。未跑 `bundle-assets` 的检出不挂载 bundled 技能、不注册命令(默认挂载惰性,而非报错)。
331
331
  - **profile-bundle 安装到 `web` profile:registry 与 local checkout**——`dsh plugin --profile web add @mstar-harness/dsh`(registry)与 `add <本地检出>` 为受支持途径,均走同一 pnpm + reconcile 机制(reconcile 步骤把 `@mstar-harness/dsh` 并入 `dsh.profile.bundles`)。local checkout 需要先执行 `bun run build`——本包没有 `prepare` 脚本(monorepo 显式构建各包),未构建的检出会装入空的 `dist/`。
332
332
  - **`lintSkillWrite` 类型化否决尚未接入生产**——传入文档分支的 hard 否决(`SkillLintVetoError`,码 `skill-lint.veto`)已导出并测试覆盖,但尚无生产调用方:engine `HostAdapter` 没有携带内容的技能写入钩子(只有 `beforeStatusWrite`/`beforeDispatch`/`beforeMerge`),且 fs intent 槽位内容盲。接线随未来携带内容的钩子落地;在此之前监听器路径只通过修复逃生咨询执行(从不否决)。
333
333
  - **CLI `HOST_SIGNALS` 缺少 `subagent` token**——engine `ToolSignal` 联合已包含它且 `detectHost` 能处理,但 `packages/cli` 的 `HOST_SIGNALS` 尚未更新,`mstar host detect --signals subagent` 会拒绝,直到上游化时更新 CLI 列表。
package/bundle/README.md CHANGED
@@ -81,7 +81,7 @@ The `mstar` row accepts the plugin `Config` (see `src/index.ts`):
81
81
  | `dispatchTools` | unset (plugin default `['subagent', 'subagent_fork']`) | delegation tool names the dispatch gate matches — the dsh preset's TWO delegation tools (`subagent` + its fork sibling `subagent_fork`, both Assignment-shaped); a custom list overrides the default wholesale, so it must include `subagent_fork` to keep fork dispatches gated |
82
82
  | `dispatchBinding` | unset | the dispatching agent's role for the anti-recursion precheck |
83
83
  | `skillRoots` | unset | additional skill roots (custom mirrors) |
84
- | `bundledSkillDir` | unset → plugin resolves its OWN packaged `harness-skills/` mirror package-relative | bundled skill mount — the repo-root `skills/` mirror synced by `bundle-assets` at build/postinstall (gitignored), resolved package-relative (NOT cwd-anchored). An explicit value wins; a RELATIVE override stays cwd-anchored, so pass an absolute path in the profile layer |
84
+ | `bundledSkillDir` | unset → plugin resolves its OWN packaged `harness-skills/` mirror package-relative | bundled skill mount — the repo-root `skills/` mirror synced by `bundle-assets` at build time (gitignored), resolved package-relative (NOT cwd-anchored). An explicit value wins; a RELATIVE override stays cwd-anchored, so pass an absolute path in the profile layer |
85
85
  | `catalogTtlMs` | unset → `60000` | pre-step catalog cache refresh interval (ms) — how often the per-workspace unified `mstar-engine-status` catalog row (watermark + iteration gate + workspace-state digest) re-reads `status.json` / the compass / the knowledge index; the hot path is a timestamp compare + cache hit between refreshes |
86
86
 
87
87
  ## Client half (workflow panel)
@@ -175,7 +175,7 @@ export declare function asRecord(value: unknown): Record<string, unknown> | unde
175
175
  export declare function resolveSeamHard(harnessDir: string | null, config: Config): boolean;
176
176
  /**
177
177
  * Resolve the plugin package's own `harness-skills/` mirror (synced from the
178
- * repo root by `bundle-assets` at build/postinstall; gitignored), anchored at
178
+ * repo root by `bundle-assets` at build time; gitignored), anchored at
179
179
  * the file URL of one module in the package. Pure — the caller passes its own
180
180
  * module URL string, so the dual-depth resolution is directly unit-testable
181
181
  * at either layout depth without touching `import.meta`. Resolved
@@ -207,7 +207,7 @@ export declare function resolvePackagedSkillsDir(fileUrl: string): string | unde
207
207
  export declare function packagedSkillsDir(): string | undefined;
208
208
  /**
209
209
  * Resolve the plugin package's own `harness-agents/` mirror (synced from the
210
- * repo root by `bundle-assets` at build/postinstall; gitignored) — the
210
+ * repo root by `bundle-assets` at build time; gitignored) — the
211
211
  * zero-config role-persona default source (plan
212
212
  * `20260815-dsh-fallbacks-personas` Task 3). Same dual-depth probe semantics
213
213
  * as {@link resolvePackagedSkillsDir}: `'../harness-agents'` (dist layout
@@ -289,7 +289,7 @@ export declare function iterationGateView(gate: GateResult): IterationGateListVi
289
289
  * registration happens.
290
290
  *
291
291
  * The bundled default is the package's OWN `harness-skills/` mirror (synced
292
- * from the repo root by `bundle-assets` at build/postinstall; gitignored),
292
+ * from the repo root by `bundle-assets` at build time; gitignored),
293
293
  * resolved package-relative — NOT cwd-anchored — so a deployment launching
294
294
  * from any cwd gets the bundled mount (this resolves the
295
295
  * cwd-anchoring limitation for the shipped default; an explicit