@mstar-harness/dsh 3.6.3 → 3.7.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.md +4 -6
- package/README.zh.md +3 -3
- package/dist/client/panel/PanelView.d.ts +8 -11
- package/dist/client/panel/TabNav.d.ts +2 -2
- package/dist/client/panel/graph/event-log.d.ts +5 -9
- package/dist/client/panel/graph/project-graph.d.ts +53 -72
- package/dist/client/panel/graph/schema.d.ts +31 -37
- package/dist/client/panel/locale.d.ts +19 -19
- package/dist/client/panel/pages/AgentCanvasPage.d.ts +40 -58
- package/dist/client/panel/pages/EventLogPage.d.ts +6 -6
- package/dist/client/panel/pages/IterationInfoSection.d.ts +9 -11
- package/dist/client/panel/pages/IterationTaskPage.d.ts +3 -3
- package/dist/client/panel/plan-sort.d.ts +3 -6
- package/dist/client/panel/state-section.d.ts +1 -1
- package/dist/client/panel/zones/Legend.d.ts +2 -2
- package/dist/client/panel/zones/ProjectRollup.d.ts +1 -2
- package/dist/client/panel/zones/TaskBoard.d.ts +1 -2
- package/dist/gates/_shared.d.ts +7 -10
- package/dist/gates/adapter.d.ts +6 -9
- package/dist/gates/agent-flow.d.ts +49 -59
- package/dist/gates/agent-personas.d.ts +1 -2
- package/dist/gates/catalog.d.ts +2 -5
- package/dist/gates/dispatch.d.ts +9 -11
- package/dist/gates/fallbacks-advisory.d.ts +2 -3
- package/dist/gates/fallbacks-probe.d.ts +2 -2
- package/dist/gates/fallbacks-seeds.d.ts +1 -1
- package/dist/gates/fallbacks-structural.d.ts +1 -1
- package/dist/gates/goal-bridge.d.ts +6 -9
- package/dist/gates/role-persona.d.ts +2 -3
- package/dist/gates/skill-lint.d.ts +19 -2
- package/dist/gates/system-prompt.d.ts +7 -11
- package/dist/gates/tools.d.ts +1 -1
- package/dist/gates/workflow-ledger.d.ts +21 -28
- package/dist/gates/workflow-policy.d.ts +15 -19
- package/dist/gates/workflow-selection.d.ts +3 -3
- package/dist/index.js +215 -33
- package/dist/types.d.ts +4 -7
- package/harness-commands/iteration-drive.md +6 -6
- package/harness-commands/iteration-loop.md +7 -7
- package/harness-commands/iteration-start.md +8 -8
- package/harness-skills/mstar-coding-behavior/SKILL.md +3 -20
- package/harness-skills/mstar-dispatch-gates/SKILL.md +7 -13
- package/harness-skills/mstar-dispatch-gates/references/leaf-executor-checklist.md +1 -1
- package/harness-skills/mstar-harness-core/SKILL.md +9 -53
- package/harness-skills/mstar-host/references/zcode.md +1 -0
- package/harness-skills/mstar-iteration/SKILL.md +32 -318
- package/harness-skills/mstar-iteration/references/command-shared-invariants.md +1 -1
- package/harness-skills/mstar-iteration/references/phase-1-prepare.md +155 -0
- package/harness-skills/mstar-iteration/references/phase-2-worktree-lease.md +113 -3
- package/harness-skills/mstar-iteration/references/phase5-helper-discovery.md +1 -1
- package/harness-skills/mstar-roles/SKILL.md +14 -12
- package/harness-skills/mstar-roles/references/_shared/leaf-executor-core.md +5 -6
- package/harness-skills/mstar-roles/references/architect.md +1 -1
- package/harness-skills/mstar-roles/references/code-reviewer.md +11 -1
- package/harness-skills/mstar-roles/references/frontend-dev.md +1 -1
- package/harness-skills/mstar-roles/references/fullstack-dev-shared.md +1 -1
- package/harness-skills/mstar-roles/references/ops-engineer.md +1 -1
- package/harness-skills/mstar-roles/references/product-manager.md +1 -1
- package/harness-skills/mstar-roles/references/project-manager/dispatch-and-assignment.md +4 -0
- package/harness-skills/mstar-roles/references/project-manager.md +6 -4
- package/harness-skills/mstar-roles/references/prompt-engineer.md +1 -1
- package/harness-skills/mstar-roles/references/qa-engineer.md +1 -1
- package/harness-skills/mstar-roles/references/qc-specialist-shared.md +1 -1
- package/harness-skills/mstar-roles/references/writing-specialist.md +1 -1
- package/harness-skills/mstar-sdd/references/file-handoffs.md +40 -7
- package/harness-skills/mstar-sdd/references/implementer-continuation-prompt.md +9 -0
- package/harness-skills/mstar-sdd/references/implementer-prompt.md +9 -0
- package/harness-skills/mstar-sdd/references/task-reviewer-prompt.md +7 -0
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* engine phase gate only evaluates Phase 2→3→4, so the catalog never emits
|
|
11
11
|
* `merge-ready` as current — Step 5 stays schema-only idle. Step 1
|
|
12
12
|
* (`iteration-start`) IS compass-driven current during Phase 1 — the
|
|
13
|
-
* `compassStatus: 'active'` field
|
|
13
|
+
* `compassStatus: 'active'` field
|
|
14
14
|
* lights it, so it is NOT a "never current" node; only Step 5 has no source
|
|
15
15
|
* that can light it. The loop edge is planning semantics (one iteration
|
|
16
16
|
* closes, the next begins).
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
export declare const PHASE_IDS: readonly ["iteration-start", "autonomous-execute", "iteration-close", "pr-delivery", "merge-ready"];
|
|
20
20
|
export type PhaseId = (typeof PHASE_IDS)[number];
|
|
21
21
|
/** Plan state machine bucket ids (spec §2.4): 4 known states + the merged
|
|
22
|
-
* `blocked-unknown` catch-all (
|
|
22
|
+
* `blocked-unknown` catch-all (the
|
|
23
23
|
* `Blocked` state and the former `unknown` catch-all fold into ONE column). */
|
|
24
24
|
export declare const PLAN_STATE_IDS: readonly ["Todo", "InProgress", "InReview", "Done", "blocked-unknown"];
|
|
25
25
|
export type PlanStateId = (typeof PLAN_STATE_IDS)[number];
|
|
@@ -32,7 +32,7 @@ export interface PhaseEdge {
|
|
|
32
32
|
export declare const PHASE_EDGES: PhaseEdge[];
|
|
33
33
|
/** Plan state machine edges (spec §2.4): `Done` is terminal (no out-edges);
|
|
34
34
|
* `blocked-unknown` keeps the InProgress↔Blocked recovery back-edge (plan
|
|
35
|
-
*
|
|
35
|
+
* Task 1 — the merged column docks the Blocked ⇄). */
|
|
36
36
|
export declare const PLAN_STATE_EDGES: {
|
|
37
37
|
source: PlanStateId;
|
|
38
38
|
target: PlanStateId;
|
|
@@ -62,29 +62,27 @@ export declare const TRANSITION_TO_PHASE: Readonly<Record<string, PhaseId>>;
|
|
|
62
62
|
* - Phase 3–5 (iteration-close / pr-delivery / merge-ready) dispatch no
|
|
63
63
|
* routine subagents → no stages (spec §2.3).
|
|
64
64
|
*
|
|
65
|
-
* Off-pipeline roles
|
|
65
|
+
* Off-pipeline roles live in the
|
|
66
66
|
* KNOWN_AGENTS roster with `zone` markers, NOT here: `ops-engineer` and
|
|
67
67
|
* `prompt-engineer` are on-demand dispatches (mstar-roles routing table,
|
|
68
68
|
* as needed) — they stay OUTSIDE this union (their event-log `unexpected`
|
|
69
69
|
* badge is unchanged; bucket membership and expectedness are ORTHOGONAL
|
|
70
|
-
* dimensions
|
|
70
|
+
* dimensions, see
|
|
71
71
|
* SDD_BUCKET_ROLES). The single `general` bucket (plan
|
|
72
|
-
*
|
|
72
|
+
* collects every unmatched / anonymous
|
|
73
73
|
* dispatch (role ''), plus stray off-roster roles like `scout`; the SDD
|
|
74
74
|
* per-task reviewer is now the PIPELINE role `code-reviewer` (v2.1.1 — the
|
|
75
75
|
* former `generalPurpose` seat), so the `general` bucket no longer
|
|
76
76
|
* describes a pipeline seat.
|
|
77
77
|
*
|
|
78
|
-
* General-bucket PLACEMENT
|
|
79
|
-
* user 2026-08-12 decision): the `general` bucket moves to its OWN rightmost
|
|
78
|
+
* General-bucket PLACEMENT: the `general` bucket moves to its OWN rightmost
|
|
80
79
|
* UNKNOWN column — the projection still emits `zone: 'general'` entities
|
|
81
80
|
* (semantics unchanged, placement is a RENDER-layer decision), and the
|
|
82
|
-
* render
|
|
81
|
+
* render places them in that rightmost column. The earlier
|
|
83
82
|
* placement (BOTTOM INSIDE the `sdd-implement` column bucket) is
|
|
84
|
-
* superseded by the F5
|
|
83
|
+
* superseded by the F5; the former SDD implement ↔ review
|
|
85
84
|
* skeleton EDGE (sdd-implement → general back-edge, the `loop: true` arrow)
|
|
86
|
-
* stays REMOVED from the projection
|
|
87
|
-
* 1); the F5 supervise line is a SEPARATE sub-bucket edge (see
|
|
85
|
+
* stays REMOVED from the projection ; the F5 supervise line is a SEPARATE sub-bucket edge (see
|
|
88
86
|
* project-graph.ts `superviseEdges`).
|
|
89
87
|
*
|
|
90
88
|
* Matching rules (spec §2.3 — implemented by `projectGraph`'s flow
|
|
@@ -103,15 +101,14 @@ export interface ExpectedRoleStage {
|
|
|
103
101
|
roles: readonly string[];
|
|
104
102
|
}
|
|
105
103
|
/** Expected role pipeline skeleton: 4 stages (spec agent-flow-catalog-graph
|
|
106
|
-
* §2.3;
|
|
104
|
+
* §2.3; — `code-reviewer` joins
|
|
107
105
|
* the sdd-implement stage: v2.1.1 makes the SDD L2 task reviewer a routine
|
|
108
106
|
* pipeline role, the former `generalPurpose` seat; ops-engineer /
|
|
109
107
|
* prompt-engineer stay OFF the pipeline — on-demand; qa-gate is the
|
|
110
108
|
* terminal stage). */
|
|
111
109
|
export declare const EXPECTED_ROLE_FLOW: readonly ExpectedRoleStage[];
|
|
112
110
|
/**
|
|
113
|
-
* SDD sub-bucket membership
|
|
114
|
-
* CLIENT-SIDE DESIGN KNOWLEDGE): which roles live in which sub-bucket of the
|
|
111
|
+
* SDD sub-bucket membership : which roles live in which sub-bucket of the
|
|
115
112
|
* `sdd-implement` column — `implementor` (the implementer roles PLUS the
|
|
116
113
|
* on-demand ops-engineer / prompt-engineer: they are implementor-family
|
|
117
114
|
* dispatches, not a separate stage) and `reviewer` (code-reviewer, the SDD
|
|
@@ -132,7 +129,7 @@ export declare const SDD_BUCKET_ROLES: {
|
|
|
132
129
|
};
|
|
133
130
|
/**
|
|
134
131
|
* The known-agent roster (spec §4 / §6.2 / decision point D3 + plan
|
|
135
|
-
*
|
|
132
|
+
* Task
|
|
136
133
|
* 1): the static FULL set of ASSIGNABLE roles the panel may ever show —
|
|
137
134
|
* every EXPECTED_ROLE_FLOW role PLUS the off-pipeline roles `prompt-engineer`
|
|
138
135
|
* (in the mstar-roles table but not in the pipeline) and `ops-engineer`
|
|
@@ -142,13 +139,13 @@ export declare const SDD_BUCKET_ROLES: {
|
|
|
142
139
|
* the SDD L2 task reviewer, to reach 14).
|
|
143
140
|
*
|
|
144
141
|
* `explore` is DELIBERATELY NOT in the roster (plan
|
|
145
|
-
*
|
|
142
|
+
* : it is a scouting
|
|
146
143
|
* adjunct role with no standalone presentation value, so it is removed from
|
|
147
144
|
* the canvas (a stray `explore` dispatch still folds into the `general`
|
|
148
145
|
* bucket — it is not a KNOWN_AGENTS id).
|
|
149
146
|
*
|
|
150
147
|
* `project-manager` is deliberately NOT in the roster (plan
|
|
151
|
-
*
|
|
148
|
+
* Item 2): it is the PRIMARY
|
|
152
149
|
* orchestration agent (mstar-roles mapping `mode: primary`), the seat that
|
|
153
150
|
* DISPATCHES subagents — never an assignable subagent itself, so it must
|
|
154
151
|
* not appear as a dispatchable entity in the 代理执行 tab.
|
|
@@ -160,16 +157,14 @@ export declare const SDD_BUCKET_ROLES: {
|
|
|
160
157
|
* carry an explicit `zone` — `on-demand` (ops-engineer / prompt-engineer:
|
|
161
158
|
* implementor-sub-bucket dispatches with an on-demand badge — the render
|
|
162
159
|
* places them inside the `sdd-implement` column's implementor partition,
|
|
163
|
-
*
|
|
160
|
+
* or `general` (the general bucket = ANY unmatched / anonymous
|
|
164
161
|
* dispatch (role '') in the projection — the rightmost UNKNOWN column,
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
* General-bucket placement (plan 20260812-panel-f5-agent-layout Task 1,
|
|
168
|
-
* user 2026-08-12): the `general` bucket gets its OWN rightmost unknown
|
|
162
|
+
*. *
|
|
163
|
+
* General-bucket placement : the `general` bucket gets its OWN rightmost unknown
|
|
169
164
|
* column — the projection keeps emitting `zone: 'general'` entities (the
|
|
170
|
-
* zone VALUE is unchanged — placement is a render-layer decision
|
|
165
|
+
* zone VALUE is unchanged — placement is a render-layer decision).
|
|
171
166
|
*/
|
|
172
|
-
/** The general-bucket id
|
|
167
|
+
/** The general-bucket id : the single
|
|
173
168
|
* bucket every off-roster / anonymous dispatch folds into — the former SDD
|
|
174
169
|
* per-task reviewer seat is now the PIPELINE role `code-reviewer` (v2.1.1),
|
|
175
170
|
* so `general` is purely the unmatched/anonymous catch-all (role '' +
|
|
@@ -178,24 +173,23 @@ export declare const SDD_BUCKET_ROLES: {
|
|
|
178
173
|
* KNOWN_AGENTS roster id ALL derive from it — renaming the bucket changes
|
|
179
174
|
* exactly one constant.
|
|
180
175
|
*
|
|
181
|
-
* Placement
|
|
176
|
+
* Placement:
|
|
182
177
|
* the bucket gets its OWN rightmost UNKNOWN canvas column — the render
|
|
183
|
-
*
|
|
178
|
+
* places `zone: 'general'` entities there; the former
|
|
184
179
|
* placement (BOTTOM INSIDE the `sdd-implement` column) is superseded. The
|
|
185
180
|
* `'general'` literal in the `AgentZone` / `KnownAgent.zone` unions below
|
|
186
181
|
* is the type-level binding (a union member cannot reference a value) —
|
|
187
182
|
* keep them in sync with this constant. */
|
|
188
183
|
export declare const GENERAL_BUCKET: "general";
|
|
189
184
|
/**
|
|
190
|
-
* Agent-entity column zone
|
|
191
|
-
* 20260812-panel-f5-agent-layout Task 1): `'flow'` (stage columns),
|
|
185
|
+
* Agent-entity column zone : `'flow'` (stage columns),
|
|
192
186
|
* `'on-demand'` (ops-engineer / prompt-engineer — implementor-sub-bucket
|
|
193
187
|
* dispatches, rendered inside the `sdd-implement` column's implementor
|
|
194
188
|
* partition with an on-demand badge; the standalone on-demand column is
|
|
195
|
-
* REMOVED
|
|
196
|
-
* semantics (
|
|
197
|
-
* rightmost UNKNOWN column
|
|
198
|
-
* unchanged; only the render layout
|
|
189
|
+
* REMOVED ) or `'general'` (the general bucket). Placement
|
|
190
|
+
* semantics ( decision): `'general'` renders in its OWN
|
|
191
|
+
* rightmost UNKNOWN column . The zone VALUE is projection-owned and
|
|
192
|
+
* unchanged; only the render layout changes.
|
|
199
193
|
*/
|
|
200
194
|
export type AgentZone = 'flow' | 'on-demand' | 'general';
|
|
201
195
|
export interface KnownAgent {
|
|
@@ -208,17 +202,17 @@ export interface KnownAgent {
|
|
|
208
202
|
phase: PhaseId;
|
|
209
203
|
stage: string;
|
|
210
204
|
} | null;
|
|
211
|
-
/** Off-pipeline zone
|
|
205
|
+
/** Off-pipeline zone : 'on-demand'
|
|
212
206
|
* for the implementor-sub-bucket on-demand roles (ops-engineer /
|
|
213
207
|
* prompt-engineer — rendered inside the `sdd-implement` column's
|
|
214
208
|
* implementor partition with an on-demand badge, plan
|
|
215
|
-
*
|
|
209
|
+
* ), 'general' (the default
|
|
216
210
|
* when omitted) for the general bucket. The `'general'` literal is the
|
|
217
211
|
* type-level binding of `GENERAL_BUCKET` (see above) — a union member
|
|
218
212
|
* cannot reference a value. */
|
|
219
213
|
zone?: 'on-demand' | 'general';
|
|
220
214
|
}
|
|
221
215
|
/** Known-agent roster — 14 roles, spec §4 order (project-manager + explore
|
|
222
|
-
* excluded; `code-reviewer` added by
|
|
223
|
-
*
|
|
216
|
+
* excluded; `code-reviewer` added by
|
|
217
|
+
* — upstream v2.1.1 roles.ts is the semantic SSOT). */
|
|
224
218
|
export declare const KNOWN_AGENTS: readonly KnownAgent[];
|
|
@@ -5,41 +5,41 @@
|
|
|
5
5
|
* a typed `t` seat for the panel component (dictionary keys are checked
|
|
6
6
|
* against the union by `LocaleDictOf`).
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* (spec panel-zones §2): the react-flow
|
|
9
9
|
* graph is replaced by the zone dashboard — the `graph.phase.*` /
|
|
10
10
|
* `graph.state.*` / react-flow `graph.legend.*` key families are gone with
|
|
11
11
|
* the graph library; only `graph.pass` / `graph.fail` remain (the
|
|
12
|
-
* gate-verdict labels reused by the
|
|
12
|
+
* gate-verdict labels reused by the IterationTaskPage head), and
|
|
13
13
|
* the new `zone.*` family covers the three zone titles/placeholders + the
|
|
14
14
|
* zone-semantic legend. The `flow.*` key family (agent-flow event dock) is
|
|
15
15
|
* unchanged. The old footer's violations copy (`graph.violations` /
|
|
16
16
|
* `graph.no-violations`) is carried by the event-log plan — it adds its own
|
|
17
17
|
* dedicated keys when that page lands, NOT reserved in this union.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
19
|
+
* (spec panel-zones §3): the iteration zone is filled in — `zone.phase.*`
|
|
20
20
|
* (the 5 PHASE_IDS names, the `graph.phase.*` wording moved into the zone
|
|
21
21
|
* namespace), `zone.iteration.*` (Step N/5 label, Step N badge, step-state
|
|
22
22
|
* chips) and `zone.branches.*` (the branch panel
|
|
23
23
|
* moved from the sidebar). `zone.iteration.placeholder` is gone with the
|
|
24
24
|
* placeholder.
|
|
25
25
|
*
|
|
26
|
-
*
|
|
26
|
+
* (spec panel-zones §3): the task board kanban is filled in —
|
|
27
27
|
* `zone.state.*` (the 5 PLAN_STATE_IDS column names — en is the raw status
|
|
28
28
|
* word, zh the localized name; `blocked-unknown` is the merged
|
|
29
|
-
* Blocked/unknown column
|
|
29
|
+
* Blocked/unknown column),
|
|
30
30
|
* `zone.tasks.total` (zone header plan total), `zone.tasks.no-plans` (the
|
|
31
31
|
* muted empty note), `zone.tasks.more` (the per-column `+N more` expand
|
|
32
32
|
* affordance) and `zone.tasks.collapse` (the 「收起」 collapse label).
|
|
33
33
|
* `zone.tasks.placeholder` is gone with the placeholder.
|
|
34
34
|
*
|
|
35
|
-
*
|
|
35
|
+
* (spec panel-zones §4): the agents
|
|
36
36
|
* zone is filled in — `zone.agents.summary` (`N executing · M pending`).
|
|
37
37
|
* `zone.agents.placeholder` is gone with the placeholder; the dashed
|
|
38
38
|
* "待执行" chip (`pending-label`) and the animated next-edge label (`next`)
|
|
39
|
-
* keys were removed with the AgentFlowZone
|
|
40
|
-
*
|
|
39
|
+
* keys were removed with the AgentFlowZone (the free canvas renders neither,
|
|
40
|
+
* so they had zero consumers).
|
|
41
41
|
*
|
|
42
|
-
*
|
|
42
|
+
* (same plan): the dock is collapsible (the frame is a native <details>,
|
|
43
43
|
* header = <summary>) and the legend gains the entity-status swatches —
|
|
44
44
|
* `zone.legend.agent-running` / `zone.legend.agent-settled` (the status-dot
|
|
45
45
|
* treatments of the entity cards; the `zone.agents.*` family itself stays
|
|
@@ -49,38 +49,38 @@
|
|
|
49
49
|
* would conflate event status words (dispatched/settled ok) with entity
|
|
50
50
|
* status words).
|
|
51
51
|
*
|
|
52
|
-
*
|
|
52
|
+
* (spec panel-tabs §2/§6.1): the panel is
|
|
53
53
|
* re-laid-out as Tabs + Content — `tab.*` covers the 3 fixed MenuTab labels
|
|
54
54
|
* (任务迭代 / 代理执行 / 事件记录) and `page.*.placeholder` the muted
|
|
55
55
|
* placeholder copy for the agents/events tabs (the real pages land with the
|
|
56
56
|
* agent-canvas / event-log plans; Task 3 refines the placeholders).
|
|
57
57
|
*
|
|
58
|
-
*
|
|
58
|
+
* (spec panel-tabs §3): the
|
|
59
59
|
* IterationTaskPage head copy — `page.iteration.*` (the collapsed one-line
|
|
60
60
|
* "not started" note + the expand/collapse toggle hints). The head reuses the
|
|
61
61
|
* existing `zone.iteration.*` (step badge / Step n/5 label / step-state
|
|
62
62
|
* chips), `zone.phase.*` (the 5 PHASE_IDS names) and `zone.branches.*`
|
|
63
63
|
* (branch panel) keys; the kanban reuses `zone.tasks.*` / `zone.state.*`.
|
|
64
64
|
*
|
|
65
|
-
*
|
|
65
|
+
* (spec panel-tabs §4): the
|
|
66
66
|
* legend re-mounts on the agent canvas — `zone.legend.agent-idle` (the idle
|
|
67
67
|
* card treatment) joins the swatch family and the collaboration-edge labels
|
|
68
68
|
* (flow-expected / flow-actual / general) now describe the canvas rendering
|
|
69
69
|
* (dashed/solid lines + the general bucket — plan
|
|
70
|
-
*
|
|
70
|
+
* replaced the former flow-unexpected entry)
|
|
71
71
|
* instead of the retired zone-dashboard stages; `flow.settle-only` is the
|
|
72
72
|
* distinct muted copy for the settle-only canvas note (review T2-Imp-2
|
|
73
73
|
* restored the old zone's separate anchor).
|
|
74
74
|
*
|
|
75
|
-
* T2
|
|
75
|
+
* T2 : the general bucket has NO column
|
|
76
76
|
* of its own anymore — `zone.agents.general` is REPURPOSED as the small
|
|
77
77
|
* in-bucket label on the general card (which sinks to the bottom of the
|
|
78
78
|
* `sdd-implement` column — the value stays the user-fixed literal 'general'
|
|
79
79
|
* in both locales); `zone.legend.general` rewords to the sink semantics
|
|
80
80
|
* (「general 位于 sdd-implement 桶内底部」).
|
|
81
81
|
*
|
|
82
|
-
*
|
|
83
|
-
* supersedes the
|
|
82
|
+
* (the layout rework
|
|
83
|
+
* supersedes the earlier sink): the general bucket moves to its OWN rightmost
|
|
84
84
|
* UNKNOWN column — `zone.agents.unknown` (the column label, 未知 / unknown);
|
|
85
85
|
* the in-bucket general tag is gone (the general card's title + the unknown
|
|
86
86
|
* column label carry it), so `zone.agents.general` is REMOVED. The
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
* (the former 'general' entry is replaced by 'unknown'); `zone.legend.general`
|
|
93
93
|
* is REMOVED and `zone.legend.on-demand` rewords to the badge semantics.
|
|
94
94
|
*
|
|
95
|
-
*
|
|
95
|
+
* (the 2026-08-12 edge
|
|
96
96
|
* rework supersedes the Task-2 unknown COLUMN): the standalone rightmost
|
|
97
97
|
* unknown column is REMOVED (user feedback #3 — FOUR columns total) — the
|
|
98
98
|
* general bucket sinks into an unknown SUB-PARTITION at the bottom of the
|
|
@@ -104,13 +104,13 @@
|
|
|
104
104
|
* `unknown` reword to the bezier / port-anchored / side-gap / sub-partition
|
|
105
105
|
* semantics.
|
|
106
106
|
*
|
|
107
|
-
* T3
|
|
107
|
+
* T3 : the no-harness branch
|
|
108
108
|
* renders a CENTERED inactive-state card (icon + title + hint, no tabs /
|
|
109
109
|
* no sidebar) instead of the left-aligned hint — `empty.no-harness-hint`
|
|
110
110
|
* is the explanatory secondary copy under the reused `empty.no-harness`
|
|
111
111
|
* title.
|
|
112
112
|
*
|
|
113
|
-
*
|
|
113
|
+
* (图例精简): the
|
|
114
114
|
* legend narrows to the 3 role-card status entries —
|
|
115
115
|
* `zone.legend.flow-actual` / `port` / `group` / `sub-bucket` / `supervise` /
|
|
116
116
|
* `on-demand` / `unknown` are REMOVED (the collaboration-edge / layout tech
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* AgentCanvasPage (spec panel-tabs §4/§6.2
|
|
3
|
-
*
|
|
4
|
-
* placeholder page
|
|
2
|
+
* AgentCanvasPage (spec panel-tabs §4/§6.2
|
|
3
|
+
* — the 代理执行 tab: a DRAGGABLE agent canvas. Replaces the muted
|
|
4
|
+
* placeholder page and the stage-column AgentFlowZone
|
|
5
5
|
* (deleted by this plan — the free canvas supersedes it).
|
|
6
6
|
*
|
|
7
7
|
* Canvas contract (spec §6.2 — zero third-party deps):
|
|
@@ -29,28 +29,28 @@
|
|
|
29
29
|
* `data-agent-record` (never the title). Idle (no dispatch evidence) cards
|
|
30
30
|
* are muted (`data-agent-idle`); lit cards follow the projection's status
|
|
31
31
|
* priority (running/settled/error/denied/advisory). Settled cards get a
|
|
32
|
-
* standalone GREEN DONE FRAME + green ✓ (
|
|
32
|
+
* standalone GREEN DONE FRAME + green ✓ (
|
|
33
33
|
* `data-agent-done="true"`, the frame is a full-strength success ring on the
|
|
34
34
|
* rounded card body) ONLY when `emphasis !== 'off'` — an off-tier role
|
|
35
35
|
* (already-passed / stage-less on-demand + general) never shows the
|
|
36
36
|
* completion marker (the v3 leak: the ✓ survived the off-tier low
|
|
37
37
|
* transparency).
|
|
38
38
|
*
|
|
39
|
-
* Shared iteration section
|
|
39
|
+
* Shared iteration section : the page renders the
|
|
40
40
|
* SAME `IterationInfoSection` the tasks tab uses, from the SAME
|
|
41
41
|
* `view.iteration` data — 两个 tab 显示同一迭代信息块.
|
|
42
42
|
*
|
|
43
|
-
* Edges (spec §4
|
|
43
|
+
* Edges (spec §4 — the
|
|
44
44
|
* finalized 2026-08-12 line semantics, design doc §2): ONLY the actual
|
|
45
45
|
* handoffs (business entity→entity — role-keyed, general endpoints
|
|
46
46
|
* filtered, one edge per pair) and the supervise line (plan
|
|
47
|
-
*
|
|
47
|
+
* Task 2 — the static bidirectional
|
|
48
48
|
* implementor ↔ sdd-reviewer sub-bucket line inside the `sdd-implement`
|
|
49
49
|
* column, dim dashed by default, lit business when the projected
|
|
50
50
|
* `evidenced` flag is true — never a fabricated activation) — all drawn as
|
|
51
51
|
* SVG bezier `C` paths (design doc §2.6) over the layout computed by the
|
|
52
52
|
* exported pure `layoutAgents`. The `expected` stage skeleton and the
|
|
53
|
-
* animated `next` edge are REMOVED (
|
|
53
|
+
* animated `next` edge are REMOVED ( — the column order
|
|
54
54
|
* implies the flow, the running card glow + status point carry the
|
|
55
55
|
* position). Every line anchors to a CARD PORT (4 fixed edge-midpoint
|
|
56
56
|
* ports, design doc §2.5 — hover-visible dots, static-invisible) or the
|
|
@@ -58,22 +58,17 @@
|
|
|
58
58
|
* at the STANDOFF point 10px off the target port (arrow along the endpoint
|
|
59
59
|
* tangent — H1) and no line crosses text (H2: standoff + side-gap routing
|
|
60
60
|
* for caption-crossing same-column flows + column-gap crossings). Col-skip
|
|
61
|
-
* cross-column edges
|
|
62
|
-
* are separated by an intermediate column, e.g. writing-specialist →
|
|
63
|
-
* qc-specialist) reroute via a multi-`L` side-gap DETOUR below the
|
|
61
|
+
* cross-column edges reroute via a multi-`L` side-gap DETOUR below the
|
|
64
62
|
* intermediate card band instead of a direct bezier through the card bodies
|
|
65
63
|
* (H1).
|
|
66
64
|
*
|
|
67
|
-
* Layout
|
|
68
|
-
* 20260812-panel-f5-design-system Task 5 + Task 8 — the F5 rework; plan
|
|
69
|
-
* 20260813-panel-agent-canvas-legend-layout Task 2 — the left-right
|
|
70
|
-
* rework): deterministic columns per EXPECTED_ROLE_FLOW stage
|
|
65
|
+
* Layout : deterministic columns per EXPECTED_ROLE_FLOW stage
|
|
71
66
|
* (review-edit-chain → sdd-implement → qc-tri → qa-gate) — FOUR columns
|
|
72
|
-
* total (
|
|
67
|
+
* total (: the standalone rightmost UNKNOWN
|
|
73
68
|
* column is REMOVED; `zone: 'general'` entities render in an "unknown /
|
|
74
69
|
* 未匹配角色" SUB-PARTITION at the bottom of the LAST column,
|
|
75
70
|
* `data-sub-bucket="unknown"`), laid out in TWO SIDE-BY-SIDE PHASE GROUPS
|
|
76
|
-
*
|
|
71
|
+
* — the
|
|
77
72
|
* Phase 1 group LEFTMOST (review-edit-chain — the sequential Review & Edit
|
|
78
73
|
* chain: product-manager → architect → writing-specialist) and the Phase 2
|
|
79
74
|
* group to its RIGHT (sdd-implement → qc-tri → qa-gate — the iterative plan
|
|
@@ -87,9 +82,9 @@
|
|
|
87
82
|
* reviewer partition (code-reviewer, idle included) below, with the
|
|
88
83
|
* implementor / sdd-reviewer caption labels. `zone: 'on-demand'` entities
|
|
89
84
|
* have NO standalone column anymore — they live in the implementor
|
|
90
|
-
* partition. The former
|
|
91
|
-
* the sdd-implement column" placement is superseded
|
|
92
|
-
*
|
|
85
|
+
* partition. The former "general sinks to the bottom of
|
|
86
|
+
* the sdd-implement column" placement is superseded, as is the
|
|
87
|
+
* rightmost unknown column; the former
|
|
93
88
|
* sdd-implement → general SDD loop back-edge stays REMOVED (the render
|
|
94
89
|
* draws no loop branch).
|
|
95
90
|
*
|
|
@@ -97,10 +92,9 @@
|
|
|
97
92
|
* yields the full idle roster, so the canvas renders it with the muted
|
|
98
93
|
* `data-canvas-note` (degraded = ledger missing; empty = no events;
|
|
99
94
|
* settle-only = events but no dispatch rows — review T2-Imp-2 restored the
|
|
100
|
-
* old zone's distinct settle-only anchor;
|
|
95
|
+
* old zone's distinct settle-only anchor; the empty/settle-only note
|
|
101
96
|
* is PROJECTED metadata, never inferred from the entity list). The Legend
|
|
102
|
-
* (idle / collaboration swatches
|
|
103
|
-
* (plan 20260813-panel-quick-fixes Task 3 — user 2026-08-13 feedback).
|
|
97
|
+
* (idle / collaboration swatches) sits BELOW the viewport.
|
|
104
98
|
* `initialPan` is a deterministic SSR/test seed — the live page starts at the
|
|
105
99
|
* origin.
|
|
106
100
|
*/
|
|
@@ -112,8 +106,7 @@ export interface AgentCanvasPageProps {
|
|
|
112
106
|
/** The projected agents zone (spec §6.2 — `ZoneView['agents']`). */
|
|
113
107
|
view: ZoneView['agents'];
|
|
114
108
|
/** The projected iteration zone (spec §3) — the SHARED iteration info
|
|
115
|
-
* block
|
|
116
|
-
* feedback #4): BOTH the tasks tab and this page render the SAME
|
|
109
|
+
* block : BOTH the tasks tab and this page render the SAME
|
|
117
110
|
* `IterationInfoSection` from the SAME `view.iteration` data. */
|
|
118
111
|
iteration: ZoneView['iteration'];
|
|
119
112
|
t: TranslateNS<'mstar-panel'>;
|
|
@@ -151,10 +144,7 @@ export interface CanvasColumn extends CanvasBox {
|
|
|
151
144
|
id: string;
|
|
152
145
|
}
|
|
153
146
|
/**
|
|
154
|
-
* One PHASE group of the canvas
|
|
155
|
-
* — user 2026-08-12 feedback #2; plan
|
|
156
|
-
* 20260813-panel-agent-canvas-legend-layout Task 2 — the left-right
|
|
157
|
-
* rework): the stage columns split into two SIDE-BY-SIDE groups by iteration
|
|
147
|
+
* One PHASE group of the canvas : the stage columns split into two SIDE-BY-SIDE groups by iteration
|
|
158
148
|
* phase — **Phase 1** (review-edit-chain, the sequential Review & Edit
|
|
159
149
|
* chain: product-manager → architect → writing-specialist) LEFTMOST,
|
|
160
150
|
* **Phase 2** (sdd-implement → qc-tri → qa-gate, the iterative plan loop) to
|
|
@@ -180,7 +170,7 @@ export interface CanvasGroup {
|
|
|
180
170
|
};
|
|
181
171
|
/** The stage column ids of this group, stage order. */
|
|
182
172
|
columnIds: readonly string[];
|
|
183
|
-
/** Current-plan annotation host (design doc §1.2 —
|
|
173
|
+
/** Current-plan annotation host (design doc §1.2 —):
|
|
184
174
|
* true for the `autonomous-execute` phase group (the iterative plan loop)
|
|
185
175
|
* only. */
|
|
186
176
|
planNote: boolean;
|
|
@@ -191,34 +181,31 @@ export interface CanvasLayout {
|
|
|
191
181
|
height: number;
|
|
192
182
|
columns: readonly CanvasColumn[];
|
|
193
183
|
cards: ReadonlyMap<string, CanvasBox>;
|
|
194
|
-
/** Sub-bucket geometry per column id (
|
|
195
|
-
* Task 2): the `sdd-implement` column's implementor/reviewer caption seats
|
|
196
|
-
* + card bands — the supervise line anchors to the band edges (the
|
|
184
|
+
/** Sub-bucket geometry per column id (the supervise line anchors to the band edges (the
|
|
197
185
|
* inter-partition gap; QC W-001).
|
|
198
186
|
* Columns without sub-buckets are absent from the map. */
|
|
199
187
|
subBuckets: ReadonlyMap<string, SubBucketGeometry>;
|
|
200
188
|
/** The unknown sub-partition at the bottom of the LAST column (plan
|
|
201
|
-
*
|
|
189
|
+
* Task 5 —:
|
|
202
190
|
* `zone: 'general'` entities sink into a qa-gate-column-bottom sub-partition
|
|
203
191
|
* instead of a standalone fifth column). The caption seat + card band;
|
|
204
192
|
* null when the layout has no columns (total function — never a throw). */
|
|
205
193
|
unknown: UnknownSubPartition | null;
|
|
206
|
-
/** The Phase groups (
|
|
194
|
+
/** The Phase groups (user
|
|
207
195
|
* 2026-08-12 feedback #2; plan
|
|
208
|
-
*
|
|
196
|
+
* Phase 1 leftmost /
|
|
209
197
|
* Phase 2 right, top-aligned, each with its label seat; empty when the
|
|
210
198
|
* layout has no columns. */
|
|
211
199
|
groups: readonly CanvasGroup[];
|
|
212
200
|
}
|
|
213
|
-
/** The unknown sub-partition id
|
|
214
|
-
* — design doc §1.2): `zone: 'general'` entities render in a bottom
|
|
201
|
+
/** The unknown sub-partition id : `zone: 'general'` entities render in a bottom
|
|
215
202
|
* sub-partition of the LAST column titled「unknown / 未匹配角色」and marked
|
|
216
203
|
* `data-sub-bucket="unknown"`. The former standalone rightmost UNKNOWN column
|
|
217
|
-
*
|
|
204
|
+
* is REMOVED — the constant
|
|
218
205
|
* value survives as the sub-partition bucket id. */
|
|
219
206
|
export declare const UNKNOWN_COLUMN = "unknown";
|
|
220
207
|
/** One sub-bucket partition inside the `sdd-implement` column (plan
|
|
221
|
-
*
|
|
208
|
+
* the caption seat + the cards'
|
|
222
209
|
* band — the supervise line anchors to the band's edge (implementor:
|
|
223
210
|
* bottom edge; reviewer: top edge — the inter-partition gap; QC W-001). */
|
|
224
211
|
export interface SubBucketPartition {
|
|
@@ -234,15 +221,14 @@ export interface SubBucketPartition {
|
|
|
234
221
|
* line skip). */
|
|
235
222
|
band: CanvasBox | null;
|
|
236
223
|
}
|
|
237
|
-
/** The sub-bucket geometry of one column
|
|
224
|
+
/** The sub-bucket geometry of one column : implementor +
|
|
238
225
|
* reviewer partitions. Present ONLY for the `sdd-implement` column — the
|
|
239
226
|
* supervise anchors read the bands. */
|
|
240
227
|
export interface SubBucketGeometry {
|
|
241
228
|
implementor: SubBucketPartition;
|
|
242
229
|
reviewer: SubBucketPartition;
|
|
243
230
|
}
|
|
244
|
-
/** The unknown sub-partition of the LAST column
|
|
245
|
-
* Task 5 — design doc §1.2): the caption seat + the general cards' band. The
|
|
231
|
+
/** The unknown sub-partition of the LAST column : the caption seat + the general cards' band. The
|
|
246
232
|
* caption row (SUB_LABEL_H) sits ROW_GAP below the last flow card; the
|
|
247
233
|
* general cards follow SUB_GAP below it. */
|
|
248
234
|
export interface UnknownSubPartition {
|
|
@@ -258,19 +244,18 @@ export interface UnknownSubPartition {
|
|
|
258
244
|
band: CanvasBox | null;
|
|
259
245
|
}
|
|
260
246
|
/**
|
|
261
|
-
* Deterministic canvas layout (spec §4
|
|
262
|
-
*
|
|
263
|
-
*
|
|
247
|
+
* Deterministic canvas layout (spec §4
|
|
248
|
+
* + Task 8 + plan
|
|
249
|
+
* Task 2 — the F5 rework + the
|
|
264
250
|
* left-right rework): one column per EXPECTED_ROLE_FLOW stage (view order:
|
|
265
251
|
* review-edit-chain → sdd-implement → qc-tri → qa-gate) — FOUR columns
|
|
266
|
-
* total, laid out in TWO SIDE-BY-SIDE PHASE GROUPS (
|
|
267
|
-
* feedback #2; Task 2, user 2026-08-13 feedback #2): the **Phase 1 group
|
|
252
|
+
* total, laid out in TWO SIDE-BY-SIDE PHASE GROUPS (the **Phase 1 group
|
|
268
253
|
* LEFTMOST** (review-edit-chain — the sequential Review & Edit chain:
|
|
269
254
|
* product-manager → architect → writing-specialist) and the **Phase 2 group
|
|
270
255
|
* to its RIGHT** (sdd-implement → qc-tri → qa-gate — the iterative plan
|
|
271
256
|
* loop, annotated with the current `activePlanId`), every group label row
|
|
272
257
|
* TOP-ALIGNED at PAD_Y (design doc §1.2; the standalone rightmost unknown
|
|
273
|
-
* column is REMOVED
|
|
258
|
+
* column is REMOVED ). The `sdd-implement` column
|
|
274
259
|
* is split into sub-buckets by the
|
|
275
260
|
* PROJECTED `entity.bucket` (never a render-side guess): the implementor
|
|
276
261
|
* partition above — flow roles in the stage's original EXPECTED_ROLE_FLOW
|
|
@@ -300,7 +285,7 @@ export type PortId = 'north' | 'south' | 'west' | 'east';
|
|
|
300
285
|
export interface EdgeGeometry {
|
|
301
286
|
/** The SVG path `d` — a single `C` cubic-bezier command for the standard
|
|
302
287
|
* curves, or the multi-command `M … L … L … L … L … L …` side-gap detour
|
|
303
|
-
* polyline for col-skip cross-column edges
|
|
288
|
+
* polyline for col-skip cross-column edges . The render
|
|
304
289
|
* passes `d` through verbatim; `marker-end orient="auto"` follows the
|
|
305
290
|
* FINAL segment, so the arrow always rides the endpoint tangent (H1). */
|
|
306
291
|
d: string;
|
|
@@ -310,19 +295,18 @@ export interface EdgeGeometry {
|
|
|
310
295
|
y2: number;
|
|
311
296
|
}
|
|
312
297
|
/**
|
|
313
|
-
* One edge's SVG bezier geometry
|
|
314
|
-
* 5 — design doc §2.5/§2.6); null when an anchor is missing (total
|
|
298
|
+
* One edge's SVG bezier geometry ; null when an anchor is missing (total
|
|
315
299
|
* function).
|
|
316
300
|
*
|
|
317
301
|
* Port selection (design doc §2.5 — lines connect ports only, never through
|
|
318
302
|
* a card): forward (source column < target column) → source EAST → target
|
|
319
303
|
* WEST; reverse (source column > target column) → source WEST → target
|
|
320
|
-
* EAST; same column → the vertical flow (direction-aware
|
|
304
|
+
* EAST; same column → the vertical flow (direction-aware. The
|
|
321
305
|
* path END stands off STANDOFF px from the target port along the endpoint
|
|
322
306
|
* tangent (arrow tip off the card, H1); the source starts AT its port (no
|
|
323
307
|
* arrow there).
|
|
324
308
|
*
|
|
325
|
-
* Direction-aware vertical endpoints
|
|
309
|
+
* Direction-aware vertical endpoints : a same-column
|
|
326
310
|
* (or side-gap) flow whose SOURCE sits BELOW the target — the implement →
|
|
327
311
|
* review → rework cycle collapses to `code-reviewer → fullstack-dev` (the
|
|
328
312
|
* projection pair-dedupe keeps the LATEST direction) — must approach the
|
|
@@ -344,13 +328,11 @@ export interface EdgeGeometry {
|
|
|
344
328
|
* bezier hangs at `card left edge − SIDE_GAP`, clear of every text (H2) and
|
|
345
329
|
* every card body (H1).
|
|
346
330
|
*
|
|
347
|
-
* Inter-phase flows
|
|
348
|
-
* 20260813-panel-agent-canvas-legend-layout Task 2 — the left-right
|
|
349
|
-
* layout): a Phase 1 → Phase 2 handoff (e.g. writing-specialist →
|
|
331
|
+
* Inter-phase flows : a Phase 1 → Phase 2 handoff (e.g. writing-specialist →
|
|
350
332
|
* fullstack-dev — a real same-plan Review&Edit→implement transfer) is a
|
|
351
333
|
* normal FORWARD horizontal bezier (source east → target west) — the groups
|
|
352
334
|
* sit side-by-side at one top-aligned y band, so no label row lies between
|
|
353
|
-
* the cards. The CARD-AWARE guard
|
|
335
|
+
* the cards. The CARD-AWARE guard : a
|
|
354
336
|
* cross-column edge whose columns SKIP an intermediate column (e.g.
|
|
355
337
|
* writing-specialist → qc-specialist — a real docs-only / inline / QA-gate
|
|
356
338
|
* ledger chain) would run its direct horizontal bezier THROUGH the
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* EventLogPage (spec panel-tabs §5
|
|
2
|
+
* EventLogPage (spec panel-tabs §5) —
|
|
3
3
|
* the 事件记录 tab: a NON-canvas log page. Two partitions (spec §5):
|
|
4
4
|
* Agent 流转事件 (`view.events` ≤50 latest-first — unexpected dispatches
|
|
5
5
|
* fold in via the `expected` flag, NEVER double-appended; the unexpected
|
|
6
6
|
* badge is DISPATCH-only — settle rows are completion records whose
|
|
7
7
|
* projected `expected` is always false, they never flag as unexpected,
|
|
8
|
-
|
|
8
|
+
* and 违规记录
|
|
9
9
|
* (`view.violations`). Every row is an expandable native `<details>` (no-JS,
|
|
10
10
|
* keyboard-accessible, SSR-stable) whose body shows the FULL catalog fields;
|
|
11
11
|
* a missing field renders「—」— never a guessed value (spec §5/§8).
|
|
12
12
|
*
|
|
13
|
-
* Layout (
|
|
13
|
+
* Layout (user feedback「左右
|
|
14
14
|
* 排两列 + 锁定一个高内部滚动」): the two partitions render side by side in a
|
|
15
15
|
* locked-height two-column grid; the page never scrolls as a whole — each
|
|
16
16
|
* partition pins its title and scrolls internally (`event-log.module.css`).
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
* Dock migration decision (spec §5 — 无双份日志): the AgentEventDock is
|
|
19
19
|
* REMOVED, not degraded. The dock's content (row layout + status chips)
|
|
20
20
|
* moved into this page, and its host (the WorkflowCanvas canvas-corner)
|
|
21
|
-
*
|
|
21
|
+
* is gone — a dock-side "jump to 事件记录" entry would
|
|
22
22
|
* only duplicate the header TabNav, which already IS the jump to this tab.
|
|
23
|
-
* Zero `data-agent-event-dock` anchors remain repo-wide
|
|
23
|
+
* Zero `data-agent-event-dock` anchors remain repo-wide
|
|
24
24
|
*
|
|
25
|
-
* Row data: `eventLogEntries(view)` (
|
|
25
|
+
* Row data: `eventLogEntries(view)` (pure assembly; every field
|
|
26
26
|
* degrades individually). The `<details>` body backfills the FULL source
|
|
27
27
|
* fields (planId / taskId / taskCategory — not carried by the floor
|
|
28
28
|
* `EventLogEntry`) through a one-time id → `FlowEventView` map (T1-Min-3:
|