abelien-harness 0.10.0 → 0.11.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 +6 -6
- package/package.json +2 -1
- package/skills/abelien-guide/SKILL.md +2 -2
- package/skills/abelien-harness/references/workflow-spec.md +1 -3
- package/skills/abelien-harness/scripts/ab.mjs +5 -16
- package/skills/abelien-workspace/SKILL.md +9 -16
- package/skills/abelien-workspace/assets/journey-stage-plan.json +2 -2
- package/skills/abelien-workspace/domain.json +2 -2
- package/skills/abelien-workspace/references/hardware-journey-orchestration.md +3 -3
- package/skills/abelien-workspace/references/harness-binding.md +23 -17
- package/skills/abelien-workspace/references/journey-stage-plan.md +185 -0
- package/skills/abelien-workspace/references/user-journey.md +11 -7
- package/skills/abelien-workspace/workflows/definitions/0852e4949f5a6246880c1a26bf5ccaa42f8cda06b960e7c7ce234a0a176878f9.json +0 -229
- package/skills/abelien-workspace/workflows/definitions/1179e62586cf6d88c6820022a933f719b3b4eb3c0df0856fb7a0cc6341a9d630.json +0 -1
- package/skills/abelien-workspace/workflows/definitions/1a9afef5463f53e58222b3476c0002aa9703b5ced16f531e3224beb14a28f9a3.json +0 -229
- package/skills/abelien-workspace/workflows/definitions/32ed16198839c06c36b43acbada5ba74403e37b2d351058bd7ad3d5269f76722.json +0 -1
- package/skills/abelien-workspace/workflows/definitions/399ef372790b7330d0ef88ce5096e7f69943d4793de97b2ed6c25165a332612f.json +0 -230
- package/skills/abelien-workspace/workflows/definitions/748a70482fb2f775f6e5fd942c7873534cf3e59614c77381f812a9710d479743.json +0 -1
- package/skills/abelien-workspace/workflows/definitions/b780bf280d61596b43eb6dbc6a417cf8df1ec9a7ae79a6de10f048da9ed58729.json +0 -229
- package/skills/abelien-workspace/workflows/definitions/c1b5c6c653f0c4761d51efee923aafbbeea05512e7f35c60f7f7d36ec49fc1d1.json +0 -229
- package/skills/abelien-workspace/workflows/definitions/df147960a3f7c4d631f66a6b91a7891f8a37d25a50322cf09bdc9304195963b0.json +0 -1
- package/skills/abelien-workspace/workflows/user-journey-hardware-algorithm.json +0 -230
- package/skills/abelien-workspace/workflows/user-journey.json +0 -391
|
@@ -13,7 +13,7 @@ Web 已提交基线 91fac59a 仍在 real_image 生图;原图绑定、CAD 原
|
|
|
13
13
|
|
|
14
14
|
更新:2026-10-03。依据三份旅程文档、本地产品决策及可检索的相关会话收敛;问题选项数量与 clarify 的锚定输出契约一致。
|
|
15
15
|
|
|
16
|
-
本文由 abelien-workspace 维护,是产品与宿主 Agent
|
|
16
|
+
本文由 abelien-workspace 维护,是产品与宿主 Agent 共用的完整用户旅程及判定规则,作为唯一正文维护入口;唯一的例外是 A1 通过之后到交付首版的逐阶段规则与允许动作,只在阶段计划中维护,本文 §5 的一览由它生成。guide 依据本文组织调用与对话;clarify 负责需求语义。职责与作品上下文见[领域模型](domain-model.md)。A1–C 用于解释用户所处的位置,不要求增加持久化阶段字段,也不代表对应功能已经上线。实际接入情况与旧 MVP 演示的边界集中在附录。
|
|
17
17
|
|
|
18
18
|
<a id="image-retry-intent"></a>
|
|
19
19
|
|
|
@@ -216,7 +216,11 @@ AI 补充的是展示编排,须与用户已定义的行为一致并保留系
|
|
|
216
216
|
|
|
217
217
|
## 5. A2:尽早交给用户一个可以改的起点
|
|
218
218
|
|
|
219
|
-
|
|
219
|
+
<a id="journey-stage-plan"></a>
|
|
220
|
+
|
|
221
|
+
**阶段计划**:A1 通过之后到交付首版这一段,按意图(create/restore/modify/remix)的阶段顺序、各阶段的目标、领域规则与允许的动作,只在[阶段计划](../assets/journey-stage-plan.json)中维护,由 `workspace.journey-next` 解释;Web、Claude Code、Codex 等所有宿主都按它推进这一段(调用见[能力映射](harness-binding.md#当前能力映射))。§2.4 的识别与参考、本节的硬件初选和首版,对应计划的主线 `orders`;由真实结果触发的硬件重选与取舍、保底草模、修复和首版后合并提问,对应计划的旁路 `side`(§5.3、§6、§7)。「[阶段计划一览](journey-stage-plan.md)」由 `npm run render:journey-plan` 从计划生成,测试比对两边一致,不要手改:要改某个阶段的规则或动作,就改计划、升 `plan_version` 并重新生成。本文其余部分维护 A1–C 判定与产品规则;计划的规则不得与之冲突,本文也不再逐阶段重复计划里的执行规则。
|
|
222
|
+
|
|
223
|
+
各阶段的目标、规则与允许的动作见[阶段计划一览](journey-stage-plan.md)。
|
|
220
224
|
|
|
221
225
|
### 5.1 得到有来源的硬件初选
|
|
222
226
|
|
|
@@ -553,19 +557,19 @@ BOM 记录实际采用的组合,已有整机覆盖的功能不重复计件。
|
|
|
553
557
|
| --- | --- | --- |
|
|
554
558
|
| 硬件初选 | `user-journey-hardware` → `abelien-hardware-selection` → `hardware.search` → Agent 证据判断 → 本地 `hardware.select` 是正式入口;`user-journey-hardware-candidates` → OSS `hardware.search` / `hardware.finalize` 仅保存候选提案 | 当前环境一定连通;全组合检查通过;已成为产品确认版本 |
|
|
555
559
|
| 硬件局部修订 | 本 MR 不包含修订能力和 workflow;以后须核对实际安装声明 | 修订入口已存在或服务已可用 |
|
|
556
|
-
| 算法选型 |
|
|
560
|
+
| 算法选型 | 正式硬件过门后由宿主另起 `user-journey-algorithm`;硬件与算法不串在同一个 run 里 | 算法入口已接入宿主、实现已部署或在设备实测 |
|
|
557
561
|
| 3D 生成 | 有独立生成入口与 provider 适配;旧 workspace 生成 mock 已移除 | 已接通产品结构编辑、版本采用和装配验证闭环 |
|
|
558
562
|
| 产品组合检查、卡片、版本采用及确认 | workspace 定义了业务要求;当前接入表未证明完整闭环 | 可以用普通资源写入或旧 `confirmPlan` 替代真实保存与校验 |
|
|
559
|
-
| `
|
|
563
|
+
| 作品推进 | 宿主持有作品事实;A1 通过之后到交付首版的阶段与规则由 `workspace.journey-next` 按[阶段计划](#journey-stage-plan)给出;旧 `user-journey` workflow 及其 `journey` 判定契约已退役 | 拿到下一阶段就等于该阶段已完成;阶段计划可以代替 A1–C 判定、B3 或确认回执 |
|
|
560
564
|
| `user-journey-mock`(旧 `user-journey`) | 执行定义、专属 mock 能力和实体机器已移除;仅保留历史运行与评估记录 | 动态需求澄清、真实二创、自由修改、B3 四项、真实支付或文件交付已通过 |
|
|
561
565
|
|
|
562
566
|
这份产品旅程不随某一能力暂时未接通而退化成旧演示流程;执行时则始终只报告实际完成的部分。
|
|
563
567
|
|
|
564
|
-
|
|
568
|
+
作品推进不是 workflow。A1、B2 等待、任务进行中、缺能力或普通修改时,宿主停止本轮并说明下一步,等新事实到来再判断;后续事件、采用版本与确认事实每轮从宿主/产品真实记录恢复,不另造产品状态。
|
|
565
569
|
|
|
566
|
-
只有同版确认快照真实保存成功,且已向用户交代 PRD、BOM
|
|
570
|
+
只有同版确认快照真实保存成功,且已向用户交代 PRD、BOM、分享/视频各自的真实交付状态后,才算本轮交接完成。文件仍可处于生成或失败状态,但必须有同版真实任务/错误依据;报价与预订不阻塞分享,也不是交接的必要条件。交接完成只表示已交代真实状态,不证明产品成功。未接通确认接口时报告缺口,不能用 mock 顶替。C 后的新修改继续按本文处理。
|
|
567
571
|
|
|
568
|
-
**旧实例迁移:** `user-journey-mock`
|
|
572
|
+
**旧实例迁移:** `user-journey-mock` 与 `user-journey` 执行定义都已删除,历史记录不改名、不删除。`user-journey` 的单步与 25 步实例、已命名为 `user-journey-mock` 的实例都仅查看原始 status,不取 HTTL 或 advance。恢复真实作品时回读产品上下文后按本文与阶段计划接续,不重放旧 mock 副作用。
|
|
569
573
|
|
|
570
574
|
## 附录 C:来源与维护入口
|
|
571
575
|
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "user-journey-hardware-algorithm",
|
|
3
|
-
"domain": "abelien-workspace",
|
|
4
|
-
"executionProtocol": "pinned-result-v1",
|
|
5
|
-
"description": "Library recall, suitability review, fixed Prismer-first/Volc evidence for unresolved slots, source-bound merge, then the same formal hardware.select and gate",
|
|
6
|
-
"input": {
|
|
7
|
-
"required": [
|
|
8
|
-
"requirements",
|
|
9
|
-
"reactions"
|
|
10
|
-
]
|
|
11
|
-
},
|
|
12
|
-
"steps": [
|
|
13
|
-
{
|
|
14
|
-
"id": "record-requirements",
|
|
15
|
-
"executor": "cli",
|
|
16
|
-
"action": "resource.put",
|
|
17
|
-
"args": {
|
|
18
|
-
"kind": "draft",
|
|
19
|
-
"id": "hardware-algorithm-d-{{hash}}",
|
|
20
|
-
"body": {
|
|
21
|
-
"requirements": "{{input.requirements}}",
|
|
22
|
-
"reactions": "{{input.reactions}}"
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"id": "classify-hardware",
|
|
28
|
-
"executor": "agent",
|
|
29
|
-
"instruction": "需求已澄清;requirements 是 clarify 的 Requirements:context 为落点与场景,reaction[] 为全部触发→反应,limits[] 每项带 strength。按全部 reaction 推导功能槽位与数量,strength=hard 的 limits 进 hard_constraints,preference 只作排序提示;缺 reaction 或只有品类标签时停止并说明。读取同级 abelien-hardware-selection/SKILL.md,并用其 scripts/load-guide.mjs 依次按需加载 entry、命中的 level1、命中的 level2、contract;仅提交功能槽位、数量、受控三级路径和需求硬约束,不提交型号或猜测数据库事实。回复 {\"slots\":[...]};若需求不足或路径不确定,停止并说明,不能伪造槽位。",
|
|
30
|
-
"replySchema": {
|
|
31
|
-
"slots": "array"
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"id": "search-hardware-wikis",
|
|
36
|
-
"executor": "cli",
|
|
37
|
-
"action": "capability.run",
|
|
38
|
-
"args": {
|
|
39
|
-
"capability": "hardware.search",
|
|
40
|
-
"input": {
|
|
41
|
-
"operation": "search",
|
|
42
|
-
"query": "{{input.requirements}}",
|
|
43
|
-
"requirements": "{{input.requirements}}",
|
|
44
|
-
"slots": "{{steps.classify-hardware.result.slots}}",
|
|
45
|
-
"policy": {
|
|
46
|
-
"prefer_system_candidates": true,
|
|
47
|
-
"top_k_per_slot": 8,
|
|
48
|
-
"include_content": true
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"id": "hardware-knowledge-recalled",
|
|
55
|
-
"executor": "cli",
|
|
56
|
-
"action": "machine.send",
|
|
57
|
-
"args": {
|
|
58
|
-
"machine": "hardware-recall",
|
|
59
|
-
"event": "confirmRecall",
|
|
60
|
-
"instance": "{{steps.search-hardware-wikis.resource.id}}"
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"id": "review-hardware-candidates",
|
|
65
|
-
"executor": "agent",
|
|
66
|
-
"instruction": "Read the complete library candidates and original requirements/slots. Review suitability against function and every hard constraint. Reply {\"unresolved_slots\":[{\"slot_id\":\"original slot\",\"reason\":\"no candidates or specific reasons all candidates are unsuitable\",\"query\":\"official model search targeting function/category/key hard constraints\",\"count\":10}]}. Every zero-candidate slot requires supplemental search. All unsuitable candidates also require search. Preserve rechargeable built-in battery, wireless charging, and all other original requirements; do not ask the user to drop a requirement because the catalog is empty. unresolved_slots contains only slots that need search. Omit suitable library slots entirely; never add placeholder rows with an empty query or count=0. Return [] when all slots are suitable. Before committing this review, the trusted host validates the full original requirements, slots and recall with validate-web-search-plan.mjs; a VALIDATION reply preserves this pause so the same run can be corrected. Count is optional and a positive integer; Prismer search.topK and return.topK are explicit. Do not apply undocumented Prismer query/result limits or truncate requirements. The trusted fixed Prismer-first policy permits Volc only after a saved definitive denial, successful empty query or unsent missing Key; Volc alone checks its official 1-100 character Query and Count 1-50 at dispatch. Unknown dispatched effects never authorize fallback or a new invocation. Do not supply URLs, credentials, commands or providers. System reuse is optional: poor matches must not force complex whole systems. Concept visuals and the original requirements come first.",
|
|
67
|
-
"replySchema": {
|
|
68
|
-
"unresolved_slots": "array"
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
"id": "search-hardware-web",
|
|
73
|
-
"executor": "cli",
|
|
74
|
-
"action": "capability.run",
|
|
75
|
-
"args": {
|
|
76
|
-
"capability": "hardware.web-search",
|
|
77
|
-
"input": {
|
|
78
|
-
"requirements": "{{input.requirements}}",
|
|
79
|
-
"slots": "{{steps.classify-hardware.result.slots}}",
|
|
80
|
-
"recall_id": "{{steps.search-hardware-wikis.resource.id}}",
|
|
81
|
-
"unresolved_slots": "{{steps.review-hardware-candidates.result.unresolved_slots}}"
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"id": "extract-web-hardware",
|
|
87
|
-
"executor": "agent",
|
|
88
|
-
"instruction": "When pages contain blob_ref, use resource get <evidenceResourceId> --page <pageId> to read each required full original page; never copy page bodies into replies. Read the persisted hardware-web-evidence pages from search-hardware-web in full. Search Content/snippets/provider official labels are not complete official pages or proof of authority. Extract only manufacturer pages; uncertain source authority remains unknown and third-party mirrors are not official merely because their URL contains a manufacturer domain. Reply {\"candidates\":[{\"slot_id\":\"original slot\",\"page_id\":\"persisted page ID\",\"manufacturer\":\"exact manufacturer\",\"manufacturer_quote\":\"at least 8 source characters\",\"model\":\"exact model\",\"model_quote\":\"at least 8 source characters\",\"parts\":[{\"name\":\"physical part name\",\"name_quote\":\"exact source quote\",\"shape\":\"box|cylinder|sphere|unknown\",\"shape_quote\":\"exact source quote\",\"dimensions_mm\":{\"length\":20,\"width\":12,\"height\":3},\"dimension_quotes\":{\"length\":\"exact quote identifying this part, axis, numeric value and unit\",\"width\":\"exact quote\",\"height\":\"exact quote\"}}]}]}. Quotes must include the exact part/name/shape they support. Each physical part has separate dimensions; cylinders use diameter/height, spheres use diameter. Unknown dimensions are omitted, never invented or defaulted. Conflicting versions and unknown multi-part overall dimensions remain unknown; do not combine contradictory versions. Do not submit page bodies, official/verified/CAD_available/source/geometry claims. Missing reliable pages or no network means candidates empty. This is envelope_only, not true component CAD or engineering verification. For an attributed tuple such as Back Panel: 48mm x 32mm x 0.5mm, add dimensions_quote with the entire exact source string and dimension_axes:[\"length\",\"width\",\"height\"] in original order; dimensions_mm must map each original value/unit to that explicitly declared axis. Preserve alternate imperial tuples in the quote; never use their values as mm or borrow another part's measurements. A 2-value tuple leaves height unknown. A box inferred from dimensions is only an envelope expression: actual part shape and orientation remain unknown. dimension_quotes may be empty for this tuple mode. Never invent coil thickness or total assembly dimensions.",
|
|
89
|
-
"replySchema": {
|
|
90
|
-
"candidates": "array"
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
"id": "merge-hardware-web",
|
|
95
|
-
"executor": "cli",
|
|
96
|
-
"action": "capability.run",
|
|
97
|
-
"args": {
|
|
98
|
-
"capability": "hardware.web-merge",
|
|
99
|
-
"input": {
|
|
100
|
-
"requirements": "{{input.requirements}}",
|
|
101
|
-
"slots": "{{steps.classify-hardware.result.slots}}",
|
|
102
|
-
"recall_id": "{{steps.search-hardware-wikis.resource.id}}",
|
|
103
|
-
"evidence_id": "{{steps.search-hardware-web.resource.id}}",
|
|
104
|
-
"candidates": "{{steps.extract-web-hardware.result.candidates}}"
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
"id": "select-hardware-from-wikis",
|
|
110
|
-
"executor": "agent",
|
|
111
|
-
"instruction": "先读 abelien-hardware-selection/references/selection-service-contract.md 与真实候选的完整 Wiki。每槽位选择一个真实 component_id,显式 quantity 等于槽位 quantity;manufacturer/model 取候选,selection_reason 非空,wiki_evidence 为至少 8 字符的 Wiki 原文引用数组。selected_models 每项需 constraint_checks,覆盖 function、slot:<hard_constraints 的键>、limit:<每项 hard limit.id>;每项包含 constraint_id、status=verified|unknown|incompatible、reason、evidence:[{component_id,quote}]。多型号另给 compatibility_checks:power、interfaces 两维须包含 status、reason、每个型号的原文 evidence,可信电气数据确定性通过时以 compatibility_report 为准;mechanical、thermal、software 只作提示,可选填写,但填 incompatible 仍阻塞。证据不足填 unknown,不可编造。status=verified|needs_confirmation,plan_mode=assemble_new|adapt_system,其余数组 selected_models/coverage_ledger/remaining_slots/unknowns/replacement_plan 必填。先比较整机,但整机继承缺 manifest 必须待确认,不凭文案抵扣数量。verified 只表示 Wiki 证据判断通过,不是独立工程兼容求解或实测,不代表采用。 Read only merge-hardware-web candidates for the final choice. Preserve structured limits.envelope and source strength; dimension metadata/name/selection-line identity are supplied by the trusted finalizer, never invented. Incompatible dimension candidates require replacement; only decision_required (user hard limit, measured/datasheet size, no axis-aligned fit) returns needs_confirmation, other risk/unknown stays advisory and risk candidates rank last. Electrically incompatible candidates (trusted data: missing bus type or count) require replacing one side; ELECTRICAL_SUPPLY_GAP means add a power or regulator part. all_indexed_candidates_rejected is scoped to this indexed category; occupancy is advisory and clear is only coarse single-part screening. Whole-system reuse is optional; a poor match never forces a complex baseline. External IDs are external:<hash>, with source authority and engineering unknowns; envelopes are not component CAD and cannot grant adoption or delivery.",
|
|
112
|
-
"replySchema": {
|
|
113
|
-
"status": "verified|needs_confirmation",
|
|
114
|
-
"plan_mode": "adapt_system|assemble_new",
|
|
115
|
-
"selected_models": "array",
|
|
116
|
-
"coverage_ledger": "array",
|
|
117
|
-
"remaining_slots": "array",
|
|
118
|
-
"unknowns": "array",
|
|
119
|
-
"replacement_plan": "array",
|
|
120
|
-
"compatibility_checks": "array"
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
"id": "select-hardware",
|
|
125
|
-
"executor": "cli",
|
|
126
|
-
"action": "capability.run",
|
|
127
|
-
"args": {
|
|
128
|
-
"capability": "hardware.select",
|
|
129
|
-
"input": {
|
|
130
|
-
"requirements": "{{input.requirements}}",
|
|
131
|
-
"slots": "{{steps.classify-hardware.result.slots}}",
|
|
132
|
-
"recall_id": "{{steps.merge-hardware-web.resource.id}}",
|
|
133
|
-
"selection_proposal": "{{steps.select-hardware-from-wikis.result}}"
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"id": "record-hardware-selection",
|
|
139
|
-
"executor": "cli",
|
|
140
|
-
"action": "resource.update",
|
|
141
|
-
"args": {
|
|
142
|
-
"id": "{{steps.record-requirements.resource.id}}",
|
|
143
|
-
"bodyPatch": {
|
|
144
|
-
"hardwareSelectionId": "{{steps.select-hardware.resource.id}}",
|
|
145
|
-
"hardwareSelectionStatus": "{{steps.select-hardware.result.status}}",
|
|
146
|
-
"hardwareSelectionRevision": "{{steps.select-hardware.result.revision}}",
|
|
147
|
-
"hardwarePlanMode": "{{steps.select-hardware.result.plan_mode}}"
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
"id": "hardware-selected",
|
|
153
|
-
"executor": "cli",
|
|
154
|
-
"action": "machine.send",
|
|
155
|
-
"args": {
|
|
156
|
-
"machine": "hardware-selection",
|
|
157
|
-
"event": "confirmSelection",
|
|
158
|
-
"instance": "{{steps.record-requirements.resource.id}}"
|
|
159
|
-
},
|
|
160
|
-
"completeWhen": {
|
|
161
|
-
"path": "steps.hardware-selected.result.to",
|
|
162
|
-
"equals": "selected_pending_confirmation"
|
|
163
|
-
},
|
|
164
|
-
"completionResult": {
|
|
165
|
-
"selectionId": "{{steps.select-hardware.resource.id}}",
|
|
166
|
-
"selectionStatus": "{{steps.select-hardware.result.status}}",
|
|
167
|
-
"selectionRevision": "{{steps.select-hardware.result.revision}}"
|
|
168
|
-
}
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
"id": "research-algorithms",
|
|
172
|
-
"executor": "agent",
|
|
173
|
-
"instruction": "硬件选型已完成。读取同级 abelien-algorithm/SKILL.md 和 references/research-policy.md,并从 context-json 的 select-hardware.resource 读取准确厂商、型号、能力和 Wiki 证据。针对 input.reactions 先检索硬件厂商官方资料,再检索算法或模型官方资料与 Hugging Face;端侧不满足且用户允许联网时才比较成熟云服务。选择每个 reaction 的最合适实现并回复 {\"bindings\":[...],\"candidates\":[...],\"sources\":[...],\"unavailable_sources\":[...],\"unknowns\":[...],\"blocking_unknowns\":[...]};来源必须回读,binding 必须明确 edge、cloud 或 hybrid。",
|
|
174
|
-
"replySchema": {
|
|
175
|
-
"bindings": "array",
|
|
176
|
-
"candidates": "array",
|
|
177
|
-
"sources": "array",
|
|
178
|
-
"unavailable_sources": "array",
|
|
179
|
-
"unknowns": "array",
|
|
180
|
-
"blocking_unknowns": "array"
|
|
181
|
-
}
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
"id": "select-algorithms",
|
|
185
|
-
"executor": "cli",
|
|
186
|
-
"action": "capability.run",
|
|
187
|
-
"args": {
|
|
188
|
-
"capability": "algorithm.finalize",
|
|
189
|
-
"input": {
|
|
190
|
-
"operation": "select",
|
|
191
|
-
"hardware_selection_id": "{{steps.select-hardware.resource.id}}",
|
|
192
|
-
"hardware_selection_revision": "{{steps.select-hardware.result.revision}}",
|
|
193
|
-
"requirements": "{{input.requirements}}",
|
|
194
|
-
"reactions": "{{input.reactions}}",
|
|
195
|
-
"research": "{{steps.research-algorithms.result}}"
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
"id": "algorithm-selected",
|
|
201
|
-
"executor": "cli",
|
|
202
|
-
"action": "machine.send",
|
|
203
|
-
"args": {
|
|
204
|
-
"machine": "algorithm-selection",
|
|
205
|
-
"event": "confirmSelection",
|
|
206
|
-
"instance": "{{steps.select-algorithms.resource.id}}"
|
|
207
|
-
}
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
"id": "record-algorithm-selection",
|
|
211
|
-
"executor": "cli",
|
|
212
|
-
"action": "resource.update",
|
|
213
|
-
"args": {
|
|
214
|
-
"id": "{{steps.record-requirements.resource.id}}",
|
|
215
|
-
"bodyPatch": {
|
|
216
|
-
"algorithmSelectionId": "{{steps.select-algorithms.resource.id}}",
|
|
217
|
-
"algorithmSelectionStatus": "{{steps.select-algorithms.result.status}}",
|
|
218
|
-
"algorithmSelectionRevision": "{{steps.select-algorithms.result.revision}}"
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
],
|
|
223
|
-
"result": {
|
|
224
|
-
"selectionId": "{{steps.select-hardware.resource.id}}",
|
|
225
|
-
"selectionStatus": "{{steps.select-hardware.result.status}}",
|
|
226
|
-
"selectionRevision": "{{steps.select-hardware.result.revision}}"
|
|
227
|
-
},
|
|
228
|
-
"legacyResume": "read_only"
|
|
229
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"description":"完整产品旅程入口:从零/有效参考二创 → A1 需求可推断 → A2 首版 PRD/BOM → B1/B2 修改与必要决定 → B3 完整可确认 → C 同版快照与交付。用户可随时收尾进入仿真/Three.js 成果体验,收起编辑面板并保留 PRD 查看/导出入口;展示模式与确认阶段独立。workspace 维护业务条件,由 guide 跨轮调度,按模板逐轮维护 PRD,服务未接入时不假写入。","domain":"abelien-workspace","input":{"optional":{"entry":"scratch | remix;省略时由真实上下文判断,不由内核校验","imageRefs":"用户提供的参考图引用;仅图像不足时补充必要意图","productContextRef":"已有作品的真实上下文引用;恢复时回读最新版本,不把 run.input 当作当前事实","reference":"二创来源:sourceId、sourceRevision、授权范围及真实资产引用;不得伪造或继承原作品确认"},"required":["prompt"]},"journey":{"authority":"../references/user-journey.md","binding":"../references/harness-binding.md","capabilityRoutes":{"algorithm":"user-journey-algorithm;输入已验证硬件与完整 reactions","appearance":"读取 ../../abelien-appearance/SKILL.md:外观/ID editing、轮廓比例、CMF、部位造型、参考匹配及实际看图的视觉审查;图生网格按需调用 3dgen。独立生成成功不等于视觉通过或作品采用","clarify":"读取 ../../abelien-clarify/SKILL.md,整理需求;不是 CLI capability。","hardwareAndAlgorithm":"user-journey-hardware-algorithm;只在完整 reactions 及必要输入具备时使用","hardwareInitial":"user-journey-hardware → abelien-hardware-selection → hardware.search TOS → Agent 证据判断 → 本地 hardware.select;唯一正式初选入口;TOS hardware.search 只提供候选,不能静默替代正式服务","hardwareRevision":"user-journey-hardware-revise;服务需真实可用","productServices":"成果体验模式及面板切换、仿真/动作播放器、PRD 条目写入/回读、视图刷新、草稿/确认版导出、组合检查、版本采用、卡片、确认快照、分享与支付按宿主实际契约;缺失就报告,不用普通 resource.put 冒充业务写入或界面成功","structure":"读取 ../../abelien-structure/SKILL.md:早期空间约束、CAD 复用、必要的 Build123d 建模、装配与几何检查,并向 appearance 提供实际模型渲染。仅使用宿主实际能力,不把本地辅助脚本当成已部署 Web Worker;结构成功不等于外观通过或作品采用 优先从 OSS 按固定 ID/版本复用整机、子装配和组件,确认无可用资产才自建缺失部分;无权限、网络或摘要失败及不支持导入不等于无资产。"},"checkPolicy":{"blockingUnknown":"记录不知道什么、缺什么证据、影响什么;暂停依赖工作,不可确认,独立工作继续。","conflict":"原要求及授权内可解决则 B1 调整复查,否则 B2 取得取舍。","invalid":"无检查、过期/空/不完整检查、运行中或工具失败不能当成 pass 或非阻塞 unknown。","nonBlockingUnknown":"可随概念快照保留,但不得写成通过或实测。","pass":"只认可有证据的覆盖范围,仍核对 B3;设计范围不代表能力已接通。","scope":["行为覆盖","输入输出","运行环境","整体资源","供电联网","结构适配","用户要求"]},"clarify":"../../abelien-clarify/SKILL.md","contractVersion":"2026-10-05","domainModel":"../references/domain-model.md","entries":[{"id":"scratch","rules":["保留原话、图片和限制;文字优先于图片,不从图片擅自增加功能。","登录和失败恢复保留同一次意图与来源,避免重复建档;首次背景问卷不替代需求澄清。"]},{"id":"remix","rules":["核对来源版本、二创授权、3D/BOM/行为和可改范围;浏览可见不等于可编辑。","创建独立作品上下文,不继承来源确认;明确局部修改只处理受影响部分。","来源加载失败保留输入与引用,不暗换起点;无修改意图时明确做同款还是改哪里。"]}],"execution":{"cancellation":"仅明确放弃本次运行才 cancel;不喜欢、拒绝候选、继续修改或暂不决定不等于取消。","completion":"同版确认快照实际保存且交代真实交付状态后才 advance;由 completionGuard 调用可信宿主 verifyCompletion 回读证据,缺接口或未通过时保持暂停。文件或分享未就绪可按真实任务状态交接。可发布 handoff 引导用户查看交付或主动进入保存与预约,预订不是必经步骤,跳转不是业务回执。","continuation":"同一 Agent 步骤可以跨多轮对话;用户答复、任务结果和当前版本从宿主/产品回读,run.input 仅为启动快照。","engine":"workflow-v1-linear","interpretation":"journey 为供 Agent 阅读的产品判定契约;内核只执行 steps,不解析这里的阶段、规则、转移或 input.optional,也不校验 replySchema。","legacy":"旧 25 步定义、workspace mock 能力及 draft/quote 样例 FSM 已删除;旧 user-journey 或 user-journey-mock 实例只读原始 status,不取新版 HTTL 或 advance,不改历史文件。","mode":"agent_driven_loop","state":"A1–C 由真实事实推导,不持久化第二套产品 FSM;awaiting_agent 不等于 B2,done 不等于 C。","wait":"缺答案、缺能力、任务运行中或证据未变时保持 awaiting_agent;停止本轮并说明下一步,不空转、不提交假完成。"},"guide":"../../abelien-guide/SKILL.md","interactionInvitation":{"authority":"../references/user-journey.md#interaction-refinement","binding":"使用宿主实际支持的非阻塞选择能力,不虚构已注册卡片 kind 或 action key","eligibility":"按宿主实际版本核对展示条件;不能仅因需求足够就邀请体验尚未加载的主体;不等待最终 PRD 导出,未答不阻塞独立授权工作。","options":["继续细化交互","先收尾,体验成果"],"presentation":"可选选择题卡片,不是 B2 必答问题,不只口头邀请","selection":"继续才询问具体交互;收尾即进入 resultExperience;选择本身不修改需求或确认方案","title":"核心需求已经清楚了,接下来你想?","unanswered":"不代选、不催问、不覆盖必要问题卡;继续已有授权的独立工作"},"prdContract":"../references/prd-contract.md","prdMaintenance":{"boundary":"需求登记不等于实现通过,不为逐轮维护单独展示需求版 PRD 或要求确认文档;契约只供 Agent 阅读,不是内核执行器或已接通的写入 API","operations":["register","amend","withdraw"],"persistence":"按 prdContract 校验基线与事件,保留 ID、来源、未受影响内容及历史,经产品服务写入、回读后刷新同版视图;缺接口只保留待登记差异","startsAt":"A1","template":"读取 prdTemplate 的 source 与 sections:七块总览加需求清单/图片引用,不用三个编辑入口替代文档结构","trigger":"每轮有效需求新增、修改、撤回或澄清答复;领域采用/有效检查返回时刷新关联行"},"prdTemplate":"../assets/prd-template.json","resultExperience":{"authority":"../references/user-journey.md#result-experience","mode":"同一作品的展示模式,不增加 A1–C 阶段,不要求先满足 B3/C,不自动确认、取消或升版","panels":"收起对话、问题卡、配置、组件库及其他全部编辑面板,隐藏面板不占布局或接收焦点;保留作品、体验控制、继续修改及固定 PRD 入口,结果返回不自动展开面板","prd":"编辑与成果体验右上角常驻「PRD/导出」按钮,不随面板收起;主动打开查看/导出草稿或所选确认版,核对版本与文件状态,不要求先确认,关闭回体验","prdHint":"首次收尾在按钮旁轻提示,当前版 PRD 可读且能发起导出才提示“PRD 已整理,可查看或导出”;否则显示整理中、失败或未接入;文件真实可读才提示可下载。提示可消失,按钮常驻,完成后不自动展开文档","returnToEdit":"继续修改恢复原面板布局和作品上下文;单纯模式切换不升版,不重问已明确需求,具体修改才走正常更新回路","simulation":"当前版本有可运行仿真时展示仿真环境,提供真实输入/响应与停止/重置;说明仿真范围,不当实物验证","stateBoundary":"状态定义是播放器编排,保留用户/系统来源,不新增需求或写工程 pass,不复用 workflow 或实体 machine 状态;触发演示不等于修改作品","threeJs":"无可用仿真时,以已有需求或 AI 编排的少量 machine states 驱动 Three.js 可触发的抽象动作;状态、事件、动作、转换与复位绑定同版需求和模型,只用实际播放器支持的能力,不只展示静态模型或转动镜头","trigger":"用户点击随时收尾或明确表达收尾意图;只暂停提问时结合上下文,不自动离开编辑","unavailable":"模型或播放器未就绪时保留可用成果与真实加载/失败状态,不冒充可玩、不强制重新追问;仿真失败仅在行为演示可用时明确切换"},"stages":{"A1":{"allOf":["首版 PRD/BOM 全部需求侧必填字段可由用户事实或有依据、可撤销的系统假设推断","使用落点与完整行为足够明确,摘要不丢失行为","无阻塞歧义或用户硬要求缺口"],"purpose":"基础需求足以推断首版,不让用户填写工程表格","rules":["本轮明确需求按 prdContract 登记/修改/撤回 PRD 条目,保留原话、ID 和来源,不等待选型或确认。","只问阻塞首版且必须用户决定的内容;别帮我猜时停用相关默认。","基础需求足够后推进首版;按旅程 §4.1 核对宿主实际展示条件后,用可选选择题卡片邀请继续细化交互或先收尾。PRD 从已保存需求起可读,不强制展开、不增加文档确认关卡。交互已明确或用户已要求停止提问时不重复邀请。","交互细化邀请不生成 B2 待答阻塞;用户未答不推定偏好、不催问,独立且已授权工作可继续。操作选择不修改需求,具体交互答复才交 clarify 整理并更新同一需求。","满足即进入 A2,不再问是否生成;型号、价格、兼容与性能由工程证据取得,不让用户保证。"]},"A2":{"actions":["优先复用符合需求的 OSS 整机、子装配与组件 CAD,核对来源后尽早展示,审查与采用独立;没有可用 CAD 的文字创作先生成概念图,再自动选型并绑定原图构建 CAD。实际宿主缺能力时报告缺口,不能强行调用未注册工具。","完整需求驱动整机优先、剩余功能补组件;无合适整机时有依据地组合组件。","区分候选与实际采用,按真实采用契约形成当前方案。","硬件初版足够即展示可改起点,提供模板七块总览的草稿 PRD 与 BOM 资料入口,不自动展开完整文档,不等待全部 3D;填写提示不作事实。","标明来源、已选项、系统假设和待细化项;第一次邀请改外观、组件或互动。"],"failure":"无候选、来源不足、服务失败按真实缺口处理,不生成假型号或切换 mock。","firstInvitation":{"blocking":false,"rule":"用户不答仍继续输入与授权已具备的独立 3D、算法和结构工作;不是 B2 必答卡。同轮已展示交互邀请选择题卡片时合并,不重复弹卡,用户已要求停止追问时只展示真实结果,不再次邀请;成果体验中保持面板收起。"},"purpose":"尽早展示有来源的阶段产物并补充硬件事实"},"B1":{"cycle":["消费真实事件,必要时更新完整需求并按 prdContract 同轮维护 PRD 条目","领域执行/提案","校验并实际采用","采用变化后更新产品版本,使旧检查失效","对当前完整组合进行有效检查,刷新同版 PRD 的实现与检查列","重判 B1/B2/B3 或等待"],"purpose":"围绕同一方案执行受影响的细化和修改","rules":["颜色、话术等局部变化不机械重选整机;纯咨询、浏览、旋转、发卡、进度和只说继续修改不升版。","冻结区不可改;非冻结区仍需实际资产支持,不把渲染节点选择等同功能器件替换。","换底依据落点、运动方式、包络档根本变化;保留需求,改变硬要求或超出授权先问。","过期结果不得覆盖新版;候选、同意提案、工具成功与实际采用分开。","已采用 A 上的 CAD 修改使用现有受信 Studio broker:同一修改单依次 modification create → tool register → invocation submit/get → receipt get;未知写入只读原身份,不换 operation 或重复付费调用。","B 检查 conflict 后仅在原授权内以 parentCandidateId=B 和原报告 repairBasis 生成 C;整条候选链的 baseline/current 仍是 A,C 通过检查后也须显式采用才成为下一版。","暂停、刷新和接续复用原修改单、invocation、wait、执行定义与根预算;取消只保存回执,重复通知只接续一次,unknown 不自动返工。"]},"B2":{"purpose":"仅为影响当前工作的必要用户决定等待","questionPolicy":{"defaultQuestions":1,"freeText":true,"maxCardsPerTurn":1,"maxIndependentQuestions":3,"optionsPerClarification":3},"rules":["选项须真实、有区别;不能凑造方案,可用暂不决定保留原状。","未答卡不叠发;按原问题、适用版本、答复事件消费。","部分答复只解决对应事项;自由输入可构成新需求。","沉默、超时、跳过、催进度不是授权;你定只覆盖具体上下文。","先别问了就暂停追问;独立且已授权工作可继续。","无卡片接口时仅对话询问,不声称创建了版本绑定卡。"]},"B3":{"allOf":["本次确认范围必要工作完成,无待办/运行中/失败,必要用户决定已解决","每条行为有实现依据,并可写出适用前提、触发、回应、结束/重触发和异常验收例子","当前版草稿 PRD、BOM 可读且必要产物就绪,确认版导出文件另计","当前完整组合检查有效,无未解决冲突和阻塞必要操作或能力承诺的未知"],"invitation":{"freeText":true,"options":["确认这个方案","继续修改"],"rule":"同版无变化不重复邀请;已明确同版确认直接复核;只说继续修改先了解改什么。"},"prohibition":"硬件 verified、没有待答卡、没有冲突或 workflow done 均不能替代四项全真。","purpose":"全部必要细化完成后第二次邀请确认"},"C":{"allOf":["有真实用户确认事件与明确当前版本,卡片答复另须匹配原卡","复核 B3 四项和未决事项;确认附带修改先改,旧确认不复用","真实产品服务已保存同版确认快照并返回可回读回执"],"deliverables":["PRD 按 prdContract 固化同版需求清单、七块总览、资产与证据引用及模板版本,不省略 GATE、不把概念确认当量产通过","BOM 对应实际采用组合,不重复计入整机已覆盖功能","快照与导出分开,真实文件可读才提供下载;失败重试同版,不重新确认","分享与视频绑定同一确认版本,视频每版触发一次;未就绪用真实静态内容与状态,不要求付款"],"preorder":["单份同版报价随确认返回,不设档位,不另设 Agent 询价/重算关卡","主动询价或已有预算才据实讨论价格,不虚构费用","用户主动进入订购页付款,预定金读取收款配置,不硬编码","真实支付和登记回执齐备才称预约成功;确认不是付款授权,付款不代表工程通过或实物交付"],"purpose":"保存同版确认快照,按真实状态交付","revision":"未付款冻结的作品可在保留旧快照后回 B1 形成新工作版;已 done 的入口不得再次 advance。"}},"transitions":[{"from":"entry","to":"A1","when":"新创作或有效参考二创"},{"action":"回答,不修改方案","from":"any","to":"same","when":"纯咨询"},{"action":"推进首版并维护可读 PRD;可选交互邀请另按 §4.1 核对宿主展示条件,不等待邀请答复","from":"A1","to":"A2","when":"三项全真"},{"action":"按 B2 问题规则询问并等待","from":"A1","to":"A1","when":"需要必要意图或硬要求值"},{"action":"首次邀请非阻塞,继续独立工作","from":"A2","to":"B1","when":"真实首版已展示"},{"from":"A2","to":"B2","when":"必须用户取舍"},{"from":"B1","to":"A1","when":"修改使首版需求重新不可推断"},{"from":"B1","to":"A2","when":"需求足够但首版尚未形成"},{"from":"B1","to":"B2","when":"需要必要用户决定"},{"action":"执行并检查;首版未形成时返回 A1/A2","from":"B2","to":"B1","when":"有效答复已消费"},{"from":"B1","to":"B1","when":"授权内仍有可执行工作"},{"action":"保留产物,说明缺口;条件变更后重判","from":"A2|B1","to":"same","when":"缺必要能力/证据或需等真实任务"},{"from":"B1","to":"B3","when":"四项全真"},{"action":"了解改什么,不取消、不升版","from":"B3","to":"B3","when":"只选继续修改"},{"from":"B3|C","to":"B1","when":"具体修改且当前作品未付款冻结"},{"action":"恢复执行或必要决定,不保存无效确认","from":"any","to":"B1|B2","when":"明确确认但尚不满足 B3 或当前版本已变"},{"from":"B3","to":"C","when":"明确同版确认且复核通过、快照保存成功"},{"action":"说明未确认成功,恢复后重新核对版本与 B3","from":"B3","to":"B3","when":"快照保存失败"},{"action":"报告独立真实状态,恢复同版任务,不重复确认","from":"C","to":"C","when":"导出/分享失败或仍生成"},{"action":"按 resultExperience 进入成果体验,收起所有编辑面板,保留需求、未定项和 PRD 查看/导出入口;不自动确认、代选、advance 或 cancel。若同时要求停止执行或明确放弃,按真实意图处理。","from":"any","to":"same","when":"用户点击随时收尾或明确结束交互细化"},{"action":"停止提问并保留当前上下文;是否切成果体验按真实意图,不自动确认、代选或取消","from":"any","to":"same","when":"用户只要求停止追问"},{"action":"按 resultExperience 操作展示模式、播放器或文档;保留当前产品版本和确认状态,具体修改另走需求变更回路","from":"any","to":"same","when":"成果体验中只点击继续修改、触发演示、重置或查看/导出 PRD"},{"from":"any","to":"cancelled","when":"用户明确放弃本次运行"}],"visualCadPolicy":{"assetFailure":"读取失败、无权限、摘要失败和不支持导入不是没有可用 CAD,恢复原引用或报告能力缺口。","authority":"../references/user-journey.md","hostBoundary":"产品目标不是能力声明;按实际注册工具、source-contract 和固定 release 执行。文档更新不自动替换宿主安装包。","imageReuse":"默认复用已结算且适用的原图;缺图显式转入注册生图工具的阶段,用户明确要求重画时在旧调用结算后准备新执行版本。不是永久禁止生图。","preview":"身份和完整性通过的真实 CAD 尽早只读预览;未审查明确标记,视觉/工程审查、显式采用与同版交付分别验收。","priority":"最快展示可信真实 CAD;优先 OSS 整机、子装配和组件,仅补建缺失部分。图片、自建包络和来源 CAD 分别标注。","recovery":"未知/在途调用只恢复原 invocation/wait,不因等待或缺回显重发。"},"workspace":"../SKILL.md"},"name":"user-journey","steps":[{"completionGuard":"workspace.confirmed-snapshot","executor":"agent","id":"drive-product-journey","instruction":"读取同级 abelien-guide/SKILL.md 作为调度与沟通指引;读取 abelien-workspace/SKILL.md 及本包 references/user-journey.md、domain-model.md、prd-contract.md、harness-binding.md 作为业务规则与运行约定;读取 guide 的 references/shared-response-rules.md,并读取本 user-journey.json 的 journey 判定契约(HTTL 不自动带出该字段)。需要理解或修改需求时读取 abelien-clarify/SKILL.md,承接其需求建议并按 workspace 采用及 PRD 契约处理,本轮明确需求及时登记/修改/撤回条目并回读,未接产品写入接口只保留待登记差异;从宿主恢复真实作品、来源、采用版本、待答题、任务和事件。按 A1→A2→B1/B2→B3→C 在本步骤内跨轮驱动,不递归启动 user-journey;从 A1 登记需求,基础需求足够后按 visualCadPolicy 推进阶段产物;PRD 从已保存需求起可读,不强制展开;按旅程 §4.1 和 interactionInvitation 核对宿主实际展示条件后再以选择题卡片邀请细化/收尾,不等待邀请答复;交互已明确或用户已要求停止提问时不重复邀请,用户点击随时收尾或明确收尾时按旅程 §4.2 与 resultExperience 进入成果体验,收起全部编辑面板;有可运行仿真就展示仿真环境,只有 Three.js 时用已有需求或 AI 编排的机器状态驱动真实可触发的抽象动作,保留 PRD 查看及草稿/确认版导出入口;缺播放器或 UI 接口如实说明,不假称可玩。保留需求与未定项,不自动确认、取消或升版;继续修改恢复原布局和上下文。真实硬件初版后按 assets/prd-template.json 七块总览补充已有草稿 PRD/BOM 资料入口,不自动展开完整文档,第一次修改邀请不阻塞,并与交互邀请合并或遵守停止追问约束。已采用设计的局部修改按 harness-binding 的受信序列创建一个 modification,逐步 tool register、invocation submit/get、receipt get;A 固定为采用基线,B conflict 只在原授权内以 B 为 parentCandidateId 和原报告为 repairBasis 生成 C,暂停/刷新/接续复用原身份和根预算,unknown 不返工,C 在现有产品事务显式采用前仍只是候选。实际变更采用后检查当前组合,B3 四项全真才第二次邀请确认。必要问题用 publish_agent_card(question);完成节点有真实回执后可发布 publish_agent_card(handoff),只选择注册 action key,所有跳转由用户点击,打开 checkout/payment 不等于预约、订单或支付成功。缺答案、证据、能力或任务未完成时保留 awaiting_agent 并如实说明,不 advance;继续修改不是 cancel。仅真实同版确认事件经复核、快照保存成功且真实交付状态已告知后,以可回读证据按 replySchema 提交一次交接;不得伪造引用或用 workspace mock 代替。replySchema 为指导而非内核校验,done 仅表示交接完成。只有用户明确放弃运行才 cancel。","replySchema":{"checkRef":"覆盖当前完整组合的有效检查引用","confirmationEventRef":"同版真实用户确认事件引用","delivery":{"bom":"状态及同版文件/任务/错误引用;可读文件才称 ready","prd":"状态及同版文件/任务/错误引用;可读文件才称 ready","share":"状态及同版内容/任务/错误引用,或明确未接入","video":"状态及同版任务/产物/错误引用,或明确未接入"},"nextActions":"仍需恢复的导出/分享任务或用户可选出口,不将预约设为必做","nonBlockingUnknowns":"具体未知、缺失证据与影响的数组;无则空数组","outcome":"confirmed_snapshot_handoff","productRef":"真实作品引用,不是临时 mock draft","revision":"确认的产品版本,不是 runId/digest","snapshotRef":"实际保存、可回读的同版确认快照引用"}}]}
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "user-journey-hardware-algorithm",
|
|
3
|
-
"domain": "abelien-workspace",
|
|
4
|
-
"executionProtocol": "pinned-result-v1",
|
|
5
|
-
"description": "Library recall, suitability review, fixed Prismer-first/Volc evidence for unresolved slots, source-bound merge, then the same formal hardware.select and gate",
|
|
6
|
-
"input": {
|
|
7
|
-
"required": [
|
|
8
|
-
"requirements",
|
|
9
|
-
"reactions"
|
|
10
|
-
]
|
|
11
|
-
},
|
|
12
|
-
"steps": [
|
|
13
|
-
{
|
|
14
|
-
"id": "record-requirements",
|
|
15
|
-
"executor": "cli",
|
|
16
|
-
"action": "resource.put",
|
|
17
|
-
"args": {
|
|
18
|
-
"kind": "draft",
|
|
19
|
-
"id": "hardware-algorithm-d-{{hash}}",
|
|
20
|
-
"body": {
|
|
21
|
-
"requirements": "{{input.requirements}}",
|
|
22
|
-
"reactions": "{{input.reactions}}"
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"id": "classify-hardware",
|
|
28
|
-
"executor": "agent",
|
|
29
|
-
"instruction": "需求已澄清;requirements 是 clarify 的 Requirements:context 为落点与场景,reaction[] 为全部触发→反应,limits[] 每项带 strength。按全部 reaction 推导功能槽位与数量,strength=hard 的 limits 进 hard_constraints,preference 只作排序提示;缺 reaction 或只有品类标签时停止并说明。读取同级 abelien-hardware-selection/SKILL.md,并用其 scripts/load-guide.mjs 依次按需加载 entry、命中的 level1、命中的 level2、contract;仅提交功能槽位、数量、受控三级路径和需求硬约束,不提交型号或猜测数据库事实。回复 {\"slots\":[...]};若需求不足或路径不确定,停止并说明,不能伪造槽位。",
|
|
30
|
-
"replySchema": {
|
|
31
|
-
"slots": "array"
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"id": "search-hardware-wikis",
|
|
36
|
-
"executor": "cli",
|
|
37
|
-
"action": "capability.run",
|
|
38
|
-
"args": {
|
|
39
|
-
"capability": "hardware.search",
|
|
40
|
-
"input": {
|
|
41
|
-
"operation": "search",
|
|
42
|
-
"query": "{{input.requirements}}",
|
|
43
|
-
"requirements": "{{input.requirements}}",
|
|
44
|
-
"slots": "{{steps.classify-hardware.result.slots}}",
|
|
45
|
-
"policy": {
|
|
46
|
-
"prefer_system_candidates": true,
|
|
47
|
-
"top_k_per_slot": 8,
|
|
48
|
-
"include_content": true
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"id": "hardware-knowledge-recalled",
|
|
55
|
-
"executor": "cli",
|
|
56
|
-
"action": "machine.send",
|
|
57
|
-
"args": {
|
|
58
|
-
"machine": "hardware-recall",
|
|
59
|
-
"event": "confirmRecall",
|
|
60
|
-
"instance": "{{steps.search-hardware-wikis.resource.id}}"
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"id": "review-hardware-candidates",
|
|
65
|
-
"executor": "agent",
|
|
66
|
-
"instruction": "Read the complete library candidates and original requirements/slots. Review suitability against function and every hard constraint. Reply {\"unresolved_slots\":[{\"slot_id\":\"original slot\",\"reason\":\"no candidates or specific reasons all candidates are unsuitable\",\"query\":\"official model search targeting function/category/key hard constraints\",\"count\":10}]}. Every zero-candidate slot requires supplemental search. All unsuitable candidates also require search. Preserve rechargeable built-in battery, wireless charging, and all other original requirements; do not ask the user to drop a requirement because the catalog is empty. unresolved_slots contains only slots that need search. Omit suitable library slots entirely; never add placeholder rows with an empty query or count=0. Return [] when all slots are suitable. Before committing this review, the trusted host validates the full original requirements, slots and recall with validate-web-search-plan.mjs; a VALIDATION reply preserves this pause so the same run can be corrected. Count is optional and a positive integer; Prismer search.topK and return.topK are explicit. Do not apply undocumented Prismer query/result limits or truncate requirements. The trusted fixed Prismer-first policy permits Volc only after a saved definitive denial, successful empty query or unsent missing Key; Volc alone checks its official 1-100 character Query and Count 1-50 at dispatch. Unknown dispatched effects never authorize fallback or a new invocation. Do not supply URLs, credentials, commands or providers. System reuse is optional: poor matches must not force complex whole systems. Concept visuals and the original requirements come first.",
|
|
67
|
-
"replySchema": {
|
|
68
|
-
"unresolved_slots": "array"
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
"id": "search-hardware-web",
|
|
73
|
-
"executor": "cli",
|
|
74
|
-
"action": "capability.run",
|
|
75
|
-
"args": {
|
|
76
|
-
"capability": "hardware.web-search",
|
|
77
|
-
"input": {
|
|
78
|
-
"requirements": "{{input.requirements}}",
|
|
79
|
-
"slots": "{{steps.classify-hardware.result.slots}}",
|
|
80
|
-
"recall_id": "{{steps.search-hardware-wikis.resource.id}}",
|
|
81
|
-
"unresolved_slots": "{{steps.review-hardware-candidates.result.unresolved_slots}}"
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"id": "extract-web-hardware",
|
|
87
|
-
"executor": "agent",
|
|
88
|
-
"instruction": "When pages contain blob_ref, use resource get <evidenceResourceId> --page <pageId> to read each required full original page; never copy page bodies into replies. Read the persisted hardware-web-evidence pages from search-hardware-web in full. Search Content/snippets/provider official labels are not complete official pages or proof of authority. Extract only manufacturer pages; uncertain source authority remains unknown and third-party mirrors are not official merely because their URL contains a manufacturer domain. Reply {\"candidates\":[{\"slot_id\":\"original slot\",\"page_id\":\"persisted page ID\",\"manufacturer\":\"exact manufacturer\",\"manufacturer_quote\":\"at least 8 source characters\",\"model\":\"exact model\",\"model_quote\":\"at least 8 source characters\",\"parts\":[{\"name\":\"physical part name\",\"name_quote\":\"exact source quote\",\"shape\":\"box|cylinder|sphere|unknown\",\"shape_quote\":\"exact source quote\",\"dimensions_mm\":{\"length\":20,\"width\":12,\"height\":3},\"dimension_quotes\":{\"length\":\"exact quote identifying this part, axis, numeric value and unit\",\"width\":\"exact quote\",\"height\":\"exact quote\"}}]}]}. Quotes must include the exact part/name/shape they support. Each physical part has separate dimensions; cylinders use diameter/height, spheres use diameter. Unknown dimensions are omitted, never invented or defaulted. Conflicting versions and unknown multi-part overall dimensions remain unknown; do not combine contradictory versions. Do not submit page bodies, official/verified/CAD_available/source/geometry claims. Missing reliable pages or no network means candidates empty. This is envelope_only, not true component CAD or engineering verification. For an attributed tuple such as Back Panel: 48mm x 32mm x 0.5mm, add dimensions_quote with the entire exact source string and dimension_axes:[\"length\",\"width\",\"height\"] in original order; dimensions_mm must map each original value/unit to that explicitly declared axis. Preserve alternate imperial tuples in the quote; never use their values as mm or borrow another part's measurements. A 2-value tuple leaves height unknown. A box inferred from dimensions is only an envelope expression: actual part shape and orientation remain unknown. dimension_quotes may be empty for this tuple mode. Never invent coil thickness or total assembly dimensions.",
|
|
89
|
-
"replySchema": {
|
|
90
|
-
"candidates": "array"
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
"id": "merge-hardware-web",
|
|
95
|
-
"executor": "cli",
|
|
96
|
-
"action": "capability.run",
|
|
97
|
-
"args": {
|
|
98
|
-
"capability": "hardware.web-merge",
|
|
99
|
-
"input": {
|
|
100
|
-
"requirements": "{{input.requirements}}",
|
|
101
|
-
"slots": "{{steps.classify-hardware.result.slots}}",
|
|
102
|
-
"recall_id": "{{steps.search-hardware-wikis.resource.id}}",
|
|
103
|
-
"evidence_id": "{{steps.search-hardware-web.resource.id}}",
|
|
104
|
-
"candidates": "{{steps.extract-web-hardware.result.candidates}}"
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
"id": "select-hardware-from-wikis",
|
|
110
|
-
"executor": "agent",
|
|
111
|
-
"instruction": "先读 abelien-hardware-selection/references/selection-service-contract.md 与真实候选的完整 Wiki。每槽位选择一个真实 component_id,显式 quantity 等于槽位 quantity;manufacturer/model 取候选,selection_reason 非空,wiki_evidence 为至少 8 字符的 Wiki 原文引用数组。selected_models 每项需 constraint_checks,覆盖 function、slot:<hard_constraints 的键>、limit:<每项 hard limit.id>;每项包含 constraint_id、status=verified|unknown|incompatible、reason、evidence:[{component_id,quote}]。多型号另给 compatibility_checks,逐 power/interfaces/mechanical/thermal/software 维度包含 status、reason、每个型号的原文 evidence。证据不足填 unknown,不可编造。status=verified|needs_confirmation,plan_mode=assemble_new|adapt_system,其余数组 selected_models/coverage_ledger/remaining_slots/unknowns/replacement_plan 必填。先比较整机,但整机继承缺 manifest 必须待确认,不凭文案抵扣数量。verified 只表示 Wiki 证据判断通过,不是独立工程兼容求解或实测,不代表采用。 Read only merge-hardware-web candidates for the final choice. Whole-system reuse is optional; a poor match never forces a complex baseline. External IDs are external:<hash>, with source authority and engineering unknowns; envelopes are not component CAD and cannot grant adoption or delivery.",
|
|
112
|
-
"replySchema": {
|
|
113
|
-
"status": "verified|needs_confirmation",
|
|
114
|
-
"plan_mode": "adapt_system|assemble_new",
|
|
115
|
-
"selected_models": "array",
|
|
116
|
-
"coverage_ledger": "array",
|
|
117
|
-
"remaining_slots": "array",
|
|
118
|
-
"unknowns": "array",
|
|
119
|
-
"replacement_plan": "array",
|
|
120
|
-
"compatibility_checks": "array"
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
"id": "select-hardware",
|
|
125
|
-
"executor": "cli",
|
|
126
|
-
"action": "capability.run",
|
|
127
|
-
"args": {
|
|
128
|
-
"capability": "hardware.select",
|
|
129
|
-
"input": {
|
|
130
|
-
"requirements": "{{input.requirements}}",
|
|
131
|
-
"slots": "{{steps.classify-hardware.result.slots}}",
|
|
132
|
-
"recall_id": "{{steps.merge-hardware-web.resource.id}}",
|
|
133
|
-
"selection_proposal": "{{steps.select-hardware-from-wikis.result}}"
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"id": "record-hardware-selection",
|
|
139
|
-
"executor": "cli",
|
|
140
|
-
"action": "resource.update",
|
|
141
|
-
"args": {
|
|
142
|
-
"id": "{{steps.record-requirements.resource.id}}",
|
|
143
|
-
"bodyPatch": {
|
|
144
|
-
"hardwareSelectionId": "{{steps.select-hardware.resource.id}}",
|
|
145
|
-
"hardwareSelectionStatus": "{{steps.select-hardware.result.status}}",
|
|
146
|
-
"hardwareSelectionRevision": "{{steps.select-hardware.result.revision}}",
|
|
147
|
-
"hardwarePlanMode": "{{steps.select-hardware.result.plan_mode}}"
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
"id": "hardware-selected",
|
|
153
|
-
"executor": "cli",
|
|
154
|
-
"action": "machine.send",
|
|
155
|
-
"args": {
|
|
156
|
-
"machine": "hardware-selection",
|
|
157
|
-
"event": "confirmSelection",
|
|
158
|
-
"instance": "{{steps.record-requirements.resource.id}}"
|
|
159
|
-
},
|
|
160
|
-
"completeWhen": {
|
|
161
|
-
"path": "steps.hardware-selected.result.to",
|
|
162
|
-
"equals": "selected_pending_confirmation"
|
|
163
|
-
},
|
|
164
|
-
"completionResult": {
|
|
165
|
-
"selectionId": "{{steps.select-hardware.resource.id}}",
|
|
166
|
-
"selectionStatus": "{{steps.select-hardware.result.status}}",
|
|
167
|
-
"selectionRevision": "{{steps.select-hardware.result.revision}}"
|
|
168
|
-
}
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
"id": "research-algorithms",
|
|
172
|
-
"executor": "agent",
|
|
173
|
-
"instruction": "硬件选型已完成。读取同级 abelien-algorithm/SKILL.md 和 references/research-policy.md,并从 context-json 的 select-hardware.resource 读取准确厂商、型号、能力和 Wiki 证据。针对 input.reactions 先检索硬件厂商官方资料,再检索算法或模型官方资料与 Hugging Face;端侧不满足且用户允许联网时才比较成熟云服务。选择每个 reaction 的最合适实现并回复 {\"bindings\":[...],\"candidates\":[...],\"sources\":[...],\"unavailable_sources\":[...],\"unknowns\":[...],\"blocking_unknowns\":[...]};来源必须回读,binding 必须明确 edge、cloud 或 hybrid。",
|
|
174
|
-
"replySchema": {
|
|
175
|
-
"bindings": "array",
|
|
176
|
-
"candidates": "array",
|
|
177
|
-
"sources": "array",
|
|
178
|
-
"unavailable_sources": "array",
|
|
179
|
-
"unknowns": "array",
|
|
180
|
-
"blocking_unknowns": "array"
|
|
181
|
-
}
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
"id": "select-algorithms",
|
|
185
|
-
"executor": "cli",
|
|
186
|
-
"action": "capability.run",
|
|
187
|
-
"args": {
|
|
188
|
-
"capability": "algorithm.finalize",
|
|
189
|
-
"input": {
|
|
190
|
-
"operation": "select",
|
|
191
|
-
"hardware_selection_id": "{{steps.select-hardware.resource.id}}",
|
|
192
|
-
"hardware_selection_revision": "{{steps.select-hardware.result.revision}}",
|
|
193
|
-
"requirements": "{{input.requirements}}",
|
|
194
|
-
"reactions": "{{input.reactions}}",
|
|
195
|
-
"research": "{{steps.research-algorithms.result}}"
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
"id": "algorithm-selected",
|
|
201
|
-
"executor": "cli",
|
|
202
|
-
"action": "machine.send",
|
|
203
|
-
"args": {
|
|
204
|
-
"machine": "algorithm-selection",
|
|
205
|
-
"event": "confirmSelection",
|
|
206
|
-
"instance": "{{steps.select-algorithms.resource.id}}"
|
|
207
|
-
}
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
"id": "record-algorithm-selection",
|
|
211
|
-
"executor": "cli",
|
|
212
|
-
"action": "resource.update",
|
|
213
|
-
"args": {
|
|
214
|
-
"id": "{{steps.record-requirements.resource.id}}",
|
|
215
|
-
"bodyPatch": {
|
|
216
|
-
"algorithmSelectionId": "{{steps.select-algorithms.resource.id}}",
|
|
217
|
-
"algorithmSelectionStatus": "{{steps.select-algorithms.result.status}}",
|
|
218
|
-
"algorithmSelectionRevision": "{{steps.select-algorithms.result.revision}}"
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
],
|
|
223
|
-
"result": {
|
|
224
|
-
"selectionId": "{{steps.select-hardware.resource.id}}",
|
|
225
|
-
"selectionStatus": "{{steps.select-hardware.result.status}}",
|
|
226
|
-
"selectionRevision": "{{steps.select-hardware.result.revision}}"
|
|
227
|
-
},
|
|
228
|
-
"legacyResume": "read_only"
|
|
229
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"description":"Library recall, suitability review, fixed Prismer-first/Volc evidence for unresolved slots, source-bound merge, then the same formal hardware.select and gate","domain":"abelien-workspace","input":{"required":["requirements","reactions"]},"name":"user-journey-hardware-algorithm","steps":[{"action":"resource.put","args":{"body":{"reactions":"{{input.reactions}}","requirements":"{{input.requirements}}"},"id":"hardware-algorithm-d-{{hash}}","kind":"draft"},"executor":"cli","id":"record-requirements"},{"executor":"agent","id":"classify-hardware","instruction":"需求已澄清;requirements 是 clarify 的 Requirements:context 为落点与场景,reaction[] 为全部触发→反应,limits[] 每项带 strength。按全部 reaction 推导功能槽位与数量,strength=hard 的 limits 进 hard_constraints,preference 只作排序提示;缺 reaction 或只有品类标签时停止并说明。读取同级 abelien-hardware-selection/SKILL.md,并用其 scripts/load-guide.mjs 依次按需加载 entry、命中的 level1、命中的 level2、contract;仅提交功能槽位、数量、受控三级路径和需求硬约束,不提交型号或猜测数据库事实。回复 {\"slots\":[...]};若需求不足或路径不确定,停止并说明,不能伪造槽位。","replySchema":{"slots":"array"}},{"action":"capability.run","args":{"capability":"hardware.search","input":{"operation":"search","policy":{"include_content":true,"prefer_system_candidates":true,"top_k_per_slot":8},"query":"{{input.requirements}}","requirements":"{{input.requirements}}","slots":"{{steps.classify-hardware.result.slots}}"}},"executor":"cli","id":"search-hardware-wikis"},{"action":"machine.send","args":{"event":"confirmRecall","instance":"{{steps.search-hardware-wikis.resource.id}}","machine":"hardware-recall"},"executor":"cli","id":"hardware-knowledge-recalled"},{"executor":"agent","id":"review-hardware-candidates","instruction":"Read the complete library candidates and original requirements/slots. Review suitability against function and every hard constraint. Reply {\"unresolved_slots\":[{\"slot_id\":\"original slot\",\"reason\":\"no candidates or specific reasons all candidates are unsuitable\",\"query\":\"official model search targeting function/category/key hard constraints\",\"count\":10}]}. Every zero-candidate slot requires supplemental search. All unsuitable candidates also require search. Preserve rechargeable built-in battery, wireless charging, and all other original requirements; do not ask the user to drop a requirement because the catalog is empty. unresolved_slots contains only slots that need search. Omit suitable library slots entirely; never add placeholder rows with an empty query or count=0. Return [] when all slots are suitable. Before committing this review, the trusted host validates the full original requirements, slots and recall with validate-web-search-plan.mjs; a VALIDATION reply preserves this pause so the same run can be corrected. Count is optional and a positive integer; Prismer search.topK and return.topK are explicit. Do not apply undocumented Prismer query/result limits or truncate requirements. The trusted fixed Prismer-first policy permits Volc only after a saved definitive denial, successful empty query or unsent missing Key; Volc alone checks its official 1-100 character Query and Count 1-50 at dispatch. Unknown dispatched effects never authorize fallback or a new invocation. Do not supply URLs, credentials, commands or providers. System reuse is optional: poor matches must not force complex whole systems. Concept visuals and the original requirements come first.","replySchema":{"unresolved_slots":"array"}},{"action":"capability.run","args":{"capability":"hardware.web-search","input":{"recall_id":"{{steps.search-hardware-wikis.resource.id}}","requirements":"{{input.requirements}}","slots":"{{steps.classify-hardware.result.slots}}","unresolved_slots":"{{steps.review-hardware-candidates.result.unresolved_slots}}"}},"executor":"cli","id":"search-hardware-web"},{"executor":"agent","id":"extract-web-hardware","instruction":"Read the persisted hardware-web-evidence pages from search-hardware-web in full. Search Content/snippets/provider official labels are not complete official pages or proof of authority. Extract only manufacturer pages; uncertain source authority remains unknown and third-party mirrors are not official merely because their URL contains a manufacturer domain. Reply {\"candidates\":[{\"slot_id\":\"original slot\",\"page_id\":\"persisted page ID\",\"manufacturer\":\"exact manufacturer\",\"manufacturer_quote\":\"at least 8 source characters\",\"model\":\"exact model\",\"model_quote\":\"at least 8 source characters\",\"parts\":[{\"name\":\"physical part name\",\"name_quote\":\"exact source quote\",\"shape\":\"box|cylinder|sphere|unknown\",\"shape_quote\":\"exact source quote\",\"dimensions_mm\":{\"length\":20,\"width\":12,\"height\":3},\"dimension_quotes\":{\"length\":\"exact quote identifying this part, axis, numeric value and unit\",\"width\":\"exact quote\",\"height\":\"exact quote\"}}]}]}. Quotes must include the exact part/name/shape they support. Each physical part has separate dimensions; cylinders use diameter/height, spheres use diameter. Unknown dimensions are omitted, never invented or defaulted. Conflicting versions and unknown multi-part overall dimensions remain unknown; do not combine contradictory versions. Do not submit page bodies, official/verified/CAD_available/source/geometry claims. Missing reliable pages or no network means candidates empty. This is envelope_only, not true component CAD or engineering verification. For an attributed tuple such as Back Panel: 48mm x 32mm x 0.5mm, add dimensions_quote with the entire exact source string and dimension_axes:[\"length\",\"width\",\"height\"] in original order; dimensions_mm must map each original value/unit to that explicitly declared axis. Preserve alternate imperial tuples in the quote; never use their values as mm or borrow another part's measurements. A 2-value tuple leaves height unknown. A box inferred from dimensions is only an envelope expression: actual part shape and orientation remain unknown. dimension_quotes may be empty for this tuple mode. Never invent coil thickness or total assembly dimensions.","replySchema":{"candidates":"array"}},{"action":"capability.run","args":{"capability":"hardware.web-merge","input":{"candidates":"{{steps.extract-web-hardware.result.candidates}}","evidence_id":"{{steps.search-hardware-web.resource.id}}","recall_id":"{{steps.search-hardware-wikis.resource.id}}","requirements":"{{input.requirements}}","slots":"{{steps.classify-hardware.result.slots}}"}},"executor":"cli","id":"merge-hardware-web"},{"executor":"agent","id":"select-hardware-from-wikis","instruction":"先读 abelien-hardware-selection/references/selection-service-contract.md 与真实候选的完整 Wiki。每槽位选择一个真实 component_id,显式 quantity 等于槽位 quantity;manufacturer/model 取候选,selection_reason 非空,wiki_evidence 为至少 8 字符的 Wiki 原文引用数组。selected_models 每项需 constraint_checks,覆盖 function、slot:<hard_constraints 的键>、limit:<每项 hard limit.id>;每项包含 constraint_id、status=verified|unknown|incompatible、reason、evidence:[{component_id,quote}]。多型号另给 compatibility_checks,逐 power/interfaces/mechanical/thermal/software 维度包含 status、reason、每个型号的原文 evidence。证据不足填 unknown,不可编造。status=verified|needs_confirmation,plan_mode=assemble_new|adapt_system,其余数组 selected_models/coverage_ledger/remaining_slots/unknowns/replacement_plan 必填。先比较整机,但整机继承缺 manifest 必须待确认,不凭文案抵扣数量。verified 只表示 Wiki 证据判断通过,不是独立工程兼容求解或实测,不代表采用。 Read only merge-hardware-web candidates for the final choice. Whole-system reuse is optional; a poor match never forces a complex baseline. External IDs are external:<hash>, with source authority and engineering unknowns; envelopes are not component CAD and cannot grant adoption or delivery.","replySchema":{"compatibility_checks":"array","coverage_ledger":"array","plan_mode":"adapt_system|assemble_new","remaining_slots":"array","replacement_plan":"array","selected_models":"array","status":"verified|needs_confirmation","unknowns":"array"}},{"action":"capability.run","args":{"capability":"hardware.select","input":{"recall_id":"{{steps.merge-hardware-web.resource.id}}","requirements":"{{input.requirements}}","selection_proposal":"{{steps.select-hardware-from-wikis.result}}","slots":"{{steps.classify-hardware.result.slots}}"}},"executor":"cli","id":"select-hardware"},{"action":"resource.update","args":{"bodyPatch":{"hardwarePlanMode":"{{steps.select-hardware.result.plan_mode}}","hardwareSelectionId":"{{steps.select-hardware.resource.id}}","hardwareSelectionRevision":"{{steps.select-hardware.result.revision}}","hardwareSelectionStatus":"{{steps.select-hardware.result.status}}"},"id":"{{steps.record-requirements.resource.id}}"},"executor":"cli","id":"record-hardware-selection"},{"action":"machine.send","args":{"event":"confirmSelection","instance":"{{steps.record-requirements.resource.id}}","machine":"hardware-selection"},"executor":"cli","id":"hardware-selected"},{"executor":"agent","id":"research-algorithms","instruction":"硬件选型已完成。读取同级 abelien-algorithm/SKILL.md 和 references/research-policy.md,并从 context-json 的 select-hardware.resource 读取准确厂商、型号、能力和 Wiki 证据。针对 input.reactions 先检索硬件厂商官方资料,再检索算法或模型官方资料与 Hugging Face;端侧不满足且用户允许联网时才比较成熟云服务。选择每个 reaction 的最合适实现并回复 {\"bindings\":[...],\"candidates\":[...],\"sources\":[...],\"unavailable_sources\":[...],\"unknowns\":[...],\"blocking_unknowns\":[...]};来源必须回读,binding 必须明确 edge、cloud 或 hybrid。","replySchema":{"bindings":"array","blocking_unknowns":"array","candidates":"array","sources":"array","unavailable_sources":"array","unknowns":"array"}},{"action":"capability.run","args":{"capability":"algorithm.finalize","input":{"hardware_selection_id":"{{steps.select-hardware.resource.id}}","hardware_selection_revision":"{{steps.select-hardware.result.revision}}","operation":"select","reactions":"{{input.reactions}}","requirements":"{{input.requirements}}","research":"{{steps.research-algorithms.result}}"}},"executor":"cli","id":"select-algorithms"},{"action":"machine.send","args":{"event":"confirmSelection","instance":"{{steps.select-algorithms.resource.id}}","machine":"algorithm-selection"},"executor":"cli","id":"algorithm-selected"},{"action":"resource.update","args":{"bodyPatch":{"algorithmSelectionId":"{{steps.select-algorithms.resource.id}}","algorithmSelectionRevision":"{{steps.select-algorithms.result.revision}}","algorithmSelectionStatus":"{{steps.select-algorithms.result.status}}"},"id":"{{steps.record-requirements.resource.id}}"},"executor":"cli","id":"record-algorithm-selection"}]}
|