@lemoncat7/dsh-partner 2.5.0 → 2.7.1

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 (653) hide show
  1. package/README.md +4 -0
  2. package/docs/THIRD_PARTY_LICENSES.md +13 -0
  3. package/docs/attachment-storage.md +18 -0
  4. package/docs/director-skills.md +24 -0
  5. package/docs/long-task-continuation.md +1 -1
  6. package/docs/releases/2.6.0.md +11 -0
  7. package/docs/releases/2.7.1.md +10 -0
  8. package/lib/agent-runtime.d.ts +3 -1
  9. package/lib/agent-runtime.d.ts.map +1 -1
  10. package/lib/agent-runtime.js +35 -11
  11. package/lib/agent-runtime.js.map +1 -1
  12. package/lib/api/features/attachments-api.d.ts.map +1 -1
  13. package/lib/api/features/attachments-api.js +31 -1
  14. package/lib/api/features/attachments-api.js.map +1 -1
  15. package/lib/api.d.ts +1 -1
  16. package/lib/api.d.ts.map +1 -1
  17. package/lib/api.js +1 -1
  18. package/lib/api.js.map +1 -1
  19. package/lib/attachments/grouped-storage.d.ts +5 -0
  20. package/lib/attachments/grouped-storage.d.ts.map +1 -0
  21. package/lib/attachments/grouped-storage.js +47 -0
  22. package/lib/attachments/grouped-storage.js.map +1 -0
  23. package/lib/attachments/service.d.ts +17 -0
  24. package/lib/attachments/service.d.ts.map +1 -1
  25. package/lib/attachments/service.js +100 -8
  26. package/lib/attachments/service.js.map +1 -1
  27. package/lib/attachments/shared-storage.d.ts +7 -0
  28. package/lib/attachments/shared-storage.d.ts.map +1 -0
  29. package/lib/attachments/shared-storage.js +44 -0
  30. package/lib/attachments/shared-storage.js.map +1 -0
  31. package/lib/attachments/storage-admin.d.ts +6 -0
  32. package/lib/attachments/storage-admin.d.ts.map +1 -0
  33. package/lib/attachments/storage-admin.js +43 -0
  34. package/lib/attachments/storage-admin.js.map +1 -0
  35. package/lib/attachments/storage-types.d.ts +33 -0
  36. package/lib/attachments/storage-types.d.ts.map +1 -0
  37. package/lib/attachments/storage-types.js +2 -0
  38. package/lib/attachments/storage-types.js.map +1 -0
  39. package/lib/attachments/tool.d.ts.map +1 -1
  40. package/lib/attachments/tool.js +16 -5
  41. package/lib/attachments/tool.js.map +1 -1
  42. package/lib/channels/delivery-policy.d.ts.map +1 -1
  43. package/lib/channels/delivery-policy.js +6 -4
  44. package/lib/channels/delivery-policy.js.map +1 -1
  45. package/lib/channels/direct/message-format.js +294 -157
  46. package/lib/channels/direct/message-format.js.map +4 -4
  47. package/lib/channels/manager.d.ts +6 -3
  48. package/lib/channels/manager.d.ts.map +1 -1
  49. package/lib/channels/manager.js +64 -44
  50. package/lib/channels/manager.js.map +1 -1
  51. package/lib/channels/weixin/api.d.ts.map +1 -1
  52. package/lib/channels/weixin/api.js +7 -2
  53. package/lib/channels/weixin/api.js.map +1 -1
  54. package/lib/channels/weixin/errors.d.ts +14 -0
  55. package/lib/channels/weixin/errors.d.ts.map +1 -0
  56. package/lib/channels/weixin/errors.js +29 -0
  57. package/lib/channels/weixin/errors.js.map +1 -0
  58. package/lib/channels/weixin/poll.d.ts +14 -0
  59. package/lib/channels/weixin/poll.d.ts.map +1 -0
  60. package/lib/channels/weixin/poll.js +50 -0
  61. package/lib/channels/weixin/poll.js.map +1 -0
  62. package/lib/client-controller.d.ts.map +1 -1
  63. package/lib/client-controller.js +3 -3
  64. package/lib/client-controller.js.map +1 -1
  65. package/lib/client.d.ts.map +1 -1
  66. package/lib/client.js +983 -575
  67. package/lib/client.js.map +4 -4
  68. package/lib/collaboration/composition.d.ts.map +1 -1
  69. package/lib/collaboration/composition.js +16 -6
  70. package/lib/collaboration/composition.js.map +1 -1
  71. package/lib/collaboration/domain.d.ts +6 -0
  72. package/lib/collaboration/domain.d.ts.map +1 -1
  73. package/lib/collaboration/domain.js.map +1 -1
  74. package/lib/collaboration/service.d.ts.map +1 -1
  75. package/lib/collaboration/service.js +33 -3
  76. package/lib/collaboration/service.js.map +1 -1
  77. package/lib/concern-notification.d.ts.map +1 -1
  78. package/lib/concern-notification.js +2 -1
  79. package/lib/concern-notification.js.map +1 -1
  80. package/lib/concern-tool.js +1 -1
  81. package/lib/concern-tool.js.map +1 -1
  82. package/lib/execution/reply-progress.d.ts.map +1 -1
  83. package/lib/execution/reply-progress.js +4 -2
  84. package/lib/execution/reply-progress.js.map +1 -1
  85. package/lib/execution/service.d.ts +1 -1
  86. package/lib/execution/service.d.ts.map +1 -1
  87. package/lib/execution/service.js +4 -7
  88. package/lib/execution/service.js.map +1 -1
  89. package/lib/index.d.ts.map +1 -1
  90. package/lib/index.js +3 -1
  91. package/lib/index.js.map +1 -1
  92. package/lib/memory-reflection.js +2 -2
  93. package/lib/memory-reflection.js.map +1 -1
  94. package/lib/message-source.d.ts +25 -0
  95. package/lib/message-source.d.ts.map +1 -0
  96. package/lib/message-source.js +8 -0
  97. package/lib/message-source.js.map +1 -0
  98. package/lib/observation-loop.js +4 -4
  99. package/lib/observation-loop.js.map +1 -1
  100. package/lib/pendant/reader.js +1 -1
  101. package/lib/pendant/reader.js.map +1 -1
  102. package/lib/pendant/renderer.d.ts.map +1 -1
  103. package/lib/pendant/renderer.js +18 -2
  104. package/lib/pendant/renderer.js.map +1 -1
  105. package/lib/pendant/settings-panel.js +1 -1
  106. package/lib/pendant/settings-panel.js.map +1 -1
  107. package/lib/pendant/startup.d.ts +4 -0
  108. package/lib/pendant/startup.d.ts.map +1 -0
  109. package/lib/pendant/startup.js +64 -0
  110. package/lib/pendant/startup.js.map +1 -0
  111. package/lib/pendant/widget.d.ts.map +1 -1
  112. package/lib/pendant/widget.js +2 -1
  113. package/lib/pendant/widget.js.map +1 -1
  114. package/lib/pendant-renderer.js +169 -169
  115. package/lib/persona/service.js +1 -1
  116. package/lib/persona/service.js.map +1 -1
  117. package/lib/requirements/attachments.d.ts +7 -0
  118. package/lib/requirements/attachments.d.ts.map +1 -0
  119. package/lib/requirements/attachments.js +26 -0
  120. package/lib/requirements/attachments.js.map +1 -0
  121. package/lib/requirements/domain.d.ts +1 -1
  122. package/lib/requirements/domain.d.ts.map +1 -1
  123. package/lib/requirements/service.d.ts.map +1 -1
  124. package/lib/requirements/service.js +4 -1
  125. package/lib/requirements/service.js.map +1 -1
  126. package/lib/scheduler/channel-origin.d.ts +7 -0
  127. package/lib/scheduler/channel-origin.d.ts.map +1 -0
  128. package/lib/scheduler/channel-origin.js +27 -0
  129. package/lib/scheduler/channel-origin.js.map +1 -0
  130. package/lib/scheduler/continuations.d.ts +2 -2
  131. package/lib/scheduler/continuations.d.ts.map +1 -1
  132. package/lib/scheduler/continuations.js +28 -8
  133. package/lib/scheduler/continuations.js.map +1 -1
  134. package/lib/scheduler/domain.d.ts +13 -0
  135. package/lib/scheduler/domain.d.ts.map +1 -1
  136. package/lib/scheduler/final-reply.d.ts +13 -0
  137. package/lib/scheduler/final-reply.d.ts.map +1 -0
  138. package/lib/scheduler/final-reply.js +21 -0
  139. package/lib/scheduler/final-reply.js.map +1 -0
  140. package/lib/skills/builtin-resources.d.ts +6 -0
  141. package/lib/skills/builtin-resources.d.ts.map +1 -0
  142. package/lib/skills/builtin-resources.js +47 -0
  143. package/lib/skills/builtin-resources.js.map +1 -0
  144. package/lib/skills/builtin.d.ts +2 -5
  145. package/lib/skills/builtin.d.ts.map +1 -1
  146. package/lib/skills/builtin.js +6 -0
  147. package/lib/skills/builtin.js.map +1 -1
  148. package/lib/skills/director-builtins.d.ts +8 -0
  149. package/lib/skills/director-builtins.d.ts.map +1 -0
  150. package/lib/skills/director-builtins.js +65 -0
  151. package/lib/skills/director-builtins.js.map +1 -0
  152. package/lib/skills/drama-builtin.d.ts +3 -0
  153. package/lib/skills/drama-builtin.d.ts.map +1 -0
  154. package/lib/skills/drama-builtin.js +49 -0
  155. package/lib/skills/drama-builtin.js.map +1 -0
  156. package/lib/skills/long-task-continuation.d.ts +2 -2
  157. package/lib/skills/long-task-continuation.d.ts.map +1 -1
  158. package/lib/skills/long-task-continuation.js +2 -2
  159. package/lib/skills/service.d.ts.map +1 -1
  160. package/lib/skills/service.js +8 -3
  161. package/lib/skills/service.js.map +1 -1
  162. package/lib/skills/viora-canvas-builtin.d.ts +3 -0
  163. package/lib/skills/viora-canvas-builtin.d.ts.map +1 -0
  164. package/lib/skills/viora-canvas-builtin.js +19 -0
  165. package/lib/skills/viora-canvas-builtin.js.map +1 -0
  166. package/lib/storage/migrate-layout.d.ts.map +1 -1
  167. package/lib/storage/migrate-layout.js +13 -4
  168. package/lib/storage/migrate-layout.js.map +1 -1
  169. package/lib/tasks/context.js +1 -0
  170. package/lib/tasks/context.js.map +1 -1
  171. package/lib/tasks/continuation.d.ts.map +1 -1
  172. package/lib/tasks/continuation.js +3 -0
  173. package/lib/tasks/continuation.js.map +1 -1
  174. package/lib/tasks/domain.d.ts +2 -0
  175. package/lib/tasks/domain.d.ts.map +1 -1
  176. package/lib/tasks/service.d.ts +2 -1
  177. package/lib/tasks/service.d.ts.map +1 -1
  178. package/lib/tasks/service.js +15 -1
  179. package/lib/tasks/service.js.map +1 -1
  180. package/lib/ui/attachment-storage.d.ts +2 -0
  181. package/lib/ui/attachment-storage.d.ts.map +1 -0
  182. package/lib/ui/attachment-storage.js +59 -0
  183. package/lib/ui/attachment-storage.js.map +1 -0
  184. package/lib/ui/capability-editor.js +1 -1
  185. package/lib/ui/capability-editor.js.map +1 -1
  186. package/lib/ui/companion-access-panel.js +1 -1
  187. package/lib/ui/companion-access-panel.js.map +1 -1
  188. package/lib/ui/companion-create.js +1 -1
  189. package/lib/ui/companion-create.js.map +1 -1
  190. package/lib/ui/companion-picker.js +1 -1
  191. package/lib/ui/companion-picker.js.map +1 -1
  192. package/lib/ui/identity-editor.js +1 -1
  193. package/lib/ui/identity-editor.js.map +1 -1
  194. package/lib/ui/mcp-capabilities.js +1 -1
  195. package/lib/ui/mcp-capabilities.js.map +1 -1
  196. package/lib/ui/mcp-panel.js +1 -1
  197. package/lib/ui/mcp-panel.js.map +1 -1
  198. package/lib/ui/memory/concern-board.js +2 -2
  199. package/lib/ui/memory/concern-board.js.map +1 -1
  200. package/lib/ui/memory/concern-deletion.d.ts +1 -1
  201. package/lib/ui/memory/concern-deletion.d.ts.map +1 -1
  202. package/lib/ui/memory/concern-deletion.js +9 -4
  203. package/lib/ui/memory/concern-deletion.js.map +1 -1
  204. package/lib/ui/memory/concern-panel.js +1 -1
  205. package/lib/ui/memory/concern-panel.js.map +1 -1
  206. package/lib/ui/memory/memory-library.js +1 -1
  207. package/lib/ui/memory/memory-library.js.map +1 -1
  208. package/lib/ui/memory/memory-panel.js +1 -1
  209. package/lib/ui/memory/memory-panel.js.map +1 -1
  210. package/lib/ui/partner-components.js +1 -1
  211. package/lib/ui/partner-components.js.map +1 -1
  212. package/lib/ui/requirement-board.js +1 -1
  213. package/lib/ui/requirement-board.js.map +1 -1
  214. package/lib/ui/requirement-dialog.js +1 -1
  215. package/lib/ui/requirement-dialog.js.map +1 -1
  216. package/lib/ui/requirement-tasks-panel.js +1 -1
  217. package/lib/ui/requirement-tasks-panel.js.map +1 -1
  218. package/lib/ui/schedule-panel.js +1 -1
  219. package/lib/ui/schedule-panel.js.map +1 -1
  220. package/lib/ui/skills-panel.js +1 -1
  221. package/lib/ui/skills-panel.js.map +1 -1
  222. package/lib/ui/storage-settings.d.ts.map +1 -1
  223. package/lib/ui/storage-settings.js +2 -1
  224. package/lib/ui/storage-settings.js.map +1 -1
  225. package/lib/ui/task-board-stage.js +1 -1
  226. package/lib/ui/task-board-stage.js.map +1 -1
  227. package/lib/ui/workspace-components.js +1 -1
  228. package/lib/ui/workspace-components.js.map +1 -1
  229. package/lib/ui/workspace-navigation.d.ts +16 -16
  230. package/lib/ui/workspace-navigation.js +1 -1
  231. package/lib/ui/workspace-navigation.js.map +1 -1
  232. package/package.json +53 -41
  233. package/resources/skills/cinematic-director/manifest.json +205 -0
  234. package/resources/skills/cinematic-director/upstream/CHANGELOG.md +213 -0
  235. package/resources/skills/cinematic-director/upstream/CONTRIBUTING.md +316 -0
  236. package/resources/skills/cinematic-director/upstream/LICENSE +21 -0
  237. package/resources/skills/cinematic-director/upstream/README.md +507 -0
  238. package/resources/skills/cinematic-director/upstream/SKILL.md +420 -0
  239. package/resources/skills/cinematic-director/upstream/assets/beat-sheet-template.md +97 -0
  240. package/resources/skills/cinematic-director/upstream/assets/director-book-template.md +254 -0
  241. package/resources/skills/cinematic-director/upstream/assets/edit-timeline-template.md +147 -0
  242. package/resources/skills/cinematic-director/upstream/assets/keyframe-prompt-template.md +334 -0
  243. package/resources/skills/cinematic-director/upstream/assets/qc-checklist.md +153 -0
  244. package/resources/skills/cinematic-director/upstream/assets/shot-plan-template.md +95 -0
  245. package/resources/skills/cinematic-director/upstream/assets/sound-plan-template.md +181 -0
  246. package/resources/skills/cinematic-director/upstream/assets/video-prompt-template.md +305 -0
  247. package/resources/skills/cinematic-director/upstream/evals/run.md +69 -0
  248. package/resources/skills/cinematic-director/upstream/references/ai-video-tool-adapters.md +527 -0
  249. package/resources/skills/cinematic-director/upstream/references/blocking-and-staging.md +424 -0
  250. package/resources/skills/cinematic-director/upstream/references/cinematic-language.md +595 -0
  251. package/resources/skills/cinematic-director/upstream/references/continuity-bible.md +410 -0
  252. package/resources/skills/cinematic-director/upstream/references/director_styles/01_spielberg.md +192 -0
  253. package/resources/skills/cinematic-director/upstream/references/director_styles/02_hitchcock.md +193 -0
  254. package/resources/skills/cinematic-director/upstream/references/director_styles/03_kubrick.md +196 -0
  255. package/resources/skills/cinematic-director/upstream/references/director_styles/04_kurosawa.md +196 -0
  256. package/resources/skills/cinematic-director/upstream/references/director_styles/05_scorsese.md +195 -0
  257. package/resources/skills/cinematic-director/upstream/references/director_styles/06_fellini.md +197 -0
  258. package/resources/skills/cinematic-director/upstream/references/director_styles/07_bergman.md +197 -0
  259. package/resources/skills/cinematic-director/upstream/references/director_styles/08_tarkovsky.md +184 -0
  260. package/resources/skills/cinematic-director/upstream/references/director_styles/09_wong_kar_wai.md +189 -0
  261. package/resources/skills/cinematic-director/upstream/references/director_styles/10_nolan.md +185 -0
  262. package/resources/skills/cinematic-director/upstream/references/director_styles/11_villeneuve.md +188 -0
  263. package/resources/skills/cinematic-director/upstream/references/director_styles/12_fincher.md +185 -0
  264. package/resources/skills/cinematic-director/upstream/references/director_styles/13_refn.md +186 -0
  265. package/resources/skills/cinematic-director/upstream/references/director_styles/14_bi_gan.md +188 -0
  266. package/resources/skills/cinematic-director/upstream/references/director_styles/15_zhang_yimou.md +192 -0
  267. package/resources/skills/cinematic-director/upstream/references/director_styles/16_hou_hsiao_hsien.md +192 -0
  268. package/resources/skills/cinematic-director/upstream/references/director_styles/17_park_chan_wook.md +192 -0
  269. package/resources/skills/cinematic-director/upstream/references/director_styles/18_malick.md +191 -0
  270. package/resources/skills/cinematic-director/upstream/references/director_styles/19_michael_mann.md +192 -0
  271. package/resources/skills/cinematic-director/upstream/references/director_styles/20_coen_brothers.md +194 -0
  272. package/resources/skills/cinematic-director/upstream/references/director_styles/README.md +89 -0
  273. package/resources/skills/cinematic-director/upstream/references/director_styles/example_comparisons.md +140 -0
  274. package/resources/skills/cinematic-director/upstream/references/editing-and-assembly.md +263 -0
  275. package/resources/skills/cinematic-director/upstream/references/failure-modes.md +594 -0
  276. package/resources/skills/cinematic-director/upstream/references/genre-playbooks.md +407 -0
  277. package/resources/skills/cinematic-director/upstream/references/image-model-adapters.md +290 -0
  278. package/resources/skills/cinematic-director/upstream/references/lighting-and-color.md +349 -0
  279. package/resources/skills/cinematic-director/upstream/references/product-and-macro.md +207 -0
  280. package/resources/skills/cinematic-director/upstream/references/production-workflow.md +238 -0
  281. package/resources/skills/cinematic-director/upstream/references/prompt-lexicon.md +602 -0
  282. package/resources/skills/cinematic-director/upstream/references/sound-and-dialogue.md +364 -0
  283. package/resources/skills/director-skills/manifest.json +541 -0
  284. package/resources/skills/director-skills/upstream/CHANGELOG.md +32 -0
  285. package/resources/skills/director-skills/upstream/LICENSE +21 -0
  286. package/resources/skills/director-skills/upstream/MANIFEST.md +366 -0
  287. package/resources/skills/director-skills/upstream/README.md +251 -0
  288. package/resources/skills/director-skills/upstream/RESEARCH_PROVENANCE.md +37 -0
  289. package/resources/skills/director-skills/upstream/SKILL.md +114 -0
  290. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/SKILL.md +81 -0
  291. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/checklists/continuity_checklist.md +8 -0
  292. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/examples/character_continuity_update.md +9 -0
  293. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/examples/location_continuity_update.md +9 -0
  294. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/references/continuity_system.md +21 -0
  295. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/references/golden_image_workflow.md +29 -0
  296. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/references/identity_anchors.md +14 -0
  297. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/references/visual_bible_system.md +15 -0
  298. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/templates/character_profile.md +15 -0
  299. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/templates/continuity_checklist.md +11 -0
  300. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/templates/costume_profile.md +12 -0
  301. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/templates/location_profile.md +14 -0
  302. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/templates/prop_profile.md +13 -0
  303. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/templates/visual_style_bible.md +15 -0
  304. package/resources/skills/director-skills/upstream/skills/character-location-prop-bible/tests/continuity_tests.md +6 -0
  305. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/SKILL.md +80 -0
  306. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/checklists/image_prompt_quality_checklist.md +10 -0
  307. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/examples/shot_list_to_image_prompts.md +4 -0
  308. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/references/image_prompt_components.md +22 -0
  309. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/references/lighting_and_photorealism.md +19 -0
  310. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/references/negative_prompt_patterns.md +18 -0
  311. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/references/prompt_anatomy.md +18 -0
  312. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/templates/character_reference_sheet_prompt.md +5 -0
  313. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/templates/cinematic_still_prompt.md +3 -0
  314. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/templates/keyframe_prompt.md +6 -0
  315. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/templates/location_reference_prompt.md +3 -0
  316. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/templates/prop_prompt.md +3 -0
  317. package/resources/skills/director-skills/upstream/skills/cinematic-image-prompting/tests/image_prompt_completeness_tests.md +5 -0
  318. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/SKILL.md +84 -0
  319. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/checklists/video_prompt_quality_checklist.md +9 -0
  320. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/examples/image_prompt_to_video_prompt.md +3 -0
  321. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/references/ai_film_production_pipeline.md +21 -0
  322. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/references/audio_motion_timing.md +16 -0
  323. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/references/camera_lens_movement.md +26 -0
  324. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/references/negative_prompt_patterns.md +18 -0
  325. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/references/prompt_anatomy.md +18 -0
  326. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/references/video_prompt_components.md +25 -0
  327. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/templates/image_to_video_prompt.md +5 -0
  328. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/templates/text_to_video_prompt.md +5 -0
  329. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/templates/video_beat_prompt.md +9 -0
  330. package/resources/skills/director-skills/upstream/skills/cinematic-video-prompting/tests/video_prompt_completeness_tests.md +5 -0
  331. package/resources/skills/director-skills/upstream/skills/model-adaptation/SKILL.md +82 -0
  332. package/resources/skills/director-skills/upstream/skills/model-adaptation/checklists/model_export_checklist.md +9 -0
  333. package/resources/skills/director-skills/upstream/skills/model-adaptation/examples/failed_model_transfer_diagnosis.md +5 -0
  334. package/resources/skills/director-skills/upstream/skills/model-adaptation/examples/image_prompt_translation.md +10 -0
  335. package/resources/skills/director-skills/upstream/skills/model-adaptation/examples/same_scene_across_models.md +9 -0
  336. package/resources/skills/director-skills/upstream/skills/model-adaptation/examples/universal_prompt_to_model_specific_exports.md +14 -0
  337. package/resources/skills/director-skills/upstream/skills/model-adaptation/examples/video_prompt_translation.md +9 -0
  338. package/resources/skills/director-skills/upstream/skills/model-adaptation/references/failure_modes_by_model.md +13 -0
  339. package/resources/skills/director-skills/upstream/skills/model-adaptation/references/image_model_profiles.md +226 -0
  340. package/resources/skills/director-skills/upstream/skills/model-adaptation/references/model_capability_matrix.md +24 -0
  341. package/resources/skills/director-skills/upstream/skills/model-adaptation/references/model_update_protocol.md +10 -0
  342. package/resources/skills/director-skills/upstream/skills/model-adaptation/references/parameter_compatibility.md +20 -0
  343. package/resources/skills/director-skills/upstream/skills/model-adaptation/references/prompt_translation_rules.md +18 -0
  344. package/resources/skills/director-skills/upstream/skills/model-adaptation/references/video_model_profiles.md +251 -0
  345. package/resources/skills/director-skills/upstream/skills/model-adaptation/templates/model_comparison_table.md +4 -0
  346. package/resources/skills/director-skills/upstream/skills/model-adaptation/templates/model_specific_prompt_export.md +21 -0
  347. package/resources/skills/director-skills/upstream/skills/model-adaptation/templates/multi_model_export_package.md +18 -0
  348. package/resources/skills/director-skills/upstream/skills/model-adaptation/templates/prompt_translation_report.md +13 -0
  349. package/resources/skills/director-skills/upstream/skills/model-adaptation/templates/universal_prompt_brief.md +25 -0
  350. package/resources/skills/director-skills/upstream/skills/model-adaptation/tests/model_routing_tests.md +8 -0
  351. package/resources/skills/director-skills/upstream/skills/model-adaptation/tests/prompt_translation_tests.md +7 -0
  352. package/resources/skills/director-skills/upstream/skills/model-adaptation/tests/research_provenance_tests.md +6 -0
  353. package/resources/skills/director-skills/upstream/skills/model-adaptation/tests/unknown_capability_tests.md +7 -0
  354. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/SKILL.md +82 -0
  355. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/checklists/diagnostic_checklist.md +8 -0
  356. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/checklists/release_quality_checklist.md +9 -0
  357. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/examples/failed_output_to_revised_prompt.md +10 -0
  358. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/examples/final_prompt_package_export.md +10 -0
  359. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/references/failure_modes.md +13 -0
  360. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/references/iteration_diagnostics.md +17 -0
  361. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/references/revision_loops.md +17 -0
  362. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/references/story_voice_release_qc.md +30 -0
  363. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/templates/failed_output_intake.md +13 -0
  364. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/templates/final_production_package.md +11 -0
  365. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/templates/prompt_revision_report.md +17 -0
  366. package/resources/skills/director-skills/upstream/skills/prompt-iteration-and-diagnostics/tests/prompt_quality_checklist_tests.md +6 -0
  367. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/SKILL.md +81 -0
  368. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/checklists/scene_quality_checklist.md +8 -0
  369. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/examples/scene_to_screenplay_excerpt.md +18 -0
  370. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/references/dialogue_and_subtext.md +15 -0
  371. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/references/fountain_workflow.md +29 -0
  372. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/references/scene_construction.md +20 -0
  373. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/references/screenplay_format.md +18 -0
  374. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/templates/beat_sheet.md +6 -0
  375. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/templates/dialogue_pass.md +9 -0
  376. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/templates/fountain_scene.md +25 -0
  377. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/templates/screenplay_scene.md +19 -0
  378. package/resources/skills/director-skills/upstream/skills/screenplay-and-scene-writing/tests/screenplay_scene_tests.md +6 -0
  379. package/resources/skills/director-skills/upstream/skills/short-film-development/SKILL.md +83 -0
  380. package/resources/skills/director-skills/upstream/skills/short-film-development/checklists/concept_quality_checklist.md +8 -0
  381. package/resources/skills/director-skills/upstream/skills/short-film-development/examples/idea_to_logline.md +13 -0
  382. package/resources/skills/director-skills/upstream/skills/short-film-development/examples/logline_to_outline.md +10 -0
  383. package/resources/skills/director-skills/upstream/skills/short-film-development/references/ai_storytelling_workflow.md +46 -0
  384. package/resources/skills/director-skills/upstream/skills/short-film-development/references/continuity_handoff.md +8 -0
  385. package/resources/skills/director-skills/upstream/skills/short-film-development/references/screenplay_structure.md +19 -0
  386. package/resources/skills/director-skills/upstream/skills/short-film-development/references/story_development_workflow.md +23 -0
  387. package/resources/skills/director-skills/upstream/skills/short-film-development/templates/beat_sheet.md +7 -0
  388. package/resources/skills/director-skills/upstream/skills/short-film-development/templates/idea_intake.md +16 -0
  389. package/resources/skills/director-skills/upstream/skills/short-film-development/templates/logline.md +10 -0
  390. package/resources/skills/director-skills/upstream/skills/short-film-development/templates/short_film_treatment.md +23 -0
  391. package/resources/skills/director-skills/upstream/skills/short-film-development/templates/short_story_plan.md +22 -0
  392. package/resources/skills/director-skills/upstream/skills/short-film-development/templates/story_premise.md +19 -0
  393. package/resources/skills/director-skills/upstream/skills/short-film-development/templates/story_revision_audit.md +22 -0
  394. package/resources/skills/director-skills/upstream/skills/short-film-development/tests/output_format_tests.md +3 -0
  395. package/resources/skills/director-skills/upstream/skills/short-film-development/tests/routing_tests.md +7 -0
  396. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/SKILL.md +77 -0
  397. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/checklists/shotlist_quality_checklist.md +8 -0
  398. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/examples/screenplay_scene_to_shot_list.md +8 -0
  399. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/references/camera_plan.md +11 -0
  400. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/references/production_breakdown.md +11 -0
  401. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/references/shotlist_schema.md +21 -0
  402. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/templates/asset_list.md +7 -0
  403. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/templates/camera_plan.md +10 -0
  404. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/templates/scene_breakdown.md +16 -0
  405. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/templates/shot_list.md +5 -0
  406. package/resources/skills/director-skills/upstream/skills/shotlist-and-visual-breakdown/tests/screenplay_to_shotlist_tests.md +5 -0
  407. package/resources/skills/director-skills/upstream/skills/style-cinematography-director/SKILL.md +77 -0
  408. package/resources/skills/director-skills/upstream/skills/style-cinematography-director/checklists/style_quality_checklist.md +8 -0
  409. package/resources/skills/director-skills/upstream/skills/style-cinematography-director/examples/genre_to_visual_direction.md +15 -0
  410. package/resources/skills/director-skills/upstream/skills/style-cinematography-director/references/camera_lens_movement.md +26 -0
  411. package/resources/skills/director-skills/upstream/skills/style-cinematography-director/references/cinematic_language.md +32 -0
  412. package/resources/skills/director-skills/upstream/skills/style-cinematography-director/references/genre_style_tone.md +17 -0
  413. package/resources/skills/director-skills/upstream/skills/style-cinematography-director/references/lighting_and_photorealism.md +19 -0
  414. package/resources/skills/director-skills/upstream/skills/style-cinematography-director/templates/visual_style_bible.md +33 -0
  415. package/resources/skills/director-skills/upstream/skills/style-cinematography-director/tests/style_translation_tests.md +5 -0
  416. package/resources/skills/director-skills/upstream/tests/master_router_tests.md +80 -0
  417. package/resources/skills/drama-production/manifest.json +933 -0
  418. package/resources/skills/drama-production/upstream/LICENSE +21 -0
  419. package/resources/skills/drama-production/upstream/skills/short-drama/SKILL.md +153 -0
  420. package/resources/skills/drama-production/upstream/skills/short-drama/agents/openai.yaml +4 -0
  421. package/resources/skills/drama-production/upstream/skills/short-drama/assets/creator-decision.example.jsonl +4 -0
  422. package/resources/skills/drama-production/upstream/skills/short-drama/assets/dashboard/app.js +1263 -0
  423. package/resources/skills/drama-production/upstream/skills/short-drama/assets/dashboard/index.html +114 -0
  424. package/resources/skills/drama-production/upstream/skills/short-drama/assets/dashboard/styles.css +297 -0
  425. package/resources/skills/drama-production/upstream/skills/short-drama/assets/production-observation.example.jsonl +2 -0
  426. package/resources/skills/drama-production/upstream/skills/short-drama/assets/project-template/short-drama.json +36 -0
  427. package/resources/skills/drama-production/upstream/skills/short-drama/assets/reference-observation.example.jsonl +2 -0
  428. package/resources/skills/drama-production/upstream/skills/short-drama/references/audience-reveal.md +21 -0
  429. package/resources/skills/drama-production/upstream/skills/short-drama/references/contract-and-ownership.md +45 -0
  430. package/resources/skills/drama-production/upstream/skills/short-drama/references/creator-documents.md +230 -0
  431. package/resources/skills/drama-production/upstream/skills/short-drama/references/creator-workflow.md +98 -0
  432. package/resources/skills/drama-production/upstream/skills/short-drama/references/form-cards/Q/347/211/210/350/241/250/350/276/276.md +73 -0
  433. package/resources/skills/drama-production/upstream/skills/short-drama/references/form-cards//344/272/214/347/273/264/345/212/250/346/200/201/346/274/253.md +74 -0
  434. package/resources/skills/drama-production/upstream/skills/short-drama/references/form-cards//345/233/275/346/274/253/344/272/214/346/254/241/345/205/203.md +79 -0
  435. package/resources/skills/drama-production/upstream/skills/short-drama/references/form-cards//345/256/236/346/213/215.md +75 -0
  436. package/resources/skills/drama-production/upstream/skills/short-drama/references/form-cards//346/260/264/345/242/250/347/254/224/350/247/246.md +85 -0
  437. package/resources/skills/drama-production/upstream/skills/short-drama/references/form-cards//351/243/216/346/240/274/345/214/226/344/270/211/347/273/264.md +72 -0
  438. package/resources/skills/drama-production/upstream/skills/short-drama/references/knowhow-index.md +85 -0
  439. package/resources/skills/drama-production/upstream/skills/short-drama/references/look-development.md +51 -0
  440. package/resources/skills/drama-production/upstream/skills/short-drama/references/pickup-and-alternate.md +24 -0
  441. package/resources/skills/drama-production/upstream/skills/short-drama/references/production-form-profiles.md +126 -0
  442. package/resources/skills/drama-production/upstream/skills/short-drama/references/reference-roles.md +53 -0
  443. package/resources/skills/drama-production/upstream/skills/short-drama/references/runtime-preflight.md +24 -0
  444. package/resources/skills/drama-production/upstream/skills/short-drama/scripts/creator_markdown_check.py +1413 -0
  445. package/resources/skills/drama-production/upstream/skills/short-drama/scripts/dashboard_server.py +1798 -0
  446. package/resources/skills/drama-production/upstream/skills/short-drama/scripts/project_tool.py +2454 -0
  447. package/resources/skills/drama-production/upstream/skills/short-drama/scripts/selftest.py +287 -0
  448. package/resources/skills/drama-production/upstream/skills/short-drama-assets/SKILL.md +76 -0
  449. package/resources/skills/drama-production/upstream/skills/short-drama-assets/agents/openai.yaml +4 -0
  450. package/resources/skills/drama-production/upstream/skills/short-drama-assets/assets/character-look.example.jsonl +3 -0
  451. package/resources/skills/drama-production/upstream/skills/short-drama-assets/assets/continuity.example.jsonl +4 -0
  452. package/resources/skills/drama-production/upstream/skills/short-drama-assets/assets/decisions.example.jsonl +5 -0
  453. package/resources/skills/drama-production/upstream/skills/short-drama-assets/assets/location-view.example.jsonl +3 -0
  454. package/resources/skills/drama-production/upstream/skills/short-drama-assets/assets/occurrences.example.jsonl +5 -0
  455. package/resources/skills/drama-production/upstream/skills/short-drama-assets/assets/prop-state.example.jsonl +3 -0
  456. package/resources/skills/drama-production/upstream/skills/short-drama-assets/examples/minimal/characters.jsonl +2 -0
  457. package/resources/skills/drama-production/upstream/skills/short-drama-assets/examples/minimal/looks.jsonl +2 -0
  458. package/resources/skills/drama-production/upstream/skills/short-drama-assets/references/asset-review-checklist.md +82 -0
  459. package/resources/skills/drama-production/upstream/skills/short-drama-assets/references/character-and-look.md +190 -0
  460. package/resources/skills/drama-production/upstream/skills/short-drama-assets/references/continuity-delta.md +120 -0
  461. package/resources/skills/drama-production/upstream/skills/short-drama-assets/references/continuity-lock.md +122 -0
  462. package/resources/skills/drama-production/upstream/skills/short-drama-assets/references/identity-vs-variant.md +140 -0
  463. package/resources/skills/drama-production/upstream/skills/short-drama-assets/references/location-and-view.md +84 -0
  464. package/resources/skills/drama-production/upstream/skills/short-drama-assets/references/occurrence-extraction.md +108 -0
  465. package/resources/skills/drama-production/upstream/skills/short-drama-assets/references/prop-and-state.md +126 -0
  466. package/resources/skills/drama-production/upstream/skills/short-drama-assets/references/stage-contract.md +43 -0
  467. package/resources/skills/drama-production/upstream/skills/short-drama-assets/references/voice-direction.md +179 -0
  468. package/resources/skills/drama-production/upstream/skills/short-drama-assets/scripts/asset_check.py +267 -0
  469. package/resources/skills/drama-production/upstream/skills/short-drama-assets/scripts/selftest.py +89 -0
  470. package/resources/skills/drama-production/upstream/skills/short-drama-develop/SKILL.md +157 -0
  471. package/resources/skills/drama-production/upstream/skills/short-drama-develop/agents/openai.yaml +4 -0
  472. package/resources/skills/drama-production/upstream/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -0
  473. package/resources/skills/drama-production/upstream/skills/short-drama-develop/assets/creative-brief.md +120 -0
  474. package/resources/skills/drama-production/upstream/skills/short-drama-develop/assets/episode-map.jsonl +1 -0
  475. package/resources/skills/drama-production/upstream/skills/short-drama-develop/assets/story-engine.md +181 -0
  476. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/adaptation-craft.md +219 -0
  477. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/creative-reference-intake.md +57 -0
  478. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/director-brief-craft.md +113 -0
  479. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/episode-design.md +509 -0
  480. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-and-hook-playbook.md +240 -0
  481. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//344/272/262/345/255/220/351/232/220/347/247/230.md +112 -0
  482. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//344/273/231/344/276/240/344/277/256/347/234/237.md +51 -0
  483. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//345/212/250/344/275/234/344/273/273/345/212/241.md +51 -0
  484. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//345/217/244/350/243/205/346/235/203/350/260/213.md +51 -0
  485. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +51 -0
  486. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//345/256/266/345/272/255/345/205/263/347/263/273.md +51 -0
  487. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//346/202/254/347/226/221/350/247/204/345/210/231.md +51 -0
  488. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//347/224/237/346/264/273/346/265/201.md +51 -0
  489. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//347/240/264/351/225/234/351/207/215/345/234/206.md +109 -0
  490. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//350/201/214/345/234/272/345/226/234/345/211/247.md +51 -0
  491. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//350/261/252/351/227/250/345/251/232/346/201/213.md +51 -0
  492. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards//350/272/253/344/273/275/351/224/231/344/275/215.md +51 -0
  493. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/genre-cards.md +92 -0
  494. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/mechanism-loop.md +282 -0
  495. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/multi-episode-intake.md +128 -0
  496. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/premise-devices.md +211 -0
  497. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/reveal-reversal-payoff.md +99 -0
  498. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/serial-character-and-memory.md +293 -0
  499. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/stage-contract.md +88 -0
  500. package/resources/skills/drama-production/upstream/skills/short-drama-develop/references/story-craft.md +359 -0
  501. package/resources/skills/drama-production/upstream/skills/short-drama-develop/scripts/episode_intake.py +699 -0
  502. package/resources/skills/drama-production/upstream/skills/short-drama-develop/scripts/selftest.py +47 -0
  503. package/resources/skills/drama-production/upstream/skills/short-drama-edit/SKILL.md +146 -0
  504. package/resources/skills/drama-production/upstream/skills/short-drama-edit/agents/openai.yaml +4 -0
  505. package/resources/skills/drama-production/upstream/skills/short-drama-edit/assets/remotion/README.md +60 -0
  506. package/resources/skills/drama-production/upstream/skills/short-drama-edit/assets/remotion/package.json +15 -0
  507. package/resources/skills/drama-production/upstream/skills/short-drama-edit/assets/remotion/remotion.config.ts +6 -0
  508. package/resources/skills/drama-production/upstream/skills/short-drama-edit/assets/remotion/src/Root.tsx +26 -0
  509. package/resources/skills/drama-production/upstream/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +88 -0
  510. package/resources/skills/drama-production/upstream/skills/short-drama-edit/assets/remotion/src/font.ts +46 -0
  511. package/resources/skills/drama-production/upstream/skills/short-drama-edit/assets/remotion/src/index.ts +4 -0
  512. package/resources/skills/drama-production/upstream/skills/short-drama-edit/assets/remotion/src/schema.ts +32 -0
  513. package/resources/skills/drama-production/upstream/skills/short-drama-edit/assets/remotion/tsconfig.json +13 -0
  514. package/resources/skills/drama-production/upstream/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +43 -0
  515. package/resources/skills/drama-production/upstream/skills/short-drama-edit/references/cut-craft.md +38 -0
  516. package/resources/skills/drama-production/upstream/skills/short-drama-edit/references/delivery-verify.md +29 -0
  517. package/resources/skills/drama-production/upstream/skills/short-drama-edit/references/generated-footage.md +54 -0
  518. package/resources/skills/drama-production/upstream/skills/short-drama-edit/references/sound-and-subtitles.md +60 -0
  519. package/resources/skills/drama-production/upstream/skills/short-drama-edit/references/stage-contract.md +51 -0
  520. package/resources/skills/drama-production/upstream/skills/short-drama-edit/scripts/edit_tool.py +1156 -0
  521. package/resources/skills/drama-production/upstream/skills/short-drama-edit/scripts/selftest.py +520 -0
  522. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/SKILL.md +73 -0
  523. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/agents/openai.yaml +4 -0
  524. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/assets/image-prompt-spec.jsonl.md +187 -0
  525. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/assets/image-prompts.md +42 -0
  526. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/assets/lookdev-frame-spec.jsonl.md +128 -0
  527. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/assets/lookdev-prompts.md +34 -0
  528. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/examples/minimal-image-prompt-specs.jsonl +2 -0
  529. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/references/character-and-look.md +153 -0
  530. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/references/common-recipe.md +241 -0
  531. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/references/edit-and-revision.md +110 -0
  532. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/references/location-plate.md +151 -0
  533. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/references/look-and-state-variant.md +97 -0
  534. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/references/lookdev-frame.md +34 -0
  535. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/references/production-sheet-recipes.md +177 -0
  536. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/references/prop-plate.md +137 -0
  537. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/references/review-and-fixtures.md +92 -0
  538. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/references/stage-contract.md +32 -0
  539. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/scripts/image_prompt_check.py +443 -0
  540. package/resources/skills/drama-production/upstream/skills/short-drama-image-prompts/scripts/selftest.py +95 -0
  541. package/resources/skills/drama-production/upstream/skills/short-drama-novel-analyze/SKILL.md +245 -0
  542. package/resources/skills/drama-production/upstream/skills/short-drama-novel-analyze/agents/openai.yaml +4 -0
  543. package/resources/skills/drama-production/upstream/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +3 -0
  544. package/resources/skills/drama-production/upstream/skills/short-drama-novel-analyze/references/adaptation-triage.md +116 -0
  545. package/resources/skills/drama-production/upstream/skills/short-drama-novel-analyze/references/adaptation-value.md +124 -0
  546. package/resources/skills/drama-production/upstream/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +155 -0
  547. package/resources/skills/drama-production/upstream/skills/short-drama-novel-analyze/references/chapter-extraction.md +144 -0
  548. package/resources/skills/drama-production/upstream/skills/short-drama-novel-analyze/references/stage-contract.md +67 -0
  549. package/resources/skills/drama-production/upstream/skills/short-drama-novel-analyze/scripts/novel_index.py +651 -0
  550. package/resources/skills/drama-production/upstream/skills/short-drama-novel-analyze/scripts/selftest.py +51 -0
  551. package/resources/skills/drama-production/upstream/skills/short-drama-produce/SKILL.md +183 -0
  552. package/resources/skills/drama-production/upstream/skills/short-drama-produce/agents/openai.yaml +4 -0
  553. package/resources/skills/drama-production/upstream/skills/short-drama-produce/references/adapter-contract.md +219 -0
  554. package/resources/skills/drama-production/upstream/skills/short-drama-produce/references/providers/gpt-image-2.md +24 -0
  555. package/resources/skills/drama-production/upstream/skills/short-drama-produce/references/providers/minimax-h3-video.md +86 -0
  556. package/resources/skills/drama-production/upstream/skills/short-drama-produce/references/providers/minimax-music.md +25 -0
  557. package/resources/skills/drama-production/upstream/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
  558. package/resources/skills/drama-production/upstream/skills/short-drama-produce/references/providers/seedance.md +64 -0
  559. package/resources/skills/drama-production/upstream/skills/short-drama-produce/scripts/fixture_adapter.py +77 -0
  560. package/resources/skills/drama-production/upstream/skills/short-drama-produce/scripts/production_tool.py +2205 -0
  561. package/resources/skills/drama-production/upstream/skills/short-drama-produce/scripts/provider_adapters.py +1747 -0
  562. package/resources/skills/drama-production/upstream/skills/short-drama-produce/scripts/selftest.py +135 -0
  563. package/resources/skills/drama-production/upstream/skills/short-drama-review/SKILL.md +118 -0
  564. package/resources/skills/drama-production/upstream/skills/short-drama-review/agents/openai.yaml +4 -0
  565. package/resources/skills/drama-production/upstream/skills/short-drama-review/assets/finding-template.jsonl +2 -0
  566. package/resources/skills/drama-production/upstream/skills/short-drama-review/assets/supersession-decision.example.json +42 -0
  567. package/resources/skills/drama-production/upstream/skills/short-drama-review/assets/verdict-template.json +32 -0
  568. package/resources/skills/drama-production/upstream/skills/short-drama-review/examples/minimal-findings.jsonl +2 -0
  569. package/resources/skills/drama-production/upstream/skills/short-drama-review/examples/minimal-verdict.json +34 -0
  570. package/resources/skills/drama-production/upstream/skills/short-drama-review/references/anti-template-repair.md +109 -0
  571. package/resources/skills/drama-production/upstream/skills/short-drama-review/references/production-quality-gates.md +276 -0
  572. package/resources/skills/drama-production/upstream/skills/short-drama-review/references/project-calibration.md +83 -0
  573. package/resources/skills/drama-production/upstream/skills/short-drama-review/references/review-method.md +81 -0
  574. package/resources/skills/drama-production/upstream/skills/short-drama-review/references/rubric-assets-prompts.md +111 -0
  575. package/resources/skills/drama-production/upstream/skills/short-drama-review/references/rubric-source-analysis.md +108 -0
  576. package/resources/skills/drama-production/upstream/skills/short-drama-review/references/rubric-story-script.md +264 -0
  577. package/resources/skills/drama-production/upstream/skills/short-drama-review/references/rubric-visual-motion.md +184 -0
  578. package/resources/skills/drama-production/upstream/skills/short-drama-review/references/stage-contract.md +28 -0
  579. package/resources/skills/drama-production/upstream/skills/short-drama-review/scripts/review_check.py +325 -0
  580. package/resources/skills/drama-production/upstream/skills/short-drama-review/scripts/selftest.py +87 -0
  581. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/SKILL.md +175 -0
  582. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/agents/openai.yaml +4 -0
  583. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/assets/coverage-audition.example.jsonl +2 -0
  584. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/assets/coverage-template.json +49 -0
  585. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/assets/keyframe-prompts.md +36 -0
  586. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/assets/keyframe-template.jsonl +2 -0
  587. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/assets/revision-lineage.fragment.json +12 -0
  588. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/assets/scene-visual-plan.example.jsonl +2 -0
  589. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/assets/shot-template.jsonl +2 -0
  590. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/blocking-playbooks.md +216 -0
  591. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/comic-keyframe-lexicon.md +156 -0
  592. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/coverage-audition.md +34 -0
  593. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/keyframe-craft.md +174 -0
  594. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
  595. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/production-shot-grammar.md +279 -0
  596. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/review-and-fixtures.md +36 -0
  597. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/scene-visual-plan.md +30 -0
  598. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +155 -0
  599. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/shot-craft.md +266 -0
  600. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/shot-revision-identity.md +25 -0
  601. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/references/stage-contract.md +57 -0
  602. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/scripts/selftest.py +191 -0
  603. package/resources/skills/drama-production/upstream/skills/short-drama-storyboard/scripts/storyboard_check.py +824 -0
  604. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/SKILL.md +154 -0
  605. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/agents/openai.yaml +4 -0
  606. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/assets/coverage-scope.fragment.json +21 -0
  607. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/assets/delivery-container.jsonl.md +101 -0
  608. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +217 -0
  609. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/assets/motion-terminal.example.jsonl +2 -0
  610. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/assets/music-spec.jsonl.md +31 -0
  611. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/assets/performance.fragment.json +38 -0
  612. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/assets/video-prompts.md +67 -0
  613. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/examples/minimal-music-specs.jsonl +2 -0
  614. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/camera-audio-continuity.md +259 -0
  615. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/delivery-profile.md +273 -0
  616. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/generability.md +93 -0
  617. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/minimax-h3.md +253 -0
  618. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/motion-recipe.md +315 -0
  619. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/performance-action-timing.md +209 -0
  620. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/production-prompt-grammar.md +304 -0
  621. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/review-and-fixtures.md +139 -0
  622. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/seedance-2.0.md +50 -0
  623. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/seedance-2.5.md +122 -0
  624. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/stage-contract.md +60 -0
  625. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/references/target-model-profile.md +116 -0
  626. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/scripts/container_check.py +329 -0
  627. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/scripts/motion_timing_check.py +450 -0
  628. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/scripts/music_spec_check.py +327 -0
  629. package/resources/skills/drama-production/upstream/skills/short-drama-video-prompts/scripts/selftest.py +82 -0
  630. package/resources/skills/drama-production/upstream/skills/short-drama-write/SKILL.md +99 -0
  631. package/resources/skills/drama-production/upstream/skills/short-drama-write/agents/openai.yaml +4 -0
  632. package/resources/skills/drama-production/upstream/skills/short-drama-write/assets/beats.jsonl +2 -0
  633. package/resources/skills/drama-production/upstream/skills/short-drama-write/assets/episode-card-standalone.json +120 -0
  634. package/resources/skills/drama-production/upstream/skills/short-drama-write/assets/episode-card.json +55 -0
  635. package/resources/skills/drama-production/upstream/skills/short-drama-write/assets/screenplay.md +36 -0
  636. package/resources/skills/drama-production/upstream/skills/short-drama-write/assets/voice-record-sheet.jsonl.md +89 -0
  637. package/resources/skills/drama-production/upstream/skills/short-drama-write/references/dialogue-craft.md +526 -0
  638. package/resources/skills/drama-production/upstream/skills/short-drama-write/references/production-format-dialect.md +273 -0
  639. package/resources/skills/drama-production/upstream/skills/short-drama-write/references/scene-handoff-capsule.md +25 -0
  640. package/resources/skills/drama-production/upstream/skills/short-drama-write/references/scene-sound-dramaturgy.md +43 -0
  641. package/resources/skills/drama-production/upstream/skills/short-drama-write/references/screenplay-format.md +266 -0
  642. package/resources/skills/drama-production/upstream/skills/short-drama-write/references/script-craft.md +745 -0
  643. package/resources/skills/drama-production/upstream/skills/short-drama-write/references/stage-contract.md +36 -0
  644. package/resources/skills/drama-production/upstream/skills/short-drama-write/references/substitutable-realization.md +107 -0
  645. package/resources/skills/drama-production/upstream/skills/short-drama-write/scripts/duration_estimate.py +309 -0
  646. package/resources/skills/drama-production/upstream/skills/short-drama-write/scripts/screenplay_index.py +1091 -0
  647. package/resources/skills/drama-production/upstream/skills/short-drama-write/scripts/selftest.py +229 -0
  648. package/resources/skills/drama-production/upstream/skills/short-drama-write/scripts/voice_sheet_check.py +416 -0
  649. package/resources/skills/viora-canvas-production/manifest.json +23 -0
  650. package/resources/skills/viora-canvas-production/references/canvas-contract.md +50 -0
  651. package/resources/skills/viora-canvas-production/references/creative-production.md +50 -0
  652. package/resources/skills/viora-canvas-production/references/generation-delivery.md +36 -0
  653. package/resources/skills/viora-canvas-production/references/production-ledger.md +25 -0
package/lib/client.js CHANGED
@@ -35,7 +35,7 @@ __export(client_exports, {
35
35
  inject: () => inject
36
36
  });
37
37
  module.exports = __toCommonJS(client_exports);
38
- var import_react50 = require("react");
38
+ var import_react51 = require("react");
39
39
 
40
40
  // src/workspace-ownership.ts
41
41
  var WORKSPACE_ACTIVATE_EVENT = "@lemoncat7/dsh-plugin-ui/workspace-activate";
@@ -851,13 +851,13 @@ function excavateModules(modules, excavation) {
851
851
  });
852
852
  });
853
853
  }
854
- function getImageSettings(cells, size, margin, imageSettings) {
854
+ function getImageSettings(cells, size2, margin, imageSettings) {
855
855
  if (imageSettings == null) {
856
856
  return null;
857
857
  }
858
858
  const numCells = cells.length + margin * 2;
859
- const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);
860
- const scale = numCells / size;
859
+ const defaultSize = Math.floor(size2 * DEFAULT_IMG_SCALE);
860
+ const scale = numCells / size2;
861
861
  const w = (imageSettings.width || defaultSize) * scale;
862
862
  const h = (imageSettings.height || defaultSize) * scale;
863
863
  const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;
@@ -887,7 +887,7 @@ function useQRCode({
887
887
  includeMargin,
888
888
  marginSize,
889
889
  imageSettings,
890
- size,
890
+ size: size2,
891
891
  boostLevel
892
892
  }) {
893
893
  let qrcode = import_react.default.useMemo(() => {
@@ -911,7 +911,7 @@ function useQRCode({
911
911
  const numCells2 = cells2.length + margin2 * 2;
912
912
  const calculatedImageSettings2 = getImageSettings(
913
913
  cells2,
914
- size,
914
+ size2,
915
915
  margin2,
916
916
  imageSettings
917
917
  );
@@ -921,7 +921,7 @@ function useQRCode({
921
921
  numCells: numCells2,
922
922
  calculatedImageSettings: calculatedImageSettings2
923
923
  };
924
- }, [qrcode, size, imageSettings, includeMargin, marginSize]);
924
+ }, [qrcode, size2, imageSettings, includeMargin, marginSize]);
925
925
  return {
926
926
  qrcode,
927
927
  margin,
@@ -942,7 +942,7 @@ var QRCodeCanvas = import_react.default.forwardRef(
942
942
  function QRCodeCanvas2(props, forwardedRef) {
943
943
  const _a = props, {
944
944
  value,
945
- size = DEFAULT_SIZE,
945
+ size: size2 = DEFAULT_SIZE,
946
946
  level = DEFAULT_LEVEL,
947
947
  bgColor = DEFAULT_BGCOLOR,
948
948
  fgColor = DEFAULT_FGCOLOR,
@@ -987,7 +987,7 @@ var QRCodeCanvas = import_react.default.forwardRef(
987
987
  includeMargin,
988
988
  marginSize,
989
989
  imageSettings,
990
- size
990
+ size: size2
991
991
  });
992
992
  import_react.default.useEffect(() => {
993
993
  if (_canvas.current != null) {
@@ -1008,8 +1008,8 @@ var QRCodeCanvas = import_react.default.forwardRef(
1008
1008
  }
1009
1009
  }
1010
1010
  const pixelRatio = window.devicePixelRatio || 1;
1011
- canvas.height = canvas.width = size * pixelRatio;
1012
- const scale = size / numCells * pixelRatio;
1011
+ canvas.height = canvas.width = size2 * pixelRatio;
1012
+ const scale = size2 / numCells * pixelRatio;
1013
1013
  ctx.scale(scale, scale);
1014
1014
  ctx.fillStyle = bgColor;
1015
1015
  ctx.fillRect(0, 0, numCells, numCells);
@@ -1042,7 +1042,7 @@ var QRCodeCanvas = import_react.default.forwardRef(
1042
1042
  import_react.default.useEffect(() => {
1043
1043
  setIsImageLoaded(false);
1044
1044
  }, [imgSrc]);
1045
- const canvasStyle = __spreadValues({ height: size, width: size }, style);
1045
+ const canvasStyle = __spreadValues({ height: size2, width: size2 }, style);
1046
1046
  let img = null;
1047
1047
  if (imgSrc != null) {
1048
1048
  img = /* @__PURE__ */ import_react.default.createElement(
@@ -1063,8 +1063,8 @@ var QRCodeCanvas = import_react.default.forwardRef(
1063
1063
  "canvas",
1064
1064
  __spreadValues({
1065
1065
  style: canvasStyle,
1066
- height: size,
1067
- width: size,
1066
+ height: size2,
1067
+ width: size2,
1068
1068
  ref: setCanvasRef,
1069
1069
  role: "img"
1070
1070
  }, otherProps)
@@ -1076,7 +1076,7 @@ var QRCodeSVG = import_react.default.forwardRef(
1076
1076
  function QRCodeSVG2(props, forwardedRef) {
1077
1077
  const _a = props, {
1078
1078
  value,
1079
- size = DEFAULT_SIZE,
1079
+ size: size2 = DEFAULT_SIZE,
1080
1080
  level = DEFAULT_LEVEL,
1081
1081
  bgColor = DEFAULT_BGCOLOR,
1082
1082
  fgColor = DEFAULT_FGCOLOR,
@@ -1107,7 +1107,7 @@ var QRCodeSVG = import_react.default.forwardRef(
1107
1107
  includeMargin,
1108
1108
  marginSize,
1109
1109
  imageSettings,
1110
- size
1110
+ size: size2
1111
1111
  });
1112
1112
  let cellsToDraw = cells;
1113
1113
  let image = null;
@@ -1136,8 +1136,8 @@ var QRCodeSVG = import_react.default.forwardRef(
1136
1136
  return /* @__PURE__ */ import_react.default.createElement(
1137
1137
  "svg",
1138
1138
  __spreadValues({
1139
- height: size,
1140
- width: size,
1139
+ height: size2,
1140
+ width: size2,
1141
1141
  viewBox: `0 0 ${numCells} ${numCells}`,
1142
1142
  ref: forwardedRef,
1143
1143
  role: "img"
@@ -2216,6 +2216,14 @@ body[data-ds-dark-theme] .dsh-partner-workspace {
2216
2216
  .dsh-partner-concern-resolved article { display: grid; min-height: 38px; grid-template-columns: 22px minmax(0, 1fr) auto; align-items: center; gap: 7px; padding: 4px 10px; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 60%, transparent); }
2217
2217
  .dsh-partner-concern-resolved article > span { display: grid; width: 20px; height: 20px; border-radius: 7px; place-items: center; color: var(--partner-accent); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }
2218
2218
  .dsh-partner-concern-resolved article strong { overflow: hidden; font-size: var(--partner-font-caption); font-weight: 560; text-overflow: ellipsis; white-space: nowrap; }
2219
+ .dsh-partner-concern-resolved-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; min-width: 0; }
2220
+ .dsh-partner-concern-resolved-actions > button { min-height: 32px; white-space: nowrap; }
2221
+ .dsh-partner-concern-resolved-actions > button.is-danger:hover { color: var(--partner-danger); border-color: var(--partner-danger); }
2222
+ @media (max-width: 600px) {
2223
+ .dsh-partner-concern-resolved article { grid-template-columns: 22px minmax(0, 1fr); padding-block: 8px; }
2224
+ .dsh-partner-concern-resolved-actions { grid-column: 2; }
2225
+ .dsh-partner-concern-resolved-actions > button { min-height: 44px; }
2226
+ }
2219
2227
  .dsh-partner-concern-archive { min-width: 0; border-top: 1px solid var(--partner-border); }
2220
2228
  .dsh-partner-concern-archive-toggle { display: flex; align-items: center; justify-content: space-between; gap: 16px; width: 100%; min-height: 68px; padding: 14px 16px; border: 0; border-radius: 10px; text-align: left; color: var(--partner-text-secondary); background: transparent; font: inherit; cursor: pointer; transition: background .16s ease; }
2221
2229
  .dsh-partner-concern-archive-toggle > span { display: grid; gap: 5px; min-width: 0; }
@@ -2758,6 +2766,41 @@ body[data-ds-dark-theme] .dsh-partner-workspace {
2758
2766
  .dsh-partner-record-options button small { flex-shrink: 0; color: var(--partner-text-tertiary); }
2759
2767
  .dsh-partner-record-selection, .dsh-partner-record-summary { margin: 0; padding: 8px 12px; font-size: var(--partner-font-caption); color: var(--partner-text-secondary); overflow-wrap: anywhere; }
2760
2768
  .dsh-partner-record-selection { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
2769
+ .dsh-partner-workspace .attachment-storage-block { padding: 16px; gap: 10px; }
2770
+ #partner-attachment-storage { min-width: 0; font: var(--partner-font-body)/1.5 var(--partner-font-family); }
2771
+ #partner-attachment-storage :is(form, label, p) { margin: 0; }
2772
+ #partner-attachment-storage :is(.attachment-storage-overview, form, .attachment-storage-filters, .attachment-storage-selection) { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
2773
+ #partner-attachment-storage .attachment-storage-usage { flex: 1 1 180px; display: grid; gap: 2px; font-variant-numeric: tabular-nums; }
2774
+ #partner-attachment-storage small { color: var(--partner-text-secondary); font-size: 12px; }
2775
+ #partner-attachment-storage label { display: inline-flex; align-items: center; gap: 6px; min-width: 0; font-size: 13px; color: var(--partner-text-secondary); }
2776
+ #partner-attachment-storage :is(button, select, input[type=number]) { appearance: none !important; box-sizing: border-box; width: auto; min-width: 0; max-width: 100%; min-height: 32px; height: 32px; padding: 4px 10px !important; border: 1px solid var(--partner-border) !important; border-radius: 8px !important; background: var(--partner-control) !important; color: var(--partner-text) !important; box-shadow: none !important; font: 13px/1.4 var(--partner-font-family) !important; }
2777
+ #partner-attachment-storage button { cursor: pointer; white-space: nowrap; }
2778
+ #partner-attachment-storage button:hover:not(:disabled) { background: var(--partner-card-surface) !important; }
2779
+ #partner-attachment-storage input[type=number] { width: 86px; font-variant-numeric: tabular-nums; }
2780
+ #partner-attachment-storage select { max-width: 160px; padding-right: 28px !important; text-overflow: ellipsis; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='m4 6 4 4 4-4' fill='none' stroke='%23909095' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E") !important; background-repeat: no-repeat !important; background-position: right 7px center !important; }
2781
+ #partner-attachment-storage :is(button,input,select,summary):focus-visible { outline: 2px solid var(--partner-focus-ring); outline-offset: 2px; }
2782
+ #partner-attachment-storage :disabled { opacity: .5; cursor: not-allowed; }
2783
+ #attachment-storage-manager { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--partner-border); display: grid; gap: 10px; }
2784
+ #partner-attachment-storage .attachment-storage-list { max-height: 360px; overflow-y: auto; scrollbar-width: thin; }
2785
+ #partner-attachment-storage .attachment-storage-row { display: flex; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--partner-border); }
2786
+ #partner-attachment-storage .attachment-storage-row > span { flex: 1; min-width: 0; }
2787
+ #partner-attachment-storage .attachment-storage-row strong { display: block; color: var(--partner-text); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2788
+ #partner-attachment-storage .attachment-storage-row small { display: block; overflow-wrap: anywhere; }
2789
+ #partner-attachment-storage input[type=checkbox] { flex: 0 0 16px; width: 16px; height: 16px; margin: 0; accent-color: var(--partner-accent-strong); }
2790
+ #partner-attachment-storage .attachment-storage-help { font-size: 12px; color: var(--partner-text-secondary); }
2791
+ #partner-attachment-storage .attachment-storage-help summary { cursor: pointer; padding: 4px 0; }
2792
+ #partner-attachment-storage .attachment-storage-help p { margin: 6px 0; }
2793
+ #partner-attachment-storage code { display: block; overflow-wrap: anywhere; font-size: 12px; }
2794
+ #partner-attachment-storage > :is([role=alert],[role=status]) { margin-top: 8px; font-size: 13px; }
2795
+ @media (pointer: coarse) {
2796
+ #partner-attachment-storage :is(button,select,input[type=number]) { min-height: 40px; height: 40px; }
2797
+ #partner-attachment-storage .attachment-storage-row { min-height: 44px; }
2798
+ }
2799
+ @media (max-width: 540px) {
2800
+ #partner-attachment-storage .attachment-storage-usage { flex-basis: 100%; }
2801
+ #partner-attachment-storage :is(select,input[type=number]) { font-size: 16px !important; }
2802
+ #partner-attachment-storage select { max-width: 145px; }
2803
+ }
2761
2804
  `;
2762
2805
 
2763
2806
  // src/ui/workspace-ui.css
@@ -3287,7 +3330,7 @@ function WorkspaceDialog({ eyebrow = "CREATE & CONFIGURE", title, detail, close,
3287
3330
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { id: titleId, children: title }),
3288
3331
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { id: detailId, children: detail })
3289
3332
  ] }),
3290
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", onClick: close, "aria-label": "\u5173\u95ED", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.IconCloseOutline16, { size: 16 }) })
3333
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", onClick: close, "aria-label": "\u5173\u95ED", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.IconCloseOutlineRegular, { size: 16 }) })
3291
3334
  ] }),
3292
3335
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dsh-partner-workspace-dialog-body", children })
3293
3336
  ] }) });
@@ -3300,7 +3343,7 @@ function WorkspaceNotice({ children, kind = "error" }) {
3300
3343
  }
3301
3344
  function CollectionEmpty({ title, detail, action }) {
3302
3345
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsh-partner-collection-empty", children: [
3303
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.IconAgentPresetOutline16, { size: 18 }) }),
3346
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.IconAgentPresetOutlineRegular, { size: 18 }) }),
3304
3347
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: title }),
3305
3348
  detail && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: detail }),
3306
3349
  action
@@ -3360,7 +3403,7 @@ function SectionHeading({ eyebrow, title, detail }) {
3360
3403
  }
3361
3404
  function ContentState({ title, detail, action, compact = false }) {
3362
3405
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: `dsh-partner-state${compact ? " is-compact" : ""}`, children: [
3363
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.IconAgentPresetOutline16, { size: 20 }),
3406
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.IconAgentPresetOutlineRegular, { size: 20 }),
3364
3407
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("strong", { children: title }),
3365
3408
  detail && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: detail }),
3366
3409
  action
@@ -4006,11 +4049,11 @@ function MemoryLibrary({ companionId, scopeId, collection, layers, enabled, chan
4006
4049
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("section", { className: "dsh-partner-memory-library-v2", children: [
4007
4050
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("nav", { className: "dsh-partner-memory-nav", "aria-label": "\u8BB0\u5FC6\u5185\u5BB9", children: [
4008
4051
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", "aria-pressed": mode === "memory" || mode === "scenes", onClick: () => selectMode("memory"), children: [
4009
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives3.IconDataOutline16, { size: 16 }),
4052
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives3.IconDataOutlineRegular, { size: 16 }),
4010
4053
  "\u8BB0\u5FC6"
4011
4054
  ] }),
4012
4055
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", "aria-pressed": mode === "reflection" || mode === "history", onClick: () => selectMode("reflection"), children: [
4013
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives3.IconBrowseOutline16, { size: 16 }),
4056
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives3.IconBrowseOutlineRegular, { size: 16 }),
4014
4057
  "\u56DE\u987E"
4015
4058
  ] }),
4016
4059
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("details", { className: "dsh-partner-memory-more", ref: more, onKeyDown: (event) => {
@@ -4026,16 +4069,16 @@ function MemoryLibrary({ companionId, scopeId, collection, layers, enabled, chan
4026
4069
  ] }),
4027
4070
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { children: [
4028
4071
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", onClick: () => selectMode("scenes"), children: [
4029
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives3.IconDataOutline16, { size: 16 }),
4072
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives3.IconDataOutlineRegular, { size: 16 }),
4030
4073
  "\u573A\u666F\u6458\u8981"
4031
4074
  ] }),
4032
4075
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", onClick: () => selectMode("experiences"), children: [
4033
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives3.IconListPenOutline16, { size: 16 }),
4076
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives3.IconListPenOutlineRegular, { size: 16 }),
4034
4077
  "\u7ECF\u9A8C\u5BA1\u6838 ",
4035
4078
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("small", { children: layers?.experiences.filter((item) => item.status === "draft").length ?? 0 })
4036
4079
  ] }),
4037
4080
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", onClick: () => selectMode("graph"), children: [
4038
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives3.IconLinkOutline16, { size: 16 }),
4081
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives3.IconLinkOutlineRegular, { size: 16 }),
4039
4082
  "\u5173\u7CFB\u56FE\u8C31"
4040
4083
  ] })
4041
4084
  ] })
@@ -4346,7 +4389,7 @@ function MemoryPanel({ companion, snapshot, openSession, startSession, renewSess
4346
4389
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "dsh-partner-memory-badge", children: companion.automation.memory.enabled ? "\u5B66\u4E60\u5DF2\u5F00\u542F" : "\u5B66\u4E60\u5DF2\u6682\u505C" }),
4347
4390
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("button", { type: "button", "aria-label": "\u5237\u65B0\u8BB0\u5FC6", disabled: collection.loading || layers.loading, onClick: () => {
4348
4391
  void reload();
4349
- }, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_dsh_client_ui_primitives4.IconRefreshOutline16, { size: 16 }) })
4392
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_dsh_client_ui_primitives4.IconRefreshOutlineRegular, { size: 16 }) })
4350
4393
  ] }),
4351
4394
  (error || collection.error || layers.error) && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(WorkspaceNotice, { children: error || collection.error || layers.error }),
4352
4395
  notice && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(WorkspaceNotice, { kind: "success", children: notice }),
@@ -4479,18 +4522,20 @@ function ArchivedConcerns({ companionId, onChanged }) {
4479
4522
  const contentId = (0, import_react13.useId)();
4480
4523
  const [open, setOpen] = (0, import_react13.useState)(false);
4481
4524
  const [offset, setOffset] = (0, import_react13.useState)(0);
4482
- const resource = useMemoryResource(open ? `/companions/${encodeURIComponent(companionId)}/concerns/archived?offset=${offset}` : void 0);
4525
+ const resource = useMemoryResource(`/companions/${encodeURIComponent(companionId)}/concerns/archived?offset=${offset}`, 15e3);
4483
4526
  const refresh = async () => {
4484
- await resource.reload();
4527
+ if (offset > 0 && resource.data?.items.length === 1) setOffset(offset - 50);
4528
+ else await resource.reload();
4485
4529
  await onChanged();
4486
4530
  };
4531
+ if (!resource.error && (!resource.data || offset === 0 && resource.data.items.length === 0)) return null;
4487
4532
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("section", { className: "dsh-partner-concern-archive", children: [
4488
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("button", { type: "button", className: "dsh-partner-concern-archive-toggle", "aria-label": "\u5DF2\u5F52\u6863\u5173\u6CE8 \xB7 \u67E5\u770B\u4E0E\u6E05\u7406", "aria-expanded": open, "aria-controls": open ? contentId : void 0, onClick: () => setOpen(!open), children: [
4533
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("button", { type: "button", className: "dsh-partner-concern-archive-toggle", "aria-label": "\u5DF2\u505C\u6B62\u5173\u6CE8 \xB7 \u67E5\u770B\u4E0E\u6E05\u7406", "aria-expanded": open, "aria-controls": open ? contentId : void 0, onClick: () => setOpen(!open), children: [
4489
4534
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { children: [
4490
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("strong", { children: "\u5DF2\u5F52\u6863\u5173\u6CE8" }),
4491
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("small", { children: "\u5DF2\u505C\u6B62\u5173\u6CE8\uFF0C\u53EF\u6309\u9700\u6E05\u7406" })
4535
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("strong", { children: "\u5DF2\u505C\u6B62\u5173\u6CE8" }),
4536
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("small", { children: "\u4E0D\u518D\u5173\u6CE8\u6216\u957F\u671F\u672A\u6D3B\u8DC3\u800C\u81EA\u52A8\u505C\u6B62\u7684\u8BB0\u5F55\uFF0C\u53EF\u6309\u9700\u6E05\u7406" })
4492
4537
  ] }),
4493
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_dsh_client_ui_primitives5.IconChevronDownOutline14, { size: 16 })
4538
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_dsh_client_ui_primitives5.IconChevronDownOutlineRegular, { size: 16 })
4494
4539
  ] }),
4495
4540
  open && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { id: contentId, className: "dsh-partner-concern-archive-content", children: [
4496
4541
  resource.error && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(WorkspaceNotice, { children: [
@@ -4500,11 +4545,11 @@ function ArchivedConcerns({ companionId, onChanged }) {
4500
4545
  }, children: "\u91CD\u8BD5" })
4501
4546
  ] }),
4502
4547
  !resource.data ? !resource.error && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { role: "status", children: "\u6B63\u5728\u8BFB\u53D6\u2026" }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
4503
- resource.data.items.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { children: "\u6B64\u9875\u6CA1\u6709\u5DF2\u5F52\u6863\u5173\u6CE8\u3002" }),
4548
+ resource.data.items.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { children: "\u6B64\u9875\u6CA1\u6709\u5DF2\u505C\u6B62\u5173\u6CE8\u3002" }),
4504
4549
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "dsh-partner-concern-archive-list", children: resource.data.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("article", { className: "dsh-partner-concern-archive-row", children: [
4505
4550
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("details", { className: "dsh-partner-concern-archive-details", children: [
4506
4551
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("summary", { children: [
4507
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_dsh_client_ui_primitives5.IconChevronDownOutline14, { size: 14 }),
4552
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_dsh_client_ui_primitives5.IconChevronDownOutlineRegular, { size: 14 }),
4508
4553
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("strong", { children: item.subject })
4509
4554
  ] }),
4510
4555
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("dl", { children: [
@@ -4519,7 +4564,7 @@ function ArchivedConcerns({ companionId, onChanged }) {
4519
4564
  ] }),
4520
4565
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "dsh-partner-concern-archive-action", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ConcernDeleteButton, { companionId, item, onDeleted: refresh }) })
4521
4566
  ] }, item.id)) }),
4522
- (offset > 0 || resource.data.hasMore) && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("nav", { className: "dsh-partner-concern-archive-pages", "aria-label": "\u5F52\u6863\u5173\u6CE8\u5206\u9875", children: [
4567
+ (offset > 0 || resource.data.hasMore) && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("nav", { className: "dsh-partner-concern-archive-pages", "aria-label": "\u5DF2\u505C\u6B62\u5173\u6CE8\u5206\u9875", children: [
4523
4568
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { children: [
4524
4569
  "\u7B2C ",
4525
4570
  Math.floor(offset / 50) + 1,
@@ -4757,7 +4802,7 @@ function ConcernBoard({ companionId, activity, value, busy, onValue, onAdd, onCh
4757
4802
  setEditing(void 0);
4758
4803
  setComposing((current2) => !current2);
4759
4804
  }, children: [
4760
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives6.IconPlusOutline16, { size: 14 }),
4805
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives6.IconPlusOutlineRegular, { size: 14 }),
4761
4806
  "\u4EA4\u4EE3\u4E00\u4EF6\u4E8B"
4762
4807
  ] })
4763
4808
  ] }),
@@ -4821,7 +4866,7 @@ function ConcernBoard({ companionId, activity, value, busy, onValue, onAdd, onCh
4821
4866
  onMouseEnter: () => setActiveSource(index2),
4822
4867
  onClick: () => chooseSource(source),
4823
4868
  children: [
4824
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: source.kind === "file" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives6.IconDataOutline16, { size: 15 }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives6.IconLinkOutline16, { size: 15 }) }),
4869
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: source.kind === "file" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives6.IconDataOutlineRegular, { size: 15 }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives6.IconLinkOutlineRegular, { size: 15 }) }),
4825
4870
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("strong", { children: source.label }),
4826
4871
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("small", { children: source.detail })
4827
4872
  ]
@@ -4869,7 +4914,7 @@ function ConcernBoard({ companionId, activity, value, busy, onValue, onAdd, onCh
4869
4914
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("small", { children: "\u4E0B\u6B21\u7559\u610F" }),
4870
4915
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("strong", { children: futureTime(item.nextCheckAt) })
4871
4916
  ] }),
4872
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives6.IconChevronDownOutline14, { size: 14 })
4917
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives6.IconChevronDownOutlineRegular, { size: 14 })
4873
4918
  ] }),
4874
4919
  expanded && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "dsh-partner-concern-detail", children: [
4875
4920
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { children: item.reason }),
@@ -4920,10 +4965,12 @@ function ConcernBoard({ companionId, activity, value, busy, onValue, onAdd, onCh
4920
4965
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("b", { children: resolved.length })
4921
4966
  ] }),
4922
4967
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { children: resolved.slice(0, 30).map((item) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("article", { children: [
4923
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives6.IconCheckOutline14, { size: 13 }) }),
4924
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("strong", { children: item.subject }),
4925
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("button", { type: "button", disabled: busy, onClick: () => onAct(item, "watch"), children: "\u91CD\u65B0\u7559\u610F" }),
4926
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ConcernDeleteButton, { companionId, item, disabled: busy, onDeleted: onEdited })
4968
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives6.IconCheckOutlineRegular, { size: 13 }) }),
4969
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("strong", { title: item.subject, children: item.subject }),
4970
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "dsh-partner-concern-resolved-actions", role: "group", "aria-label": `${item.subject} \u7684\u64CD\u4F5C`, children: [
4971
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("button", { type: "button", disabled: busy, onClick: () => onAct(item, "watch"), children: "\u91CD\u65B0\u7559\u610F" }),
4972
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ConcernDeleteButton, { companionId, item, disabled: busy, onDeleted: onEdited })
4973
+ ] })
4927
4974
  ] }, item.id)) })
4928
4975
  ] }),
4929
4976
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ArchivedConcerns, { companionId, onChanged: onEdited })
@@ -5059,7 +5106,7 @@ function ConcernPanel({ companion, snapshot, onChanged }) {
5059
5106
  ] }),
5060
5107
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("button", { type: "button", disabled: resource.loading, "aria-label": "\u5237\u65B0\u5173\u6CE8", onClick: () => {
5061
5108
  void resource.reload();
5062
- }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_dsh_client_ui_primitives7.IconRefreshOutline16, { size: 16 }) })
5109
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_dsh_client_ui_primitives7.IconRefreshOutlineRegular, { size: 16 }) })
5063
5110
  ] }),
5064
5111
  (error || resource.error || heartbeat?.lastError) && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(WorkspaceNotice, { children: error || resource.error || heartbeat?.lastError }),
5065
5112
  notice && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(WorkspaceNotice, { kind: "success", children: notice }),
@@ -5373,7 +5420,7 @@ function PendantSettingsPanel() {
5373
5420
  };
5374
5421
  return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "dsh-partner-feature-page dsh-partner-pendant-settings", children: [
5375
5422
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(WorkspaceHero, { eyebrow: "PERSONAL TOUCH", title: "\u5361\u7247\u8BBE\u7F6E", detail: "\u8BA9\u6302\u9970\u6709\u81EA\u5DF1\u7684\u6837\u5B50\u3002\u5916\u89C2\u4EC5\u4FDD\u5B58\u5728\u5F53\u524D\u6D4F\u89C8\u5668\uFF0C\u4E0D\u5F71\u54CD\u4F19\u4F34\u6267\u884C\u548C\u6E20\u9053\u901A\u77E5\u3002", actions: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("button", { type: "button", disabled: !dirty || processing, onClick: save, children: [
5376
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconCheckOutline14, { size: 15 }),
5423
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconCheckOutlineRegular, { size: 15 }),
5377
5424
  "\u4FDD\u5B58\u8BBE\u7F6E"
5378
5425
  ] }) }),
5379
5426
  error && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(WorkspaceNotice, { children: error }),
@@ -5410,13 +5457,13 @@ function PendantSettingsPanel() {
5410
5457
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(StrapPreview, { material: item.id, color: previewColor, swatch: true }),
5411
5458
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("strong", { children: item.name }),
5412
5459
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("small", { children: item.detail }),
5413
- draft.material === item.id && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconCheckOutline14, { size: 14 })
5460
+ draft.material === item.id && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconCheckOutlineRegular, { size: 14 })
5414
5461
  ] }, item.id)) }),
5415
5462
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "dsh-partner-pendant-color-row", children: [
5416
5463
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: "\u7EF3\u5B50\u989C\u8272" }),
5417
5464
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "dsh-partner-pendant-swatches", role: "group", "aria-label": "\u9884\u8BBE\u7EF3\u5B50\u989C\u8272", children: COLORS.map((color2) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("button", { type: "button", "aria-label": `\u7EF3\u5B50\u989C\u8272 ${color2}`, "aria-pressed": draft.color.toLowerCase() === color2, onClick: () => update({ color: color2 }), children: [
5418
5465
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("i", { style: { backgroundColor: color2 } }),
5419
- draft.color.toLowerCase() === color2 && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconCheckOutline14, { size: 12 })
5466
+ draft.color.toLowerCase() === color2 && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconCheckOutlineRegular, { size: 12 })
5420
5467
  ] }, color2)) }),
5421
5468
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("label", { className: "dsh-partner-pendant-hex", children: [
5422
5469
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "dsh-partner-pendant-sr", children: "\u81EA\u5B9A\u4E49\u7EF3\u5B50\u989C\u8272" }),
@@ -5429,7 +5476,7 @@ function PendantSettingsPanel() {
5429
5476
  } }),
5430
5477
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "dsh-partner-pendant-image-actions", children: [
5431
5478
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("button", { type: "button", disabled: processing, onClick: () => strapFile.current?.click(), children: [
5432
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconPlusOutline16, { size: 15 }),
5479
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconPlusOutlineRegular, { size: 15 }),
5433
5480
  draft.strapImage ? "\u66F4\u6362\u7EF3\u5B50\u7EB9\u7406" : "\u81EA\u5B9A\u4E49\u7EF3\u5B50\u7EB9\u7406"
5434
5481
  ] }),
5435
5482
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("button", { type: "button", disabled: processing || !draft.strapImage, onClick: () => update({ strapImage: "" }), children: "\u79FB\u9664\u7EB9\u7406" })
@@ -5442,11 +5489,11 @@ function PendantSettingsPanel() {
5442
5489
  } }),
5443
5490
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "dsh-partner-pendant-image-actions", children: [
5444
5491
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("button", { type: "button", disabled: processing, onClick: () => file.current?.click(), children: [
5445
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconPlusOutline16, { size: 15 }),
5492
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconPlusOutlineRegular, { size: 15 }),
5446
5493
  processing ? "\u6B63\u5728\u5904\u7406\u2026" : draft.image ? "\u66F4\u6362\u56FE\u7247" : "\u9009\u62E9\u56FE\u7247"
5447
5494
  ] }),
5448
5495
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("button", { type: "button", disabled: !draft.image || processing, onClick: () => update({ image: "" }), children: [
5449
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconRefreshOutline16, { size: 15 }),
5496
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconRefreshOutlineRegular, { size: 15 }),
5450
5497
  "\u6062\u590D\u9ED8\u8BA4\u56FE\u6848"
5451
5498
  ] })
5452
5499
  ] }),
@@ -5481,7 +5528,7 @@ function PendantSettingsPanel() {
5481
5528
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "dsh-partner-pendant-preview-stage", children: [
5482
5529
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(StrapPreview, { material: draft.material, color: previewColor, image: draft.strapImage, length: draft.strapLength }),
5483
5530
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "dsh-partner-pendant-preview-card", children: draft.image ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("img", { src: draft.image, style: { objectFit: draft.imageFit }, alt: "\u81EA\u5B9A\u4E49\u5361\u7247\u6B63\u9762\u9884\u89C8" }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("span", { children: [
5484
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconAgentPresetOutline16, { size: 38 }),
5531
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dsh_client_ui_primitives8.IconAgentPresetOutlineRegular, { size: 38 }),
5485
5532
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("strong", { children: "WITH YOU" }),
5486
5533
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("small", { children: "\u9ED8\u8BA4\u4F19\u4F34\u56FE\u6848" })
5487
5534
  ] }) })
@@ -5908,8 +5955,8 @@ function regexCheck(regex) {
5908
5955
 
5909
5956
  // node_modules/micromark-factory-space/index.js
5910
5957
  function factorySpace(effects, ok3, type, max) {
5911
- const limit = max ? max - 1 : Number.POSITIVE_INFINITY;
5912
- let size = 0;
5958
+ const limit = max ? max - 1 : Infinity;
5959
+ let size2 = 0;
5913
5960
  return start;
5914
5961
  function start(code2) {
5915
5962
  if (markdownSpace(code2)) {
@@ -5919,7 +5966,7 @@ function factorySpace(effects, ok3, type, max) {
5919
5966
  return ok3(code2);
5920
5967
  }
5921
5968
  function prefix(code2) {
5922
- if (markdownSpace(code2) && size++ < limit) {
5969
+ if (markdownSpace(code2) && size2++ < limit) {
5923
5970
  effects.consume(code2);
5924
5971
  return prefix;
5925
5972
  }
@@ -5927,6 +5974,29 @@ function factorySpace(effects, ok3, type, max) {
5927
5974
  return ok3(code2);
5928
5975
  }
5929
5976
  }
5977
+ function factorySpaceMinMax(effects, ok3, nok, type, min, max) {
5978
+ let size2 = 0;
5979
+ return start;
5980
+ function start(code2) {
5981
+ if (max > 0 && markdownSpace(code2)) {
5982
+ effects.enter(type);
5983
+ return prefix(code2);
5984
+ }
5985
+ return after(code2);
5986
+ }
5987
+ function prefix(code2) {
5988
+ if (markdownSpace(code2) && size2 < max) {
5989
+ effects.consume(code2);
5990
+ size2++;
5991
+ return prefix;
5992
+ }
5993
+ effects.exit(type);
5994
+ return after(code2);
5995
+ }
5996
+ function after(code2) {
5997
+ return size2 >= min ? ok3(code2) : nok(code2);
5998
+ }
5999
+ }
5930
6000
 
5931
6001
  // node_modules/micromark/lib/initialize/content.js
5932
6002
  var content = {
@@ -5978,6 +6048,104 @@ function initializeContent(effects) {
5978
6048
  }
5979
6049
  }
5980
6050
 
6051
+ // node_modules/micromark-util-edit-map/index.js
6052
+ var EditMap = class {
6053
+ /**
6054
+ * Create a new edit map.
6055
+ *
6056
+ * @returns
6057
+ * New instance.
6058
+ */
6059
+ constructor() {
6060
+ this.index = /* @__PURE__ */ new Map();
6061
+ this.map = [];
6062
+ }
6063
+ /**
6064
+ * Create an edit: a remove and/or add at a certain place.
6065
+ *
6066
+ * @param {number} index
6067
+ * Index at which to apply the edit.
6068
+ * @param {number} remove
6069
+ * Count of items to remove at the index.
6070
+ * @param {Array<Event>} add
6071
+ * Items to add at the index.
6072
+ * @returns {undefined}
6073
+ * Nothing.
6074
+ */
6075
+ add(index2, remove, add) {
6076
+ addImplementation(this, index2, remove, add, false);
6077
+ }
6078
+ /**
6079
+ * Create an edit: but insert `add` before existing additions, instead of
6080
+ * after them.
6081
+ *
6082
+ * @param {number} index
6083
+ * Index at which to apply the edit.
6084
+ * @param {number} remove
6085
+ * Count of items to remove at the index.
6086
+ * @param {Array<Event>} add
6087
+ * Items to add at the index.
6088
+ * @returns {undefined}
6089
+ * Nothing.
6090
+ */
6091
+ addBefore(index2, remove, add) {
6092
+ addImplementation(this, index2, remove, add, true);
6093
+ }
6094
+ /**
6095
+ * Done, change the events.
6096
+ *
6097
+ * @param {Array<Event>} events
6098
+ * List of events to apply the edits to.
6099
+ * @returns {undefined}
6100
+ * Nothing.
6101
+ */
6102
+ consume(events) {
6103
+ this.map.sort(function(a, b) {
6104
+ return a[0] - b[0];
6105
+ });
6106
+ if (this.map.length === 0) {
6107
+ return;
6108
+ }
6109
+ let index2 = this.map.length;
6110
+ const vecs = [];
6111
+ while (index2 > 0) {
6112
+ index2 -= 1;
6113
+ vecs.push(events.slice(this.map[index2][0] + this.map[index2][1]), this.map[index2][2]);
6114
+ events.length = this.map[index2][0];
6115
+ }
6116
+ vecs.push(events.slice());
6117
+ events.length = 0;
6118
+ let slice = vecs.pop();
6119
+ while (slice) {
6120
+ for (const element2 of slice) {
6121
+ events.push(element2);
6122
+ }
6123
+ slice = vecs.pop();
6124
+ }
6125
+ this.map.length = 0;
6126
+ this.index.clear();
6127
+ }
6128
+ };
6129
+ function addImplementation(editMap, at, remove, add, before) {
6130
+ if (remove === 0 && add.length === 0) {
6131
+ return;
6132
+ }
6133
+ const existing = editMap.index.get(at);
6134
+ if (existing) {
6135
+ existing[1] += remove;
6136
+ if (before) {
6137
+ add.push(...existing[2]);
6138
+ existing[2] = add;
6139
+ } else {
6140
+ existing[2].push(...add);
6141
+ }
6142
+ return;
6143
+ }
6144
+ const change = [at, remove, add];
6145
+ editMap.map.push(change);
6146
+ editMap.index.set(at, change);
6147
+ }
6148
+
5981
6149
  // node_modules/micromark/lib/initialize/document.js
5982
6150
  var document2 = {
5983
6151
  tokenize: initializeDocument
@@ -6025,8 +6193,10 @@ function initializeDocument(effects) {
6025
6193
  };
6026
6194
  index2++;
6027
6195
  }
6028
- splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));
6029
- self.events.length = index2;
6196
+ const editMap = new EditMap();
6197
+ editMap.add(indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));
6198
+ editMap.add(indexBeforeExits, index2 - indexBeforeExits, []);
6199
+ editMap.consume(self.events);
6030
6200
  return checkNewContainers(code2);
6031
6201
  }
6032
6202
  return start(code2);
@@ -6045,7 +6215,9 @@ function initializeDocument(effects) {
6045
6215
  return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code2);
6046
6216
  }
6047
6217
  function thereIsANewContainer(code2) {
6048
- if (childFlow) closeFlow();
6218
+ if (childFlow) {
6219
+ closeFlow();
6220
+ }
6049
6221
  exitContainers(continued);
6050
6222
  return documentContinued(code2);
6051
6223
  }
@@ -6065,7 +6237,9 @@ function initializeDocument(effects) {
6065
6237
  }
6066
6238
  function flowStart(code2) {
6067
6239
  if (code2 === null) {
6068
- if (childFlow) closeFlow();
6240
+ if (childFlow) {
6241
+ closeFlow();
6242
+ }
6069
6243
  exitContainers(0);
6070
6244
  effects.consume(code2);
6071
6245
  return;
@@ -6097,9 +6271,13 @@ function initializeDocument(effects) {
6097
6271
  }
6098
6272
  function writeToChild(token, endOfFile) {
6099
6273
  const stream = self.sliceStream(token);
6100
- if (endOfFile) stream.push(null);
6274
+ if (endOfFile) {
6275
+ stream.push(null);
6276
+ }
6101
6277
  token.previous = childToken;
6102
- if (childToken) childToken.next = token;
6278
+ if (childToken) {
6279
+ childToken.next = token;
6280
+ }
6103
6281
  childToken = token;
6104
6282
  childFlow.defineSkip(token.start);
6105
6283
  childFlow.write(stream);
@@ -6136,18 +6314,20 @@ function initializeDocument(effects) {
6136
6314
  };
6137
6315
  index2++;
6138
6316
  }
6139
- splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));
6140
- self.events.length = index2;
6317
+ const editMap = new EditMap();
6318
+ editMap.add(indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));
6319
+ editMap.add(indexBeforeExits, index2 - indexBeforeExits, []);
6320
+ editMap.consume(self.events);
6141
6321
  }
6142
6322
  }
6143
- function exitContainers(size) {
6323
+ function exitContainers(size2) {
6144
6324
  let index2 = stack.length;
6145
- while (index2-- > size) {
6325
+ while (index2-- > size2) {
6146
6326
  const entry = stack[index2];
6147
6327
  self.containerState = entry[1];
6148
6328
  entry[0].exit.call(self, effects);
6149
6329
  }
6150
- stack.length = size;
6330
+ stack.length = size2;
6151
6331
  }
6152
6332
  function closeFlow() {
6153
6333
  childFlow.write([null]);
@@ -6192,24 +6372,17 @@ var attention = {
6192
6372
  };
6193
6373
  function resolveAllAttention(events, context) {
6194
6374
  let index2 = -1;
6195
- let open;
6196
- let group;
6197
- let text4;
6198
- let openingSequence;
6199
- let closingSequence;
6200
- let use;
6201
6375
  let nextEvents;
6202
- let offset;
6203
6376
  while (++index2 < events.length) {
6204
6377
  if (events[index2][0] === "enter" && events[index2][1].type === "attentionSequence" && events[index2][1]._close) {
6205
- open = index2;
6378
+ let open = index2;
6206
6379
  while (open--) {
6207
6380
  if (events[open][0] === "exit" && events[open][1].type === "attentionSequence" && events[open][1]._open && // If the markers are the same:
6208
6381
  context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index2][1]).charCodeAt(0)) {
6209
6382
  if ((events[open][1]._close || events[index2][1]._open) && (events[index2][1].end.offset - events[index2][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index2][1].end.offset - events[index2][1].start.offset) % 3)) {
6210
6383
  continue;
6211
6384
  }
6212
- use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index2][1].end.offset - events[index2][1].start.offset > 1 ? 2 : 1;
6385
+ const use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index2][1].end.offset - events[index2][1].start.offset > 1 ? 2 : 1;
6213
6386
  const start = {
6214
6387
  ...events[open][1].end
6215
6388
  };
@@ -6218,21 +6391,21 @@ function resolveAllAttention(events, context) {
6218
6391
  };
6219
6392
  movePoint(start, -use);
6220
6393
  movePoint(end, use);
6221
- openingSequence = {
6394
+ const openingSequence = {
6222
6395
  type: use > 1 ? "strongSequence" : "emphasisSequence",
6223
6396
  start,
6224
6397
  end: {
6225
6398
  ...events[open][1].end
6226
6399
  }
6227
6400
  };
6228
- closingSequence = {
6401
+ const closingSequence = {
6229
6402
  type: use > 1 ? "strongSequence" : "emphasisSequence",
6230
6403
  start: {
6231
6404
  ...events[index2][1].start
6232
6405
  },
6233
6406
  end
6234
6407
  };
6235
- text4 = {
6408
+ const text4 = {
6236
6409
  type: use > 1 ? "strongText" : "emphasisText",
6237
6410
  start: {
6238
6411
  ...events[open][1].end
@@ -6241,7 +6414,7 @@ function resolveAllAttention(events, context) {
6241
6414
  ...events[index2][1].start
6242
6415
  }
6243
6416
  };
6244
- group = {
6417
+ const group = {
6245
6418
  type: use > 1 ? "strong" : "emphasis",
6246
6419
  start: {
6247
6420
  ...openingSequence.start
@@ -6263,11 +6436,10 @@ function resolveAllAttention(events, context) {
6263
6436
  nextEvents = push(nextEvents, [["enter", group, context], ["enter", openingSequence, context], ["exit", openingSequence, context], ["enter", text4, context]]);
6264
6437
  nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index2), context));
6265
6438
  nextEvents = push(nextEvents, [["exit", text4, context], ["enter", closingSequence, context], ["exit", closingSequence, context], ["exit", group, context]]);
6439
+ let offset = 0;
6266
6440
  if (events[index2][1].end.offset - events[index2][1].start.offset) {
6267
6441
  offset = 2;
6268
6442
  nextEvents = push(nextEvents, [["enter", events[index2][1], context], ["exit", events[index2][1], context]]);
6269
- } else {
6270
- offset = 0;
6271
6443
  }
6272
6444
  splice(events, open - 1, index2 - open + 3, nextEvents);
6273
6445
  index2 = open + nextEvents.length - offset - 2;
@@ -6302,8 +6474,8 @@ function tokenizeAttention(effects, ok3) {
6302
6474
  }
6303
6475
  const token = effects.exit("attentionSequence");
6304
6476
  const after = classifyCharacter(code2);
6305
- const open = !after || after === 2 && before || attentionMarkers2.includes(code2);
6306
- const close = !before || before === 2 && after || attentionMarkers2.includes(previous3);
6477
+ const open = !after || after === 2 && before || attentionMarkers2.includes(code2) && code2 !== 42 && code2 !== 95;
6478
+ const close = !before || before === 2 && after || attentionMarkers2.includes(previous3) && previous3 !== 42 && previous3 !== 95;
6307
6479
  token._open = Boolean(marker === 42 ? open : open && (before || !close));
6308
6480
  token._close = Boolean(marker === 42 ? close : close && (after || !open));
6309
6481
  return ok3(code2);
@@ -6321,7 +6493,7 @@ var autolink = {
6321
6493
  tokenize: tokenizeAutolink
6322
6494
  };
6323
6495
  function tokenizeAutolink(effects, ok3, nok) {
6324
- let size = 0;
6496
+ let size2 = 0;
6325
6497
  return start;
6326
6498
  function start(code2) {
6327
6499
  effects.enter("autolink");
@@ -6343,7 +6515,7 @@ function tokenizeAutolink(effects, ok3, nok) {
6343
6515
  }
6344
6516
  function schemeOrEmailAtext(code2) {
6345
6517
  if (code2 === 43 || code2 === 45 || code2 === 46 || asciiAlphanumeric(code2)) {
6346
- size = 1;
6518
+ size2 = 1;
6347
6519
  return schemeInsideOrEmailAtext(code2);
6348
6520
  }
6349
6521
  return emailAtext(code2);
@@ -6351,14 +6523,14 @@ function tokenizeAutolink(effects, ok3, nok) {
6351
6523
  function schemeInsideOrEmailAtext(code2) {
6352
6524
  if (code2 === 58) {
6353
6525
  effects.consume(code2);
6354
- size = 0;
6526
+ size2 = 0;
6355
6527
  return urlInside;
6356
6528
  }
6357
- if ((code2 === 43 || code2 === 45 || code2 === 46 || asciiAlphanumeric(code2)) && size++ < 32) {
6529
+ if ((code2 === 43 || code2 === 45 || code2 === 46 || asciiAlphanumeric(code2)) && size2++ < 32) {
6358
6530
  effects.consume(code2);
6359
6531
  return schemeInsideOrEmailAtext;
6360
6532
  }
6361
- size = 0;
6533
+ size2 = 0;
6362
6534
  return emailAtext(code2);
6363
6535
  }
6364
6536
  function urlInside(code2) {
@@ -6393,7 +6565,7 @@ function tokenizeAutolink(effects, ok3, nok) {
6393
6565
  function emailLabel(code2) {
6394
6566
  if (code2 === 46) {
6395
6567
  effects.consume(code2);
6396
- size = 0;
6568
+ size2 = 0;
6397
6569
  return emailAtSignOrDot;
6398
6570
  }
6399
6571
  if (code2 === 62) {
@@ -6407,7 +6579,7 @@ function tokenizeAutolink(effects, ok3, nok) {
6407
6579
  return emailValue(code2);
6408
6580
  }
6409
6581
  function emailValue(code2) {
6410
- if ((code2 === 45 || asciiAlphanumeric(code2)) && size++ < 63) {
6582
+ if ((code2 === 45 || asciiAlphanumeric(code2)) && size2++ < 63) {
6411
6583
  const next = code2 === 45 ? emailValue : emailLabel;
6412
6584
  effects.consume(code2);
6413
6585
  return next;
@@ -6522,7 +6694,7 @@ var characterReference = {
6522
6694
  };
6523
6695
  function tokenizeCharacterReference(effects, ok3, nok) {
6524
6696
  const self = this;
6525
- let size = 0;
6697
+ let size2 = 0;
6526
6698
  let max;
6527
6699
  let test;
6528
6700
  return start;
@@ -6561,7 +6733,7 @@ function tokenizeCharacterReference(effects, ok3, nok) {
6561
6733
  return value(code2);
6562
6734
  }
6563
6735
  function value(code2) {
6564
- if (code2 === 59 && size) {
6736
+ if (code2 === 59 && size2) {
6565
6737
  const token = effects.exit("characterReferenceValue");
6566
6738
  if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {
6567
6739
  return nok(code2);
@@ -6572,7 +6744,7 @@ function tokenizeCharacterReference(effects, ok3, nok) {
6572
6744
  effects.exit("characterReference");
6573
6745
  return ok3;
6574
6746
  }
6575
- if (test(code2) && size++ < max) {
6747
+ if (test(code2) && size2++ < max) {
6576
6748
  effects.consume(code2);
6577
6749
  return value;
6578
6750
  }
@@ -6580,11 +6752,29 @@ function tokenizeCharacterReference(effects, ok3, nok) {
6580
6752
  }
6581
6753
  }
6582
6754
 
6583
- // node_modules/micromark-core-commonmark/lib/code-fenced.js
6755
+ // node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.js
6584
6756
  var nonLazyContinuation = {
6585
6757
  partial: true,
6586
6758
  tokenize: tokenizeNonLazyContinuation
6587
6759
  };
6760
+ function tokenizeNonLazyContinuation(effects, ok3, nok) {
6761
+ const self = this;
6762
+ return start;
6763
+ function start(code2) {
6764
+ if (code2 === null) {
6765
+ return nok(code2);
6766
+ }
6767
+ effects.enter("lineEnding");
6768
+ effects.consume(code2);
6769
+ effects.exit("lineEnding");
6770
+ return after;
6771
+ }
6772
+ function after(code2) {
6773
+ return self.parser.lazy[self.now().line] ? nok(code2) : ok3(code2);
6774
+ }
6775
+ }
6776
+
6777
+ // node_modules/micromark-core-commonmark/lib/code-fenced.js
6588
6778
  var codeFenced = {
6589
6779
  concrete: true,
6590
6780
  name: "codeFenced",
@@ -6706,7 +6896,7 @@ function tokenizeCodeFenced(effects, ok3, nok) {
6706
6896
  return ok3(code2);
6707
6897
  }
6708
6898
  function tokenizeCloseStart(effects2, ok4, nok2) {
6709
- let size = 0;
6899
+ let size2 = 0;
6710
6900
  return startBefore;
6711
6901
  function startBefore(code2) {
6712
6902
  effects2.enter("lineEnding");
@@ -6727,11 +6917,11 @@ function tokenizeCodeFenced(effects, ok3, nok) {
6727
6917
  }
6728
6918
  function sequenceClose(code2) {
6729
6919
  if (code2 === marker) {
6730
- size++;
6920
+ size2++;
6731
6921
  effects2.consume(code2);
6732
6922
  return sequenceClose;
6733
6923
  }
6734
- if (size >= sizeOpen) {
6924
+ if (size2 >= sizeOpen) {
6735
6925
  effects2.exit("codeFencedFenceSequence");
6736
6926
  return markdownSpace(code2) ? factorySpace(effects2, sequenceCloseAfter, "whitespace")(code2) : sequenceCloseAfter(code2);
6737
6927
  }
@@ -6746,22 +6936,6 @@ function tokenizeCodeFenced(effects, ok3, nok) {
6746
6936
  }
6747
6937
  }
6748
6938
  }
6749
- function tokenizeNonLazyContinuation(effects, ok3, nok) {
6750
- const self = this;
6751
- return start;
6752
- function start(code2) {
6753
- if (code2 === null) {
6754
- return nok(code2);
6755
- }
6756
- effects.enter("lineEnding");
6757
- effects.consume(code2);
6758
- effects.exit("lineEnding");
6759
- return lineStart;
6760
- }
6761
- function lineStart(code2) {
6762
- return self.parser.lazy[self.now().line] ? nok(code2) : ok3(code2);
6763
- }
6764
- }
6765
6939
 
6766
6940
  // node_modules/micromark-core-commonmark/lib/code-indented.js
6767
6941
  var codeIndented = {
@@ -6773,15 +6947,10 @@ var furtherStart = {
6773
6947
  tokenize: tokenizeFurtherStart
6774
6948
  };
6775
6949
  function tokenizeCodeIndented(effects, ok3, nok) {
6776
- const self = this;
6777
6950
  return start;
6778
6951
  function start(code2) {
6779
6952
  effects.enter("codeIndented");
6780
- return factorySpace(effects, afterPrefix, "linePrefix", 4 + 1)(code2);
6781
- }
6782
- function afterPrefix(code2) {
6783
- const tail = self.events[self.events.length - 1];
6784
- return tail && tail[1].type === "linePrefix" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code2) : nok(code2);
6953
+ return factorySpaceMinMax(effects, atBreak, nok, "linePrefix", 4, 4)(code2);
6785
6954
  }
6786
6955
  function atBreak(code2) {
6787
6956
  if (code2 === null) {
@@ -6819,11 +6988,10 @@ function tokenizeFurtherStart(effects, ok3, nok) {
6819
6988
  effects.exit("lineEnding");
6820
6989
  return furtherStart2;
6821
6990
  }
6822
- return factorySpace(effects, afterPrefix, "linePrefix", 4 + 1)(code2);
6991
+ return factorySpaceMinMax(effects, ok3, onNotEnoughPrefix, "linePrefix", 4, 4)(code2);
6823
6992
  }
6824
- function afterPrefix(code2) {
6825
- const tail = self.events[self.events.length - 1];
6826
- return tail && tail[1].type === "linePrefix" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok3(code2) : markdownLineEnding(code2) ? furtherStart2(code2) : nok(code2);
6993
+ function onNotEnoughPrefix(code2) {
6994
+ return markdownLineEnding(code2) ? furtherStart2(code2) : nok(code2);
6827
6995
  }
6828
6996
  }
6829
6997
 
@@ -6877,7 +7045,7 @@ function previous(code2) {
6877
7045
  function tokenizeCodeText(effects, ok3, nok) {
6878
7046
  const self = this;
6879
7047
  let sizeOpen = 0;
6880
- let size;
7048
+ let size2;
6881
7049
  let token;
6882
7050
  return start;
6883
7051
  function start(code2) {
@@ -6906,7 +7074,7 @@ function tokenizeCodeText(effects, ok3, nok) {
6906
7074
  }
6907
7075
  if (code2 === 96) {
6908
7076
  token = effects.enter("codeTextSequence");
6909
- size = 0;
7077
+ size2 = 0;
6910
7078
  return sequenceClose(code2);
6911
7079
  }
6912
7080
  if (markdownLineEnding(code2)) {
@@ -6929,10 +7097,10 @@ function tokenizeCodeText(effects, ok3, nok) {
6929
7097
  function sequenceClose(code2) {
6930
7098
  if (code2 === 96) {
6931
7099
  effects.consume(code2);
6932
- size++;
7100
+ size2++;
6933
7101
  return sequenceClose;
6934
7102
  }
6935
- if (size === sizeOpen) {
7103
+ if (size2 === sizeOpen) {
6936
7104
  effects.exit("codeTextSequence");
6937
7105
  effects.exit("codeText");
6938
7106
  return ok3(code2);
@@ -7454,7 +7622,7 @@ function factoryDestination(effects, ok3, nok, type, literalType, literalMarkerT
7454
7622
  // node_modules/micromark-factory-label/index.js
7455
7623
  function factoryLabel(effects, ok3, nok, type, markerType, stringType) {
7456
7624
  const self = this;
7457
- let size = 0;
7625
+ let size2 = 0;
7458
7626
  let seen;
7459
7627
  return start;
7460
7628
  function start(code2) {
@@ -7466,12 +7634,12 @@ function factoryLabel(effects, ok3, nok, type, markerType, stringType) {
7466
7634
  return atBreak;
7467
7635
  }
7468
7636
  function atBreak(code2) {
7469
- if (size > 999 || code2 === null || code2 === 91 || code2 === 93 && !seen || // To do: remove in the future once we’ve switched from
7637
+ if (size2 > 999 || code2 === null || code2 === 91 || code2 === 93 && !seen || // To do: remove in the future once we’ve switched from
7470
7638
  // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,
7471
7639
  // which doesn’t need this.
7472
7640
  // Hidden footnotes hook.
7473
7641
  /* c8 ignore next 3 */
7474
- code2 === 94 && !size && "_hiddenFootnoteSupport" in self.parser.constructs) {
7642
+ code2 === 94 && !size2 && "_hiddenFootnoteSupport" in self.parser.constructs) {
7475
7643
  return nok(code2);
7476
7644
  }
7477
7645
  if (code2 === 93) {
@@ -7494,7 +7662,7 @@ function factoryLabel(effects, ok3, nok, type, markerType, stringType) {
7494
7662
  return labelInside(code2);
7495
7663
  }
7496
7664
  function labelInside(code2) {
7497
- if (code2 === null || code2 === 91 || code2 === 93 || markdownLineEnding(code2) || size++ > 999) {
7665
+ if (code2 === null || code2 === 91 || code2 === 93 || markdownLineEnding(code2) || size2++ > 999) {
7498
7666
  effects.exit("chunkString");
7499
7667
  return atBreak(code2);
7500
7668
  }
@@ -7505,7 +7673,7 @@ function factoryLabel(effects, ok3, nok, type, markerType, stringType) {
7505
7673
  function labelEscape(code2) {
7506
7674
  if (code2 === 91 || code2 === 92 || code2 === 93) {
7507
7675
  effects.consume(code2);
7508
- size++;
7676
+ size2++;
7509
7677
  return labelInside;
7510
7678
  }
7511
7679
  return labelInside(code2);
@@ -7709,8 +7877,6 @@ var headingAtx = {
7709
7877
  function resolveHeadingAtx(events, context) {
7710
7878
  let contentEnd = events.length - 2;
7711
7879
  let contentStart = 3;
7712
- let content3;
7713
- let text4;
7714
7880
  if (events[contentStart][1].type === "whitespace") {
7715
7881
  contentStart += 2;
7716
7882
  }
@@ -7721,12 +7887,12 @@ function resolveHeadingAtx(events, context) {
7721
7887
  contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;
7722
7888
  }
7723
7889
  if (contentEnd > contentStart) {
7724
- content3 = {
7890
+ const content3 = {
7725
7891
  type: "atxHeadingText",
7726
7892
  start: events[contentStart][1].start,
7727
7893
  end: events[contentEnd][1].end
7728
7894
  };
7729
- text4 = {
7895
+ const text4 = {
7730
7896
  type: "chunkText",
7731
7897
  start: events[contentStart][1].start,
7732
7898
  end: events[contentEnd][1].end,
@@ -7737,7 +7903,7 @@ function resolveHeadingAtx(events, context) {
7737
7903
  return events;
7738
7904
  }
7739
7905
  function tokenizeHeadingAtx(effects, ok3, nok) {
7740
- let size = 0;
7906
+ let size2 = 0;
7741
7907
  return start;
7742
7908
  function start(code2) {
7743
7909
  effects.enter("atxHeading");
@@ -7748,7 +7914,7 @@ function tokenizeHeadingAtx(effects, ok3, nok) {
7748
7914
  return sequenceOpen(code2);
7749
7915
  }
7750
7916
  function sequenceOpen(code2) {
7751
- if (code2 === 35 && size++ < 6) {
7917
+ if (code2 === 35 && size2++ < 6) {
7752
7918
  effects.consume(code2);
7753
7919
  return sequenceOpen;
7754
7920
  }
@@ -7869,10 +8035,6 @@ var blankLineBefore = {
7869
8035
  partial: true,
7870
8036
  tokenize: tokenizeBlankLineBefore
7871
8037
  };
7872
- var nonLazyContinuationStart = {
7873
- partial: true,
7874
- tokenize: tokenizeNonLazyContinuationStart
7875
- };
7876
8038
  function resolveToHtmlFlow(events) {
7877
8039
  let index2 = events.length;
7878
8040
  while (index2--) {
@@ -8134,7 +8296,7 @@ function tokenizeHtmlFlow(effects, ok3, nok) {
8134
8296
  return continuation;
8135
8297
  }
8136
8298
  function continuationStart(code2) {
8137
- return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code2);
8299
+ return effects.check(nonLazyContinuation, continuationStartNonLazy, continuationAfter)(code2);
8138
8300
  }
8139
8301
  function continuationStartNonLazy(code2) {
8140
8302
  effects.enter("lineEnding");
@@ -8211,22 +8373,6 @@ function tokenizeHtmlFlow(effects, ok3, nok) {
8211
8373
  return ok3(code2);
8212
8374
  }
8213
8375
  }
8214
- function tokenizeNonLazyContinuationStart(effects, ok3, nok) {
8215
- const self = this;
8216
- return start;
8217
- function start(code2) {
8218
- if (markdownLineEnding(code2)) {
8219
- effects.enter("lineEnding");
8220
- effects.consume(code2);
8221
- effects.exit("lineEnding");
8222
- return after;
8223
- }
8224
- return nok(code2);
8225
- }
8226
- function after(code2) {
8227
- return self.parser.lazy[self.now().line] ? nok(code2) : ok3(code2);
8228
- }
8229
- }
8230
8376
  function tokenizeBlankLineBefore(effects, ok3, nok) {
8231
8377
  return start;
8232
8378
  function start(code2) {
@@ -8579,12 +8725,11 @@ function resolveAllLabelEnd(events) {
8579
8725
  function resolveToLabelEnd(events, context) {
8580
8726
  let index2 = events.length;
8581
8727
  let offset = 0;
8582
- let token;
8583
8728
  let open;
8584
8729
  let close;
8585
8730
  let media;
8586
8731
  while (index2--) {
8587
- token = events[index2][1];
8732
+ const token = events[index2][1];
8588
8733
  if (open) {
8589
8734
  if (token.type === "link" || token.type === "labelLink" && token._inactive) {
8590
8735
  break;
@@ -8643,14 +8788,14 @@ function resolveToLabelEnd(events, context) {
8643
8788
  }
8644
8789
  function tokenizeLabelEnd(effects, ok3, nok) {
8645
8790
  const self = this;
8646
- let index2 = self.events.length;
8791
+ const labelStarts = self._labelStarts;
8647
8792
  let labelStart;
8648
8793
  let defined;
8649
- while (index2--) {
8650
- if ((self.events[index2][1].type === "labelImage" || self.events[index2][1].type === "labelLink") && !self.events[index2][1]._balanced) {
8651
- labelStart = self.events[index2][1];
8652
- break;
8794
+ if (labelStarts) {
8795
+ while (labelStarts.length > 0 && labelStarts[labelStarts.length - 1]._balanced) {
8796
+ labelStarts.pop();
8653
8797
  }
8798
+ labelStart = labelStarts[labelStarts.length - 1];
8654
8799
  }
8655
8800
  return start;
8656
8801
  function start(code2) {
@@ -8684,6 +8829,7 @@ function tokenizeLabelEnd(effects, ok3, nok) {
8684
8829
  return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code2);
8685
8830
  }
8686
8831
  function labelEndOk(code2) {
8832
+ labelStarts.pop();
8687
8833
  return ok3(code2);
8688
8834
  }
8689
8835
  function labelEndNok(code2) {
@@ -8777,6 +8923,7 @@ var labelStartImage = {
8777
8923
  };
8778
8924
  function tokenizeLabelStartImage(effects, ok3, nok) {
8779
8925
  const self = this;
8926
+ let labelImage;
8780
8927
  return start;
8781
8928
  function start(code2) {
8782
8929
  effects.enter("labelImage");
@@ -8790,13 +8937,18 @@ function tokenizeLabelStartImage(effects, ok3, nok) {
8790
8937
  effects.enter("labelMarker");
8791
8938
  effects.consume(code2);
8792
8939
  effects.exit("labelMarker");
8793
- effects.exit("labelImage");
8940
+ labelImage = effects.exit("labelImage");
8794
8941
  return after;
8795
8942
  }
8796
8943
  return nok(code2);
8797
8944
  }
8798
8945
  function after(code2) {
8799
- return code2 === 94 && "_hiddenFootnoteSupport" in self.parser.constructs ? nok(code2) : ok3(code2);
8946
+ if (code2 === 94 && "_hiddenFootnoteSupport" in self.parser.constructs) {
8947
+ return nok(code2);
8948
+ }
8949
+ self._labelStarts = self._labelStarts || [];
8950
+ self._labelStarts.push(labelImage);
8951
+ return ok3(code2);
8800
8952
  }
8801
8953
  }
8802
8954
 
@@ -8808,17 +8960,23 @@ var labelStartLink = {
8808
8960
  };
8809
8961
  function tokenizeLabelStartLink(effects, ok3, nok) {
8810
8962
  const self = this;
8963
+ let labelLink;
8811
8964
  return start;
8812
8965
  function start(code2) {
8813
8966
  effects.enter("labelLink");
8814
8967
  effects.enter("labelMarker");
8815
8968
  effects.consume(code2);
8816
8969
  effects.exit("labelMarker");
8817
- effects.exit("labelLink");
8970
+ labelLink = effects.exit("labelLink");
8818
8971
  return after;
8819
8972
  }
8820
8973
  function after(code2) {
8821
- return code2 === 94 && "_hiddenFootnoteSupport" in self.parser.constructs ? nok(code2) : ok3(code2);
8974
+ if (code2 === 94 && "_hiddenFootnoteSupport" in self.parser.constructs) {
8975
+ return nok(code2);
8976
+ }
8977
+ self._labelStarts = self._labelStarts || [];
8978
+ self._labelStarts.push(labelLink);
8979
+ return ok3(code2);
8822
8980
  }
8823
8981
  }
8824
8982
 
@@ -8843,7 +9001,7 @@ var thematicBreak = {
8843
9001
  tokenize: tokenizeThematicBreak
8844
9002
  };
8845
9003
  function tokenizeThematicBreak(effects, ok3, nok) {
8846
- let size = 0;
9004
+ let size2 = 0;
8847
9005
  let marker;
8848
9006
  return start;
8849
9007
  function start(code2) {
@@ -8859,7 +9017,7 @@ function tokenizeThematicBreak(effects, ok3, nok) {
8859
9017
  effects.enter("thematicBreakSequence");
8860
9018
  return sequence(code2);
8861
9019
  }
8862
- if (size >= 3 && (code2 === null || markdownLineEnding(code2))) {
9020
+ if (size2 >= 3 && (code2 === null || markdownLineEnding(code2))) {
8863
9021
  effects.exit("thematicBreak");
8864
9022
  return ok3(code2);
8865
9023
  }
@@ -8868,7 +9026,7 @@ function tokenizeThematicBreak(effects, ok3, nok) {
8868
9026
  function sequence(code2) {
8869
9027
  if (code2 === marker) {
8870
9028
  effects.consume(code2);
8871
- size++;
9029
+ size2++;
8872
9030
  return sequence;
8873
9031
  }
8874
9032
  effects.exit("thematicBreakSequence");
@@ -8897,7 +9055,7 @@ function tokenizeListStart(effects, ok3, nok) {
8897
9055
  const self = this;
8898
9056
  const tail = self.events[self.events.length - 1];
8899
9057
  let initialSize = tail && tail[1].type === "linePrefix" ? tail[2].sliceSerialize(tail[1], true).length : 0;
8900
- let size = 0;
9058
+ let size2 = 0;
8901
9059
  return start;
8902
9060
  function start(code2) {
8903
9061
  const kind = self.containerState.type || (code2 === 42 || code2 === 43 || code2 === 45 ? "listUnordered" : "listOrdered");
@@ -8921,11 +9079,11 @@ function tokenizeListStart(effects, ok3, nok) {
8921
9079
  return nok(code2);
8922
9080
  }
8923
9081
  function inside(code2) {
8924
- if (asciiDigit(code2) && ++size < 10) {
9082
+ if (asciiDigit(code2) && ++size2 < 10) {
8925
9083
  effects.consume(code2);
8926
9084
  return inside;
8927
9085
  }
8928
- if ((!self.interrupt || size < 2) && (self.containerState.marker ? code2 === self.containerState.marker : code2 === 41 || code2 === 46)) {
9086
+ if ((!self.interrupt || size2 < 2) && (self.containerState.marker ? code2 === self.containerState.marker : code2 === 41 || code2 === 46)) {
8929
9087
  effects.exit("listItemValue");
8930
9088
  return atMarker(code2);
8931
9089
  }
@@ -9013,6 +9171,7 @@ var setextUnderline = {
9013
9171
  tokenize: tokenizeSetextUnderline
9014
9172
  };
9015
9173
  function resolveToSetextUnderline(events, context) {
9174
+ const editMap = new EditMap();
9016
9175
  let index2 = events.length;
9017
9176
  let content3;
9018
9177
  let text4;
@@ -9028,7 +9187,7 @@ function resolveToSetextUnderline(events, context) {
9028
9187
  }
9029
9188
  } else {
9030
9189
  if (events[index2][1].type === "content") {
9031
- events.splice(index2, 1);
9190
+ editMap.add(index2, 1, []);
9032
9191
  }
9033
9192
  if (!definition2 && events[index2][1].type === "definition") {
9034
9193
  definition2 = index2;
@@ -9046,15 +9205,16 @@ function resolveToSetextUnderline(events, context) {
9046
9205
  };
9047
9206
  events[text4][1].type = "setextHeadingText";
9048
9207
  if (definition2) {
9049
- events.splice(text4, 0, ["enter", heading, context]);
9050
- events.splice(definition2 + 1, 0, ["exit", events[content3][1], context]);
9208
+ editMap.add(text4, 0, [["enter", heading, context]]);
9209
+ editMap.add(definition2 + 1, 0, [["exit", events[content3][1], context]]);
9051
9210
  events[content3][1].end = {
9052
9211
  ...events[definition2][1].end
9053
9212
  };
9054
9213
  } else {
9055
9214
  events[content3][1] = heading;
9056
9215
  }
9057
- events.push(["exit", heading, context]);
9216
+ editMap.add(events.length, 0, [["exit", heading, context]]);
9217
+ editMap.consume(events);
9058
9218
  return events;
9059
9219
  }
9060
9220
  function tokenizeSetextUnderline(effects, ok3, nok) {
@@ -9214,6 +9374,7 @@ function createResolver(extraResolver) {
9214
9374
  }
9215
9375
  }
9216
9376
  function resolveAllLineSuffixes(events, context) {
9377
+ const editMap = new EditMap();
9217
9378
  let eventIndex = 0;
9218
9379
  while (++eventIndex <= events.length) {
9219
9380
  if ((eventIndex === events.length || events[eventIndex][1].type === "lineEnding") && events[eventIndex - 1][1].type === "data") {
@@ -9221,21 +9382,23 @@ function resolveAllLineSuffixes(events, context) {
9221
9382
  const chunks = context.sliceStream(data);
9222
9383
  let index2 = chunks.length;
9223
9384
  let bufferIndex = -1;
9224
- let size = 0;
9385
+ let size2 = 0;
9225
9386
  let tabs;
9226
9387
  while (index2--) {
9227
9388
  const chunk = chunks[index2];
9228
9389
  if (typeof chunk === "string") {
9229
9390
  bufferIndex = chunk.length;
9230
9391
  while (chunk.charCodeAt(bufferIndex - 1) === 32) {
9231
- size++;
9392
+ size2++;
9232
9393
  bufferIndex--;
9233
9394
  }
9234
- if (bufferIndex) break;
9395
+ if (bufferIndex) {
9396
+ break;
9397
+ }
9235
9398
  bufferIndex = -1;
9236
9399
  } else if (chunk === -2) {
9237
9400
  tabs = true;
9238
- size++;
9401
+ size2++;
9239
9402
  } else if (chunk === -1) {
9240
9403
  } else {
9241
9404
  index2++;
@@ -9243,17 +9406,17 @@ function resolveAllLineSuffixes(events, context) {
9243
9406
  }
9244
9407
  }
9245
9408
  if (context._contentTypeTextTrailing && eventIndex === events.length) {
9246
- size = 0;
9409
+ size2 = 0;
9247
9410
  }
9248
- if (size) {
9411
+ if (size2) {
9249
9412
  const token = {
9250
- type: eventIndex === events.length || tabs || size < 2 ? "lineSuffix" : "hardBreakTrailing",
9413
+ type: eventIndex === events.length || tabs || size2 < 2 ? "lineSuffix" : "hardBreakTrailing",
9251
9414
  start: {
9252
9415
  _bufferIndex: index2 ? bufferIndex : data.start._bufferIndex + bufferIndex,
9253
9416
  _index: data.start._index + index2,
9254
9417
  line: data.end.line,
9255
- column: data.end.column - size,
9256
- offset: data.end.offset - size
9418
+ column: data.end.column - size2,
9419
+ offset: data.end.offset - size2
9257
9420
  },
9258
9421
  end: {
9259
9422
  ...data.end
@@ -9265,13 +9428,13 @@ function resolveAllLineSuffixes(events, context) {
9265
9428
  if (data.start.offset === data.end.offset) {
9266
9429
  Object.assign(data, token);
9267
9430
  } else {
9268
- events.splice(eventIndex, 0, ["enter", token, context], ["exit", token, context]);
9269
- eventIndex += 2;
9431
+ editMap.add(eventIndex, 0, [["enter", token, context], ["exit", token, context]]);
9270
9432
  }
9271
9433
  }
9272
9434
  eventIndex++;
9273
9435
  }
9274
9436
  }
9437
+ editMap.consume(events);
9275
9438
  return events;
9276
9439
  }
9277
9440
 
@@ -9429,11 +9592,10 @@ function createTokenizer(parser, initialize, from) {
9429
9592
  accountForPotentialSkip();
9430
9593
  }
9431
9594
  function main() {
9432
- let chunkIndex;
9433
9595
  while (point4._index < chunks.length) {
9434
9596
  const chunk = chunks[point4._index];
9435
9597
  if (typeof chunk === "string") {
9436
- chunkIndex = point4._index;
9598
+ const chunkIndex = point4._index;
9437
9599
  if (point4._bufferIndex < 0) {
9438
9600
  point4._bufferIndex = 0;
9439
9601
  }
@@ -9641,30 +9803,34 @@ function serializeChunks(chunks, expandTabs) {
9641
9803
  let value;
9642
9804
  if (typeof chunk === "string") {
9643
9805
  value = chunk;
9644
- } else switch (chunk) {
9645
- case -5: {
9646
- value = "\r";
9647
- break;
9648
- }
9649
- case -4: {
9650
- value = "\n";
9651
- break;
9652
- }
9653
- case -3: {
9654
- value = "\r\n";
9655
- break;
9656
- }
9657
- case -2: {
9658
- value = expandTabs ? " " : " ";
9659
- break;
9660
- }
9661
- case -1: {
9662
- if (!expandTabs && atTab) continue;
9663
- value = " ";
9664
- break;
9665
- }
9666
- default: {
9667
- value = String.fromCharCode(chunk);
9806
+ } else {
9807
+ switch (chunk) {
9808
+ case -5: {
9809
+ value = "\r";
9810
+ break;
9811
+ }
9812
+ case -4: {
9813
+ value = "\n";
9814
+ break;
9815
+ }
9816
+ case -3: {
9817
+ value = "\r\n";
9818
+ break;
9819
+ }
9820
+ case -2: {
9821
+ value = expandTabs ? " " : " ";
9822
+ break;
9823
+ }
9824
+ case -1: {
9825
+ if (!expandTabs && atTab) {
9826
+ continue;
9827
+ }
9828
+ value = " ";
9829
+ break;
9830
+ }
9831
+ default: {
9832
+ value = String.fromCharCode(chunk);
9833
+ }
9668
9834
  }
9669
9835
  }
9670
9836
  atTab = chunk === -2;
@@ -9715,14 +9881,9 @@ function preprocess() {
9715
9881
  let atCarriageReturn;
9716
9882
  return preprocessor;
9717
9883
  function preprocessor(value, encoding, end) {
9718
- const chunks = [];
9719
- let match;
9720
- let next;
9721
- let startPosition;
9722
- let endPosition;
9723
- let code2;
9724
9884
  value = buffer + (typeof value === "string" ? value.toString() : new TextDecoder(encoding || void 0).decode(value));
9725
- startPosition = 0;
9885
+ const chunks = [];
9886
+ let startPosition = 0;
9726
9887
  buffer = "";
9727
9888
  if (start) {
9728
9889
  if (value.charCodeAt(0) === 65279) {
@@ -9732,9 +9893,9 @@ function preprocess() {
9732
9893
  }
9733
9894
  while (startPosition < value.length) {
9734
9895
  search.lastIndex = startPosition;
9735
- match = search.exec(value);
9736
- endPosition = match && match.index !== void 0 ? match.index : value.length;
9737
- code2 = value.charCodeAt(endPosition);
9896
+ const match = search.exec(value);
9897
+ const endPosition = match && match.index !== void 0 ? match.index : value.length;
9898
+ const code2 = value.charCodeAt(endPosition);
9738
9899
  if (!match) {
9739
9900
  buffer = value.slice(startPosition);
9740
9901
  break;
@@ -9758,9 +9919,11 @@ function preprocess() {
9758
9919
  break;
9759
9920
  }
9760
9921
  case 9: {
9761
- next = Math.ceil(column / 4) * 4;
9922
+ const next = Math.ceil(column / 4) * 4;
9762
9923
  chunks.push(-2);
9763
- while (column++ < next) chunks.push(-1);
9924
+ while (column++ < next) {
9925
+ chunks.push(-1);
9926
+ }
9764
9927
  break;
9765
9928
  }
9766
9929
  case 10: {
@@ -9777,8 +9940,12 @@ function preprocess() {
9777
9940
  startPosition = endPosition + 1;
9778
9941
  }
9779
9942
  if (end) {
9780
- if (atCarriageReturn) chunks.push(-5);
9781
- if (buffer) chunks.push(buffer);
9943
+ if (atCarriageReturn) {
9944
+ chunks.push(-5);
9945
+ }
9946
+ if (buffer) {
9947
+ chunks.push(buffer);
9948
+ }
9782
9949
  chunks.push(null);
9783
9950
  }
9784
9951
  return chunks;
@@ -10712,15 +10879,15 @@ function tokenizeProtocolAutolink(effects, ok3, nok) {
10712
10879
  }
10713
10880
  }
10714
10881
  function tokenizeWwwPrefix(effects, ok3, nok) {
10715
- let size = 0;
10882
+ let size2 = 0;
10716
10883
  return wwwPrefixInside;
10717
10884
  function wwwPrefixInside(code2) {
10718
- if ((code2 === 87 || code2 === 119) && size < 3) {
10719
- size++;
10885
+ if ((code2 === 87 || code2 === 119) && size2 < 3) {
10886
+ size2++;
10720
10887
  effects.consume(code2);
10721
10888
  return wwwPrefixInside;
10722
10889
  }
10723
- if (code2 === 46 && size === 3) {
10890
+ if (code2 === 46 && size2 === 3) {
10724
10891
  effects.consume(code2);
10725
10892
  return wwwPrefixAfter;
10726
10893
  }
@@ -11006,7 +11173,7 @@ function resolveToPotentialGfmFootnoteCall(events, context) {
11006
11173
  function tokenizeGfmFootnoteCall(effects, ok3, nok) {
11007
11174
  const self = this;
11008
11175
  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);
11009
- let size = 0;
11176
+ let size2 = 0;
11010
11177
  let data;
11011
11178
  return start;
11012
11179
  function start(code2) {
@@ -11028,7 +11195,7 @@ function tokenizeGfmFootnoteCall(effects, ok3, nok) {
11028
11195
  function callData(code2) {
11029
11196
  if (
11030
11197
  // Too long.
11031
- size > 999 || // Closing brace with nothing.
11198
+ size2 > 999 || // Closing brace with nothing.
11032
11199
  code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.
11033
11200
  // `\n` and `[` not being supported makes sense.
11034
11201
  code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)
@@ -11050,14 +11217,14 @@ function tokenizeGfmFootnoteCall(effects, ok3, nok) {
11050
11217
  if (!markdownLineEndingOrSpace(code2)) {
11051
11218
  data = true;
11052
11219
  }
11053
- size++;
11220
+ size2++;
11054
11221
  effects.consume(code2);
11055
11222
  return code2 === 92 ? callEscape : callData;
11056
11223
  }
11057
11224
  function callEscape(code2) {
11058
11225
  if (code2 === 91 || code2 === 92 || code2 === 93) {
11059
11226
  effects.consume(code2);
11060
- size++;
11227
+ size2++;
11061
11228
  return callData;
11062
11229
  }
11063
11230
  return callData(code2);
@@ -11067,7 +11234,7 @@ function tokenizeDefinitionStart(effects, ok3, nok) {
11067
11234
  const self = this;
11068
11235
  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);
11069
11236
  let identifier;
11070
- let size = 0;
11237
+ let size2 = 0;
11071
11238
  let data;
11072
11239
  return start;
11073
11240
  function start(code2) {
@@ -11092,7 +11259,7 @@ function tokenizeDefinitionStart(effects, ok3, nok) {
11092
11259
  function labelInside(code2) {
11093
11260
  if (
11094
11261
  // Too long.
11095
- size > 999 || // Closing brace with nothing.
11262
+ size2 > 999 || // Closing brace with nothing.
11096
11263
  code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.
11097
11264
  // `\n` and `[` not being supported makes sense.
11098
11265
  code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)
@@ -11112,14 +11279,14 @@ function tokenizeDefinitionStart(effects, ok3, nok) {
11112
11279
  if (!markdownLineEndingOrSpace(code2)) {
11113
11280
  data = true;
11114
11281
  }
11115
- size++;
11282
+ size2++;
11116
11283
  effects.consume(code2);
11117
11284
  return code2 === 92 ? labelEscape : labelInside;
11118
11285
  }
11119
11286
  function labelEscape(code2) {
11120
11287
  if (code2 === 91 || code2 === 92 || code2 === 93) {
11121
11288
  effects.consume(code2);
11122
- size++;
11289
+ size2++;
11123
11290
  return labelInside;
11124
11291
  }
11125
11292
  return labelInside(code2);
@@ -11222,7 +11389,7 @@ function gfmStrikethrough(options) {
11222
11389
  function tokenizeStrikethrough(effects, ok3, nok) {
11223
11390
  const previous3 = this.previous;
11224
11391
  const events = this.events;
11225
- let size = 0;
11392
+ let size2 = 0;
11226
11393
  return start;
11227
11394
  function start(code2) {
11228
11395
  if (previous3 === 126 && events[events.length - 1][1].type !== "characterEscape") {
@@ -11234,12 +11401,12 @@ function gfmStrikethrough(options) {
11234
11401
  function more(code2) {
11235
11402
  const before = classifyCharacter(previous3);
11236
11403
  if (code2 === 126) {
11237
- if (size > 1) return nok(code2);
11404
+ if (size2 > 1) return nok(code2);
11238
11405
  effects.consume(code2);
11239
- size++;
11406
+ size2++;
11240
11407
  return more;
11241
11408
  }
11242
- if (size < 2 && !single) return nok(code2);
11409
+ if (size2 < 2 && !single) return nok(code2);
11243
11410
  const token = effects.exit("strikethroughSequenceTemporary");
11244
11411
  const after = classifyCharacter(code2);
11245
11412
  token._open = !after || after === 2 && Boolean(before);
@@ -11250,23 +11417,28 @@ function gfmStrikethrough(options) {
11250
11417
  }
11251
11418
 
11252
11419
  // node_modules/micromark-extension-gfm-table/lib/edit-map.js
11253
- var EditMap = class {
11420
+ var EditMap2 = class {
11254
11421
  /**
11255
11422
  * Create a new edit map.
11256
11423
  */
11257
11424
  constructor() {
11258
11425
  this.map = [];
11426
+ this.index = /* @__PURE__ */ new Map();
11259
11427
  }
11260
11428
  /**
11261
11429
  * Create an edit: a remove and/or add at a certain place.
11262
11430
  *
11263
11431
  * @param {number} index
11432
+ * Index at which to apply the edit.
11264
11433
  * @param {number} remove
11434
+ * Count of items to remove at the index.
11265
11435
  * @param {Array<Event>} add
11436
+ * Items to add at the index.
11266
11437
  * @returns {undefined}
11438
+ * Nothing.
11267
11439
  */
11268
11440
  add(index2, remove, add) {
11269
- addImplementation(this, index2, remove, add);
11441
+ addImplementation2(this, index2, remove, add);
11270
11442
  }
11271
11443
  // To do: add this when moving to `micromark`.
11272
11444
  // /**
@@ -11284,7 +11456,9 @@ var EditMap = class {
11284
11456
  * Done, change the events.
11285
11457
  *
11286
11458
  * @param {Array<Event>} events
11459
+ * List of events to apply the edits to.
11287
11460
  * @returns {undefined}
11461
+ * Nothing.
11288
11462
  */
11289
11463
  consume(events) {
11290
11464
  this.map.sort(function(a, b) {
@@ -11310,22 +11484,22 @@ var EditMap = class {
11310
11484
  slice = vecs.pop();
11311
11485
  }
11312
11486
  this.map.length = 0;
11487
+ this.index.clear();
11313
11488
  }
11314
11489
  };
11315
- function addImplementation(editMap, at, remove, add) {
11316
- let index2 = 0;
11490
+ function addImplementation2(editMap, at, remove, add) {
11317
11491
  if (remove === 0 && add.length === 0) {
11318
11492
  return;
11319
11493
  }
11320
- while (index2 < editMap.map.length) {
11321
- if (editMap.map[index2][0] === at) {
11322
- editMap.map[index2][1] += remove;
11323
- editMap.map[index2][2].push(...add);
11324
- return;
11325
- }
11326
- index2 += 1;
11494
+ const existing = editMap.index.get(at);
11495
+ if (existing) {
11496
+ existing[1] += remove;
11497
+ existing[2].push(...add);
11498
+ return;
11327
11499
  }
11328
- editMap.map.push([at, remove, add]);
11500
+ const change = [at, remove, add];
11501
+ editMap.map.push(change);
11502
+ editMap.index.set(at, change);
11329
11503
  }
11330
11504
 
11331
11505
  // node_modules/micromark-extension-gfm-table/lib/infer.js
@@ -11369,17 +11543,22 @@ function gfmTable() {
11369
11543
  }
11370
11544
  function tokenizeTable(effects, ok3, nok) {
11371
11545
  const self = this;
11372
- let size = 0;
11546
+ let size2 = 0;
11373
11547
  let sizeB = 0;
11374
11548
  let seen;
11375
11549
  return start;
11376
11550
  function start(code2) {
11377
11551
  let index2 = self.events.length - 1;
11378
11552
  while (index2 > -1) {
11379
- const type = self.events[index2][1].type;
11553
+ const {
11554
+ type
11555
+ } = self.events[index2][1];
11380
11556
  if (type === "lineEnding" || // Note: markdown-rs uses `whitespace` instead of `linePrefix`
11381
- type === "linePrefix") index2--;
11382
- else break;
11557
+ type === "linePrefix") {
11558
+ index2--;
11559
+ } else {
11560
+ break;
11561
+ }
11383
11562
  }
11384
11563
  const tail = index2 > -1 ? self.events[index2][1].type : null;
11385
11564
  const next = tail === "tableHead" || tail === "tableRow" ? bodyRowStart : headRowBefore;
@@ -11423,7 +11602,7 @@ function tokenizeTable(effects, ok3, nok) {
11423
11602
  sizeB += 1;
11424
11603
  if (seen) {
11425
11604
  seen = false;
11426
- size += 1;
11605
+ size2 += 1;
11427
11606
  }
11428
11607
  if (code2 === 124) {
11429
11608
  effects.enter("tableCellDivider");
@@ -11533,7 +11712,7 @@ function tokenizeTable(effects, ok3, nok) {
11533
11712
  return headDelimiterBefore(code2);
11534
11713
  }
11535
11714
  if (code2 === null || markdownLineEnding(code2)) {
11536
- if (!seen || size !== sizeB) {
11715
+ if (!seen || size2 !== sizeB) {
11537
11716
  return headDelimiterNok(code2);
11538
11717
  }
11539
11718
  effects.exit("tableDelimiterRow");
@@ -11593,7 +11772,7 @@ function resolveTable(events, context) {
11593
11772
  let currentTable;
11594
11773
  let currentBody;
11595
11774
  let currentCell;
11596
- const map = new EditMap();
11775
+ const map = new EditMap2();
11597
11776
  while (++index2 < events.length) {
11598
11777
  const event = events[index2];
11599
11778
  const token = event[1];
@@ -12335,6 +12514,7 @@ function gfmFootnoteFromMarkdown() {
12335
12514
  }
12336
12515
 
12337
12516
  // node_modules/mdast-util-gfm-strikethrough/lib/index.js
12517
+ handleDelete.attention = attentionDelete;
12338
12518
  handleDelete.peek = peekDelete;
12339
12519
  function gfmStrikethroughFromMarkdown() {
12340
12520
  return {
@@ -12344,24 +12524,28 @@ function gfmStrikethroughFromMarkdown() {
12344
12524
  };
12345
12525
  }
12346
12526
  function enterStrikethrough(token) {
12347
- this.enter({ type: "delete", children: [] }, token);
12527
+ this.enter({ type: "delete", children: [], position: void 0 }, token);
12348
12528
  }
12349
12529
  function exitStrikethrough(token) {
12350
12530
  this.exit(token);
12351
12531
  }
12352
12532
  function handleDelete(node2, _, state, info) {
12353
12533
  const tracker = state.createTracker(info);
12534
+ const sequence = state.stack.includes("strikethrough") ? "~" : "~~";
12354
12535
  const exit3 = state.enter("strikethrough");
12355
- let value = tracker.move("~~");
12536
+ let value = tracker.move(sequence);
12356
12537
  value += state.containerPhrasing(node2, {
12357
12538
  ...tracker.current(),
12358
12539
  before: value,
12359
12540
  after: "~"
12360
12541
  });
12361
- value += tracker.move("~~");
12542
+ value += tracker.move(sequence);
12362
12543
  exit3();
12363
12544
  return value;
12364
12545
  }
12546
+ function attentionDelete() {
12547
+ return { construct: "strikethrough", markers: ["~"], sizes: [2, 1] };
12548
+ }
12365
12549
  function peekDelete() {
12366
12550
  return "~";
12367
12551
  }
@@ -12616,14 +12800,14 @@ function PendantReader({ inbox, selected, error, anchor, onSelect, onClose, onVi
12616
12800
  }, [onClose, anchor]);
12617
12801
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("section", { ref: panel, id: "dsh-partner-pendant-inbox", className: "dsh-partner-pendant-inbox", "aria-label": "\u4F19\u4F34\u6D88\u606F", tabIndex: -1, style: placement, children: [
12618
12802
  /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("header", { children: [
12619
- detail && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("button", { type: "button", "aria-label": "\u8FD4\u56DE\u6D88\u606F\u5217\u8868", onClick: () => onSelect(), children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_dsh_client_ui_primitives9.IconChevronDownOutline14, { size: 16, className: "dsh-partner-pendant-back" }) }),
12620
- !detail && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "dsh-partner-pendant-reader-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_dsh_client_ui_primitives9.IconNewChatOutline16, { size: 18 }) }),
12803
+ detail && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("button", { type: "button", "aria-label": "\u8FD4\u56DE\u6D88\u606F\u5217\u8868", onClick: () => onSelect(), children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_dsh_client_ui_primitives9.IconChevronDownOutlineRegular, { size: 16, className: "dsh-partner-pendant-back" }) }),
12804
+ !detail && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "dsh-partner-pendant-reader-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_dsh_client_ui_primitives9.IconNewChatOutlineRegular, { size: 18 }) }),
12621
12805
  /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "dsh-partner-pendant-reader-heading", children: [
12622
12806
  /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("strong", { children: detail ? detail.companionName : "\u4F19\u4F34\u6D88\u606F" }),
12623
12807
  /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("small", { children: detail ? detail.kind === "system" ? "\u63D2\u4EF6\u7CFB\u7EDF\u901A\u77E5" : "\u6765\u81EA\u4F19\u4F34\u7684\u6D88\u606F" : "\u56DE\u590D\u4E0E\u4EFB\u52A1\u52A8\u6001" })
12624
12808
  ] }),
12625
12809
  !!inbox.unread && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "dsh-partner-pendant-reader-count", "aria-label": `${inbox.unread} \u6761\u672A\u8BFB`, children: inbox.unread }),
12626
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("button", { type: "button", "aria-label": "\u5173\u95ED\u4F19\u4F34\u6D88\u606F", onClick: (event) => onClose(event.detail === 0), children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_dsh_client_ui_primitives9.IconCloseOutline16, { size: 16 }) })
12810
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("button", { type: "button", "aria-label": "\u5173\u95ED\u4F19\u4F34\u6D88\u606F", onClick: (event) => onClose(event.detail === 0), children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_dsh_client_ui_primitives9.IconCloseOutlineRegular, { size: 16 }) })
12627
12811
  ] }),
12628
12812
  error && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { role: "alert", className: "dsh-partner-pendant-error", children: error }),
12629
12813
  detail ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
@@ -12641,7 +12825,7 @@ function PendantReader({ inbox, selected, error, anchor, onSelect, onClose, onVi
12641
12825
  /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: inbox.items.length })
12642
12826
  ] }),
12643
12827
  /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("button", { type: "button", className: "dsh-partner-pendant-source", onClick: () => onVisit(detail), children: [
12644
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_dsh_client_ui_primitives9.IconLinkOutline16, { size: 15 }),
12828
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_dsh_client_ui_primitives9.IconLinkOutlineRegular, { size: 15 }),
12645
12829
  detail.kind === "system" ? "\u524D\u5F80\u5347\u7EA7\u8FC1\u79FB" : detail.kind === "task" ? "\u67E5\u770B\u4EFB\u52A1" : detail.kind === "schedule" ? "\u67E5\u770B\u5B9A\u65F6\u4EFB\u52A1" : "\u8FDB\u5165\u4F1A\u8BDD"
12646
12830
  ] })
12647
12831
  ] })
@@ -12664,7 +12848,7 @@ function PendantReader({ inbox, selected, error, anchor, onSelect, onClose, onVi
12664
12848
  " \u6761"
12665
12849
  ] }),
12666
12850
  /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("button", { type: "button", disabled: !inbox.unread, onClick: onReadAll, children: [
12667
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_dsh_client_ui_primitives9.IconCheckOutline14, { size: 14 }),
12851
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_dsh_client_ui_primitives9.IconCheckOutlineRegular, { size: 14 }),
12668
12852
  "\u5168\u90E8\u5DF2\u8BFB"
12669
12853
  ] })
12670
12854
  ] })
@@ -12672,6 +12856,63 @@ function PendantReader({ inbox, selected, error, anchor, onSelect, onClose, onVi
12672
12856
  ] });
12673
12857
  }
12674
12858
 
12859
+ // src/pendant/startup.ts
12860
+ function waitForPendantStartup(signal, doc = document) {
12861
+ return new Promise((resolve, reject) => {
12862
+ const win = doc.defaultView;
12863
+ let timer2 = 0, idle = 0;
12864
+ const started = Date.now();
12865
+ const cleanup = () => {
12866
+ win.clearTimeout(timer2);
12867
+ if (idle) win.cancelIdleCallback?.(idle);
12868
+ doc.removeEventListener("visibilitychange", schedule);
12869
+ doc.removeEventListener("pointerdown", schedule);
12870
+ doc.removeEventListener("keydown", schedule);
12871
+ signal.removeEventListener("abort", abort);
12872
+ };
12873
+ const abort = () => {
12874
+ cleanup();
12875
+ reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
12876
+ };
12877
+ const run = () => {
12878
+ idle = 0;
12879
+ if (signal.aborted) {
12880
+ abort();
12881
+ return;
12882
+ }
12883
+ if (doc.hidden) {
12884
+ schedule();
12885
+ return;
12886
+ }
12887
+ cleanup();
12888
+ resolve();
12889
+ };
12890
+ function schedule() {
12891
+ win.clearTimeout(timer2);
12892
+ if (idle) {
12893
+ win.cancelIdleCallback?.(idle);
12894
+ idle = 0;
12895
+ }
12896
+ if (doc.hidden) return;
12897
+ const elapsed = Date.now() - started;
12898
+ timer2 = win.setTimeout(() => {
12899
+ timer2 = 0;
12900
+ if (win.requestIdleCallback) idle = win.requestIdleCallback(run, { timeout: 1500 });
12901
+ else run();
12902
+ }, Math.max(0, 2e3 - elapsed, Math.min(600, 6e3 - elapsed)));
12903
+ }
12904
+ if (signal.aborted) {
12905
+ abort();
12906
+ return;
12907
+ }
12908
+ signal.addEventListener("abort", abort, { once: true });
12909
+ doc.addEventListener("visibilitychange", schedule);
12910
+ doc.addEventListener("pointerdown", schedule, { passive: true });
12911
+ doc.addEventListener("keydown", schedule);
12912
+ schedule();
12913
+ });
12914
+ }
12915
+
12675
12916
  // src/pendant/widget.tsx
12676
12917
  var import_jsx_runtime23 = require("react/jsx-runtime");
12677
12918
  function messageLabel(notice) {
@@ -12720,10 +12961,10 @@ function ActivePendant({ controller, settings }) {
12720
12961
  (0, import_react25.useEffect)(() => {
12721
12962
  const abort = new AbortController();
12722
12963
  const url = `${PARTNER_API}/pendant/renderer.js`;
12723
- void import(
12964
+ void waitForPendantStartup(abort.signal).then(() => import(
12724
12965
  /* @vite-ignore */
12725
12966
  url
12726
- ).then(async (module2) => {
12967
+ )).then(async (module2) => {
12727
12968
  if (abort.signal.aborted || !canvas.current || !hit.current) return;
12728
12969
  const instance = await module2.createLanyard(canvas.current, hit.current, {
12729
12970
  signal: abort.signal,
@@ -12861,7 +13102,7 @@ function CompanionPicker({ companions, selectedId, onChange }) {
12861
13102
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("strong", { children: current2?.name ?? "\u8FD8\u6CA1\u6709\u4F19\u4F34" }),
12862
13103
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("small", { children: current2?.role || "\u9009\u62E9\u4F19\u4F34" })
12863
13104
  ] }),
12864
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "dsh-partner-companion-chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_dsh_client_ui_primitives10.IconChevronDownOutline14, { size: 14 }) })
13105
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "dsh-partner-companion-chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_dsh_client_ui_primitives10.IconChevronDownOutlineRegular, { size: 14 }) })
12865
13106
  ] }),
12866
13107
  open && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { ref: list2, id: listId, role: "listbox", "aria-label": "\u9009\u62E9\u4F19\u4F34", className: "dsh-partner-companion-options", onKeyDown: navigate, children: companions.map((item) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("button", { type: "button", role: "option", "aria-selected": item.id === current2?.id, tabIndex: item.id === current2?.id ? 0 : -1, onClick: () => {
12867
13108
  dismiss();
@@ -12872,7 +13113,7 @@ function CompanionPicker({ companions, selectedId, onChange }) {
12872
13113
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("strong", { children: item.name }),
12873
13114
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("small", { children: item.role })
12874
13115
  ] }),
12875
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "dsh-partner-companion-check", "aria-hidden": "true", children: item.id === current2?.id && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_dsh_client_ui_primitives10.IconCheckOutline14, { size: 14 }) })
13116
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "dsh-partner-companion-check", "aria-hidden": "true", children: item.id === current2?.id && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_dsh_client_ui_primitives10.IconCheckOutlineRegular, { size: 14 }) })
12876
13117
  ] }, item.id)) })
12877
13118
  ] });
12878
13119
  }
@@ -13288,7 +13529,7 @@ function SkillsPanel() {
13288
13529
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(WorkspaceHero, { eyebrow: "Capability catalog", title: "Skill \u5E02\u573A", detail: "\u96C6\u4E2D\u5B89\u88C5\u548C\u7EF4\u62A4\u5DE5\u4F5C\u80FD\u529B\uFF1B\u5B89\u88C5\u540E\uFF0C\u518D\u4E3A\u9700\u8981\u5B83\u7684\u4F19\u4F34\u5355\u72EC\u542F\u7528\u3002", actions: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("button", { type: "button", disabled: loading, onClick: () => {
13289
13530
  void load2(true);
13290
13531
  }, children: [
13291
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconRefreshOutline16, { size: 15 }),
13532
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconRefreshOutlineRegular, { size: 15 }),
13292
13533
  loading ? "\u540C\u6B65\u4E2D\u2026" : "\u5237\u65B0\u5E02\u573A"
13293
13534
  ] }) }),
13294
13535
  error && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(WorkspaceNotice, { children: error }),
@@ -13302,15 +13543,15 @@ function SkillsPanel() {
13302
13543
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(WorkspaceBlock, { title: "\u5DF2\u5B89\u88C5", detail: `${catalog.installed.length} \u4E2A\u53EF\u4F9B\u4F19\u4F34\u4F7F\u7528`, actions: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
13303
13544
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("button", { type: "button", onClick: () => setImportingSkill(true), children: "\u5BFC\u5165 Skill" }),
13304
13545
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("button", { type: "button", onClick: () => setCreatingSkill(true), children: [
13305
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutline16, { size: 14 }),
13546
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutlineRegular, { size: 14 }),
13306
13547
  "\u65B0\u5EFA Skill"
13307
13548
  ] })
13308
13549
  ] }), children: loading ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollectionSkeleton, { rows: 2 }) : catalog.installed.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollectionEmpty, { title: "\u8FD8\u6CA1\u6709\u5B89\u88C5 Skill", detail: "\u53EF\u4EE5\u521B\u5EFA\u81EA\u5DF1\u7684 Skill\uFF0C\u6216\u4ECE\u4E0B\u65B9\u5E02\u573A\u9009\u62E9\u3002", action: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("button", { type: "button", onClick: () => setCreatingSkill(true), children: [
13309
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutline16, { size: 14 }),
13550
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutlineRegular, { size: 14 }),
13310
13551
  "\u65B0\u5EFA\u7B2C\u4E00\u4E2A Skill"
13311
13552
  ] }) }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
13312
13553
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "dsh-partner-skill-installed is-market", children: visibleInstalled.map((skill) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("article", { children: [
13313
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "dsh-partner-skill-mark", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconCheckOutline16, { size: 16 }) }),
13554
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "dsh-partner-skill-mark", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconCheckOutlineRegular, { size: 16 }) }),
13314
13555
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { children: [
13315
13556
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("strong", { children: skill.displayName }),
13316
13557
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { children: skill.description }),
@@ -13324,7 +13565,7 @@ function SkillsPanel() {
13324
13565
  ] }),
13325
13566
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("button", { type: "button", className: "is-icon", disabled: busy === skill.id, "aria-label": `\u5378\u8F7D ${skill.displayName}`, onClick: () => {
13326
13567
  void uninstall(skill.id);
13327
- }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconTrashOutline16, { size: 15 }) }),
13568
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconTrashOutlineRegular, { size: 15 }) }),
13328
13569
  actionError?.kind === "uninstall" && actionError.id === skill.id && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("p", { className: "dsh-partner-skill-action-error", role: "alert", children: [
13329
13570
  "\u5378\u8F7D\u5931\u8D25\uFF1A",
13330
13571
  actionError.message
@@ -13338,7 +13579,7 @@ function SkillsPanel() {
13338
13579
  network.proxyUrl ? " \xB7 \u5DF2\u542F\u7528" : ""
13339
13580
  ] }),
13340
13581
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("button", { type: "button", onClick: () => setAddingSource(true), children: [
13341
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutline16, { size: 14 }),
13582
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutlineRegular, { size: 14 }),
13342
13583
  "\u81EA\u5B9A\u4E49\u6E90"
13343
13584
  ] })
13344
13585
  ] }), children: [
@@ -13370,7 +13611,7 @@ function SkillsPanel() {
13370
13611
  entry.version
13371
13612
  ] }),
13372
13613
  current2 ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("button", { type: "button", disabled: true, children: [
13373
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconCheckOutline16, { size: 14 }),
13614
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconCheckOutlineRegular, { size: 14 }),
13374
13615
  "\u5DF2\u5B89\u88C5"
13375
13616
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("button", { type: "button", disabled: busy === entry.id, "aria-describedby": errorId, onClick: () => {
13376
13617
  void install(entry);
@@ -13441,7 +13682,7 @@ function CompanionSkillSettings({ companionId, onBusyChange }) {
13441
13682
  " \u4E2A\u542F\u7528"
13442
13683
  ] }),
13443
13684
  catalog.installed.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("button", { type: "button", "aria-expanded": selecting, onClick: () => setSelecting((value) => !value), children: [
13444
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutline16, { size: 14 }),
13685
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutlineRegular, { size: 14 }),
13445
13686
  "\u6DFB\u52A0 Skill"
13446
13687
  ] })
13447
13688
  ] })
@@ -13469,7 +13710,7 @@ function CompanionSkillSettings({ companionId, onBusyChange }) {
13469
13710
  ] }),
13470
13711
  catalog.installed.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "dsh-partner-feature-empty", children: "\u5C1A\u672A\u5B89\u88C5 Skill\uFF0C\u8BF7\u5148\u4ECE\u5DE6\u4FA7\u7684 Skill \u5E02\u573A\u5B89\u88C5\u3002" }) : enabledSkills.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "dsh-partner-feature-empty", children: "\u5F53\u524D\u4F19\u4F34\u8FD8\u6CA1\u6709\u542F\u7528 Skill\u3002\u70B9\u51FB\u201C\u6DFB\u52A0 Skill\u201D\u9009\u62E9\u9700\u8981\u7684\u80FD\u529B\u3002" }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
13471
13712
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "dsh-partner-skill-installed is-binding", children: visibleEnabledSkills.map((skill) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("article", { children: [
13472
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "dsh-partner-skill-mark", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconCheckOutline16, { size: 16 }) }),
13713
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "dsh-partner-skill-mark", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconCheckOutlineRegular, { size: 16 }) }),
13473
13714
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { children: [
13474
13715
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("strong", { children: skill.displayName }),
13475
13716
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { children: skill.description }),
@@ -13486,7 +13727,7 @@ function CompanionSkillSettings({ companionId, onBusyChange }) {
13486
13727
  }
13487
13728
  function SkillSearch({ value, change, count, label, placeholder, loading = false, autoFocus = false, compact = false }) {
13488
13729
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: `dsh-partner-skill-search${compact ? " is-compact" : ""}`, role: "search", "aria-label": label, children: [
13489
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "dsh-partner-skill-search-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconSearchOutline16, { size: 16 }) }),
13730
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "dsh-partner-skill-search-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconSearchOutlineRegular, { size: 16 }) }),
13490
13731
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
13491
13732
  "input",
13492
13733
  {
@@ -13504,7 +13745,7 @@ function SkillSearch({ value, change, count, label, placeholder, loading = false
13504
13745
  }
13505
13746
  }
13506
13747
  ),
13507
- value && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("button", { type: "button", className: "dsh-partner-skill-search-clear", "aria-label": "\u6E05\u7A7A\u641C\u7D22", title: "\u6E05\u7A7A\u641C\u7D22", onClick: () => change(""), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconCloseOutline16, { size: 14 }) }),
13748
+ value && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("button", { type: "button", className: "dsh-partner-skill-search-clear", "aria-label": "\u6E05\u7A7A\u641C\u7D22", title: "\u6E05\u7A7A\u641C\u7D22", onClick: () => change(""), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconCloseOutlineRegular, { size: 14 }) }),
13508
13749
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "dsh-partner-skill-search-count", "aria-live": "polite", children: loading ? "\u540C\u6B65\u4E2D" : `${count} \u9879` })
13509
13750
  ] });
13510
13751
  }
@@ -13573,7 +13814,7 @@ function NewSkillForm({ existingIds, close, changed: changed2 }) {
13573
13814
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("footer", { children: [
13574
13815
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("button", { type: "button", disabled: busy, onClick: close, children: "\u53D6\u6D88" }),
13575
13816
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("button", { type: "submit", className: "is-primary", disabled: busy, children: [
13576
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutline16, { size: 14 }),
13817
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutlineRegular, { size: 14 }),
13577
13818
  busy ? "\u521B\u5EFA\u4E2D\u2026" : "\u521B\u5EFA Skill"
13578
13819
  ] })
13579
13820
  ] })
@@ -13852,7 +14093,7 @@ function McpPanel() {
13852
14093
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(WorkspaceHero, { eyebrow: "Capability catalog", title: "MCP \u670D\u52A1", detail: "\u96C6\u4E2D\u7BA1\u7406\u5916\u90E8\u5DE5\u5177\uFF0C\u518D\u5728\u4F19\u4F34\u80FD\u529B\u4E2D\u5355\u72EC\u6388\u6743\u3002\u914D\u7F6E\u4E0E\u5DE5\u5177\u76EE\u5F55\u7684\u66F4\u65B0\u5728\u4E0B\u4E00\u8F6E\u5BF9\u8BDD\u751F\u6548\u3002", actions: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("button", { type: "button", disabled: loading || !!busy, onClick: () => {
13853
14094
  void load2();
13854
14095
  }, children: [
13855
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_dsh_client_ui_primitives12.IconRefreshOutline16, { size: 15 }),
14096
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_dsh_client_ui_primitives12.IconRefreshOutlineRegular, { size: 15 }),
13856
14097
  "\u5237\u65B0\u5217\u8868"
13857
14098
  ] }) }),
13858
14099
  error && !deleting && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(WorkspaceNotice, { children: error }),
@@ -13860,7 +14101,7 @@ function McpPanel() {
13860
14101
  /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(WorkspaceBlock, { title: "\u5DF2\u914D\u7F6E\u670D\u52A1", detail: `${catalog.servers.length} \u4E2A\u670D\u52A1 \xB7 \u5B89\u88C5\u4E0D\u7B49\u4E8E\u6388\u6743`, actions: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
13861
14102
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("button", { type: "button", onClick: () => setEditor("import"), children: "\u5BFC\u5165 JSON" }),
13862
14103
  /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("button", { type: "button", onClick: () => setEditor("new"), children: [
13863
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_dsh_client_ui_primitives12.IconPlusOutline16, { size: 14 }),
14104
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_dsh_client_ui_primitives12.IconPlusOutlineRegular, { size: 14 }),
13864
14105
  "\u65B0\u589E MCP"
13865
14106
  ] })
13866
14107
  ] }), children: [
@@ -14122,7 +14363,7 @@ function RequirementDetail({ item, tasks, directory, changed: changed2, close })
14122
14363
  " \u4E2A\u4EFB\u52A1"
14123
14364
  ] })
14124
14365
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("button", { type: "button", className: "is-danger", onClick: () => setConfirming(true), children: [
14125
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_dsh_client_ui_primitives13.IconTrashOutline16, { size: 14 }),
14366
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_dsh_client_ui_primitives13.IconTrashOutlineRegular, { size: 14 }),
14126
14367
  "\u5220\u9664\u9700\u6C42"
14127
14368
  ] })
14128
14369
  ] }),
@@ -14151,7 +14392,7 @@ function TaskBoardStage({ id, label, tasks, focused, filtered, renderTask }) {
14151
14392
  const expanded = !collapsed;
14152
14393
  return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("section", { "data-status": id, "data-empty": tasks.length === 0, "aria-labelledby": titleId, children: [
14153
14394
  /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("header", { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("button", { type: "button", className: "dsh-partner-board-stage-toggle", "aria-expanded": expanded, "aria-controls": listId, onClick: () => setCollapsed((value) => !value), children: [
14154
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_dsh_client_ui_primitives14.IconChevronRightOutline14, { size: 14 }),
14395
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_dsh_client_ui_primitives14.IconChevronRightOutlineRegular, { size: 14 }),
14155
14396
  /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("strong", { id: titleId, children: label }),
14156
14397
  /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("b", { children: tasks.length })
14157
14398
  ] }) }),
@@ -14400,7 +14641,7 @@ function RequirementTasksPanel({ initialTaskId, openRequest, requirementId, back
14400
14641
  !detailOnly && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
14401
14642
  back && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("nav", { className: "dsh-partner-requirement-breadcrumb", children: [
14402
14643
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", onClick: back, children: "\u9700\u6C42\u770B\u677F" }),
14403
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconChevronRightOutline14, { size: 14 }),
14644
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconChevronRightOutlineRegular, { size: 14 }),
14404
14645
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children: requirement?.title ?? "\u672A\u5F52\u7C7B\u65E7\u4EFB\u52A1" })
14405
14646
  ] }),
14406
14647
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(WorkspaceHero, { eyebrow: requirement ? requirementStatus(requirement) : "\u65E7\u4EFB\u52A1", title: requirement?.title ?? "\u672A\u5F52\u7C7B\u65E7\u4EFB\u52A1", detail: requirement?.description || "\u4EFB\u52A1\u6309\u9636\u6BB5\u5C55\u793A\uFF0C\u70B9\u51FB\u67E5\u770B\u4EA4\u4ED8\u3001\u4F9D\u8D56\u548C\u6267\u884C\u72B6\u6001\u3002", actions: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
@@ -14410,7 +14651,7 @@ function RequirementTasksPanel({ initialTaskId, openRequest, requirementId, back
14410
14651
  ] }),
14411
14652
  requirement && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", onClick: () => setRequirementDetail(true), children: "\u9700\u6C42\u8BE6\u60C5" }),
14412
14653
  requirement?.status === "planning" && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { type: "button", onClick: () => setCreating(true), children: [
14413
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconPlusOutline16, { size: 15 }),
14654
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconPlusOutlineRegular, { size: 15 }),
14414
14655
  "\u65B0\u4EFB\u52A1"
14415
14656
  ] })
14416
14657
  ] }) })
@@ -14455,9 +14696,9 @@ function RequirementTasksPanel({ initialTaskId, openRequest, requirementId, back
14455
14696
  /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "dsh-partner-board-tools", children: [
14456
14697
  /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("label", { className: "dsh-partner-board-search", children: [
14457
14698
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "sr-only", children: "\u641C\u7D22\u4EFB\u52A1" }),
14458
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconSearchOutline16, { size: 16 }) }),
14699
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconSearchOutlineRegular, { size: 16 }) }),
14459
14700
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("input", { value: query, onChange: (event) => setQuery(event.target.value), placeholder: "\u641C\u7D22\u4EFB\u52A1\u3001\u8D1F\u8D23\u4EBA\u6216\u524D\u7F6E\u4EFB\u52A1" }),
14460
- query && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", onClick: () => setQuery(""), "aria-label": "\u6E05\u9664\u4EFB\u52A1\u641C\u7D22", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconCloseOutline16, { size: 14 }) })
14701
+ query && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", onClick: () => setQuery(""), "aria-label": "\u6E05\u9664\u4EFB\u52A1\u641C\u7D22", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconCloseOutlineRegular, { size: 14 }) })
14461
14702
  ] }),
14462
14703
  /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("label", { className: "dsh-partner-board-assignee", children: [
14463
14704
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "sr-only", children: "\u6309\u8D1F\u8D23\u4EBA\u7B5B\u9009" }),
@@ -14553,7 +14794,7 @@ function TaskCard({ task, tasksById, directoryById, dependentCount, execution, o
14553
14794
  ] })
14554
14795
  ] })
14555
14796
  ] }),
14556
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconChevronRightOutline14, { size: 14 })
14797
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconChevronRightOutlineRegular, { size: 14 })
14557
14798
  ] }) });
14558
14799
  }
14559
14800
  function TaskDetail({ task, tasks, activities, directory, execution, busy, update, delegate, review, accept, reject, remove }) {
@@ -14634,7 +14875,7 @@ function TaskDetail({ task, tasks, activities, directory, execution, busy, updat
14634
14875
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("small", { children: blockers.length ? `${blockers.length} \u9879\u672A\u5B8C\u6210\uFF0C\u5F53\u524D\u4EFB\u52A1\u4E0D\u80FD\u542F\u52A8` : dependencies.length ? "\u5DF2\u5168\u90E8\u5B8C\u6210\uFF0C\u53EF\u4EE5\u542F\u52A8" : "\u6CA1\u6709\u524D\u7F6E\u4F9D\u8D56" })
14635
14876
  ] }),
14636
14877
  dependencies.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { children: dependencies.map((item) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { "data-done": item.status === "done", children: [
14637
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("i", { children: item.status === "done" ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconCheckOutline16, { size: 12 }) : "" }),
14878
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("i", { children: item.status === "done" ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconCheckOutlineRegular, { size: 12 }) : "" }),
14638
14879
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("b", { children: item.title }),
14639
14880
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", disabled: busy || ["doing", "review", "done"].includes(task.status), "aria-label": `\u79FB\u9664\u524D\u7F6E\u4EFB\u52A1 ${item.title}`, onClick: () => update({ dependencyTaskIds: task.dependencyTaskIds.filter((id) => id !== item.id) }), children: "\u79FB\u9664" })
14640
14881
  ] }, item.id)) }),
@@ -14704,7 +14945,7 @@ function TaskDetail({ task, tasks, activities, directory, execution, busy, updat
14704
14945
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", disabled: busy, onClick: () => setRejecting(true), children: "\u6253\u56DE\u91CD\u505A" }),
14705
14946
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", className: "is-primary", disabled: busy || Boolean(task.acceptanceCriteria?.length && (checks.length !== task.acceptanceCriteria.length || checks.some((c) => c.verdict !== "passed" || !c.evidence?.trim()))), onClick: () => accept(checks), children: "\u9A8C\u6536\u901A\u8FC7" })
14706
14947
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", disabled: busy || !canExecute, title: blockers.length ? "\u53EF\u63D0\u524D\u6392\u961F\uFF0C\u4F9D\u8D56\u901A\u8FC7\u9A8C\u6536\u540E\u81EA\u52A8\u6267\u884C" : !task.assigneeCompanionId ? "\u8BF7\u5148\u9009\u62E9\u8D1F\u8D23\u4EBA" : void 0, onClick: delegate, children: busy ? "\u6267\u884C\u4E2D\u2026" : execution?.status === "queued" ? "\u5DF2\u63D0\u4EA4\uFF0C\u7B49\u5F85\u6267\u884C" : task.status === "doing" ? "\u6B63\u5728\u6267\u884C" : task.status === "done" ? "\u5DF2\u7ECF\u5B8C\u6210" : `\u4EA4\u7ED9 @${assignee?.name ?? "\u4F19\u4F34"}` }),
14707
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", className: "is-icon", "aria-label": `\u5220\u9664 ${task.title}`, "aria-expanded": confirmingDelete, disabled: busy, onClick: () => setConfirmingDelete(true), children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconTrashOutline16, { size: 14 }) })
14948
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", className: "is-icon", "aria-label": `\u5220\u9664 ${task.title}`, "aria-expanded": confirmingDelete, disabled: busy, onClick: () => setConfirmingDelete(true), children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconTrashOutlineRegular, { size: 14 }) })
14708
14949
  ] })
14709
14950
  ] })
14710
14951
  ] });
@@ -14817,7 +15058,7 @@ function TaskForm({ requirementId, companions, tasks, close, changed: changed2 }
14817
15058
  /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("footer", { children: [
14818
15059
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type: "button", disabled: busy, onClick: close, children: "\u53D6\u6D88" }),
14819
15060
  /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { type: "submit", className: "is-primary", disabled: busy, children: [
14820
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconPlusOutline16, { size: 14 }),
15061
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_dsh_client_ui_primitives15.IconPlusOutlineRegular, { size: 14 }),
14821
15062
  busy ? "\u521B\u5EFA\u4E2D\u2026" : "\u521B\u5EFA\u4EFB\u52A1"
14822
15063
  ] })
14823
15064
  ] })
@@ -14902,7 +15143,7 @@ function RequirementBoard({ initialTaskId, openRequest } = {}) {
14902
15143
  } }, selected);
14903
15144
  return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "dsh-partner-feature-page is-board", children: [
14904
15145
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(WorkspaceHero, { eyebrow: "Shared workspace", title: "\u9700\u6C42\u770B\u677F", detail: "\u6309\u9700\u6C42\u7EC4\u7EC7\u5DE5\u4F5C\uFF0C\u5B50\u4EFB\u52A1\u72EC\u7ACB\u63A8\u8FDB\uFF0C\u6574\u4F53\u5B8C\u6210\u540E\u7EDF\u4E00\u6C47\u603B\u3002", actions: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("button", { type: "button", onClick: () => setCreating(true), children: [
14905
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_dsh_client_ui_primitives16.IconPlusOutline16, { size: 15 }),
15146
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_dsh_client_ui_primitives16.IconPlusOutlineRegular, { size: 15 }),
14906
15147
  "\u65B0\u9700\u6C42"
14907
15148
  ] }) }),
14908
15149
  error && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(WorkspaceNotice, { children: [
@@ -14921,7 +15162,7 @@ function RequirementBoard({ initialTaskId, openRequest } = {}) {
14921
15162
  ] }, String(value))) }),
14922
15163
  /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("label", { className: "dsh-partner-board-search", children: [
14923
15164
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "sr-only", children: "\u641C\u7D22\u9700\u6C42" }),
14924
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_dsh_client_ui_primitives16.IconSearchOutline16, { size: 16 }) }),
15165
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_dsh_client_ui_primitives16.IconSearchOutlineRegular, { size: 16 }) }),
14925
15166
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("input", { placeholder: "\u641C\u7D22\u9700\u6C42\u6216\u8D1F\u8D23\u4EBA", value: query, onChange: (event) => {
14926
15167
  setQuery(event.target.value);
14927
15168
  setLimit(24);
@@ -14950,7 +15191,7 @@ function RequirementBoard({ initialTaskId, openRequest } = {}) {
14950
15191
  " \u5DF2\u9A8C\u6536",
14951
15192
  blocked ? ` \xB7 ${blocked} \u53D7\u963B` : ""
14952
15193
  ] }),
14953
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_dsh_client_ui_primitives16.IconChevronRightOutline14, { size: 14 })
15194
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_dsh_client_ui_primitives16.IconChevronRightOutlineRegular, { size: 14 })
14954
15195
  ] })
14955
15196
  ] }),
14956
15197
  /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("footer", { children: [
@@ -14975,7 +15216,7 @@ function RequirementBoard({ initialTaskId, openRequest } = {}) {
14975
15216
  "\u672A\u5F52\u7C7B\u65E7\u4EFB\u52A1 ",
14976
15217
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("b", { children: groups.get("legacy").length }),
14977
15218
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: "\u4FDD\u7559\u539F\u8BB0\u5F55\uFF0C\u4E0D\u81EA\u52A8\u5408\u5E76" }),
14978
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_dsh_client_ui_primitives16.IconChevronRightOutline14, { size: 14 })
15219
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_dsh_client_ui_primitives16.IconChevronRightOutlineRegular, { size: 14 })
14979
15220
  ] })
14980
15221
  ] }),
14981
15222
  creating && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(WorkspaceDialog, { title: "\u65B0\u5EFA\u9700\u6C42", detail: "\u4E00\u4E2A\u9700\u6C42\u5BF9\u5E94\u4E00\u4EFD\u6700\u7EC8\u4EA4\u4ED8\uFF0C\u7531\u8D1F\u8D23\u4EBA\u7EDF\u4E00\u6536\u5C3E\u3002", close: () => setCreating(false), children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(RequirementForm, { directory, close: () => setCreating(false), created: async (item) => {
@@ -15064,11 +15305,11 @@ function SchedulePanel({ companions }) {
15064
15305
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("button", { type: "button", disabled: loading, onClick: () => {
15065
15306
  void load2();
15066
15307
  }, children: [
15067
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconRefreshOutline16, { size: 15 }),
15308
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconRefreshOutlineRegular, { size: 15 }),
15068
15309
  "\u5237\u65B0"
15069
15310
  ] }),
15070
15311
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("button", { type: "button", disabled: eligible.length === 0, onClick: () => setCreating(true), children: [
15071
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconPlusOutline16, { size: 15 }),
15312
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconPlusOutlineRegular, { size: 15 }),
15072
15313
  "\u65B0\u8BA1\u5212"
15073
15314
  ] })
15074
15315
  ] }) }),
@@ -15076,7 +15317,7 @@ function SchedulePanel({ companions }) {
15076
15317
  error && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(WorkspaceNotice, { children: error }),
15077
15318
  creating && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(WorkspaceDialog, { title: "\u65B0\u5EFA\u5B9A\u65F6\u4EFB\u52A1", detail: "\u9009\u62E9\u6267\u884C\u4F19\u4F34\u3001\u8FD0\u884C\u9891\u7387\u548C\u4F1A\u8BDD\u4FDD\u7559\u7B56\u7565\u3002\u957F\u4EFB\u52A1\u7EED\u63A5\u7531\u4F19\u4F34\u901A\u8FC7\u5DE5\u5177\u9884\u7EA6\uFF0C\u65E0\u9700\u5728\u8FD9\u91CC\u624B\u52A8\u521B\u5EFA\u3002", close: () => setCreating(false), width: "wide", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ScheduleForm, { companions: eligible, close: () => setCreating(false), changed: load2 }) }),
15078
15319
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(WorkspaceBlock, { title: "\u6267\u884C\u8BA1\u5212", detail: `${schedules.filter((item) => item.enabled && eligible.some((c) => c.id === item.companionId)).length} \u4E2A\u542F\u7528`, children: loading ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(CollectionSkeleton, { rows: 3 }) : schedules.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(CollectionEmpty, { title: "\u8FD8\u6CA1\u6709\u5B9A\u65F6\u4EFB\u52A1", detail: "\u5468\u671F\u8BA1\u5212\u548C\u957F\u4EFB\u52A1\u7EED\u63A5\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002", action: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("button", { type: "button", disabled: eligible.length === 0, onClick: () => setCreating(true), children: [
15079
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconPlusOutline16, { size: 14 }),
15320
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconPlusOutlineRegular, { size: 14 }),
15080
15321
  "\u521B\u5EFA\u7B2C\u4E00\u4E2A\u8BA1\u5212"
15081
15322
  ] }) }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dsh-partner-schedule-list", children: schedules.map((entry) => {
15082
15323
  const wake = entry.continuation, allowed = eligible.some((c) => c.id === entry.companionId);
@@ -15132,12 +15373,12 @@ function SchedulePanel({ companions }) {
15132
15373
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("button", { type: "button", disabled: busy === entry.id || !allowed || !!terminal || !!wake && (!entry.enabled || wake.state === "running"), onClick: () => {
15133
15374
  void run(entry);
15134
15375
  }, children: [
15135
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconPlayOutline16, { size: 14 }),
15376
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconPlayOutlineRegular, { size: 14 }),
15136
15377
  busy === entry.id ? "\u5DF2\u63D0\u4EA4\u2026" : wake ? "\u7ACB\u5373\u68C0\u67E5" : "\u7ACB\u5373\u6267\u884C"
15137
15378
  ] }),
15138
15379
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("button", { type: "button", className: "is-icon", disabled: busy === entry.id, onClick: () => {
15139
15380
  void remove(entry);
15140
- }, "aria-label": `\u5220\u9664 ${entry.title}`, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconTrashOutline16, { size: 14 }) })
15381
+ }, "aria-label": `\u5220\u9664 ${entry.title}`, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconTrashOutlineRegular, { size: 14 }) })
15141
15382
  ] }, entry.id);
15142
15383
  }) }) }),
15143
15384
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(WorkspaceBlock, { title: "\u6700\u8FD1\u8FD0\u884C", detail: "\u4FDD\u7559\u6700\u8FD1\u7684\u72B6\u6001\u4E0E\u7ED3\u679C\u6458\u8981", children: [
@@ -15246,7 +15487,7 @@ function ScheduleForm({ companions, close, changed: changed2 }) {
15246
15487
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("footer", { children: [
15247
15488
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("button", { type: "button", disabled: busy, onClick: close, children: "\u53D6\u6D88" }),
15248
15489
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("button", { type: "submit", className: "is-primary", disabled: busy, children: [
15249
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconPlusOutline16, { size: 14 }),
15490
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconPlusOutlineRegular, { size: 14 }),
15250
15491
  busy ? "\u521B\u5EFA\u4E2D\u2026" : "\u521B\u5EFA\u8BA1\u5212"
15251
15492
  ] })
15252
15493
  ] })
@@ -15358,7 +15599,7 @@ function CompanionMcpSettings({ companionId, embedded = false, onBusyChange }) {
15358
15599
  setSelecting(true);
15359
15600
  void load2();
15360
15601
  }, children: [
15361
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_dsh_client_ui_primitives18.IconPlusOutline16, { size: 14 }),
15602
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_dsh_client_ui_primitives18.IconPlusOutlineRegular, { size: 14 }),
15362
15603
  "\u9009\u62E9 MCP"
15363
15604
  ] }), children: [
15364
15605
  !selecting && feedback,
@@ -15448,7 +15689,7 @@ function CompanionAccessPanel({ companionId, onBusyChange }) {
15448
15689
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { children: companion.description || "\u672A\u586B\u5199\u4F19\u4F34\u8BF4\u660E" }),
15449
15690
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { children: [...abilities, ...companion.enabledSkills.map((skill) => skill.name)].map((item) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("em", { children: item }, item)) })
15450
15691
  ] }),
15451
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "dsh-partner-access-check", "aria-hidden": "true", children: selected && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_dsh_client_ui_primitives19.IconCheckOutline16, { size: 15 }) })
15692
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "dsh-partner-access-check", "aria-hidden": "true", children: selected && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_dsh_client_ui_primitives19.IconCheckOutlineRegular, { size: 15 }) })
15452
15693
  ] }, companion.id);
15453
15694
  }) }),
15454
15695
  error && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(WorkspaceNotice, { children: error })
@@ -15653,7 +15894,7 @@ function CapabilityEditor({ companion, presets, onChanged }) {
15653
15894
  group.choices.map((choice) => {
15654
15895
  const active2 = form.capabilities.includes(choice.id);
15655
15896
  const control = /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("button", { type: "button", disabled: saving, className: active2 ? "is-active" : "", "aria-pressed": active2, onClick: () => toggle(choice.id), children: [
15656
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { children: active2 && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_dsh_client_ui_primitives20.IconCheckOutline14, { size: 14 }) }),
15897
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { children: active2 && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_dsh_client_ui_primitives20.IconCheckOutlineRegular, { size: 14 }) }),
15657
15898
  /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("strong", { children: choice.title }),
15658
15899
  /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("small", { children: choice.detail })
15659
15900
  ] });
@@ -15758,7 +15999,7 @@ function IdentityEditorForm({ companion, count, onChanged, onRemoved }) {
15758
15999
  error && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { className: "dsh-partner-inline-error", role: "alert", children: error }),
15759
16000
  /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "dsh-partner-form-actions", children: [
15760
16001
  /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { role: "status", children: saved && /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
15761
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_dsh_client_ui_primitives21.IconCheckOutline14, { size: 14 }),
16002
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_dsh_client_ui_primitives21.IconCheckOutlineRegular, { size: 14 }),
15762
16003
  "\u5DF2\u4FDD\u5B58\uFF0C\u4E0B\u4E00\u8F6E\u5C06\u4F7F\u7528\u65B0\u8EAB\u4EFD"
15763
16004
  ] }) }),
15764
16005
  /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("button", { disabled: busy, children: operation === "save" ? "\u6B63\u5728\u4FDD\u5B58\u2026" : "\u4FDD\u5B58\u8EAB\u4EFD" })
@@ -15772,7 +16013,7 @@ function IdentityEditorForm({ companion, count, onChanged, onRemoved }) {
15772
16013
  /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { children: [
15773
16014
  confirming && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("button", { type: "button", disabled: busy, className: "is-secondary", onClick: () => setConfirmationId(void 0), children: "\u53D6\u6D88" }),
15774
16015
  /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("button", { type: "button", className: confirming ? "is-danger" : "", disabled: busy || count <= 1, onClick: () => confirming ? void remove() : setConfirmationId(companion.id), children: [
15775
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_dsh_client_ui_primitives21.IconTrashOutline16, { size: 16 }),
16016
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_dsh_client_ui_primitives21.IconTrashOutlineRegular, { size: 16 }),
15776
16017
  operation === "remove" ? "\u6B63\u5728\u5220\u9664\u2026" : removed ? "\u5DF2\u5220\u9664" : confirming ? "\u786E\u8BA4\u5220\u9664" : "\u5220\u9664"
15777
16018
  ] })
15778
16019
  ] })
@@ -16310,7 +16551,7 @@ function CompanionCreateDialog({ close, create }) {
16310
16551
  /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("footer", { children: [
16311
16552
  /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("button", { type: "button", disabled: busy, onClick: close, children: "\u53D6\u6D88" }),
16312
16553
  /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("button", { type: "submit", className: "is-primary", disabled: busy, children: [
16313
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_dsh_client_ui_primitives22.IconPlusOutline16, { size: 14 }),
16554
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_dsh_client_ui_primitives22.IconPlusOutlineRegular, { size: 14 }),
16314
16555
  busy ? "\u6B63\u5728\u521B\u5EFA\u2026" : "\u521B\u5EFA\u4F19\u4F34"
16315
16556
  ] })
16316
16557
  ] })
@@ -16391,19 +16632,19 @@ function createPartnerController(ctx, pluginId, render) {
16391
16632
  if (prepared.sessionId !== sessionId) throw new Error("\u4F19\u4F34\u4F1A\u8BDD\u6807\u8BC6\u4E0D\u4E00\u81F4");
16392
16633
  await waitForClientSession(ctx, sessionId);
16393
16634
  controller.close();
16394
- sessions(ctx).open(sessionId);
16635
+ ctx.uiWorkspace.openSession(sessionId);
16395
16636
  },
16396
16637
  async startSession(companionId) {
16397
16638
  const created = await api(`/companions/${encodeURIComponent(companionId)}/session`, { method: "POST" });
16398
16639
  await waitForClientSession(ctx, created.sessionId);
16399
16640
  controller.close();
16400
- sessions(ctx).open(created.sessionId);
16641
+ ctx.uiWorkspace.openSession(created.sessionId);
16401
16642
  },
16402
16643
  async renewSession(routeId) {
16403
16644
  const renewed = await api(`/sessions/${encodeURIComponent(routeId)}/renew`, { method: "POST" });
16404
16645
  await waitForClientSession(ctx, renewed.sessionId);
16405
16646
  controller.close();
16406
- sessions(ctx).open(renewed.sessionId);
16647
+ ctx.uiWorkspace.openSession(renewed.sessionId);
16407
16648
  },
16408
16649
  subscribe(listener) {
16409
16650
  listeners3.add(listener);
@@ -16439,7 +16680,7 @@ function sessions(ctx) {
16439
16680
  var import_dsh_client_ui_primitives23 = require("@deepseek-ai/dsh-client-ui-primitives");
16440
16681
 
16441
16682
  // src/ui/storage-settings.tsx
16442
- var import_react49 = require("react");
16683
+ var import_react50 = require("react");
16443
16684
 
16444
16685
  // src/ui/storage-recovery.ts
16445
16686
  var StorageStatusError = class extends Error {
@@ -16486,17 +16727,183 @@ async function waitForStorage(signal, onWait, options = {}) {
16486
16727
  throw Error("\u670D\u52A1\u5C1A\u672A\u6062\u590D\uFF0C\u5DF2\u505C\u6B62\u81EA\u52A8\u68C0\u67E5\u3002\u8BF7\u7A0D\u540E\u70B9\u51FB\u300C\u91CD\u65B0\u8FDE\u63A5\u300D\uFF1B\u4E0D\u8981\u91CD\u590D\u63D0\u4EA4\u8FC1\u79FB\u3002");
16487
16728
  }
16488
16729
 
16489
- // src/ui/storage-settings.tsx
16730
+ // src/ui/attachment-storage.tsx
16731
+ var import_react49 = require("react");
16490
16732
  var import_jsx_runtime44 = require("react/jsx-runtime");
16733
+ var size = (bytes) => `${(bytes / 1048576).toFixed(2)} MiB`;
16734
+ function AttachmentStoragePanel() {
16735
+ const [view, setView] = (0, import_react49.useState)(), [limit, setLimit] = (0, import_react49.useState)("512");
16736
+ const [owner, setOwner] = (0, import_react49.useState)(""), [days, setDays] = (0, import_react49.useState)("0"), [offset, setOffset] = (0, import_react49.useState)(0);
16737
+ const [selected, setSelected] = (0, import_react49.useState)([]), [busy, setBusy] = (0, import_react49.useState)(false), [confirm, setConfirm] = (0, import_react49.useState)(false);
16738
+ const [error, setError] = (0, import_react49.useState)(""), [notice, setNotice] = (0, import_react49.useState)(""), [revision, setRevision] = (0, import_react49.useState)(0);
16739
+ const [expanded, setExpanded] = (0, import_react49.useState)(false);
16740
+ (0, import_react49.useEffect)(() => {
16741
+ const controller = new AbortController();
16742
+ setBusy(true);
16743
+ setSelected([]);
16744
+ setError("");
16745
+ api(`/attachments/storage?${new URLSearchParams({ owner, days, offset: String(offset) })}`, { signal: controller.signal }).then((data) => {
16746
+ setView(data);
16747
+ setLimit(String(data.limitMiB));
16748
+ }).catch((e) => {
16749
+ if (!controller.signal.aborted) setError(errorMessage(e));
16750
+ }).finally(() => {
16751
+ if (!controller.signal.aborted) setBusy(false);
16752
+ });
16753
+ return () => controller.abort();
16754
+ }, [owner, days, offset, revision]);
16755
+ const save = async () => {
16756
+ setBusy(true);
16757
+ setError("");
16758
+ setNotice("");
16759
+ try {
16760
+ await api("/attachments/storage", { method: "PUT", body: JSON.stringify({ limitMiB: Number(limit) }) });
16761
+ setNotice("\u989D\u5EA6\u5DF2\u4FDD\u5B58\uFF0C\u7ACB\u5373\u751F\u6548\uFF1B\u4E0D\u4F1A\u81EA\u52A8\u5220\u9664\u4EFB\u4F55\u6587\u4EF6\u3002");
16762
+ setRevision((v) => v + 1);
16763
+ } catch (e) {
16764
+ setError(errorMessage(e));
16765
+ } finally {
16766
+ setBusy(false);
16767
+ }
16768
+ };
16769
+ const clean = async () => {
16770
+ setBusy(true);
16771
+ setError("");
16772
+ setNotice("");
16773
+ try {
16774
+ const result = await api("/attachments/cleanup", { method: "POST", body: JSON.stringify({ ids: selected, confirm: true }) });
16775
+ setConfirm(false);
16776
+ setNotice(`\u5DF2\u6E05\u7406 ${result.removed} \u4E2A\u526F\u672C\uFF0C\u91CA\u653E ${size(result.freedBytes)}\uFF1B\u8DF3\u8FC7 ${result.skipped} \u4E2A\uFF0C\u5931\u8D25 ${result.failed} \u4E2A\u3002`);
16777
+ setRevision((v) => v + 1);
16778
+ } catch (e) {
16779
+ setError(errorMessage(e));
16780
+ } finally {
16781
+ setBusy(false);
16782
+ }
16783
+ };
16784
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(WorkspaceBlock, { title: "\u9644\u4EF6\u5B58\u50A8", className: "attachment-storage-block", children: [
16785
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { id: "partner-attachment-storage", className: "dsh-partner-attachment-storage", "aria-busy": busy, children: [
16786
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "attachment-storage-overview", children: [
16787
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "attachment-storage-usage", children: [
16788
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("strong", { children: view ? `${size(view.usedBytes)} / ${view.limitMiB} MiB` : "\u6B63\u5728\u8BFB\u53D6\u2026" }),
16789
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("small", { children: view ? `${view.count} \u4E2A\u526F\u672C \xB7 \u5168\u90E8\u4F19\u4F34\u5171\u4EAB` : "\u6B63\u5728\u7EDF\u8BA1\u9644\u4EF6\u5360\u7528" })
16790
+ ] }),
16791
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("form", { onSubmit: (e) => {
16792
+ e.preventDefault();
16793
+ void save();
16794
+ }, children: [
16795
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("label", { children: [
16796
+ "\u989D\u5EA6",
16797
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("input", { "aria-label": "\u603B\u989D\u5EA6\uFF08MiB\uFF09", type: "number", min: "64", max: "1048576", step: "1", required: true, value: limit, disabled: busy, onChange: (e) => setLimit(e.target.value) }),
16798
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { children: "MiB" })
16799
+ ] }),
16800
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { "aria-label": "\u4FDD\u5B58\u989D\u5EA6", disabled: busy || !view || Number(limit) === view.limitMiB, children: "\u4FDD\u5B58" })
16801
+ ] }),
16802
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { type: "button", "aria-expanded": expanded, "aria-controls": "attachment-storage-manager", onClick: () => setExpanded((v) => !v), children: expanded ? "\u6536\u8D77\u660E\u7EC6" : "\u7BA1\u7406\u526F\u672C" })
16803
+ ] }),
16804
+ expanded && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { id: "attachment-storage-manager", children: [
16805
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "attachment-storage-filters", children: [
16806
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("label", { children: [
16807
+ "\u4F19\u4F34",
16808
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("select", { value: owner, disabled: busy, onChange: (e) => {
16809
+ setOwner(e.target.value);
16810
+ setOffset(0);
16811
+ }, children: [
16812
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("option", { value: "", children: "\u5168\u90E8\u4F19\u4F34" }),
16813
+ view?.owners.map((o) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("option", { value: o.id, children: o.name }, o.id))
16814
+ ] })
16815
+ ] }),
16816
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("label", { children: [
16817
+ "\u521B\u5EFA\u65F6\u95F4",
16818
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("select", { value: days, disabled: busy, onChange: (e) => {
16819
+ setDays(e.target.value);
16820
+ setOffset(0);
16821
+ }, children: [
16822
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("option", { value: "0", children: "\u5168\u90E8\u65F6\u95F4" }),
16823
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("option", { value: "7", children: "7 \u5929\u4EE5\u524D" }),
16824
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("option", { value: "30", children: "30 \u5929\u4EE5\u524D" }),
16825
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("option", { value: "90", children: "90 \u5929\u4EE5\u524D" })
16826
+ ] })
16827
+ ] }),
16828
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { disabled: busy, onClick: () => setRevision((v) => v + 1), children: "\u5237\u65B0" })
16829
+ ] }),
16830
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "attachment-storage-selection", children: [
16831
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { disabled: busy || !view?.items.some((i) => !i.protectedReason), onClick: () => setSelected(selected.length ? [] : view.items.filter((i) => !i.protectedReason).map((i) => i.id)), children: selected.length ? "\u53D6\u6D88\u9009\u62E9" : "\u9009\u62E9\u672C\u9875" }),
16832
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("small", { children: [
16833
+ "\u53EF\u6E05\u7406 ",
16834
+ size(view?.eligibleBytes ?? 0),
16835
+ " \xB7 \u4F7F\u7528\u4E2D\u7684\u526F\u672C\u53D7\u4FDD\u62A4"
16836
+ ] })
16837
+ ] }),
16838
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "attachment-storage-list", children: view?.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("label", { className: "attachment-storage-row", children: [
16839
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("input", { type: "checkbox", disabled: busy || !!item.protectedReason, checked: selected.includes(item.id), onChange: (e) => setSelected((ids) => e.target.checked ? [...ids, item.id] : ids.filter((id) => id !== item.id)) }),
16840
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("span", { children: [
16841
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("strong", { title: item.name, children: item.name }),
16842
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("small", { children: [
16843
+ item.companionName,
16844
+ " \xB7 ",
16845
+ size(item.size),
16846
+ " \xB7 ",
16847
+ item.createdAt ? new Date(item.createdAt).toLocaleString() : "\u65F6\u95F4\u672A\u77E5",
16848
+ " \xB7 ",
16849
+ item.protectedReason ?? (item.channel === "sent" ? "\u5DF2\u53D1\u9001" : "\u4F1A\u8BDD\u526F\u672C")
16850
+ ] })
16851
+ ] })
16852
+ ] }, item.id)) }),
16853
+ view && !view.items.length && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { children: "\u6CA1\u6709\u7B26\u5408\u6761\u4EF6\u7684\u526F\u672C\u3002" }),
16854
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "attachment-storage-filters", children: [
16855
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { disabled: busy || offset === 0, onClick: () => setOffset(Math.max(0, offset - 30)), children: "\u4E0A\u4E00\u9875" }),
16856
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("span", { children: [
16857
+ "\u7B2C ",
16858
+ Math.floor(offset / 30) + 1,
16859
+ " \u9875 \xB7 \u5171 ",
16860
+ view?.filteredCount ?? 0,
16861
+ " \u9879"
16862
+ ] }),
16863
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { disabled: busy || !view || offset + 30 >= view.filteredCount, onClick: () => setOffset(offset + 30), children: "\u4E0B\u4E00\u9875" }),
16864
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("button", { disabled: busy || !selected.length, onClick: () => setConfirm(true), children: [
16865
+ "\u6E05\u7406\u6240\u9009\uFF08",
16866
+ selected.length,
16867
+ "\uFF09"
16868
+ ] })
16869
+ ] }),
16870
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("details", { className: "attachment-storage-help", children: [
16871
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("summary", { children: "\u5B58\u50A8\u4E0E\u6E05\u7406\u8BF4\u660E" }),
16872
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { children: "\u526F\u672C\u7EDF\u4E00\u5B58\u653E\uFF0C\u539F\u6587\u4EF6\u4E0D\u53D7\u5F71\u54CD\u3002\u4E0D\u4F1A\u81EA\u52A8\u6E05\u7406\uFF1B\u964D\u4F4E\u989D\u5EA6\u4E0D\u5220\u9664\u65E7\u526F\u672C\uFF0C\u8D85\u989D\u65F6\u505C\u6B62\u65B0\u589E\u3002\u5355\u6587\u4EF6\u4E0A\u9650 64 MiB\u3002" }),
16873
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { children: "\u53D1\u9001\u4E2D\u3001\u5931\u8D25\u5F85\u91CD\u8BD5\u3001\u6700\u8FD1 5 \u5206\u949F\u521B\u5EFA\u53CA\u672A\u5B8C\u6210\u4EFB\u52A1/\u9700\u6C42\u5F15\u7528\u7684\u526F\u672C\u4E0D\u80FD\u6E05\u7406\u3002\u6E05\u7406\u540E\u5BF9\u5E94\u5386\u53F2\u4E0B\u8F7D\u94FE\u63A5\u5931\u6548\u3002" }),
16874
+ [...new Set(view?.owners.map((o) => o.directory) ?? [])].map((directory) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("code", { children: directory }, directory))
16875
+ ] })
16876
+ ] }),
16877
+ error && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { role: "alert", children: error }),
16878
+ notice && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { role: "status", children: notice })
16879
+ ] }),
16880
+ confirm && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(WorkspaceDialog, { eyebrow: "\u9644\u4EF6\u7BA1\u7406", title: "\u6E05\u7406\u4EA4\u4ED8\u526F\u672C", detail: `\u5DF2\u9009\u62E9 ${selected.length} \u4E2A\u526F\u672C\u3002\u6B64\u64CD\u4F5C\u4E0D\u53EF\u64A4\u9500\u3002`, close: () => {
16881
+ if (!busy) setConfirm(false);
16882
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("form", { className: "dsh-partner-feature-form", onSubmit: (event) => {
16883
+ event.preventDefault();
16884
+ if (!busy) void clean();
16885
+ }, children: [
16886
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { className: "is-wide", children: "\u53EA\u5220\u9664\u4EA4\u4ED8\u526F\u672C\uFF0C\u539F\u59CB\u6587\u4EF6\u4FDD\u6301\u4E0D\u53D8\u3002\u5386\u53F2\u4F1A\u8BDD\u548C\u770B\u677F\u4E2D\u7684\u5BF9\u5E94\u9644\u4EF6\u4E0B\u8F7D\u94FE\u63A5\u5C06\u5931\u6548\u3002\u6267\u884C\u65F6\u4F1A\u518D\u6B21\u68C0\u67E5\u4FDD\u62A4\u72B6\u6001\u3002" }),
16887
+ error && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { className: "is-wide", role: "alert", children: error }),
16888
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("footer", { children: [
16889
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { type: "button", disabled: busy, onClick: () => setConfirm(false), children: "\u53D6\u6D88" }),
16890
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { type: "submit", className: "is-primary", disabled: busy, children: busy ? "\u6E05\u7406\u4E2D\u2026" : "\u786E\u8BA4\u6E05\u7406" })
16891
+ ] })
16892
+ ] }) })
16893
+ ] });
16894
+ }
16895
+
16896
+ // src/ui/storage-settings.tsx
16897
+ var import_jsx_runtime45 = require("react/jsx-runtime");
16491
16898
  function GeneralSettingsPanel() {
16492
- const [version, setVersion] = (0, import_react49.useState)();
16493
- const [inspection, setInspection] = (0, import_react49.useState)();
16494
- const [busy, setBusy] = (0, import_react49.useState)(false), [confirm, setConfirm] = (0, import_react49.useState)(false);
16495
- const [error, setError] = (0, import_react49.useState)(""), [notice, setNotice] = (0, import_react49.useState)("");
16496
- const request = (0, import_react49.useRef)();
16497
- const mounted = (0, import_react49.useRef)(true);
16498
- const [reconnect, setReconnect] = (0, import_react49.useState)(false);
16499
- const [cleanupPending, setCleanupPending] = (0, import_react49.useState)(0);
16899
+ const [version, setVersion] = (0, import_react50.useState)();
16900
+ const [inspection, setInspection] = (0, import_react50.useState)();
16901
+ const [busy, setBusy] = (0, import_react50.useState)(false), [confirm, setConfirm] = (0, import_react50.useState)(false);
16902
+ const [error, setError] = (0, import_react50.useState)(""), [notice, setNotice] = (0, import_react50.useState)("");
16903
+ const request = (0, import_react50.useRef)();
16904
+ const mounted = (0, import_react50.useRef)(true);
16905
+ const [reconnect, setReconnect] = (0, import_react50.useState)(false);
16906
+ const [cleanupPending, setCleanupPending] = (0, import_react50.useState)(0);
16500
16907
  const cleanup = version === 1 && cleanupPending > 0;
16501
16908
  const recover = async (expected = pendingStorageRecovery()) => {
16502
16909
  request.current?.abort();
@@ -16527,7 +16934,7 @@ function GeneralSettingsPanel() {
16527
16934
  if (!controller.signal.aborted) setBusy(false);
16528
16935
  }
16529
16936
  };
16530
- (0, import_react49.useEffect)(() => {
16937
+ (0, import_react50.useEffect)(() => {
16531
16938
  mounted.current = true;
16532
16939
  void recover();
16533
16940
  return () => {
@@ -16564,16 +16971,17 @@ function GeneralSettingsPanel() {
16564
16971
  }
16565
16972
  if (mounted.current) await recover(expected);
16566
16973
  };
16567
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("section", { className: "dsh-partner-general-settings", "aria-busy": busy, children: [
16568
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("h2", { children: "\u57FA\u672C\u8BBE\u7F6E" }),
16569
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(WorkspaceBlock, { title: "\u5347\u7EA7\u8FC1\u79FB", detail: "\u624B\u52A8\u6574\u7406\u516C\u5171\u6570\u636E\u548C\u6BCF\u4F4D\u4F19\u4F34\u7684\u79C1\u6709\u76EE\u5F55\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u6267\u884C\u3002", actions: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { type: "button", disabled: busy, onClick: () => void inspect(), children: busy ? "\u5904\u7406\u4E2D\u2026" : "\u68C0\u67E5\u8FC1\u79FB" }), children: [
16570
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("p", { children: [
16974
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("section", { className: "dsh-partner-general-settings", "aria-busy": busy, children: [
16975
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("h2", { children: "\u57FA\u672C\u8BBE\u7F6E" }),
16976
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(AttachmentStoragePanel, {}),
16977
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(WorkspaceBlock, { title: "\u5347\u7EA7\u8FC1\u79FB", detail: "\u624B\u52A8\u6574\u7406\u516C\u5171\u6570\u636E\u548C\u6BCF\u4F4D\u4F19\u4F34\u7684\u79C1\u6709\u76EE\u5F55\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u6267\u884C\u3002", actions: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("button", { type: "button", disabled: busy, onClick: () => void inspect(), children: busy ? "\u5904\u7406\u4E2D\u2026" : "\u68C0\u67E5\u8FC1\u79FB" }), children: [
16978
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("p", { children: [
16571
16979
  "\u6570\u636E\u5B58\u50A8\u7248\u672C\uFF1A",
16572
16980
  version === void 0 ? "\u6B63\u5728\u8BFB\u53D6\u2026" : `v${version}${version === 0 ? " \xB7 \u5F85\u8FC1\u79FB" : " \xB7 \u5DF2\u5347\u7EA7"}`
16573
16981
  ] }),
16574
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { children: "\u5347\u7EA7\u524D\u8BF7\u7ED3\u675F\u4F19\u4F34\u4F1A\u8BDD\u548C\u540E\u53F0\u6267\u884C\u3002\u5B8C\u6574\u5907\u4EFD\u5E76\u6821\u9A8C\u540E\u624D\u6E05\u7406\u5DF2\u8FC1\u79FB\u7684\u65E7\u8DEF\u5F84\uFF0C\u4E0D\u4FEE\u6539\u7528\u6237\u5DE5\u4F5C\u6587\u6863\uFF1B\u670D\u52A1\u91CD\u8F7D\u540E\u81EA\u52A8\u91CD\u65B0\u8FDE\u63A5\u3002" }),
16575
- inspection && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, { children: [
16576
- inspection.steps.map((step) => /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("p", { children: [
16982
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { children: "\u5347\u7EA7\u524D\u8BF7\u7ED3\u675F\u4F19\u4F34\u4F1A\u8BDD\u548C\u540E\u53F0\u6267\u884C\u3002\u5B8C\u6574\u5907\u4EFD\u5E76\u6821\u9A8C\u540E\u624D\u6E05\u7406\u5DF2\u8FC1\u79FB\u7684\u65E7\u8DEF\u5F84\uFF0C\u4E0D\u4FEE\u6539\u7528\u6237\u5DE5\u4F5C\u6587\u6863\uFF1B\u670D\u52A1\u91CD\u8F7D\u540E\u81EA\u52A8\u91CD\u65B0\u8FDE\u63A5\u3002" }),
16983
+ inspection && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
16984
+ inspection.steps.map((step) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("p", { children: [
16577
16985
  "v",
16578
16986
  step.from,
16579
16987
  " \u2192 v",
@@ -16581,79 +16989,79 @@ function GeneralSettingsPanel() {
16581
16989
  " \xB7 ",
16582
16990
  step.title
16583
16991
  ] }, step.id)),
16584
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("details", { children: [
16585
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("summary", { children: "\u67E5\u770B\u76EE\u5F55\u4E0E\u68C0\u67E5\u8BE6\u60C5" }),
16586
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "dsh-partner-migration-paths", children: inspection.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { children: [
16587
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("strong", { children: item.label }),
16588
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("code", { children: item.source }),
16589
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { children: "\u8FC1\u79FB\u81F3" }),
16590
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("code", { children: item.target }),
16591
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("small", { children: item.exists ? `${item.files} \u4E2A\u6587\u4EF6 \xB7 ${(item.bytes / 1024 / 1024).toFixed(2)} MB` : "\u5F53\u524D\u65E0\u6587\u4EF6" })
16992
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("details", { children: [
16993
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("summary", { children: "\u67E5\u770B\u76EE\u5F55\u4E0E\u68C0\u67E5\u8BE6\u60C5" }),
16994
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "dsh-partner-migration-paths", children: inspection.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { children: [
16995
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("strong", { children: item.label }),
16996
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("code", { children: item.source }),
16997
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { children: "\u8FC1\u79FB\u81F3" }),
16998
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("code", { children: item.target }),
16999
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("small", { children: item.exists ? `${item.files} \u4E2A\u6587\u4EF6 \xB7 ${(item.bytes / 1024 / 1024).toFixed(2)} MB` : "\u5F53\u524D\u65E0\u6587\u4EF6" })
16592
17000
  ] }, i)) }),
16593
- inspection.notices.map((text4, i) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { children: text4 }, i))
17001
+ inspection.notices.map((text4, i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { children: text4 }, i))
16594
17002
  ] }),
16595
- !!inspection.blockers.length && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { role: "alert", children: [
16596
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { children: "\u4EE5\u4E0B\u95EE\u9898\u9700\u8981\u5148\u5904\u7406\uFF1A" }),
16597
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("ul", { children: inspection.blockers.map((text4, i) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("li", { children: text4 }, i)) })
17003
+ !!inspection.blockers.length && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { role: "alert", children: [
17004
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { children: "\u4EE5\u4E0B\u95EE\u9898\u9700\u8981\u5148\u5904\u7406\uFF1A" }),
17005
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("ul", { children: inspection.blockers.map((text4, i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("li", { children: text4 }, i)) })
16598
17006
  ] }),
16599
- inspection.migrationAvailable && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { type: "button", className: "is-primary", disabled: busy, onClick: () => setConfirm(true), children: "\u5347\u7EA7\u8FC1\u79FB" })
17007
+ inspection.migrationAvailable && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("button", { type: "button", className: "is-primary", disabled: busy, onClick: () => setConfirm(true), children: "\u5347\u7EA7\u8FC1\u79FB" })
16600
17008
  ] }),
16601
- error && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { role: "alert", children: error }),
16602
- notice && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { role: "status", children: notice }),
16603
- reconnect && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { type: "button", disabled: busy, onClick: () => void recover(), children: "\u91CD\u65B0\u8FDE\u63A5" }),
16604
- cleanup && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { type: "button", disabled: busy, onClick: () => setConfirm(true), children: "\u91CD\u8BD5\u6E05\u7406\u65E7\u8DEF\u5F84" })
17009
+ error && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { role: "alert", children: error }),
17010
+ notice && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { role: "status", children: notice }),
17011
+ reconnect && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("button", { type: "button", disabled: busy, onClick: () => void recover(), children: "\u91CD\u65B0\u8FDE\u63A5" }),
17012
+ cleanup && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("button", { type: "button", disabled: busy, onClick: () => setConfirm(true), children: "\u91CD\u8BD5\u6E05\u7406\u65E7\u8DEF\u5F84" })
16605
17013
  ] }),
16606
- confirm && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(WorkspaceDialog, { title: cleanup ? "\u786E\u8BA4\u6E05\u7406\u65E7\u8DEF\u5F84" : "\u786E\u8BA4\u5347\u7EA7\u8FC1\u79FB", detail: cleanup ? "\u91CD\u65B0\u6838\u5BF9\u5B8C\u6574\u5907\u4EFD\uFF0C\u53EA\u6E05\u7406\u672A\u53D8\u5316\u7684\u65E7\u6587\u4EF6\uFF0C\u4E0D\u91CD\u65B0\u8FC1\u79FB\u6D3B\u52A8\u6570\u636E\u3002" : "\u516C\u5171\u6570\u636E\u4E0E\u6240\u6709\u4F19\u4F34\u79C1\u6709\u6570\u636E\u5C06\u4E00\u8D77\u8FC1\u79FB\uFF0C\u5168\u90E8\u6821\u9A8C\u540E\u624D\u5207\u6362\u76EE\u5F55\u7248\u672C\u3002", close: () => {
17014
+ confirm && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(WorkspaceDialog, { title: cleanup ? "\u786E\u8BA4\u6E05\u7406\u65E7\u8DEF\u5F84" : "\u786E\u8BA4\u5347\u7EA7\u8FC1\u79FB", detail: cleanup ? "\u91CD\u65B0\u6838\u5BF9\u5B8C\u6574\u5907\u4EFD\uFF0C\u53EA\u6E05\u7406\u672A\u53D8\u5316\u7684\u65E7\u6587\u4EF6\uFF0C\u4E0D\u91CD\u65B0\u8FC1\u79FB\u6D3B\u52A8\u6570\u636E\u3002" : "\u516C\u5171\u6570\u636E\u4E0E\u6240\u6709\u4F19\u4F34\u79C1\u6709\u6570\u636E\u5C06\u4E00\u8D77\u8FC1\u79FB\uFF0C\u5168\u90E8\u6821\u9A8C\u540E\u624D\u5207\u6362\u76EE\u5F55\u7248\u672C\u3002", close: () => {
16607
17015
  if (!busy) setConfirm(false);
16608
- }, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("form", { className: "dsh-partner-feature-form", onSubmit: (event) => {
17016
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("form", { className: "dsh-partner-feature-form", onSubmit: (event) => {
16609
17017
  event.preventDefault();
16610
17018
  void migrate();
16611
17019
  }, children: [
16612
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { className: "is-wide", children: "\u5148\u5B8C\u6574\u5907\u4EFD\uFF0C\u7248\u672C\u63D0\u4EA4\u540E\u6E05\u7406\u5DF2\u6838\u9A8C\u7684\u65E7\u8DEF\u5F84\uFF1B\u5386\u53F2\u8BB0\u5FC6\u5907\u4EFD\u4F1A\u539F\u6837\u5F52\u6863\u3002\u5907\u4EFD\u4E0D\u4F1A\u81EA\u52A8\u5220\u9664\u3002\u8FC1\u79FB\u671F\u95F4\u8BF7\u52FF\u7F16\u8F91\u6587\u4EF6\u3001\u4FEE\u6539\u63D2\u4EF6\u914D\u7F6E\u6216\u542F\u52A8\u5176\u4ED6\u5B9E\u4F8B\u3002" }),
16613
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { className: "is-wide", children: "\u8D26\u53F7\u51ED\u636E\u548C\u5BBF\u4E3B\u4F1A\u8BDD\u4E0D\u642C\u52A8\u3002\u5347\u7EA7\u540E\u4E0D\u8981\u76F4\u63A5\u5B89\u88C5\u4E0D\u652F\u6301\u65B0\u7248\u5B58\u50A8\u7684\u65E7\u63D2\u4EF6\u3002" }),
16614
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("footer", { children: [
16615
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { type: "button", disabled: busy, onClick: () => setConfirm(false), children: "\u53D6\u6D88" }),
16616
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("button", { type: "submit", className: "is-primary", disabled: busy, children: busy ? "\u6B63\u5728\u5904\u7406\uFF0C\u8BF7\u52FF\u5173\u95ED\u2026" : cleanup ? "\u786E\u8BA4\u6E05\u7406\u5DF2\u5907\u4EFD\u7684\u65E7\u8DEF\u5F84" : "\u786E\u8BA4\u8FC1\u79FB\u76EE\u5F55\u548C\u6570\u636E" })
17020
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "is-wide", children: "\u5148\u5B8C\u6574\u5907\u4EFD\uFF0C\u7248\u672C\u63D0\u4EA4\u540E\u6E05\u7406\u5DF2\u6838\u9A8C\u7684\u65E7\u8DEF\u5F84\uFF1B\u5386\u53F2\u8BB0\u5FC6\u5907\u4EFD\u4F1A\u539F\u6837\u5F52\u6863\u3002\u5907\u4EFD\u4E0D\u4F1A\u81EA\u52A8\u5220\u9664\u3002\u8FC1\u79FB\u671F\u95F4\u8BF7\u52FF\u7F16\u8F91\u6587\u4EF6\u3001\u4FEE\u6539\u63D2\u4EF6\u914D\u7F6E\u6216\u542F\u52A8\u5176\u4ED6\u5B9E\u4F8B\u3002" }),
17021
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "is-wide", children: "\u8D26\u53F7\u51ED\u636E\u548C\u5BBF\u4E3B\u4F1A\u8BDD\u4E0D\u642C\u52A8\u3002\u5347\u7EA7\u540E\u4E0D\u8981\u76F4\u63A5\u5B89\u88C5\u4E0D\u652F\u6301\u65B0\u7248\u5B58\u50A8\u7684\u65E7\u63D2\u4EF6\u3002" }),
17022
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("footer", { children: [
17023
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("button", { type: "button", disabled: busy, onClick: () => setConfirm(false), children: "\u53D6\u6D88" }),
17024
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("button", { type: "submit", className: "is-primary", disabled: busy, children: busy ? "\u6B63\u5728\u5904\u7406\uFF0C\u8BF7\u52FF\u5173\u95ED\u2026" : cleanup ? "\u786E\u8BA4\u6E05\u7406\u5DF2\u5907\u4EFD\u7684\u65E7\u8DEF\u5F84" : "\u786E\u8BA4\u8FC1\u79FB\u76EE\u5F55\u548C\u6570\u636E" })
16617
17025
  ] })
16618
17026
  ] }) })
16619
17027
  ] });
16620
17028
  }
16621
17029
 
16622
17030
  // src/ui/workspace-navigation.tsx
16623
- var import_jsx_runtime45 = require("react/jsx-runtime");
17031
+ var import_jsx_runtime46 = require("react/jsx-runtime");
16624
17032
  var workspaceGroups = [
16625
- { id: "features", label: "\u529F\u80FD", detail: "\u80FD\u529B\u3001\u534F\u4F5C\u4E0E\u8BA1\u5212", icon: import_dsh_client_ui_primitives23.IconBrowseOutline16, pages: [
16626
- { id: "skills", label: "Skill \u5E02\u573A", icon: import_dsh_client_ui_primitives23.IconBrowseOutline16 },
16627
- { id: "mcp", label: "MCP \u670D\u52A1", icon: import_dsh_client_ui_primitives23.IconBrowseOutline16 },
16628
- { id: "board", label: "\u4EFB\u52A1\u770B\u677F", icon: import_dsh_client_ui_primitives23.IconListPenOutline16 },
16629
- { id: "schedules", label: "\u5B9A\u65F6\u4EFB\u52A1", icon: import_dsh_client_ui_primitives23.IconPlayOutline16 }
17033
+ { id: "features", label: "\u529F\u80FD", detail: "\u80FD\u529B\u3001\u534F\u4F5C\u4E0E\u8BA1\u5212", icon: import_dsh_client_ui_primitives23.IconBrowseOutlineRegular, pages: [
17034
+ { id: "skills", label: "Skill \u5E02\u573A", icon: import_dsh_client_ui_primitives23.IconBrowseOutlineRegular },
17035
+ { id: "mcp", label: "MCP \u670D\u52A1", icon: import_dsh_client_ui_primitives23.IconBrowseOutlineRegular },
17036
+ { id: "board", label: "\u4EFB\u52A1\u770B\u677F", icon: import_dsh_client_ui_primitives23.IconListPenOutlineRegular },
17037
+ { id: "schedules", label: "\u5B9A\u65F6\u4EFB\u52A1", icon: import_dsh_client_ui_primitives23.IconPlayOutlineRegular }
16630
17038
  ] },
16631
- { id: "settings", label: "\u8BBE\u7F6E", detail: "\u57FA\u672C\u8BBE\u7F6E\u4E0E\u5361\u7247\u5916\u89C2", icon: import_dsh_client_ui_primitives23.IconEditOutline16, pages: [
16632
- { id: "general", label: "\u57FA\u672C\u8BBE\u7F6E", icon: import_dsh_client_ui_primitives23.IconEditOutline16 },
16633
- { id: "pendant", label: "\u5361\u7247\u8BBE\u7F6E", icon: import_dsh_client_ui_primitives23.IconEditOutline16 }
17039
+ { id: "settings", label: "\u8BBE\u7F6E", detail: "\u57FA\u672C\u8BBE\u7F6E\u4E0E\u5361\u7247\u5916\u89C2", icon: import_dsh_client_ui_primitives23.IconEditOutlineRegular, pages: [
17040
+ { id: "general", label: "\u57FA\u672C\u8BBE\u7F6E", icon: import_dsh_client_ui_primitives23.IconEditOutlineRegular },
17041
+ { id: "pendant", label: "\u5361\u7247\u8BBE\u7F6E", icon: import_dsh_client_ui_primitives23.IconEditOutlineRegular }
16634
17042
  ] }
16635
17043
  ];
16636
17044
  var workspaceGroup = (page) => workspaceGroups.find((group) => group.pages.some((item) => item.id === page));
16637
17045
  function WorkspaceGroupLinks({ view, open, compact = false }) {
16638
17046
  const active2 = workspaceGroup(view);
16639
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: workspaceGroups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("button", { type: "button", className: active2?.id === group.id ? "is-active" : "", "aria-current": active2?.id === group.id ? "page" : void 0, onClick: () => {
17047
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_jsx_runtime46.Fragment, { children: workspaceGroups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("button", { type: "button", className: active2?.id === group.id ? "is-active" : "", "aria-current": active2?.id === group.id ? "page" : void 0, onClick: () => {
16640
17048
  if (active2?.id !== group.id) open(group.pages[0].id);
16641
17049
  }, children: [
16642
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(group.icon, { size: 16 }) }),
16643
- compact ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { children: group.label }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
16644
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("strong", { children: group.label }),
16645
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("small", { children: group.detail })
17050
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(group.icon, { size: 16 }) }),
17051
+ compact ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: group.label }) : /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
17052
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: group.label }),
17053
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: group.detail })
16646
17054
  ] })
16647
17055
  ] }, group.id)) });
16648
17056
  }
16649
17057
  function WorkspaceGroupTabs({ view, open }) {
16650
17058
  const group = workspaceGroup(view);
16651
17059
  if (!group) return null;
16652
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("nav", { className: "dsh-partner-tabs dsh-partner-group-tabs", "aria-label": `${group.label}\u6807\u7B7E\u9875`, children: group.pages.map((page) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(TabButton, { active: view === page.id, onClick: () => open(page.id), icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(page.icon, { size: 16 }), children: page.label }, page.id)) });
17060
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("nav", { className: "dsh-partner-tabs dsh-partner-group-tabs", "aria-label": `${group.label}\u6807\u7B7E\u9875`, children: group.pages.map((page) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TabButton, { active: view === page.id, onClick: () => open(page.id), icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(page.icon, { size: 16 }), children: page.label }, page.id)) });
16653
17061
  }
16654
17062
 
16655
17063
  // src/client.tsx
16656
- var import_jsx_runtime46 = require("react/jsx-runtime");
17064
+ var import_jsx_runtime47 = require("react/jsx-runtime");
16657
17065
  var PLUGIN_ID = "@lemoncat7/dsh-partner";
16658
17066
  var STYLE_ID = `${PLUGIN_ID}/client`;
16659
17067
  var cssText = `${client_default}
@@ -16668,29 +17076,29 @@ ${identity_editor_default}
16668
17076
  ${form_surface_default}
16669
17077
  ${mcp_default}`;
16670
17078
  var WORKSPACE_PAGES = /* @__PURE__ */ new Set(["skills", "mcp", "board", "schedules", "pendant", "general"]);
16671
- var inject = ["slots", "layout", "sessions"];
17079
+ var inject = ["slots", "layout", "sessions", "uiWorkspace"];
16672
17080
  function apply(ctx) {
16673
17081
  ctx.effect(installStyles, "dsh-partner: styles");
16674
- const controller = createPartnerController(ctx, PLUGIN_ID, (props, current2) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(PartnerWorkspace, { ...props, controller: current2 }));
17082
+ const controller = createPartnerController(ctx, PLUGIN_ID, (props, current2) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(PartnerWorkspace, { ...props, controller: current2 }));
16675
17083
  if (pendingStorageRecovery() !== void 0) controller.open(void 0, { page: "general" });
16676
- ctx.slots.inject("shell.overlay", () => ctx.slots.register({ name: "shell.overlay", id: "partner-pendant", order: 30 }, () => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(PartnerPendant, { controller })));
17084
+ ctx.slots.inject("shell.overlay", () => ctx.slots.register({ name: "shell.overlay", id: "partner-pendant", order: 30 }, () => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(PartnerPendant, { controller })));
16677
17085
  ctx.effect(() => observePluginWorkspace(PLUGIN_ID, controller.close), "dsh-partner: exclusive workspace");
16678
17086
  ctx.effect(() => () => controller.close(), "dsh-partner: workspace lifecycle");
16679
17087
  ctx.slots.inject("sidebar.footer.action", () => ctx.slots.register({
16680
17088
  name: "sidebar.footer.action",
16681
17089
  id: "partner",
16682
17090
  order: -120
16683
- }, (props) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(PartnerSidebar, { ...props, controller, collapse: () => ctx.layout.toggleSidebar() })));
17091
+ }, (props) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(PartnerSidebar, { ...props, controller, collapse: () => ctx.layout.toggleSidebar() })));
16684
17092
  }
16685
17093
  function PartnerSidebar(props) {
16686
- const ref = (0, import_react50.useRef)(null);
17094
+ const ref = (0, import_react51.useRef)(null);
16687
17095
  useWorkspaceTopAnchor(ref);
16688
- const [open, setOpen] = (0, import_react50.useState)(true);
16689
- const [snapshot, setSnapshot] = (0, import_react50.useState)();
17096
+ const [open, setOpen] = (0, import_react51.useState)(true);
17097
+ const [snapshot, setSnapshot] = (0, import_react51.useState)();
16690
17098
  useChannelStatus(setSnapshot);
16691
- const [, update] = (0, import_react50.useState)(0);
16692
- (0, import_react50.useEffect)(() => props.controller.subscribe(() => update((value) => value + 1)), [props.controller]);
16693
- (0, import_react50.useEffect)(() => {
17099
+ const [, update] = (0, import_react51.useState)(0);
17100
+ (0, import_react51.useEffect)(() => props.controller.subscribe(() => update((value) => value + 1)), [props.controller]);
17101
+ (0, import_react51.useEffect)(() => {
16694
17102
  void loadPartner().then(setSnapshot).catch(() => {
16695
17103
  });
16696
17104
  }, [props.controller.isOpen()]);
@@ -16698,35 +17106,35 @@ function PartnerSidebar(props) {
16698
17106
  props.controller.open(id);
16699
17107
  if (props.wide && window.matchMedia("(max-width: 820px)").matches) props.collapse();
16700
17108
  };
16701
- if (!props.wide) return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("section", { ref, className: "dsh-partner-sidebar is-rail", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { type: "button", className: `dsh-partner-rail${props.controller.isOpen() ? " is-active" : ""}`, title: "\u4F19\u4F34", onClick: () => props.controller.toggle(), children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutline16, { size: 18 }) }) });
16702
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("section", { ref, className: "dsh-partner-sidebar", children: [
16703
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dsh-partner-sidebar-heading", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("button", { type: "button", className: "dsh-partner-sidebar-title", "aria-expanded": open, onClick: () => setOpen((value) => !value), children: [
16704
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { "data-open": open, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconChevronDownOutline14, { size: 14 }) }),
17109
+ if (!props.wide) return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("section", { ref, className: "dsh-partner-sidebar is-rail", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { type: "button", className: `dsh-partner-rail${props.controller.isOpen() ? " is-active" : ""}`, title: "\u4F19\u4F34", onClick: () => props.controller.toggle(), children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutlineRegular, { size: 18 }) }) });
17110
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("section", { ref, className: "dsh-partner-sidebar", children: [
17111
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dsh-partner-sidebar-heading", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("button", { type: "button", className: "dsh-partner-sidebar-title", "aria-expanded": open, onClick: () => setOpen((value) => !value), children: [
17112
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { "data-open": open, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconChevronDownOutlineRegular, { size: 14 }) }),
16705
17113
  "\u4F19\u4F34"
16706
17114
  ] }) }),
16707
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: `dsh-partner-sidebar-list${open ? " is-open" : ""}`, "aria-hidden": !open, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dsh-partner-sidebar-list-inner", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("button", { type: "button", tabIndex: open ? 0 : -1, className: `dsh-partner-sidebar-row${props.controller.isOpen() ? " is-active" : ""}`, onClick: () => launch(), children: [
16708
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "dsh-partner-sidebar-symbol", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutline16, { size: 16 }) }),
16709
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
16710
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: "\u4F19\u4F34\u9762\u677F" }),
16711
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: snapshot ? `${snapshot.companions.length} \u4F4D\u4F19\u4F34 \xB7 ${snapshot.channels.filter((item) => item.runtimeStatus === "running").length} \u4E2A\u6E20\u9053\u5728\u7EBF` : "\u8EAB\u4EFD\u3001\u80FD\u529B\u4E0E\u6E20\u9053" })
17115
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: `dsh-partner-sidebar-list${open ? " is-open" : ""}`, "aria-hidden": !open, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dsh-partner-sidebar-list-inner", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("button", { type: "button", tabIndex: open ? 0 : -1, className: `dsh-partner-sidebar-row${props.controller.isOpen() ? " is-active" : ""}`, onClick: () => launch(), children: [
17116
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "dsh-partner-sidebar-symbol", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutlineRegular, { size: 16 }) }),
17117
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17118
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: "\u4F19\u4F34\u9762\u677F" }),
17119
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: snapshot ? `${snapshot.companions.length} \u4F4D\u4F19\u4F34 \xB7 ${snapshot.channels.filter((item) => item.runtimeStatus === "running").length} \u4E2A\u6E20\u9053\u5728\u7EBF` : "\u8EAB\u4EFD\u3001\u80FD\u529B\u4E0E\u6E20\u9053" })
16712
17120
  ] }),
16713
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("i", { className: snapshot?.channels.some((item) => item.runtimeStatus === "running") ? "is-online" : "" })
17121
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("i", { className: snapshot?.channels.some((item) => item.runtimeStatus === "running") ? "is-online" : "" })
16714
17122
  ] }) }) })
16715
17123
  ] });
16716
17124
  }
16717
17125
  function PartnerWorkspace({ controller }) {
16718
- const [snapshot, setSnapshot] = (0, import_react50.useState)();
17126
+ const [snapshot, setSnapshot] = (0, import_react51.useState)();
16719
17127
  useChannelStatus(setSnapshot);
16720
- const [selectedId, setSelectedId] = (0, import_react50.useState)(controller.selected());
16721
- const [view, setView] = (0, import_react50.useState)(controller.destination()?.page ?? "home");
16722
- const [requestedDestination, setRequestedDestination] = (0, import_react50.useState)(controller.destination());
16723
- const [error, setError] = (0, import_react50.useState)();
16724
- const [loading, setLoading] = (0, import_react50.useState)(true);
16725
- const [creatingCompanion, setCreatingCompanion] = (0, import_react50.useState)(false);
16726
- const [notice, setNotice] = (0, import_react50.useState)();
16727
- const selectionRef = (0, import_react50.useRef)({ selectedId, companions: snapshot?.companions });
17128
+ const [selectedId, setSelectedId] = (0, import_react51.useState)(controller.selected());
17129
+ const [view, setView] = (0, import_react51.useState)(controller.destination()?.page ?? "home");
17130
+ const [requestedDestination, setRequestedDestination] = (0, import_react51.useState)(controller.destination());
17131
+ const [error, setError] = (0, import_react51.useState)();
17132
+ const [loading, setLoading] = (0, import_react51.useState)(true);
17133
+ const [creatingCompanion, setCreatingCompanion] = (0, import_react51.useState)(false);
17134
+ const [notice, setNotice] = (0, import_react51.useState)();
17135
+ const selectionRef = (0, import_react51.useRef)({ selectedId, companions: snapshot?.companions });
16728
17136
  selectionRef.current = { selectedId, companions: snapshot?.companions };
16729
- const refresh = (0, import_react50.useCallback)(async (throwOnError = false) => {
17137
+ const refresh = (0, import_react51.useCallback)(async (throwOnError = false) => {
16730
17138
  try {
16731
17139
  const next = await loadPartner();
16732
17140
  setSnapshot(next);
@@ -16739,10 +17147,10 @@ function PartnerWorkspace({ controller }) {
16739
17147
  setLoading(false);
16740
17148
  }
16741
17149
  }, []);
16742
- (0, import_react50.useEffect)(() => {
17150
+ (0, import_react51.useEffect)(() => {
16743
17151
  void refresh();
16744
17152
  }, [refresh]);
16745
- (0, import_react50.useEffect)(() => controller.subscribe(() => {
17153
+ (0, import_react51.useEffect)(() => controller.subscribe(() => {
16746
17154
  const next = controller.selected();
16747
17155
  if (next) setSelectedId(next);
16748
17156
  const destination = controller.destination();
@@ -16811,18 +17219,18 @@ function PartnerWorkspace({ controller }) {
16811
17219
  setSelectedId(id);
16812
17220
  setView("home");
16813
17221
  };
16814
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("main", { className: "dsh-partner-workspace", children: [
16815
- creatingCompanion && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(CompanionCreateDialog, { close: () => setCreatingCompanion(false), create }),
16816
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("header", { className: "dsh-partner-topbar", children: [
16817
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-topbar-brand", children: [
16818
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { type: "button", "data-xiaohei-workspace-close": true, onClick: controller.close, "aria-label": "\u8FD4\u56DE\u4F1A\u8BDD", title: "\u8FD4\u56DE\u4F1A\u8BDD", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconChevronLeftOutline14, { size: 15 }) }),
16819
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutline16, { size: 18 }),
16820
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
16821
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: "\u4F19\u4F34" }),
16822
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "\u957F\u671F\u8EAB\u4EFD\u4E0E\u6D88\u606F\u6E20\u9053" })
17222
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("main", { className: "dsh-partner-workspace", children: [
17223
+ creatingCompanion && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompanionCreateDialog, { close: () => setCreatingCompanion(false), create }),
17224
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("header", { className: "dsh-partner-topbar", children: [
17225
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-topbar-brand", children: [
17226
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { type: "button", "data-xiaohei-workspace-close": true, onClick: controller.close, "aria-label": "\u8FD4\u56DE\u4F1A\u8BDD", title: "\u8FD4\u56DE\u4F1A\u8BDD", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconChevronLeftOutlineRegular, { size: 15 }) }),
17227
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutlineRegular, { size: 18 }),
17228
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17229
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: "\u4F19\u4F34" }),
17230
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "\u957F\u671F\u8EAB\u4EFD\u4E0E\u6D88\u606F\u6E20\u9053" })
16823
17231
  ] })
16824
17232
  ] }),
16825
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
17233
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
16826
17234
  MobileWorkspaceControls,
16827
17235
  {
16828
17236
  companions: snapshot?.companions ?? [],
@@ -16834,87 +17242,87 @@ function PartnerWorkspace({ controller }) {
16834
17242
  }
16835
17243
  )
16836
17244
  ] }),
16837
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-grid", children: [
16838
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("aside", { className: "dsh-partner-roster", children: [
16839
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-roster-title", children: [
16840
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
16841
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "COMPANIONS" }),
16842
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: "\u4F19\u4F34\u540D\u518C" })
17245
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-grid", children: [
17246
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("aside", { className: "dsh-partner-roster", children: [
17247
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-roster-title", children: [
17248
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17249
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "COMPANIONS" }),
17250
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: "\u4F19\u4F34\u540D\u518C" })
16843
17251
  ] }),
16844
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { type: "button", onClick: () => setCreatingCompanion(true), "aria-label": "\u65B0\u5EFA\u4F19\u4F34", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconPlusOutline16, { size: 16 }) })
17252
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { type: "button", onClick: () => setCreatingCompanion(true), "aria-label": "\u65B0\u5EFA\u4F19\u4F34", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconPlusOutlineRegular, { size: 16 }) })
16845
17253
  ] }),
16846
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dsh-partner-roster-list", children: snapshot?.companions.map((companion) => {
17254
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dsh-partner-roster-list", children: snapshot?.companions.map((companion) => {
16847
17255
  const channel = snapshot.channels.find((item) => item.companionId === companion.id);
16848
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("button", { type: "button", className: !workspacePage && selectedId === companion.id ? "is-active" : "", onClick: () => openCompanion(companion.id), children: [
16849
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Avatar, { name: companion.name }),
16850
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
16851
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: companion.name }),
16852
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: companion.role })
17256
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("button", { type: "button", className: !workspacePage && selectedId === companion.id ? "is-active" : "", onClick: () => openCompanion(companion.id), children: [
17257
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Avatar, { name: companion.name }),
17258
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17259
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: companion.name }),
17260
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: companion.role })
16853
17261
  ] }),
16854
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("i", { className: channel?.runtimeStatus === "running" ? "is-online" : "", title: channel ? channel.runtimeStatus : "\u672A\u8FDE\u63A5\u6E20\u9053" })
17262
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("i", { className: channel?.runtimeStatus === "running" ? "is-online" : "", title: channel ? channel.runtimeStatus : "\u672A\u8FDE\u63A5\u6E20\u9053" })
16855
17263
  ] }, companion.id);
16856
17264
  }) }),
16857
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("nav", { className: "dsh-partner-workspace-nav", "aria-label": "\u4F19\u4F34\u5DE5\u4F5C\u533A", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(WorkspaceGroupLinks, { view, open: setView }) }),
16858
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-roster-note", children: [
16859
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconLinkOutline16, { size: 16 }),
16860
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
16861
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: "\u8EAB\u4EFD\u4E0E\u6E20\u9053\u5206\u79BB" }),
16862
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "\u6E20\u9053\u53EA\u8D1F\u8D23\u6536\u53D1\uFF0C\u6743\u9650\u4ECD\u7531 DSH \u5DE5\u5177\u51B3\u5B9A\u3002" })
17265
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("nav", { className: "dsh-partner-workspace-nav", "aria-label": "\u4F19\u4F34\u5DE5\u4F5C\u533A", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(WorkspaceGroupLinks, { view, open: setView }) }),
17266
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-roster-note", children: [
17267
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconLinkOutlineRegular, { size: 16 }),
17268
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17269
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: "\u8EAB\u4EFD\u4E0E\u6E20\u9053\u5206\u79BB" }),
17270
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "\u6E20\u9053\u53EA\u8D1F\u8D23\u6536\u53D1\uFF0C\u6743\u9650\u4ECD\u7531 DSH \u5DE5\u5177\u51B3\u5B9A\u3002" })
16863
17271
  ] })
16864
17272
  ] })
16865
17273
  ] }),
16866
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("section", { className: `dsh-partner-stage${workspacePage ? " is-workspace-page" : ""}`, children: [
16867
- loading ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ContentState, { title: "\u6B63\u5728\u8BFB\u53D6\u4F19\u4F34\u2026" }) : workspacePage ? /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
16868
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dsh-partner-group-heading", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("h1", { children: workspaceGroup(view)?.label }) }),
16869
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(WorkspaceGroupTabs, { view, open: setView }),
16870
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-stage-scroll is-workspace-page", children: [
16871
- view === "skills" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(SkillsPanel, {}),
16872
- view === "mcp" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(McpPanel, {}),
16873
- view === "board" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(RequirementBoard, { initialTaskId: requestedDestination?.taskId, openRequest: requestedDestination }),
16874
- view === "schedules" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(SchedulePanel, { companions: snapshot?.companions ?? [] }),
16875
- view === "pendant" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(PendantSettingsPanel, {}),
16876
- view === "general" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(GeneralSettingsPanel, {})
17274
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("section", { className: `dsh-partner-stage${workspacePage ? " is-workspace-page" : ""}`, children: [
17275
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ContentState, { title: "\u6B63\u5728\u8BFB\u53D6\u4F19\u4F34\u2026" }) : workspacePage ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
17276
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dsh-partner-group-heading", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h1", { children: workspaceGroup(view)?.label }) }),
17277
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(WorkspaceGroupTabs, { view, open: setView }),
17278
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-stage-scroll is-workspace-page", children: [
17279
+ view === "skills" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(SkillsPanel, {}),
17280
+ view === "mcp" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(McpPanel, {}),
17281
+ view === "board" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(RequirementBoard, { initialTaskId: requestedDestination?.taskId, openRequest: requestedDestination }),
17282
+ view === "schedules" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(SchedulePanel, { companions: snapshot?.companions ?? [] }),
17283
+ view === "pendant" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(PendantSettingsPanel, {}),
17284
+ view === "general" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(GeneralSettingsPanel, {})
16877
17285
  ] })
16878
- ] }) : selected === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ContentState, { title: "\u521B\u5EFA\u7B2C\u4E00\u4E2A\u4F19\u4F34", detail: "\u4F19\u4F34\u4F1A\u4FDD\u5B58\u72EC\u7ACB\u8EAB\u4EFD\u3001\u80FD\u529B\u548C\u5FAE\u4FE1\u4F1A\u8BDD\u3002", action: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { onClick: () => setCreatingCompanion(true), children: "\u65B0\u5EFA\u4F19\u4F34" }) }) : /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
16879
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-identity", children: [
16880
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Avatar, { name: selected.name }),
16881
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
16882
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "ACTIVE COMPANION" }),
16883
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("h1", { children: selected.name }),
16884
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { children: selected.description || selected.role })
17286
+ ] }) : selected === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ContentState, { title: "\u521B\u5EFA\u7B2C\u4E00\u4E2A\u4F19\u4F34", detail: "\u4F19\u4F34\u4F1A\u4FDD\u5B58\u72EC\u7ACB\u8EAB\u4EFD\u3001\u80FD\u529B\u548C\u5FAE\u4FE1\u4F1A\u8BDD\u3002", action: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { onClick: () => setCreatingCompanion(true), children: "\u65B0\u5EFA\u4F19\u4F34" }) }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
17287
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-identity", children: [
17288
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Avatar, { name: selected.name }),
17289
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17290
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "ACTIVE COMPANION" }),
17291
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h1", { children: selected.name }),
17292
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: selected.description || selected.role })
16885
17293
  ] }),
16886
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ChannelStatus, { channel: snapshot?.channels.find((item) => item.companionId === selected.id) })
17294
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ChannelStatus, { channel: snapshot?.channels.find((item) => item.companionId === selected.id) })
16887
17295
  ] }),
16888
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("nav", { className: "dsh-partner-tabs", "aria-label": "\u4F19\u4F34\u914D\u7F6E", children: [
16889
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TabButton, { active: view === "home", onClick: () => setView("home"), icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutline16, { size: 16 }), children: "\u603B\u89C8" }),
16890
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TabButton, { active: view === "identity", onClick: () => setView("identity"), icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconEditOutline16, { size: 16 }), children: "\u8EAB\u4EFD" }),
16891
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TabButton, { active: view === "capabilities", onClick: () => setView("capabilities"), icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutline16, { size: 16 }), children: "\u80FD\u529B" }),
16892
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TabButton, { active: view === "weixin", onClick: () => setView("weixin"), icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconLinkOutline16, { size: 16 }), children: "\u6E20\u9053" }),
16893
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TabButton, { active: view === "memory", onClick: () => setView("memory"), icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconDataOutline16, { size: 16 }), children: "\u8BB0\u5FC6" }),
16894
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TabButton, { active: view === "concerns", onClick: () => setView("concerns"), icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconBrowseOutline16, { size: 16 }), children: "\u6301\u7EED\u5173\u6CE8" })
17296
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("nav", { className: "dsh-partner-tabs", "aria-label": "\u4F19\u4F34\u914D\u7F6E", children: [
17297
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TabButton, { active: view === "home", onClick: () => setView("home"), icon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutlineRegular, { size: 16 }), children: "\u603B\u89C8" }),
17298
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TabButton, { active: view === "identity", onClick: () => setView("identity"), icon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconEditOutlineRegular, { size: 16 }), children: "\u8EAB\u4EFD" }),
17299
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TabButton, { active: view === "capabilities", onClick: () => setView("capabilities"), icon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutlineRegular, { size: 16 }), children: "\u80FD\u529B" }),
17300
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TabButton, { active: view === "weixin", onClick: () => setView("weixin"), icon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconLinkOutlineRegular, { size: 16 }), children: "\u6E20\u9053" }),
17301
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TabButton, { active: view === "memory", onClick: () => setView("memory"), icon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconDataOutlineRegular, { size: 16 }), children: "\u8BB0\u5FC6" }),
17302
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TabButton, { active: view === "concerns", onClick: () => setView("concerns"), icon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconBrowseOutlineRegular, { size: 16 }), children: "\u6301\u7EED\u5173\u6CE8" })
16895
17303
  ] }),
16896
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-stage-scroll", children: [
16897
- notice && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "dsh-partner-inline-notice", role: "status", children: notice }),
16898
- view === "home" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(HomePanel, { companion: selected, snapshot, navigate: setView, openSession, startSession, renewSession }),
16899
- view === "identity" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(IdentityEditor, { companion: selected, count: snapshot?.companions.length ?? 1, onChanged: () => refresh(true), onRemoved: companionRemoved }),
16900
- view === "capabilities" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(CapabilityEditor, { companion: selected, presets: snapshot?.presets ?? [], onChanged: () => refresh(true) }, selected.id),
16901
- view === "weixin" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ChannelsPanel, { companion: selected, snapshot, onChanged: refresh, weixin: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(WeixinPanel, { companion: selected, snapshot, onChanged: refresh }) }, selected.id),
16902
- view === "memory" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(MemoryPanel, { companion: selected, snapshot, openSession, startSession, renewSession, onChanged: refresh }, selected.id),
16903
- view === "concerns" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ConcernPanel, { companion: selected, snapshot, onChanged: refresh }, selected.id)
17304
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-stage-scroll", children: [
17305
+ notice && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "dsh-partner-inline-notice", role: "status", children: notice }),
17306
+ view === "home" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(HomePanel, { companion: selected, snapshot, navigate: setView, openSession, startSession, renewSession }),
17307
+ view === "identity" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(IdentityEditor, { companion: selected, count: snapshot?.companions.length ?? 1, onChanged: () => refresh(true), onRemoved: companionRemoved }),
17308
+ view === "capabilities" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CapabilityEditor, { companion: selected, presets: snapshot?.presets ?? [], onChanged: () => refresh(true) }, selected.id),
17309
+ view === "weixin" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ChannelsPanel, { companion: selected, snapshot, onChanged: refresh, weixin: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(WeixinPanel, { companion: selected, snapshot, onChanged: refresh }) }, selected.id),
17310
+ view === "memory" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(MemoryPanel, { companion: selected, snapshot, openSession, startSession, renewSession, onChanged: refresh }, selected.id),
17311
+ view === "concerns" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ConcernPanel, { companion: selected, snapshot, onChanged: refresh }, selected.id)
16904
17312
  ] })
16905
17313
  ] }),
16906
- error && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "dsh-partner-error", role: "alert", children: error })
17314
+ error && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "dsh-partner-error", role: "alert", children: error })
16907
17315
  ] })
16908
17316
  ] })
16909
17317
  ] });
16910
17318
  }
16911
17319
  function MobileWorkspaceControls({ companions, selectedId, view, openCompanion, openPage, createCompanion }) {
16912
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-mobile-controls", children: [
16913
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-mobile-companion-row", children: [
16914
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(CompanionPicker, { companions, selectedId, onChange: openCompanion }),
16915
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { type: "button", className: "dsh-partner-mobile-create", onClick: createCompanion, "aria-label": "\u65B0\u5EFA\u4F19\u4F34", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconPlusOutline16, { size: 17 }) })
17320
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-mobile-controls", children: [
17321
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-mobile-companion-row", children: [
17322
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompanionPicker, { companions, selectedId, onChange: openCompanion }),
17323
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { type: "button", className: "dsh-partner-mobile-create", onClick: createCompanion, "aria-label": "\u65B0\u5EFA\u4F19\u4F34", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconPlusOutlineRegular, { size: 17 }) })
16916
17324
  ] }),
16917
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("nav", { className: "dsh-partner-mobile-workspace-nav", "aria-label": "\u4F19\u4F34\u5DE5\u4F5C\u533A\u5FEB\u6377\u5165\u53E3", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(WorkspaceGroupLinks, { view, open: openPage, compact: true }) })
17325
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("nav", { className: "dsh-partner-mobile-workspace-nav", "aria-label": "\u4F19\u4F34\u5DE5\u4F5C\u533A\u5FEB\u6377\u5165\u53E3", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(WorkspaceGroupLinks, { view, open: openPage, compact: true }) })
16918
17326
  ] });
16919
17327
  }
16920
17328
  function HomePanel({ companion, snapshot, navigate, openSession, startSession, renewSession }) {
@@ -16925,77 +17333,77 @@ function HomePanel({ companion, snapshot, navigate, openSession, startSession, r
16925
17333
  const approved = channel ? snapshot.pairings.filter((item) => item.channelId === channel.id && item.status === "approved").length : 0;
16926
17334
  const capabilities = companion.capabilities.map((item) => CAPABILITY_LABELS[item]);
16927
17335
  const online = channel?.runtimeStatus === "running";
16928
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-home", children: [
16929
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("header", { className: "dsh-partner-home-heading", children: [
16930
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
16931
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "\u5DE5\u4F5C\u53F0" }),
16932
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("h2", { children: online ? `${companion.name} \u6B63\u5728\u6E20\u9053\u5F85\u547D` : `${companion.name} \u5DF2\u51C6\u5907\u5C31\u7EEA` })
17336
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-home", children: [
17337
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("header", { className: "dsh-partner-home-heading", children: [
17338
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17339
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "\u5DE5\u4F5C\u53F0" }),
17340
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h2", { children: online ? `${companion.name} \u6B63\u5728\u6E20\u9053\u5F85\u547D` : `${companion.name} \u5DF2\u51C6\u5907\u5C31\u7EEA` })
16933
17341
  ] }),
16934
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { children: online ? "\u6D88\u606F\u3001\u6388\u6743\u4E0E\u4E0A\u4E0B\u6587\u8FB9\u754C\u90FD\u5728\u8FD9\u91CC\u6C47\u603B\u3002" : "\u4F19\u4F34\u8EAB\u4EFD\u3001\u4F1A\u8BDD\u4E0E\u80FD\u529B\u5DF2\u7ECF\u51C6\u5907\u5B8C\u6210\u3002" })
17342
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: online ? "\u6D88\u606F\u3001\u6388\u6743\u4E0E\u4E0A\u4E0B\u6587\u8FB9\u754C\u90FD\u5728\u8FD9\u91CC\u6C47\u603B\u3002" : "\u4F19\u4F34\u8EAB\u4EFD\u3001\u4F1A\u8BDD\u4E0E\u80FD\u529B\u5DF2\u7ECF\u51C6\u5907\u5B8C\u6210\u3002" })
16935
17343
  ] }),
16936
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("section", { className: `dsh-partner-home-channel${online ? " is-online" : ""}`, children: [
16937
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-home-route", "aria-hidden": "true", children: [
16938
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Avatar, { name: companion.name }),
16939
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "dsh-partner-route-line", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("i", {}) }),
16940
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "dsh-partner-route-weixin", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(WeixinGlyph, { large: true }) })
17344
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("section", { className: `dsh-partner-home-channel${online ? " is-online" : ""}`, children: [
17345
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-home-route", "aria-hidden": "true", children: [
17346
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Avatar, { name: companion.name }),
17347
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "dsh-partner-route-line", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("i", {}) }),
17348
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "dsh-partner-route-weixin", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(WeixinGlyph, { large: true }) })
16941
17349
  ] }),
16942
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-home-channel-copy", children: [
16943
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { className: "dsh-partner-home-kicker", children: [
16944
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("i", {}),
17350
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-home-channel-copy", children: [
17351
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "dsh-partner-home-kicker", children: [
17352
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("i", {}),
16945
17353
  "\u6D88\u606F\u6E20\u9053 \xB7 ",
16946
17354
  channel?.platform === "matrix" ? "Matrix" : channel?.platform === "mattermost" ? "Mattermost" : "\u5FAE\u4FE1"
16947
17355
  ] }),
16948
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("h3", { children: !channel ? "\u7B49\u5F85\u626B\u7801\u8FDE\u63A5" : online ? "\u8FDE\u63A5\u6B63\u5E38\uFF0C\u6B63\u5728\u63A5\u6536\u6D88\u606F" : channel.runtimeStatus === "error" ? "\u6E20\u9053\u8FDE\u63A5\u9700\u8981\u5904\u7406" : "\u6E20\u9053\u5F53\u524D\u5DF2\u505C\u7528" }),
16949
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { children: !channel ? "\u8FDE\u63A5\u5FAE\u4FE1\u3001Matrix \u6216 Mattermost\uFF0C\u8054\u7CFB\u4EBA\u9996\u6B21\u53D1\u6D88\u606F\u9700\u6279\u51C6\u3002" : online ? "\u672C\u5730\u4E0E\u6240\u6709\u5DF2\u6388\u6743\u6E20\u9053\u5171\u7528\u4F19\u4F34\u4E3B\u5BF9\u8BDD\uFF0C\u56DE\u590D\u8FD4\u56DE\u6D88\u606F\u6765\u6E90\u3002" : channel.lastError || "\u6E20\u9053\u914D\u7F6E\u4ECD\u7136\u4FDD\u7559\uFF0C\u53EF\u4EE5\u968F\u65F6\u91CD\u65B0\u542F\u7528\u3002" }),
16950
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-home-channel-actions", children: [
16951
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { type: "button", className: "is-primary", onClick: () => navigate("weixin"), children: !channel ? "\u8FDE\u63A5\u5FAE\u4FE1" : pending > 0 ? `\u5904\u7406 ${pending} \u4E2A\u8BF7\u6C42` : "\u7BA1\u7406\u6E20\u9053" }),
16952
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: !channel ? "\u9009\u62E9\u6E20\u9053\u5E76\u8FDE\u63A5\u8D26\u53F7" : `${approved} \u4F4D\u8054\u7CFB\u4EBA \xB7 \u5171\u7528\u4E3B\u5BF9\u8BDD` })
17356
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h3", { children: !channel ? "\u7B49\u5F85\u626B\u7801\u8FDE\u63A5" : online ? "\u8FDE\u63A5\u6B63\u5E38\uFF0C\u6B63\u5728\u63A5\u6536\u6D88\u606F" : channel.runtimeStatus === "error" ? "\u6E20\u9053\u8FDE\u63A5\u9700\u8981\u5904\u7406" : "\u6E20\u9053\u5F53\u524D\u5DF2\u505C\u7528" }),
17357
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: !channel ? "\u8FDE\u63A5\u5FAE\u4FE1\u3001Matrix \u6216 Mattermost\uFF0C\u8054\u7CFB\u4EBA\u9996\u6B21\u53D1\u6D88\u606F\u9700\u6279\u51C6\u3002" : online ? "\u672C\u5730\u4E0E\u6240\u6709\u5DF2\u6388\u6743\u6E20\u9053\u5171\u7528\u4F19\u4F34\u4E3B\u5BF9\u8BDD\uFF0C\u56DE\u590D\u8FD4\u56DE\u6D88\u606F\u6765\u6E90\u3002" : channel.lastError || "\u6E20\u9053\u914D\u7F6E\u4ECD\u7136\u4FDD\u7559\uFF0C\u53EF\u4EE5\u968F\u65F6\u91CD\u65B0\u542F\u7528\u3002" }),
17358
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-home-channel-actions", children: [
17359
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { type: "button", className: "is-primary", onClick: () => navigate("weixin"), children: !channel ? "\u8FDE\u63A5\u5FAE\u4FE1" : pending > 0 ? `\u5904\u7406 ${pending} \u4E2A\u8BF7\u6C42` : "\u7BA1\u7406\u6E20\u9053" }),
17360
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: !channel ? "\u9009\u62E9\u6E20\u9053\u5E76\u8FDE\u63A5\u8D26\u53F7" : `${approved} \u4F4D\u8054\u7CFB\u4EBA \xB7 \u5171\u7528\u4E3B\u5BF9\u8BDD` })
16953
17361
  ] })
16954
17362
  ] })
16955
17363
  ] }),
16956
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-home-details", children: [
16957
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("section", { className: "dsh-partner-home-profile", children: [
16958
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("header", { children: [
16959
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconUserOutline16, { size: 16 }) }),
16960
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { children: [
16961
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "\u4F19\u4F34\u5E95\u7A3F" }),
16962
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: companion.role })
17364
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-home-details", children: [
17365
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("section", { className: "dsh-partner-home-profile", children: [
17366
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("header", { children: [
17367
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconUserOutlineRegular, { size: 16 }) }),
17368
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
17369
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "\u4F19\u4F34\u5E95\u7A3F" }),
17370
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: companion.role })
16963
17371
  ] }),
16964
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { type: "button", onClick: () => navigate("identity"), children: "\u7F16\u8F91" })
17372
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { type: "button", onClick: () => navigate("identity"), children: "\u7F16\u8F91" })
16965
17373
  ] }),
16966
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("blockquote", { children: companion.instructions || companion.description || "\u5C1A\u672A\u8BBE\u7F6E\u957F\u671F\u884C\u4E3A\u51C6\u5219\u3002" })
17374
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("blockquote", { children: companion.instructions || companion.description || "\u5C1A\u672A\u8BBE\u7F6E\u957F\u671F\u884C\u4E3A\u51C6\u5219\u3002" })
16967
17375
  ] }),
16968
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("section", { className: "dsh-partner-home-runtime", children: [
16969
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("header", { children: [
16970
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutline16, { size: 16 }) }),
16971
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { children: [
16972
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "\u8FD0\u884C\u80FD\u529B" }),
16973
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: companion.presetId || "DSH \u9ED8\u8BA4 Preset" })
17376
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("section", { className: "dsh-partner-home-runtime", children: [
17377
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("header", { children: [
17378
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconAgentPresetOutlineRegular, { size: 16 }) }),
17379
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
17380
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "\u8FD0\u884C\u80FD\u529B" }),
17381
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: companion.presetId || "DSH \u9ED8\u8BA4 Preset" })
16974
17382
  ] }),
16975
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { type: "button", onClick: () => navigate("capabilities"), children: "\u8C03\u6574" })
17383
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { type: "button", onClick: () => navigate("capabilities"), children: "\u8C03\u6574" })
16976
17384
  ] }),
16977
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dsh-partner-home-capability-list", children: capabilities.length ? capabilities.map((item) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("em", { children: item }, item)) : /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "\u5C1A\u672A\u58F0\u660E\u80FD\u529B\u8303\u56F4" }) })
17385
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dsh-partner-home-capability-list", children: capabilities.length ? capabilities.map((item) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("em", { children: item }, item)) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "\u5C1A\u672A\u58F0\u660E\u80FD\u529B\u8303\u56F4" }) })
16978
17386
  ] }),
16979
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("section", { className: "dsh-partner-home-continuity", children: [
16980
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("header", { children: [
16981
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconDataOutline16, { size: 16 }) }),
16982
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { children: [
16983
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "\u4F19\u4F34\u5BF9\u8BDD" }),
16984
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: localSession?.archived ? "\u4F1A\u8BDD\u5DF2\u5F52\u6863" : "\u4F19\u4F34\u4F1A\u8BDD\u5DF2\u5EFA\u7ACB" })
17387
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("section", { className: "dsh-partner-home-continuity", children: [
17388
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("header", { children: [
17389
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconDataOutlineRegular, { size: 16 }) }),
17390
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
17391
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "\u4F19\u4F34\u5BF9\u8BDD" }),
17392
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: localSession?.archived ? "\u4F1A\u8BDD\u5DF2\u5F52\u6863" : "\u4F19\u4F34\u4F1A\u8BDD\u5DF2\u5EFA\u7ACB" })
16985
17393
  ] }),
16986
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { type: "button", onClick: () => localSession === void 0 ? void startSession(companion.id) : localSession.archived ? void renewSession(localSession.id) : void openSession(localSession.id, localSession.sessionId), children: localSession === void 0 ? "\u5F00\u59CB\u5BF9\u8BDD" : localSession.archived ? "\u5F00\u59CB\u65B0\u4F1A\u8BDD" : "\u6253\u5F00\u4F1A\u8BDD" })
17394
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { type: "button", onClick: () => localSession === void 0 ? void startSession(companion.id) : localSession.archived ? void renewSession(localSession.id) : void openSession(localSession.id, localSession.sessionId), children: localSession === void 0 ? "\u5F00\u59CB\u5BF9\u8BDD" : localSession.archived ? "\u5F00\u59CB\u65B0\u4F1A\u8BDD" : "\u6253\u5F00\u4F1A\u8BDD" })
16987
17395
  ] }),
16988
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { children: localSession ? `\u6700\u8FD1\u6D3B\u52A8\u4E8E ${relativeTime(localSession.lastMessageAt)}\uFF1B\u672C\u5730\u4E0E\u6E20\u9053\u5728\u8FD9\u91CC\u63A5\u7740\u804A\u3002` : "\u4F19\u4F34\u4F1A\u8BDD\u6B63\u5728\u521D\u59CB\u5316\uFF0C\u7A0D\u540E\u5373\u53EF\u6253\u5F00\u3002" })
17396
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: localSession ? `\u6700\u8FD1\u6D3B\u52A8\u4E8E ${relativeTime(localSession.lastMessageAt)}\uFF1B\u672C\u5730\u4E0E\u6E20\u9053\u5728\u8FD9\u91CC\u63A5\u7740\u804A\u3002` : "\u4F19\u4F34\u4F1A\u8BDD\u6B63\u5728\u521D\u59CB\u5316\uFF0C\u7A0D\u540E\u5373\u53EF\u6253\u5F00\u3002" })
16989
17397
  ] })
16990
17398
  ] })
16991
17399
  ] });
16992
17400
  }
16993
17401
  function WeixinPanel({ companion, snapshot, onChanged }) {
16994
17402
  const channel = snapshot.channels.find((item) => item.companionId === companion.id && (!item.platform || item.platform === "weixin"));
16995
- const [login, setLogin] = (0, import_react50.useState)();
16996
- const [busy, setBusy] = (0, import_react50.useState)(false);
16997
- const [error, setError] = (0, import_react50.useState)();
16998
- (0, import_react50.useEffect)(() => {
17403
+ const [login, setLogin] = (0, import_react51.useState)();
17404
+ const [busy, setBusy] = (0, import_react51.useState)(false);
17405
+ const [error, setError] = (0, import_react51.useState)();
17406
+ (0, import_react51.useEffect)(() => {
16999
17407
  if (!login || login.phase === "confirmed" || login.phase === "expired" || login.phase === "error") return;
17000
17408
  const timer2 = window.setInterval(() => {
17001
17409
  void api(`/weixin/login/${login.id}`).then(async (result) => {
@@ -17041,93 +17449,93 @@ function WeixinPanel({ companion, snapshot, onChanged }) {
17041
17449
  setError(errorMessage(reason));
17042
17450
  }
17043
17451
  };
17044
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-form is-channel", children: [
17045
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(SectionHeading, { eyebrow: "PRIMARY CHANNEL", title: "\u5FAE\u4FE1\u6E20\u9053", detail: "\u4F7F\u7528\u5FAE\u4FE1 iLink Bot \u626B\u7801\u63A5\u5165\u3002\u6BCF\u4E2A\u673A\u5668\u4EBA\u53EA\u7ED1\u5B9A\u4E00\u4E2A\u4F19\u4F34\uFF0C\u6BCF\u4F4D\u8054\u7CFB\u4EBA\u4FDD\u6301\u72EC\u7ACB DSH \u4F1A\u8BDD\u3002" }),
17046
- !channel && !login && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(GlassSurface, { as: "div", interactive: true, className: "dsh-partner-weixin-connect", borderRadius: 15, distortionScale: -10, saturation: 1.06, children: [
17047
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dsh-partner-weixin-mark", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(WeixinGlyph, { large: true }) }),
17048
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
17049
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("strong", { children: [
17452
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-form is-channel", children: [
17453
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(SectionHeading, { eyebrow: "PRIMARY CHANNEL", title: "\u5FAE\u4FE1\u6E20\u9053", detail: "\u4F7F\u7528\u5FAE\u4FE1 iLink Bot \u626B\u7801\u63A5\u5165\u3002\u6BCF\u4E2A\u673A\u5668\u4EBA\u53EA\u7ED1\u5B9A\u4E00\u4E2A\u4F19\u4F34\uFF0C\u6BCF\u4F4D\u8054\u7CFB\u4EBA\u4FDD\u6301\u72EC\u7ACB DSH \u4F1A\u8BDD\u3002" }),
17454
+ !channel && !login && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(GlassSurface, { as: "div", interactive: true, className: "dsh-partner-weixin-connect", borderRadius: 15, distortionScale: -10, saturation: 1.06, children: [
17455
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dsh-partner-weixin-mark", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(WeixinGlyph, { large: true }) }),
17456
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17457
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("strong", { children: [
17050
17458
  "\u628A ",
17051
17459
  companion.name,
17052
17460
  " \u5E26\u5230\u5FAE\u4FE1"
17053
17461
  ] }),
17054
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { children: "\u626B\u7801\u540E\uFF0C\u673A\u5668\u4EBA\u51ED\u636E\u76F4\u63A5\u4FDD\u5B58\u8FDB DSH \u51ED\u636E\u5E93\uFF0C\u4E0D\u4F1A\u663E\u793A\u5728\u6D4F\u89C8\u5668\u6216\u666E\u901A\u914D\u7F6E\u6587\u4EF6\u4E2D\u3002" }),
17055
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("ul", { children: [
17056
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("li", { children: "\u79C1\u804A\u9996\u6B21\u8054\u7CFB\u5FC5\u987B\u5BA1\u6279" }),
17057
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("li", { children: "\u8054\u7CFB\u4EBA\u4E4B\u95F4\u4E0A\u4E0B\u6587\u5B8C\u5168\u9694\u79BB" }),
17058
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("li", { children: "\u5DE5\u5177\u6743\u9650\u4E0D\u4F1A\u56E0\u5FAE\u4FE1\u8EAB\u4EFD\u81EA\u52A8\u6269\u5927" })
17462
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: "\u626B\u7801\u540E\uFF0C\u673A\u5668\u4EBA\u51ED\u636E\u76F4\u63A5\u4FDD\u5B58\u8FDB DSH \u51ED\u636E\u5E93\uFF0C\u4E0D\u4F1A\u663E\u793A\u5728\u6D4F\u89C8\u5668\u6216\u666E\u901A\u914D\u7F6E\u6587\u4EF6\u4E2D\u3002" }),
17463
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("ul", { children: [
17464
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("li", { children: "\u79C1\u804A\u9996\u6B21\u8054\u7CFB\u5FC5\u987B\u5BA1\u6279" }),
17465
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("li", { children: "\u8054\u7CFB\u4EBA\u4E4B\u95F4\u4E0A\u4E0B\u6587\u5B8C\u5168\u9694\u79BB" }),
17466
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("li", { children: "\u5DE5\u5177\u6743\u9650\u4E0D\u4F1A\u56E0\u5FAE\u4FE1\u8EAB\u4EFD\u81EA\u52A8\u6269\u5927" })
17059
17467
  ] })
17060
17468
  ] }),
17061
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { type: "button", disabled: busy, onClick: () => {
17469
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { type: "button", disabled: busy, onClick: () => {
17062
17470
  void begin();
17063
17471
  }, children: busy ? "\u6B63\u5728\u7533\u8BF7\u4E8C\u7EF4\u7801\u2026" : "\u626B\u7801\u8FDE\u63A5\u5FAE\u4FE1" })
17064
17472
  ] }),
17065
- login && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(GlassSurface, { as: "div", interactive: true, className: "dsh-partner-qr", borderRadius: 16, distortionScale: -10, saturation: 1.06, children: [
17066
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dsh-partner-qr-code", children: login.qrContent && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(QRCodeSVG, { value: login.qrContent, size: 176, level: "M" }) }),
17067
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
17068
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "WECHAT ILINK BOT" }),
17069
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: login.phase === "scanned" ? "\u5DF2\u626B\u7801\uFF0C\u8BF7\u5728\u5FAE\u4FE1\u786E\u8BA4" : login.phase === "expired" ? "\u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F" : login.phase === "error" ? "\u8FDE\u63A5\u5931\u8D25" : "\u4F7F\u7528\u5FAE\u4FE1\u626B\u7801" }),
17070
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { children: login.error || (login.phase === "scanned" ? "\u786E\u8BA4\u540E\u4F1A\u81EA\u52A8\u542F\u52A8\u6E20\u9053\uFF0C\u4E0D\u9700\u8981\u590D\u5236 Token\u3002" : "\u4E8C\u7EF4\u7801\u7EA6 5 \u5206\u949F\u6709\u6548\u3002\u6B64\u9875\u9762\u53EF\u4EE5\u5B89\u5168\u5730\u4FDD\u6301\u6253\u5F00\u3002") }),
17071
- (login.phase === "expired" || login.phase === "error") && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("button", { type: "button", onClick: () => {
17473
+ login && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(GlassSurface, { as: "div", interactive: true, className: "dsh-partner-qr", borderRadius: 16, distortionScale: -10, saturation: 1.06, children: [
17474
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dsh-partner-qr-code", children: login.qrContent && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(QRCodeSVG, { value: login.qrContent, size: 176, level: "M" }) }),
17475
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17476
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "WECHAT ILINK BOT" }),
17477
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: login.phase === "scanned" ? "\u5DF2\u626B\u7801\uFF0C\u8BF7\u5728\u5FAE\u4FE1\u786E\u8BA4" : login.phase === "expired" ? "\u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F" : login.phase === "error" ? "\u8FDE\u63A5\u5931\u8D25" : "\u4F7F\u7528\u5FAE\u4FE1\u626B\u7801" }),
17478
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: login.error || (login.phase === "scanned" ? "\u786E\u8BA4\u540E\u4F1A\u81EA\u52A8\u542F\u52A8\u6E20\u9053\uFF0C\u4E0D\u9700\u8981\u590D\u5236 Token\u3002" : "\u4E8C\u7EF4\u7801\u7EA6 5 \u5206\u949F\u6709\u6548\u3002\u6B64\u9875\u9762\u53EF\u4EE5\u5B89\u5168\u5730\u4FDD\u6301\u6253\u5F00\u3002") }),
17479
+ (login.phase === "expired" || login.phase === "error") && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("button", { type: "button", onClick: () => {
17072
17480
  setLogin(void 0);
17073
17481
  void begin();
17074
17482
  }, children: [
17075
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconRefreshOutline16, { size: 16 }),
17483
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconRefreshOutlineRegular, { size: 16 }),
17076
17484
  "\u91CD\u65B0\u751F\u6210"
17077
17485
  ] })
17078
17486
  ] })
17079
17487
  ] }),
17080
- channel && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
17081
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(GlassSurface, { as: "div", interactive: true, className: "dsh-partner-channel-card", borderRadius: 14, distortionScale: -10, saturation: 1.06, children: [
17082
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dsh-partner-weixin-mark", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(WeixinGlyph, { large: true }) }),
17083
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
17084
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "WECHAT CHANNEL" }),
17085
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: channel.name }),
17086
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { children: channel.accountId })
17488
+ channel && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
17489
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(GlassSurface, { as: "div", interactive: true, className: "dsh-partner-channel-card", borderRadius: 14, distortionScale: -10, saturation: 1.06, children: [
17490
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dsh-partner-weixin-mark", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(WeixinGlyph, { large: true }) }),
17491
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17492
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "WECHAT CHANNEL" }),
17493
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: channel.name }),
17494
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: channel.accountId })
17087
17495
  ] }),
17088
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ChannelStatus, { channel }),
17089
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { type: "button", className: "dsh-partner-switch", "data-on": channel.enabled, disabled: busy, "aria-label": channel.enabled ? "\u505C\u7528\u5FAE\u4FE1\u6E20\u9053" : "\u542F\u7528\u5FAE\u4FE1\u6E20\u9053", onClick: () => {
17496
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ChannelStatus, { channel }),
17497
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { type: "button", className: "dsh-partner-switch", "data-on": channel.enabled, disabled: busy, "aria-label": channel.enabled ? "\u505C\u7528\u5FAE\u4FE1\u6E20\u9053" : "\u542F\u7528\u5FAE\u4FE1\u6E20\u9053", onClick: () => {
17090
17498
  void toggle();
17091
- }, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("i", {}) })
17499
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("i", {}) })
17092
17500
  ] }),
17093
- channel.lastError && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "dsh-partner-inline-error", children: channel.lastError }),
17094
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "dsh-partner-pairing-heading", children: [
17095
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { children: [
17096
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("small", { children: "ACCESS" }),
17097
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: "\u79C1\u804A\u914D\u5BF9" })
17501
+ channel.lastError && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "dsh-partner-inline-error", children: channel.lastError }),
17502
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "dsh-partner-pairing-heading", children: [
17503
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
17504
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("small", { children: "ACCESS" }),
17505
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: "\u79C1\u804A\u914D\u5BF9" })
17098
17506
  ] }),
17099
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("em", { children: [
17507
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("em", { children: [
17100
17508
  pairings.filter((item) => item.status === "pending").length,
17101
17509
  " \u4E2A\u5F85\u5904\u7406"
17102
17510
  ] })
17103
17511
  ] }),
17104
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dsh-partner-pairings", children: pairings.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ContentState, { title: "\u8FD8\u6CA1\u6709\u8054\u7CFB\u4EBA", detail: "\u6709\u4EBA\u9996\u6B21\u5411\u673A\u5668\u4EBA\u53D1\u6D88\u606F\u540E\uFF0C\u914D\u5BF9\u8BF7\u6C42\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002", compact: true }) : pairings.map((pairing) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("article", { children: [
17105
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: `is-${pairing.status}`, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_dsh_client_ui_primitives24.IconUserOutline16, { size: 16 }) }),
17106
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { children: [
17107
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("strong", { children: pairing.displayName }),
17108
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("small", { children: [
17512
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dsh-partner-pairings", children: pairings.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ContentState, { title: "\u8FD8\u6CA1\u6709\u8054\u7CFB\u4EBA", detail: "\u6709\u4EBA\u9996\u6B21\u5411\u673A\u5668\u4EBA\u53D1\u6D88\u606F\u540E\uFF0C\u914D\u5BF9\u8BF7\u6C42\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002", compact: true }) : pairings.map((pairing) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("article", { children: [
17513
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: `is-${pairing.status}`, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_dsh_client_ui_primitives24.IconUserOutlineRegular, { size: 16 }) }),
17514
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
17515
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("strong", { children: pairing.displayName }),
17516
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("small", { children: [
17109
17517
  pairing.status === "pending" ? "\u7B49\u5F85\u5BA1\u6279" : pairing.status === "approved" ? "\u5DF2\u6388\u6743\u72EC\u7ACB\u4F1A\u8BDD" : "\u5DF2\u963B\u6B62",
17110
17518
  " \xB7 ",
17111
17519
  new Date(pairing.updatedAt).toLocaleString()
17112
17520
  ] })
17113
17521
  ] }),
17114
- pairing.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
17115
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { onClick: () => {
17522
+ pairing.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
17523
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { onClick: () => {
17116
17524
  void actPairing(pairing.id, "blocked");
17117
17525
  }, children: "\u62D2\u7EDD" }),
17118
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { className: "is-primary", onClick: () => {
17526
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { className: "is-primary", onClick: () => {
17119
17527
  void actPairing(pairing.id, "approved");
17120
17528
  }, children: "\u6279\u51C6" })
17121
17529
  ] }),
17122
- pairing.status === "approved" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { onClick: () => {
17530
+ pairing.status === "approved" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { onClick: () => {
17123
17531
  void actPairing(pairing.id, "blocked");
17124
17532
  }, children: "\u64A4\u9500" }),
17125
- pairing.status === "blocked" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("button", { onClick: () => {
17533
+ pairing.status === "blocked" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("button", { onClick: () => {
17126
17534
  void actPairing(pairing.id, "approved");
17127
17535
  }, children: "\u91CD\u65B0\u6279\u51C6" })
17128
17536
  ] }, pairing.id)) })
17129
17537
  ] }),
17130
- error && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "dsh-partner-inline-error", children: error })
17538
+ error && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "dsh-partner-inline-error", children: error })
17131
17539
  ] });
17132
17540
  }
17133
17541
  function installStyles() {