yugoo-design 0.2.7 → 0.2.8

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 (221) hide show
  1. package/README.md +4 -4
  2. package/bin/npm-agent-installation.mjs +12 -5
  3. package/bin/npm-desktop-preparation.mjs +47 -33
  4. package/bin/npm-installer-dsh.mjs +2 -1
  5. package/bin/npm-node-runtime.mjs +4 -3
  6. package/package.json +1 -1
  7. package/payload/desktop-preparation/materials.json +46 -46
  8. package/payload/desktop-preparation/qwenwork-package.mjs +26 -11
  9. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/material.json +1 -1
  10. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/bundle-checklist.md +1 -1
  11. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/panel-authoring.md +6 -4
  12. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/.agents/skills/design-bundle-creator/scripts/inspect-panel-component.mjs +27 -33
  13. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/docs/dsl-spec.md +104 -19
  14. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/docs/panel-uiux-standard.md +361 -90
  15. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/docs/system-design-baseline.md +1 -1
  16. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/SKILL.md +7 -4
  17. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/artifact-contract.md +12 -5
  18. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/bpmn_authoring.md +13 -10
  19. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/canvas-guide.md +2 -1
  20. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/schema.yaml +1 -1
  21. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/artifact-contract.md +5 -0
  22. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/preview.json +1 -0
  23. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/schema.yaml +4 -0
  24. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/SKILL.md +4 -2
  25. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/reference/artifact-contract.md +16 -8
  26. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/schema.yaml +2 -2
  27. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/SKILL.md +4 -0
  28. package/payload/desktop-preparation/qwenwork-template/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/reference/artifact-contract.md +6 -0
  29. package/payload/desktop-preparation/qwenwork-template/scripts/native-hook-transport.mjs +21 -15
  30. package/payload/desktop-preparation/qwenwork-template/scripts/qwenwork-connection.mjs +56 -11
  31. package/payload/desktop-preparation/src/native-hook-transport.mjs +21 -15
  32. package/payload/desktop-preparation/src/qwenwork-connection.mjs +56 -11
  33. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/material.json +1 -1
  34. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/bundle-checklist.md +1 -1
  35. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/panel-authoring.md +6 -4
  36. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/.agents/skills/design-bundle-creator/scripts/inspect-panel-component.mjs +27 -33
  37. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/docs/dsl-spec.md +104 -19
  38. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/docs/panel-uiux-standard.md +361 -90
  39. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/docs/system-design-baseline.md +1 -1
  40. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/SKILL.md +7 -4
  41. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/artifact-contract.md +12 -5
  42. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/bpmn_authoring.md +13 -10
  43. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/canvas-guide.md +2 -1
  44. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/schema.yaml +1 -1
  45. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/artifact-contract.md +5 -0
  46. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/preview.json +1 -0
  47. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/schema.yaml +4 -0
  48. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/SKILL.md +4 -2
  49. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/reference/artifact-contract.md +16 -8
  50. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/schema.yaml +2 -2
  51. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/SKILL.md +4 -0
  52. package/payload/desktop-preparation/studio-authoring-template/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/reference/artifact-contract.md +6 -0
  53. package/payload/desktop-preparation/workbuddy-package.mjs +13 -8
  54. package/payload/overlays/claude-code/.claude-plugin/plugin.json +1 -1
  55. package/payload/overlays/claude-code/authoring/studio-creators/material.json +1 -1
  56. package/payload/overlays/claude-code/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/bundle-checklist.md +1 -1
  57. package/payload/overlays/claude-code/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/panel-authoring.md +6 -4
  58. package/payload/overlays/claude-code/authoring/studio-creators/source/.agents/skills/design-bundle-creator/scripts/inspect-panel-component.mjs +27 -33
  59. package/payload/overlays/claude-code/authoring/studio-creators/source/docs/dsl-spec.md +104 -19
  60. package/payload/overlays/claude-code/authoring/studio-creators/source/docs/panel-uiux-standard.md +361 -90
  61. package/payload/overlays/claude-code/authoring/studio-creators/source/docs/system-design-baseline.md +1 -1
  62. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/SKILL.md +7 -4
  63. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/artifact-contract.md +12 -5
  64. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/bpmn_authoring.md +13 -10
  65. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/canvas-guide.md +2 -1
  66. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/schema.yaml +1 -1
  67. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/artifact-contract.md +5 -0
  68. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/preview.json +1 -0
  69. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/schema.yaml +4 -0
  70. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/SKILL.md +4 -2
  71. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/reference/artifact-contract.md +16 -8
  72. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/schema.yaml +2 -2
  73. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/SKILL.md +4 -0
  74. package/payload/overlays/claude-code/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/reference/artifact-contract.md +6 -0
  75. package/payload/overlays/claude-code/scripts/native-hook-transport.mjs +21 -15
  76. package/payload/overlays/codex/.codex-plugin/plugin.json +1 -1
  77. package/payload/overlays/codex/authoring/studio-creators/material.json +1 -1
  78. package/payload/overlays/codex/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/bundle-checklist.md +1 -1
  79. package/payload/overlays/codex/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/panel-authoring.md +6 -4
  80. package/payload/overlays/codex/authoring/studio-creators/source/.agents/skills/design-bundle-creator/scripts/inspect-panel-component.mjs +27 -33
  81. package/payload/overlays/codex/authoring/studio-creators/source/docs/dsl-spec.md +104 -19
  82. package/payload/overlays/codex/authoring/studio-creators/source/docs/panel-uiux-standard.md +361 -90
  83. package/payload/overlays/codex/authoring/studio-creators/source/docs/system-design-baseline.md +1 -1
  84. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/SKILL.md +7 -4
  85. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/artifact-contract.md +12 -5
  86. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/bpmn_authoring.md +13 -10
  87. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/canvas-guide.md +2 -1
  88. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/schema.yaml +1 -1
  89. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/artifact-contract.md +5 -0
  90. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/preview.json +1 -0
  91. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/schema.yaml +4 -0
  92. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/SKILL.md +4 -2
  93. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/reference/artifact-contract.md +16 -8
  94. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/schema.yaml +2 -2
  95. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/SKILL.md +4 -0
  96. package/payload/overlays/codex/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/reference/artifact-contract.md +6 -0
  97. package/payload/overlays/qoder/.qoder-plugin/plugin.json +1 -1
  98. package/payload/overlays/qoder/authoring/studio-creators/material.json +1 -1
  99. package/payload/overlays/qoder/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/bundle-checklist.md +1 -1
  100. package/payload/overlays/qoder/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/panel-authoring.md +6 -4
  101. package/payload/overlays/qoder/authoring/studio-creators/source/.agents/skills/design-bundle-creator/scripts/inspect-panel-component.mjs +27 -33
  102. package/payload/overlays/qoder/authoring/studio-creators/source/docs/dsl-spec.md +104 -19
  103. package/payload/overlays/qoder/authoring/studio-creators/source/docs/panel-uiux-standard.md +361 -90
  104. package/payload/overlays/qoder/authoring/studio-creators/source/docs/system-design-baseline.md +1 -1
  105. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/SKILL.md +7 -4
  106. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/artifact-contract.md +12 -5
  107. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/bpmn_authoring.md +13 -10
  108. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/canvas-guide.md +2 -1
  109. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/schema.yaml +1 -1
  110. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/artifact-contract.md +5 -0
  111. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/preview.json +1 -0
  112. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/schema.yaml +4 -0
  113. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/SKILL.md +4 -2
  114. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/reference/artifact-contract.md +16 -8
  115. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/schema.yaml +2 -2
  116. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/SKILL.md +4 -0
  117. package/payload/overlays/qoder/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/reference/artifact-contract.md +6 -0
  118. package/payload/overlays/qoder/scripts/native-hook-transport.mjs +21 -15
  119. package/payload/shared/authoring/panel-components.json +1015 -878
  120. package/payload/shared/authoring/studio-creators/material.json +1 -1
  121. package/payload/shared/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/bundle-checklist.md +1 -1
  122. package/payload/shared/authoring/studio-creators/source/.agents/skills/design-bundle-creator/references/panel-authoring.md +6 -4
  123. package/payload/shared/authoring/studio-creators/source/.agents/skills/design-bundle-creator/scripts/inspect-panel-component.mjs +27 -33
  124. package/payload/shared/authoring/studio-creators/source/docs/dsl-spec.md +104 -19
  125. package/payload/shared/authoring/studio-creators/source/docs/panel-uiux-standard.md +361 -90
  126. package/payload/shared/authoring/studio-creators/source/docs/system-design-baseline.md +1 -1
  127. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/SKILL.md +7 -4
  128. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/artifact-contract.md +12 -5
  129. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/bpmn_authoring.md +13 -10
  130. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/reference/canvas-guide.md +2 -1
  131. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/flow_design/schema.yaml +1 -1
  132. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/artifact-contract.md +5 -0
  133. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/reference/preview.json +1 -0
  134. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/function_modules/schema.yaml +4 -0
  135. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/SKILL.md +4 -2
  136. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/reference/artifact-contract.md +16 -8
  137. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/smart_questions/schema.yaml +2 -2
  138. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/SKILL.md +4 -0
  139. package/payload/shared/authoring/studio-creators/source/packages/skills-web-app/bundles/web_app_prd_assembly/reference/artifact-contract.md +6 -0
  140. package/payload/shared/bundles/ai_agent_capabilities/locales/en-US.json +29 -28
  141. package/payload/shared/bundles/ai_agent_capabilities/locales/zh-CN.json +35 -34
  142. package/payload/shared/bundles/ai_agent_capabilities/panel.yaml +55 -75
  143. package/payload/shared/bundles/business_data/locales/en-US.json +2 -2
  144. package/payload/shared/bundles/business_data/locales/zh-CN.json +1 -1
  145. package/payload/shared/bundles/business_rules/locales/en-US.json +2 -3
  146. package/payload/shared/bundles/business_rules/locales/zh-CN.json +2 -3
  147. package/payload/shared/bundles/business_rules/panel.yaml +4 -10
  148. package/payload/shared/bundles/design_style/locales/en-US.json +4 -4
  149. package/payload/shared/bundles/design_style/locales/zh-CN.json +4 -4
  150. package/payload/shared/bundles/flow_design/LICENSE +202 -0
  151. package/payload/shared/bundles/flow_design/NOTICE +13 -0
  152. package/payload/shared/bundles/flow_design/SKILL.md +7 -4
  153. package/payload/shared/bundles/flow_design/THIRD_PARTY_NOTICES.md +35 -0
  154. package/payload/shared/bundles/flow_design/licenses/bundled-js/bpmn-moddle@9.0.4/LICENSE +21 -0
  155. package/payload/shared/bundles/flow_design/licenses/bundled-js/min-dash@4.2.3/LICENSE +21 -0
  156. package/payload/shared/bundles/flow_design/licenses/bundled-js/moddle-xml@11.0.0/LICENSE +21 -0
  157. package/payload/shared/bundles/flow_design/licenses/bundled-js/moddle@7.2.0/LICENSE +21 -0
  158. package/payload/shared/bundles/flow_design/licenses/bundled-js/rolldown@1.2.4/LICENSE +25 -0
  159. package/payload/shared/bundles/flow_design/licenses/bundled-js/rolldown@1.2.4/THIRD-PARTY-LICENSE +33 -0
  160. package/payload/shared/bundles/flow_design/licenses/bundled-js/saxen@10.0.0/LICENSE +21 -0
  161. package/payload/shared/bundles/flow_design/licenses/flow-build.json +204 -0
  162. package/payload/shared/bundles/flow_design/licenses/third-party/elkjs-0.10.2/DEPENDENCIES +631 -0
  163. package/payload/shared/bundles/flow_design/licenses/third-party/elkjs-0.10.2/LICENSE.md +264 -0
  164. package/payload/shared/bundles/flow_design/licenses/third-party/elkjs-0.10.2/NOTICE.md +55 -0
  165. package/payload/shared/bundles/flow_design/licenses/third-party/elkjs-0.10.2/SOURCE.md +62 -0
  166. package/payload/shared/bundles/flow_design/licenses/third-party/elkjs-0.10.2/graph-layout-worker.ts +33 -0
  167. package/payload/shared/bundles/flow_design/licenses/third-party/elkjs-0.10.2/release-source-binding.json +81 -0
  168. package/payload/shared/bundles/flow_design/licenses/third-party/elkjs-0.10.2/upstream-README.md +391 -0
  169. package/payload/shared/bundles/flow_design/licenses/third-party/elkjs-0.10.2/upstream-build.gradle +322 -0
  170. package/payload/shared/bundles/flow_design/licenses/third-party/elkjs-0.10.2/upstream-ci.yml +67 -0
  171. package/payload/shared/bundles/flow_design/reference/artifact-contract.md +12 -5
  172. package/payload/shared/bundles/flow_design/reference/bpmn_authoring.md +13 -10
  173. package/payload/shared/bundles/flow_design/reference/canvas-guide.md +2 -1
  174. package/payload/shared/bundles/flow_design/schema.yaml +1 -1
  175. package/payload/shared/bundles/flow_design/scripts/bpmn-validator.mjs +35 -20
  176. package/payload/shared/bundles/function_modules/locales/en-US.json +2 -2
  177. package/payload/shared/bundles/function_modules/panel.yaml +1 -0
  178. package/payload/shared/bundles/function_modules/reference/artifact-contract.md +5 -0
  179. package/payload/shared/bundles/function_modules/reference/preview.json +1 -0
  180. package/payload/shared/bundles/function_modules/schema.yaml +4 -0
  181. package/payload/shared/bundles/integration_design/locales/en-US.json +3 -1
  182. package/payload/shared/bundles/integration_design/locales/zh-CN.json +3 -1
  183. package/payload/shared/bundles/integration_design/panel.yaml +18 -2
  184. package/payload/shared/bundles/notification_design/locales/en-US.json +2 -0
  185. package/payload/shared/bundles/notification_design/locales/zh-CN.json +2 -0
  186. package/payload/shared/bundles/notification_design/panel.yaml +18 -6
  187. package/payload/shared/bundles/page_design/locales/en-US.json +12 -1
  188. package/payload/shared/bundles/page_design/locales/zh-CN.json +12 -1
  189. package/payload/shared/bundles/page_design/panel.yaml +23 -1
  190. package/payload/shared/bundles/quality_acceptance/locales/en-US.json +2 -2
  191. package/payload/shared/bundles/quality_acceptance/locales/zh-CN.json +2 -2
  192. package/payload/shared/bundles/quality_acceptance/panel.yaml +10 -7
  193. package/payload/shared/bundles/role_access/locales/en-US.json +5 -5
  194. package/payload/shared/bundles/role_access/locales/zh-CN.json +5 -5
  195. package/payload/shared/bundles/smart_questions/SKILL.md +4 -2
  196. package/payload/shared/bundles/smart_questions/reference/artifact-contract.md +16 -8
  197. package/payload/shared/bundles/smart_questions/schema.yaml +2 -2
  198. package/payload/shared/bundles/web_app_prd_assembly/SKILL.md +4 -0
  199. package/payload/shared/bundles/web_app_prd_assembly/locales/en-US.json +2 -2
  200. package/payload/shared/bundles/web_app_prd_assembly/locales/zh-CN.json +1 -1
  201. package/payload/shared/bundles/web_app_prd_assembly/reference/artifact-contract.md +6 -0
  202. package/payload/shared/bundles/web_app_prd_assembly/scripts/prd.mjs +28 -16
  203. package/payload/shared/scripts/{content-archive-CnwVcuWA.mjs → content-archive-BvVmbecb.mjs} +2 -2
  204. package/payload/shared/scripts/{core-entry-DESmwP78.mjs → core-entry-S65aB8cC.mjs} +47 -0
  205. package/payload/shared/scripts/design.mjs +2 -2
  206. package/payload/shared/scripts/git-runtime-check.mjs +1 -1
  207. package/payload/shared/scripts/knowledge-snapshot-query.mjs +1 -1
  208. package/payload/shared/scripts/{load-C-RwS23Y.mjs → load-D1xLlKL_.mjs} +1 -1
  209. package/payload/shared/scripts/{panel-preview-BeVRYFk1.mjs → panel-preview-D-OD9mro.mjs} +2 -2
  210. package/payload/shared/scripts/{server-BnEtfptI.mjs → server-B6kGo8xO.mjs} +159 -55
  211. package/payload/shared/scripts/{studio-CFUWk0vJ.mjs → studio-DumCCbFT.mjs} +6 -6
  212. package/payload/shared/scripts/{studio-instance-composition-BJzYMyvV.mjs → studio-instance-composition-DfbZVetl.mjs} +2 -2
  213. package/payload/shared/scripts/{studio-instances-gQFR9yqL.mjs → studio-instances-BnVSHNCf.mjs} +3 -3
  214. package/payload/shared/scripts/{studio-panel-drafts-Dq171F6x.mjs → studio-panel-drafts-DSxfgHfk.mjs} +1 -1
  215. package/payload/shared/scripts/workbuddy-panel-service.mjs +1 -1
  216. package/payload/shared/web/{_dsh-design-css_owned_89a065927fa266797ef9ce977561ca0c4a3502195b0ba467350b7673cd701bdf_bpmn-embedded.css-CS3_MdFX.js → _dsh-design-css_owned_89a065927fa266797ef9ce977561ca0c4a3502195b0ba467350b7673cd701bdf_bpmn-embedded.css-BVX0LPx6.js} +3 -3
  217. package/payload/shared/web/{_dsh-design-css_owned_cc41a10f41ce4c8219d75daefaa99c08ac76f04537f7ec1abc92622e819f5bba_bpmn-js.css-BMPB0-R-.js → _dsh-design-css_owned_cc41a10f41ce4c8219d75daefaa99c08ac76f04537f7ec1abc92622e819f5bba_bpmn-js.css-TpJpFSU5.js} +3 -3
  218. package/payload/shared/web/{_dsh-design-css_owned_f311e6c6d8e65aed0c9a7ee24ef653d3c38574a3505babc3e0cad2a40b94a188_diagram-js.css-C11OT7zU.js → _dsh-design-css_owned_f311e6c6d8e65aed0c9a7ee24ef653d3c38574a3505babc3e0cad2a40b94a188_diagram-js.css-DreYyNMC.js} +3 -3
  219. package/payload/shared/web/client.js +3373 -1842
  220. package/release-hosts.json +1 -1
  221. package/release-manifest.json +223 -203
@@ -1,5 +1,5 @@
1
- import { Lt as DesignBundleVersion, Rt as DesignKitVersion, ft as loadDesignBundle } from "./core-entry-DESmwP78.mjs";
2
- import { t as loadStudioKit } from "./load-C-RwS23Y.mjs";
1
+ import { Lt as DesignBundleVersion, Rt as DesignKitVersion, ft as loadDesignBundle } from "./core-entry-S65aB8cC.mjs";
2
+ import { t as loadStudioKit } from "./load-D1xLlKL_.mjs";
3
3
  import { extname, isAbsolute, relative, resolve, sep } from "node:path";
4
4
  import { createHash } from "node:crypto";
5
5
  //#region packages/studio/src/content-archive.ts
@@ -10256,6 +10256,7 @@ function queryPanelAuthoringReference(material, name, reference, type) {
10256
10256
  component: name,
10257
10257
  documentation: {
10258
10258
  ...entry.documentation,
10259
+ sharedStandards: entry.documentation.sharedStandards ?? material.sharedStandards,
10259
10260
  read: {
10260
10261
  name,
10261
10262
  reference: "docs"
@@ -10744,6 +10745,7 @@ function validatePanelManifest(manifest) {
10744
10745
  "description",
10745
10746
  "separator",
10746
10747
  "collapsible",
10748
+ "default_open",
10747
10749
  "items",
10748
10750
  "sidecar"
10749
10751
  ];
@@ -10795,6 +10797,7 @@ function validatePanelManifest(manifest) {
10795
10797
  for (const key of ["title", "description"]) if (item[key] !== void 0 && (typeof item[key] !== "string" || !item[key].trim())) errors.push(`${at}: ${key} must be nonempty text`);
10796
10798
  if (item.separator !== void 0 && typeof item.separator !== "boolean") errors.push(`${at}: separator must be boolean`);
10797
10799
  if (item.collapsible !== void 0 && (typeof item.collapsible !== "boolean" || item.collapsible && (typeof item.title !== "string" || !item.title.trim()))) errors.push(`${at}: collapsible group requires boolean and nonempty title`);
10800
+ if (item.default_open !== void 0 && (typeof item.default_open !== "boolean" || item.collapsible !== true)) errors.push(`${at}: default_open requires a collapsible group and boolean value`);
10798
10801
  if (item.sidecar !== void 0) {
10799
10802
  const sidecar = item.sidecar;
10800
10803
  if (!sidecar || typeof sidecar !== "object" || Array.isArray(sidecar) || Object.keys(sidecar).some((key) => ![
@@ -11141,6 +11144,16 @@ function validatePanelManifest(manifest) {
11141
11144
  "radio",
11142
11145
  "radio_custom"
11143
11146
  ].includes(fieldOf(component.source, key)?.control ?? "")) errors.push(`${path}: board needs declared text fields`);
11147
+ if (board.overview !== void 0 && typeof board.overview !== "boolean") errors.push(`${path}: board overview must be boolean`);
11148
+ if (board.body_fields !== void 0 && (!isStringList(board.body_fields) || !board.body_fields.length || new Set(board.body_fields).size !== board.body_fields.length || !board.body_fields.includes(board.description) || board.body_fields.some((key) => {
11149
+ const field = fieldOf(component.source, key);
11150
+ return !field || field.hidden || !["text", "textarea"].includes(field.control) || [
11151
+ board.label,
11152
+ board.group,
11153
+ board.badge,
11154
+ board.rejected
11155
+ ].includes(key) || board.detail_fields?.includes(key);
11156
+ }))) errors.push(`${path}: board body_fields requires unique visible text fields including description, separate from header/group/details`);
11144
11157
  if (board.id_field !== void 0) {
11145
11158
  const identity = fieldOf(component.source, board.id_field);
11146
11159
  if (!identity || identity.control !== "text" || !identity.readonly || identity.hidden) errors.push(`${path}: board id_field requires a declared visible readonly text field`);
@@ -11474,6 +11487,40 @@ function validatePanelManifest(manifest) {
11474
11487
  if ((component.children?.length ?? 0) > 0) errors.push(`${path}: panel_workspace uses slots, not children`);
11475
11488
  }
11476
11489
  if (component.component === "structured_data" && !isSafeDottedPath(component.source)) errors.push(`${path}: structured_data needs a safe source path`);
11490
+ if (component.read_fields !== void 0) {
11491
+ if (component.component !== "structured_data") errors.push(`${path}: read_fields requires structured_data`);
11492
+ const validateReadFields = (value, at, depth) => {
11493
+ if (!Array.isArray(value) || value.length > 100 || depth >= 8) {
11494
+ errors.push(`${at}: read_fields must be a list of at most 100 fields within eight levels`);
11495
+ return;
11496
+ }
11497
+ const keys = /* @__PURE__ */ new Set();
11498
+ for (const [index, entry] of value.entries()) {
11499
+ const location = `${at}[${index}]`;
11500
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
11501
+ errors.push(`${location}: invalid read field`);
11502
+ continue;
11503
+ }
11504
+ if (Object.keys(entry).some((key) => ![
11505
+ "key",
11506
+ "label",
11507
+ "item_label_field",
11508
+ "fields",
11509
+ "options_from_section",
11510
+ "collapsed"
11511
+ ].includes(key))) errors.push(`${location}: unknown read field option`);
11512
+ if (!isSafeDottedPath(entry.key) || entry.key.includes(".")) errors.push(`${location}: key must be a safe direct property`);
11513
+ if (keys.has(entry.key)) errors.push(`${location}: duplicate read field ${String(entry.key)}`);
11514
+ keys.add(entry.key);
11515
+ if (typeof entry.label !== "string" || !entry.label.trim()) errors.push(`${location}: label must be nonempty text`);
11516
+ if (entry.item_label_field !== void 0 && (!isSafeDottedPath(entry.item_label_field) || entry.item_label_field.includes("."))) errors.push(`${location}: item_label_field must be a safe direct property`);
11517
+ if (entry.options_from_section !== void 0 && (typeof entry.options_from_section !== "string" || !sectionIds.has(entry.options_from_section))) errors.push(`${location}: options_from_section references an unknown section`);
11518
+ if (entry.collapsed !== void 0 && typeof entry.collapsed !== "boolean") errors.push(`${location}: collapsed must be boolean`);
11519
+ if (entry.fields !== void 0) validateReadFields(entry.fields, `${location}.fields`, depth + 1);
11520
+ }
11521
+ };
11522
+ validateReadFields(component.read_fields, `${path}.read_fields`, 0);
11523
+ }
11477
11524
  if (component.component === "schema_field" && (!isSafeDottedPath(component.path) || ![
11478
11525
  "text",
11479
11526
  "textarea",
@@ -1,8 +1,8 @@
1
1
  import { i as __toESM, n as __exportAll, t as __commonJSMin } from "./rolldown-runtime-B4iAMlE-.mjs";
2
2
  import { i as notificationErrorResponse, n as requireThreadId } from "./codex-connection-1RvU1XCj.mjs";
3
3
  import { t as callCompanion } from "./connection-file-CNwrHbAG.mjs";
4
- import { a as openCompanionProject, c as resolveCodexMainTranscript, i as companionFs, l as createClaudeTranscript, n as companionKnowledgeRuntimeUrl, o as assertCompanionKitContributions, r as runtime, s as createCompanionContentLibrary, t as startCompanion, u as createQwenWorkTranscript } from "./server-BnEtfptI.mjs";
5
- import { A as validateSkillDesign, Ct as PANEL_COMPONENT_CATALOG, D as OFFICIAL_REFLECTION_PROFILE, E as OFFICIAL_GROUNDING_PROFILE, G as parseDesignCommand, K as runDesignProjectCommand, O as officialAdvisoryProfile, St as GENERATED_COMPONENT_KINDS, T as OFFICIAL_ALIGNMENT_PROFILE, at as ensureProjectKit, h as DESIGN_CLARITY_OUTPUT_SCHEMA, it as DesignProjectRegistry, xt as queryPanelAuthoringReference } from "./core-entry-DESmwP78.mjs";
4
+ import { a as openCompanionProject, c as resolveCodexMainTranscript, i as companionFs, l as createClaudeTranscript, n as companionKnowledgeRuntimeUrl, o as assertCompanionKitContributions, r as runtime, s as createCompanionContentLibrary, t as startCompanion, u as createQwenWorkTranscript } from "./server-B6kGo8xO.mjs";
5
+ import { A as validateSkillDesign, Ct as PANEL_COMPONENT_CATALOG, D as OFFICIAL_REFLECTION_PROFILE, E as OFFICIAL_GROUNDING_PROFILE, G as parseDesignCommand, K as runDesignProjectCommand, O as officialAdvisoryProfile, St as GENERATED_COMPONENT_KINDS, T as OFFICIAL_ALIGNMENT_PROFILE, at as ensureProjectKit, h as DESIGN_CLARITY_OUTPUT_SCHEMA, it as DesignProjectRegistry, xt as queryPanelAuthoringReference } from "./core-entry-S65aB8cC.mjs";
6
6
  import { n as DESIGN_GIT_READ_DESCRIPTION, r as designGitReadArguments, t as DESIGN_GIT_READ_ACTIONS } from "./design-git-read-BUV0s4TT.mjs";
7
7
  import { parseArgs } from "node:util";
8
8
  import { dirname, isAbsolute, join, resolve } from "node:path";
@@ -1,4 +1,4 @@
1
- import { zt as GitVersioning } from "./core-entry-DESmwP78.mjs";
1
+ import { zt as GitVersioning } from "./core-entry-S65aB8cC.mjs";
2
2
  import { i as readDesignGit } from "./design-git-read-BUV0s4TT.mjs";
3
3
  import { join, resolve } from "node:path";
4
4
  import { pathToFileURL } from "node:url";
@@ -1,4 +1,4 @@
1
- import { S as queryKnowledgeSnapshot, b as knowledgeQueryFilters, x as knowledgeReadResult } from "./core-entry-DESmwP78.mjs";
1
+ import { S as queryKnowledgeSnapshot, b as knowledgeQueryFilters, x as knowledgeReadResult } from "./core-entry-S65aB8cC.mjs";
2
2
  import { pathToFileURL } from "node:url";
3
3
  import { readFile } from "node:fs/promises";
4
4
  //#region packages/companion/src/knowledge-snapshot-query.mjs
@@ -1,4 +1,4 @@
1
- import { ft as loadDesignBundle, pt as loadDesignKit } from "./core-entry-DESmwP78.mjs";
1
+ import { ft as loadDesignBundle, pt as loadDesignKit } from "./core-entry-S65aB8cC.mjs";
2
2
  import { resolve } from "node:path";
3
3
  //#region packages/studio/src/load.ts
4
4
  /** Studio-owned loading of a Kit from its directory source. */
@@ -1,5 +1,5 @@
1
- import { jt as compileSchema } from "./core-entry-DESmwP78.mjs";
2
- import "./load-C-RwS23Y.mjs";
1
+ import { jt as compileSchema } from "./core-entry-S65aB8cC.mjs";
2
+ import "./load-D1xLlKL_.mjs";
3
3
  import "node:path";
4
4
  //#region packages/studio/src/panel-preview.ts
5
5
  function failure(code, message) {
@@ -1,14 +1,14 @@
1
1
  import { i as notificationErrorResponse, n as requireThreadId, o as unknownDeliveryError, t as createCodexConnection } from "./codex-connection-1RvU1XCj.mjs";
2
- import { $ as storedKnowledgeGraph, A as validateSkillDesign, At as writeConfinedText, B as writeDesignClarityAuthority, Bt as designProjectRecordsRoot, C as DesignAdvisoryJournal, D as OFFICIAL_REFLECTION_PROFILE, Dt as removeConfinedFile, E as OFFICIAL_GROUNDING_PROFILE, Et as readConfinedText, F as pendingMustEditAuthorityForSave, Ft as DesignProjectManager, H as designClarityInputMatches, I as DesignExecutionHandoffJournal, It as nodeDesignProjectSpawn, J as saveDesignKnowledgeRecords, L as DesignJournalStorage, M as applyPanelEdit, Mt as parseSchemaYaml, N as buildPanelSaveNote, Nt as validatorFromSchemaYaml, O as officialAdvisoryProfile, Ot as resolveConfinedFilePath, P as parsePanelArtifacts, Q as refreshDesignKnowledge, R as readCommittedDesignClarityAuthority, S as queryKnowledgeSnapshot, T as OFFICIAL_ALIGNMENT_PROFILE, Tt as readConfinedBytes, U as parseDesignClarityInput, V as designClarityDigest, W as parseDesignClarityReported, X as readDesignKnowledgePublication, Y as advanceDesignKnowledgePublication, Z as readPublishedDesignKnowledge, _ as DESIGN_EXECUTOR_EVIDENCE_GUIDANCE, _t as resolveDesignKitPackage, a as autoPanelGenerationPrompt, at as ensureProjectKit, b as knowledgeQueryFilters, bt as resolveSemanticCapability, c as resolveAutoPanel, ct as projectBundleOverrides, d as knowledgeReviewSchema, dt as createDirectoryBundleResolver, et as readSourceDesignKnowledge, f as publishKnowledgeReview, ft as loadDesignBundle, g as DESIGN_CORE_CLARITY_RUBRIC_PROMPT, h as DESIGN_CLARITY_OUTPUT_SCHEMA, i as writeDesignReviewPolicy, j as DESIGN_PANEL_SAVE_ASSESSMENT_GUIDANCE, k as deriveCurrentDesignExecutionGate, kt as writeConfinedBytes, l as retainResolvedAutoPanel, lt as projectKitContentHash, m as readAdvisoryDesignKnowledge, mt as parseFrontmatter, n as DesignReviewPublicationQueue, nt as DesignKnowledgeRevision, o as publishAutoPanelComponents, ot as DesignContentStore, p as splitKnowledgeReviewResult, pt as loadDesignKit, q as restoreDesignKnowledgeRecords, r as readDesignReviewPolicy, rt as commitDesignProjectRecords, s as assertResolvedAutoPanelSave, st as composeProjectKit, t as DesignContinuousReviewClock, tt as readCompleteDesignKnowledge, u as knowledgeReviewGuidance, ut as sameProjectContentPin, v as DESIGN_WORKER_EVIDENCE_GUIDANCE, vt as designOntologyCoverage, w as renderAdvisoryReviewMemory, wt as requireDesignFileRelativePath, x as knowledgeReadResult, y as KNOWLEDGE_AGENTIC_GUIDANCE, yt as reviewSupportOf, z as readDesignClarityAuthority, zt as GitVersioning } from "./core-entry-DESmwP78.mjs";
2
+ import { $ as storedKnowledgeGraph, A as validateSkillDesign, At as writeConfinedText, B as writeDesignClarityAuthority, Bt as designProjectRecordsRoot, C as DesignAdvisoryJournal, D as OFFICIAL_REFLECTION_PROFILE, Dt as removeConfinedFile, E as OFFICIAL_GROUNDING_PROFILE, Et as readConfinedText, F as pendingMustEditAuthorityForSave, Ft as DesignProjectManager, H as designClarityInputMatches, I as DesignExecutionHandoffJournal, It as nodeDesignProjectSpawn, J as saveDesignKnowledgeRecords, L as DesignJournalStorage, M as applyPanelEdit, Mt as parseSchemaYaml, N as buildPanelSaveNote, Nt as validatorFromSchemaYaml, O as officialAdvisoryProfile, Ot as resolveConfinedFilePath, P as parsePanelArtifacts, Q as refreshDesignKnowledge, R as readCommittedDesignClarityAuthority, S as queryKnowledgeSnapshot, T as OFFICIAL_ALIGNMENT_PROFILE, Tt as readConfinedBytes, U as parseDesignClarityInput, V as designClarityDigest, W as parseDesignClarityReported, X as readDesignKnowledgePublication, Y as advanceDesignKnowledgePublication, Z as readPublishedDesignKnowledge, _ as DESIGN_EXECUTOR_EVIDENCE_GUIDANCE, _t as resolveDesignKitPackage, a as autoPanelGenerationPrompt, at as ensureProjectKit, b as knowledgeQueryFilters, bt as resolveSemanticCapability, c as resolveAutoPanel, ct as projectBundleOverrides, d as knowledgeReviewSchema, dt as createDirectoryBundleResolver, et as readSourceDesignKnowledge, f as publishKnowledgeReview, ft as loadDesignBundle, g as DESIGN_CORE_CLARITY_RUBRIC_PROMPT, h as DESIGN_CLARITY_OUTPUT_SCHEMA, i as writeDesignReviewPolicy, j as DESIGN_PANEL_SAVE_ASSESSMENT_GUIDANCE, k as deriveCurrentDesignExecutionGate, kt as writeConfinedBytes, l as retainResolvedAutoPanel, lt as projectKitContentHash, m as readAdvisoryDesignKnowledge, mt as parseFrontmatter, n as DesignReviewPublicationQueue, nt as DesignKnowledgeRevision, o as publishAutoPanelComponents, ot as DesignContentStore, p as splitKnowledgeReviewResult, pt as loadDesignKit, q as restoreDesignKnowledgeRecords, r as readDesignReviewPolicy, rt as commitDesignProjectRecords, s as assertResolvedAutoPanelSave, st as composeProjectKit, t as DesignContinuousReviewClock, tt as readCompleteDesignKnowledge, u as knowledgeReviewGuidance, ut as sameProjectContentPin, v as DESIGN_WORKER_EVIDENCE_GUIDANCE, vt as designOntologyCoverage, w as renderAdvisoryReviewMemory, wt as requireDesignFileRelativePath, x as knowledgeReadResult, y as KNOWLEDGE_AGENTIC_GUIDANCE, yt as reviewSupportOf, z as readDesignClarityAuthority, zt as GitVersioning } from "./core-entry-S65aB8cC.mjs";
3
3
  import { i as readDesignGit } from "./design-git-read-BUV0s4TT.mjs";
4
4
  import { l as withWindowsInspection, o as windowsProcess, r as windowsCommandArgs, t as createWindowsProcessInspector } from "./windows-native-platform-DLm-tedp.mjs";
5
- import { r as normalizeStudioInstanceChanges, t as createStudioDraftPorts } from "./studio-panel-drafts-Dq171F6x.mjs";
6
- import { t as loadStudioKit } from "./load-C-RwS23Y.mjs";
7
- import { TextDecoder, isDeepStrictEqual } from "node:util";
8
- import { basename, dirname, isAbsolute, join, relative, resolve, sep, win32 } from "node:path";
5
+ import { r as normalizeStudioInstanceChanges, t as createStudioDraftPorts } from "./studio-panel-drafts-DSxfgHfk.mjs";
6
+ import { t as loadStudioKit } from "./load-D1xLlKL_.mjs";
7
+ import { TextDecoder, isDeepStrictEqual, promisify } from "node:util";
8
+ import { basename, dirname, isAbsolute, join, posix, relative, resolve, sep, win32 } from "node:path";
9
9
  import { fileURLToPath } from "node:url";
10
10
  import { link, lstat, mkdir, mkdtemp, open, readFile, readdir, readlink, realpath, rename, rm, rmdir, stat, unlink, writeFile } from "node:fs/promises";
11
- import { spawn } from "node:child_process";
11
+ import { execFile, spawn } from "node:child_process";
12
12
  import { createHash, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
13
13
  import { homedir, tmpdir } from "node:os";
14
14
  import { closeSync, constants, createReadStream, fstatSync, lstatSync, openSync, readSync, realpathSync } from "node:fs";
@@ -4535,32 +4535,114 @@ function createWorkBuddyTranscript({ path, threadId, projectRoot, startBoundary,
4535
4535
  //#endregion
4536
4536
  //#region packages/companion/src/qwenwork-connection.mjs
4537
4537
  /** QwenWork WorkerTransport uses a worker thread inside the desktop main process. */
4538
+ const execute = promisify(execFile);
4539
+ function nativePaths(platform) {
4540
+ if (platform === "win32") return win32;
4541
+ if (platform === "darwin") return posix;
4542
+ throw Error("QwenWork adapter requires native Windows or macOS.");
4543
+ }
4544
+ const samePath = (a, b, platform) => typeof a === "string" && typeof b === "string" && (platform === "win32" ? win32.normalize(a).toLowerCase() === win32.normalize(b).toLowerCase() : posix.normalize(a) === posix.normalize(b));
4545
+ /** Inspect one PID using system tools. ps lstart is only a consistency check;
4546
+ * the desktop generation comes from the native application's AppKit launch date. */
4547
+ async function qwenWorkDarwinProcess(pid, { executable, run = execute, uid = process.getuid?.() } = {}) {
4548
+ if (!Number.isSafeInteger(pid) || pid < 2) throw Error("Invalid native PID.");
4549
+ const options = {
4550
+ encoding: "utf8",
4551
+ timeout: 15e3,
4552
+ maxBuffer: 262144,
4553
+ env: {
4554
+ ...process.env,
4555
+ LC_ALL: "C",
4556
+ TZ: "UTC"
4557
+ }
4558
+ };
4559
+ const ps = async () => {
4560
+ const { stdout } = await run("/bin/ps", [
4561
+ "-ww",
4562
+ "-p",
4563
+ String(pid),
4564
+ "-o",
4565
+ "pid=,ppid=,uid=,lstart=,comm="
4566
+ ], options);
4567
+ const match = stdout.match(/^\s*(\d+)\s+(\d+)\s+(\d+)\s+([A-Za-z]{3}\s+[A-Za-z]{3}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2}\s+\d{4})\s+([^\r\n]+)\s*$/);
4568
+ if (!match || Number(match[1]) !== pid || Number(match[3]) !== uid) throw Error("Incomplete native macOS process identity.");
4569
+ return {
4570
+ pid,
4571
+ parent: Number(match[2]),
4572
+ uid: Number(match[3]),
4573
+ observedStart: match[4],
4574
+ executable: match[5].trim()
4575
+ };
4576
+ };
4577
+ const before = await ps();
4578
+ if (before.executable !== executable) return {
4579
+ ...before,
4580
+ procStart: void 0,
4581
+ commandLine: ""
4582
+ };
4583
+ const { stdout: args } = await run("/bin/ps", [
4584
+ "-ww",
4585
+ "-p",
4586
+ String(pid),
4587
+ "-o",
4588
+ "args="
4589
+ ], options);
4590
+ const commandLine = args.trim();
4591
+ if (commandLine !== executable) return {
4592
+ ...before,
4593
+ procStart: void 0,
4594
+ commandLine
4595
+ };
4596
+ const script = `ObjC.import('AppKit'); var a=$.NSRunningApplication.runningApplicationWithProcessIdentifier(${pid}); if(a.isNil()) throw Error('Native macOS application unavailable'); if(a.executableURL.isNil() || a.launchDate.isNil()) throw Error('Native macOS application identity unavailable'); JSON.stringify({pid:Number(a.processIdentifier),executable:ObjC.unwrap(a.executableURL.path),start:Number(a.launchDate.timeIntervalSince1970),terminated:Boolean(a.terminated)})`;
4597
+ let app;
4598
+ try {
4599
+ const { stdout } = await run("/usr/bin/osascript", [
4600
+ "-l",
4601
+ "JavaScript",
4602
+ "-e",
4603
+ script
4604
+ ], options);
4605
+ app = JSON.parse(stdout);
4606
+ } catch (error) {
4607
+ throw Error("QwenWork macOS application identity is unobservable in this process context; native generation could not be verified.", { cause: error });
4608
+ }
4609
+ if (app.pid !== pid || app.executable !== executable || !Number.isFinite(app.start) || app.start <= 0 || app.terminated !== false) throw Error("QwenWork macOS application identity unavailable.");
4610
+ const after = await ps();
4611
+ if (JSON.stringify(after) !== JSON.stringify(before)) throw Error("QwenWork process changed during verification.");
4612
+ return {
4613
+ ...after,
4614
+ procStart: `appkit:${app.start}`,
4615
+ commandLine
4616
+ };
4617
+ }
4538
4618
  async function fileHash(path) {
4539
4619
  const hash = createHash("sha256");
4540
4620
  for await (const chunk of createReadStream(path)) hash.update(chunk);
4541
4621
  return hash.digest("hex");
4542
4622
  }
4543
4623
  async function readQwenWorkRuntimePins({ platform = process.platform, environment = process.env, read = readFile } = {}) {
4544
- if (platform !== "win32") throw Error("QwenWork adapter currently requires native Windows.");
4624
+ const paths = nativePaths(platform);
4545
4625
  const configured = environment.YUGOO_QWENWORK_RUNTIME_CONFIG;
4546
- if (configured !== void 0 && (typeof configured !== "string" || !win32.isAbsolute(configured) || /[\r\n\0]/.test(configured))) throw Error("Exact absolute QwenWork runtime configuration required.");
4626
+ if (configured !== void 0 && (typeof configured !== "string" || !paths.isAbsolute(configured) || /[\r\n\0]/.test(configured))) throw Error("Exact absolute QwenWork runtime configuration required.");
4547
4627
  return JSON.parse(await read(configured ?? new URL("./qwenwork-runtime.json", import.meta.url), "utf8"));
4548
4628
  }
4549
- function matchesQwenWorkMain(snapshot, pins) {
4550
- const same = (a, b) => typeof a === "string" && typeof b === "string" && win32.normalize(a).toLowerCase() === win32.normalize(b).toLowerCase();
4629
+ function matchesQwenWorkMain(snapshot, pins, { platform = process.platform } = {}) {
4630
+ const paths = nativePaths(platform);
4631
+ if (platform === "darwin") return paths.isAbsolute(pins.executable) && samePath(snapshot.executable, pins.executable, platform) && snapshot.commandLine === pins.executable && /^appkit:[0-9]+(?:\.[0-9]+)?$/.test(snapshot.procStart ?? "");
4551
4632
  const args = windowsCommandArgs(snapshot.commandLine);
4552
- return win32.isAbsolute(pins.executable) && args.length === 1 && same(snapshot.executable, pins.executable) && same(args[0], pins.executable);
4633
+ return paths.isAbsolute(pins.executable) && args.length === 1 && samePath(snapshot.executable, pins.executable, platform) && samePath(args[0], pins.executable, platform);
4553
4634
  }
4554
- async function inspectQwenWorkProcess(pid, pins, { snapshot = windowsProcess, canonical = realpath, bytes, initial } = {}) {
4635
+ async function inspectQwenWorkProcess(pid, pins, { platform = process.platform, snapshot = platform === "darwin" ? (pid) => qwenWorkDarwinProcess(pid, { executable: pins.executable }) : windowsProcess, canonical = realpath, bytes, initial } = {}) {
4636
+ const paths = nativePaths(platform);
4555
4637
  for (const k of ["executableSha256", "workerSha256"]) if (!/^[a-f0-9]{64}$/.test(pins[k] ?? "")) throw Error("Exact QwenWork runtime pins required.");
4556
- if (!win32.isAbsolute(pins.worker)) throw Error("Exact QwenWork worker path required.");
4638
+ if (!paths.isAbsolute(pins.worker)) throw Error("Exact QwenWork worker path required.");
4557
4639
  const before = initial ?? await snapshot(pid);
4558
- if (!matchesQwenWorkMain(before, pins)) return {
4640
+ if (!matchesQwenWorkMain(before, pins, { platform })) return {
4559
4641
  ...before,
4560
4642
  supported: false
4561
4643
  };
4562
4644
  for (const [path, hash] of [[pins.executable, pins.executableSha256], [pins.worker, pins.workerSha256]]) {
4563
- if (win32.normalize(await canonical(path)).toLowerCase() !== win32.normalize(path).toLowerCase()) throw Error("QwenWork runtime path resolves outside its pins.");
4645
+ if (!samePath(await canonical(path), path, platform)) throw Error("QwenWork runtime path resolves outside its pins.");
4564
4646
  if ((bytes ? createHash("sha256").update(await bytes(path)).digest("hex") : await fileHash(path)) !== hash) throw Error("QwenWork runtime bytes changed; refresh the verified installation pins.");
4565
4647
  }
4566
4648
  const after = await snapshot(pid);
@@ -4570,8 +4652,8 @@ async function inspectQwenWorkProcess(pid, pins, { snapshot = windowsProcess, ca
4570
4652
  supported: true
4571
4653
  };
4572
4654
  }
4573
- async function qwenworkProcess(pid, options) {
4574
- return inspectQwenWorkProcess(pid, await readQwenWorkRuntimePins(), options);
4655
+ async function qwenworkProcess(pid, options = {}) {
4656
+ return inspectQwenWorkProcess(pid, await readQwenWorkRuntimePins({ platform: options.platform ?? process.platform }), options);
4575
4657
  }
4576
4658
  async function findQwenWorkAncestor(startPid, inspect, snapshot) {
4577
4659
  const seen = /* @__PURE__ */ new Set();
@@ -4589,11 +4671,31 @@ async function findQwenWorkAncestor(startPid, inspect, snapshot) {
4589
4671
  }
4590
4672
  async function nativeQwenWorkHookProcess() {
4591
4673
  const pins = await readQwenWorkRuntimePins();
4674
+ if (process.platform === "darwin") return findQwenWorkAncestor(process.ppid, (pid, initial) => inspectQwenWorkProcess(pid, pins, { initial }), (pid) => qwenWorkDarwinProcess(pid, { executable: pins.executable }));
4592
4675
  return withWindowsInspection(() => findQwenWorkAncestor(process.ppid, (pid, initial) => inspectQwenWorkProcess(pid, pins, { initial }), windowsProcess));
4593
4676
  }
4594
4677
  //#endregion
4595
4678
  //#region packages/companion/src/native-hook-transport.mjs
4596
4679
  /** Shared native FileChanged/asyncRewake inbox. Host adapters supply identity, not a scheduler. */
4680
+ const windowsStorage = process.platform === "win32" ? import("./windows-private-storage-Q0cTolE3.mjs") : void 0;
4681
+ async function assertPrivate(path, stat) {
4682
+ if (windowsStorage) {
4683
+ const checked = await (await windowsStorage).assertWindowsPrivate(path);
4684
+ if (checked.dev !== stat.dev || checked.ino !== stat.ino) throw new Error("Private notification path changed during inspection.");
4685
+ } else if (stat.mode & 63 || process.getuid && stat.uid !== process.getuid()) throw new Error("Invalid private notification.");
4686
+ }
4687
+ /** The same bounded, no-follow native private-file read serves Hooks and desktop control. */
4688
+ async function readNativePrivateFile(path) {
4689
+ const file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
4690
+ try {
4691
+ const stat = await file.stat();
4692
+ if (!stat.isFile() || stat.size > 262144) throw new Error("Invalid private notification.");
4693
+ await assertPrivate(path, stat);
4694
+ return await file.readFile("utf8");
4695
+ } finally {
4696
+ await file.close();
4697
+ }
4698
+ }
4597
4699
  function createNativeHookTransport({ host, label, noticeFile, inspectProcess, nativeHookProcess, registrationEvents = ["SessionStart"], requireTranscript = false, resumeEvents = [] }) {
4598
4700
  const prefix = {
4599
4701
  qoder: "qoder",
@@ -4605,13 +4707,6 @@ function createNativeHookTransport({ host, label, noticeFile, inspectProcess, na
4605
4707
  const resumeRetentionMs = 864e5;
4606
4708
  const marker = `design-system-${prefix}-hook:`;
4607
4709
  const defaultRoot = () => join(homedir(), ".local/state/design-system", `${prefix}-hooks`);
4608
- const windowsStorage = process.platform === "win32" ? import("./windows-private-storage-Q0cTolE3.mjs") : void 0;
4609
- async function assertPrivate(path, stat) {
4610
- if (windowsStorage) {
4611
- const checked = await (await windowsStorage).assertWindowsPrivate(path);
4612
- if (checked.dev !== stat.dev || checked.ino !== stat.ino) throw new Error("Private notification path changed during inspection.");
4613
- } else if (stat.mode & 63 || process.getuid && stat.uid !== process.getuid()) throw new Error("Invalid private notification.");
4614
- }
4615
4710
  async function privateDirectory(path) {
4616
4711
  if (windowsStorage) await (await windowsStorage).ensureWindowsPrivateDirectory(path);
4617
4712
  else await mkdir(path, {
@@ -4629,15 +4724,7 @@ function createNativeHookTransport({ host, label, noticeFile, inspectProcess, na
4629
4724
  return { directory: join(hookRoot, sessionId) };
4630
4725
  }
4631
4726
  async function privateJson(path) {
4632
- const file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
4633
- try {
4634
- const stat = await file.stat();
4635
- if (!stat.isFile() || stat.size > 262144) throw new Error("Invalid private notification.");
4636
- await assertPrivate(path, stat);
4637
- return JSON.parse(await file.readFile("utf8"));
4638
- } finally {
4639
- await file.close();
4640
- }
4727
+ return JSON.parse(await readNativePrivateFile(path));
4641
4728
  }
4642
4729
  async function createConnection(options) {
4643
4730
  const location = await paths(options);
@@ -4995,29 +5082,46 @@ async function createDesktopInputConnection({ sessionId, nativeCwd, request, ver
4995
5082
  }
4996
5083
  };
4997
5084
  }
4998
- async function createQwenWorkDesktopInput(options) {
4999
- if (process.platform !== "win32" || !process.env.APPDATA) throw Error("Native Windows QwenWork desktop input required.");
5000
- const { assertWindowsPrivate } = await import("./windows-private-storage-Q0cTolE3.mjs");
5001
- const root = join(process.env.APPDATA, "QwenWorkCN");
5085
+ function qwenWorkUserDataRoot({ platform = process.platform, environment = process.env, home = homedir() } = {}) {
5086
+ if (platform === "win32" && typeof environment.APPDATA === "string" && win32.isAbsolute(environment.APPDATA)) return win32.join(environment.APPDATA, "QwenWorkCN");
5087
+ if (platform === "darwin" && typeof home === "string" && posix.isAbsolute(home)) return posix.join(home, "Library/Application Support/QwenWorkCN");
5088
+ throw Error("Native Windows or macOS QwenWork user-data path required.");
5089
+ }
5090
+ async function createQwenWorkDesktopInput(options, { platform = process.platform, environment = process.env, home = homedir(), canonical = realpath, readPrivate = readNativePrivateFile, inspectProcess = qwenworkProcess, createInspector = createWindowsProcessInspector, fetchRequest = fetch, openDatabase = async (path) => {
5091
+ const { DatabaseSync } = await import("node:sqlite");
5092
+ return new DatabaseSync(path, { readOnly: true });
5093
+ } } = {}) {
5094
+ const root = qwenWorkUserDataRoot({
5095
+ platform,
5096
+ environment,
5097
+ home
5098
+ });
5099
+ if (!/^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i.test(options.sessionId ?? "")) throw Error("Exact QwenWork session UUID required.");
5002
5100
  const endpointFile = join(root, "cli-control/endpoint.json");
5003
- await assertWindowsPrivate(endpointFile);
5004
- const endpoint = JSON.parse(await readFile(endpointFile, "utf8"));
5101
+ let endpoint;
5102
+ try {
5103
+ endpoint = JSON.parse(await readPrivate(endpointFile));
5104
+ } catch (error) {
5105
+ if (error.code === "ENOENT") throw Error("QwenWork desktop control endpoint is unavailable; enable only through authorized host setup, or explicitly select --qwenwork-events-only.", { cause: error });
5106
+ throw error;
5107
+ }
5005
5108
  if (endpoint.protocol !== "qwenwork.desktop.v1" || !/^[a-f0-9]{32}$/.test(endpoint.instance_id) || !Number.isInteger(endpoint.port) || endpoint.port < 1 || endpoint.port > 65535) throw Error("Invalid QwenWork desktop endpoint.");
5006
5109
  const tokenFile = join(root, "cli-control", endpoint.instance_id, "token");
5007
- await assertWindowsPrivate(tokenFile);
5008
- const token = await readFile(tokenFile, "utf8");
5110
+ const token = await readPrivate(tokenFile);
5009
5111
  if (!/^[a-f0-9]{64}$/.test(token)) throw Error("Invalid QwenWork desktop credential.");
5010
- const nativeCwd = await realpath(options.nativeCwd);
5011
- const transcriptPath = await realpath(options.transcriptPath);
5012
- const bindingFile = join(homedir(), ".local/state/design-system/qwenwork-hooks", options.sessionId, "binding.json");
5013
- await assertWindowsPrivate(bindingFile);
5014
- const original = JSON.parse(await readFile(bindingFile, "utf8"));
5015
- const { DatabaseSync } = await import("node:sqlite");
5016
- const inspector = createWindowsProcessInspector();
5112
+ const nativeCwd = await canonical(options.nativeCwd);
5113
+ const transcriptPath = await canonical(options.transcriptPath);
5114
+ const bindingFile = join(home, ".local/state/design-system/qwenwork-hooks", options.sessionId, "binding.json");
5115
+ const original = JSON.parse(await readPrivate(bindingFile));
5116
+ const inspector = platform === "win32" ? createInspector() : { close() {} };
5017
5117
  const verifyBinding = async () => {
5018
- const processInfo = await qwenworkProcess(original.pid, { snapshot: inspector.snapshot });
5019
- if (!processInfo.supported || processInfo.procStart !== original.procStart || original.cwd !== nativeCwd || original.transcriptPath !== transcriptPath) throw Error("QwenWork native identity changed; reopen the Panel.");
5020
- const db = new DatabaseSync(join(root, "data/agents.db"), { readOnly: true });
5118
+ const current = JSON.parse(await readPrivate(bindingFile));
5119
+ const processInfo = await inspectProcess(original.pid, {
5120
+ platform,
5121
+ ...inspector.snapshot ? { snapshot: inspector.snapshot } : {}
5122
+ });
5123
+ if (!processInfo.supported || processInfo.procStart !== original.procStart || current.pid !== original.pid || current.procStart !== original.procStart || current.cwd !== nativeCwd || current.transcriptPath !== transcriptPath || original.cwd !== nativeCwd || original.transcriptPath !== transcriptPath) throw Error("QwenWork native identity changed; reopen the Panel.");
5124
+ const db = await openDatabase(join(root, "data/agents.db"));
5021
5125
  try {
5022
5126
  db.exec("PRAGMA query_only=ON");
5023
5127
  const rows = db.prepare("SELECT id FROM sub_chats WHERE session_id=?").all(options.sessionId);
@@ -5028,9 +5132,9 @@ async function createQwenWorkDesktopInput(options) {
5028
5132
  }
5029
5133
  };
5030
5134
  const request = async (method, params) => {
5031
- const current = JSON.parse(await readFile(endpointFile, "utf8"));
5032
- if (current.instance_id !== endpoint.instance_id || current.port !== endpoint.port) throw Error("QwenWork desktop instance changed; reopen the Panel.");
5033
- const response = await fetch(`http://127.0.0.1:${endpoint.port}/v1/control`, {
5135
+ const current = JSON.parse(await readPrivate(endpointFile));
5136
+ if (current.protocol !== endpoint.protocol || current.instance_id !== endpoint.instance_id || current.port !== endpoint.port || await readPrivate(tokenFile) !== token) throw Error("QwenWork desktop instance changed; reopen the Panel.");
5137
+ const response = await fetchRequest(`http://127.0.0.1:${endpoint.port}/v1/control`, {
5034
5138
  method: "POST",
5035
5139
  redirect: "error",
5036
5140
  headers: {
@@ -5605,7 +5709,7 @@ function createCompanionContentLibrary({ fs, kitRoot, stateRoot, trustedContentS
5605
5709
  },
5606
5710
  /** The shared Studio store owns current library edits; projects take a copy. */
5607
5711
  async studio() {
5608
- return studio ??= import("./studio-CFUWk0vJ.mjs").then(({ createCompanionStudio }) => createCompanionStudio(() => this.loadInstalled(), kitRoot, stateRoot, this)).catch((error) => {
5712
+ return studio ??= import("./studio-DumCCbFT.mjs").then(({ createCompanionStudio }) => createCompanionStudio(() => this.loadInstalled(), kitRoot, stateRoot, this)).catch((error) => {
5609
5713
  studio = void 0;
5610
5714
  throw error;
5611
5715
  });
@@ -1,7 +1,7 @@
1
- import { Pt as require_dist } from "./core-entry-DESmwP78.mjs";
2
- import { t as loadStudioKit } from "./load-C-RwS23Y.mjs";
3
- import { r as readStudioContentArchive } from "./content-archive-CnwVcuWA.mjs";
4
- import { t as finalizeStudioPanelPreview } from "./panel-preview-BeVRYFk1.mjs";
1
+ import { Pt as require_dist } from "./core-entry-S65aB8cC.mjs";
2
+ import { t as loadStudioKit } from "./load-D1xLlKL_.mjs";
3
+ import { r as readStudioContentArchive } from "./content-archive-BvVmbecb.mjs";
4
+ import { t as finalizeStudioPanelPreview } from "./panel-preview-D-OD9mro.mjs";
5
5
  import { isAbsolute, join, relative, resolve, sep } from "node:path";
6
6
  import { lstat, readFile, readdir, realpath } from "node:fs/promises";
7
7
  //#region packages/studio/src/composition.ts
@@ -583,7 +583,7 @@ async function createCompanionStudio(kit, kitRoot, stateRoot, contentLibrary) {
583
583
  const retained = contentLibrary ? await contentLibrary.store.resolveBundle(bundlePin) : void 0;
584
584
  const base = retained?.resourceRoot ?? selected.resourceRoot;
585
585
  if (!base) throw new Error("Independent Bundle source is unavailable.");
586
- const { createStudioInstanceAdapters } = await import("./studio-instance-composition-BJzYMyvV.mjs");
586
+ const { createStudioInstanceAdapters } = await import("./studio-instance-composition-DfbZVetl.mjs");
587
587
  const { composition } = createStudioInstanceAdapters({
588
588
  listBundles: async () => [bundlePin],
589
589
  captureKit: async () => {
@@ -717,7 +717,7 @@ async function createCompanionStudio(kit, kitRoot, stateRoot, contentLibrary) {
717
717
  };
718
718
  const instances = () => {
719
719
  if (!stateRoot) throw new Error("Studio authoring storage is not configured.");
720
- return instanceService ??= Promise.all([import("./studio-instances-gQFR9yqL.mjs"), import("./studio-instance-composition-BJzYMyvV.mjs")]).then(async ([{ createStudioInstances }, { createStudioInstanceAdapters }]) => {
720
+ return instanceService ??= Promise.all([import("./studio-instances-BnVSHNCf.mjs"), import("./studio-instance-composition-DfbZVetl.mjs")]).then(async ([{ createStudioInstances }, { createStudioInstanceAdapters }]) => {
721
721
  return createStudioInstances({
722
722
  stateRoot,
723
723
  ...createStudioInstanceAdapters({
@@ -1,5 +1,5 @@
1
- import { Pt as require_dist, ft as loadDesignBundle, gt as parseMindsetSkillNames, ht as parseKitMounts, mt as parseFrontmatter, pt as loadDesignKit } from "./core-entry-DESmwP78.mjs";
2
- import { t as finalizeStudioPanelPreview } from "./panel-preview-BeVRYFk1.mjs";
1
+ import { Pt as require_dist, ft as loadDesignBundle, gt as parseMindsetSkillNames, ht as parseKitMounts, mt as parseFrontmatter, pt as loadDesignKit } from "./core-entry-S65aB8cC.mjs";
2
+ import { t as finalizeStudioPanelPreview } from "./panel-preview-D-OD9mro.mjs";
3
3
  import { isAbsolute, relative, resolve, sep } from "node:path";
4
4
  import { randomUUID } from "node:crypto";
5
5
  //#region packages/studio/src/node/studio-instance-composition.mjs
@@ -1,6 +1,6 @@
1
- import { Pt as require_dist, ht as parseKitMounts } from "./core-entry-DESmwP78.mjs";
2
- import { n as STUDIO_INSTANCE_CHANGE_LIMITS, r as normalizeStudioInstanceChanges, t as createStudioDraftPorts } from "./studio-panel-drafts-Dq171F6x.mjs";
3
- import { n as readStudioArchiveResource, t as exportStudioSourceArchive } from "./content-archive-CnwVcuWA.mjs";
1
+ import { Pt as require_dist, ht as parseKitMounts } from "./core-entry-S65aB8cC.mjs";
2
+ import { n as STUDIO_INSTANCE_CHANGE_LIMITS, r as normalizeStudioInstanceChanges, t as createStudioDraftPorts } from "./studio-panel-drafts-DSxfgHfk.mjs";
3
+ import { n as readStudioArchiveResource, t as exportStudioSourceArchive } from "./content-archive-BvVmbecb.mjs";
4
4
  import { isAbsolute, join, relative, resolve, sep } from "node:path";
5
5
  import { createHash, randomUUID } from "node:crypto";
6
6
  //#region packages/studio/src/node/studio-instances.mjs
@@ -1,4 +1,4 @@
1
- import { n as readStudioArchiveResource } from "./content-archive-CnwVcuWA.mjs";
1
+ import { n as readStudioArchiveResource } from "./content-archive-BvVmbecb.mjs";
2
2
  import { isAbsolute, join, relative, resolve, sep } from "node:path";
3
3
  import { lstat, mkdir, open, readFile, readdir, realpath, rename, rmdir, unlink } from "node:fs/promises";
4
4
  import { createHash, randomUUID } from "node:crypto";
@@ -1,5 +1,5 @@
1
1
  import { n as requireThreadId } from "./codex-connection-1RvU1XCj.mjs";
2
- import { t as startCompanion } from "./server-BnEtfptI.mjs";
2
+ import { t as startCompanion } from "./server-B6kGo8xO.mjs";
3
3
  import { isAbsolute, join } from "node:path";
4
4
  import { writeFile } from "node:fs/promises";
5
5
  import { createHash, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";