scene-capability-engine 3.6.27 → 3.6.28

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/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [3.6.28] - 2026-03-06
11
+
12
+ ### Added
13
+ - Added shared `mb_status` language across studio task feedback and capability inventory scene advice for Magicball UI rendering.
14
+ - Magicball docs now define the shared status-language contract for task cards and capability cards.
15
+
10
16
  ## [3.6.27] - 2026-03-06
11
17
 
12
18
  ### Added
package/README.md CHANGED
@@ -218,5 +218,5 @@ MIT. See [LICENSE](LICENSE).
218
218
 
219
219
  ---
220
220
 
221
- **Version**: 3.6.27
221
+ **Version**: 3.6.28
222
222
  **Last Updated**: 2026-03-05
package/README.zh.md CHANGED
@@ -218,5 +218,5 @@ MIT,见 [LICENSE](LICENSE)。
218
218
 
219
219
  ---
220
220
 
221
- **版本**:3.6.27
221
+ **版本**:3.6.28
222
222
  **最后更新**:2026-03-05
@@ -627,7 +627,7 @@ Studio JSON output now includes a stable UI-oriented task stream contract (in ad
627
627
  - `task.commands[]`: `cmd`, `exit_code`, `stdout`, `stderr`, `log_path`
628
628
  - `task.errors[]`: `message`, `error_bundle` (copy-ready diagnostic bundle)
629
629
  - `task.evidence[]`: structured evidence references
630
- - `task.feedback_model`: human-facing task feedback (`problem`, `execution`, `diagnosis`, `evidence`, `next_step`)
630
+ - `task.feedback_model`: human-facing task feedback (`problem`, `execution`, `diagnosis`, `evidence`, `next_step`, `mb_status`)
631
631
  - `event[]`: raw audit event stream (`studio events` also keeps legacy `events[]` for compatibility)
632
632
  - `studio events --openhands-events <path>` switches `source_stream=openhands` and maps OpenHands raw events to the same task contract fields.
633
633
  - hierarchical task reference lookup/rerun:
@@ -227,3 +227,9 @@ sce capability register --input <template.json> --json
227
227
 
228
228
  - `summary_recommendations[]`:顶部全局建议
229
229
  - `quick_filters[]`:推荐快捷筛选
230
+
231
+ ## 15. Magicball 统一状态语言
232
+
233
+ - Scene 卡片统一消费 `mb_status`
234
+ - 任务卡统一消费 `task.feedback_model.mb_status`
235
+ - 颜色建议:`danger / warning / info / success`
@@ -179,3 +179,14 @@ sce capability use --template <template-id> --spec <spec-id> --apply --json
179
179
  ]
180
180
  }
181
181
  ```
182
+
183
+ ### mb_status(统一状态语言)
184
+ ```json
185
+ {
186
+ "attention_level": "critical",
187
+ "status_tone": "danger",
188
+ "status_label": "blocked",
189
+ "blocking_summary": "缺决策策略,暂不可发布",
190
+ "recommended_action": "补齐决策策略"
191
+ }
192
+ ```
@@ -121,3 +121,14 @@ SCE 现在在时间线命令中增加:
121
121
  - 时间线优先展示“可恢复、可比较、可追踪”的节点信息
122
122
  - 所有字段都以 SCE 输出为准,Magicball 不自行推断
123
123
 
124
+
125
+ ## 6. Magicball 统一状态语言
126
+
127
+ SCE 现在会在任务反馈模型中提供 `mb_status`:
128
+ - `attention_level`
129
+ - `status_tone`
130
+ - `status_label`
131
+ - `blocking_summary`
132
+ - `recommended_action`
133
+
134
+ Magicball 可直接用这组字段控制颜色、图标、提示文案。
@@ -836,6 +836,17 @@ function resolveCapabilityTriadPriority(entry) {
836
836
  return 3;
837
837
  }
838
838
 
839
+ function buildCapabilityMagicballStatus(input = {}) {
840
+ const attention = normalizeText(input.attention_level) || 'medium';
841
+ return {
842
+ attention_level: attention,
843
+ status_tone: attention === 'critical' ? 'danger' : (attention === 'high' ? 'warning' : (attention === 'low' ? 'success' : 'info')),
844
+ status_label: normalizeText(input.status_label) || null,
845
+ blocking_summary: normalizeText(input.blocking_summary) || null,
846
+ recommended_action: normalizeText(input.recommended_action) || null
847
+ };
848
+ }
849
+
839
850
  function buildCapabilityInventorySceneAdvice(entry) {
840
851
  const sceneId = String(entry && entry.scene_id || 'scene.unknown');
841
852
  const releaseUi = entry && entry.release_readiness_ui ? entry.release_readiness_ui : { publish_ready: true, blocking_missing: [] };
@@ -886,7 +897,13 @@ function buildCapabilityInventorySceneAdvice(entry) {
886
897
  recommended_action: recommendedAction,
887
898
  blocking_summary: blockingSummary,
888
899
  next_action: nextAction,
889
- next_command: 'sce capability extract --scene ' + sceneId + ' --json'
900
+ next_command: 'sce capability extract --scene ' + sceneId + ' --json',
901
+ mb_status: buildCapabilityMagicballStatus({
902
+ attention_level: attentionLevel,
903
+ status_label: releaseUi.publish_ready ? 'publish_ready' : 'blocked',
904
+ blocking_summary: blockingSummary,
905
+ recommended_action: recommendedAction
906
+ })
890
907
  };
891
908
  }
892
909
 
@@ -1854,6 +1871,7 @@ module.exports = {
1854
1871
  filterCapabilityCatalogEntries,
1855
1872
  filterCapabilityInventoryEntries,
1856
1873
  sortCapabilityInventoryEntries,
1874
+ buildCapabilityMagicballStatus,
1857
1875
  buildCapabilityInventorySceneAdvice,
1858
1876
  buildCapabilityInventorySummaryStats,
1859
1877
  buildCapabilityInventorySummaryRecommendations,
@@ -1537,6 +1537,20 @@ function buildTaskFeedbackModel(payload = {}) {
1537
1537
  };
1538
1538
  }
1539
1539
 
1540
+ function buildMagicballStatusLanguage(input = {}) {
1541
+ const attention = normalizeString(input.attention_level) || 'medium';
1542
+ const status = normalizeString(input.status) || 'unknown';
1543
+ const blockingSummary = normalizeString(input.blocking_summary) || null;
1544
+ const recommendedAction = normalizeString(input.recommended_action) || null;
1545
+ return {
1546
+ attention_level: attention,
1547
+ status_tone: attention === 'critical' ? 'danger' : (attention === 'high' ? 'warning' : (attention === 'low' ? 'success' : 'info')),
1548
+ status_label: status || 'unknown',
1549
+ blocking_summary: blockingSummary,
1550
+ recommended_action: recommendedAction
1551
+ };
1552
+ }
1553
+
1540
1554
  function attachTaskFeedbackModel(payload = {}) {
1541
1555
  if (!payload || typeof payload !== 'object' || !payload.task || typeof payload.task !== 'object') {
1542
1556
  return payload;
@@ -1545,7 +1559,7 @@ function attachTaskFeedbackModel(payload = {}) {
1545
1559
  ...payload,
1546
1560
  task: {
1547
1561
  ...payload.task,
1548
- feedback_model: buildTaskFeedbackModel(payload)
1562
+ feedback_model: (() => { const model = buildTaskFeedbackModel(payload); return { ...model, mb_status: buildMagicballStatusLanguage({ status: model.execution.status, attention_level: model.diagnosis.root_cause_confidence === 'high' ? 'high' : (model.execution.status === 'completed' ? 'low' : 'medium'), blocking_summary: model.execution.blocking_summary, recommended_action: model.next_step.recommended_action }) }; })()
1549
1563
  }
1550
1564
  };
1551
1565
  }
@@ -3727,6 +3741,7 @@ module.exports = {
3727
3741
  runStudioReleaseCommand,
3728
3742
  runStudioRollbackCommand,
3729
3743
  runStudioEventsCommand,
3744
+ buildMagicballStatusLanguage,
3730
3745
  runStudioPortfolioCommand,
3731
3746
  runStudioBackfillSpecScenesCommand,
3732
3747
  runStudioResumeCommand,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scene-capability-engine",
3
- "version": "3.6.27",
3
+ "version": "3.6.28",
4
4
  "description": "SCE (Scene Capability Engine) - A CLI tool and npm package for spec-driven development with AI coding assistants.",
5
5
  "main": "index.js",
6
6
  "bin": {