opendevbrowser 0.0.19 → 0.0.21
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 +32 -24
- package/dist/automation/coordinator.d.ts +61 -2
- package/dist/automation/coordinator.d.ts.map +1 -1
- package/dist/browser/browser-manager.d.ts +6 -1
- package/dist/browser/browser-manager.d.ts.map +1 -1
- package/dist/browser/canvas-manager.d.ts +4 -0
- package/dist/browser/canvas-manager.d.ts.map +1 -1
- package/dist/browser/manager-types.d.ts +6 -1
- package/dist/browser/manager-types.d.ts.map +1 -1
- package/dist/browser/ops-browser-manager.d.ts +6 -1
- package/dist/browser/ops-browser-manager.d.ts.map +1 -1
- package/dist/browser/screencast-recorder.d.ts.map +1 -1
- package/dist/browser/session-inspector.d.ts +39 -0
- package/dist/browser/session-inspector.d.ts.map +1 -1
- package/dist/canvas/document-store.d.ts +14 -5
- package/dist/canvas/document-store.d.ts.map +1 -1
- package/dist/canvas/starters/catalog.d.ts.map +1 -1
- package/dist/canvas/types.d.ts +120 -9
- package/dist/canvas/types.d.ts.map +1 -1
- package/dist/challenges/action-loop.d.ts +2 -1
- package/dist/challenges/action-loop.d.ts.map +1 -1
- package/dist/challenges/capture.d.ts +14 -0
- package/dist/challenges/capture.d.ts.map +1 -0
- package/dist/challenges/index.d.ts +3 -1
- package/dist/challenges/index.d.ts.map +1 -1
- package/dist/challenges/inspect-plan.d.ts +40 -0
- package/dist/challenges/inspect-plan.d.ts.map +1 -0
- package/dist/challenges/orchestrator.d.ts.map +1 -1
- package/dist/challenges/types.d.ts +34 -0
- package/dist/challenges/types.d.ts.map +1 -1
- package/dist/{chunk-YBQECXZX.js → chunk-3VA6XR25.js} +3 -3
- package/dist/chunk-3VA6XR25.js.map +1 -0
- package/dist/{chunk-W4IHGDXV.js → chunk-4KVXCXV3.js} +25778 -24279
- package/dist/chunk-4KVXCXV3.js.map +1 -0
- package/dist/{chunk-5FZQJRBQ.js → chunk-ZE2E7ZGH.js} +3013 -1010
- package/dist/chunk-ZE2E7ZGH.js.map +1 -0
- package/dist/cli/commands/challenge-automation-mode.d.ts +3 -0
- package/dist/cli/commands/challenge-automation-mode.d.ts.map +1 -0
- package/dist/cli/commands/inspiredesign.d.ts +25 -0
- package/dist/cli/commands/inspiredesign.d.ts.map +1 -0
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
- package/dist/cli/commands/nav/review-desktop.d.ts +7 -0
- package/dist/cli/commands/nav/review-desktop.d.ts.map +1 -0
- package/dist/cli/commands/nav/review-shared.d.ts +10 -0
- package/dist/cli/commands/nav/review-shared.d.ts.map +1 -0
- package/dist/cli/commands/nav/review.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/session/inspector-audit.d.ts +7 -0
- package/dist/cli/commands/session/inspector-audit.d.ts.map +1 -0
- package/dist/cli/commands/session/inspector-plan.d.ts +7 -0
- package/dist/cli/commands/session/inspector-plan.d.ts.map +1 -0
- package/dist/cli/commands/session/inspector-shared.d.ts +11 -0
- package/dist/cli/commands/session/inspector-shared.d.ts.map +1 -0
- package/dist/cli/commands/session/inspector.d.ts +1 -11
- package/dist/cli/commands/session/inspector.d.ts.map +1 -1
- package/dist/cli/commands/status-capabilities.d.ts +7 -0
- package/dist/cli/commands/status-capabilities.d.ts.map +1 -0
- package/dist/cli/daemon-client.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/daemon-status.d.ts +5 -0
- package/dist/cli/daemon-status.d.ts.map +1 -1
- package/dist/cli/daemon.d.ts +5 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/help.d.ts +2 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +660 -244
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/remote-manager.d.ts +6 -0
- package/dist/cli/remote-manager.d.ts.map +1 -1
- package/dist/cli/utils/parse.d.ts +1 -0
- package/dist/cli/utils/parse.d.ts.map +1 -1
- package/dist/cli/utils/skills.d.ts +1 -1
- package/dist/cli/utils/skills.d.ts.map +1 -1
- package/dist/cli/utils/workflow-message.d.ts +3 -0
- package/dist/cli/utils/workflow-message.d.ts.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/runtime-assemblies.d.ts +2 -1
- package/dist/core/runtime-assemblies.d.ts.map +1 -1
- package/dist/core/types.d.ts +1 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/desktop/runtime.d.ts +1 -0
- package/dist/desktop/runtime.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +729 -448
- package/dist/index.js.map +1 -1
- package/dist/inspiredesign/handoff.d.ts +34 -0
- package/dist/inspiredesign/handoff.d.ts.map +1 -0
- package/dist/opendevbrowser.d.ts.map +1 -1
- package/dist/opendevbrowser.js +729 -448
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/browser-fallback.d.ts.map +1 -1
- package/dist/providers/constraint.d.ts +11 -0
- package/dist/providers/constraint.d.ts.map +1 -1
- package/dist/providers/cookie-source.d.ts +8 -0
- package/dist/providers/cookie-source.d.ts.map +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/inspiredesign-capture.d.ts +17 -0
- package/dist/providers/inspiredesign-capture.d.ts.map +1 -0
- package/dist/providers/inspiredesign-contract.d.ts +110 -0
- package/dist/providers/inspiredesign-contract.d.ts.map +1 -0
- package/dist/providers/renderer.d.ts +23 -0
- package/dist/providers/renderer.d.ts.map +1 -1
- package/dist/providers/runtime-bundle.d.ts +2 -1
- package/dist/providers/runtime-bundle.d.ts.map +1 -1
- package/dist/providers/runtime-factory.d.ts +4 -2
- package/dist/providers/runtime-factory.d.ts.map +1 -1
- package/dist/providers/shopping/index.d.ts +1 -1
- package/dist/providers/types.d.ts +3 -2
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/workflow-contracts.d.ts +1 -1
- package/dist/providers/workflow-contracts.d.ts.map +1 -1
- package/dist/providers/workflow-handoff.d.ts +14 -0
- package/dist/providers/workflow-handoff.d.ts.map +1 -0
- package/dist/providers/workflows.d.ts +21 -2
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-G36AM3Z2.js → providers-ZIVHHH4F.js} +6 -2
- package/dist/public-surface/generated-manifest.d.ts +143 -7
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +102 -3
- package/dist/public-surface/source.d.ts.map +1 -1
- package/dist/relay/protocol.d.ts +1 -1
- package/dist/relay/protocol.d.ts.map +1 -1
- package/dist/relay/relay-server.d.ts +1 -0
- package/dist/relay/relay-server.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +1 -1
- package/dist/tools/automation-shared.d.ts +6 -0
- package/dist/tools/automation-shared.d.ts.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/inspiredesign_run.d.ts +4 -0
- package/dist/tools/inspiredesign_run.d.ts.map +1 -0
- package/dist/tools/review_desktop.d.ts +4 -0
- package/dist/tools/review_desktop.d.ts.map +1 -0
- package/dist/tools/session_inspector.d.ts.map +1 -1
- package/dist/tools/session_inspector_audit.d.ts +4 -0
- package/dist/tools/session_inspector_audit.d.ts.map +1 -0
- package/dist/tools/session_inspector_plan.d.ts +4 -0
- package/dist/tools/session_inspector_plan.d.ts.map +1 -0
- package/dist/tools/status_capabilities.d.ts +4 -0
- package/dist/tools/status_capabilities.d.ts.map +1 -0
- package/extension/dist/background.js +70 -10
- package/extension/dist/canvas/canvas-runtime.js +14 -1
- package/extension/dist/ops/ops-runtime.js +18 -1
- package/extension/dist/popup.js +29 -16
- package/extension/dist/services/ConnectionManager.js +27 -2
- package/extension/manifest.json +1 -1
- package/extension/popup.html +11 -0
- package/package.json +5 -5
- package/skills/AGENTS.md +2 -2
- package/skills/opendevbrowser-best-practices/SKILL.md +50 -15
- package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +31 -12
- package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +64 -15
- package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +4 -0
- package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +11 -10
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-blocker-checklist.json +28 -22
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-generation-plan.v1.json +18 -17
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json +135 -17
- package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +55 -8
- package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +18 -4
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +16 -4
- package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +3 -1
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +68 -25
- package/skills/opendevbrowser-design-agent/SKILL.md +9 -4
- package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +15 -6
- package/skills/opendevbrowser-design-agent/assets/templates/canvas-generation-plan.design.v1.json +18 -17
- package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +11 -0
- package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +57 -0
- package/skills/opendevbrowser-product-presentation-asset/SKILL.md +2 -2
- package/dist/chunk-5FZQJRBQ.js.map +0 -1
- package/dist/chunk-W4IHGDXV.js.map +0 -1
- package/dist/chunk-YBQECXZX.js.map +0 -1
- /package/dist/{providers-G36AM3Z2.js.map → providers-ZIVHHH4F.js.map} +0 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"documentId": "dc_01",
|
|
5
5
|
"leaseId": "lease_01",
|
|
6
6
|
"preflightState": "handshake_read",
|
|
7
|
+
"planStatus": "missing",
|
|
7
8
|
"attachModes": [
|
|
8
9
|
"observer",
|
|
9
10
|
"lease_reclaim"
|
|
@@ -55,7 +56,93 @@
|
|
|
55
56
|
"responsivePosture",
|
|
56
57
|
"accessibilityPosture",
|
|
57
58
|
"validationTargets"
|
|
58
|
-
]
|
|
59
|
+
],
|
|
60
|
+
"allowedValues": {
|
|
61
|
+
"targetOutcomeModes": [
|
|
62
|
+
"low-fi-wireframe",
|
|
63
|
+
"high-fi-live-edit",
|
|
64
|
+
"dual-track",
|
|
65
|
+
"document-only"
|
|
66
|
+
],
|
|
67
|
+
"visualDirectionProfiles": [
|
|
68
|
+
"clean-room",
|
|
69
|
+
"cinematic-minimal",
|
|
70
|
+
"product-story",
|
|
71
|
+
"commerce-system",
|
|
72
|
+
"control-room",
|
|
73
|
+
"ops-control",
|
|
74
|
+
"auth-focused",
|
|
75
|
+
"settings-system",
|
|
76
|
+
"documentation"
|
|
77
|
+
],
|
|
78
|
+
"themeStrategies": [
|
|
79
|
+
"single-theme",
|
|
80
|
+
"light-dark-parity",
|
|
81
|
+
"multi-theme-system"
|
|
82
|
+
],
|
|
83
|
+
"navigationModels": [
|
|
84
|
+
"global-header",
|
|
85
|
+
"sidebar",
|
|
86
|
+
"tabbed",
|
|
87
|
+
"contextual",
|
|
88
|
+
"immersive"
|
|
89
|
+
],
|
|
90
|
+
"interactionStates": [
|
|
91
|
+
"default",
|
|
92
|
+
"hover",
|
|
93
|
+
"focus",
|
|
94
|
+
"active",
|
|
95
|
+
"disabled",
|
|
96
|
+
"loading",
|
|
97
|
+
"empty",
|
|
98
|
+
"error",
|
|
99
|
+
"success",
|
|
100
|
+
"selected"
|
|
101
|
+
],
|
|
102
|
+
"viewports": [
|
|
103
|
+
"desktop",
|
|
104
|
+
"tablet",
|
|
105
|
+
"mobile"
|
|
106
|
+
],
|
|
107
|
+
"themes": [
|
|
108
|
+
"light",
|
|
109
|
+
"dark"
|
|
110
|
+
],
|
|
111
|
+
"browserValidationModes": [
|
|
112
|
+
"required",
|
|
113
|
+
"optional"
|
|
114
|
+
],
|
|
115
|
+
"blockOn": [
|
|
116
|
+
"missing-generation-plan",
|
|
117
|
+
"invalid-generation-plan",
|
|
118
|
+
"missing-governance-block",
|
|
119
|
+
"missing-intent",
|
|
120
|
+
"missing-design-language",
|
|
121
|
+
"missing-content-model",
|
|
122
|
+
"missing-typography-system",
|
|
123
|
+
"missing-color-role",
|
|
124
|
+
"missing-surface-policy",
|
|
125
|
+
"missing-state-coverage",
|
|
126
|
+
"missing-reduced-motion-policy",
|
|
127
|
+
"missing-responsive-policy",
|
|
128
|
+
"overflow",
|
|
129
|
+
"token-missing",
|
|
130
|
+
"broken-asset-reference",
|
|
131
|
+
"contrast-failure",
|
|
132
|
+
"hierarchy-weak",
|
|
133
|
+
"asset-provenance-missing",
|
|
134
|
+
"font-policy-missing",
|
|
135
|
+
"font-load-failure",
|
|
136
|
+
"reduced-motion-violation",
|
|
137
|
+
"unresolved-component-binding",
|
|
138
|
+
"icon-policy-violation",
|
|
139
|
+
"library-policy-violation",
|
|
140
|
+
"responsive-mismatch",
|
|
141
|
+
"runtime-budget-exceeded",
|
|
142
|
+
"unsupported-target",
|
|
143
|
+
"export-warning"
|
|
144
|
+
]
|
|
145
|
+
}
|
|
59
146
|
},
|
|
60
147
|
"allowedLibraries": {
|
|
61
148
|
"icons": [
|
|
@@ -73,23 +160,54 @@
|
|
|
73
160
|
"motion": [],
|
|
74
161
|
"threeD": []
|
|
75
162
|
},
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
163
|
+
"warningClasses": [
|
|
164
|
+
"missing-generation-plan",
|
|
165
|
+
"invalid-generation-plan",
|
|
166
|
+
"missing-governance-block",
|
|
167
|
+
"missing-intent",
|
|
168
|
+
"missing-design-language",
|
|
169
|
+
"missing-content-model",
|
|
170
|
+
"missing-typography-system",
|
|
171
|
+
"missing-color-role",
|
|
172
|
+
"missing-surface-policy",
|
|
173
|
+
"missing-state-coverage",
|
|
174
|
+
"missing-reduced-motion-policy",
|
|
175
|
+
"missing-responsive-policy",
|
|
176
|
+
"overflow",
|
|
177
|
+
"token-missing",
|
|
178
|
+
"broken-asset-reference",
|
|
179
|
+
"contrast-failure",
|
|
180
|
+
"hierarchy-weak",
|
|
181
|
+
"asset-provenance-missing",
|
|
182
|
+
"font-policy-missing",
|
|
183
|
+
"font-load-failure",
|
|
184
|
+
"reduced-motion-violation",
|
|
185
|
+
"unresolved-component-binding",
|
|
186
|
+
"icon-policy-violation",
|
|
187
|
+
"library-policy-violation",
|
|
188
|
+
"responsive-mismatch",
|
|
189
|
+
"runtime-budget-exceeded",
|
|
190
|
+
"unsupported-target",
|
|
191
|
+
"export-warning"
|
|
92
192
|
],
|
|
193
|
+
"generationPlanIssues": [],
|
|
194
|
+
"mutationPolicy": {
|
|
195
|
+
"planRequiredBeforePatch": true,
|
|
196
|
+
"allowedBeforePlan": [
|
|
197
|
+
"canvas.capabilities.get",
|
|
198
|
+
"canvas.plan.get",
|
|
199
|
+
"canvas.plan.set",
|
|
200
|
+
"canvas.document.load",
|
|
201
|
+
"canvas.session.attach",
|
|
202
|
+
"canvas.session.status"
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
"guidance": {
|
|
206
|
+
"recommendedNextCommands": [
|
|
207
|
+
"canvas.plan.set"
|
|
208
|
+
],
|
|
209
|
+
"reason": "Handshake is complete. Submit a complete generationPlan before mutation."
|
|
210
|
+
},
|
|
93
211
|
"projectionModes": [
|
|
94
212
|
"canvas_html",
|
|
95
213
|
"bound_app_runtime"
|
package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json
CHANGED
|
@@ -20,19 +20,45 @@
|
|
|
20
20
|
"cliCommands": [
|
|
21
21
|
"serve",
|
|
22
22
|
"status",
|
|
23
|
+
"status-capabilities",
|
|
23
24
|
"launch",
|
|
25
|
+
"review-desktop",
|
|
26
|
+
"session-inspector-plan",
|
|
27
|
+
"session-inspector-audit",
|
|
24
28
|
"research",
|
|
25
29
|
"shopping",
|
|
26
30
|
"product-video",
|
|
27
|
-
"canvas"
|
|
31
|
+
"canvas",
|
|
32
|
+
"inspiredesign",
|
|
33
|
+
"screencast-start",
|
|
34
|
+
"screencast-stop",
|
|
35
|
+
"desktop-status",
|
|
36
|
+
"desktop-windows",
|
|
37
|
+
"desktop-active-window",
|
|
38
|
+
"desktop-capture-desktop",
|
|
39
|
+
"desktop-capture-window",
|
|
40
|
+
"desktop-accessibility-snapshot"
|
|
28
41
|
],
|
|
29
42
|
"tools": [
|
|
43
|
+
"opendevbrowser_status_capabilities",
|
|
44
|
+
"opendevbrowser_review_desktop",
|
|
45
|
+
"opendevbrowser_session_inspector_plan",
|
|
46
|
+
"opendevbrowser_session_inspector_audit",
|
|
30
47
|
"opendevbrowser_canvas",
|
|
31
48
|
"opendevbrowser_research_run",
|
|
32
49
|
"opendevbrowser_shopping_run",
|
|
33
50
|
"opendevbrowser_product_video_run",
|
|
34
51
|
"opendevbrowser_skill_list",
|
|
35
|
-
"opendevbrowser_skill_load"
|
|
52
|
+
"opendevbrowser_skill_load",
|
|
53
|
+
"opendevbrowser_inspiredesign_run",
|
|
54
|
+
"opendevbrowser_screencast_start",
|
|
55
|
+
"opendevbrowser_screencast_stop",
|
|
56
|
+
"opendevbrowser_desktop_status",
|
|
57
|
+
"opendevbrowser_desktop_windows",
|
|
58
|
+
"opendevbrowser_desktop_active_window",
|
|
59
|
+
"opendevbrowser_desktop_capture_desktop",
|
|
60
|
+
"opendevbrowser_desktop_capture_window",
|
|
61
|
+
"opendevbrowser_desktop_accessibility_snapshot"
|
|
36
62
|
],
|
|
37
63
|
"modes": [
|
|
38
64
|
"managed",
|
|
@@ -327,8 +353,9 @@
|
|
|
327
353
|
"sourceSeams": [
|
|
328
354
|
"skills/opendevbrowser-best-practices/SKILL.md",
|
|
329
355
|
"src/skills/skill-loader.ts",
|
|
330
|
-
"src/cli/installers/
|
|
331
|
-
"src/cli/
|
|
356
|
+
"src/cli/installers/skills.ts",
|
|
357
|
+
"src/cli/utils/skills.ts",
|
|
358
|
+
"src/skills/bundled-skill-directories.ts",
|
|
332
359
|
"src/tools/skill_list.ts",
|
|
333
360
|
"src/tools/skill_load.ts"
|
|
334
361
|
],
|
|
@@ -358,7 +385,11 @@
|
|
|
358
385
|
"src/cli/help.ts",
|
|
359
386
|
"src/tools/index.ts",
|
|
360
387
|
"src/public-surface/source.ts",
|
|
361
|
-
"docs/SURFACE_REFERENCE.md"
|
|
388
|
+
"docs/SURFACE_REFERENCE.md",
|
|
389
|
+
"src/cli/onboarding-metadata.json",
|
|
390
|
+
"docs/FIRST_RUN_ONBOARDING.md",
|
|
391
|
+
"docs/README.md",
|
|
392
|
+
"skills/opendevbrowser-best-practices/SKILL.md"
|
|
362
393
|
],
|
|
363
394
|
"targetedRerunCommands": [
|
|
364
395
|
"node scripts/docs-drift-check.mjs",
|
|
@@ -388,7 +419,11 @@
|
|
|
388
419
|
"scripts/skill-runtime-scenarios.mjs",
|
|
389
420
|
"scripts/docs-drift-check.mjs",
|
|
390
421
|
"skills/opendevbrowser-best-practices/scripts/odb-workflow.sh",
|
|
391
|
-
"skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh"
|
|
422
|
+
"skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh",
|
|
423
|
+
"skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md",
|
|
424
|
+
"skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md",
|
|
425
|
+
"skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json",
|
|
426
|
+
"skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json"
|
|
392
427
|
],
|
|
393
428
|
"targetedRerunCommands": [
|
|
394
429
|
"./skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh",
|
|
@@ -511,7 +546,8 @@
|
|
|
511
546
|
"contractTests": [
|
|
512
547
|
"tests/provider-direct-runs.test.ts",
|
|
513
548
|
"tests/macro-resolve.test.ts",
|
|
514
|
-
"tests/cli-macro-resolve.test.ts"
|
|
549
|
+
"tests/cli-macro-resolve.test.ts",
|
|
550
|
+
"tests/providers-inspiredesign-workflow.test.ts"
|
|
515
551
|
],
|
|
516
552
|
"sourceSeams": [
|
|
517
553
|
"src/providers/registry.ts",
|
|
@@ -519,7 +555,10 @@
|
|
|
519
555
|
"src/providers/workflows.ts",
|
|
520
556
|
"src/macros/execute.ts",
|
|
521
557
|
"src/tools/macro_resolve.ts",
|
|
522
|
-
"src/cli/commands/macro-resolve.ts"
|
|
558
|
+
"src/cli/commands/macro-resolve.ts",
|
|
559
|
+
"src/cli/commands/inspiredesign.ts",
|
|
560
|
+
"src/tools/inspiredesign_run.ts",
|
|
561
|
+
"src/providers/inspiredesign-contract.ts"
|
|
523
562
|
],
|
|
524
563
|
"targetedRerunCommands": [
|
|
525
564
|
"node scripts/provider-direct-runs.mjs --smoke --out artifacts/skill-runtime-audit/lanes/provider-direct.json",
|
|
@@ -638,6 +677,14 @@
|
|
|
638
677
|
"live-regression"
|
|
639
678
|
]
|
|
640
679
|
},
|
|
680
|
+
{
|
|
681
|
+
"id": "browser-replay-desktop-observation",
|
|
682
|
+
"label": "Browser replay and desktop observation",
|
|
683
|
+
"proofLanes": [
|
|
684
|
+
"docs-drift",
|
|
685
|
+
"live-regression"
|
|
686
|
+
]
|
|
687
|
+
},
|
|
641
688
|
{
|
|
642
689
|
"id": "workflow-wrappers",
|
|
643
690
|
"label": "Workflow wrappers",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0",
|
|
3
3
|
"expectedCounts": {
|
|
4
|
-
"cliCommands":
|
|
5
|
-
"tools":
|
|
4
|
+
"cliCommands": 77,
|
|
5
|
+
"tools": 70,
|
|
6
6
|
"opsCommands": 59,
|
|
7
7
|
"canvasCommands": 35
|
|
8
8
|
},
|
|
@@ -12,13 +12,16 @@
|
|
|
12
12
|
"docs/ARCHITECTURE.md",
|
|
13
13
|
"docs/SURFACE_REFERENCE.md",
|
|
14
14
|
"AGENTS.md",
|
|
15
|
-
"skills/opendevbrowser-best-practices/SKILL.md"
|
|
15
|
+
"skills/opendevbrowser-best-practices/SKILL.md",
|
|
16
|
+
"docs/README.md",
|
|
17
|
+
"docs/FIRST_RUN_ONBOARDING.md"
|
|
16
18
|
],
|
|
17
19
|
"checks": [
|
|
18
20
|
"CLI command names documented by category",
|
|
19
21
|
"Tool names documented by category",
|
|
20
22
|
"Ops command namespaces documented",
|
|
21
23
|
"Session-first diagnostics lane documented and validated",
|
|
24
|
+
"Desktop-assisted browser review and browser-scoped inspection documented",
|
|
22
25
|
"Browser replay and screencast commands documented",
|
|
23
26
|
"Desktop observation commands documented",
|
|
24
27
|
"Pointer controls documented",
|
|
@@ -28,6 +31,17 @@
|
|
|
28
31
|
"Annotation send/copy semantics documented",
|
|
29
32
|
"CDP envelope contract documented",
|
|
30
33
|
"Global and command-specific flags documented",
|
|
31
|
-
"Mode semantics documented"
|
|
34
|
+
"Mode semantics documented",
|
|
35
|
+
"Generated help first-contact owners documented",
|
|
36
|
+
"Onboarding metadata owner documented",
|
|
37
|
+
"First-run onboarding proof owner documented"
|
|
38
|
+
],
|
|
39
|
+
"firstContactOwners": [
|
|
40
|
+
"src/cli/help.ts",
|
|
41
|
+
"src/cli/onboarding-metadata.json",
|
|
42
|
+
"README.md",
|
|
43
|
+
"docs/README.md",
|
|
44
|
+
"docs/FIRST_RUN_ONBOARDING.md",
|
|
45
|
+
"skills/opendevbrowser-best-practices/SKILL.md"
|
|
32
46
|
]
|
|
33
47
|
}
|
|
@@ -28,6 +28,7 @@ Usage:
|
|
|
28
28
|
Workflows:
|
|
29
29
|
provider-search
|
|
30
30
|
provider-crawl
|
|
31
|
+
inspiredesign
|
|
31
32
|
parallel-multipage-safe
|
|
32
33
|
qa-debug
|
|
33
34
|
social-readonly-check
|
|
@@ -69,6 +70,12 @@ opendevbrowser_wait sessionId="<session-id>" until="networkidle"
|
|
|
69
70
|
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
70
71
|
opendevbrowser_scroll sessionId="<session-id>" dy=1000
|
|
71
72
|
opendevbrowser_wait sessionId="<session-id>" until="networkidle"
|
|
73
|
+
EOF
|
|
74
|
+
;;
|
|
75
|
+
inspiredesign)
|
|
76
|
+
cat <<EOF
|
|
77
|
+
# Pair with opendevbrowser-design-agent when the contract will flow into implementation or /canvas work.
|
|
78
|
+
$CLI_PREFIX inspiredesign run --brief "Design a premium docs workspace" --url "https://example.com/reference-a" --url "https://example.com/reference-b" --capture-mode off --include-prototype-guidance --mode json --output-format json
|
|
72
79
|
EOF
|
|
73
80
|
;;
|
|
74
81
|
parallel-multipage-safe)
|
|
@@ -115,11 +122,13 @@ EOF
|
|
|
115
122
|
cat skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json
|
|
116
123
|
cat skills/opendevbrowser-best-practices/assets/templates/canvas-generation-plan.v1.json
|
|
117
124
|
$CLI_PREFIX canvas --command canvas.session.open --params '{"requestId":"req_open_01","browserSessionId":"<browser-session-id>","documentId":null,"repoPath":null,"mode":"dual-track"}'
|
|
118
|
-
# Read handshake before any mutation.
|
|
125
|
+
# Read handshake before any mutation. Inspect planStatus, preflightState, generationPlanRequirements.allowedValues, generationPlanIssues, and guidance.recommendedNextCommands.
|
|
119
126
|
$CLI_PREFIX canvas --command canvas.plan.set --params-file skills/opendevbrowser-best-practices/assets/templates/canvas-generation-plan.v1.json
|
|
120
127
|
# Replace placeholders in the plan file with canvasSessionId, leaseId, and documentId from the open response.
|
|
121
|
-
|
|
122
|
-
#
|
|
128
|
+
# If canvas.plan.set succeeds with planStatus=accepted or preflightState=plan_accepted, follow the returned guidance into canvas.document.patch.
|
|
129
|
+
# Optional diagnostics after generation_plan_invalid:
|
|
130
|
+
# $CLI_PREFIX canvas --command canvas.plan.get --params '{"requestId":"req_plan_get_01","canvasSessionId":"<canvas-session-id>","leaseId":"<lease-id>","documentId":"<document-id>"}'
|
|
131
|
+
# or re-read with canvas.capabilities.get to inspect generationPlanIssues before resubmitting canvas.plan.set.
|
|
123
132
|
EOF
|
|
124
133
|
;;
|
|
125
134
|
canvas-feedback-eval)
|
|
@@ -128,7 +137,7 @@ cat skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md
|
|
|
128
137
|
cat skills/opendevbrowser-best-practices/assets/templates/canvas-feedback-eval.json
|
|
129
138
|
cat skills/opendevbrowser-best-practices/assets/templates/canvas-blocker-checklist.json
|
|
130
139
|
$CLI_PREFIX canvas --command canvas.feedback.poll --params '{"requestId":"req_feedback_01","canvasSessionId":"<canvas-session-id>","documentId":"<document-id>","targetId":"<target-id>","afterCursor":null}'
|
|
131
|
-
# Verify every feedback item is target-attributed and uses approved categories.
|
|
140
|
+
# Verify every feedback item is target-attributed and uses approved categories. If feedback returns preflight-blocker, return to canvas.plan.set first.
|
|
132
141
|
$CLI_PREFIX canvas --command canvas.preview.refresh --params '{"requestId":"req_refresh_01","canvasSessionId":"<canvas-session-id>","leaseId":"<lease-id>","targetId":"<target-id>","refreshMode":"full"}'
|
|
133
142
|
$CLI_PREFIX canvas --command canvas.document.save --params '{"requestId":"req_save_01","canvasSessionId":"<canvas-session-id>","leaseId":"<lease-id>","documentId":"<document-id>","repoPath":null}'
|
|
134
143
|
# Save should fail or warn when requiredBeforeSave governance blocks remain unresolved.
|
|
@@ -186,6 +195,9 @@ $CLI_PREFIX research run --topic "Chrome extension debugging workflows" --days 3
|
|
|
186
195
|
$CLI_PREFIX shopping run --query "wireless ergonomic mouse" --providers shopping/bestbuy,shopping/ebay --budget 150 --browser-mode managed --mode json --output-format json
|
|
187
196
|
$CLI_PREFIX shopping run --query "27 inch 4k monitor" --providers shopping/bestbuy,shopping/ebay --budget 350 --sort lowest_price --browser-mode managed --mode json --output-format json
|
|
188
197
|
|
|
198
|
+
# Public-reference inspiredesign contract synthesis
|
|
199
|
+
$CLI_PREFIX inspiredesign run --brief "Design a premium docs workspace" --url "https://example.com/reference-a" --url "https://example.com/reference-b" --capture-mode off --include-prototype-guidance --mode json --output-format json
|
|
200
|
+
|
|
189
201
|
# Region note: advisory unless output reports meta.selection.region_authoritative=true
|
|
190
202
|
$CLI_PREFIX shopping run --query "wireless earbuds" --providers shopping/amazon --region us --browser-mode managed --mode json --output-format json
|
|
191
203
|
EOF
|
|
@@ -96,8 +96,10 @@ check_canvas_pack() {
|
|
|
96
96
|
const robustness = JSON.parse(fs.readFileSync(robustnessPath, "utf8"));
|
|
97
97
|
const feedbackIds = new Set(feedback.requiredIssueClasses || []);
|
|
98
98
|
const blockerIds = new Set((blockers.blockers || []).map((entry) => entry.auditId));
|
|
99
|
+
const reviewIds = new Set((blockers.reviewChecks || []).map((entry) => entry.auditId));
|
|
100
|
+
const checklistIds = new Set([...blockerIds, ...reviewIds]);
|
|
99
101
|
const robustnessIds = new Set((((robustness.canvas || {}).issueClasses) || []).map((entry) => entry.auditId));
|
|
100
|
-
const missing = expected.filter((id) => !feedbackIds.has(id) || !
|
|
102
|
+
const missing = expected.filter((id) => !feedbackIds.has(id) || !checklistIds.has(id) || !robustnessIds.has(id));
|
|
101
103
|
if (missing.length > 0) {
|
|
102
104
|
console.error(`[canvas-pack] missing canvas audit ids in JSON templates: ${missing.join(", ")}`);
|
|
103
105
|
process.exit(1);
|
|
@@ -64,6 +64,9 @@ const executableScripts = [
|
|
|
64
64
|
];
|
|
65
65
|
|
|
66
66
|
const workflowMarkers = [
|
|
67
|
+
"inspiredesign)",
|
|
68
|
+
"inspiredesign run",
|
|
69
|
+
"--include-prototype-guidance",
|
|
67
70
|
"canvas-preflight",
|
|
68
71
|
"canvas-feedback-eval",
|
|
69
72
|
"release-direct-gates",
|
|
@@ -100,10 +103,24 @@ const canvasPlaybookMarkers = [
|
|
|
100
103
|
"canvas.session.open",
|
|
101
104
|
"canvas.plan.set",
|
|
102
105
|
"canvas.feedback.poll",
|
|
106
|
+
"guidance.recommendedNextCommands",
|
|
107
|
+
"generationPlanIssues",
|
|
108
|
+
"plan_invalid",
|
|
109
|
+
"generation_plan_invalid",
|
|
103
110
|
"CANVAS-01",
|
|
104
111
|
"CANVAS-07"
|
|
105
112
|
];
|
|
106
113
|
|
|
114
|
+
const canvasHandshakeMarkers = [
|
|
115
|
+
"\"planStatus\": \"missing\"",
|
|
116
|
+
"\"allowedValues\"",
|
|
117
|
+
"\"warningClasses\"",
|
|
118
|
+
"\"generationPlanIssues\"",
|
|
119
|
+
"\"mutationPolicy\"",
|
|
120
|
+
"\"recommendedNextCommands\"",
|
|
121
|
+
"\"reason\": \"Handshake is complete. Submit a complete generationPlan before mutation.\""
|
|
122
|
+
];
|
|
123
|
+
|
|
107
124
|
const canvasTemplateMarkers = [
|
|
108
125
|
"CANVAS-01",
|
|
109
126
|
"CANVAS-02",
|
|
@@ -128,11 +145,14 @@ const readUtf8 = (relPath) => fs.readFileSync(path.join(skillRoot, relPath), "ut
|
|
|
128
145
|
const hasMarker = (content, marker) => content.includes(marker);
|
|
129
146
|
(async () => {
|
|
130
147
|
const { getSurfaceCounts } = await import(pathToFileURL(path.join(repoRoot, "scripts", "docs-drift-check.mjs")).href);
|
|
148
|
+
const { getBundledSkillDirectoryPackIds } = await import(pathToFileURL(path.join(repoRoot, "scripts", "skill-runtime-scenarios.mjs")).href);
|
|
131
149
|
const { commandCount, toolCount, opsCommandCount, canvasCommandCount } = getSurfaceCounts();
|
|
132
150
|
|
|
133
151
|
const skillDocMarkers = [
|
|
134
152
|
"npx opendevbrowser --help",
|
|
135
153
|
"npx opendevbrowser help",
|
|
154
|
+
"npx opendevbrowser inspiredesign run",
|
|
155
|
+
"./skills/opendevbrowser-best-practices/scripts/odb-workflow.sh inspiredesign",
|
|
136
156
|
`${commandCount} CLI commands, ${toolCount} tools, ${opsCommandCount} \`/ops\` commands, ${canvasCommandCount} \`/canvas\` commands`,
|
|
137
157
|
"Treat `tests/parity-matrix.test.ts` as contract coverage only.",
|
|
138
158
|
"canonical owner of direct-run release evidence policy",
|
|
@@ -140,6 +160,11 @@ const hasMarker = (content, marker) => content.includes(marker);
|
|
|
140
160
|
"artifacts/skill-runtime-surface-matrix.md",
|
|
141
161
|
"assets/templates/skill-runtime-pack-matrix.json",
|
|
142
162
|
"mutationPolicy.allowedBeforePlan",
|
|
163
|
+
"planStatus",
|
|
164
|
+
"plan_invalid",
|
|
165
|
+
"generationPlanIssues",
|
|
166
|
+
"guidance.recommendedNextCommands",
|
|
167
|
+
"generation_plan_invalid",
|
|
143
168
|
"canvas.code.bind",
|
|
144
169
|
"canvas.code.resolve",
|
|
145
170
|
"bound_app_runtime",
|
|
@@ -169,7 +194,14 @@ const hasMarker = (content, marker) => content.includes(marker);
|
|
|
169
194
|
"feedback.heartbeat",
|
|
170
195
|
"governanceRequirements",
|
|
171
196
|
"generationPlanRequirements",
|
|
197
|
+
"allowedValues",
|
|
172
198
|
"mutationPolicy",
|
|
199
|
+
"planStatus",
|
|
200
|
+
"plan_invalid",
|
|
201
|
+
"generationPlanIssues",
|
|
202
|
+
"warningClasses",
|
|
203
|
+
"recommendedNextCommands",
|
|
204
|
+
"generation_plan_invalid",
|
|
173
205
|
"code-sync",
|
|
174
206
|
"parity",
|
|
175
207
|
"plan_required",
|
|
@@ -188,11 +220,17 @@ const hasMarker = (content, marker) => content.includes(marker);
|
|
|
188
220
|
`"tools": ${toolCount}`,
|
|
189
221
|
`"opsCommands": ${opsCommandCount}`,
|
|
190
222
|
`"canvasCommands": ${canvasCommandCount}`,
|
|
223
|
+
"\"docs/README.md\"",
|
|
224
|
+
"\"docs/FIRST_RUN_ONBOARDING.md\"",
|
|
225
|
+
"\"firstContactOwners\"",
|
|
191
226
|
"Pointer controls documented",
|
|
192
227
|
"Ops pointer and preview namespaces documented",
|
|
193
228
|
"Canvas command names documented",
|
|
194
229
|
"Canvas code-sync surface documented",
|
|
195
|
-
"Annotation send/copy semantics documented"
|
|
230
|
+
"Annotation send/copy semantics documented",
|
|
231
|
+
"Generated help first-contact owners documented",
|
|
232
|
+
"Onboarding metadata owner documented",
|
|
233
|
+
"First-run onboarding proof owner documented"
|
|
196
234
|
];
|
|
197
235
|
|
|
198
236
|
for (const relPath of requiredPaths) {
|
|
@@ -233,15 +271,23 @@ const hasMarker = (content, marker) => content.includes(marker);
|
|
|
233
271
|
? packMatrix.canonicalPacks.map((entry) => entry?.packId).filter((value) => typeof value === "string")
|
|
234
272
|
: [];
|
|
235
273
|
const uniquePackIds = new Set(packIds);
|
|
274
|
+
const bundledSkillNames = getBundledSkillDirectoryPackIds();
|
|
275
|
+
const bundledSkillNameSet = new Set(bundledSkillNames);
|
|
236
276
|
const auditDomainIds = Array.isArray(packMatrix.auditDomains)
|
|
237
277
|
? packMatrix.auditDomains.map((entry) => entry?.id).filter((value) => typeof value === "string")
|
|
238
278
|
: [];
|
|
239
279
|
const uniqueAuditDomainIds = new Set(auditDomainIds);
|
|
240
|
-
if (packIds.length
|
|
241
|
-
failures.push(`Skill runtime pack matrix must contain
|
|
280
|
+
if (packIds.length === 0 || uniquePackIds.size !== packIds.length) {
|
|
281
|
+
failures.push(`Skill runtime pack matrix must contain non-empty unique canonical packs; found ${uniquePackIds.size}/${packIds.length}.`);
|
|
282
|
+
}
|
|
283
|
+
if (bundledSkillNames.length === 0) {
|
|
284
|
+
failures.push("Bundled skill registry did not expose any canonical pack names.");
|
|
285
|
+
}
|
|
286
|
+
if (packIds.some((packId) => !bundledSkillNameSet.has(packId)) || bundledSkillNames.some((packId) => !uniquePackIds.has(packId))) {
|
|
287
|
+
failures.push("Skill runtime pack matrix canonical packs must match src/skills/bundled-skill-directories.ts.");
|
|
242
288
|
}
|
|
243
|
-
if (auditDomainIds.length
|
|
244
|
-
failures.push(`Skill runtime pack matrix must contain
|
|
289
|
+
if (auditDomainIds.length === 0 || uniqueAuditDomainIds.size !== auditDomainIds.length) {
|
|
290
|
+
failures.push(`Skill runtime pack matrix must contain non-empty unique audit domains; found ${uniqueAuditDomainIds.size}/${auditDomainIds.length}.`);
|
|
245
291
|
}
|
|
246
292
|
if (!Array.isArray(packMatrix.runtimeFamilies) || packMatrix.runtimeFamilies.length === 0) {
|
|
247
293
|
failures.push("Skill runtime pack matrix missing runtimeFamilies.");
|
|
@@ -263,28 +309,15 @@ const hasMarker = (content, marker) => content.includes(marker);
|
|
|
263
309
|
const runtimeMatrixPath = "artifacts/skill-runtime-surface-matrix.md";
|
|
264
310
|
if (fs.existsSync(path.join(skillRoot, runtimeMatrixPath))) {
|
|
265
311
|
const runtimeMatrix = readUtf8(runtimeMatrixPath);
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
"opendevbrowser-data-extraction",
|
|
270
|
-
"opendevbrowser-design-agent",
|
|
271
|
-
"opendevbrowser-form-testing",
|
|
272
|
-
"opendevbrowser-login-automation",
|
|
273
|
-
"opendevbrowser-product-presentation-asset",
|
|
274
|
-
"opendevbrowser-research",
|
|
275
|
-
"opendevbrowser-shopping",
|
|
312
|
+
const packMatrix = JSON.parse(fs.readFileSync(path.join(skillRoot, "assets/templates/skill-runtime-pack-matrix.json"), "utf8"));
|
|
313
|
+
const runtimeMatrixMarkers = [
|
|
314
|
+
...packMatrix.canonicalPacks.map((entry) => entry.packId),
|
|
276
315
|
"Shared runtime families",
|
|
316
|
+
...packMatrix.runtimeFamilies.map((entry) => entry.label),
|
|
277
317
|
"Audit domains",
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
"browser-snapshot-interaction",
|
|
282
|
-
"canvas-annotate-design",
|
|
283
|
-
"extension-relay-cdp",
|
|
284
|
-
"providers-macros-workflows",
|
|
285
|
-
"challenges-and-guardrails",
|
|
286
|
-
"runtime-infrastructure"
|
|
287
|
-
]) {
|
|
318
|
+
...packMatrix.auditDomains.map((entry) => entry.id)
|
|
319
|
+
];
|
|
320
|
+
for (const marker of runtimeMatrixMarkers) {
|
|
288
321
|
if (!hasMarker(runtimeMatrix, marker)) {
|
|
289
322
|
failures.push(`Skill runtime surface matrix missing marker: ${marker}`);
|
|
290
323
|
}
|
|
@@ -339,6 +372,16 @@ const hasMarker = (content, marker) => content.includes(marker);
|
|
|
339
372
|
}
|
|
340
373
|
}
|
|
341
374
|
|
|
375
|
+
const canvasHandshakePath = "assets/templates/canvas-handshake-example.json";
|
|
376
|
+
if (fs.existsSync(path.join(skillRoot, canvasHandshakePath))) {
|
|
377
|
+
const canvasHandshake = readUtf8(canvasHandshakePath);
|
|
378
|
+
for (const marker of canvasHandshakeMarkers) {
|
|
379
|
+
if (!hasMarker(canvasHandshake, marker)) {
|
|
380
|
+
failures.push(`Canvas handshake example missing marker: ${marker}`);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
342
385
|
if (fs.existsSync(path.join(skillRoot, surfaceAuditPath))) {
|
|
343
386
|
const surfaceAudit = readUtf8(surfaceAuditPath);
|
|
344
387
|
for (const marker of surfaceAuditMarkers) {
|
|
@@ -42,7 +42,7 @@ Use this skill for frontend work that must be visually strong, contract-first, a
|
|
|
42
42
|
- Shared robustness matrix: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
|
|
43
43
|
- Shared canvas workflow baseline: `../opendevbrowser-best-practices/SKILL.md`
|
|
44
44
|
|
|
45
|
-
##
|
|
45
|
+
## Quick Start
|
|
46
46
|
|
|
47
47
|
1. Validate pack integrity.
|
|
48
48
|
|
|
@@ -92,6 +92,7 @@ Use this skill for frontend work that must be visually strong, contract-first, a
|
|
|
92
92
|
- Prefer real content, realistic states, and explicit user journeys over placeholder copy.
|
|
93
93
|
- Preserve the repo's existing design system when one already exists. Only introduce a new direction when the brief or product gap justifies it.
|
|
94
94
|
- Treat `/canvas` governance as the strongest contract in the repo: read the handshake, respect `generationPlanRequirements`, and do not mutate before the plan is accepted.
|
|
95
|
+
- Treat `preflightState="handshake_read"` as the required ready state for the first post-open decision loop unless the handshake is already reporting an invalid-plan repair path.
|
|
95
96
|
- For non-canvas frontend work, still fill the same design-contract fields before coding so decisions stay consistent across code, preview, and docs.
|
|
96
97
|
- Use one owner for overlays, drawers, sheets, and detail panels; prefer item-backed state over boolean sprawl.
|
|
97
98
|
- If motion depends on scroll or viewport progress, define the driver and reduced-motion fallback before implementation.
|
|
@@ -176,13 +177,17 @@ Use when starting from screenshots, mocks, or an existing page.
|
|
|
176
177
|
Use when the task should run through the design canvas.
|
|
177
178
|
|
|
178
179
|
- Start with `canvas.session.open` or `canvas.capabilities.get`.
|
|
179
|
-
- Read the handshake and
|
|
180
|
+
- Read the handshake and inspect `planStatus`, `preflightState`, `generationPlanRequirements.allowedValues`, `generationPlanIssues`, and `guidance.recommendedNextCommands` before choosing the next command.
|
|
181
|
+
- Treat `preflightState="handshake_read"` as the normal first-step checkpoint before `canvas.plan.set`; if the handshake already reports `plan_invalid`, repair the plan instead of mutating.
|
|
180
182
|
- Fill the full design contract and extract the `generationPlan`.
|
|
181
|
-
- Submit `canvas.plan.set
|
|
183
|
+
- Submit `canvas.plan.set`.
|
|
184
|
+
- If `canvas.plan.set` succeeds with `planStatus="accepted"` or `preflightState="plan_accepted"`, follow the returned `guidance.recommendedNextCommands`, then mutate with `canvas.document.patch`.
|
|
185
|
+
- If `canvas.plan.set` fails with `generation_plan_invalid`, inspect `details.missingFields`, `details.issues`, and `generationPlanIssues`, then optionally re-read with `canvas.plan.get` or `canvas.capabilities.get` before resubmitting.
|
|
186
|
+
- After every successful `canvas.document.patch`, `canvas.preview.render`, `canvas.preview.refresh`, `canvas.feedback.poll`, `canvas.document.save`, or `canvas.document.export`, read `guidance.recommendedNextCommands` and `guidance.reason` before choosing the next step.
|
|
182
187
|
- Validate extension-stage history controls against public `canvas.history.undo` and `canvas.history.redo`; design-tab clicks emit the internal `canvas_history_requested` event, but acceptance is still on the public command outcomes.
|
|
183
188
|
- When token work is in scope, validate collection or mode authoring, token value or alias edits, selected-node binding, and token usage inspection in the extension stage.
|
|
184
189
|
- If annotation send is part of the workflow, record whether the design tab returned `Delivered to agent` or `Stored only; fetch with annotate --stored`.
|
|
185
|
-
- Use `canvas.
|
|
190
|
+
- Use `canvas.preview.render`, `canvas.feedback.poll`, `canvas.preview.refresh`, and `canvas.document.save` as the validation loop in that order. If `canvas.feedback.poll` returns a `preflight-blocker`, return to `canvas.plan.set` before continuing.
|
|
186
191
|
|
|
187
192
|
### `real-surface-validation`
|
|
188
193
|
|