@givolt/i3-composer-agent 3.1.0 → 4.0.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.
Files changed (677) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/i3-build.md +1 -0
  3. package/.claude/commands/i3-code-simplify.md +1 -0
  4. package/.claude/commands/i3-constraints.md +1 -0
  5. package/.claude/commands/i3-plan.md +1 -0
  6. package/.claude/commands/i3-review.md +1 -0
  7. package/.claude/commands/i3-ship.md +1 -0
  8. package/.claude/commands/i3-sop.md +3 -3
  9. package/.claude/commands/i3-spec.md +1 -0
  10. package/.claude/commands/i3-test.md +1 -0
  11. package/.claude/commands/i3-webperf.md +1 -0
  12. package/.claude-plugin/marketplace.json +1 -1
  13. package/.claude-plugin/plugin.json +1 -1
  14. package/.codex-plugin/plugin.json +2 -2
  15. package/.gemini/commands/i3-sop.toml +3 -3
  16. package/README.md +44 -43
  17. package/bin/i3-composer-agent.cjs +4 -59
  18. package/bin/install.cjs +6 -14
  19. package/bin/native-layout.cjs +11 -2
  20. package/bin/native-migration.cjs +68 -28
  21. package/bin/retired-custom-fingerprints.json +1597 -0
  22. package/bin/wizard.cjs +2 -13
  23. package/commands/i3-sop.toml +3 -3
  24. package/docs/antigravity-setup.md +3 -1
  25. package/docs/codebuddy-setup.md +19 -76
  26. package/docs/codex-setup.md +10 -4
  27. package/docs/comparison.md +1 -1
  28. package/docs/copilot-cli-setup.md +4 -4
  29. package/docs/cursor-setup.md +1 -1
  30. package/docs/gemini-cli-setup.md +1 -1
  31. package/docs/other-hosts.md +2 -2
  32. package/docs/windsurf-setup.md +2 -2
  33. package/docs/workbuddy-setup.md +9 -16
  34. package/evals/README.md +10 -0
  35. package/evals/cases/i3-code-simplification.json +8 -0
  36. package/evals/cases/i3-documentation-and-adrs.json +4 -0
  37. package/evals/cases/i3-enterprise-sop.json +70 -32
  38. package/evals/cases/i3-frontend-ui-engineering.json +1 -1
  39. package/evals/cases/i3-security-and-hardening.json +4 -0
  40. package/evals/cases/i3-ui-demo.json +2 -2
  41. package/evals/cases/i3-using-agent-skills.json +5 -5
  42. package/evals/plugin/simplify-fires-on-pasted-function/graders/behavior-kept-and-explained.md +7 -0
  43. package/evals/plugin/simplify-fires-on-pasted-function/graders/skill-fired.md +5 -0
  44. package/evals/plugin/simplify-fires-on-pasted-function/prompt.md +30 -0
  45. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/graders/not-fired.md +8 -0
  46. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/prompt.md +20 -0
  47. package/evals/zh-CN/cases/i3-code-simplification.json +8 -0
  48. package/evals/zh-CN/cases/i3-documentation-and-adrs.json +4 -0
  49. package/evals/zh-CN/cases/i3-enterprise-sop.json +77 -31
  50. package/evals/zh-CN/cases/i3-frontend-ui-engineering.json +2 -2
  51. package/evals/zh-CN/cases/i3-security-and-hardening.json +4 -0
  52. package/evals/zh-CN/cases/i3-ui-demo.json +2 -2
  53. package/evals/zh-CN/cases/i3-using-agent-skills.json +6 -6
  54. package/hooks/SDD-CACHE.md +1 -1
  55. package/package.json +13 -102
  56. package/plugin.json +15 -2
  57. package/references/accessibility-checklist.md +4 -4
  58. package/references/performance-checklist.md +5 -4
  59. package/references/testing-patterns.md +2 -1
  60. package/scripts/floor-guard-reference-test.js +32 -0
  61. package/scripts/lib/execution-status.js +44 -0
  62. package/scripts/run-evals-test.js +157 -7
  63. package/scripts/run-evals.js +59 -12
  64. package/scripts/ui-demo-test.js +2 -2
  65. package/scripts/validate-artifact-paths-test.js +14 -0
  66. package/scripts/validate-artifact-paths.js +4 -2
  67. package/skills/i3-api-and-interface-design/SKILL.md +3 -1
  68. package/skills/i3-ci-cd-and-automation/SKILL.md +7 -4
  69. package/skills/i3-code-simplification/SKILL.md +3 -3
  70. package/skills/i3-constraint-driven-development/SKILL.md +4 -4
  71. package/skills/i3-constraint-driven-development/references/floor-guard.md +2 -2
  72. package/skills/i3-context-engineering/SKILL.md +1 -1
  73. package/skills/i3-debugging-and-error-recovery/SKILL.md +1 -1
  74. package/skills/i3-deprecation-and-migration/SKILL.md +6 -1
  75. package/skills/i3-documentation-and-adrs/SKILL.md +3 -2
  76. package/skills/i3-enterprise-sop/SKILL.md +121 -94
  77. package/skills/i3-enterprise-sop/references/engineering-skeleton/directory-standard.md +31 -17
  78. package/skills/i3-enterprise-sop/references/handoff.py +235 -135
  79. package/skills/i3-enterprise-sop/references/read_text.py +60 -0
  80. package/skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md +47 -47
  81. package/skills/i3-enterprise-sop/references/technical-baseline/readme.md +9 -118
  82. package/skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md +8 -8
  83. package/skills/i3-enterprise-sop/references/{ad/templates → templates}/ad.md +57 -50
  84. package/skills/i3-enterprise-sop/references/{brd/templates → templates}/brd.md +23 -12
  85. package/skills/i3-enterprise-sop/references/{prd/templates → templates}/prd.md +84 -51
  86. package/skills/i3-enterprise-sop/references/{testcase/templates → templates}/testcase.md +49 -39
  87. package/skills/i3-frontend-ui-engineering/SKILL.md +6 -10
  88. package/skills/i3-idea-refine/SKILL.md +4 -2
  89. package/skills/i3-incremental-implementation/SKILL.md +0 -4
  90. package/skills/i3-performance-optimization/SKILL.md +2 -2
  91. package/skills/i3-security-and-hardening/references/hardening-patterns.md +5 -0
  92. package/skills/i3-source-driven-development/SKILL.md +3 -2
  93. package/skills/i3-spec-driven-development/SKILL.md +1 -1
  94. package/skills/i3-ui-demo/SKILL.md +3 -1
  95. package/skills/i3-ui-demo/references/dependencies.md +1 -1
  96. package/skills/i3-ui-demo/references/resources.md +1 -1
  97. package/skills/i3-ui-demo/scripts/dependencies.cjs +0 -3
  98. package/skills/i3-using-agent-skills/SKILL.md +2 -2
  99. package/.claude/commands/i3-prototype.md +0 -23
  100. package/.gemini/commands/i3-prototype.toml +0 -23
  101. package/commands/i3-prototype.toml +0 -23
  102. package/docs/upstream-repository/AGENTS.md +0 -92
  103. package/docs/upstream-repository/CLAUDE.md +0 -60
  104. package/docs/upstream-repository/CONTRIBUTING.md +0 -137
  105. package/docs/upstream-repository/README.md +0 -8
  106. package/docs/upstream-repository/gitattributes.txt +0 -1
  107. package/docs/upstream-repository/gitignore.txt +0 -10
  108. package/docs/upstream-repository/manifest.json +0 -71
  109. package/docs/upstream-repository/opencode-skills.link +0 -1
  110. package/docs/upstream-repository/skill-gap.yml +0 -80
  111. package/docs/upstream-repository/skills-contributing.md +0 -15
  112. package/docs/upstream-repository/test-plugin-install.yml +0 -167
  113. package/evals/cases/i3-ui-prototype.json +0 -158
  114. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.css +0 -3
  115. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.js +0 -8
  116. package/evals/fixtures/i3-ui-prototype/admin-list/capability-definition.json +0 -67
  117. package/evals/fixtures/i3-ui-prototype/admin-list/index.html +0 -89
  118. package/evals/fixtures/i3-ui-prototype/admin-list/readme.md +0 -52
  119. package/evals/fixtures/i3-ui-prototype/admin-list/template.json +0 -8
  120. package/evals/fixtures/i3-ui-prototype/business-brief.md +0 -7
  121. package/evals/zh-CN/cases/i3-ui-prototype.json +0 -165
  122. package/hooks/PROTOTYPE.md +0 -31
  123. package/hooks/codebuddy-upstream.cjs +0 -93
  124. package/hooks/i3-prototype.cjs +0 -7
  125. package/hooks/manage.cjs +0 -169
  126. package/scripts/design-provider-discovery-test.js +0 -190
  127. package/scripts/design-provider-test.js +0 -75
  128. package/scripts/enterprise-template-test.js +0 -205
  129. package/scripts/lib/prototype-fixture.cjs +0 -17
  130. package/scripts/prototype-cache-test.js +0 -55
  131. package/scripts/prototype-generation-entry-test.js +0 -6
  132. package/scripts/prototype-generation-evidence-test.js +0 -10
  133. package/scripts/prototype-generation-native-test.js +0 -78
  134. package/scripts/prototype-generation-test.js +0 -99
  135. package/scripts/prototype-inventory-test.js +0 -43
  136. package/scripts/prototype-locations-test.js +0 -79
  137. package/scripts/prototype-project-test.js +0 -183
  138. package/scripts/template-adapter-test.js +0 -155
  139. package/scripts/ui-prototype-binding-recovery-test.js +0 -84
  140. package/scripts/ui-prototype-buddy-lifecycle-test.js +0 -102
  141. package/scripts/ui-prototype-codebuddy-hook-test.js +0 -112
  142. package/scripts/ui-prototype-content-test.js +0 -123
  143. package/scripts/ui-prototype-dependencies-test.js +0 -226
  144. package/scripts/ui-prototype-devtools-test.js +0 -53
  145. package/scripts/ui-prototype-execution-evidence-test.js +0 -62
  146. package/scripts/ui-prototype-execution-gates-test.js +0 -91
  147. package/scripts/ui-prototype-execution-policy-test.js +0 -53
  148. package/scripts/ui-prototype-execution-runtime-test.js +0 -27
  149. package/scripts/ui-prototype-ide-source-test.js +0 -73
  150. package/scripts/ui-prototype-native-test.js +0 -526
  151. package/scripts/ui-prototype-recovery-test.js +0 -81
  152. package/scripts/ui-prototype-registration-test.js +0 -53
  153. package/scripts/ui-prototype-template-test.js +0 -261
  154. package/scripts/ui-prototype-test.js +0 -124
  155. package/scripts/ui-prototype-transcript-auto-test.js +0 -67
  156. package/skills/i3-enterprise-sop/references/ad/assets-manifest.json +0 -86
  157. package/skills/i3-enterprise-sop/references/ad/prompts/01-generate.md +0 -58
  158. package/skills/i3-enterprise-sop/references/ad/prompts/02-review.md +0 -54
  159. package/skills/i3-enterprise-sop/references/ad/prompts/03-revise.md +0 -54
  160. package/skills/i3-enterprise-sop/references/ad/prompts/04-recheck.md +0 -54
  161. package/skills/i3-enterprise-sop/references/ad/readme.md +0 -70
  162. package/skills/i3-enterprise-sop/references/assets-manifest.json +0 -230
  163. package/skills/i3-enterprise-sop/references/brd/assets-manifest.json +0 -83
  164. package/skills/i3-enterprise-sop/references/brd/prompts/01-generate.md +0 -51
  165. package/skills/i3-enterprise-sop/references/brd/prompts/02-review.md +0 -47
  166. package/skills/i3-enterprise-sop/references/brd/prompts/03-revise.md +0 -47
  167. package/skills/i3-enterprise-sop/references/brd/prompts/04-recheck.md +0 -47
  168. package/skills/i3-enterprise-sop/references/brd/readme.md +0 -50
  169. package/skills/i3-enterprise-sop/references/codebuddy-project-guide.md +0 -34
  170. package/skills/i3-enterprise-sop/references/controlled-handoff.md +0 -41
  171. package/skills/i3-enterprise-sop/references/controlled_handoff.py +0 -379
  172. package/skills/i3-enterprise-sop/references/engineering-skeleton/adoption.md +0 -200
  173. package/skills/i3-enterprise-sop/references/engineering-skeleton/catalog.json +0 -17
  174. package/skills/i3-enterprise-sop/references/engineering-skeleton/readme.md +0 -52
  175. package/skills/i3-enterprise-sop/references/handoff-contract.md +0 -196
  176. package/skills/i3-enterprise-sop/references/lifecycle-contract.md +0 -91
  177. package/skills/i3-enterprise-sop/references/plan-handoff.md +0 -73
  178. package/skills/i3-enterprise-sop/references/prd/assets-manifest.json +0 -109
  179. package/skills/i3-enterprise-sop/references/prd/prompts/01-generate.md +0 -64
  180. package/skills/i3-enterprise-sop/references/prd/prompts/02-review.md +0 -49
  181. package/skills/i3-enterprise-sop/references/prd/prompts/03-revise.md +0 -48
  182. package/skills/i3-enterprise-sop/references/prd/prompts/04-recheck.md +0 -47
  183. package/skills/i3-enterprise-sop/references/prd/readme.md +0 -137
  184. package/skills/i3-enterprise-sop/references/prd/template-contracts.md +0 -39
  185. package/skills/i3-enterprise-sop/references/prd/templates/ad.md +0 -17
  186. package/skills/i3-enterprise-sop/references/readme.md +0 -167
  187. package/skills/i3-enterprise-sop/references/recovery-contract.md +0 -65
  188. package/skills/i3-enterprise-sop/references/review-handoff.md +0 -105
  189. package/skills/i3-enterprise-sop/references/selection-handoff.md +0 -55
  190. package/skills/i3-enterprise-sop/references/selection_handoff.py +0 -225
  191. package/skills/i3-enterprise-sop/references/stages.json +0 -271
  192. package/skills/i3-enterprise-sop/references/technical-baseline/assets-manifest.json +0 -84
  193. package/skills/i3-enterprise-sop/references/template-contracts.md +0 -142
  194. package/skills/i3-enterprise-sop/references/testcase/assets-manifest.json +0 -91
  195. package/skills/i3-enterprise-sop/references/testcase/prompts/01-generate.md +0 -53
  196. package/skills/i3-enterprise-sop/references/testcase/prompts/02-review.md +0 -51
  197. package/skills/i3-enterprise-sop/references/testcase/prompts/03-revise.md +0 -49
  198. package/skills/i3-enterprise-sop/references/testcase/prompts/04-recheck.md +0 -51
  199. package/skills/i3-enterprise-sop/references/testcase/readme.md +0 -61
  200. package/skills/i3-enterprise-sop/references/verification/check_execution.py +0 -185
  201. package/skills/i3-enterprise-sop/references/verification/check_native_execution.py +0 -282
  202. package/skills/i3-enterprise-sop/references/verification/check_reads.py +0 -348
  203. package/skills/i3-enterprise-sop/references/verification/readme.md +0 -149
  204. package/skills/i3-enterprise-sop/references/verification/review-output.schema.json +0 -155
  205. package/skills/i3-enterprise-sop/references/verification/review_handoff.py +0 -329
  206. package/skills/i3-ui-prototype/SKILL.md +0 -256
  207. package/skills/i3-ui-prototype/assets/capabilities/generation.json +0 -833
  208. package/skills/i3-ui-prototype/assets/capabilities/management.json +0 -294
  209. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/acceptance.json +0 -51
  210. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/component-map.json +0 -13
  211. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/generation-component-map.json +0 -300
  212. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/index.html +0 -11
  213. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package-lock.json +0 -2298
  214. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package.json +0 -22
  215. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/public/prototype-config.json +0 -6
  216. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/App.vue +0 -136
  217. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/components/DeviceEditor.vue +0 -111
  218. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/config.ts +0 -19
  219. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/content.ts +0 -28
  220. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/devices.ts +0 -50
  221. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/theme.ts +0 -25
  222. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/main.ts +0 -18
  223. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/style.css +0 -50
  224. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/useDevices.ts +0 -66
  225. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/devices.test.ts +0 -44
  226. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/theme.test.ts +0 -26
  227. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tsconfig.json +0 -15
  228. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/vite.config.ts +0 -4
  229. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/profile.json +0 -174
  230. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/readme.md +0 -61
  231. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/index.html +0 -11
  232. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package-lock.json +0 -2298
  233. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package.json +0 -22
  234. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/public/prototype-config.json +0 -21
  235. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/App.vue +0 -62
  236. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/PrototypeShell.vue +0 -59
  237. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/config.ts +0 -23
  238. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/presentation.ts +0 -29
  239. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/theme.ts +0 -25
  240. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/main.ts +0 -18
  241. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/style.css +0 -26
  242. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/presentation.test.ts +0 -23
  243. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/theme.test.ts +0 -26
  244. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tsconfig.json +0 -15
  245. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/vite.config.ts +0 -4
  246. package/skills/i3-ui-prototype/assets/hosts/codebuddy/profile.json +0 -17
  247. package/skills/i3-ui-prototype/assets/optional-skills/host-targets.json +0 -739
  248. package/skills/i3-ui-prototype/assets/optional-skills/sources.json +0 -27
  249. package/skills/i3-ui-prototype/assets/templates/catalog.js +0 -149
  250. package/skills/i3-ui-prototype/assets/templates/catalog.json +0 -149
  251. package/skills/i3-ui-prototype/assets/templates/classic-admin/manifest.json +0 -9
  252. package/skills/i3-ui-prototype/assets/templates/classic-admin/preset.json +0 -6
  253. package/skills/i3-ui-prototype/assets/templates/common/app/app.mjs +0 -89
  254. package/skills/i3-ui-prototype/assets/templates/common/app/config.json +0 -1
  255. package/skills/i3-ui-prototype/assets/templates/common/app/domain.mjs +0 -20
  256. package/skills/i3-ui-prototype/assets/templates/common/app/index.html +0 -17
  257. package/skills/i3-ui-prototype/assets/templates/common/app/serve.cjs +0 -16
  258. package/skills/i3-ui-prototype/assets/templates/common/app/styles.css +0 -670
  259. package/skills/i3-ui-prototype/assets/templates/common/app/tokens.css +0 -19
  260. package/skills/i3-ui-prototype/assets/templates/common/design-system/master.md +0 -20
  261. package/skills/i3-ui-prototype/assets/templates/common/gallery.html +0 -2
  262. package/skills/i3-ui-prototype/assets/templates/common/mocks/applications.json +0 -5
  263. package/skills/i3-ui-prototype/assets/templates/common/requirements-map.json +0 -8
  264. package/skills/i3-ui-prototype/assets/templates/common/serve-gallery.cjs +0 -16
  265. package/skills/i3-ui-prototype/assets/templates/credits.md +0 -17
  266. package/skills/i3-ui-prototype/assets/templates/data-operations/manifest.json +0 -9
  267. package/skills/i3-ui-prototype/assets/templates/data-operations/preset.json +0 -6
  268. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/capability-definition.json +0 -294
  269. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/component-inventory.json +0 -707
  270. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/design-system.md +0 -32
  271. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/generation.json +0 -49
  272. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +0 -534
  273. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/manifest.json +0 -9
  274. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline-build.json +0 -265
  275. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline.js +0 -8888
  276. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/origin.json +0 -344
  277. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/preset.json +0 -928
  278. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/app.js +0 -22
  279. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/empty.svg +0 -1
  280. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/reference-styles.json +0 -1
  281. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-403.svg +0 -1
  282. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-404.svg +0 -1
  283. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets-manifest.json +0 -334
  284. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/baseline.json +0 -173
  285. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/conversion.md +0 -30
  286. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/credits.md +0 -17
  287. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/design-tokens.json +0 -881
  288. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/index.html +0 -28
  289. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +0 -9
  290. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +0 -22
  291. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +0 -21
  292. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/package.json +0 -12
  293. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/browser-routes.json +0 -298
  294. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/coverage.json +0 -180
  295. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/integrity.json +0 -13
  296. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/keyboard.json +0 -11
  297. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/responsive.json +0 -125
  298. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/review.md +0 -51
  299. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/rules.log +0 -150
  300. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
  301. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
  302. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
  303. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
  304. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
  305. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
  306. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
  307. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
  308. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/selection.json +0 -9
  309. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +0 -342
  310. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/readme.md +0 -73
  311. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/reference.md +0 -59
  312. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/routes.json +0 -178
  313. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/controls.js +0 -99
  314. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dialogs.js +0 -54
  315. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dom.js +0 -264
  316. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/forms.js +0 -47
  317. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/icons.js +0 -41
  318. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/layout.js +0 -47
  319. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/router.js +0 -63
  320. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/state.js +0 -90
  321. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/table.js +0 -41
  322. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/widgets.js +0 -8
  323. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +0 -3
  324. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +0 -36
  325. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +0 -2
  326. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +0 -51
  327. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +0 -3
  328. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +0 -48
  329. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +0 -2
  330. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +0 -6
  331. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +0 -2
  332. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +0 -13
  333. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/data.js +0 -24
  334. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/domain.js +0 -32
  335. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/registry.js +0 -25
  336. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/store.js +0 -85
  337. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +0 -2
  338. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +0 -17
  339. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +0 -2
  340. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +0 -66
  341. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +0 -3
  342. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +0 -38
  343. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +0 -2
  344. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +0 -66
  345. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +0 -2
  346. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +0 -5
  347. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +0 -2
  348. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +0 -12
  349. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +0 -2
  350. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +0 -11
  351. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +0 -2
  352. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +0 -116
  353. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +0 -2
  354. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +0 -32
  355. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +0 -2
  356. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +0 -49
  357. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +0 -2
  358. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +0 -10
  359. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +0 -2
  360. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +0 -77
  361. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js +0 -60
  362. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js +0 -105
  363. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js +0 -212
  364. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +0 -2
  365. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +0 -18
  366. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +0 -2
  367. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +0 -23
  368. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +0 -2
  369. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +0 -78
  370. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +0 -2
  371. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +0 -55
  372. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +0 -2
  373. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +0 -26
  374. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +0 -2
  375. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +0 -38
  376. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +0 -2
  377. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +0 -7
  378. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +0 -2
  379. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +0 -72
  380. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +0 -2
  381. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +0 -46
  382. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +0 -2
  383. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +0 -52
  384. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.html +0 -2
  385. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.js +0 -19
  386. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +0 -2
  387. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +0 -30
  388. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/data.js +0 -48
  389. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/domain.js +0 -39
  390. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/store.js +0 -129
  391. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +0 -4
  392. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +0 -21
  393. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +0 -2
  394. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +0 -8
  395. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +0 -2
  396. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +0 -37
  397. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +0 -2
  398. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +0 -10
  399. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +0 -2
  400. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +0 -37
  401. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +0 -2
  402. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +0 -49
  403. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +0 -4
  404. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +0 -22
  405. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +0 -2
  406. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +0 -9
  407. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/commands.js +0 -82
  408. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/examples.js +0 -47
  409. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js +0 -61
  410. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js +0 -68
  411. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js +0 -55
  412. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js +0 -1
  413. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/workbench.js +0 -18
  414. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +0 -3
  415. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +0 -28
  416. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +0 -2
  417. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +0 -18
  418. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +0 -2
  419. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +0 -31
  420. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +0 -2
  421. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +0 -27
  422. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +0 -2
  423. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +0 -16
  424. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +0 -2
  425. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +0 -43
  426. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +0 -4
  427. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +0 -34
  428. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +0 -2
  429. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +0 -30
  430. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +0 -3
  431. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +0 -67
  432. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +0 -2
  433. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +0 -41
  434. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +0 -2
  435. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +0 -31
  436. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +0 -2
  437. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +0 -26
  438. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +0 -2
  439. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +0 -70
  440. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/data.js +0 -8
  441. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/domain.js +0 -62
  442. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/management.js +0 -36
  443. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +0 -49
  444. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/store.js +0 -132
  445. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +0 -2
  446. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +0 -38
  447. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +0 -2
  448. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +0 -11
  449. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +0 -2
  450. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +0 -45
  451. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +0 -2
  452. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +0 -54
  453. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +0 -3
  454. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +0 -27
  455. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +0 -2
  456. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +0 -12
  457. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +0 -2
  458. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +0 -45
  459. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +0 -3
  460. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +0 -38
  461. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/domain.js +0 -61
  462. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/state.js +0 -51
  463. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/store.js +0 -116
  464. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +0 -2
  465. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +0 -45
  466. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +0 -4
  467. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +0 -30
  468. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +0 -2
  469. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +0 -67
  470. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +0 -2
  471. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +0 -5
  472. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +0 -4
  473. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +0 -60
  474. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/commands.js +0 -157
  475. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/model.js +0 -136
  476. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/store.js +0 -76
  477. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +0 -3
  478. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +0 -26
  479. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +0 -2
  480. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +0 -14
  481. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +0 -2
  482. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +0 -113
  483. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +0 -3
  484. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +0 -62
  485. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/commands.js +0 -97
  486. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/model.js +0 -147
  487. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/store.js +0 -13
  488. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +0 -2
  489. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +0 -9
  490. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +0 -2
  491. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +0 -8
  492. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +0 -2
  493. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +0 -37
  494. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +0 -2
  495. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +0 -8
  496. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +0 -2
  497. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +0 -17
  498. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/columns.js +0 -32
  499. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +0 -49
  500. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +0 -12
  501. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +0 -15
  502. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +0 -37
  503. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/policy.js +0 -68
  504. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/session.js +0 -44
  505. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +0 -2
  506. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +0 -25
  507. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +0 -2
  508. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +0 -53
  509. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +0 -10
  510. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +0 -30
  511. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +0 -2
  512. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +0 -10
  513. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +0 -2
  514. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +0 -9
  515. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +0 -3
  516. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/navigation.js +0 -19
  517. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +0 -2
  518. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +0 -8
  519. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +0 -2
  520. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +0 -32
  521. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +0 -2
  522. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +0 -15
  523. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +0 -2
  524. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +0 -11
  525. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +0 -2
  526. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +0 -57
  527. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +0 -2
  528. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +0 -37
  529. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js +0 -20
  530. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js +0 -55
  531. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js +0 -151
  532. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +0 -3
  533. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +0 -18
  534. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +0 -2
  535. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +0 -40
  536. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +0 -2
  537. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +0 -51
  538. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +0 -2
  539. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +0 -9
  540. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +0 -5
  541. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +0 -48
  542. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/domain.js +0 -204
  543. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +0 -22
  544. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/registry.js +0 -135
  545. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/store.js +0 -137
  546. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +0 -3
  547. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +0 -36
  548. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/model.js +0 -56
  549. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/store.js +0 -15
  550. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +0 -2
  551. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +0 -27
  552. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +0 -4
  553. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +0 -31
  554. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +0 -2
  555. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +0 -68
  556. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +0 -5
  557. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +0 -55
  558. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/data.js +0 -16
  559. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/domain.js +0 -83
  560. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/registry.js +0 -18
  561. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/store.js +0 -61
  562. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/admin.css +0 -60
  563. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/agents.css +0 -46
  564. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/antdv.css +0 -295
  565. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/app.css +0 -102
  566. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/delivery.css +0 -4
  567. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/intents.css +0 -37
  568. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/native.css +0 -22
  569. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/operations.css +0 -2
  570. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pbc.css +0 -3
  571. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/permissions.css +0 -22
  572. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pro.css +0 -1
  573. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/releases.css +0 -4
  574. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reset.css +0 -246
  575. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reviews.css +0 -8
  576. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tasks.css +0 -6
  577. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tokens.css +0 -15
  578. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workbench.css +0 -61
  579. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workflows.css +0 -1
  580. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +0 -96
  581. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/agents.test.js +0 -14
  582. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +0 -37
  583. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +0 -44
  584. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +0 -19
  585. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +0 -14
  586. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operations.test.js +0 -25
  587. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +0 -17
  588. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +0 -24
  589. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +0 -23
  590. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permissions.test.js +0 -24
  591. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/releases.test.js +0 -50
  592. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/reviews.test.js +0 -36
  593. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +0 -28
  594. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +0 -42
  595. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +0 -16
  596. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +0 -11
  597. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/tasks.test.js +0 -27
  598. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workbench.test.js +0 -34
  599. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workflows.test.js +0 -16
  600. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/convert.mjs +0 -168
  601. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/serve.mjs +0 -7
  602. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/styles.mjs +0 -11
  603. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/verify.mjs +0 -24
  604. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/serve.cjs +0 -16
  605. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template-inventory.json +0 -28791
  606. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template.json +0 -9
  607. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/usability.css +0 -44
  608. package/skills/i3-ui-prototype/assets/templates/gallery/index.html +0 -40
  609. package/skills/i3-ui-prototype/assets/templates/generation-options.js +0 -42
  610. package/skills/i3-ui-prototype/assets/templates/index.html +0 -3
  611. package/skills/i3-ui-prototype/assets/templates/modern-workspace/manifest.json +0 -9
  612. package/skills/i3-ui-prototype/assets/templates/modern-workspace/preset.json +0 -6
  613. package/skills/i3-ui-prototype/assets/templates/presentation.html +0 -17
  614. package/skills/i3-ui-prototype/assets/templates/serve-gallery.cjs +0 -23
  615. package/skills/i3-ui-prototype/references/artifact-contract.md +0 -66
  616. package/skills/i3-ui-prototype/references/content-template.md +0 -81
  617. package/skills/i3-ui-prototype/references/enterprise-admin.md +0 -44
  618. package/skills/i3-ui-prototype/references/entry-contract.md +0 -71
  619. package/skills/i3-ui-prototype/references/execution-evidence.md +0 -51
  620. package/skills/i3-ui-prototype/references/expert-adapter.md +0 -76
  621. package/skills/i3-ui-prototype/references/framework-contract.md +0 -76
  622. package/skills/i3-ui-prototype/references/generation-contract.md +0 -122
  623. package/skills/i3-ui-prototype/references/interaction-acceptance.md +0 -169
  624. package/skills/i3-ui-prototype/references/legacy-native.md +0 -58
  625. package/skills/i3-ui-prototype/references/optional-skills.md +0 -63
  626. package/skills/i3-ui-prototype/references/project-layout.md +0 -92
  627. package/skills/i3-ui-prototype/references/template-adapters.md +0 -63
  628. package/skills/i3-ui-prototype/references/workflow-contract.md +0 -77
  629. package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +0 -30
  630. package/skills/i3-ui-prototype/scripts/adapters/legacy-html.cjs +0 -28
  631. package/skills/i3-ui-prototype/scripts/browser-workspace.cjs +0 -72
  632. package/skills/i3-ui-prototype/scripts/buddy-host.cjs +0 -40
  633. package/skills/i3-ui-prototype/scripts/check-design-provider.cjs +0 -9
  634. package/skills/i3-ui-prototype/scripts/check-prototype.cjs +0 -14
  635. package/skills/i3-ui-prototype/scripts/codebuddy-context.cjs +0 -92
  636. package/skills/i3-ui-prototype/scripts/codebuddy-hook.cjs +0 -298
  637. package/skills/i3-ui-prototype/scripts/codebuddy-ide-source.cjs +0 -69
  638. package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +0 -125
  639. package/skills/i3-ui-prototype/scripts/content-template.cjs +0 -98
  640. package/skills/i3-ui-prototype/scripts/design-provider-discovery.cjs +0 -128
  641. package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +0 -104
  642. package/skills/i3-ui-prototype/scripts/execution-assertions.cjs +0 -43
  643. package/skills/i3-ui-prototype/scripts/execution-diagnostics.cjs +0 -91
  644. package/skills/i3-ui-prototype/scripts/execution-evidence.cjs +0 -177
  645. package/skills/i3-ui-prototype/scripts/execution-gates.cjs +0 -216
  646. package/skills/i3-ui-prototype/scripts/execution-policy.cjs +0 -62
  647. package/skills/i3-ui-prototype/scripts/execution-recovery.cjs +0 -58
  648. package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +0 -69
  649. package/skills/i3-ui-prototype/scripts/generation-assets.cjs +0 -18
  650. package/skills/i3-ui-prototype/scripts/generation-contract.cjs +0 -214
  651. package/skills/i3-ui-prototype/scripts/generation-evidence.cjs +0 -50
  652. package/skills/i3-ui-prototype/scripts/generation-replan.cjs +0 -34
  653. package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +0 -21
  654. package/skills/i3-ui-prototype/scripts/init-prototype.cjs +0 -8
  655. package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +0 -11
  656. package/skills/i3-ui-prototype/scripts/native-browser.cjs +0 -785
  657. package/skills/i3-ui-prototype/scripts/native-build.cjs +0 -91
  658. package/skills/i3-ui-prototype/scripts/native-command.cjs +0 -35
  659. package/skills/i3-ui-prototype/scripts/native-delivery.cjs +0 -104
  660. package/skills/i3-ui-prototype/scripts/native-devtools.cjs +0 -92
  661. package/skills/i3-ui-prototype/scripts/native-files.cjs +0 -44
  662. package/skills/i3-ui-prototype/scripts/native-pilot-lib.cjs +0 -290
  663. package/skills/i3-ui-prototype/scripts/native-pilot.cjs +0 -59
  664. package/skills/i3-ui-prototype/scripts/native-tool-name.cjs +0 -5
  665. package/skills/i3-ui-prototype/scripts/native-tool-result.cjs +0 -14
  666. package/skills/i3-ui-prototype/scripts/optional-skill-install.cjs +0 -203
  667. package/skills/i3-ui-prototype/scripts/project-registry.cjs +0 -126
  668. package/skills/i3-ui-prototype/scripts/prototype-dependencies.cjs +0 -103
  669. package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +0 -94
  670. package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +0 -277
  671. package/skills/i3-ui-prototype/scripts/prototype-locations.cjs +0 -69
  672. package/skills/i3-ui-prototype/scripts/ptc-callbacks.cjs +0 -131
  673. package/skills/i3-ui-prototype/scripts/sync-template.cjs +0 -19
  674. package/skills/i3-ui-prototype/scripts/template-adapters.cjs +0 -89
  675. package/skills/i3-ui-prototype/scripts/template-contract.cjs +0 -407
  676. package/skills/i3-ui-prototype/scripts/template-inventory.cjs +0 -78
  677. package/skills/i3-ui-prototype/scripts/validate-result.cjs +0 -117
@@ -1,91 +0,0 @@
1
- 'use strict';
2
- const {spawnSync}=require('node:child_process');
3
- const http=require('node:http');
4
- const F=require('./native-files.cjs');
5
- const {fs,path,crypto,assert,hash,json,id,inside,walk,write,entries}=F;
6
- function verifyBuild(directory,buildId,{manifest}) {
7
- id(buildId); const root=inside(directory,`builds/${buildId}`); const data=json(path.join(root,'manifest.json'));
8
- assert.equal(data.buildId,buildId,'Build ID mismatch');
9
- for(const step of ['typecheck','test','build'])assert.ok(Object.hasOwn(data.checks||{},step)&&typeof data.checks[step]==='string',`Required build check missing: ${step}`);
10
- assert.deepEqual(entries(path.join(root,'site'),walk(path.join(root,'site'))),data.files,'Build bytes changed');
11
- assert.equal(hash(JSON.stringify(data.files)),data.buildDigest,'Build digest mismatch');
12
- assert.equal(data.candidateDigest,manifest(directory).digest,'Build is for an old candidate / 旧构建');
13
- const scripts=Object.keys(data.files).filter(file=>/\.[cm]?js$/.test(file));
14
- assert.ok(data.files['index.html'] && data.files['prototype-config.json'] && scripts.length,'Native build entry, config and JavaScript required');
15
- assert.ok(scripts.some(file=>fs.readFileSync(inside(path.join(root,'site'),file),'utf8').includes(data.candidateDigest)),'Built JavaScript must embed its candidate identity / 构建标识');
16
- return {...data,directory:root};
17
- }
18
-
19
- function verifyBrowserReport(directory,report,build) {
20
- const start=Date.parse(report.startedAt),end=Date.parse(report.completedAt);
21
- assert.ok(Number.isFinite(start)&&Number.isFinite(end)&&end>=start,'Browser run timestamps must be valid and ordered');
22
- const base=new URL(report.previewBaseURL);
23
- assert.ok(['http:','https:'].includes(base.protocol)&&!base.username&&!base.password&&!base.search&&!base.hash&&base.pathname.endsWith('/'),'Invalid preview base URL');
24
- assert.ok(Array.isArray(report.observedResources)&&report.observedResources.length,'Observed browser resources required');
25
- const observations=new Map();
26
- for(const resource of report.observedResources) {
27
- assert.ok(Object.hasOwn(build.files,resource.path),`Observed resource is outside the fixed build: ${resource.path}`);
28
- const actual=new URL(resource.url),expected=new URL(resource.path==='index.html'?'':resource.path,base);
29
- const entryAlias=resource.path==='index.html'&&actual.pathname===new URL('index.html',base).pathname;
30
- assert.ok(actual.origin===base.origin&&(actual.pathname===expected.pathname||entryAlias)&&!actual.username&&!actual.password,`Observed resource has a different preview URL: ${resource.path}`);
31
- assert.equal(resource.status,200,`Observed resource did not return 200: ${resource.path}`);
32
- assert.equal(resource.sha256,build.files[resource.path],`Observed resource bytes differ: ${resource.path}`);
33
- assert.ok(typeof resource.resourceType==='string'&&resource.resourceType,'Observed resource type required');
34
- const type=resource.path==='index.html'?'document':/\.[cm]?js$/.test(resource.path)?'script':resource.path.endsWith('.css')?'stylesheet':resource.path==='prototype-config.json'?'fetch':null;
35
- if(type)assert.equal(resource.resourceType,type,`Observed resource request type differs: ${resource.path}`);
36
- observations.set(resource.path,resource);
37
- }
38
- const required=Object.keys(build.files).filter(file=>['index.html','prototype-config.json'].includes(file)||/\.(?:[cm]?js|css)$/.test(file));
39
- for(const file of required)assert.ok(observations.has(file),`Browser did not observe required build resource: ${file}`);
40
- assert.ok(Array.isArray(report.screenshots)&&report.screenshots.length>=2&&Array.isArray(report.viewports)&&report.viewports.length>=2,'Responsive screenshots required');
41
- const png=Buffer.from([0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a]);
42
- for(const file of report.screenshots) {
43
- const bytes=fs.readFileSync(inside(directory,file));
44
- assert.ok(bytes.length>24&&bytes.subarray(0,8).equals(png),`Screenshot must be PNG: ${file}`);
45
- }
46
- const trace=fs.readFileSync(inside(directory,report.trace));
47
- assert.ok(trace.length>=22&&trace[0]===0x50&&trace[1]===0x4b&&[[3,4],[5,6],[7,8]].some(pair=>trace[2]===pair[0]&&trace[3]===pair[1]),'Browser trace must be a ZIP artifact');
48
- }
49
- function build(directory,options,{manifest,inspect}) {
50
- const checked=inspect(directory); assert.equal(checked.status,'passed',checked.errors?.join('; '));
51
- const before=manifest(directory); const app=inside(directory,'app');
52
- function run(args,env={}) {
53
- const result=spawnSync(process.platform==='win32'?'npm.cmd':'npm',args,{cwd:app,env:{...process.env,...env},encoding:'utf8',timeout:180000,maxBuffer:5*1024*1024});
54
- assert.equal(result.status,0,`npm ${args.join(' ')} failed: ${result.error?.message||result.stderr||result.stdout}`);
55
- return result.stdout;
56
- }
57
- if(options.install) run(['ci','--ignore-scripts','--no-audit','--no-fund']);
58
- assert.ok(fs.existsSync(path.join(app,'node_modules','vite')),'Local dependencies missing; explicitly build --install');
59
- const typecheck=run(['run','typecheck']);
60
- const test=run(['test']);
61
- fs.mkdirSync(inside(directory,'builds'),{recursive:true}); const stage=fs.mkdtempSync(path.join(directory,'builds','.build-'));
62
- try {
63
- const output=run(['run','build','--','--outDir',path.join(stage,'site'),'--emptyOutDir'],{VITE_CANDIDATE_ID:before.digest});
64
- assert.equal(manifest(directory).digest,before.digest,'Source changed during build');
65
- const files=entries(path.join(stage,'site'),walk(path.join(stage,'site'))); const buildDigest=hash(JSON.stringify(files)); const buildId=`b-${buildDigest.slice(0,20)}`;
66
- const data={schemaVersion:1,buildId,buildDigest,candidateDigest:before.digest,inputDigest:before.inputDigest,revision:before.revision,files,toolchain:{node:process.version},checks:{typecheck,test,build:output}};
67
- write(stage,'manifest.json',data);
68
- const destination=inside(directory,`builds/${buildId}`);
69
- if(fs.existsSync(destination)) verifyBuild(directory,buildId,{manifest}); else fs.renameSync(stage,destination);
70
- write(directory,'last-build.json',{buildId,buildDigest,candidateDigest:before.digest});
71
- return {status:'built',...data,directory:destination};
72
- } finally { if(fs.existsSync(stage)) fs.rmSync(stage,{recursive:true,force:true}); }
73
- }
74
- async function preview(directory,options,{manifest}) {
75
- const buildId=options.buildId||json(inside(directory,'last-build.json')).buildId;
76
- const checked=verifyBuild(directory,buildId,{manifest}); const site=path.join(checked.directory,'site');
77
- const mime={'.html':'text/html; charset=utf-8','.js':'text/javascript; charset=utf-8','.css':'text/css; charset=utf-8','.json':'application/json','.svg':'image/svg+xml','.png':'image/png','.woff2':'font/woff2'};
78
- const server=http.createServer((req,res)=>{
79
- try {
80
- const pathname=decodeURIComponent(new URL(req.url,'http://127.0.0.1').pathname);
81
- res.setHeader('Cache-Control','no-store');
82
- if(pathname==='/__prototype-build.json') { const current=verifyBuild(directory,buildId,{manifest}); res.setHeader('Content-Type','application/json'); res.end(JSON.stringify({buildId,currentCandidate:current.candidateDigest,buildDigest:current.buildDigest,files:current.files})); return; }
83
- const relative=pathname==='/'?'index.html':pathname.replace(/^\//,''); const file=inside(site,relative);
84
- if(!fs.existsSync(file)||!fs.statSync(file).isFile()) { res.writeHead(404); res.end('Not found'); return; }
85
- res.setHeader('Content-Type',mime[path.extname(file)]||'application/octet-stream'); res.end(fs.readFileSync(file));
86
- } catch(error) { res.writeHead(409); res.end(error.message); }
87
- });
88
- await new Promise((resolve,reject)=>{server.once('error',reject);server.listen(options.port||0,'127.0.0.1',resolve);});
89
- return {server,url:`http://127.0.0.1:${server.address().port}/`,build:checked};
90
- }
91
- module.exports={build,verifyBuild,preview,verifyBrowserReport};
@@ -1,35 +0,0 @@
1
- 'use strict';
2
- // One non-executing parser shared by Hook dispatch and A receipt verification.
3
- const path=require('node:path'),assert=require('node:assert/strict');
4
- const {quote}=require('./codebuddy-registration.cjs');
5
- const E=require('./execution-evidence.cjs');
6
- function tokens(command) {
7
- if(typeof command!=='string'||/[\x00\r\n]|\$\(|`/.test(command))return null;
8
- const values=[];let value='',quote=null,started=false;
9
- for(let i=0;i<command.length;i++) {const c=command[i];if(quote){if(c===quote){quote=null;started=true;}else if(c==='\\'&&quote==='"'&&i+1<command.length)value+=command[++i];else value+=c;}
10
- else if(c==='"'||c==="'"){quote=c;started=true;}else if(c==='\\'&&i+1<command.length){value+=command[++i];started=true;}else if(/\s/.test(c)){if(started){values.push(value);value='';started=false;}}else if(/[;&|<>]/.test(c))return null;else {value+=c;started=true;}}
11
- if(quote)return null;if(started)values.push(value);return values;
12
- }
13
- function nativeCommand(tool,input,cwd) {
14
- if(!['Bash','execute_command','run_terminal_command'].includes(tool))return null;
15
- const argv=tokens(input?.command);if(!argv)return null;const index=argv.findIndex(arg=>path.basename(arg)==='native-pilot.cjs');if(index<1)return null;
16
- const operation=argv[index+1],root=argv[index+2]&&!argv[index+2].startsWith('--')?path.resolve(cwd,argv[index+2]):null;
17
- return {operation,root,argv};
18
- }
19
- const stageFor=Object.freeze({build:'implementation','record-run':'browser-entry','record-devtools-review':'browser-entry',finalize:'delivery'});
20
- function beginCommand(directory){
21
- assert.ok(typeof directory==='string'&&path.isAbsolute(directory),'Absolute prototype directory required');
22
- return [process.execPath,path.join(__dirname,'native-pilot.cjs'),'execution-begin',directory].map(quote).join(' ');
23
- }
24
- function completedBegin(source,binding){
25
- if(!binding||!source.prompts.some(prompt=>prompt.line===binding.entryLine)||(binding.contextLine||0)!==source.contextLine)return null;
26
- const calls=source.calls.filter(call=>call.sessionId===binding.sessionId&&call.requestLine>=binding.entryLine&&call.requestLine>source.contextLine&&(()=>{
27
- const command=nativeCommand(call.name,call.input,call.cwd||binding.project||binding.directory);
28
- return command?.operation==='execution-begin'&&command.root===binding.directory;
29
- })());
30
- const latest=calls.at(-1);
31
- if(!latest?.success||!latest.resultLine||source.stableThroughLine!==undefined&&latest.resultLine>source.stableThroughLine)return null;
32
- const result=E.resultValue(latest.result);
33
- return result?.status==='bound'&&result.runId===binding.runId&&result.sessionId===binding.sessionId&&result.directory===binding.directory?latest:null;
34
- }
35
- module.exports={tokens,nativeCommand,stageFor,beginCommand,completedBegin};
@@ -1,104 +0,0 @@
1
- 'use strict';
2
- const F=require('./native-files.cjs');
3
- const {fs,path,crypto,assert,json,inside,write}=F;
4
- const read=(root,file)=>fs.existsSync(inside(root,file))?json(inside(root,file)):null;
5
- const quote=value=>`'${String(value).replace(/'/g,"'\\''")}'`;
6
-
7
- function state(directory,options,lib) {
8
- directory=path.resolve(directory);
9
- const current=lib.manifest(directory),meta=json(inside(directory,'prototype.json'));
10
- const review=lib.effectiveReview(meta,current);
11
- const structure=lib.inspect(directory),advice=read(directory,'qa/design-advice.json'),decisions=read(directory,'design-system/decisions.json');
12
- let design;
13
- try { const reviewed=lib.inspectDesignReview(directory,current); design={status:reviewed.status,queries:reviewed.queries,records:reviewed.records,adopted:reviewed.adoptedAdvice.length}; }
14
- catch(error) { design={status:advice?.status==='pending'||decisions?.reviewStatus==='pending'?'pending':'failed',queries:advice?.queries?.length||0,records:advice?.records?.length||0,errors:[error.message]}; }
15
- let build={status:'not-run'};
16
- const pointer=read(directory,'last-build.json');
17
- if(pointer) {
18
- try { const checked=lib.verifyBuild(directory,pointer.buildId); build={status:'current',buildId:checked.buildId,buildDigest:checked.buildDigest,checks:Object.keys(checked.checks)}; }
19
- catch(error) { build={status:pointer.candidateDigest!==current.digest?'stale':'failed',buildId:pointer.buildId,errors:[error.message]}; }
20
- }
21
- let browser={status:'not-run'};
22
- const latest=read(directory,'qa/latest.json');
23
- if(latest) {
24
- try {
25
- const report=json(inside(directory,latest.report)),checked=lib.inspect(directory,{acceptance:true});
26
- browser={status:report.candidateDigest!==current.digest||report.revision!==current.revision?'stale':checked.status==='passed'?'current':'failed',report:latest.report,reportDigest:F.hash(fs.readFileSync(inside(directory,latest.report))),runId:report.id,executor:report.executor,...(checked.errors?{errors:checked.errors}:{})};
27
- } catch(error) { browser={status:'failed',errors:[error.message]}; }
28
- }
29
- const devtoolsReview=require('./native-devtools.cjs').check(directory,lib);
30
- const execution=require('./execution-runtime.cjs').requireStage(directory,'delivery',lib);
31
- const ownership=read(directory,'.prototype-write.lock');
32
- const savedDelivery=read(directory,'qa/delivery.json');
33
- const deliveryCurrent=savedDelivery?.schemaVersion===1&&savedDelivery.status==='complete'&&savedDelivery.id===meta.id&&savedDelivery.revision===current.revision&&savedDelivery.candidateDigest===current.digest&&savedDelivery.inputDigest===current.inputDigest&&savedDelivery.buildId===build.buildId&&savedDelivery.buildDigest===build.buildDigest&&savedDelivery.report===browser.report&&savedDelivery.review===review.status&&savedDelivery.humanConfirmationRequired===(review.status!=='approved')&&browser.status==='current'&&((!devtoolsReview.required&&savedDelivery.browserReportDigest===undefined)||savedDelivery.browserReportDigest===browser.reportDigest)&&(!devtoolsReview.required||(devtoolsReview.status==='current'&&savedDelivery.devtoolsReviewDigest===devtoolsReview.reportDigest));
34
- const executionCurrent=execution.status==='not-required'||execution.status==='passed'&&savedDelivery?.runId===execution.runId&&savedDelivery?.executionEvidenceDigest===F.hash(fs.readFileSync(inside(directory,'qa/execution-evidence.json')));
35
- const delivery=savedDelivery?{status:deliveryCurrent&&executionCurrent?'current':'stale',path:'qa/delivery.json',revision:savedDelivery.revision,...(deliveryCurrent&&executionCurrent?{result:savedDelivery}:{})}:null;
36
- let runtime;
37
- try { const provider=require('./native-browser.cjs').resolvePlaywright(directory,options); runtime={availability:'available',...provider,launchVerified:false}; }
38
- catch(error) { runtime={availability:'missing',reason:error.message}; }
39
- const cli=path.join(__dirname,'native-pilot.cjs');
40
- const command=(operation,args=[])=>{const argv=[process.execPath,cli,operation,directory,...args];return {argv,shell:argv.map(quote).join(' ')};};
41
- let nextRevision=/^r(\d+)$/.test(current.revision)?`r${String(Number(current.revision.slice(1))+1).padStart(3,'0')}`:`${current.revision}-next`;
42
- while(fs.existsSync(inside(directory,`baselines/${nextRevision}`))) nextRevision+='-next';
43
- const expected=['--expected-revision',current.revision,'--expected-digest',current.digest];
44
- const browserArgs=[];
45
- const browserProvider=options.playwrightModule||process.env.PLAYWRIGHT_MODULE||(runtime.availability==='available'?runtime.packageRoot:null);
46
- if(browserProvider) browserArgs.push('--playwright-module',browserProvider);
47
- if(options.browserChannel) browserArgs.push('--browser-channel',options.browserChannel);
48
- if(options.expectedCategories) browserArgs.push('--expected-categories',typeof options.expectedCategories==='string'?options.expectedCategories:JSON.stringify(options.expectedCategories));
49
- if(options.expectedDescription) browserArgs.push('--expected-description',options.expectedDescription);
50
- if(options.verifyBlurValidation===true) browserArgs.push('--verify-blur-validation');
51
- if(options.verifyAtomicStatus===true) browserArgs.push('--verify-atomic-status');
52
- const commands={state:command('state'),revise:command('revise',['--revision',nextRevision,...expected]),build:command('build',fs.existsSync(inside(directory,'app/node_modules/vite'))?[]:['--install']),browser:command('browser',browserArgs),finalize:command('finalize',expected)};
53
- if(meta.runtime.contentReference) {
54
- delete commands.browser;
55
- commands.recordRun=command('record-run',['--report',path.join(directory,'qa/business-browser-input.json')]);
56
- }
57
- if(build.status==='current')commands.preview=command('preview',['--build-id',build.buildId]);
58
- if(devtoolsReview.required)commands.recordDevtoolsReview=command('record-devtools-review',['--report',path.join(directory,'qa/devtools-review-input.json')]);
59
- const executionContext=read(directory,'qa/execution-context.json');
60
- if(meta.runtime.executionPolicy&&executionContext){commands.executionTemplate=command('execution-template');commands.executionCheck=command('execution-check');}
61
- let generation=null;
62
- if(meta.runtime.generationContract===1)try{const fixed=json(inside(directory,'inputs/generation.json'));const plan=require('./generation-contract.cjs').view(fixed);generation={presentation:fixed.presentation,pendingDecisions:fixed.pendingDecisions,pendingReferenceElements:fixed.pendingReferenceElements.length,referenceReview:plan.referenceReview,implementation:require('./generation-evidence.cjs').validateImplementation(directory,fixed,json(inside(directory,'design-system/implementation.json')),{frameworkMap:json(inside(directory,'inputs/framework.json')).componentMap})};}catch(error){generation={status:'failed',errors:[error.message]};}
63
- const nextAction=ownership?'wait-for-owner':structure.status!=='passed'?'repair-structure':generation&&(generation.pendingDecisions.length||generation.pendingReferenceElements)?'resolve-generation-decisions':generation?.implementation.status==='pending'?'implement-business':meta.runtime.contentReference&&meta.business?.status!=='adapted'?'implement-business':!['reviewed','no-match','skipped'].includes(design.status)?'review-design':build.status!=='current'?'build':browser.status!=='current'?(meta.runtime.contentReference?'business-browser-review':'browser'):devtoolsReview.required&&devtoolsReview.status!=='current'?'devtools-review':deliveryCurrent?'return-result':'finalize';
64
- if(generation)commands.replan=command('replan',['--scope',path.join(directory,'inputs/scope.json'),'--revision',nextRevision,...expected]);
65
- const fixedScope=json(inside(directory,'inputs/scope.json'));
66
- const scopes=meta.runtime.generationContract===1?{sourceFile:'inputs/scope.json',schemaVersion:fixedScope.schemaVersion,title:fixedScope.title,moduleIds:fixedScope.moduleIds,pages:fixedScope.pages.map(page=>({id:page.id,title:page.title,referencePage:page.referencePage,regions:page.regions.map(region=>({id:region.id,pattern:region.pattern||region.mode,fields:region.fields?.length||0,actions:region.actions?.length||0}))})),requirements:fixedScope.requirements.map(item=>({id:item.id,pages:item.pages,source:{type:item.source.type,reference:item.source.reference}}))}:fixedScope;
67
- return {status:structure.status==='passed'?'ready':'failed',operation:'state',readOnly:true,directory,id:meta.id,revision:current.revision,candidateDigest:current.digest,inputDigest:current.inputDigest,identity:current.identity,instanceId:meta.instanceId,scopes,structure,...(generation?{generation}:{}),design,build,browser,devtoolsReview,execution,delivery,browserRuntime:runtime,ownership,verification:meta.verification,review,nextAction,commands,notes:['Design decisions and real provider queries remain the executing role responsibility.','Use the printed prototype commands; automatic prototype audit Hooks are retired and invocation remains unverified.','A missing browser provider requires an existing Playwright module path; no automatic install or global changes.','Legacy execution commands remain available for compatibility; prototype work does not require manual binding or Hook diagnosis.']};
68
- }
69
-
70
- function finalize(directory,options,lib) {
71
- directory=path.resolve(directory);
72
- const before=lib.manifest(directory),checked=lib.inspect(directory,{acceptance:true});
73
- assert.equal(checked.status,'passed',`Current acceptance required / 当前实际验收未通过: ${checked.errors?.join('; ')}`);
74
- const devtools=require('./native-devtools.cjs');
75
- const requiredReview=devtools.check(directory,lib);assert.ok(!requiredReview.required||requiredReview.status==='current',`Current DevTools review required: ${requiredReview.errors?.join('; ')||requiredReview.status}`);
76
- require('./execution-runtime.cjs').requireStage(directory,'delivery',lib);
77
- const owner=`finalize-${crypto.randomUUID()}`;
78
- lib.claim(directory,{owner,expectedRevision:options.expectedRevision||before.revision,expectedDigest:options.expectedDigest||before.digest});
79
- try {
80
- const again=lib.inspect(directory,{acceptance:true});assert.equal(again.status,'passed',again.errors?.join('; '));
81
- const devtoolsReview=devtools.check(directory,lib);assert.ok(!devtoolsReview.required||devtoolsReview.status==='current','Current DevTools review required');
82
- assert.equal(lib.manifest(directory).digest,before.digest,'Candidate changed before final handoff');
83
- const meta=json(inside(directory,'prototype.json')),scope=json(inside(directory,'inputs/scope.json'));
84
- const review=lib.effectiveReview(meta,before);
85
- const latest=json(inside(directory,'qa/latest.json')),report=json(inside(directory,latest.report));
86
- const delivery={schemaVersion:1,status:'complete',operation:'finalize',id:meta.id,revision:before.revision,candidateDigest:before.digest,inputDigest:before.inputDigest,framework:meta.framework,template:meta.template,expertMode:meta.expertMode,expert:meta.expert.status,verification:'passed',review:review.status,checks:{structure:'passed',acceptance:'passed',build:'current',browser:'current'},buildId:report.buildId,buildDigest:report.buildDigest,report:latest.report,executor:report.executor,tool:report.tool,handoff:path.join(directory,'HANDOFF.md'),receipt:'qa/delivery.json',openQuestions:scope.openQuestions||[],humanConfirmationRequired:review.status!=='approved'};
87
- const execution=require('./execution-runtime.cjs').requireStage(directory,'delivery',lib);
88
- delivery.invocationVerification=execution.invocationVerification;delivery.tamperProof=false;
89
- if(execution.status==='passed'){delivery.execution=execution;delivery.runId=execution.runId;delivery.policyDigest=execution.policyDigest;delivery.checks.execution='passed';delivery.executionEvidenceDigest=execution.association==='automatic'?F.hash(JSON.stringify(execution)):F.hash(fs.readFileSync(inside(directory,'qa/execution-evidence.json')));delivery.executionEvidenceSource=execution.association==='automatic'?'automatic-native-observation':'legacy-execution-evidence';}
90
- delivery.browserReportDigest=F.hash(fs.readFileSync(inside(directory,latest.report)));
91
- if(devtoolsReview.required){delivery.devtoolsReview=devtoolsReview.report;delivery.devtoolsReviewDigest=devtoolsReview.reportDigest;delivery.checks.devtoolsReview='current';delivery.invocationEvidence=execution.status==='passed'?'Native response IDs correlated with the configured host transcript; not tamper-proof.':'Verify actual Skill/MCP calls independently in the host transcript';}
92
- const start='<!-- native-delivery:start -->',end='<!-- native-delivery:end -->';
93
- const block=[start,'## 当前真实交付状态',`- 原型:${delivery.id} / ${delivery.revision}`,`- candidateDigest:${delivery.candidateDigest}`,`- inputDigest:${delivery.inputDigest}`,`- 构建:${delivery.buildId} / ${delivery.buildDigest}`,`- 浏览器:${latest.report};实际执行者 ${report.executor};${report.tool}`,`- 专业模式:${delivery.expertMode} / ${delivery.expert}`,`- 调用核验:${delivery.invocationVerification};runId:${delivery.runId||'原合同'};非不可篡改认证。`,`- verification:passed;review:${delivery.review}。本工具不确认或冻结基线。`,`- 待确认问题:${delivery.openQuestions.length?JSON.stringify(delivery.openQuestions):'无新增;仍需用户评审。'}`,end].join('\n');
94
- const file=inside(directory,'HANDOFF.md'),previous=fs.existsSync(file)?fs.readFileSync(file,'utf8'):'';
95
- const begin=previous.indexOf(start),finish=previous.indexOf(end);
96
- assert.ok((begin===-1&&finish===-1)||(begin>=0&&finish>begin&&previous.indexOf(start,begin+1)===-1&&previous.indexOf(end,finish+1)===-1),'Ambiguous generated handoff markers; preserve the user file');
97
- const updated=begin===-1?`${previous.trimEnd()}\n\n${block}\n`:`${previous.slice(0,begin)}${block}${previous.slice(finish+end.length)}`;
98
- assert.equal(lib.manifest(directory).digest,before.digest,'Candidate changed while finalizing');
99
- if(updated!==previous) write(directory,'HANDOFF.md',updated);
100
- write(directory,'qa/delivery.json',delivery);
101
- return delivery;
102
- } finally { lib.release(directory,owner); }
103
- }
104
- module.exports={state,finalize};
@@ -1,92 +0,0 @@
1
- 'use strict';
2
- // Checks evidence completeness and current identity, not the truth of a model's
3
- // claims. Actual Skill/MCP invocation must be checked against the host transcript.
4
- const F=require('./native-files.cjs');
5
- const {fs,path,assert,hash,json,inside,write,crypto}=F;
6
- const zlib=require('node:zlib');
7
- const KINDS=['dom','screenshot','console','network','accessibility','performance'];
8
- const METHODS=['evaluate_script','take_screenshot','list_console_messages','list_network_requests','take_snapshot','performance_start_trace','performance_stop_trace'];
9
- const limitations='Evidence structure, file bytes and current identity checked; verify actual Skill/MCP calls and findings independently in the raw host transcript.';
10
- function policy(){return {schemaVersion:1,required:true,skill:'i3-browser-testing-with-devtools',provider:'chrome-devtools-mcp',observations:[...KINDS]};}
11
- function readPolicy(directory){
12
- const configured=json(inside(directory,'inputs/acceptance.json')).browserReview;
13
- const frameworkFile=inside(directory,'inputs/framework.json');
14
- if(fs.existsSync(frameworkFile)){const fixed=json(frameworkFile).acceptance?.browserReview;if(fixed!==undefined)assert.deepEqual(configured,fixed,'DevTools browser review policy differs from its fixed framework input');}
15
- if(configured===undefined)return null;
16
- assert.equal(configured.schemaVersion,1,'Unknown DevTools review policy');assert.equal(configured.required,true,'DevTools review policy cannot silently opt out');
17
- assert.deepEqual(configured.observations,KINDS,'Required DevTools observations changed');assert.equal(configured.skill,policy().skill);assert.equal(configured.provider,'chrome-devtools-mcp');return configured;
18
- }
19
- const text=(value,label)=>assert.ok(typeof value==='string'&&value.trim(),`${label} required`);
20
- const crcTable=Array.from({length:256},(_,value)=>{for(let bit=0;bit<8;bit++)value=(value>>>1)^((value&1)?0xedb88320:0);return value>>>0;});
21
- function crc32(bytes){let crc=0xffffffff;for(const byte of bytes)crc=(crc>>>8)^crcTable[(crc^byte)&255];return (crc^0xffffffff)>>>0;}
22
- function verifyPng(bytes){
23
- assert.ok(bytes.length>=57&&bytes.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])),'Complete PNG screenshot required');
24
- let offset=8,header=null,ended=false;const image=[];
25
- while(offset<bytes.length){
26
- assert.ok(offset+12<=bytes.length,'Truncated PNG chunk');const size=bytes.readUInt32BE(offset),end=offset+size+12;assert.ok(end<=bytes.length,'Truncated PNG data');
27
- const kind=bytes.toString('ascii',offset+4,offset+8),data=bytes.subarray(offset+8,offset+8+size);assert.equal(crc32(bytes.subarray(offset+4,offset+8+size)),bytes.readUInt32BE(offset+8+size),'Invalid PNG chunk CRC');
28
- if(!header){assert.equal(kind,'IHDR','PNG header must be first');assert.equal(size,13,'Invalid PNG IHDR');header=data;}
29
- else assert.notEqual(kind,'IHDR','Duplicate PNG header');
30
- if(kind==='IDAT')image.push(data);
31
- if(kind==='IEND'){assert.equal(size,0,'Invalid PNG end');assert.equal(end,bytes.length,'Trailing PNG bytes');ended=true;break;}offset=end;
32
- }
33
- assert.ok(ended&&image.length,'PNG needs image data and IEND');
34
- const width=header.readUInt32BE(0),height=header.readUInt32BE(4),depth=header[8],channels={0:1,2:3,3:1,4:2,6:4}[header[9]];
35
- assert.ok(width&&height&&channels&&[1,2,4,8,16].includes(depth),'Invalid PNG dimensions or color format');assert.equal(header[10],0,'Unsupported PNG compression');assert.equal(header[11],0,'Unsupported PNG filter method');assert.equal(header[12],0,'Expected noninterlaced Chrome screenshot PNG');
36
- const stride=Math.ceil(width*channels*depth/8)+1,expected=stride*height;assert.ok(Number.isSafeInteger(expected)&&expected<=64*1024*1024,'PNG decoded image is too large');
37
- let pixels;try{pixels=zlib.inflateSync(Buffer.concat(image),{maxOutputLength:64*1024*1024});}catch{throw new Error('Invalid PNG compressed image data');}
38
- assert.equal(pixels.length,expected,'Incomplete PNG pixels');for(let row=0;row<height;row++)assert.ok(pixels[row*stride]<=4,'Invalid PNG scanline filter');
39
- }
40
- function validate(directory,report,current,build,configured){
41
- assert.equal(report.schemaVersion,1);assert.equal(report.status,'passed','DevTools review has not passed');
42
- assert.equal(report.revision,current.revision,'DevTools review revision is stale');assert.equal(report.candidateDigest,current.digest,'DevTools review candidate is stale');
43
- assert.equal(report.buildId,build.buildId,'DevTools review build is stale');assert.equal(report.buildDigest,build.buildDigest,'DevTools review build bytes differ');
44
- text(report.executor,'DevTools executor');const start=Date.parse(report.startedAt),end=Date.parse(report.completedAt);assert.ok(Number.isFinite(start)&&Number.isFinite(end)&&end>=start,'DevTools review timestamps required');
45
- const url=new URL(report.previewBaseURL);assert.ok(url.protocol==='http:'&&['127.0.0.1','localhost','[::1]'].includes(url.hostname)&&!url.username&&!url.password,'DevTools preview must be the known local build');
46
- assert.equal(report.skill?.name,configured.skill,'Required browser Skill missing');text(report.skill.toolCallId,'Skill tool call ID');text(report.skill.evidence,'Skill host transcript locator');
47
- assert.equal(report.mcp?.name,'chrome-devtools-mcp');text(report.mcp.version,'MCP version');text(report.mcp.evidence,'MCP host transcript locator');
48
- assert.ok(Array.isArray(report.mcp.calls)&&report.mcp.calls.length,'Actual MCP call locators required');
49
- for(const call of report.mcp.calls){assert.ok(typeof call.tool==='string'&&call.tool.startsWith('mcp__'),'Native MCP tool name required');text(call.toolCallId,'MCP tool call ID');}
50
- assert.equal(new Set(report.mcp.calls.map(call=>call.toolCallId)).size,report.mcp.calls.length,'Duplicate MCP call IDs');
51
- for(const method of METHODS)assert.ok(report.mcp.calls.some(call=>call.tool.endsWith(`__${method}`)),`Missing DevTools method: ${method}`);
52
- assert.ok(Array.isArray(report.openItems),'DevTools openItems required');assert.ok(!report.openItems.some(item=>item?.blocking===true),'Blocking DevTools findings remain');
53
- const evidenceDigests={},seen=new Set();
54
- for(const kind of KINDS){
55
- const observed=report.observations?.[kind];assert.equal(observed?.status,'passed',`Missing passed DevTools observation: ${kind}`);text(observed.summary,`${kind} finding`);
56
- assert.ok(typeof observed.evidence==='string'&&observed.evidence.startsWith('qa/')&&!seen.has(observed.evidence),'Each DevTools observation needs a distinct QA evidence path');seen.add(observed.evidence);
57
- const file=inside(directory,observed.evidence);assert.ok(fs.statSync(file).isFile(),`${kind} evidence is not a file`);const bytes=fs.readFileSync(file);assert.ok(bytes.length&&bytes.length<=64*1024*1024,`${kind} evidence is empty or too large`);
58
- if(kind==='screenshot')verifyPng(bytes);
59
- if(kind==='performance'){
60
- assert.ok(!bytes.subarray(0,2).equals(Buffer.from('PK')),'Playwright ZIP is not a DevTools trace');
61
- let trace;try{const decoded=bytes[0]===31&&bytes[1]===139?zlib.gunzipSync(bytes,{maxOutputLength:64*1024*1024}):bytes;trace=JSON.parse(decoded.toString('utf8'));}catch{throw new Error('Parseable DevTools trace JSON required');}
62
- const events=Array.isArray(trace)?trace:trace?.traceEvents;assert.ok(Array.isArray(events)&&events.length&&events.some(event=>typeof event.name==='string'),'Nonempty DevTools trace events required');
63
- }
64
- evidenceDigests[observed.evidence]=hash(bytes);
65
- }
66
- if(report.evidenceDigests)assert.deepEqual(report.evidenceDigests,evidenceDigests,'DevTools evidence bytes changed');
67
- return evidenceDigests;
68
- }
69
- function check(directory,lib){
70
- try{
71
- const configured=readPolicy(directory);if(!configured)return {status:'not-required',required:false};
72
- const file=inside(directory,'qa/devtools-review.json');if(!fs.existsSync(file))return {status:'not-run',required:true,missing:[...KINDS],limitations};
73
- const report=json(file),current=lib.manifest(directory),build=lib.verifyBuild(directory,report.buildId);
74
- const latestFile=inside(directory,'last-build.json');if(fs.existsSync(latestFile))assert.equal(json(latestFile).buildId,report.buildId,'DevTools review is not for the latest build');
75
- const browserFile=inside(directory,'qa/latest.json');if(fs.existsSync(browserFile)){const supplemental=json(inside(directory,json(browserFile).report));assert.equal(supplemental.buildId,report.buildId,'DevTools review and browser regression build differ');assert.equal(supplemental.buildDigest,report.buildDigest,'DevTools review and browser regression bytes differ');}
76
- const evidenceDigests=validate(directory,report,current,build,configured);assert.ok(report.evidenceDigests,'Recorded DevTools evidence hashes required');
77
- return {status:'current',required:true,report:'qa/devtools-review.json',reportDigest:hash(fs.readFileSync(file)),revision:report.revision,candidateDigest:report.candidateDigest,buildId:report.buildId,buildDigest:report.buildDigest,evidenceDigests,invocationVerified:false,limitations};
78
- }catch(error){return {status:'failed',required:true,errors:[error.message],limitations};}
79
- }
80
- function record(directory,report,lib){
81
- const configured=readPolicy(directory);assert.ok(configured,'This fixed input has no DevTools review policy; use its original contract');
82
- const current=lib.manifest(directory),build=lib.verifyBuild(directory,report.buildId),copy=JSON.parse(JSON.stringify(report));
83
- const latestFile=inside(directory,'last-build.json');if(fs.existsSync(latestFile))assert.equal(json(latestFile).buildId,report.buildId,'DevTools review is not for the latest build');
84
- copy.evidenceDigests=validate(directory,copy,current,build,configured);
85
- require('./execution-runtime.cjs').requireStage(directory,'browser',lib,{devtoolsReport:copy});
86
- const owner=`devtools-${crypto.randomUUID()}`;lib.claim(directory,{owner,expectedRevision:current.revision,expectedDigest:current.digest});
87
- try{
88
- assert.equal(lib.manifest(directory).digest,current.digest,'Candidate changed during DevTools review');validate(directory,copy,current,lib.verifyBuild(directory,copy.buildId),configured);
89
- write(directory,'qa/devtools-review.json',copy);return {status:'passed',report:'qa/devtools-review.json',candidateDigest:current.digest,buildId:copy.buildId,invocationVerified:false,limitations};
90
- }finally{lib.release(directory,owner);}
91
- }
92
- module.exports={KINDS,policy,readPolicy,validate,check,record};
@@ -1,44 +0,0 @@
1
- 'use strict';
2
- const fs = require('node:fs');
3
- const path = require('node:path');
4
- const crypto = require('node:crypto');
5
- const assert = require('node:assert/strict');
6
- const hash = value => crypto.createHash('sha256').update(value).digest('hex');
7
- const json = file => JSON.parse(fs.readFileSync(file,'utf8'));
8
- const id = value => { assert.match(value || '',/^[a-z0-9]+(?:-[a-z0-9]+)*$/,'Invalid identifier'); return value; };
9
- function inside(root,relative) {
10
- assert.ok(typeof relative==='string' && relative && !path.isAbsolute(relative) && !path.win32.isAbsolute(relative) && !relative.includes('\\') && relative.split('/').every(p=>p && p!=='.' && p!=='..'),'Unsafe prototype path');
11
- let current=path.resolve(root);
12
- for(const part of relative.split('/')) { current=path.join(current,part); if(fs.existsSync(current)) assert.ok(!fs.lstatSync(current).isSymbolicLink(),'Prototype symlink refused'); }
13
- return current;
14
- }
15
- function walk(root,prefix='',exclude=()=>false) {
16
- const location=prefix?inside(root,prefix):root;
17
- if(!fs.existsSync(location)) return [];
18
- return fs.readdirSync(location,{withFileTypes:true}).sort((a,b)=>a.name.localeCompare(b.name)).flatMap(entry=>{
19
- const relative=prefix?`${prefix}/${entry.name}`:entry.name;
20
- if(exclude(relative,entry.name)) return [];
21
- assert.ok(!entry.isSymbolicLink(),`Prototype symlink refused: ${relative}`);
22
- return entry.isDirectory()?walk(root,relative,exclude):entry.isFile()?[relative]:[];
23
- });
24
- }
25
- function write(root,relative,value) {
26
- const file=inside(root,relative); fs.mkdirSync(path.dirname(file),{recursive:true});
27
- const tmp=`${file}.${crypto.randomUUID()}.tmp`;
28
- try { fs.writeFileSync(tmp,typeof value==='string'?value:JSON.stringify(value,null,2)+'\n',{flag:'wx'}); fs.renameSync(tmp,file); }
29
- finally { if(fs.existsSync(tmp)) fs.unlinkSync(tmp); }
30
- }
31
- function withLock(root,name,work) {
32
- fs.mkdirSync(root,{recursive:true,mode:0o700});const lock=inside(root,name);let acquired=false;
33
- for(let attempt=0;attempt<100;attempt++) {
34
- try{fs.mkdirSync(lock);acquired=true;break;}
35
- catch(error){if(error.code!=='EEXIST')throw error;Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,10);}
36
- }
37
- assert.ok(acquired,'Concurrent native audit update; no success recorded');
38
- try{return work();}finally{fs.rmdirSync(lock);}
39
- }
40
- function entries(root,files) { return Object.fromEntries([...new Set(files)].sort().map(file=>[file,hash(fs.readFileSync(inside(root,file)))])); }
41
- const cacheRoots = new Set(['node_modules','dist','.vite','.git','coverage',...['app','starter'].flatMap(root=>['node_modules','dist','.vite','.git','coverage'].map(name=>`${root}/${name}`))]);
42
- // A source/public subdirectory named "dist", or an imported .log file, is still source.
43
- const excluded = (relative,name) => cacheRoots.has(relative) || name==='.DS_Store' || ['app/tsconfig.tsbuildinfo','starter/tsconfig.tsbuildinfo'].includes(relative);
44
- module.exports={fs,path,crypto,assert,hash,json,id,inside,walk,write,withLock,entries,excluded};