@mstar-harness/dsh 3.6.0-alpha.4 → 3.6.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.
- package/README.i18n.yaml +3 -3
- package/README.md +1 -1
- package/README.zh.md +1 -1
- package/dist/client.js +39 -16
- package/dist/index.js +57 -41
- package/dist/invariant.js +24 -8
- package/harness-skills/mstar-host/references/omp.md +11 -11
- package/package.json +28 -20
package/README.i18n.yaml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# packages/dsh README language-pair confirmation.
|
|
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:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: a791ed87500a5164387bbb72277bb1d09406937b
|
|
6
|
+
README.zh.md: 9c9cc7399c34045c52ab72167e4a40779c9f917e
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
English | [中文](README.zh.md)
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|
|
|
7
7
|
[Morning Star](https://github.com/btspoony/mstar-harness) as a first-class dsh (DeepSeek Harness) host — a cordis function plugin that mounts the mstar engine in-process, implements the engine `HostAdapter` (`host: 'dsh'`), guards `{HARNESS_DIR}/status.json` writes (validate + advisory; repair-escape under hard), blocks disallowed subagent dispatches when `Enforcement: hard` is on, lints `SKILL.md` writes under the mounted skill roots, mounts the mstar `skills/` mirror through the dsh skill-filesystem provider (single canonical mount), and appends a durable `mstar-engine-status` catalog row to every composed agent step. Boot with a dsh Loader app; everything acts through the seam's refusal/advisory channels, never by patching the tools.
|
|
8
8
|
|
package/README.zh.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) | 中文
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|
|
|
7
7
|
让 [Morning Star](https://github.com/btspoony/mstar-harness) 成为一等公民的 dsh(DeepSeek Harness)宿主——一个 cordis 函数插件,将 mstar engine 进程内挂载,实现 engine `HostAdapter`(`host: 'dsh'`),守护 `{HARNESS_DIR}/status.json` 写入(校验 + 咨询;hard 下按修复逃生放行),在 `Enforcement: hard` 开启时阻止被禁止的 subagent 派发,对挂载技能根下的 `SKILL.md` 写入执行技能撰写 lint,通过 dsh skill-filesystem 提供者挂载 mstar `skills/` 镜像(单一规范挂载),并向每个组合后的 agent 步骤追加一条持久化的 `mstar-engine-status` catalog 行。随 dsh Loader 应用启动;一切均通过 seam 的拒绝/咨询通道行使职责,从不改动工具本身。
|
|
8
8
|
|
package/dist/client.js
CHANGED
|
@@ -6,46 +6,69 @@ var __defProp = Object.defineProperty;
|
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
7
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
8
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
function __accessProp(key) {
|
|
10
|
+
return this[key];
|
|
11
|
+
}
|
|
12
|
+
var __toESMCache_node;
|
|
13
|
+
var __toESMCache_esm;
|
|
9
14
|
var __toESM = (mod, isNodeMode, target) => {
|
|
15
|
+
var canCache = mod != null && typeof mod === "object";
|
|
16
|
+
if (canCache) {
|
|
17
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
18
|
+
var cached = cache.get(mod);
|
|
19
|
+
if (cached)
|
|
20
|
+
return cached;
|
|
21
|
+
}
|
|
10
22
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
11
23
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
24
|
+
if (mod && typeof mod === "object" || typeof mod === "function") {
|
|
25
|
+
for (let key of __getOwnPropNames(mod))
|
|
26
|
+
if (!__hasOwnProp.call(to, key))
|
|
27
|
+
__defProp(to, key, {
|
|
28
|
+
get: __accessProp.bind(mod, key),
|
|
29
|
+
enumerable: true
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
if (canCache)
|
|
33
|
+
cache.set(mod, to);
|
|
18
34
|
return to;
|
|
19
35
|
};
|
|
20
|
-
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
21
36
|
var __toCommonJS = (from) => {
|
|
22
|
-
var entry = __moduleCache.get(from), desc;
|
|
37
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
23
38
|
if (entry)
|
|
24
39
|
return entry;
|
|
25
40
|
entry = __defProp({}, "__esModule", { value: true });
|
|
26
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
41
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
42
|
+
for (var key of __getOwnPropNames(from))
|
|
43
|
+
if (!__hasOwnProp.call(entry, key))
|
|
44
|
+
__defProp(entry, key, {
|
|
45
|
+
get: __accessProp.bind(from, key),
|
|
46
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
47
|
+
});
|
|
48
|
+
}
|
|
31
49
|
__moduleCache.set(from, entry);
|
|
32
50
|
return entry;
|
|
33
51
|
};
|
|
52
|
+
var __moduleCache;
|
|
53
|
+
var __returnValue = (v) => v;
|
|
54
|
+
function __exportSetter(name, newValue) {
|
|
55
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
56
|
+
}
|
|
34
57
|
var __export = (target, all) => {
|
|
35
58
|
for (var name in all)
|
|
36
59
|
__defProp(target, name, {
|
|
37
60
|
get: all[name],
|
|
38
61
|
enumerable: true,
|
|
39
62
|
configurable: true,
|
|
40
|
-
set: (
|
|
63
|
+
set: __exportSetter.bind(all, name)
|
|
41
64
|
});
|
|
42
65
|
};
|
|
43
66
|
|
|
44
67
|
// src/client/index.ts
|
|
45
68
|
var exports_client = {};
|
|
46
69
|
__export(exports_client, {
|
|
47
|
-
|
|
48
|
-
|
|
70
|
+
apply: () => apply,
|
|
71
|
+
inject: () => inject
|
|
49
72
|
});
|
|
50
73
|
module.exports = __toCommonJS(exports_client);
|
|
51
74
|
|
package/dist/index.js
CHANGED
|
@@ -3,21 +3,37 @@ var __getProtoOf = Object.getPrototypeOf;
|
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
function __accessProp(key) {
|
|
7
|
+
return this[key];
|
|
8
|
+
}
|
|
9
|
+
var __toESMCache_node;
|
|
10
|
+
var __toESMCache_esm;
|
|
6
11
|
var __toESM = (mod, isNodeMode, target) => {
|
|
12
|
+
var canCache = mod != null && typeof mod === "object";
|
|
13
|
+
if (canCache) {
|
|
14
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
15
|
+
var cached = cache.get(mod);
|
|
16
|
+
if (cached)
|
|
17
|
+
return cached;
|
|
18
|
+
}
|
|
7
19
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
8
20
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
21
|
+
if (mod && typeof mod === "object" || typeof mod === "function") {
|
|
22
|
+
for (let key of __getOwnPropNames(mod))
|
|
23
|
+
if (!__hasOwnProp.call(to, key))
|
|
24
|
+
__defProp(to, key, {
|
|
25
|
+
get: __accessProp.bind(mod, key),
|
|
26
|
+
enumerable: true
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (canCache)
|
|
30
|
+
cache.set(mod, to);
|
|
15
31
|
return to;
|
|
16
32
|
};
|
|
17
33
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
18
34
|
|
|
19
|
-
// ../../node_modules/cosmokit/lib/index.cjs
|
|
20
|
-
var require_lib = __commonJS((exports, module)
|
|
35
|
+
// ../../node_modules/.bun/cosmokit@1.8.1/node_modules/cosmokit/lib/index.cjs
|
|
36
|
+
var require_lib = __commonJS(function(exports, module) {
|
|
21
37
|
var __defProp2 = Object.defineProperty;
|
|
22
38
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
23
39
|
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
@@ -411,8 +427,8 @@ var require_lib = __commonJS((exports, module) => {
|
|
|
411
427
|
})(Time || (Time = {}));
|
|
412
428
|
});
|
|
413
429
|
|
|
414
|
-
// ../../node_modules/schemastery/lib/index.cjs
|
|
415
|
-
var require_lib2 = __commonJS((exports, module)
|
|
430
|
+
// ../../node_modules/.bun/schemastery@3.18.0/node_modules/schemastery/lib/index.cjs
|
|
431
|
+
var require_lib2 = __commonJS(function(exports, module) {
|
|
416
432
|
var __defProp2 = Object.defineProperty;
|
|
417
433
|
var __name = (target, value) => __defProp2(target, "name", { value, configurable: true });
|
|
418
434
|
var import_cosmokit = require_lib();
|
|
@@ -663,7 +679,7 @@ var require_lib2 = __commonJS((exports, module) => {
|
|
|
663
679
|
Schema.extend = /* @__PURE__ */ __name(function extend(type, resolve22) {
|
|
664
680
|
resolvers[type] = resolve22;
|
|
665
681
|
}, "extend");
|
|
666
|
-
Schema.resolve = /* @__PURE__ */ __name(function
|
|
682
|
+
Schema.resolve = /* @__PURE__ */ __name(function resolve4(data, schema, options = {}, strict = false) {
|
|
667
683
|
if (!schema)
|
|
668
684
|
return [data];
|
|
669
685
|
if (options.ignore?.(data, schema))
|
|
@@ -8573,35 +8589,35 @@ function apply(ctx, config) {
|
|
|
8573
8589
|
registerSeamTools(ctx, resolver);
|
|
8574
8590
|
}
|
|
8575
8591
|
export {
|
|
8576
|
-
|
|
8577
|
-
setRolePersonaLogger,
|
|
8578
|
-
setRolePersonaAgentsDir,
|
|
8579
|
-
setAdvisoryLogger,
|
|
8580
|
-
runFallbacksAdvisory,
|
|
8581
|
-
registerRolePersonaChannel,
|
|
8582
|
-
recordWorkflowVerdict,
|
|
8583
|
-
recordSettle,
|
|
8584
|
-
recordDispatch,
|
|
8585
|
-
readAgentFlow,
|
|
8586
|
-
name,
|
|
8587
|
-
lintSkillWrite,
|
|
8588
|
-
lintSkillDoc,
|
|
8589
|
-
lintSeamWrite,
|
|
8590
|
-
lintRolesWrite,
|
|
8591
|
-
lintDesignMdWrite,
|
|
8592
|
-
lintCompoundWrite,
|
|
8593
|
-
lintAuditWrite,
|
|
8594
|
-
inject,
|
|
8595
|
-
apply,
|
|
8596
|
-
SkillLintVetoError,
|
|
8597
|
-
SeamVetoError,
|
|
8598
|
-
SETTLE_SEAM,
|
|
8599
|
-
ROLE_PERSONA_LOGGER,
|
|
8600
|
-
HarnessResolver,
|
|
8601
|
-
DshMstar,
|
|
8602
|
-
DshHostAdapter,
|
|
8603
|
-
Config,
|
|
8604
|
-
AGENT_FLOW_MAX_EVENTS,
|
|
8592
|
+
ADVISORY_LOGGER,
|
|
8605
8593
|
AGENT_FLOW_FILE,
|
|
8606
|
-
|
|
8594
|
+
AGENT_FLOW_MAX_EVENTS,
|
|
8595
|
+
Config,
|
|
8596
|
+
DshHostAdapter,
|
|
8597
|
+
DshMstar,
|
|
8598
|
+
HarnessResolver,
|
|
8599
|
+
ROLE_PERSONA_LOGGER,
|
|
8600
|
+
SETTLE_SEAM,
|
|
8601
|
+
SeamVetoError,
|
|
8602
|
+
SkillLintVetoError,
|
|
8603
|
+
apply,
|
|
8604
|
+
inject,
|
|
8605
|
+
lintAuditWrite,
|
|
8606
|
+
lintCompoundWrite,
|
|
8607
|
+
lintDesignMdWrite,
|
|
8608
|
+
lintRolesWrite,
|
|
8609
|
+
lintSeamWrite,
|
|
8610
|
+
lintSkillDoc,
|
|
8611
|
+
lintSkillWrite,
|
|
8612
|
+
name,
|
|
8613
|
+
readAgentFlow,
|
|
8614
|
+
recordDispatch,
|
|
8615
|
+
recordSettle,
|
|
8616
|
+
recordWorkflowVerdict,
|
|
8617
|
+
registerRolePersonaChannel,
|
|
8618
|
+
runFallbacksAdvisory,
|
|
8619
|
+
setAdvisoryLogger,
|
|
8620
|
+
setRolePersonaAgentsDir,
|
|
8621
|
+
setRolePersonaLogger,
|
|
8622
|
+
skillLocalConfig
|
|
8607
8623
|
};
|
package/dist/invariant.js
CHANGED
|
@@ -3,15 +3,31 @@ var __getProtoOf = Object.getPrototypeOf;
|
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
function __accessProp(key) {
|
|
7
|
+
return this[key];
|
|
8
|
+
}
|
|
9
|
+
var __toESMCache_node;
|
|
10
|
+
var __toESMCache_esm;
|
|
6
11
|
var __toESM = (mod, isNodeMode, target) => {
|
|
12
|
+
var canCache = mod != null && typeof mod === "object";
|
|
13
|
+
if (canCache) {
|
|
14
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
15
|
+
var cached = cache.get(mod);
|
|
16
|
+
if (cached)
|
|
17
|
+
return cached;
|
|
18
|
+
}
|
|
7
19
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
8
20
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
21
|
+
if (mod && typeof mod === "object" || typeof mod === "function") {
|
|
22
|
+
for (let key of __getOwnPropNames(mod))
|
|
23
|
+
if (!__hasOwnProp.call(to, key))
|
|
24
|
+
__defProp(to, key, {
|
|
25
|
+
get: __accessProp.bind(mod, key),
|
|
26
|
+
enumerable: true
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (canCache)
|
|
30
|
+
cache.set(mod, to);
|
|
15
31
|
return to;
|
|
16
32
|
};
|
|
17
33
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
@@ -23,7 +39,7 @@ var inject = ["invariants"];
|
|
|
23
39
|
var install = () => {};
|
|
24
40
|
var apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
|
|
25
41
|
export {
|
|
26
|
-
|
|
42
|
+
apply,
|
|
27
43
|
inject,
|
|
28
|
-
|
|
44
|
+
name
|
|
29
45
|
};
|
|
@@ -8,17 +8,17 @@ Parallel PM dispatch: read **`parallel-dispatch.md`** when dispatching **N ≥ 2
|
|
|
8
8
|
|
|
9
9
|
## omp-only context
|
|
10
10
|
|
|
11
|
-
- Plugin markers: **`.omp-plugin/plugin.json`** (Morning Star host marker) and **`.claude-plugin/plugin.json`** (Claude-compatible marketplace discovery).
|
|
12
|
-
- Runtime skills: repo `skills/` discovered after `omp plugin install` / `omp plugin link` (OMP extension-package sub-discovery) or Claude marketplace install.
|
|
13
|
-
- Plugin commands:
|
|
14
|
-
- Plugin agents:
|
|
11
|
+
- Plugin markers: **`.omp-plugin/plugin.json`** (Morning Star host marker) and **`.claude-plugin/plugin.json`** (Claude-compatible marketplace discovery). The **npm package** (`@mstar-harness/omp`) ships its own package-root `plugin.json` + `skills/` + `commands/` + `agents/` + `hooks/` + `tools/` mirrors; the **maintainer link path** is now `<repo>/packages/omp` (built) — hooks/tools moved into the package (2026-09-03), so linking the repo root provides skills/commands/agents only, with NO runtime gates.
|
|
12
|
+
- Runtime skills: package `skills/` (or repo `skills/` on the link path) discovered after `omp plugin install` / `omp plugin link` (OMP extension-package sub-discovery) or Claude marketplace install.
|
|
13
|
+
- Plugin commands: `commands/<name>.md` → slash **`/<name>`** (e.g. `/iteration-start`). omp uses the **filename** as the command name (no `morning-star-harness:` prefix).
|
|
14
|
+
- Plugin agents: **`agents/*.md`** are discovered into the live **`task.agent`** list after install/link + reload. Morning Star **subagent** role ids (`product-manager`, `architect`, `fullstack-dev`, `qc-specialist`, …) are valid `agent` values **when listed** — see C5. `project-manager` is **`mode: primary`** (orchestration seat), not a typical `task` dispatch target.
|
|
15
15
|
- **No Kimi-style `sessionStart.skill`** — enter PM manually via **`/skill:pm`** (or the `pm` skill), then **Read next** → `mstar-harness-core` → `project-manager.md`.
|
|
16
16
|
- Install (user-scoped, recommended):
|
|
17
|
-
- `omp plugin install
|
|
17
|
+
- `omp plugin install @mstar-harness/omp`
|
|
18
18
|
- or CLI: `npx @mstar-harness/cli init --target omp --scope global` (links `~/.mstar/harness`)
|
|
19
|
-
- Project scope: `omp plugin install
|
|
20
|
-
- Local maintainers: `omp plugin link /path/to/mstar-harness` (or the CLI-managed `~/.mstar/harness` checkout).
|
|
21
|
-
- After install/link: `omp plugin list` should show package **`morning-star`** (root `package.json` name). Reload / new session to pick up skills, commands, and agents.
|
|
19
|
+
- Project scope: `omp plugin install @mstar-harness/omp --scope project` or `npx @mstar-harness/cli init --target omp --scope project`.
|
|
20
|
+
- Local maintainers: `omp plugin link /path/to/mstar-harness/packages/omp` (or the CLI-managed `~/.mstar/harness/packages/omp` checkout) — the linked package tree resolves the engine via the workspace member, so run `bun install && bun run engine:build && bun run --cwd packages/omp build` in the checkout first. Linking the repo root no longer provides the runtime gates (hooks/tools moved into the package); the npm install stays the primary path.
|
|
21
|
+
- After install/link: `omp plugin list` should show package **`@mstar-harness/omp`** (npm) or **`morning-star`** (root `package.json` name, link path). Reload / new session to pick up skills, commands, and agents.
|
|
22
22
|
|
|
23
23
|
## Skill loading
|
|
24
24
|
|
|
@@ -210,10 +210,10 @@ Cannot emit required **N** → **`Blocked`**.
|
|
|
210
210
|
|
|
211
211
|
## In-process engine binding (omp ≥ 17.2.11)
|
|
212
212
|
|
|
213
|
-
- **Surfaces** (
|
|
213
|
+
- **Surfaces** (npm package root = plugin root; sources live in `packages/omp/src/`): `hooks/pre/mstar-gates.js` — one `tool_call` pre-hook that returns `{ block: true, reason }` (structured refusal the model sees as the tool error) or `undefined` (pass); `tools/mstar_{status_validate,dispatch_validate,lease_verify,path_resolve,iteration_gate,worktree_check}.js` — six model-callable validator tools (engine validators only, Zod params via `pi.zod`). omp discovers these by convention from the installed package root (`<pkg>/hooks/pre/` any file, `<pkg>/tools/` direct `*.js` files — the sub-directory scan only accepts `tools/<name>/index.ts`), not from `dist/`.
|
|
214
214
|
|- **Enforcement semantics**: block ONLY under `Enforcement: hard`. Both gates read the repo `.mstarc` `[config] enforcement`, else the harness compass frontmatter (`enforcement: hard`, active/locked iterations only); the dispatch gate ALSO honors each Assignment's own header flag (`assignmentHeaderRegion` — a body example never hardens). A hard repo setting therefore hardens flag-less dispatches (Gate 1 / dsh `resolveDispatchHard` parity). Soft-mode dispatch violations are warn-logged through the extension logger (never blocked); soft status-write violations stay a silent pass. Rollback = unset the flag (or `.mstarc` `soft`). Never global.
|
|
215
215
|
- **Anti-recursion scope (issue #156)**: the engine's `antiRecursionPrecheck` is **caller-scoped** — it compares the DISPATCHING agent's own role against the new Assignment's `Execute as`. omp's `tool_call` event carries no caller identity and the task entry `agent` is the spawn TARGET, which equals `Execute as` on every compliant dispatch (C5 above) — so Gate 2 does NOT run the precheck on omp (the pre-#156 wiring hard-blocked every compliant hard-mode dispatch on `self-type`, or on `empty-binding` when `agent` was omitted). The NEVER red line stays prompt-level on this host (`mstar-dispatch-gates`); dsh enforces it in-engine via Config `dispatchBinding`.
|
|
216
|
-
- **Engine dependency**: the
|
|
216
|
+
- **Engine dependency**: the npm package **bundles the engine inline** into every hook/tool bundle at build time — zero runtime package resolution, so module link can never fail on a missing package (the 2026-09-03 hotfix for the bare-import load failure). The maintainer `omp plugin link` path (now `<repo>/packages/omp`) still resolves the engine via the workspace member — run `bun install && bun run engine:build && bun run --cwd packages/omp build` in the checkout first (the member's `dist/` and the package's generated mirrors are gitignored).
|
|
217
217
|
- **Graceful degradation (explicit)**: module load failure → `mstar_*` tools skipped, hook absent (no blocking), `commands/*.md` shell-out fallback intact. Caveat: a partial failure is SILENT — no in-band signal that gates are off; verify with `omp -p '/extensions'`.
|
|
218
218
|
|- **`MSTAR_HARNESS_DIR` override / `.mstarc`**: the hook and tools discover `{HARNESS_DIR}` via `resolveHarnessDir` — a repo `.mstarc` `[config] harness_dir` (gitignored local config) first, then the probe `.mstar/` → `.agents/` → `.plans/`/`plans/`. Repos using a non-standard harness root can declare it in `.mstarc` or MUST export `MSTAR_HARNESS_DIR` (absolute path) in the omp session env — without either the status gate does not cover those roots and tools like `mstar_path_resolve` / `mstar_lease_verify` error out (parity with the opencode binding).
|
|
219
219
|
- **Edit-path limitation**: the status gate validates the on-disk file for `edit` events (pre-edit state) — a corrupting edit is caught by the next write or `mstar_status_validate` (known v1 limitation, parity with opencode).
|
|
@@ -234,7 +234,7 @@ Cannot emit required **N** → **`Blocked`**.
|
|
|
234
234
|
|
|
235
235
|
## Gotchas
|
|
236
236
|
|
|
237
|
-
- Installed npm
|
|
237
|
+
- Installed npm plugin package name is **`@mstar-harness/omp`** (git/link path: root **`morning-star`**); Morning Star display name remains **morning-star-harness**.
|
|
238
238
|
- Marketplace (Claude) installs and `omp plugin install` are different discovery providers — prefer one install path per machine to avoid duplicate skill listings.
|
|
239
239
|
- Session plan UI / todos are not durable SSOT unless mirrored to `{HARNESS_DIR}`.
|
|
240
240
|
- After install/link, **reload / new session** so `agents/*.md` appear in the live `task.agent` list — stale sessions may only show host generics and wrongly push you to `agent: "task"`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mstar-harness/dsh",
|
|
3
|
-
"version": "3.6.0
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"description": "Morning Star harness dsh (DeepSeek Harness) cordis function plugin — in-process engine gates (status/dispatch/lease) with hard refusal channels.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dsh",
|
|
@@ -65,24 +65,32 @@
|
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
67
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
68
|
-
"@deepseek-ai/dsh-agent": "^0.1.2-
|
|
69
|
-
"@deepseek-ai/dsh-api-session-controller": "^0.1.2-
|
|
70
|
-
"@deepseek-ai/dsh-client-locale": "^0.1.2-
|
|
71
|
-
"@deepseek-ai/dsh-client-store": "^0.1.2-
|
|
72
|
-
"@deepseek-ai/dsh-client-ui-chat": "^0.1.2-
|
|
73
|
-
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-
|
|
74
|
-
"@deepseek-ai/dsh-client-ui-
|
|
75
|
-
"@deepseek-ai/dsh-client-ui-
|
|
76
|
-
"@deepseek-ai/dsh-
|
|
77
|
-
"@deepseek-ai/dsh-
|
|
78
|
-
"@deepseek-ai/dsh-
|
|
79
|
-
"@deepseek-ai/dsh-
|
|
80
|
-
"@deepseek-ai/dsh-
|
|
81
|
-
"@deepseek-ai/dsh-
|
|
82
|
-
"@deepseek-ai/dsh-
|
|
83
|
-
"@deepseek-ai/dsh-
|
|
84
|
-
"@deepseek-ai/dsh-
|
|
85
|
-
"@deepseek-ai/dsh-
|
|
68
|
+
"@deepseek-ai/dsh-agent": "^0.1.2-rc.1",
|
|
69
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.2-rc.1",
|
|
70
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.2-rc.1",
|
|
71
|
+
"@deepseek-ai/dsh-client-store": "^0.1.2-rc.1",
|
|
72
|
+
"@deepseek-ai/dsh-client-ui-chat": "^0.1.2-rc.1",
|
|
73
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-rc.1",
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-rc.1",
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-rc.1",
|
|
76
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.2-rc.1",
|
|
77
|
+
"@deepseek-ai/dsh-commands": "^0.1.2-rc.1",
|
|
78
|
+
"@deepseek-ai/dsh-fs": "^0.1.2-rc.1",
|
|
79
|
+
"@deepseek-ai/dsh-invariants": "^0.1.2-rc.1",
|
|
80
|
+
"@deepseek-ai/dsh-jobs": "^0.1.2-rc.1",
|
|
81
|
+
"@deepseek-ai/dsh-llm": "^0.1.2-rc.1",
|
|
82
|
+
"@deepseek-ai/dsh-scope": "^0.1.2-rc.1",
|
|
83
|
+
"@deepseek-ai/dsh-session": "^0.1.2-rc.1",
|
|
84
|
+
"@deepseek-ai/dsh-settings": "^0.1.2-rc.1",
|
|
85
|
+
"@deepseek-ai/dsh-skill": "^0.1.2-rc.1",
|
|
86
|
+
"@deepseek-ai/dsh-skill-filesystem": "^0.1.2-rc.1",
|
|
87
|
+
"@deepseek-ai/dsh-subagent": "^0.1.2-rc.1",
|
|
88
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.2-rc.1",
|
|
89
|
+
"@deepseek-ai/dsh-tools": "^0.1.2-rc.1",
|
|
90
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.2-rc.1",
|
|
91
|
+
"@deepseek-ai/dsh-util-time": "^0.1.2-rc.1",
|
|
92
|
+
"@deepseek-ai/dsh-util-workspace-path": "^0.1.2-rc.1",
|
|
93
|
+
"@deepseek-ai/schemastery": "^3.18.1"
|
|
86
94
|
},
|
|
87
95
|
"publishConfig": {
|
|
88
96
|
"access": "public"
|
|
@@ -93,7 +101,7 @@
|
|
|
93
101
|
"@types/react": "~18.3.1",
|
|
94
102
|
"js-yaml": "^4.1.0",
|
|
95
103
|
"bun-types": "^1.2.17",
|
|
96
|
-
"dsh-llm-fallbacks": "
|
|
104
|
+
"dsh-llm-fallbacks": "0.4.1",
|
|
97
105
|
"schemastery": "^3.18.0",
|
|
98
106
|
"typescript": "^5.9.3",
|
|
99
107
|
"vitest": "^4.1.8",
|