@deepseek-harness-tui/dsh-tui 0.7.3 → 0.8.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 (371) hide show
  1. package/README.md +15 -7
  2. package/bin/dsh-tui.js +19 -3
  3. package/cordis.patch.yml +43 -11
  4. package/cordis.yml +20 -1
  5. package/ecosystem-spec/registry/contracts/decision-events-v1alpha1.json +13 -0
  6. package/ecosystem-spec/registry/host-descriptor.tui.example.json +56 -0
  7. package/ecosystem-spec/registry/permissions-0.1.json +13 -0
  8. package/ecosystem-spec/registry/registry-0.15.json +57 -0
  9. package/ecosystem-spec/schemas/conformance-claim.schema.json +15 -0
  10. package/ecosystem-spec/schemas/effect-ledger-record.schema.json +16 -0
  11. package/ecosystem-spec/schemas/host-descriptor.schema.json +26 -0
  12. package/lib/types/cc/figures.d.ts +4 -0
  13. package/lib/types/cc/figures.d.ts.map +1 -1
  14. package/lib/types/cc/figures.js +4 -0
  15. package/lib/types/commands.d.ts.map +1 -1
  16. package/lib/types/commands.js +4 -1
  17. package/lib/types/components/ExtensionDialog.d.ts +40 -0
  18. package/lib/types/components/ExtensionDialog.d.ts.map +1 -0
  19. package/lib/types/components/ExtensionDialog.js +210 -0
  20. package/lib/types/components/HelpMenu.js +1 -1
  21. package/lib/types/components/LoadedContextPanel.d.ts +5 -10
  22. package/lib/types/components/LoadedContextPanel.d.ts.map +1 -1
  23. package/lib/types/components/LoadedContextPanel.js +7 -18
  24. package/lib/types/components/LogoV2.d.ts.map +1 -1
  25. package/lib/types/components/LogoV2.js +1 -2
  26. package/lib/types/components/MessageList.d.ts +3 -1
  27. package/lib/types/components/MessageList.d.ts.map +1 -1
  28. package/lib/types/components/MessageList.js +29 -5
  29. package/lib/types/components/PluginSceneBoundary.d.ts +31 -0
  30. package/lib/types/components/PluginSceneBoundary.d.ts.map +1 -0
  31. package/lib/types/components/PluginSceneBoundary.js +29 -0
  32. package/lib/types/components/RewindPicker.d.ts +13 -1
  33. package/lib/types/components/RewindPicker.d.ts.map +1 -1
  34. package/lib/types/components/RewindPicker.js +26 -2
  35. package/lib/types/components/SkillsPicker.d.ts +18 -0
  36. package/lib/types/components/SkillsPicker.d.ts.map +1 -0
  37. package/lib/types/components/SkillsPicker.js +50 -0
  38. package/lib/types/components/SplitDiffView.d.ts +28 -0
  39. package/lib/types/components/SplitDiffView.d.ts.map +1 -0
  40. package/lib/types/components/SplitDiffView.js +417 -0
  41. package/lib/types/components/ToolUseLoader.d.ts +8 -3
  42. package/lib/types/components/ToolUseLoader.d.ts.map +1 -1
  43. package/lib/types/components/ToolUseLoader.js +43 -9
  44. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +3 -1
  45. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  46. package/lib/types/components/messages/AssistantToolUseMessage.js +17 -7
  47. package/lib/types/dsh-adapter/channel.d.ts +98 -7
  48. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  49. package/lib/types/dsh-adapter/channel.js +623 -26
  50. package/lib/types/dsh-adapter/command-attribution.d.ts +51 -0
  51. package/lib/types/dsh-adapter/command-attribution.d.ts.map +1 -0
  52. package/lib/types/dsh-adapter/command-attribution.js +93 -0
  53. package/lib/types/dsh-adapter/command-errors.d.ts +42 -0
  54. package/lib/types/dsh-adapter/command-errors.d.ts.map +1 -0
  55. package/lib/types/dsh-adapter/command-errors.js +63 -0
  56. package/lib/types/dsh-adapter/component-identity.d.ts +28 -0
  57. package/lib/types/dsh-adapter/component-identity.d.ts.map +1 -0
  58. package/lib/types/dsh-adapter/component-identity.js +108 -0
  59. package/lib/types/dsh-adapter/contract.d.ts +2 -2
  60. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  61. package/lib/types/dsh-adapter/contract.js +3 -2
  62. package/lib/types/dsh-adapter/decision-guard.d.ts +84 -0
  63. package/lib/types/dsh-adapter/decision-guard.d.ts.map +1 -0
  64. package/lib/types/dsh-adapter/decision-guard.js +354 -0
  65. package/lib/types/dsh-adapter/dialogs.d.ts +146 -0
  66. package/lib/types/dsh-adapter/dialogs.d.ts.map +1 -0
  67. package/lib/types/dsh-adapter/dialogs.js +262 -0
  68. package/lib/types/dsh-adapter/effect-ledger.d.ts +99 -0
  69. package/lib/types/dsh-adapter/effect-ledger.d.ts.map +1 -0
  70. package/lib/types/dsh-adapter/effect-ledger.js +231 -0
  71. package/lib/types/dsh-adapter/extension-events.d.ts +193 -0
  72. package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -0
  73. package/lib/types/dsh-adapter/extension-events.js +169 -0
  74. package/lib/types/dsh-adapter/extensions.d.ts +32 -0
  75. package/lib/types/dsh-adapter/extensions.d.ts.map +1 -0
  76. package/lib/types/dsh-adapter/extensions.js +42 -0
  77. package/lib/types/dsh-adapter/grants.d.ts +25 -0
  78. package/lib/types/dsh-adapter/grants.d.ts.map +1 -0
  79. package/lib/types/dsh-adapter/grants.js +184 -0
  80. package/lib/types/dsh-adapter/host-descriptor.d.ts +24 -0
  81. package/lib/types/dsh-adapter/host-descriptor.d.ts.map +1 -0
  82. package/lib/types/dsh-adapter/host-descriptor.js +146 -0
  83. package/lib/types/dsh-adapter/index.d.ts +4 -0
  84. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  85. package/lib/types/dsh-adapter/index.js +1 -0
  86. package/lib/types/dsh-adapter/message-observer.d.ts +178 -0
  87. package/lib/types/dsh-adapter/message-observer.d.ts.map +1 -0
  88. package/lib/types/dsh-adapter/message-observer.js +509 -0
  89. package/lib/types/dsh-adapter/plugin-host.d.ts +103 -0
  90. package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -0
  91. package/lib/types/dsh-adapter/plugin-host.js +270 -0
  92. package/lib/types/dsh-adapter/plugin-storage.d.ts +113 -0
  93. package/lib/types/dsh-adapter/plugin-storage.d.ts.map +1 -0
  94. package/lib/types/dsh-adapter/plugin-storage.js +385 -0
  95. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  96. package/lib/types/dsh-adapter/plugin.js +106 -1
  97. package/lib/types/dsh-adapter/plugins-info.d.ts +43 -0
  98. package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -0
  99. package/lib/types/dsh-adapter/plugins-info.js +276 -0
  100. package/lib/types/dsh-adapter/promptDebug.d.ts +10 -0
  101. package/lib/types/dsh-adapter/promptDebug.d.ts.map +1 -0
  102. package/lib/types/dsh-adapter/promptDebug.js +148 -0
  103. package/lib/types/dsh-adapter/renderers.d.ts +65 -0
  104. package/lib/types/dsh-adapter/renderers.d.ts.map +1 -0
  105. package/lib/types/dsh-adapter/renderers.js +138 -0
  106. package/lib/types/dsh-adapter/sanitize.d.ts +36 -0
  107. package/lib/types/dsh-adapter/sanitize.d.ts.map +1 -0
  108. package/lib/types/dsh-adapter/sanitize.js +65 -0
  109. package/lib/types/dsh-adapter/scenes.d.ts +81 -0
  110. package/lib/types/dsh-adapter/scenes.d.ts.map +1 -0
  111. package/lib/types/dsh-adapter/scenes.js +93 -0
  112. package/lib/types/dsh-adapter/settings-sections.d.ts +116 -0
  113. package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -0
  114. package/lib/types/dsh-adapter/settings-sections.js +63 -0
  115. package/lib/types/dsh-adapter/settingsEditor.d.ts +128 -0
  116. package/lib/types/dsh-adapter/settingsEditor.d.ts.map +1 -0
  117. package/lib/types/dsh-adapter/settingsEditor.js +244 -0
  118. package/lib/types/dsh-adapter/shortcuts.d.ts +109 -0
  119. package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -0
  120. package/lib/types/dsh-adapter/shortcuts.js +268 -0
  121. package/lib/types/dsh-adapter/status.d.ts +75 -0
  122. package/lib/types/dsh-adapter/status.d.ts.map +1 -0
  123. package/lib/types/dsh-adapter/status.js +168 -0
  124. package/lib/types/extensions.d.ts +8 -0
  125. package/lib/types/extensions.d.ts.map +1 -0
  126. package/lib/types/extensions.js +15 -0
  127. package/lib/types/i18n.d.ts +299 -26
  128. package/lib/types/i18n.d.ts.map +1 -1
  129. package/lib/types/i18n.js +89 -8
  130. package/lib/types/ink/ink.d.ts +11 -0
  131. package/lib/types/ink/ink.d.ts.map +1 -1
  132. package/lib/types/ink/ink.js +33 -0
  133. package/lib/types/ink/log-update.d.ts.map +1 -1
  134. package/lib/types/ink/log-update.js +101 -51
  135. package/lib/types/ink/output.d.ts +7 -0
  136. package/lib/types/ink/output.d.ts.map +1 -1
  137. package/lib/types/ink/output.js +125 -4
  138. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  139. package/lib/types/ink/render-node-to-output.js +14 -6
  140. package/lib/types/ink/terminal.d.ts.map +1 -1
  141. package/lib/types/ink/terminal.js +18 -6
  142. package/lib/types/jsx-runtime.d.ts +2 -0
  143. package/lib/types/jsx-runtime.d.ts.map +1 -0
  144. package/lib/types/jsx-runtime.js +13 -0
  145. package/lib/types/modelRoute.d.ts +10 -2
  146. package/lib/types/modelRoute.d.ts.map +1 -1
  147. package/lib/types/modelRoute.js +33 -4
  148. package/lib/types/plugin-host.d.ts +13 -0
  149. package/lib/types/plugin-host.d.ts.map +1 -0
  150. package/lib/types/plugin-host.js +17 -0
  151. package/lib/types/plugin-spec/negotiate.d.ts +11 -0
  152. package/lib/types/plugin-spec/negotiate.d.ts.map +1 -0
  153. package/lib/types/plugin-spec/negotiate.js +97 -0
  154. package/lib/types/plugin-spec/permission-scope.d.ts +32 -0
  155. package/lib/types/plugin-spec/permission-scope.d.ts.map +1 -0
  156. package/lib/types/plugin-spec/permission-scope.js +90 -0
  157. package/lib/types/plugin-spec/registry.d.ts +23 -0
  158. package/lib/types/plugin-spec/registry.d.ts.map +1 -0
  159. package/lib/types/plugin-spec/registry.js +157 -0
  160. package/lib/types/plugin-spec/schema-check.d.ts +17 -0
  161. package/lib/types/plugin-spec/schema-check.d.ts.map +1 -0
  162. package/lib/types/plugin-spec/schema-check.js +165 -0
  163. package/lib/types/plugin-spec/tui-extension.d.ts +16 -0
  164. package/lib/types/plugin-spec/tui-extension.d.ts.map +1 -0
  165. package/lib/types/plugin-spec/tui-extension.js +77 -0
  166. package/lib/types/plugin-spec/types.d.ts +114 -0
  167. package/lib/types/plugin-spec/types.d.ts.map +1 -0
  168. package/lib/types/plugin-spec/types.js +10 -0
  169. package/lib/types/plugin-spec/validate.d.ts +21 -0
  170. package/lib/types/plugin-spec/validate.d.ts.map +1 -0
  171. package/lib/types/plugin-spec/validate.js +119 -0
  172. package/lib/types/scenes.d.ts +3 -0
  173. package/lib/types/scenes.d.ts.map +1 -0
  174. package/lib/types/scenes.js +4 -0
  175. package/lib/types/screens/Chat.d.ts +14 -1
  176. package/lib/types/screens/Chat.d.ts.map +1 -1
  177. package/lib/types/screens/Chat.js +247 -48
  178. package/lib/types/screens/Settings.d.ts +20 -0
  179. package/lib/types/screens/Settings.d.ts.map +1 -0
  180. package/lib/types/screens/Settings.js +333 -0
  181. package/lib/types/screens/StatusLine.js +1 -1
  182. package/lib/types/settings-sections.d.ts +3 -0
  183. package/lib/types/settings-sections.d.ts.map +1 -0
  184. package/lib/types/settings-sections.js +4 -0
  185. package/lib/types/theme.d.ts +17 -0
  186. package/lib/types/theme.d.ts.map +1 -1
  187. package/lib/types/theme.js +51 -0
  188. package/lib/types/update.d.ts +20 -0
  189. package/lib/types/update.d.ts.map +1 -1
  190. package/lib/types/update.js +54 -7
  191. package/lib/types/utils/loaded-context.d.ts +8 -3
  192. package/lib/types/utils/loaded-context.d.ts.map +1 -1
  193. package/lib/types/utils/loaded-context.js +39 -3
  194. package/lib/types/utils/modifiers.d.ts.map +1 -1
  195. package/lib/types/utils/modifiers.js +3 -2
  196. package/lib/types/working-activity.d.ts +12 -0
  197. package/lib/types/working-activity.d.ts.map +1 -1
  198. package/lib/types/working-activity.js +13 -0
  199. package/node_modules/@dsh-std/command/LICENSE +21 -0
  200. package/node_modules/@dsh-std/command/README.md +26 -0
  201. package/node_modules/@dsh-std/command/README.zh.md +28 -0
  202. package/node_modules/@dsh-std/command/lib/index.d.ts +144 -0
  203. package/node_modules/@dsh-std/command/lib/index.d.ts.map +1 -0
  204. package/node_modules/@dsh-std/command/lib/index.js +252 -0
  205. package/node_modules/@dsh-std/command/lib/index.js.map +1 -0
  206. package/node_modules/@dsh-std/command/package.json +22 -0
  207. package/node_modules/@dsh-std/connection/LICENSE +21 -0
  208. package/node_modules/@dsh-std/connection/README.md +42 -0
  209. package/node_modules/@dsh-std/connection/README.zh.md +42 -0
  210. package/node_modules/@dsh-std/connection/lib/connection-CdGcSQnu.d.ts +125 -0
  211. package/node_modules/@dsh-std/connection/lib/connection-CdGcSQnu.d.ts.map +1 -0
  212. package/node_modules/@dsh-std/connection/lib/index.d.ts +89 -0
  213. package/node_modules/@dsh-std/connection/lib/index.d.ts.map +1 -0
  214. package/node_modules/@dsh-std/connection/lib/index.js +158 -0
  215. package/node_modules/@dsh-std/connection/lib/index.js.map +1 -0
  216. package/node_modules/@dsh-std/connection/lib/memory.d.ts +24 -0
  217. package/node_modules/@dsh-std/connection/lib/memory.d.ts.map +1 -0
  218. package/node_modules/@dsh-std/connection/lib/memory.js +257 -0
  219. package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -0
  220. package/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js +226 -0
  221. package/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -0
  222. package/node_modules/@dsh-std/connection/package.json +20 -0
  223. package/node_modules/@dsh-std/core/LICENSE +21 -0
  224. package/node_modules/@dsh-std/core/README.md +13 -0
  225. package/node_modules/@dsh-std/core/README.zh.md +13 -0
  226. package/node_modules/@dsh-std/core/lib/index.d.ts +112 -0
  227. package/node_modules/@dsh-std/core/lib/index.d.ts.map +1 -0
  228. package/node_modules/@dsh-std/core/lib/index.js +424 -0
  229. package/node_modules/@dsh-std/core/lib/index.js.map +1 -0
  230. package/node_modules/@dsh-std/core/package.json +21 -0
  231. package/node_modules/@dsh-std/manifest/LICENSE +21 -0
  232. package/node_modules/@dsh-std/manifest/README.md +5 -0
  233. package/node_modules/@dsh-std/manifest/README.zh.md +5 -0
  234. package/node_modules/@dsh-std/manifest/lib/index.d.ts +182 -0
  235. package/node_modules/@dsh-std/manifest/lib/index.d.ts.map +1 -0
  236. package/node_modules/@dsh-std/manifest/lib/index.js +625 -0
  237. package/node_modules/@dsh-std/manifest/lib/index.js.map +1 -0
  238. package/node_modules/@dsh-std/manifest/package.json +20 -0
  239. package/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -0
  240. package/node_modules/@dsh-std/messages/LICENSE +21 -0
  241. package/node_modules/@dsh-std/messages/README.md +5 -0
  242. package/node_modules/@dsh-std/messages/README.zh.md +7 -0
  243. package/node_modules/@dsh-std/messages/lib/index.d.ts +50 -0
  244. package/node_modules/@dsh-std/messages/lib/index.d.ts.map +1 -0
  245. package/node_modules/@dsh-std/messages/lib/index.js +151 -0
  246. package/node_modules/@dsh-std/messages/lib/index.js.map +1 -0
  247. package/node_modules/@dsh-std/messages/package.json +20 -0
  248. package/node_modules/@dsh-std/messages/schema/message-observer-envelope-0.15.schema.json +54 -0
  249. package/node_modules/@dsh-std/presentation/LICENSE +21 -0
  250. package/node_modules/@dsh-std/presentation/README.md +26 -0
  251. package/node_modules/@dsh-std/presentation/README.zh.md +28 -0
  252. package/node_modules/@dsh-std/presentation/lib/index.d.ts +219 -0
  253. package/node_modules/@dsh-std/presentation/lib/index.d.ts.map +1 -0
  254. package/node_modules/@dsh-std/presentation/lib/index.js +547 -0
  255. package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -0
  256. package/node_modules/@dsh-std/presentation/lib/interaction.d.ts +2 -0
  257. package/node_modules/@dsh-std/presentation/lib/interaction.js +2 -0
  258. package/node_modules/@dsh-std/presentation/lib/operations.d.ts +2 -0
  259. package/node_modules/@dsh-std/presentation/lib/operations.js +2 -0
  260. package/node_modules/@dsh-std/presentation/package.json +21 -0
  261. package/node_modules/@dsh-std/storage/LICENSE +21 -0
  262. package/node_modules/@dsh-std/storage/README.md +5 -0
  263. package/node_modules/@dsh-std/storage/README.zh.md +7 -0
  264. package/node_modules/@dsh-std/storage/lib/index.d.ts +48 -0
  265. package/node_modules/@dsh-std/storage/lib/index.d.ts.map +1 -0
  266. package/node_modules/@dsh-std/storage/lib/index.js +104 -0
  267. package/node_modules/@dsh-std/storage/lib/index.js.map +1 -0
  268. package/node_modules/@dsh-std/storage/package.json +20 -0
  269. package/node_modules/@dsh-std/storage/schema/local-storage-0.15.schema.json +56 -0
  270. package/package.json +118 -67
  271. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/LICENSE +21 -0
  272. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.md +42 -0
  273. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.zh.md +42 -0
  274. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/connection-CdGcSQnu.d.ts +125 -0
  275. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/connection-CdGcSQnu.d.ts.map +1 -0
  276. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.d.ts +89 -0
  277. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.d.ts.map +1 -0
  278. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.js +158 -0
  279. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.js.map +1 -0
  280. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.d.ts +24 -0
  281. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.d.ts.map +1 -0
  282. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js +257 -0
  283. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -0
  284. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js +226 -0
  285. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -0
  286. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +20 -0
  287. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/LICENSE +21 -0
  288. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.md +13 -0
  289. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.zh.md +13 -0
  290. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.d.ts +112 -0
  291. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.d.ts.map +1 -0
  292. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.js +424 -0
  293. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.js.map +1 -0
  294. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +21 -0
  295. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/LICENSE +21 -0
  296. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.md +5 -0
  297. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.zh.md +5 -0
  298. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.d.ts +182 -0
  299. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.d.ts.map +1 -0
  300. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.js +625 -0
  301. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.js.map +1 -0
  302. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +20 -0
  303. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -0
  304. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/LICENSE +21 -0
  305. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +26 -0
  306. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +28 -0
  307. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.d.ts +219 -0
  308. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.d.ts.map +1 -0
  309. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js +547 -0
  310. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -0
  311. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/interaction.d.ts +2 -0
  312. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/interaction.js +2 -0
  313. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/operations.d.ts +2 -0
  314. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/operations.js +2 -0
  315. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +21 -0
  316. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/LICENSE +21 -0
  317. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.md +13 -0
  318. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.zh.md +13 -0
  319. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.d.ts +112 -0
  320. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.d.ts.map +1 -0
  321. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.js +424 -0
  322. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.js.map +1 -0
  323. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +21 -0
  324. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/LICENSE +21 -0
  325. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.md +13 -0
  326. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.zh.md +13 -0
  327. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.d.ts +112 -0
  328. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.d.ts.map +1 -0
  329. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.js +424 -0
  330. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.js.map +1 -0
  331. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +21 -0
  332. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/LICENSE +21 -0
  333. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.md +13 -0
  334. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.zh.md +13 -0
  335. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.d.ts +112 -0
  336. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.d.ts.map +1 -0
  337. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.js +424 -0
  338. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.js.map +1 -0
  339. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +21 -0
  340. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/LICENSE +21 -0
  341. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.md +42 -0
  342. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.zh.md +42 -0
  343. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/connection-CdGcSQnu.d.ts +125 -0
  344. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/connection-CdGcSQnu.d.ts.map +1 -0
  345. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.d.ts +89 -0
  346. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.d.ts.map +1 -0
  347. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.js +158 -0
  348. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.js.map +1 -0
  349. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.d.ts +24 -0
  350. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.d.ts.map +1 -0
  351. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js +257 -0
  352. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -0
  353. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js +226 -0
  354. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -0
  355. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +20 -0
  356. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/LICENSE +21 -0
  357. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.md +13 -0
  358. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.zh.md +13 -0
  359. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.d.ts +112 -0
  360. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.d.ts.map +1 -0
  361. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.js +424 -0
  362. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.js.map +1 -0
  363. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +21 -0
  364. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/LICENSE +21 -0
  365. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.md +13 -0
  366. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.zh.md +13 -0
  367. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.d.ts +112 -0
  368. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.d.ts.map +1 -0
  369. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.js +424 -0
  370. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.js.map +1 -0
  371. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/package.json +21 -0
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Command ownership attribution — the data source for the C-041 invoke
3
+ * checkpoint's per-owner grant decision.
4
+ *
5
+ * dsh-commands has NO owner concept (its `normalizeDefinition` rebuilds a
6
+ * frozen object and drops unknown fields, and its scoped layers key by
7
+ * agent, not by registrant), and neither realistic access path can carry
8
+ * the caller's identity to `register` for us: `ctx.get('commands')` is an
9
+ * accessor that bypasses cordis's `internal/get` waterfall, and an
10
+ * inject-declared property read resolves before it. So attribution does
11
+ * NOT try to spy on the registry — it is a MEDIATED REGISTRATION surface,
12
+ * the same honest-identity pattern as storage.local / messages.observe:
13
+ * the plugin-host row's `registerCommand(pluginCtx, definition)` supplies a
14
+ * unique wrapper handler and stamps that actual registered definition with
15
+ * the verified Component id and activation on success. The invoke checkpoint resolves the
16
+ * effective definition for its receiving agent first, then looks up that
17
+ * definition's handler here. This mirrors dsh-commands' scoped shadowing:
18
+ * same-name definitions in separate agent scopes never share attribution.
19
+ *
20
+ * A plugin that registers directly through `ctx.get('commands')` keeps its
21
+ * command UNATTRIBUTED: the invoke checkpoint then applies the root grant
22
+ * only — the documented C-070 trusted-in-process boundary, exactly like a
23
+ * plugin calling `ctx.commands.execute` directly. Attribution only ever
24
+ * TIGHTENS the check, never widens it.
25
+ *
26
+ * The map is keyed by the cordis ROOT so the row and the channel (two
27
+ * different contexts of one runtime) share one view.
28
+ */
29
+ import type { Context } from '@deepseek-ai/cordis';
30
+ import type { VerifiedComponentIdentity } from './component-identity.js';
31
+ export interface CommandOwner {
32
+ componentId: string;
33
+ activationId: string;
34
+ commandId: string;
35
+ }
36
+ /** The registrant's display name for diagnostics only: the passed context's
37
+ * fiber name (nearest named ancestor), 'root' for host-side or degraded
38
+ * contexts. Authorization never uses this display value. */
39
+ export declare function fiberNameOf(ctx: Context): string;
40
+ /** Record one mediated command definition's owner after successful registration. */
41
+ export declare function stampCommandOwner(ctx: Context, definition: unknown, identity: VerifiedComponentIdentity, commandId: string): void;
42
+ /** Lift one definition's stamp without touching a later registration. */
43
+ export declare function unstampCommandOwner(ctx: Context, definition: unknown, activationId: string): void;
44
+ /**
45
+ * The recorded owner of the EFFECTIVE command definition, or undefined when
46
+ * it is unattributed (root-side/direct registrations are the documented
47
+ * C-070 boundary). Callers must pass `commands.find(agent, name)`, not only
48
+ * the command name, so agent-scoped shadows select their own owner.
49
+ */
50
+ export declare function commandOwner(ctx: Context, definition: unknown): CommandOwner | undefined;
51
+ //# sourceMappingURL=command-attribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-attribution.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/command-attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AAExE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB;AASD;;4DAE4D;AAC5D,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQhD;AAYD,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,yBAAyB,EACnC,SAAS,EAAE,MAAM,GAChB,IAAI,CAUN;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAMjG;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAKxF"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Command ownership attribution — the data source for the C-041 invoke
3
+ * checkpoint's per-owner grant decision.
4
+ *
5
+ * dsh-commands has NO owner concept (its `normalizeDefinition` rebuilds a
6
+ * frozen object and drops unknown fields, and its scoped layers key by
7
+ * agent, not by registrant), and neither realistic access path can carry
8
+ * the caller's identity to `register` for us: `ctx.get('commands')` is an
9
+ * accessor that bypasses cordis's `internal/get` waterfall, and an
10
+ * inject-declared property read resolves before it. So attribution does
11
+ * NOT try to spy on the registry — it is a MEDIATED REGISTRATION surface,
12
+ * the same honest-identity pattern as storage.local / messages.observe:
13
+ * the plugin-host row's `registerCommand(pluginCtx, definition)` supplies a
14
+ * unique wrapper handler and stamps that actual registered definition with
15
+ * the verified Component id and activation on success. The invoke checkpoint resolves the
16
+ * effective definition for its receiving agent first, then looks up that
17
+ * definition's handler here. This mirrors dsh-commands' scoped shadowing:
18
+ * same-name definitions in separate agent scopes never share attribution.
19
+ *
20
+ * A plugin that registers directly through `ctx.get('commands')` keeps its
21
+ * command UNATTRIBUTED: the invoke checkpoint then applies the root grant
22
+ * only — the documented C-070 trusted-in-process boundary, exactly like a
23
+ * plugin calling `ctx.commands.execute` directly. Attribution only ever
24
+ * TIGHTENS the check, never widens it.
25
+ *
26
+ * The map is keyed by the cordis ROOT so the row and the channel (two
27
+ * different contexts of one runtime) share one view.
28
+ */
29
+ const ownerMaps = new WeakMap();
30
+ function rootKeyOf(ctx) {
31
+ const root = ctx.root ?? ctx;
32
+ return typeof root === 'object' && root !== null ? root : undefined;
33
+ }
34
+ /** The registrant's display name for diagnostics only: the passed context's
35
+ * fiber name (nearest named ancestor), 'root' for host-side or degraded
36
+ * contexts. Authorization never uses this display value. */
37
+ export function fiberNameOf(ctx) {
38
+ try {
39
+ const resolved = ctx.fiber?.name;
40
+ if (typeof resolved === 'string' && resolved !== '')
41
+ return resolved;
42
+ }
43
+ catch {
44
+ // Degraded context without fiber access: 'root'.
45
+ }
46
+ return 'root';
47
+ }
48
+ function handlerOf(definition) {
49
+ try {
50
+ const handler = definition?.handler;
51
+ return typeof handler === 'function' ? handler : undefined;
52
+ }
53
+ catch {
54
+ // An exotic definition cannot participate in attribution safely.
55
+ return undefined;
56
+ }
57
+ }
58
+ /** Record one mediated command definition's owner after successful registration. */
59
+ export function stampCommandOwner(ctx, definition, identity, commandId) {
60
+ const key = rootKeyOf(ctx);
61
+ const handler = handlerOf(definition);
62
+ if (key === undefined || handler === undefined)
63
+ return;
64
+ let map = ownerMaps.get(key);
65
+ if (map === undefined) {
66
+ map = new WeakMap();
67
+ ownerMaps.set(key, map);
68
+ }
69
+ map.set(handler, Object.freeze({ componentId: identity.componentId, activationId: identity.activationId, commandId }));
70
+ }
71
+ /** Lift one definition's stamp without touching a later registration. */
72
+ export function unstampCommandOwner(ctx, definition, activationId) {
73
+ const key = rootKeyOf(ctx);
74
+ const handler = handlerOf(definition);
75
+ if (key === undefined || handler === undefined)
76
+ return;
77
+ const map = ownerMaps.get(key);
78
+ if (map?.get(handler)?.activationId === activationId)
79
+ map.delete(handler);
80
+ }
81
+ /**
82
+ * The recorded owner of the EFFECTIVE command definition, or undefined when
83
+ * it is unattributed (root-side/direct registrations are the documented
84
+ * C-070 boundary). Callers must pass `commands.find(agent, name)`, not only
85
+ * the command name, so agent-scoped shadows select their own owner.
86
+ */
87
+ export function commandOwner(ctx, definition) {
88
+ const key = rootKeyOf(ctx);
89
+ const handler = handlerOf(definition);
90
+ if (key === undefined || handler === undefined)
91
+ return undefined;
92
+ return ownerMaps.get(key)?.get(handler);
93
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * commands contract error-code alignment (C-041,
3
+ * `commands.dsh/v1alpha1#Command`): the official `dsh-commands` runtime
4
+ * reports a duplicate registration as a plain `Error` whose MESSAGE is the
5
+ * only signal:
6
+ *
7
+ * `command "<name>" is already registered (…)`
8
+ * `command "<name>" is already registered in this scope`
9
+ *
10
+ * The v0.15 contract names the code `DUPLICATE_CONTRIBUTION_ID`. This module
11
+ * maps the message-shaped error onto an `Error` carrying that `.code`, at
12
+ * the HOST-MEDIATED registration/invocation points (the channel's skill
13
+ * command registration and registry-command execution).
14
+ *
15
+ * Known boundary (C-070, trusted-in-process): a plugin calling
16
+ * `ctx.commands.register` / `ctx.commands.execute` DIRECTLY bypasses this
17
+ * mapping — code-level wrapping can only cover the points the host owns.
18
+ * That is declared platform behavior, not a bug.
19
+ */
20
+ /** The contract's command error vocabulary. */
21
+ export declare const COMMAND_ERROR_CODES: readonly ["COMMAND_NOT_FOUND", "DUPLICATE_CONTRIBUTION_ID", "PERMISSION_NOT_GRANTED", "COMMAND_FAILED", "INVOCATION_CANCELLED", "INVOCATION_DEADLINE_EXCEEDED"];
22
+ export type CommandErrorCode = (typeof COMMAND_ERROR_CODES)[number];
23
+ /** An Error carrying a contract error code on `.code`. */
24
+ export interface CodedCommandError extends Error {
25
+ code: CommandErrorCode;
26
+ cause?: unknown;
27
+ }
28
+ /**
29
+ * Map a thrown dsh-commands error onto its contract code. A duplicate
30
+ * registration comes back as a CodedCommandError with
31
+ * `DUPLICATE_CONTRIBUTION_ID` (original on `.cause`); every other value
32
+ * passes through unchanged.
33
+ */
34
+ export declare function mapCommandError(error: unknown): unknown;
35
+ /** True when `error` carries the given contract code. */
36
+ export declare function hasCommandErrorCode(error: unknown, code: CommandErrorCode): boolean;
37
+ /**
38
+ * Run `operation` and rethrow any duplicate-registration failure with its
39
+ * contract code attached (see {@link mapCommandError}).
40
+ */
41
+ export declare function withCommandErrorMapping<T>(operation: () => T | Promise<T>): Promise<T>;
42
+ //# sourceMappingURL=command-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-errors.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/command-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB,iKAOtB,CAAA;AACV,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,0DAA0D;AAC1D,MAAM,WAAW,iBAAkB,SAAQ,KAAK;IAC9C,IAAI,EAAE,gBAAgB,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASvD;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAMnF;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAM5F"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * commands contract error-code alignment (C-041,
3
+ * `commands.dsh/v1alpha1#Command`): the official `dsh-commands` runtime
4
+ * reports a duplicate registration as a plain `Error` whose MESSAGE is the
5
+ * only signal:
6
+ *
7
+ * `command "<name>" is already registered (…)`
8
+ * `command "<name>" is already registered in this scope`
9
+ *
10
+ * The v0.15 contract names the code `DUPLICATE_CONTRIBUTION_ID`. This module
11
+ * maps the message-shaped error onto an `Error` carrying that `.code`, at
12
+ * the HOST-MEDIATED registration/invocation points (the channel's skill
13
+ * command registration and registry-command execution).
14
+ *
15
+ * Known boundary (C-070, trusted-in-process): a plugin calling
16
+ * `ctx.commands.register` / `ctx.commands.execute` DIRECTLY bypasses this
17
+ * mapping — code-level wrapping can only cover the points the host owns.
18
+ * That is declared platform behavior, not a bug.
19
+ */
20
+ /** The contract's command error vocabulary. */
21
+ export const COMMAND_ERROR_CODES = [
22
+ 'COMMAND_NOT_FOUND',
23
+ 'DUPLICATE_CONTRIBUTION_ID',
24
+ 'PERMISSION_NOT_GRANTED',
25
+ 'COMMAND_FAILED',
26
+ 'INVOCATION_CANCELLED',
27
+ 'INVOCATION_DEADLINE_EXCEEDED',
28
+ ];
29
+ const DUPLICATE_PATTERN = /^command "[^"]+" is already registered/;
30
+ /**
31
+ * Map a thrown dsh-commands error onto its contract code. A duplicate
32
+ * registration comes back as a CodedCommandError with
33
+ * `DUPLICATE_CONTRIBUTION_ID` (original on `.cause`); every other value
34
+ * passes through unchanged.
35
+ */
36
+ export function mapCommandError(error) {
37
+ if (error instanceof Error && DUPLICATE_PATTERN.test(error.message)) {
38
+ const mapped = new Error(error.message);
39
+ mapped.name = error.name;
40
+ mapped.code = 'DUPLICATE_CONTRIBUTION_ID';
41
+ mapped.cause = error;
42
+ return mapped;
43
+ }
44
+ return error;
45
+ }
46
+ /** True when `error` carries the given contract code. */
47
+ export function hasCommandErrorCode(error, code) {
48
+ return (error !== null &&
49
+ typeof error === 'object' &&
50
+ error.code === code);
51
+ }
52
+ /**
53
+ * Run `operation` and rethrow any duplicate-registration failure with its
54
+ * contract code attached (see {@link mapCommandError}).
55
+ */
56
+ export async function withCommandErrorMapping(operation) {
57
+ try {
58
+ return await operation();
59
+ }
60
+ catch (error) {
61
+ throw mapCommandError(error);
62
+ }
63
+ }
@@ -0,0 +1,28 @@
1
+ /** Verified Component identity bound to one Cordis activation owner. */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import type { ComponentManifest, PluginManifest } from '@dsh-std/manifest';
4
+ export type ComponentIdentityErrorCode = 'COMPONENT_NOT_ADMITTED' | 'COMPONENT_ALREADY_ADMITTED';
5
+ export declare class ComponentIdentityError extends Error {
6
+ readonly code: ComponentIdentityErrorCode;
7
+ constructor(code: ComponentIdentityErrorCode, message: string);
8
+ }
9
+ export interface VerifiedComponentIdentity {
10
+ readonly componentId: string;
11
+ readonly version: string;
12
+ readonly facet: 'host';
13
+ readonly activationId: string;
14
+ readonly manifest: PluginManifest;
15
+ readonly projection: ComponentManifest;
16
+ }
17
+ /** Activation ids are host-issued opaque values. Keep them bounded and free
18
+ * of control characters because the same value is written to the effect
19
+ * ledger and used as a grant principal selector. */
20
+ export declare const ACTIVATION_ID_MAX_LENGTH = 128;
21
+ export declare function bindComponentIdentity(context: Context, manifest: PluginManifest, projection: ComponentManifest, activationId?: string): VerifiedComponentIdentity;
22
+ export declare function componentIdentityOf(context: Context): VerifiedComponentIdentity | undefined;
23
+ export declare function requireComponentIdentity(context: Context): VerifiedComponentIdentity;
24
+ export declare function declaresPermission(identity: VerifiedComponentIdentity, permission: string, actualScope: string): boolean;
25
+ export declare function declaresCommand(identity: VerifiedComponentIdentity, commandId: string): boolean;
26
+ export declare function declaresObserverScope(identity: VerifiedComponentIdentity, actualScope: string): boolean;
27
+ export declare function requiresDecisionEvents(identity: VerifiedComponentIdentity): boolean;
28
+ //# sourceMappingURL=component-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-identity.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/component-identity.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAGxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAG1E,MAAM,MAAM,0BAA0B,GAAG,wBAAwB,GAAG,4BAA4B,CAAA;AAEhG,qBAAa,sBAAuB,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,0BAA0B;gBAAhC,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,MAAM;CAIvE;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAA;CACvC;AAED;;oDAEoD;AACpD,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAyB3C,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,iBAAiB,EAC7B,YAAY,GAAE,MAAqB,GAClC,yBAAyB,CA2B3B;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,yBAAyB,GAAG,SAAS,CAM3F;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,yBAAyB,CASpF;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAQT;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,yBAAyB,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAE/F;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAUvG;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,OAAO,CAGnF"}
@@ -0,0 +1,108 @@
1
+ /** Verified Component identity bound to one Cordis activation owner. */
2
+ import { randomUUID } from 'node:crypto';
3
+ import { normalizePermissionScope, scopeCovers } from '../plugin-spec/permission-scope.js';
4
+ export class ComponentIdentityError extends Error {
5
+ code;
6
+ constructor(code, message) {
7
+ super(message);
8
+ this.code = code;
9
+ this.name = 'ComponentIdentityError';
10
+ }
11
+ }
12
+ /** Activation ids are host-issued opaque values. Keep them bounded and free
13
+ * of control characters because the same value is written to the effect
14
+ * ledger and used as a grant principal selector. */
15
+ export const ACTIVATION_ID_MAX_LENGTH = 128;
16
+ function validateActivationId(value) {
17
+ if (typeof value !== 'string' || value.length === 0 || value.length > ACTIVATION_ID_MAX_LENGTH
18
+ || /[\x00-\x1f\x7f-\x9f]/u.test(value)) {
19
+ throw new ComponentIdentityError('COMPONENT_NOT_ADMITTED', `activationId must be a non-empty control-free string of at most ${ACTIVATION_ID_MAX_LENGTH} characters`);
20
+ }
21
+ return value;
22
+ }
23
+ const identities = new WeakMap();
24
+ function ownerKey(context) {
25
+ try {
26
+ const fiber = context.fiber;
27
+ if (typeof fiber === 'object' && fiber !== null)
28
+ return fiber;
29
+ }
30
+ catch {
31
+ // A real plugin context always has a fiber; reject degraded callers below.
32
+ }
33
+ throw new ComponentIdentityError('COMPONENT_NOT_ADMITTED', 'a Component activation requires an owning Cordis fiber');
34
+ }
35
+ export function bindComponentIdentity(context, manifest, projection, activationId = randomUUID()) {
36
+ const key = ownerKey(context);
37
+ if (identities.has(key)) {
38
+ throw new ComponentIdentityError('COMPONENT_ALREADY_ADMITTED', 'this activation already has a verified Component identity');
39
+ }
40
+ const identity = Object.freeze({
41
+ componentId: projection.metadata.name,
42
+ version: projection.metadata.version,
43
+ facet: 'host',
44
+ activationId: validateActivationId(activationId),
45
+ manifest,
46
+ projection,
47
+ });
48
+ identities.set(key, identity);
49
+ const release = () => {
50
+ if (identities.get(key) === identity)
51
+ identities.delete(key);
52
+ };
53
+ try {
54
+ context.effect(() => release);
55
+ }
56
+ catch (error) {
57
+ identities.delete(key);
58
+ throw new ComponentIdentityError('COMPONENT_NOT_ADMITTED', `cannot bind Component identity to an inactive activation: ${error instanceof Error ? error.message : String(error)}`);
59
+ }
60
+ return identity;
61
+ }
62
+ export function componentIdentityOf(context) {
63
+ try {
64
+ return identities.get(ownerKey(context));
65
+ }
66
+ catch {
67
+ return undefined;
68
+ }
69
+ }
70
+ export function requireComponentIdentity(context) {
71
+ const identity = componentIdentityOf(context);
72
+ if (identity === undefined) {
73
+ throw new ComponentIdentityError('COMPONENT_NOT_ADMITTED', 'the calling activation has no verified dsh-plugin.json Component identity');
74
+ }
75
+ return identity;
76
+ }
77
+ export function declaresPermission(identity, permission, actualScope) {
78
+ const actual = normalizePermissionScope(permission, actualScope, identity.componentId);
79
+ if (actual === undefined)
80
+ return false;
81
+ return identity.manifest.permissions.some(request => {
82
+ if (request.name !== permission)
83
+ return false;
84
+ const declared = normalizePermissionScope(permission, request.scope, identity.componentId);
85
+ return declared !== undefined && scopeCovers(declared, actual);
86
+ });
87
+ }
88
+ export function declaresCommand(identity, commandId) {
89
+ return identity.manifest.contributes.commands.some(command => command.id === commandId);
90
+ }
91
+ export function declaresObserverScope(identity, actualScope) {
92
+ const actual = normalizePermissionScope('messages.observe.read', actualScope, identity.componentId);
93
+ if (actual === undefined)
94
+ return false;
95
+ return identity.manifest.subscriptions.some(subscription => {
96
+ if (typeof subscription === 'string')
97
+ return subscription === 'messages.observe';
98
+ if (subscription.apiVersion !== 'messages.dsh/v1alpha1' || subscription.kind !== 'MessageObserver')
99
+ return false;
100
+ if (subscription.scope === undefined)
101
+ return true;
102
+ const declared = normalizePermissionScope('messages.observe.read', subscription.scope, identity.componentId);
103
+ return declared !== undefined && scopeCovers(declared, actual);
104
+ });
105
+ }
106
+ export function requiresDecisionEvents(identity) {
107
+ return identity.manifest.requires.contracts.some(requirement => requirement.apiVersion === 'tui.dsh/v1alpha1' && requirement.kind === 'DecisionEvents');
108
+ }
@@ -1,11 +1,11 @@
1
- export declare const UPSTREAM_VALIDATED_VERSION = "0.1.0-rc.6";
1
+ export declare const UPSTREAM_VALIDATED_VERSION = "0.1.0-rc.7";
2
2
  /**
3
3
  * Framework packages version on their own lines; the contract validates
4
4
  * their MAJOR (breaking surface), not the harness rc number.
5
5
  */
6
6
  export declare const UPSTREAM_FRAMEWORK_MAJORS: Record<string, number>;
7
7
  /** Official packages the adapter consumes at runtime or as types. */
8
- export declare const UPSTREAM_BLESSED_PACKAGES: readonly ["@deepseek-ai/cordis", "@deepseek-ai/schemastery", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-presets", "@deepseek-ai/dsh-commands", "@deepseek-ai/dsh-cordis-host-runner", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-persona", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-storage", "@deepseek-ai/dsh-storage-domain", "@deepseek-ai/dsh-storage-json", "@deepseek-ai/dsh-workspace", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-terminal", "@deepseek-ai/dsh-terminal-bash", "@deepseek-ai/dsh-tool-ask-user", "@deepseek-ai/dsh-tool-bash-persistent", "@deepseek-ai/dsh-tool-cordis", "@deepseek-ai/dsh-user-approval", "@deepseek-ai/dsh-user-questions"];
8
+ export declare const UPSTREAM_BLESSED_PACKAGES: readonly ["@deepseek-ai/cordis", "@deepseek-ai/schemastery", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-presets", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-commands", "@deepseek-ai/dsh-cordis-host-runner", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-persona", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-storage", "@deepseek-ai/dsh-storage-domain", "@deepseek-ai/dsh-storage-json", "@deepseek-ai/dsh-workspace", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-terminal", "@deepseek-ai/dsh-terminal-bash", "@deepseek-ai/dsh-tool-ask-user", "@deepseek-ai/dsh-tool-bash-persistent", "@deepseek-ai/dsh-tool-cordis", "@deepseek-ai/dsh-user-approval", "@deepseek-ai/dsh-user-questions"];
9
9
  export interface UpstreamDriftEntry {
10
10
  package: string;
11
11
  installed: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/contract.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,0BAA0B,eAAe,CAAA;AAEtD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG5D,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,yBAAyB,6vBAyB5B,CAAA;AAEV,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB;AAWD,wBAAgB,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAgB9E;AAOD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,kBAAkB,EAAE,CAsBpD"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/contract.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,0BAA0B,eAAe,CAAA;AAEtD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG5D,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,yBAAyB,8xBA0B5B,CAAA;AAEV,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB;AAWD,wBAAgB,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAgB9E;AAOD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,kBAAkB,EAAE,CAsBpD"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Upstream compatibility contract.
3
3
  *
4
- * The TUI is validated against one upstream release line (0.1.0-rc.6).
4
+ * The TUI is validated against one upstream release line (0.1.0-rc.7).
5
5
  * Every official package this adapter touches is blessed here; anything
6
6
  * else must go through upstream channels or the adapter, never the UI.
7
7
  *
@@ -11,7 +11,7 @@
11
11
  */
12
12
  import { readFileSync } from 'node:fs';
13
13
  import { fileURLToPath } from 'node:url';
14
- export const UPSTREAM_VALIDATED_VERSION = '0.1.0-rc.6';
14
+ export const UPSTREAM_VALIDATED_VERSION = '0.1.0-rc.7';
15
15
  /**
16
16
  * Framework packages version on their own lines; the contract validates
17
17
  * their MAJOR (breaking surface), not the harness rc number.
@@ -28,6 +28,7 @@ export const UPSTREAM_BLESSED_PACKAGES = [
28
28
  '@deepseek-ai/dsh-agent',
29
29
  '@deepseek-ai/dsh-agent-instructions',
30
30
  '@deepseek-ai/dsh-agent-presets',
31
+ '@deepseek-ai/dsh-atomic-write',
31
32
  '@deepseek-ai/dsh-commands',
32
33
  '@deepseek-ai/dsh-cordis-host-runner',
33
34
  '@deepseek-ai/dsh-llm',
@@ -0,0 +1,84 @@
1
+ /**
2
+ * RFC 0005 D-7 enforcement: subscribing to an intercept-class (decision)
3
+ * event requires an explicit host-side grant — default deny.
4
+ *
5
+ * Interception is strictly more powerful than observation: a plugin that can
6
+ * veto user input or a session switch can change what the user's intent
7
+ * actually does. So `tui/input`, `tui/rewind-prompt`, `tui/session-switch`
8
+ * and `tui/compact` are NOT free-for-all `ctx.on` targets: the subscribing
9
+ * plugin (identified by its verified Component identity) must hold the
10
+ * matching `domain.resource.intercept` grant. Grant answers
11
+ * come from the unified 8-permission GrantStore in ./grants.js (registry-
12
+ * driven defaults, `grants`/`denies` sections, corrupt fail-closed) — this
13
+ * module is only the subscribe-time CHECKPOINT: which event needs which
14
+ * permission, and the cordis bail hook that enforces it.
15
+ *
16
+ * A denied subscription never enters the dispatch chain — it is "as if
17
+ * unregistered" (D-7) and the caller gets a no-op disposer plus a logger
18
+ * warning naming the plugin, the event, and the missing grant.
19
+ *
20
+ * Re-check semantics (D-7: subscription, revocation, scope change): every
21
+ * operation reads the live GrantStore and grant-owned registrations are
22
+ * released when its change watcher observes a revocation.
23
+ *
24
+ * Mechanism: cordis bails `internal/listener` on EVERY `ctx.on` before
25
+ * registering, with `this` bound to the subscribing context; a truthy bail
26
+ * result skips the registration and becomes the caller's disposer. That is
27
+ * the whole hook — no patching of the events service.
28
+ */
29
+ import type { Context } from '@deepseek-ai/cordis';
30
+ import { EXTENSION_GRANTS_FILE, type GrantStore } from './grants.js';
31
+ import { type VerifiedComponentIdentity } from './component-identity.js';
32
+ /** The intercept permission each decision event requires (D-7 naming:
33
+ * `domain.resource.intercept`). Observe-class events (tui/rewind-done,
34
+ * tui/session-switched) are deliberately absent. */
35
+ export declare const DECISION_EVENT_PERMISSIONS: Readonly<Record<string, string>>;
36
+ export { EXTENSION_GRANTS_FILE };
37
+ /** @deprecated Use GrantStore from ./grants.js (same shape, plus more). */
38
+ export type ExtensionGrants = GrantStore;
39
+ /** @deprecated Use parseGrantStore from ./grants.js. */
40
+ export declare const parseExtensionGrants: (text: string) => GrantStore;
41
+ /** @deprecated Use readGrantStore from ./grants.js. */
42
+ export declare const readExtensionGrants: (dir?: string) => GrantStore;
43
+ export interface DecisionHandlerMetadata {
44
+ componentId: string;
45
+ activationId: string;
46
+ event: string;
47
+ order: string;
48
+ }
49
+ /** A host-mediated DecisionEvents registration. The registry is deliberately
50
+ * separate from Cordis' private `_hooks`: admission and dispatch must not
51
+ * depend on plugin load order or on an implementation detail of the event
52
+ * service. */
53
+ export interface DecisionRegistrationOptions {
54
+ /** Scope covered by this handler. When omitted it is derived from the
55
+ * manifest declaration; an unsafe concrete-session declaration is refused. */
56
+ scope?: string;
57
+ /** Deterministic order key. Handlers with the same activation/event must use
58
+ * distinct keys; registration order is never used as a policy. */
59
+ order?: string;
60
+ }
61
+ export interface RegisteredDecisionHandler {
62
+ readonly event: string;
63
+ readonly scope: string;
64
+ readonly componentId: string;
65
+ readonly activationId: string;
66
+ readonly order: string;
67
+ readonly identity: VerifiedComponentIdentity;
68
+ readonly ownerContext: Context;
69
+ readonly listener: (payload: Record<string, unknown>) => unknown;
70
+ }
71
+ export interface DecisionRegistry {
72
+ grants: GrantStore;
73
+ handlers: Map<string, Map<string, RegisteredDecisionHandler>>;
74
+ }
75
+ export declare function decisionRegistryOf(ctx: Context): DecisionRegistry;
76
+ /** Return a stable snapshot of handlers for one event and payload scope. */
77
+ export declare function decisionHandlersOf(ctx: Context, event: string, payloadScope?: string): readonly RegisteredDecisionHandler[];
78
+ /** Host-only registration used by TuiPluginHostRuntime. */
79
+ export declare function registerDecisionHandler(pluginCtx: Context, identity: VerifiedComponentIdentity, event: string, listener: (payload: Record<string, unknown>) => unknown, options?: DecisionRegistrationOptions, onRelease?: () => void): () => boolean;
80
+ /** Execute ctx.on for one host-mediated decision registration. */
81
+ export declare function withDecisionRegistration<T>(ctx: Context, callback: () => T): T;
82
+ export declare function decisionHandlerMetadataOf(listener: Function): DecisionHandlerMetadata | undefined;
83
+ export declare function installDecisionGuard(ctx: Context, grants: GrantStore): void;
84
+ //# sourceMappingURL=decision-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-guard.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/decision-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EACL,qBAAqB,EAGrB,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AACpB,OAAO,EAIL,KAAK,yBAAyB,EAC/B,MAAM,yBAAyB,CAAA;AAQhC;;qDAEqD;AACrD,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKvE,CAAA;AAMD,OAAO,EAAE,qBAAqB,EAAE,CAAA;AAEhC,2EAA2E;AAC3E,MAAM,MAAM,eAAe,GAAG,UAAU,CAAA;AAExC,wDAAwD;AACxD,eAAO,MAAM,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAA4B,CAAA;AAEjF,uDAAuD;AACvD,eAAO,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,UAA2B,CAAA;AAgB/E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAGD;;;cAGc;AACd,MAAM,WAAW,2BAA2B;IAC1C;kFAC8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;sEACkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAA;IAC5C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;CACjE;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,CAAA;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAA;CAC9D;AAsBD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAEjE;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,SAAS,yBAAyB,EAAE,CA6BtC;AAsCD,2DAA2D;AAC3D,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,yBAAyB,EACnC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,EACvD,OAAO,GAAE,2BAAgC,EACzC,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,MAAM,OAAO,CA4Ff;AAkBD,kEAAkE;AAClE,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAI9E;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,uBAAuB,GAAG,SAAS,CAEjG;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA+D3E"}