@meiyukichan/dsh-sandore 0.1.2-rc.1 → 0.1.2-rc.2

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 (457) hide show
  1. package/lib/client/AddNodeDialog.d.ts +2 -6
  2. package/lib/client/AddNodeDialog.js +6 -5
  3. package/lib/client/ArtifactContentView.d.ts +18 -0
  4. package/lib/client/ArtifactContentView.js +100 -0
  5. package/lib/client/DagEditor.d.ts +67 -1
  6. package/lib/client/DagEditor.js +494 -246
  7. package/lib/client/DefinitionDetail.d.ts +16 -1
  8. package/lib/client/DefinitionDetail.js +38 -10
  9. package/lib/client/DefinitionList.d.ts +7 -1
  10. package/lib/client/DefinitionList.js +5 -5
  11. package/lib/client/DirectoryBrowserDialog.js +5 -5
  12. package/lib/client/DiscussionInput.js +7 -6
  13. package/lib/client/EditorPane.d.ts +12 -1
  14. package/lib/client/EditorPane.js +58 -6
  15. package/lib/client/FlowEditor.d.ts +8 -5
  16. package/lib/client/FlowEditor.js +7 -6
  17. package/lib/client/FlowView.d.ts +93 -0
  18. package/lib/client/FlowView.js +107 -0
  19. package/lib/client/InstanceList.js +6 -6
  20. package/lib/client/LibraryEditModal.d.ts +2 -6
  21. package/lib/client/LibraryEditModal.js +20 -39
  22. package/lib/client/LibraryList.d.ts +13 -7
  23. package/lib/client/LibraryList.js +14 -12
  24. package/lib/client/LibraryPickerModal.d.ts +3 -6
  25. package/lib/client/LibraryPickerModal.js +7 -6
  26. package/lib/client/NewInstanceDialog.js +9 -9
  27. package/lib/client/PreviewPanel.d.ts +9 -1
  28. package/lib/client/PreviewPanel.js +22 -9
  29. package/lib/client/RunView.d.ts +1 -1
  30. package/lib/client/RunView.js +32 -2
  31. package/lib/client/StepChatPanel.d.ts +1 -11
  32. package/lib/client/StepChatPanel.js +55 -65
  33. package/lib/client/TreeNav.js +10 -7
  34. package/lib/client/UnifiedTimeline.js +32 -20
  35. package/lib/client/WorkflowList.d.ts +12 -1
  36. package/lib/client/WorkflowList.js +32 -33
  37. package/lib/client/WorkflowOverlay.js +39 -3
  38. package/lib/client/artifact-content.d.ts +114 -0
  39. package/lib/client/artifact-content.js +104 -0
  40. package/lib/client/better-sidebar-open.d.ts +477 -0
  41. package/lib/client/better-sidebar-open.js +808 -0
  42. package/lib/client/better-sidebar-safe-area.d.ts +112 -0
  43. package/lib/client/better-sidebar-safe-area.js +137 -0
  44. package/lib/client/chat/attachment/MessageImage.js +5 -4
  45. package/lib/client/composer-selects.js +10 -10
  46. package/lib/client/dag-editor-model.d.ts +96 -56
  47. package/lib/client/dag-editor-model.js +190 -200
  48. package/lib/client/definition-flow-open.d.ts +98 -0
  49. package/lib/client/definition-flow-open.js +109 -0
  50. package/lib/client/definition-flow-source.d.ts +68 -0
  51. package/lib/client/definition-flow-source.js +86 -0
  52. package/lib/client/definition-flow-tab.d.ts +107 -0
  53. package/lib/client/definition-flow-tab.js +72 -0
  54. package/lib/client/definition-flow-tool-card.d.ts +51 -0
  55. package/lib/client/definition-flow-tool-card.js +82 -0
  56. package/lib/client/definition-flow-view.d.ts +65 -0
  57. package/lib/client/definition-flow-view.js +77 -0
  58. package/lib/client/flow-layout.d.ts +163 -0
  59. package/lib/client/flow-layout.js +597 -0
  60. package/lib/client/flow-model.d.ts +186 -0
  61. package/lib/client/flow-model.js +211 -0
  62. package/lib/client/flow-render.d.ts +110 -0
  63. package/lib/client/flow-render.js +478 -0
  64. package/lib/client/flow-theme.d.ts +176 -0
  65. package/lib/client/flow-theme.js +124 -0
  66. package/lib/client/index.js +118 -17
  67. package/lib/client/locales/common-dictionary.d.ts +105 -0
  68. package/lib/client/locales/common-dictionary.js +105 -0
  69. package/lib/client/locales/en.d.ts +580 -0
  70. package/lib/client/locales/en.js +643 -0
  71. package/lib/client/locales/index.d.ts +19 -0
  72. package/lib/client/locales/index.js +12 -0
  73. package/lib/client/locales/zh.d.ts +588 -0
  74. package/lib/client/locales/zh.js +670 -0
  75. package/lib/client/locales.d.ts +0 -22
  76. package/lib/client/locales.js +12 -34
  77. package/lib/client/main-agent-input.js +2 -1
  78. package/lib/client/main-agent-workflow-tab.js +1 -1
  79. package/lib/client/orchestration-tool-card.js +41 -14
  80. package/lib/client/orchestration-tool-model.d.ts +107 -17
  81. package/lib/client/orchestration-tool-model.js +165 -23
  82. package/lib/client/orchestration-tool-store.js +3 -3
  83. package/lib/client/orchestration-tool-view.d.ts +5 -2
  84. package/lib/client/orchestration-tool-view.js +13 -7
  85. package/lib/client/panel-model.d.ts +19 -1
  86. package/lib/client/panel-model.js +27 -1
  87. package/lib/client/run-view-model.d.ts +52 -0
  88. package/lib/client/run-view-model.js +95 -0
  89. package/lib/client/sandore-artifact-tab.d.ts +100 -0
  90. package/lib/client/sandore-artifact-tab.js +148 -0
  91. package/lib/client/seat-bridge.js +1 -1
  92. package/lib/client/step-view/ComposerBar.js +3 -2
  93. package/lib/client/step-view/ContextBody.js +2 -2
  94. package/lib/client/step-view/StepRetryRow.js +1 -1
  95. package/lib/client/step-view/tool/ToolCallView.js +7 -4
  96. package/lib/client/step-view/tool/tool-call-model.d.ts +11 -4
  97. package/lib/client/step-view/tool/tool-call-model.js +2 -2
  98. package/lib/client/theme-token-names.d.ts +38 -0
  99. package/lib/client/theme-token-names.js +117 -0
  100. package/lib/client/workflow-face.d.ts +29 -9
  101. package/lib/client/workflow-store.d.ts +24 -2
  102. package/lib/client/workflow-store.js +24 -1
  103. package/lib/client.js +17960 -13215
  104. package/lib/index.js +5469 -2054
  105. package/lib/microflow/concurrency-limiter.d.ts +2 -2
  106. package/lib/microflow/concurrency-limiter.js +2 -2
  107. package/lib/microflow/errors.d.ts +1 -1
  108. package/lib/microflow/file-utils.d.ts +22 -0
  109. package/lib/microflow/finalize-manager.d.ts +10 -10
  110. package/lib/microflow/finalize-manager.js +2 -2
  111. package/lib/microflow/index.d.ts +2 -2
  112. package/lib/microflow/index.js +2 -2
  113. package/lib/microflow/internal.d.ts +1 -1
  114. package/lib/microflow/loop-manager.d.ts +74 -24
  115. package/lib/microflow/loop-manager.js +100 -42
  116. package/lib/microflow/microflow-executor.d.ts +491 -0
  117. package/lib/microflow/microflow-executor.js +1429 -0
  118. package/lib/microflow/rules-resolver.d.ts +5 -5
  119. package/lib/microflow/rules-resolver.js +6 -6
  120. package/lib/microflow/stage-executor.d.ts +22 -20
  121. package/lib/microflow/stage-executor.js +40 -70
  122. package/lib/microflow/step-navigator.d.ts +63 -23
  123. package/lib/microflow/step-navigator.js +125 -52
  124. package/lib/microflow/step-runner.d.ts +9 -9
  125. package/lib/microflow/step-runner.js +7 -7
  126. package/lib/microflow/subagents.d.ts +1 -1
  127. package/lib/typert.remote-client.d.ts +32 -16
  128. package/lib/typert.remote-client.js +125 -46
  129. package/lib/workflow/ask-tool.d.ts +8 -4
  130. package/lib/workflow/ask-tool.js +13 -8
  131. package/lib/workflow/capability-handlers.d.ts +23 -0
  132. package/lib/workflow/capability-handlers.js +68 -0
  133. package/lib/workflow/capability-registry.d.ts +543 -0
  134. package/lib/workflow/capability-registry.js +1046 -0
  135. package/lib/workflow/control-tool.d.ts +11 -39
  136. package/lib/workflow/control-tool.js +20 -89
  137. package/lib/workflow/dag-navigator.d.ts +15 -8
  138. package/lib/workflow/dag-navigator.js +27 -20
  139. package/lib/workflow/definition-io.d.ts +122 -0
  140. package/lib/workflow/definition-io.js +205 -0
  141. package/lib/workflow/definition-lock.d.ts +140 -0
  142. package/lib/workflow/definition-lock.js +393 -0
  143. package/lib/workflow/domain.d.ts +78 -82
  144. package/lib/workflow/domain.js +17 -9
  145. package/lib/workflow/engine-surface.d.ts +5 -5
  146. package/lib/workflow/host-agent.js +1 -1
  147. package/lib/workflow/host-context.d.ts +35 -7
  148. package/lib/workflow/host-context.js +44 -21
  149. package/lib/workflow/host-tools.d.ts +29 -13
  150. package/lib/workflow/host-tools.js +27 -26
  151. package/lib/workflow/instance-order.d.ts +26 -0
  152. package/lib/workflow/instance-order.js +32 -0
  153. package/lib/workflow/instance-output.d.ts +162 -0
  154. package/lib/workflow/instance-output.js +137 -0
  155. package/lib/workflow/lib-sync-actions.d.ts +43 -0
  156. package/lib/workflow/lib-sync-actions.js +217 -0
  157. package/lib/workflow/lib-sync.d.ts +71 -0
  158. package/lib/workflow/lib-sync.js +152 -0
  159. package/lib/workflow/library-views.d.ts +17 -17
  160. package/lib/workflow/library-views.js +18 -21
  161. package/lib/workflow/lifecycle-manager.js +1 -1
  162. package/lib/workflow/list-instances-tool.d.ts +57 -0
  163. package/lib/workflow/list-instances-tool.js +96 -0
  164. package/lib/workflow/manager-tool.d.ts +83 -102
  165. package/lib/workflow/manager-tool.js +534 -399
  166. package/lib/workflow/message-tool.d.ts +10 -36
  167. package/lib/workflow/message-tool.js +21 -82
  168. package/lib/workflow/migration-format.d.ts +340 -0
  169. package/lib/workflow/migration-format.js +429 -0
  170. package/lib/workflow/nested-key.d.ts +72 -0
  171. package/lib/workflow/nested-key.js +344 -0
  172. package/lib/workflow/persistence.d.ts +65 -37
  173. package/lib/workflow/persistence.js +109 -77
  174. package/lib/workflow/plugin.d.ts +7 -3
  175. package/lib/workflow/plugin.js +22 -3
  176. package/lib/workflow/read-instance-file.d.ts +77 -0
  177. package/lib/workflow/read-instance-file.js +166 -0
  178. package/lib/workflow/remote.d.ts +109 -30
  179. package/lib/workflow/remote.js +236 -151
  180. package/lib/workflow/run-tool.d.ts +12 -56
  181. package/lib/workflow/run-tool.js +12 -94
  182. package/lib/workflow/schema.d.ts +529 -303
  183. package/lib/workflow/schema.js +130 -49
  184. package/lib/workflow/seam.d.ts +51 -4
  185. package/lib/workflow/skill-provider.d.ts +173 -0
  186. package/lib/workflow/skill-provider.js +557 -0
  187. package/lib/workflow/sse.js +12 -3
  188. package/lib/workflow/status-tool.d.ts +17 -48
  189. package/lib/workflow/status-tool.js +23 -103
  190. package/lib/workflow/tool-registration.d.ts +39 -0
  191. package/lib/workflow/tool-registration.js +18 -0
  192. package/lib/workflow/tool-support.d.ts +51 -41
  193. package/lib/workflow/tool-support.js +34 -22
  194. package/lib/workflow/typert/typert.remote-client.d.ts +32 -16
  195. package/lib/workflow/typert/typert.remote-client.js +125 -46
  196. package/lib/workflow/types.d.ts +38 -4
  197. package/lib/workflow/types.js +9 -1
  198. package/lib/workflow/visualize-tool.d.ts +49 -0
  199. package/lib/workflow/visualize-tool.js +38 -0
  200. package/lib/workflow/wire.d.ts +164 -25
  201. package/lib/workflow/wire.js +59 -11
  202. package/lib/workflow/workflow-engine.d.ts +24 -15
  203. package/lib/workflow/workflow-engine.js +102 -74
  204. package/lib/workflow/wrapper-tool.d.ts +43 -0
  205. package/lib/workflow/wrapper-tool.js +318 -0
  206. package/lib/workflow/yaml-parser.d.ts +22 -20
  207. package/lib/workflow/yaml-parser.js +163 -217
  208. package/package.json +9 -2
  209. package/packages/client/AddNodeDialog.tsx +9 -14
  210. package/packages/client/ArtifactContentView.tsx +181 -0
  211. package/packages/client/CommandEditor.tsx +1 -1
  212. package/packages/client/DagEditor.module.css +85 -26
  213. package/packages/client/DagEditor.tsx +830 -365
  214. package/packages/client/DefinitionDetail.module.css +69 -8
  215. package/packages/client/DefinitionDetail.tsx +89 -20
  216. package/packages/client/DefinitionList.tsx +32 -10
  217. package/packages/client/DirectoryBrowserDialog.module.css +4 -4
  218. package/packages/client/DirectoryBrowserDialog.tsx +502 -500
  219. package/packages/client/DiscussionInput.tsx +646 -639
  220. package/packages/client/EditorPane.tsx +118 -3
  221. package/packages/client/FlowEditor.tsx +17 -11
  222. package/packages/client/FlowView.tsx +197 -0
  223. package/packages/client/InstanceList.tsx +36 -22
  224. package/packages/client/LibraryEditModal.tsx +25 -44
  225. package/packages/client/LibraryList.tsx +54 -34
  226. package/packages/client/LibraryPickerModal.tsx +12 -14
  227. package/packages/client/NewInstanceDialog.tsx +495 -491
  228. package/packages/client/PreviewPanel.tsx +69 -56
  229. package/packages/client/RunView.module.css +18 -39
  230. package/packages/client/RunView.tsx +53 -16
  231. package/packages/client/StepChatPanel.tsx +77 -110
  232. package/packages/client/TreeNav.tsx +351 -341
  233. package/packages/client/UnifiedTimeline.tsx +131 -79
  234. package/packages/client/WorkflowList.tsx +172 -97
  235. package/packages/client/WorkflowOverlay.module.css +118 -67
  236. package/packages/client/WorkflowOverlay.tsx +179 -141
  237. package/packages/client/WorkflowPanel.module.css +64 -35
  238. package/packages/client/artifact-content-view.spec.ts +231 -0
  239. package/packages/client/artifact-content.module.css +116 -0
  240. package/packages/client/artifact-content.spec.ts +118 -0
  241. package/packages/client/artifact-content.ts +192 -0
  242. package/packages/client/better-sidebar-dependency.spec.ts +112 -0
  243. package/packages/client/better-sidebar-open.spec.ts +899 -0
  244. package/packages/client/better-sidebar-open.ts +1193 -0
  245. package/packages/client/better-sidebar-safe-area.spec.ts +187 -0
  246. package/packages/client/better-sidebar-safe-area.ts +179 -0
  247. package/packages/client/chat/attachment/MessageImage.tsx +139 -136
  248. package/packages/client/composer-selects.module.css +7 -4
  249. package/packages/client/composer-selects.tsx +563 -556
  250. package/packages/client/dag-editor-model.spec.ts +137 -145
  251. package/packages/client/dag-editor-model.ts +594 -595
  252. package/packages/client/definition-flow-open.spec.ts +294 -0
  253. package/packages/client/definition-flow-open.ts +143 -0
  254. package/packages/client/definition-flow-source.spec.ts +81 -0
  255. package/packages/client/definition-flow-source.ts +102 -0
  256. package/packages/client/definition-flow-tab.module.css +33 -0
  257. package/packages/client/definition-flow-tab.spec.ts +279 -0
  258. package/packages/client/definition-flow-tab.tsx +180 -0
  259. package/packages/client/definition-flow-tool-card.module.css +94 -0
  260. package/packages/client/definition-flow-tool-card.spec.ts +258 -0
  261. package/packages/client/definition-flow-tool-card.tsx +152 -0
  262. package/packages/client/definition-flow-view.tsx +123 -0
  263. package/packages/client/flow-layout.spec.ts +505 -0
  264. package/packages/client/flow-layout.ts +728 -0
  265. package/packages/client/flow-model.spec.ts +340 -0
  266. package/packages/client/flow-model.ts +335 -0
  267. package/packages/client/flow-render.spec.ts +315 -0
  268. package/packages/client/flow-render.ts +512 -0
  269. package/packages/client/flow-theme.ts +241 -0
  270. package/packages/client/flow-view.module.css +62 -0
  271. package/packages/client/index.ts +141 -20
  272. package/packages/client/input.module.css +51 -49
  273. package/packages/client/is-conditional-check.spec.ts +10 -6
  274. package/packages/client/lib-sync-ui.spec.ts +103 -0
  275. package/packages/client/list-rows.spec.ts +255 -0
  276. package/packages/client/locales/common-dictionary.ts +107 -0
  277. package/packages/client/locales/common-reuse.spec.ts +155 -0
  278. package/packages/client/locales/en.ts +646 -0
  279. package/packages/client/locales/index.ts +22 -0
  280. package/packages/client/locales/zh.ts +674 -0
  281. package/packages/client/locales.spec.ts +185 -10
  282. package/packages/client/main-agent-composer.spec.ts +8 -3
  283. package/packages/client/main-agent-input.spec.ts +3 -2
  284. package/packages/client/main-agent-input.tsx +208 -204
  285. package/packages/client/main-agent-workflow-tab.module.css +21 -1
  286. package/packages/client/main-agent-workflow-tab.spec.ts +31 -2
  287. package/packages/client/main-agent-workflow-tab.tsx +1 -1
  288. package/packages/client/microflow-dag-mode.spec.ts +562 -0
  289. package/packages/client/microflow-description.spec.ts +269 -0
  290. package/packages/client/node-builtin-isolation.spec.ts +130 -0
  291. package/packages/client/orchestration-tool-card.module.css +123 -43
  292. package/packages/client/orchestration-tool-card.spec.ts +268 -12
  293. package/packages/client/orchestration-tool-card.tsx +240 -192
  294. package/packages/client/orchestration-tool-model.spec.ts +180 -26
  295. package/packages/client/orchestration-tool-model.ts +193 -25
  296. package/packages/client/orchestration-tool-store.ts +3 -3
  297. package/packages/client/orchestration-tool-view.spec.ts +147 -30
  298. package/packages/client/orchestration-tool-view.tsx +18 -6
  299. package/packages/client/panel-model.spec.ts +87 -1
  300. package/packages/client/panel-model.ts +26 -1
  301. package/packages/client/preview.module.css +4 -4
  302. package/packages/client/reactflow-theme.css +61 -34
  303. package/packages/client/readonly-lock-ui.spec.ts +253 -0
  304. package/packages/client/run-view-host-filter.spec.ts +231 -2
  305. package/packages/client/run-view-model.ts +123 -0
  306. package/packages/client/sandore-artifact-tab.module.css +26 -0
  307. package/packages/client/sandore-artifact-tab.spec.ts +282 -0
  308. package/packages/client/sandore-artifact-tab.tsx +186 -0
  309. package/packages/client/seat-bridge.ts +1 -1
  310. package/packages/client/step-chat-composer-wiring.spec.ts +3 -2
  311. package/packages/client/step-chat-panel-paging.spec.ts +10 -5
  312. package/packages/client/step-chat-panel.module.css +57 -8
  313. package/packages/client/step-chat-retry-placeholder.spec.ts +3 -2
  314. package/packages/client/step-chat-retry-wiring.spec.ts +3 -2
  315. package/packages/client/step-mention-source.spec.ts +3 -2
  316. package/packages/client/step-mention-source.ts +1 -1
  317. package/packages/client/step-view/ComposerBar.tsx +552 -547
  318. package/packages/client/step-view/ContextBody.tsx +10 -7
  319. package/packages/client/step-view/StepRetryRow.tsx +1 -1
  320. package/packages/client/step-view/composer-bar-render.spec.ts +3 -2
  321. package/packages/client/step-view/composer-bar.module.css +3 -2
  322. package/packages/client/step-view/composer-trigger-menu-render.spec.ts +3 -2
  323. package/packages/client/step-view/step-retry-row.spec.ts +3 -2
  324. package/packages/client/step-view/step-view-render.spec.ts +3 -2
  325. package/packages/client/step-view/token-format.spec.ts +3 -2
  326. package/packages/client/step-view/tool/ToolCallView.tsx +9 -3
  327. package/packages/client/step-view/tool/tool-call-model.ts +11 -4
  328. package/packages/client/step-view/tool/tool-call-view.spec.ts +167 -0
  329. package/packages/client/step-view/turn-navigator.spec.ts +3 -2
  330. package/packages/client/step-view/user-message-row.spec.ts +3 -2
  331. package/packages/client/sublist-tabs.spec.ts +220 -0
  332. package/packages/client/theme-token-names.ts +119 -0
  333. package/packages/client/theme-tokens.spec.ts +283 -0
  334. package/packages/client/timeline-span.spec.ts +125 -0
  335. package/packages/client/timeline.module.css +99 -64
  336. package/packages/client/tooltip-usage.spec.ts +228 -0
  337. package/packages/client/tree-nav.module.css +2 -2
  338. package/packages/client/unified-timeline-remount.spec.ts +3 -2
  339. package/packages/client/workflow-face.ts +35 -10
  340. package/packages/client/workflow-list-mode-tabs.spec.ts +321 -0
  341. package/packages/client/workflow-list-sections.spec.ts +109 -0
  342. package/packages/client/workflow-seat.css +30 -5
  343. package/packages/client/workflow-seat.spec.ts +29 -0
  344. package/packages/client/workflow-store.ts +44 -3
  345. package/packages/microflow/concurrency-limiter.ts +2 -2
  346. package/packages/microflow/definition-intrinsic-steps.spec.ts +144 -0
  347. package/packages/microflow/errors.ts +77 -67
  348. package/packages/microflow/file-utils.ts +23 -0
  349. package/packages/microflow/finalize-manager.spec.ts +1 -1
  350. package/packages/microflow/finalize-manager.ts +13 -13
  351. package/packages/microflow/index.ts +2 -2
  352. package/packages/microflow/internal.ts +1 -1
  353. package/packages/microflow/loop-manager.ts +109 -46
  354. package/packages/microflow/{stage-executor.spec.ts → microflow-executor.spec.ts} +481 -289
  355. package/packages/microflow/{stage-executor.ts → microflow-executor.ts} +285 -177
  356. package/packages/microflow/rules-resolver.ts +9 -9
  357. package/packages/microflow/step-navigator.spec.ts +88 -78
  358. package/packages/microflow/step-navigator.ts +150 -63
  359. package/packages/microflow/step-runner.spec.ts +4 -4
  360. package/packages/microflow/step-runner.ts +16 -16
  361. package/packages/microflow/subagents.ts +1 -1
  362. package/packages/resources/README.md +148 -0
  363. package/packages/resources/skills/sandore-workflow-authoring/SKILL.md +249 -0
  364. package/packages/resources/skills/sandore-workflow-authoring/reference/authoring-microflow.md +273 -0
  365. package/packages/resources/skills/sandore-workflow-authoring/reference/authoring-step.md +324 -0
  366. package/packages/resources/skills/sandore-workflow-authoring/reference/authoring-workflow.md +274 -0
  367. package/packages/resources/skills/sandore-workflow-authoring/reference/index.md +54 -0
  368. package/packages/resources/skills/sandore-workflow-authoring/reference/template-microflow-entry.yaml +138 -0
  369. package/packages/resources/skills/sandore-workflow-authoring/reference/template-workflow.yaml +296 -0
  370. package/packages/resources/skills/sandore-workflow-authoring/reference/workflow-yaml-spec.md +606 -0
  371. package/packages/tests/fixtures/legacy-test-workflow.yaml +135 -0
  372. package/packages/tests/fixtures/test-workflow.yaml +83 -85
  373. package/packages/tests/fixtures/workflow-authoring-template.ts +303 -0
  374. package/packages/tests/flow-fixtures.ts +106 -0
  375. package/packages/tests/mock-llm-directive.spec.ts +56 -13
  376. package/packages/tests/theme-token-allowlist.ts +79 -0
  377. package/packages/workflow/ask-tool.ts +18 -9
  378. package/packages/workflow/capability-handlers.ts +90 -0
  379. package/packages/workflow/capability-registry.spec.ts +1045 -0
  380. package/packages/workflow/capability-registry.ts +1333 -0
  381. package/packages/workflow/control-tool.ts +31 -86
  382. package/packages/workflow/dag-navigator.spec.ts +52 -41
  383. package/packages/workflow/dag-navigator.ts +34 -24
  384. package/packages/workflow/def-lib-tool-surface-lock.spec.ts +443 -0
  385. package/packages/workflow/definition-io.spec.ts +288 -0
  386. package/packages/workflow/definition-io.ts +268 -0
  387. package/packages/workflow/definition-lock.spec.ts +377 -0
  388. package/packages/workflow/definition-lock.ts +441 -0
  389. package/packages/workflow/domain.ts +16 -10
  390. package/packages/workflow/engine-surface.ts +5 -5
  391. package/packages/workflow/errors.ts +1 -0
  392. package/packages/workflow/event-rename-lock.spec.ts +131 -0
  393. package/packages/workflow/host-agent.spec.ts +1 -1
  394. package/packages/workflow/host-agent.ts +1 -1
  395. package/packages/workflow/host-context.spec.ts +137 -93
  396. package/packages/workflow/host-context.ts +174 -123
  397. package/packages/workflow/host-tools.spec.ts +963 -805
  398. package/packages/workflow/host-tools.ts +44 -36
  399. package/packages/workflow/instance-order.ts +34 -0
  400. package/packages/workflow/instance-output.spec.ts +169 -0
  401. package/packages/workflow/instance-output.ts +187 -0
  402. package/packages/workflow/lib-sync-actions.ts +293 -0
  403. package/packages/workflow/lib-sync-rpc.spec.ts +474 -0
  404. package/packages/workflow/lib-sync.spec.ts +141 -0
  405. package/packages/workflow/lib-sync.ts +215 -0
  406. package/packages/workflow/library-sync-write.spec.ts +175 -0
  407. package/packages/workflow/library-views.spec.ts +54 -48
  408. package/packages/workflow/library-views.ts +25 -28
  409. package/packages/workflow/lifecycle-manager.spec.ts +87 -36
  410. package/packages/workflow/lifecycle-manager.ts +1 -1
  411. package/packages/workflow/list-instances-tool.spec.ts +197 -0
  412. package/packages/workflow/list-instances-tool.ts +130 -0
  413. package/packages/workflow/manager-tool.spec.ts +1309 -347
  414. package/packages/workflow/manager-tool.ts +636 -434
  415. package/packages/workflow/message-tool.ts +32 -79
  416. package/packages/workflow/migration-format.spec.ts +365 -0
  417. package/packages/workflow/migration-format.ts +544 -0
  418. package/packages/workflow/nested-key.spec.ts +336 -0
  419. package/packages/workflow/nested-key.ts +393 -0
  420. package/packages/workflow/persistence.spec.ts +191 -99
  421. package/packages/workflow/persistence.ts +259 -203
  422. package/packages/workflow/plugin.ts +21 -3
  423. package/packages/workflow/read-instance-file.spec.ts +217 -0
  424. package/packages/workflow/read-instance-file.ts +182 -0
  425. package/packages/workflow/remote.spec.ts +667 -214
  426. package/packages/workflow/remote.ts +268 -160
  427. package/packages/workflow/run-tool.ts +21 -85
  428. package/packages/workflow/schema-refactor-lock.spec.ts +394 -0
  429. package/packages/workflow/schema.spec.ts +130 -59
  430. package/packages/workflow/schema.ts +142 -56
  431. package/packages/workflow/seam.ts +45 -4
  432. package/packages/workflow/skill-provider.spec.ts +481 -0
  433. package/packages/workflow/skill-provider.ts +698 -0
  434. package/packages/workflow/skill-resource-lock.spec.ts +344 -0
  435. package/packages/workflow/sse.ts +12 -3
  436. package/packages/workflow/status-tool.ts +40 -101
  437. package/packages/workflow/step-settled-lock.spec.ts +75 -0
  438. package/packages/workflow/tool-registration.ts +48 -0
  439. package/packages/workflow/tool-support.spec.ts +7 -7
  440. package/packages/workflow/tool-support.ts +66 -34
  441. package/packages/workflow/tool-surface-artifact.spec.ts +176 -0
  442. package/packages/workflow/typert/typert.remote-client.d.ts +32 -16
  443. package/packages/workflow/typert/typert.remote-client.js +125 -46
  444. package/packages/workflow/types.ts +53 -7
  445. package/packages/workflow/visualize-tool.spec.ts +396 -0
  446. package/packages/workflow/visualize-tool.ts +94 -0
  447. package/packages/workflow/wire.ts +174 -22
  448. package/packages/workflow/workflow-engine-e2e.spec.ts +25 -23
  449. package/packages/workflow/workflow-engine-real-e2e.spec.ts +15 -13
  450. package/packages/workflow/workflow-engine.spec.ts +633 -642
  451. package/packages/workflow/workflow-engine.ts +109 -81
  452. package/packages/workflow/wrapper-prose-lock.spec.ts +148 -0
  453. package/packages/workflow/wrapper-tool.spec.ts +800 -0
  454. package/packages/workflow/wrapper-tool.ts +409 -0
  455. package/packages/workflow/yaml-parser.spec.ts +700 -590
  456. package/packages/workflow/yaml-parser.ts +202 -218
  457. package/packages/client/locales.ts +0 -1280
@@ -1,18 +1,14 @@
1
1
  import type { TranslateNS } from '@deepseek-ai/dsh-client-ui-slots';
2
- /** 目标节点种类。 */
3
- export type AddNodeKind = 'stage' | 'step';
4
2
  /** 新建/绑定的选择结果。 */
5
3
  export type AddNodeChoice = 'blank' | 'library';
6
4
  /** AddNodeDialog 接收的 props。 */
7
5
  export interface AddNodeDialogProps {
8
6
  /** 类型化翻译函数(sandore 命名空间)。 */
9
7
  t: TranslateNS<'sandore'>;
10
- /** 目标节点种类。 */
11
- kind: AddNodeKind;
12
8
  /** 关闭弹窗。 */
13
9
  onClose(): void;
14
10
  /** 确认(blank = 新建空白,library = 从库绑定)。 */
15
11
  onConfirm(choice: AddNodeChoice): void;
16
12
  }
17
- /** 渲染添加节点弹窗(新建空白 / 从库绑定 二选一)。 */
18
- export declare function AddNodeDialog({ t, kind, onClose, onConfirm }: AddNodeDialogProps): import("react").JSX.Element;
13
+ /** 渲染「添加 Stage」弹窗(新建空白 / 从库绑定 二选一)。 */
14
+ export declare function AddNodeDialog({ t, onClose, onConfirm }: AddNodeDialogProps): import("react").JSX.Element;
@@ -1,16 +1,17 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /**
3
- * AddNodeDialog:「+ 添加 Stage / + 添加 Step」弹窗(三级分离 plan §6.4)。
3
+ * AddNodeDialog:「+ 添加 Stage」弹窗(plan §6.4)。
4
4
  *
5
5
  * 两个来源选项:新建空白(现状行为)/ 从库绑定(打开 LibraryPickerModal 选择)。
6
- * Step 新建空白沿用现状默认(Shell 命令,类型在详情面板切换),不做重复的类型选择。
6
+ * Step 已无来源选择(Step 库并入 Microflow 库),故「+ 添加 Step」直接新建空白,
7
+ * 本弹窗只剩 Stage 一种目标。
7
8
  * @module @deepseek-ai/dsh-client-ui-sandore/src/client/AddNodeDialog
8
9
  */
9
10
  import { useState } from 'react';
10
11
  import { Button, Modal } from '@deepseek-ai/dsh-client-ui-primitives';
11
12
  import css from './DagEditor.module.css';
12
- /** 渲染添加节点弹窗(新建空白 / 从库绑定 二选一)。 */
13
- export function AddNodeDialog({ t, kind, onClose, onConfirm }) {
13
+ /** 渲染「添加 Stage」弹窗(新建空白 / 从库绑定 二选一)。 */
14
+ export function AddNodeDialog({ t, onClose, onConfirm }) {
14
15
  const [choice, setChoice] = useState('blank');
15
- return (_jsx(Modal, { open: true, onClose: onClose, title: kind === 'stage' ? t('add.stage.title') : t('add.step.title'), closeLabel: t('add.create.cancel'), footer: (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", size: "sm", onClick: onClose, children: t('add.create.cancel') }), _jsx(Button, { variant: "primary", size: "sm", onClick: () => { onConfirm(choice); }, children: t('add.create.submit') })] })), children: _jsxs("div", { className: css.addNodeDialog, children: [_jsxs("label", { className: css.addNodeOption, children: [_jsx("input", { type: "radio", name: "sandore-add-node-choice", checked: choice === 'blank', onChange: () => { setChoice('blank'); } }), _jsxs("span", { className: css.addNodeOptionBody, children: [_jsx("span", { className: css.addNodeOptionTitle, children: t('add.create.blank') }), kind === 'step' && _jsx("span", { className: css.addNodeOptionHint, children: t('add.create.stepBlank.hint') })] })] }), _jsxs("label", { className: css.addNodeOption, children: [_jsx("input", { type: "radio", name: "sandore-add-node-choice", checked: choice === 'library', onChange: () => { setChoice('library'); } }), _jsx("span", { className: css.addNodeOptionBody, children: _jsx("span", { className: css.addNodeOptionTitle, children: t('add.create.fromLibrary') }) })] })] }) }));
16
+ return (_jsx(Modal, { open: true, onClose: onClose, title: t('add.microflow.title'), closeLabel: t('cancel'), footer: (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", size: "sm", onClick: onClose, children: t('cancel') }), _jsx(Button, { variant: "primary", size: "sm", onClick: () => { onConfirm(choice); }, children: t('ok') })] })), children: _jsxs("div", { className: css.addNodeDialog, children: [_jsxs("label", { className: css.addNodeOption, children: [_jsx("input", { type: "radio", name: "sandore-add-node-choice", checked: choice === 'blank', onChange: () => { setChoice('blank'); } }), _jsx("span", { className: css.addNodeOptionBody, children: _jsx("span", { className: css.addNodeOptionTitle, children: t('add.create.blank') }) })] }), _jsxs("label", { className: css.addNodeOption, children: [_jsx("input", { type: "radio", name: "sandore-add-node-choice", checked: choice === 'library', onChange: () => { setChoice('library'); } }), _jsx("span", { className: css.addNodeOptionBody, children: _jsx("span", { className: css.addNodeOptionTitle, children: t('add.create.fromLibrary') }) })] })] }) }));
16
17
  }
@@ -0,0 +1,18 @@
1
+ import type { TranslateNS } from '@deepseek-ai/dsh-client-ui-slots';
2
+ import { type ArtifactContent } from './artifact-content.ts';
3
+ /** ArtifactContentView 接收的 props。 */
4
+ export interface ArtifactContentViewProps {
5
+ /** 类型化翻译函数(sandore 命名空间)。 */
6
+ readonly t: TranslateNS<'sandore'>;
7
+ /** 视图模型(`artifactContentOf` 的产物)。 */
8
+ readonly content: ArtifactContent;
9
+ /**
10
+ * 渲染风格。
11
+ *
12
+ * `app`(缺省)用于应用内展示;`editor` 用于 C6 自注册 tab —— 它必须与 better-sidebar 自己的
13
+ * 编辑器 tab 的观感对齐(路径头 + 等宽只读原文),**不允许**把 `.md` 渲染成 Markdown 卡片。
14
+ */
15
+ readonly variant?: 'app' | 'editor' | undefined;
16
+ }
17
+ /** 渲染一份展示内容(三处调用点共用;`variant='editor'` 时改用编辑器观感)。 */
18
+ export declare function ArtifactContentView({ t, content, variant }: ArtifactContentViewProps): import("react").JSX.Element;
@@ -0,0 +1,100 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * ArtifactContentView:**应用内展示「产物 / Agent 输出」的唯一渲染组件**。
4
+ *
5
+ * ## 为什么只有一个组件
6
+ * 用户点击产物 / Agent 输出的地方有**三处**(RunView 右栏预览、工具行内嵌导航卡、step 面板
7
+ * 里的工具行 fileLink),而"打开通道不可见时"的兜底展示必须**三处一致**:同一个组件、
8
+ * 同一份文案(`locales/{zh,en}.ts` 的 `artifact.*`)、同一套锚点。否则就会出现
9
+ * "在这个位置点能看到内容、在那个位置点了没反应"的老问题。
10
+ *
11
+ * ## 四种呈现(由 `content.state` 决定,`artifact-content.ts` 是唯一判据)
12
+ * | state | 渲染 |
13
+ * |---|---|
14
+ * | `content` | 正文(`.md` 与 Agent 输出走 `MarkdownText`,其余等宽 `<pre>`,可横向滚动 + 折行) |
15
+ * | `notice` | 中性提示行(「该执行段没有输出文本」/「二进制文件(X),无法在此预览」) |
16
+ * | `error` | **`role="alert"` 的原因行**(带文件路径)+ 原始 message(有则显示)——L3 的落点 |
17
+ *
18
+ * ## 两种风格(`variant`,P14)
19
+ * - `app`(缺省)= 应用内展示(RunView 右栏 / 工具卡内联 / step 面板内联):`.md` 走 Markdown;
20
+ * - `editor` = **向 better-sidebar 的编辑器 tab 对齐**(C6 自注册 tab 专用):**永不渲染 Markdown**,
21
+ * 正文一律**等宽只读原文**(`white-space: pre` + 横向滚动),并以**路径头**取代 emoji 元信息行。
22
+ * 真机报障原文:「点击产物文件后……样式完全不对 ……里面是渲染过的 markdown」,而用户要的是
23
+ * 它那条 `editor` tab(路径输入 + CodeMirror 原文)。两者只能共用一个组件(同一份取数、同一套
24
+ * 锚点),差别只允许落在**渲染方式**上。
25
+ *
26
+ * ## 锚点(真机 / e2e 断言用)
27
+ * 根 `data-sandore-artifact-content`;状态与原因码 `data-artifact-state` / `data-artifact-reason`
28
+ * (e2e 用它区分"显示了内容"与"显示了原因");路径行 `data-artifact-path`;正文
29
+ * `data-artifact-text`;原因行 `data-artifact-notice`;截断提示 `data-artifact-truncated`;
30
+ * 风格 `data-artifact-variant`;编辑器风格的头行 `data-artifact-editor-head`。
31
+ * @module @deepseek-ai/dsh-client-ui-sandore/src/client/ArtifactContentView
32
+ */
33
+ import { MarkdownText, Tooltip } from '@deepseek-ai/dsh-client-ui-primitives';
34
+ import { formatBytesOf } from "./artifact-content.js";
35
+ import { markdownLabels } from "./chat-utils/markdown-labels.js";
36
+ import css from './artifact-content.module.css';
37
+ /**
38
+ * 原因码 → 文案。
39
+ *
40
+ * 为什么用 `switch` 而不是把文案塞进视图模型:`t()` 的键是**字面量联合**(每个键的参数
41
+ * 形状由字典决定),动态键会丢掉这层类型检查;纯函数只给**原因码**(可单测),
42
+ * 文案的映射留在组件里并被 `noFallthroughCasesInSwitch` + 穷尽性检查看住。
43
+ * @param content - 视图模型。
44
+ * @param t - 翻译函数。
45
+ * @returns 提示行文案;`undefined` = 这一态不需要提示行。
46
+ */
47
+ function noticeTextOf(content, t) {
48
+ /** 路径兜底:没有 path 时用展示名(提示行必须能指认"是哪个东西出问题了")。 */
49
+ const path = content.path ?? content.name;
50
+ switch (content.reason) {
51
+ case 'empty-text':
52
+ return t('artifact.notice.emptyText');
53
+ case 'binary':
54
+ return content.size === undefined
55
+ ? t('artifact.notice.binaryNoSize')
56
+ : t('artifact.notice.binary', { size: formatBytesOf(content.size) });
57
+ case 'missing':
58
+ return t('artifact.error.missing', { path });
59
+ case 'directory':
60
+ return t('artifact.error.directory', { path });
61
+ case 'denied':
62
+ return t('artifact.error.denied', { path });
63
+ case 'empty-path':
64
+ return t('artifact.error.emptyPath');
65
+ case 'no-cwd':
66
+ return t('artifact.error.noCwd');
67
+ case 'write-failed':
68
+ return t('artifact.error.writeFailed', { message: content.message ?? '' });
69
+ case 'read-failed':
70
+ return t('artifact.error.readFailed', { message: content.message ?? '', path });
71
+ case 'open-failed':
72
+ return t('artifact.error.openFailed', { message: content.message ?? '', path });
73
+ case 'no-sidebar-session':
74
+ // better-sidebar 在场但**还没有活跃会话** ⇒ `openTab` 只会静默 return(没有可落地的面板)。
75
+ // 这条文案必须能指认"为什么看不到",否则它就退化成"点了没反应"。
76
+ return t('artifact.error.noSidebarSession', { path });
77
+ case 'no-channel':
78
+ case 'outside-workspace':
79
+ case 'sandore-tab':
80
+ // 这三个只在"有正文"时才是正常路径(那时 state='content',本函数的结果不被使用);
81
+ // 落到这里说明**既没打开也没读到**(如内嵌读取通道未装配、自注册 tab 也没取到内容)
82
+ // ⇒ 必须给出可见原因。
83
+ return t('artifact.error.noChannel', { path });
84
+ }
85
+ }
86
+ /** 渲染一份展示内容(三处调用点共用;`variant='editor'` 时改用编辑器观感)。 */
87
+ export function ArtifactContentView({ t, content, variant = 'app' }) {
88
+ const notice = content.state === 'content' ? undefined : noticeTextOf(content, t);
89
+ const alert = content.state === 'error';
90
+ /*
91
+ * `editor` 风格 = **只读原文**(用户点名的观感):正文一律走等宽 `<pre>`,**绝不**走 Markdown。
92
+ * 判据只改这里的这一处(`artifact-content.ts` 的 `body` 仍是"这是什么文件"的唯一判据,
93
+ * 应用内展示继续按它分流),锚点与提示行逻辑两边共用。
94
+ */
95
+ const editor = variant === 'editor';
96
+ return (_jsxs("div", { className: css.root, "data-sandore-artifact-content": true, "data-artifact-variant": variant, "data-artifact-kind": content.kind, "data-artifact-state": content.state, "data-artifact-reason": content.reason, children: [editor ? (_jsxs("div", { className: css.editorHead, "data-artifact-editor-head": true, children: [_jsx(Tooltip, { label: content.path ?? content.name, side: "bottom", delayMs: 500, children: _jsx("span", { className: css.editorPath, "data-artifact-path": true, children: content.path ?? content.name }) }), content.size !== undefined && (_jsx("span", { className: css.editorSize, "data-artifact-size": true, children: formatBytesOf(content.size) }))] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: css.meta, "data-artifact-meta": true, children: [_jsxs("span", { children: [content.kind === 'result' ? '📝' : '📄', " ", content.kind === 'result' ? t('run.result') : t('run.artifact')] }), content.size !== undefined && (_jsx("span", { "data-artifact-size": true, children: formatBytesOf(content.size) }))] }), content.path !== undefined && (_jsx(Tooltip, { label: content.path, side: "bottom", delayMs: 500, children: _jsx("div", { className: css.path, "data-artifact-path": true, children: content.path }) }))] })), notice !== undefined && (_jsx("p", { className: alert ? css.error : css.notice, ...(alert ? { role: 'alert' } : {}), "data-artifact-notice": true, children: notice })), content.truncated === true && content.text !== undefined && (_jsx("p", { className: css.notice, "data-artifact-truncated": true, children: t('artifact.notice.truncated', {
97
+ size: formatBytesOf(content.limit ?? content.text.length),
98
+ total: formatBytesOf(content.size ?? content.text.length),
99
+ }) })), content.body === 'markdown' && !editor && content.text !== undefined && (_jsx("div", { className: css.text, "data-artifact-text": true, children: _jsx(MarkdownText, { text: content.text, labels: markdownLabels(t) }) })), (editor || content.body === 'text') && content.text !== undefined && (_jsx("pre", { className: editor ? css.editorPre : css.pre, "data-artifact-text": true, children: content.text }))] }));
100
+ }
@@ -1,8 +1,33 @@
1
1
  import '@xyflow/react/dist/style.css';
2
2
  import './reactflow-theme.css';
3
3
  import type { TranslateNS } from '@deepseek-ai/dsh-client-ui-slots';
4
+ import type { MicroflowDefinition, MicroflowRecord } from '@meiyukichan/dsh-sandore/schema';
4
5
  import { type SaveDefinition } from './sandore-save.ts';
5
6
  import type { WorkflowOverlayFace } from './workflow-face.ts';
7
+ /**
8
+ * 「库条目模式」的 props(第 6 条:点微流程行 → 右侧渲染**子 DAG**,不再弹 YAML 弹窗)。
9
+ *
10
+ * 复用同一个 `DagEditor`/`DagCanvas` 切一个模式(方案 A),**否决**抽两套渲染:
11
+ * `DagCanvas`、`StepEditor`、`MicroflowDescriptionField`、`dagreLayout`、增删节点/连线、
12
+ * YAML 预览、Toast、Ctrl+S 全部复用。数据面**零新增 RPC**:
13
+ * `listMicroflows` → `getMicroflow(id)` → `upsertMicroflow(serializeMicroflowYaml(record))`。
14
+ */
15
+ export interface DagEditorLibraryEntryProps {
16
+ /** 库条目 id(≡ microflow id,不变量 I7:`sourceLib.id === microflow.id`)。 */
17
+ readonly id: string;
18
+ /** 已拉取的库条目记录(含 `steps`)。 */
19
+ readonly record: MicroflowRecord;
20
+ /**
21
+ * 保存**这一条库条目**:实现方必须走 `face.upsertMicroflow(serializeMicroflowYaml(record))`。
22
+ *
23
+ * ⚠️ 这是「不把库条目写坏成工作流定义」三重防护的第 2 重:库模式**绝不**复用 `props.save`
24
+ * (`SaveDefinition` 的第一站是 `createDefinition`/`updateYaml`,会写 `definitions` 表)。
25
+ * 独立 prop ⇒ 想误接也得先**显式**把它接到工作流保存通道上,而那正是单测抛错桩要抓的。
26
+ */
27
+ save(record: MicroflowRecord): Promise<void>;
28
+ /** 次级入口:打开「编辑 YAML」弹窗(`LibraryEditModal` 的新触发点之一)。 */
29
+ onEditYaml(): void;
30
+ }
6
31
  /** DagEditor 接收的最小业务 props:初始定义 + 保存回调 + face + locale。 */
7
32
  export interface DagEditorProps {
8
33
  /** 类型化的翻译函数(sandore 命名空间)。 */
@@ -17,6 +42,47 @@ export interface DagEditorProps {
17
42
  onSaved?: (id: string) => void;
18
43
  /** 业务 face(「▶ 测试运行」复用 NewInstanceDialog 选工作目录后启动实例,无 job 概念)。 */
19
44
  face: WorkflowOverlayFace;
45
+ /**
46
+ * **库条目模式**(第 6 条):给定时本编辑器渲染**一条库条目**的子 DAG,而不是工作流 DAG。
47
+ * 省略 = 工作流模式(逐值不变)。
48
+ */
49
+ libraryEntry?: DagEditorLibraryEntryProps | undefined;
50
+ /**
51
+ * 该定义是否**只读**(overlay 拉取的只读集合命中它;新建未保存时恒 false)。
52
+ *
53
+ * 只读 = 模型不可编辑 **且** UI 不可编辑(§5.8):这里让**保存按钮 `disabled`**,
54
+ * 详情面板出现开关与一行说明。**不做全表单只读**(成本高、且会挡住「复制内容到新建」的
55
+ * 正常用法)——画布与字段仍可编辑,保存会被 Host 以 `READONLY` 拒绝并把原因原样显示
56
+ * (Ctrl+S 走的就是这条:它不经按钮的 `disabled`,正好是「保存被拒并显示原因」)。
57
+ */
58
+ readonly?: boolean | undefined;
59
+ /**
60
+ * 只读开关写入(按 id 写入,成功后就地刷新宿主集合;失败原样抛出由面板显示原因)。
61
+ * 缺省 = 开关不可用(渲染为 disabled)——新建未保存的定义没有 id,也走这一支。
62
+ */
63
+ setReadonly?: ((id: string, readonly: boolean) => Promise<void>) | undefined;
20
64
  }
65
+ /**
66
+ * microflow 详情里的**可选描述**输入(紧接名称行 / {@link LibSyncBar} 之后)。
67
+ *
68
+ * ## 为什么是 textarea 而不是单行 input
69
+ * 描述是"给人看的一段话",与 step 的 promptText 同属大段文本 ⇒ 复用同一个
70
+ * `ImeSafeTextarea`(composition 守卫与 prompt 完全同一套,中文输入不会被打断)。
71
+ *
72
+ * ## 空值语义(用户要求的不变量,落点在纯函数里)
73
+ * 清空 ⇒ 走 {@link withMicroflowDescription} **移除 `description` 键**(不写空串)——
74
+ * 这样"本来没有描述的旧 yaml 打开-保存"不会凭空多出一个 `description: ''`。
75
+ *
76
+ * ## 为什么下面挂一句说明
77
+ * 描述是**定义侧内容**(`lib-sync.ts` 的 `microflowContent` 参与内容哈希)⇒ 改了它再保存,
78
+ * 六态徽标会从「已同步」变成「本地领先」(保存路径随后按既有语义自动回写库条目)。
79
+ * 这是**预期行为**,不写一句说明会被当成 bug 报上来。
80
+ */
81
+ export declare function MicroflowDescriptionField({ microflow, onChange, t }: {
82
+ readonly microflow: MicroflowDefinition;
83
+ /** 提交变更后的整份 microflow 定义(宿主按 id 就地替换)。 */
84
+ readonly onChange: (next: MicroflowDefinition) => void;
85
+ readonly t: TranslateNS<'sandore'>;
86
+ }): import("react").JSX.Element;
21
87
  /** 渲染 DagEditor(两层 DAG 画布 + 编辑侧栏 + YAML 预览)。 */
22
- export declare function DagEditor({ t, initialYaml, initialId, save, onSaved, face }: DagEditorProps): import("react").JSX.Element;
88
+ export declare function DagEditor({ t, initialYaml, initialId, save, onSaved, face, libraryEntry, readonly, setReadonly }: DagEditorProps): import("react").JSX.Element;