@mstar-harness/dsh 3.8.0 → 3.8.1
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 +2 -2
- package/README.md +126 -188
- package/README.zh.md +13 -11
- package/bundle/README.md +83 -171
- package/dist/client/index.d.ts +17 -8
- package/dist/client/panel/MstarPanelTitle.d.ts +13 -0
- package/dist/client/panel/PanelView.d.ts +56 -52
- package/dist/client/panel/TabNav.d.ts +17 -14
- package/dist/client/panel/definition.d.ts +23 -0
- package/dist/client/panel/graph/project-graph.d.ts +9 -51
- package/dist/client/panel/graph/schema.d.ts +1 -2
- package/dist/client/panel/locale.d.ts +1 -1
- package/dist/client/panel/mstar-glyph.d.ts +22 -0
- package/dist/client/panel/pages/AgentListPage.d.ts +71 -0
- package/dist/client/panel/pages/EventLogPage.d.ts +7 -4
- package/dist/client/panel/pages/IterationInfoSection.d.ts +16 -13
- package/dist/client/panel/pages/IterationTaskPage.d.ts +13 -14
- package/dist/client/panel/panel-store.d.ts +28 -0
- package/dist/client/panel/sidebar.d.ts +10 -5
- package/dist/client/panel/use-mstar-engine-status.d.ts +11 -10
- package/dist/client/panel/zones/Legend.d.ts +5 -3
- package/dist/client/panel/zones/TaskBoard.d.ts +13 -9
- package/dist/client.js +697 -1199
- package/dist/gates/catalog.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/types.d.ts +14 -7
- package/harness-skills/mstar-host/references/dsh.md +91 -225
- package/package.json +65 -63
- package/dist/client/panel/pages/AgentCanvasPage.d.ts +0 -345
package/dist/gates/catalog.d.ts
CHANGED
|
@@ -60,7 +60,7 @@ export declare function buildCatalogPayload(ctx: Context, harnessDir: string | n
|
|
|
60
60
|
* Advisory `agent/pre-step` waterfall listener (agent
|
|
61
61
|
* catalog): delegates through `next()` (never `reject` — that would block the
|
|
62
62
|
* step — and never replaces the delegated messages) and appends the ONE
|
|
63
|
-
* unified `mstar-engine
|
|
63
|
+
* unified `mstar-engine` catalog message to the composed step
|
|
64
64
|
* messages, so the durable session log carries it (model-visible ⟺ logged,
|
|
65
65
|
* MessageSource form): the `<mstar_engine_status>` block renders the
|
|
66
66
|
* watermark fields (version, harness dir, enforcement), plus the iteration
|
package/dist/index.js
CHANGED
|
@@ -5896,7 +5896,7 @@ function pluginVersion() {
|
|
|
5896
5896
|
return "0.0.0";
|
|
5897
5897
|
}
|
|
5898
5898
|
function engineStatusSource() {
|
|
5899
|
-
return { kind: "plugin", plugin: "mstar-engine
|
|
5899
|
+
return { kind: "plugin", plugin: "mstar-engine", form: "catalog" };
|
|
5900
5900
|
}
|
|
5901
5901
|
function engineStatusPayload(harnessDir) {
|
|
5902
5902
|
const iteration = harnessDir !== null ? iterationGateSource(harnessDir) : undefined;
|
|
@@ -6393,7 +6393,7 @@ function persistEngineStatusSnapshot(ctx, harnessDir, cwd, turn, catalogPayload,
|
|
|
6393
6393
|
// src/engine-status-endpoint.ts
|
|
6394
6394
|
import { isAbsolute as isAbsolute3 } from "node:path";
|
|
6395
6395
|
|
|
6396
|
-
// ../../node_modules/.bun/@deepseek-ai+dsh-typert-protocol@0.1.5-rc.
|
|
6396
|
+
// ../../node_modules/.bun/@deepseek-ai+dsh-typert-protocol@0.1.5-rc.2+1e4e7adc57ac8890/node_modules/@deepseek-ai/dsh-typert-protocol/lib/index.js
|
|
6397
6397
|
import { Service as Service2 } from "@deepseek-ai/cordis";
|
|
6398
6398
|
var TYPERT_REMOTE_SEGMENT_PATTERN = /^[A-Za-z0-9_$.-]+$/;
|
|
6399
6399
|
function isTypertRemoteSegment(value) {
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `mstar-engine
|
|
2
|
+
* `mstar-engine` catalog source + payload: the durable `catalog`-form
|
|
3
3
|
* MessageSource the plugin appends to every composed step at
|
|
4
4
|
* `agent/pre-step`, so the model-visible engine-status row is
|
|
5
5
|
* reconstructable from the session log without re-parsing its prose
|
|
@@ -25,15 +25,22 @@ import type { EnforcementFlag } from '@mstar-harness/engine';
|
|
|
25
25
|
* `plugin` arm with a CLOSED member set — exactly these three keys, never a
|
|
26
26
|
* fourth.
|
|
27
27
|
*
|
|
28
|
-
* `plugin` carries the plugin's identity
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
28
|
+
* `plugin` carries the plugin's identity and `form: 'catalog'` the row's
|
|
29
|
+
* first-party presentation; both are opaque, already-admitted vocabulary at
|
|
30
|
+
* every released session-format edge. Everything the row publishes about the
|
|
31
|
+
* workspace lives in {@link MstarEngineStatusPayload}, which never rides
|
|
32
|
+
* `source`.
|
|
33
|
+
*
|
|
34
|
+
* The `plugin` union is the PERSISTED-LOG vocabulary, not a write-time
|
|
35
|
+
* choice: the plugin emits `mstar-engine`, while rows emitted by shipped
|
|
36
|
+
* builds before 2026-09-11 persist `mstar-engine-status` in already-written
|
|
37
|
+
* session logs. Both are valid persisted rows; the panel's anchor reader
|
|
38
|
+
* accepts both (data compat for persisted session logs, not a code-compat
|
|
39
|
+
* layer).
|
|
33
40
|
*/
|
|
34
41
|
export interface MstarEngineStatusSource {
|
|
35
42
|
readonly kind: 'plugin';
|
|
36
|
-
readonly plugin: 'mstar-engine-status';
|
|
43
|
+
readonly plugin: 'mstar-engine' | 'mstar-engine-status';
|
|
37
44
|
readonly form: 'catalog';
|
|
38
45
|
}
|
|
39
46
|
/**
|
|
@@ -34,226 +34,94 @@ or a custom profile).
|
|
|
34
34
|
- Web client plugin (workflow panel): the same `mstar` bundle row carries a
|
|
35
35
|
browser client half (`dsh.client` + `exports["./client"]`) discovered
|
|
36
36
|
automatically by `ClientModuleHostService` — no separate profile layer or
|
|
37
|
-
install step. It registers a
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
install step. It registers a **right-Sidebar page tab type** (`id:
|
|
38
|
+
'@mstar-harness/dsh'`, `kind: 'mstar-workflow'`, one guide-page capsule at
|
|
39
|
+
`order: 20`) labeled **"启明星工作流" / "Morning
|
|
40
|
+
Star Workflow"** rendering the latest `mstar-engine` catalog **anchor** row
|
|
40
41
|
— the persisted source is the bare first-party `plugin` arm
|
|
41
|
-
(`{ kind: 'plugin', plugin: 'mstar-engine
|
|
42
|
-
payload members
|
|
42
|
+
(`{ kind: 'plugin', plugin: 'mstar-engine', form: 'catalog' }`, no
|
|
43
|
+
payload members; the anchor reader also accepts the legacy
|
|
44
|
+
`mstar-engine-status` identity from persisted logs), and the payload is fetched from the host's
|
|
43
45
|
`/api/mstar/engineStatus` endpoint (the gateway owns the route; the browser
|
|
44
46
|
half calls `connection.rpc.call('/api', 'mstar/engineStatus', { args: { sessionId, cwd } })`
|
|
45
|
-
and renders the session's stored snapshot, or an explicit unavailable
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
step
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
plan `
|
|
72
|
-
|
|
73
|
-
`
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
`
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
highlight, un-evidenced stages render the dashed "待执行" pending
|
|
124
|
-
placeholder with their expected role chips, un-evidenced KNOWN_AGENTS
|
|
125
|
-
members render dashed idle cards (the full 14-role roster is never
|
|
126
|
-
hidden), and the header shows the `N executing · M pending` summary.
|
|
127
|
-
Cards carry the projected **emphasis tier** (plan
|
|
128
|
-
`20260812-panel-f5-design-system` Task 4, design doc §3): `emphasis:
|
|
129
|
-
'current' | 'next' | 'off' | null` — the iteration's current-phase roles
|
|
130
|
-
render at **100%** chrome intensity, later-phase expected roles at **75%**,
|
|
131
|
-
already-passed / stage-less (on-demand, general) roles at **45%**, and
|
|
132
|
-
`null` (no iteration / unresolved transition) applies NO override — always
|
|
133
|
-
a chrome **alpha mix** (`--mstar-canvas-emphasis-*` tokens; never a
|
|
134
|
-
whole-card `opacity`, so the status point + running glow stay opaque).
|
|
135
|
-
Settled entities get a **standalone GREEN done frame + green ✓** (plan
|
|
136
|
-
`20260812-panel-f5-design-system` Task 8, user round-4 decisions #1/#3:
|
|
137
|
-
`data-agent-done="true"` — a full-strength success border + 1px ring on
|
|
138
|
-
the rounded card body + the ✓ in the status point) **ONLY when
|
|
139
|
-
`emphasis ≠ 'off'`** — an off-tier role (already-passed / stage-less
|
|
140
|
-
on-demand + general) renders the muted dot instead and NEVER shows the
|
|
141
|
-
completion marker (the completed state never appears on a stage-less
|
|
142
|
-
role). The canvas filters to the CURRENT iteration only (plan
|
|
143
|
-
`20260813-panel-quick-fixes` Task 2): dispatch evidence projects for the
|
|
144
|
-
current iteration's plans — the steering compass `iterationId` when
|
|
145
|
-
active, else the nearest iteration derived from the catalog
|
|
146
|
-
`plans[].iterationRefs` (the most-recent plan's refs by 8-digit id date
|
|
147
|
-
prefix + doneAt); provably cross-iteration events produce no entity/edge
|
|
148
|
-
(the roster keeps its idle cards); plan-less / unknown-plan / standalone
|
|
149
|
-
dispatches are never hidden. Status honesty (Task 2): `advisory` is NO
|
|
150
|
-
LONGER terminal — a soft-enforcement dispatch falls through to its paired
|
|
151
|
-
settle (green ✓ when a settle exists, `running` when none) while `denied`
|
|
152
|
-
stays terminal; the advisory verdict still renders in the event log. The
|
|
153
|
-
canvas legend sits BELOW the viewport (Task 3 — moved from above, user
|
|
154
|
-
2026-08-13 feedback).
|
|
155
|
-
Edges (plan `20260812-panel-f5-design-system` Task 5, design doc §2):
|
|
156
|
-
the `expected` stage skeleton arrows AND the ANIMATED **next** edge (the
|
|
157
|
-
former `@keyframes agent-dash-flow` dash-flow arrow of plan
|
|
158
|
-
`20260810-panel-agent-flow-zone`) are **REMOVED** — flow order is implied
|
|
159
|
-
by the fixed column order + column labels, the current position by the
|
|
160
|
-
running card glow + status point — leaving TWO semantic kinds: the
|
|
161
|
-
evidence-driven **`actual` handoff** edges (same-plan ts-adjacent dispatch
|
|
162
|
-
entity-key pairs, `general` endpoints filtered, ≤1 per entity pair) drawn
|
|
163
|
-
as **bezier `C` curves** anchored to card **PORTS** — 4 fixed
|
|
164
|
-
edge-midpoint ports (north / south / east / west; static-invisible,
|
|
165
|
-
hover-revealed as small dots) with the arrow tip pulled back to a **10px
|
|
166
|
-
standoff** off the port — the arrow follows the line's local tangent at
|
|
167
|
-
the anchor (**H1**), and no line's stroke or arrow crosses any text
|
|
168
|
-
(**H2**: standoff + side-gap routing, design doc §2.0/§2.5/§2.6;
|
|
169
|
-
tightened in plan `20260813-panel-quick-fixes` Task 3 — same-column
|
|
170
|
-
vertical flows whose center-x line would cross an in-between card body
|
|
171
|
-
(e.g. fullstack-dev → frontend-dev skipping an idle fullstack-dev-2)
|
|
172
|
-
reroute into the column's LEFT side gap, forward AND reverse, and reverse
|
|
173
|
-
horizontal beziers keep direction-aware control points BETWEEN the
|
|
174
|
-
endpoints so they never bulge into the adjacent column) — plus
|
|
175
|
-
the **bidirectional supervise line** (plan `20260812-panel-f5-agent-layout`
|
|
176
|
-
Task 1/2) — ONE static design-knowledge sub-bucket edge inside the
|
|
177
|
-
`sdd-implement` column (implementor ↔ sdd-reviewer — the mstar-sdd
|
|
178
|
-
mutual-supervision contract), now anchored at the **side-gap vertical
|
|
179
|
-
anchor** (`x = card right edge + 18px`, vertical bezier flow, arrows along
|
|
180
|
-
the vertical tangent — design doc §2.5/§2.7); dim dashed by default, lit
|
|
181
|
-
business SOLID when the projected `evidenced` flag is true —
|
|
182
|
-
evidence-driven lighting, never a fabricated activation); the 事件记录 tab
|
|
183
|
-
(`EventLogPage`, spec panel-tabs §5, plan `20260811-panel-event-log`) is a
|
|
184
|
-
NON-canvas log page with two partitions — **Agent 流转事件** (`view.events`
|
|
185
|
-
≤50 latest-first; off-pipeline unexpected dispatches fold in once via
|
|
186
|
-
`expected: false` and carry a dispatch-only 「未匹配角色」 badge — settle
|
|
187
|
-
rows are completion records and never flag as unexpected) and **违规记录**
|
|
188
|
-
(`view.violations`, gate violations with severity/code/message); every row
|
|
189
|
-
is an expandable native `<details>` (no-JS, keyboard-accessible) whose body
|
|
190
|
-
shows the full catalog fields — missing fields render「—」, never a guessed
|
|
191
|
-
value. Layout (plan `20260811-panel-f3-agent-general`): the two partitions
|
|
192
|
-
render SIDE BY SIDE in a locked-height two-column grid
|
|
193
|
-
(`repeat(2, minmax(0, 1fr))` — the page never scrolls as a whole; each
|
|
194
|
-
partition pins its title and owns an internal `overflow-y` scroll on its
|
|
195
|
-
row list; plan `20260813-panel-quick-fixes` Task 4 root-caused the
|
|
196
|
-
whole-page scroll — the panel root opts into the host
|
|
197
|
-
`data-conversation-composer-overlay` (the host's documented full-height
|
|
198
|
-
opt-in), so the host `.viewArea` becomes a definite-height container and
|
|
199
|
-
`height:100%` resolves: `.rowList`'s `overflow-y: auto` now scrolls
|
|
200
|
-
INSIDE the partition and the host page no longer scrolls, with bottom
|
|
201
|
-
clearance reserving the floating composer via the host-published
|
|
202
|
-
`--dsh-composer-height`), falling back to two stacked 50/50 locked rows
|
|
203
|
-
below 1200px —
|
|
204
|
-
the `data-event-log-*` anchor family is unchanged. The canvas-corner **`AgentEventDock`** is REMOVED with the page
|
|
205
|
-
(无双份日志 — its row layout + status chips migrated into `EventLogPage`);
|
|
206
|
-
the fixed footer bar (zone legend + gate summary + violations) died with
|
|
207
|
-
the WorkflowCanvas in plan `20260811-panel-tabs-shell` — the footer that
|
|
208
|
-
remains is the freshness marker. Empty branches (spec §2 — plan
|
|
209
|
-
`20260812-panel-f5-agent-layout` Task 3): waiting keeps the muted hint,
|
|
210
|
-
and NO harness renders a **CENTERED inactive-state card** (folder icon +
|
|
211
|
-
「No Morning Star harness detected」 title + the hint copy — the detail
|
|
212
|
-
panel stays inactive, no tabs / no sidebar, activating automatically once
|
|
213
|
-
a harness is detected; the `data-mstar-empty="no-harness"` anchor stays on
|
|
214
|
-
the title, `data-mstar-graph` on the main container). Below 1200px
|
|
215
|
-
the zones stack vertically. Pure `projectGraph` projection (never throws,
|
|
216
|
-
explicit degraded states — muted empty states, never orange warn boxes).
|
|
217
|
-
The branches block left the sidebar in plan `20260810-panel-sidebar-info`
|
|
218
|
-
(its anchor fields ride the row's per-session snapshot payload, NOT the
|
|
219
|
-
persisted source — the source is the bare first-party `plugin` arm; the
|
|
220
|
-
iteration zone renders them via plan `20260810-panel-canvas-zones`); refresh
|
|
221
|
-
follows the session snapshot, no polling — while the main agent is ACTIVELY
|
|
222
|
-
orchestrating, a
|
|
223
|
-
ledger record (dispatch/settle) invalidates the workspace's TTL-cached
|
|
224
|
-
catalog row so the next pre-step rebuilds and (digest text change)
|
|
225
|
-
re-injects it, and the panel refreshes per step (seconds, not the 60 s TTL);
|
|
226
|
-
while the main agent IDLES (waiting, no tool calls) the panel keeps the
|
|
227
|
-
LAST snapshot — no live push channel (documented limit, plan
|
|
228
|
-
`20260811-panel-f4-timeliness`). Bundle served at
|
|
229
|
-
`/plugins/@mstar-harness/dsh/client.js` (closure-factory CJS with NO graph
|
|
230
|
-
library inlined — react-flow removed; the build asserts the bundle contains
|
|
231
|
-
no `xyflow`/`reactflow` markers, no `@deepseek-ai/*` value imports, and no
|
|
232
|
-
`import.meta` / ESM statements — the loader runs plugin bundles as classic
|
|
233
|
-
scripts). **Known limitations**: the stepper's Step 1 (iteration-start) IS
|
|
234
|
-
the current step while the steering compass is `status: active` (Phase 1 in
|
|
235
|
-
flight — catalog `compassStatus` field), carrying NO PASS/FAIL badge (Phase
|
|
236
|
-
1 has no gate verdict); Step 5 (merge-ready) can never be the CURRENT step —
|
|
237
|
-
the engine phase gate only evaluates Phase 2→3→4 (merge-ready is never a gate
|
|
238
|
-
transition); it renders `next` only while Step 4 (pr-delivery) is current,
|
|
239
|
-
idle otherwise;
|
|
240
|
-
the current step follows the TTL-refreshed `compassStatus` — up to one
|
|
241
|
-
catalog interval (60 s) behind a mid-session `active`→`locked` flip (bounded,
|
|
242
|
-
documented staleness, never a wrong verdict); the agent-entity
|
|
243
|
-
status derivation pairs a PAIRED settle exactly by its dispatch identity
|
|
244
|
-
(`agent`, `role`, `planId`, `taskId` — under QC-tri N=3 concurrency each
|
|
245
|
-
settle lands on ITS dispatch), and an unpaired dispatch stays `running`
|
|
246
|
-
(no paired settle — never guessed, never faked); the current-iteration
|
|
247
|
-
filter with NO steering compass infers the iteration from plan ids
|
|
248
|
-
(8-digit date prefix) + doneAt — deterministic, documented heuristic, and
|
|
249
|
-
only provably cross-iteration events are dropped; no historical back-scan of
|
|
250
|
-
resumed long logs; no custom
|
|
251
|
-
top-level slot (the `conversation.view` tab is the only session-level panel
|
|
252
|
-
seat without dsh-private layout changes); no-session → shell hero
|
|
253
|
-
(strict-session view ring). Panel acceptance is dual-track: in-loop browser
|
|
254
|
-
harness verification (agent-browser/CDP against the rebuilt bundle,
|
|
255
|
-
iteration guides record the verified runs) plus user-restart final GUI
|
|
256
|
-
acceptance.
|
|
47
|
+
and renders the session's stored snapshot, or an explicit unavailable
|
|
48
|
+
reason). **Morning Star Workflow layout**: a narrow-column shell bound to the
|
|
49
|
+
sidebar pane's definite height — exactly three zones: the **section nav**
|
|
50
|
+
(任务迭代 / 代理执行 / 事件记录; `data-mstar-tab-nav`), the panel-owned
|
|
51
|
+
**single scroll body** (`[data-mstar-scroll]` — the ONLY `overflow-y`
|
|
52
|
+
element in the panel; nothing scrolls horizontally; `data-mstar-graph`
|
|
53
|
+
rides it), and the pinned **meta dock** (version + harness dir; never
|
|
54
|
+
scrolls). The workspace-state digest (plans ≤5 time-desc + `+N more`,
|
|
55
|
+
open residual findings ≤10 with severity chips + overflow hint, policy
|
|
56
|
+
with **enforcement first** then push / worktree / control worktree,
|
|
57
|
+
leases, knowledge, direction) renders IN FLOW at the end of the scroll
|
|
58
|
+
body, closed by the freshness footer (`snapshot {time} · turn {turn}` —
|
|
59
|
+
the served snapshot's own timestamp + turn, never "live"). The three
|
|
60
|
+
sections stack in the scroll body: the tasks page (iteration head +
|
|
61
|
+
**vertical** 5-step stepper with the FOUR-STATE `current` / `next` /
|
|
62
|
+
`done` / `idle` machine + the branch panel + five stacked status groups
|
|
63
|
+
— the merged「受阻/未知」/「Blocked / Unknown」column kept, `PLAN_CAP`
|
|
64
|
+
render caps + the clickable 「更多」/「收起」 expand button
|
|
65
|
+
(`data-kanban-more`); the projection keeps ALL plan rows — then the
|
|
66
|
+
project rollup), the events page (two partitions — Agent 流转事件 /
|
|
67
|
+
违规记录 — as flow rows, every row an expandable native `<details>`
|
|
68
|
+
carrying the full catalog fields, missing fields render 「—」 never a
|
|
69
|
+
guessed value), and the agents page — a **vertical grouped list** (the
|
|
70
|
+
react-flow canvas, its SVG edge layer, card ports and pointer pan are
|
|
71
|
+
REMOVED): two Phase groups in constant order (Phase 1 review-edit-chain
|
|
72
|
+
above; Phase 2 sdd-implement → qc-tri → qa-gate below, its label
|
|
73
|
+
annotating the CURRENT plan — `data-agent-group-plan` + `+N more`),
|
|
74
|
+
`sdd-implement` split into implementor / reviewer sub-partitions, the
|
|
75
|
+
`general` bucket sunk into an `unknown` sub-bucket, the full 14-role
|
|
76
|
+
roster as full-width flow rows (idle rows dashed muted — the roster is
|
|
77
|
+
never hidden) with role chip / status point / `×N` count / record line,
|
|
78
|
+
the `N executing · M pending` summary, and the three-entry legend in
|
|
79
|
+
flow below the list; rows carry the projected **emphasis tier**
|
|
80
|
+
(`--mstar-canvas-emphasis-*` chrome alpha mix — never a whole-row
|
|
81
|
+
`opacity`, so the status point + running glow stay opaque), settled
|
|
82
|
+
entities get the standalone GREEN done frame + ✓
|
|
83
|
+
(`data-agent-done="true"`) ONLY when `emphasis ≠ 'off'`; the agents page
|
|
84
|
+
contains zero `<svg>`, zero `data-agent-port` / `data-canvas-*` anchors
|
|
85
|
+
and no pan transform. The **iteration info section is shared by the
|
|
86
|
+
tasks AND agents pages** (one `IterationInfoSection`, both render the
|
|
87
|
+
same `view.iteration` block). Empty branches are explicit states —
|
|
88
|
+
`waiting` / `loading` / `unavailable` (with its reason) / no-harness
|
|
89
|
+
each carry their OWN anchor and copy and render no tabs, no digest and
|
|
90
|
+
no meta dock; no harness renders a CENTERED inactive-state card that
|
|
91
|
+
activates automatically once a harness is detected (inside the same
|
|
92
|
+
single scroll zone). Projection is the pure `projectGraph(source)`
|
|
93
|
+
function (schema constants vs catalog evidence strictly separated; never
|
|
94
|
+
throws; explicit degraded states — muted empty states, never orange warn
|
|
95
|
+
boxes). Refresh follows the session snapshot, no polling — while the
|
|
96
|
+
main agent is ACTIVELY orchestrating, a ledger record (dispatch/settle)
|
|
97
|
+
invalidates the workspace's TTL-cached catalog row so the next pre-step
|
|
98
|
+
rebuilds and (digest text change) re-injects it, and the panel refreshes
|
|
99
|
+
per step (seconds, not the 60 s TTL); while the main agent IDLES the
|
|
100
|
+
panel keeps the LAST snapshot — no live push channel. Bundle served at
|
|
101
|
+
`/plugins/@mstar-harness/dsh/client.js` (closure-factory CJS with NO
|
|
102
|
+
graph library inlined — react-flow removed; the build asserts the bundle
|
|
103
|
+
contains no `xyflow`/`reactflow` markers, no `@deepseek-ai/*` value
|
|
104
|
+
imports, and no `import.meta` / ESM statements — the loader runs plugin
|
|
105
|
+
bundles as classic scripts). Full realized layout detail:
|
|
106
|
+
`packages/dsh/README.md` (§ Web client plugin). **Known limitations**:
|
|
107
|
+
the stepper's Step 1 (iteration-start) IS the current step while the
|
|
108
|
+
steering compass is `status: active` (Phase 1 in flight — catalog
|
|
109
|
+
`compassStatus` field), carrying NO PASS/FAIL badge (Phase 1 has no gate
|
|
110
|
+
verdict); Step 5 (merge-ready) can never be the CURRENT step — the
|
|
111
|
+
engine phase gate only evaluates Phase 2→3→4; the current step follows
|
|
112
|
+
the TTL-refreshed `compassStatus` — up to one catalog interval (60 s)
|
|
113
|
+
behind a mid-session `active`→`locked` flip (bounded, documented
|
|
114
|
+
staleness, never a wrong verdict); the agent-entity status derivation
|
|
115
|
+
pairs a PAIRED settle exactly by its dispatch identity (`agent`, `role`,
|
|
116
|
+
`planId`, `taskId`), and an unpaired dispatch stays `running` (never
|
|
117
|
+
guessed, never faked); with NO steering compass the current-iteration
|
|
118
|
+
filter infers the iteration from plan ids (8-digit date prefix) +
|
|
119
|
+
doneAt — deterministic, documented heuristic, only provably
|
|
120
|
+
cross-iteration events are dropped, no historical back-scan of resumed
|
|
121
|
+
long logs; the sidebar chip title is captured at open time; a docked
|
|
122
|
+
body renders nothing while `tab.visible === false`. Panel acceptance is
|
|
123
|
+
dual-track: in-loop browser harness verification against the rebuilt
|
|
124
|
+
bundle plus user-restart final GUI acceptance.
|
|
257
125
|
|
|
258
126
|
## Skill loading
|
|
259
127
|
|
|
@@ -324,10 +192,8 @@ build (`catalogTtlMs`, default 60 s).
|
|
|
324
192
|
|
|
325
193
|
The plugin records ACTUAL subagent dispatch and real-completion settle events —
|
|
326
194
|
the evidence of what really happened, distinct from the client-side expected
|
|
327
|
-
role flow. The workflow panel's
|
|
328
|
-
|
|
329
|
-
`EventLogPage` log page (plan `20260811-panel-event-log`) are pure consumers
|
|
330
|
-
of this evidence.
|
|
195
|
+
role flow. The workflow panel's 代理执行 (agents) page and the 事件记录
|
|
196
|
+
tab's `EventLogPage` log page are pure consumers of this evidence.
|
|
331
197
|
|
|
332
198
|
- **Recording point (one core)**: `DshHostAdapter.dispatchGate` is the SINGLE
|
|
333
199
|
record path behind both dispatch surfaces — the `tools/pre-execute` listener
|
|
@@ -355,8 +221,8 @@ of this evidence.
|
|
|
355
221
|
summary. A MISSING file reads as the empty view ("no actual dispatches yet"
|
|
356
222
|
— recording starts at plan merge); an unreadable file is absent evidence;
|
|
357
223
|
malformed lines are skipped, never fatal.
|
|
358
|
-
- **Settle = real completion pairing, never faked
|
|
359
|
-
|
|
224
|
+
- **Settle = real completion pairing, never faked**: `tools/post-execute`
|
|
225
|
+
IS part of the
|
|
360
226
|
verified dsh-tools registry surface (`runPostExecute` dispatches the
|
|
361
227
|
waterfall for every tool call — verified against the upstream source and
|
|
362
228
|
pinned by a real-call probe). The pairing listener matches dispatch TOOLS
|
|
@@ -386,8 +252,8 @@ of this evidence.
|
|
|
386
252
|
top-5 + latest dispatch with HH:MM — the event detail lives in the
|
|
387
253
|
structured source, never the model text). A ledger record (dispatch/settle)
|
|
388
254
|
invalidates the affected workspace's TTL cache entry IMMEDIATELY
|
|
389
|
-
(apply-scoped `harnessDir → cache key` reverse map + invalidation closure
|
|
390
|
-
|
|
255
|
+
(apply-scoped `harnessDir → cache key` reverse map + invalidation closure)
|
|
256
|
+
→ the next pre-step rebuilds and (digest
|
|
391
257
|
text change) re-injects the row — the 60 s TTL no longer bounds
|
|
392
258
|
ledger-change latency; it still bounds non-ledger staleness.
|
|
393
259
|
- **Maintainer view**: change the ledger shape (event schema, bounds, settle
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mstar-harness/dsh",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.1",
|
|
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",
|
|
@@ -48,7 +48,8 @@
|
|
|
48
48
|
"@deepseek-ai/dsh-client-store",
|
|
49
49
|
"@deepseek-ai/dsh-client-ui-conversation",
|
|
50
50
|
"@deepseek-ai/dsh-client-locale",
|
|
51
|
-
"@deepseek-ai/dsh-client-connection"
|
|
51
|
+
"@deepseek-ai/dsh-client-connection",
|
|
52
|
+
"@deepseek-ai/dsh-client-ui-sidebar-right"
|
|
52
53
|
],
|
|
53
54
|
"platform": "web"
|
|
54
55
|
}
|
|
@@ -68,67 +69,68 @@
|
|
|
68
69
|
},
|
|
69
70
|
"peerDependencies": {
|
|
70
71
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
71
|
-
"@deepseek-ai/dsh-agent": "^0.1.5-rc.
|
|
72
|
-
"@deepseek-ai/dsh-agent-default-model": "^0.1.5-rc.
|
|
73
|
-
"@deepseek-ai/dsh-agent-presets": "^0.1.5-rc.
|
|
74
|
-
"@deepseek-ai/dsh-api-gateway": "^0.1.5-rc.
|
|
75
|
-
"@deepseek-ai/dsh-api-remotes": "^0.1.5-rc.
|
|
76
|
-
"@deepseek-ai/dsh-api-session-controller": "^0.1.5-rc.
|
|
77
|
-
"@deepseek-ai/dsh-atomic-write": "^0.1.5-rc.
|
|
78
|
-
"@deepseek-ai/dsh-attachment": "^0.1.5-rc.
|
|
79
|
-
"@deepseek-ai/dsh-brand": "^0.1.5-rc.
|
|
80
|
-
"@deepseek-ai/dsh-chunked-list": "^0.1.5-rc.
|
|
81
|
-
"@deepseek-ai/dsh-client-connection": "^0.1.5-rc.
|
|
82
|
-
"@deepseek-ai/dsh-client-file-upload": "^0.1.5-rc.
|
|
83
|
-
"@deepseek-ai/dsh-client-locale": "^0.1.5-rc.
|
|
84
|
-
"@deepseek-ai/dsh-client-store": "^0.1.5-rc.
|
|
85
|
-
"@deepseek-ai/dsh-client-ui-chat": "^0.1.5-rc.
|
|
86
|
-
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.5-rc.
|
|
87
|
-
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.5-rc.
|
|
88
|
-
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-rc.
|
|
89
|
-
"@deepseek-ai/dsh-client-ui-settings": "^0.1.5-rc.
|
|
90
|
-
"@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.5-rc.
|
|
91
|
-
"@deepseek-ai/dsh-client-ui-
|
|
92
|
-
"@deepseek-ai/dsh-
|
|
93
|
-
"@deepseek-ai/dsh-
|
|
94
|
-
"@deepseek-ai/dsh-
|
|
95
|
-
"@deepseek-ai/dsh-
|
|
96
|
-
"@deepseek-ai/dsh-
|
|
97
|
-
"@deepseek-ai/dsh-
|
|
98
|
-
"@deepseek-ai/dsh-
|
|
99
|
-
"@deepseek-ai/dsh-
|
|
100
|
-
"@deepseek-ai/dsh-
|
|
101
|
-
"@deepseek-ai/dsh-
|
|
102
|
-
"@deepseek-ai/dsh-llm
|
|
103
|
-
"@deepseek-ai/dsh-
|
|
104
|
-
"@deepseek-ai/dsh-
|
|
105
|
-
"@deepseek-ai/dsh-sandbox
|
|
106
|
-
"@deepseek-ai/dsh-
|
|
107
|
-
"@deepseek-ai/dsh-
|
|
108
|
-
"@deepseek-ai/dsh-session
|
|
109
|
-
"@deepseek-ai/dsh-session-
|
|
110
|
-
"@deepseek-ai/dsh-session-projection
|
|
111
|
-
"@deepseek-ai/dsh-session-
|
|
112
|
-
"@deepseek-ai/dsh-session-
|
|
113
|
-
"@deepseek-ai/dsh-
|
|
114
|
-
"@deepseek-ai/dsh-
|
|
115
|
-
"@deepseek-ai/dsh-skill
|
|
116
|
-
"@deepseek-ai/dsh-
|
|
117
|
-
"@deepseek-ai/dsh-storage
|
|
118
|
-
"@deepseek-ai/dsh-
|
|
119
|
-
"@deepseek-ai/dsh-
|
|
120
|
-
"@deepseek-ai/dsh-
|
|
121
|
-
"@deepseek-ai/dsh-
|
|
122
|
-
"@deepseek-ai/dsh-tool-
|
|
123
|
-
"@deepseek-ai/dsh-
|
|
124
|
-
"@deepseek-ai/dsh-
|
|
125
|
-
"@deepseek-ai/dsh-typert-
|
|
126
|
-
"@deepseek-ai/dsh-
|
|
127
|
-
"@deepseek-ai/dsh-
|
|
128
|
-
"@deepseek-ai/dsh-util-
|
|
129
|
-
"@deepseek-ai/dsh-util-
|
|
130
|
-
"@deepseek-ai/dsh-util-
|
|
131
|
-
"@deepseek-ai/dsh-workspace": "^0.1.5-rc.
|
|
72
|
+
"@deepseek-ai/dsh-agent": "^0.1.5-rc.2",
|
|
73
|
+
"@deepseek-ai/dsh-agent-default-model": "^0.1.5-rc.2",
|
|
74
|
+
"@deepseek-ai/dsh-agent-presets": "^0.1.5-rc.2",
|
|
75
|
+
"@deepseek-ai/dsh-api-gateway": "^0.1.5-rc.2",
|
|
76
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.5-rc.2",
|
|
77
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.5-rc.2",
|
|
78
|
+
"@deepseek-ai/dsh-atomic-write": "^0.1.5-rc.2",
|
|
79
|
+
"@deepseek-ai/dsh-attachment": "^0.1.5-rc.2",
|
|
80
|
+
"@deepseek-ai/dsh-brand": "^0.1.5-rc.2",
|
|
81
|
+
"@deepseek-ai/dsh-chunked-list": "^0.1.5-rc.2",
|
|
82
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.5-rc.2",
|
|
83
|
+
"@deepseek-ai/dsh-client-file-upload": "^0.1.5-rc.2",
|
|
84
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.5-rc.2",
|
|
85
|
+
"@deepseek-ai/dsh-client-store": "^0.1.5-rc.2",
|
|
86
|
+
"@deepseek-ai/dsh-client-ui-chat": "^0.1.5-rc.2",
|
|
87
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.5-rc.2",
|
|
88
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.5-rc.2",
|
|
89
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-rc.2",
|
|
90
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.5-rc.2",
|
|
91
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.5-rc.2",
|
|
92
|
+
"@deepseek-ai/dsh-client-ui-sidebar-right": "^0.1.5-rc.2",
|
|
93
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.5-rc.2",
|
|
94
|
+
"@deepseek-ai/dsh-code-runtime": "^0.1.5-rc.2",
|
|
95
|
+
"@deepseek-ai/dsh-commands": "^0.1.5-rc.2",
|
|
96
|
+
"@deepseek-ai/dsh-credentials": "^0.1.5-rc.2",
|
|
97
|
+
"@deepseek-ai/dsh-deque": "^0.1.5-rc.2",
|
|
98
|
+
"@deepseek-ai/dsh-file-reference": "^0.1.5-rc.2",
|
|
99
|
+
"@deepseek-ai/dsh-fs": "^0.1.5-rc.2",
|
|
100
|
+
"@deepseek-ai/dsh-home-paths": "^0.1.5-rc.2",
|
|
101
|
+
"@deepseek-ai/dsh-invariants": "^0.1.5-rc.2",
|
|
102
|
+
"@deepseek-ai/dsh-jobs": "^0.1.5-rc.2",
|
|
103
|
+
"@deepseek-ai/dsh-llm": "^0.1.5-rc.2",
|
|
104
|
+
"@deepseek-ai/dsh-llm-retry": "^0.1.5-rc.2",
|
|
105
|
+
"@deepseek-ai/dsh-native-command": "^0.1.5-rc.2",
|
|
106
|
+
"@deepseek-ai/dsh-sandbox": "^0.1.5-rc.2",
|
|
107
|
+
"@deepseek-ai/dsh-sandbox-policy": "^0.1.5-rc.2",
|
|
108
|
+
"@deepseek-ai/dsh-scope": "^0.1.5-rc.2",
|
|
109
|
+
"@deepseek-ai/dsh-session": "^0.1.5-rc.2",
|
|
110
|
+
"@deepseek-ai/dsh-session-persistence": "^0.1.5-rc.2",
|
|
111
|
+
"@deepseek-ai/dsh-session-projection": "^0.1.5-rc.2",
|
|
112
|
+
"@deepseek-ai/dsh-session-projection-cache": "^0.1.5-rc.2",
|
|
113
|
+
"@deepseek-ai/dsh-session-query": "^0.1.5-rc.2",
|
|
114
|
+
"@deepseek-ai/dsh-session-title": "^0.1.5-rc.2",
|
|
115
|
+
"@deepseek-ai/dsh-settings": "^0.1.5-rc.2",
|
|
116
|
+
"@deepseek-ai/dsh-skill": "^0.1.5-rc.2",
|
|
117
|
+
"@deepseek-ai/dsh-skill-filesystem": "^0.1.5-rc.2",
|
|
118
|
+
"@deepseek-ai/dsh-storage": "^0.1.5-rc.2",
|
|
119
|
+
"@deepseek-ai/dsh-storage-domain": "^0.1.5-rc.2",
|
|
120
|
+
"@deepseek-ai/dsh-subagent": "^0.1.5-rc.2",
|
|
121
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.5-rc.2",
|
|
122
|
+
"@deepseek-ai/dsh-timeout": "^0.1.5-rc.2",
|
|
123
|
+
"@deepseek-ai/dsh-tool-subagent": "^0.1.5-rc.2",
|
|
124
|
+
"@deepseek-ai/dsh-tool-todo": "^0.1.5-rc.2",
|
|
125
|
+
"@deepseek-ai/dsh-tools": "^0.1.5-rc.2",
|
|
126
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.5-rc.2",
|
|
127
|
+
"@deepseek-ai/dsh-typert-registry": "^0.1.5-rc.2",
|
|
128
|
+
"@deepseek-ai/dsh-user-approval": "^0.1.5-rc.2",
|
|
129
|
+
"@deepseek-ai/dsh-util-crypto": "^0.1.5-rc.2",
|
|
130
|
+
"@deepseek-ai/dsh-util-time": "^0.1.5-rc.2",
|
|
131
|
+
"@deepseek-ai/dsh-util-values": "^0.1.5-rc.2",
|
|
132
|
+
"@deepseek-ai/dsh-util-workspace-path": "^0.1.5-rc.2",
|
|
133
|
+
"@deepseek-ai/dsh-workspace": "^0.1.5-rc.2",
|
|
132
134
|
"@deepseek-ai/schemastery": "^3.18.1"
|
|
133
135
|
},
|
|
134
136
|
"publishConfig": {
|