@deepseek-harness-tui/dsh-tui 0.8.1 → 0.8.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 (240) hide show
  1. package/README.md +22 -13
  2. package/dsh-ecosystem-spec/protocols/profile-definitions.d.ts +13 -0
  3. package/dsh-ecosystem-spec/protocols/profile-definitions.js +59 -0
  4. package/dsh-ecosystem-spec/protocols/tui-channel-http.d.ts +15 -0
  5. package/dsh-ecosystem-spec/protocols/tui-channel-http.js +32 -0
  6. package/dsh-ecosystem-spec/protocols/tui-channel.d.ts +59 -0
  7. package/dsh-ecosystem-spec/protocols/tui-channel.js +166 -0
  8. package/dsh-ecosystem-spec/protocols/tui-contributions.d.ts +42 -0
  9. package/dsh-ecosystem-spec/protocols/tui-contributions.js +143 -0
  10. package/dsh-ecosystem-spec/registry/README.md +14 -0
  11. package/dsh-ecosystem-spec/registry/contracts/scene-v1alpha1.json +13 -0
  12. package/dsh-ecosystem-spec/registry/contracts/settings-section-v1alpha1.json +13 -0
  13. package/dsh-ecosystem-spec/registry/contracts/tui-channel-v1alpha1.json +30 -0
  14. package/dsh-ecosystem-spec/registry/contracts/workspace-provider-v1alpha1.json +6 -0
  15. package/{ecosystem-spec → dsh-ecosystem-spec}/registry/permissions-0.1.json +1 -1
  16. package/dsh-ecosystem-spec/registry/registry-0.15.json +149 -0
  17. package/lib/types/command-trees.d.ts +2 -1
  18. package/lib/types/command-trees.d.ts.map +1 -1
  19. package/lib/types/command-trees.js +1 -1
  20. package/lib/types/components/LoadedContextPanel.d.ts +10 -5
  21. package/lib/types/components/LoadedContextPanel.d.ts.map +1 -1
  22. package/lib/types/components/LoadedContextPanel.js +18 -7
  23. package/lib/types/components/LogoV2.d.ts.map +1 -1
  24. package/lib/types/components/LogoV2.js +16 -7
  25. package/lib/types/components/Markdown.d.ts +13 -1
  26. package/lib/types/components/Markdown.d.ts.map +1 -1
  27. package/lib/types/components/Markdown.js +15 -1
  28. package/lib/types/components/MessageList.d.ts +3 -1
  29. package/lib/types/components/MessageList.d.ts.map +1 -1
  30. package/lib/types/components/MessageList.js +90 -9
  31. package/lib/types/components/PromptInput.d.ts.map +1 -1
  32. package/lib/types/components/PromptInput.js +26 -12
  33. package/lib/types/components/StreamingMarkdown.d.ts +2 -8
  34. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
  35. package/lib/types/components/StreamingMarkdown.js +51 -9
  36. package/lib/types/components/activityFrames.d.ts +1 -1
  37. package/lib/types/components/activityFrames.d.ts.map +1 -1
  38. package/lib/types/components/activityFrames.js +4 -1
  39. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +5 -1
  40. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
  41. package/lib/types/components/messages/AssistantThinkingMessage.js +26 -3
  42. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  43. package/lib/types/components/messages/AssistantToolUseMessage.js +12 -1
  44. package/lib/types/dsh-adapter/channel.d.ts +31 -4
  45. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  46. package/lib/types/dsh-adapter/channel.js +267 -102
  47. package/lib/types/dsh-adapter/childStderr.d.ts.map +1 -1
  48. package/lib/types/dsh-adapter/childStderr.js +10 -0
  49. package/lib/types/dsh-adapter/command-attribution.d.ts.map +1 -1
  50. package/lib/types/dsh-adapter/command-attribution.js +2 -2
  51. package/lib/types/dsh-adapter/command-trees.d.ts +7 -1
  52. package/lib/types/dsh-adapter/command-trees.d.ts.map +1 -1
  53. package/lib/types/dsh-adapter/command-trees.js +70 -20
  54. package/lib/types/dsh-adapter/component-identity.d.ts +5 -0
  55. package/lib/types/dsh-adapter/component-identity.d.ts.map +1 -1
  56. package/lib/types/dsh-adapter/component-identity.js +14 -14
  57. package/lib/types/dsh-adapter/decision-guard.d.ts.map +1 -1
  58. package/lib/types/dsh-adapter/decision-guard.js +10 -16
  59. package/lib/types/dsh-adapter/dialogs.d.ts +2 -3
  60. package/lib/types/dsh-adapter/dialogs.d.ts.map +1 -1
  61. package/lib/types/dsh-adapter/dialogs.js +114 -60
  62. package/lib/types/dsh-adapter/effect-ledger.d.ts +0 -8
  63. package/lib/types/dsh-adapter/effect-ledger.d.ts.map +1 -1
  64. package/lib/types/dsh-adapter/effect-ledger.js +73 -53
  65. package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
  66. package/lib/types/dsh-adapter/extension-events.js +39 -1
  67. package/lib/types/dsh-adapter/grants.d.ts.map +1 -1
  68. package/lib/types/dsh-adapter/grants.js +43 -14
  69. package/lib/types/dsh-adapter/host-access.d.ts +37 -0
  70. package/lib/types/dsh-adapter/host-access.d.ts.map +1 -0
  71. package/lib/types/dsh-adapter/host-access.js +652 -0
  72. package/lib/types/dsh-adapter/host-descriptor.d.ts +2 -2
  73. package/lib/types/dsh-adapter/host-descriptor.d.ts.map +1 -1
  74. package/lib/types/dsh-adapter/host-descriptor.js +31 -8
  75. package/lib/types/dsh-adapter/index.d.ts +4 -0
  76. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  77. package/lib/types/dsh-adapter/index.js +1 -0
  78. package/lib/types/dsh-adapter/message-observer.d.ts +10 -15
  79. package/lib/types/dsh-adapter/message-observer.d.ts.map +1 -1
  80. package/lib/types/dsh-adapter/message-observer.js +114 -70
  81. package/lib/types/dsh-adapter/plugin-host.d.ts +39 -6
  82. package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
  83. package/lib/types/dsh-adapter/plugin-host.js +139 -44
  84. package/lib/types/dsh-adapter/plugin-storage.d.ts +0 -5
  85. package/lib/types/dsh-adapter/plugin-storage.d.ts.map +1 -1
  86. package/lib/types/dsh-adapter/plugin-storage.js +48 -36
  87. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  88. package/lib/types/dsh-adapter/plugin.js +80 -16
  89. package/lib/types/dsh-adapter/promptDebug.d.ts +0 -6
  90. package/lib/types/dsh-adapter/promptDebug.d.ts.map +1 -1
  91. package/lib/types/dsh-adapter/promptDebug.js +13 -4
  92. package/lib/types/dsh-adapter/renderers.d.ts +6 -14
  93. package/lib/types/dsh-adapter/renderers.d.ts.map +1 -1
  94. package/lib/types/dsh-adapter/renderers.js +81 -46
  95. package/lib/types/dsh-adapter/scenes.d.ts +8 -4
  96. package/lib/types/dsh-adapter/scenes.d.ts.map +1 -1
  97. package/lib/types/dsh-adapter/scenes.js +136 -37
  98. package/lib/types/dsh-adapter/settings-sections.d.ts +7 -3
  99. package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -1
  100. package/lib/types/dsh-adapter/settings-sections.js +106 -26
  101. package/lib/types/dsh-adapter/shortcuts.d.ts +8 -10
  102. package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
  103. package/lib/types/dsh-adapter/shortcuts.js +108 -36
  104. package/lib/types/dsh-adapter/status.d.ts +6 -7
  105. package/lib/types/dsh-adapter/status.d.ts.map +1 -1
  106. package/lib/types/dsh-adapter/status.js +88 -22
  107. package/lib/types/dsh-adapter/workspaces.d.ts +16 -5
  108. package/lib/types/dsh-adapter/workspaces.d.ts.map +1 -1
  109. package/lib/types/dsh-adapter/workspaces.js +287 -170
  110. package/lib/types/extensions.d.ts +10 -5
  111. package/lib/types/extensions.d.ts.map +1 -1
  112. package/lib/types/extensions.js +11 -5
  113. package/lib/types/force-production-react.d.ts +1 -0
  114. package/lib/types/force-production-react.d.ts.map +1 -0
  115. package/lib/types/force-production-react.js +12 -0
  116. package/lib/types/i18n.d.ts +14 -6
  117. package/lib/types/i18n.d.ts.map +1 -1
  118. package/lib/types/i18n.js +4 -2
  119. package/lib/types/index.d.ts +1 -0
  120. package/lib/types/index.d.ts.map +1 -1
  121. package/lib/types/index.js +1 -0
  122. package/lib/types/ink/components/App.d.ts +2 -0
  123. package/lib/types/ink/components/App.d.ts.map +1 -1
  124. package/lib/types/ink/components/App.js +4 -0
  125. package/lib/types/ink/ink.d.ts +20 -3
  126. package/lib/types/ink/ink.d.ts.map +1 -1
  127. package/lib/types/ink/ink.js +57 -5
  128. package/lib/types/ink/log-update.d.ts.map +1 -1
  129. package/lib/types/ink/log-update.js +128 -9
  130. package/lib/types/ink/output.d.ts +28 -2
  131. package/lib/types/ink/output.d.ts.map +1 -1
  132. package/lib/types/ink/output.js +158 -12
  133. package/lib/types/ink/screen.d.ts +39 -0
  134. package/lib/types/ink/screen.d.ts.map +1 -1
  135. package/lib/types/ink/screen.js +117 -0
  136. package/lib/types/ink/terminal.d.ts.map +1 -1
  137. package/lib/types/ink/terminal.js +10 -2
  138. package/lib/types/ink/wrapAnsi.d.ts +1 -1
  139. package/lib/types/ink/wrapAnsi.d.ts.map +1 -1
  140. package/lib/types/ink/wrapAnsi.js +29 -2
  141. package/lib/types/plugin-host.d.ts +13 -11
  142. package/lib/types/plugin-host.d.ts.map +1 -1
  143. package/lib/types/plugin-host.js +16 -16
  144. package/lib/types/plugin-spec/registry.d.ts +2 -2
  145. package/lib/types/plugin-spec/registry.d.ts.map +1 -1
  146. package/lib/types/plugin-spec/registry.js +113 -18
  147. package/lib/types/plugin-spec/tui-extension.d.ts.map +1 -1
  148. package/lib/types/plugin-spec/tui-extension.js +2 -0
  149. package/lib/types/plugin-spec/validate.d.ts.map +1 -1
  150. package/lib/types/plugin-spec/validate.js +20 -1
  151. package/lib/types/scenes.d.ts +2 -1
  152. package/lib/types/scenes.d.ts.map +1 -1
  153. package/lib/types/scenes.js +1 -1
  154. package/lib/types/screens/Chat.d.ts +3 -3
  155. package/lib/types/screens/Chat.d.ts.map +1 -1
  156. package/lib/types/screens/Chat.js +38 -17
  157. package/lib/types/screens/SessionBrowser.d.ts.map +1 -1
  158. package/lib/types/screens/SessionBrowser.js +10 -3
  159. package/lib/types/sessions/view.d.ts +3 -2
  160. package/lib/types/sessions/view.d.ts.map +1 -1
  161. package/lib/types/sessions/view.js +18 -0
  162. package/lib/types/settings-sections.d.ts +2 -1
  163. package/lib/types/settings-sections.d.ts.map +1 -1
  164. package/lib/types/settings-sections.js +1 -1
  165. package/lib/types/utils/execFileNoThrow.d.ts.map +1 -1
  166. package/lib/types/utils/execFileNoThrow.js +3 -0
  167. package/lib/types/workspaces.d.ts +2 -1
  168. package/lib/types/workspaces.d.ts.map +1 -1
  169. package/lib/types/workspaces.js +1 -1
  170. package/node_modules/@dsh-std/command/CHANGELOG.md +8 -0
  171. package/node_modules/@dsh-std/command/package.json +1 -1
  172. package/node_modules/@dsh-std/connection/CHANGELOG.md +8 -0
  173. package/node_modules/@dsh-std/connection/lib/memory.d.ts +1 -1
  174. package/node_modules/@dsh-std/connection/lib/memory.d.ts.map +1 -1
  175. package/node_modules/@dsh-std/connection/lib/memory.js +1 -0
  176. package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  177. package/node_modules/@dsh-std/connection/package.json +1 -1
  178. package/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  179. package/node_modules/@dsh-std/core/package.json +1 -1
  180. package/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -0
  181. package/node_modules/@dsh-std/manifest/package.json +1 -1
  182. package/node_modules/@dsh-std/messages/CHANGELOG.md +8 -0
  183. package/node_modules/@dsh-std/messages/package.json +1 -1
  184. package/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -0
  185. package/node_modules/@dsh-std/presentation/README.md +2 -1
  186. package/node_modules/@dsh-std/presentation/README.zh.md +2 -1
  187. package/node_modules/@dsh-std/presentation/lib/callback.d.ts +2 -0
  188. package/node_modules/@dsh-std/presentation/lib/callback.js +179 -0
  189. package/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -0
  190. package/node_modules/@dsh-std/presentation/lib/index.d.ts +44 -1
  191. package/node_modules/@dsh-std/presentation/lib/index.d.ts.map +1 -1
  192. package/node_modules/@dsh-std/presentation/lib/index.js +6 -3
  193. package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  194. package/node_modules/@dsh-std/presentation/package.json +7 -3
  195. package/node_modules/@dsh-std/storage/CHANGELOG.md +8 -0
  196. package/node_modules/@dsh-std/storage/package.json +1 -1
  197. package/package.json +10 -5
  198. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/CHANGELOG.md +8 -0
  199. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.d.ts +1 -1
  200. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.d.ts.map +1 -1
  201. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js +1 -0
  202. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  203. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +1 -1
  204. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  205. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +1 -1
  206. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -0
  207. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +1 -1
  208. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -0
  209. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +2 -1
  210. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +2 -1
  211. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.d.ts +2 -0
  212. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js +179 -0
  213. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -0
  214. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.d.ts +44 -1
  215. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.d.ts.map +1 -1
  216. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js +6 -3
  217. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  218. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +7 -3
  219. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  220. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +1 -1
  221. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  222. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +1 -1
  223. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  224. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +1 -1
  225. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/CHANGELOG.md +8 -0
  226. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.d.ts +1 -1
  227. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.d.ts.map +1 -1
  228. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js +1 -0
  229. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  230. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +1 -1
  231. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  232. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +1 -1
  233. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  234. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/package.json +1 -1
  235. package/ecosystem-spec/registry/registry-0.15.json +0 -57
  236. /package/{ecosystem-spec → dsh-ecosystem-spec}/registry/contracts/decision-events-v1alpha1.json +0 -0
  237. /package/{ecosystem-spec → dsh-ecosystem-spec}/registry/host-descriptor.tui.example.json +0 -0
  238. /package/{ecosystem-spec → dsh-ecosystem-spec}/schemas/conformance-claim.schema.json +0 -0
  239. /package/{ecosystem-spec → dsh-ecosystem-spec}/schemas/effect-ledger-record.schema.json +0 -0
  240. /package/{ecosystem-spec → dsh-ecosystem-spec}/schemas/host-descriptor.schema.json +0 -0
@@ -1,5 +1,7 @@
1
1
  /** Provider-neutral full-screen scene registry for terminal front doors. */
2
2
  import { Service } from '@deepseek-ai/cordis';
3
+ import { activationFiber, bindCallerEffect, compositionRoot, concreteService, requirePluginCaller } from './host-access.js';
4
+ import { componentIdentityOf } from './component-identity.js';
3
5
  export const name = 'dsh-tui-scenes';
4
6
  /**
5
7
  * Small host-only registry; command execution remains owned by dsh-commands.
@@ -11,11 +13,33 @@ export const name = 'dsh-tui-scenes';
11
13
  * takes the whole terminal the way the trajectory scene does.
12
14
  */
13
15
  export class TuiSceneRuntime extends Service {
14
- scenes = new Map();
15
- listeners = new Set();
16
- current;
17
16
  constructor(ctx) {
18
17
  super(ctx, 'tuiScenes');
18
+ compositionRoot(ctx);
19
+ const runtime = this;
20
+ const state = {
21
+ scenes: new Map(),
22
+ owners: new Map(),
23
+ listeners: new Set(),
24
+ current: undefined,
25
+ host: undefined,
26
+ logger: ctx.logger,
27
+ };
28
+ state.host = Object.freeze({
29
+ get active() {
30
+ return sceneStateFor(runtime).current;
31
+ },
32
+ open(id) {
33
+ return openScene(runtime, id);
34
+ },
35
+ close() {
36
+ closeScene(runtime);
37
+ },
38
+ subscribe(listener) {
39
+ return subscribeScenes(runtime, listener);
40
+ },
41
+ });
42
+ sceneStates.set(this, state);
19
43
  }
20
44
  /**
21
45
  * Register a full-screen scene; returns the dispose function (caller
@@ -24,11 +48,21 @@ export class TuiSceneRuntime extends Service {
24
48
  * records `undeclared` (C-060).
25
49
  */
26
50
  register(descriptor, identity) {
51
+ const state = sceneStateFor(this);
52
+ const caller = requirePluginCaller(this.ctx, 'tuiScenes.register', this);
53
+ const activationOwner = activationFiber(caller);
54
+ if (activationOwner === undefined)
55
+ throw new Error('dsh-tui: tuiScenes.register requires a live activation');
56
+ const callerIdentity = componentIdentityOf(caller);
57
+ const suppliedIdentity = identity === undefined ? callerIdentity : componentIdentityOf(identity);
58
+ if (identity !== undefined && callerIdentity !== undefined && suppliedIdentity !== callerIdentity) {
59
+ throw new Error('dsh-tui: tuiScenes.register identity belongs to another activation');
60
+ }
27
61
  const id = descriptor.id.trim().toLowerCase();
28
62
  if (!/^[a-z][a-z0-9_-]*$/u.test(id))
29
63
  throw new TypeError(`invalid TUI scene id: ${descriptor.id}`);
30
- if (this.scenes.has(id)) {
31
- this.ctx.get('tuiEffectLedger')?.record({
64
+ if (state.scenes.has(id)) {
65
+ caller.get('tuiEffectLedger')?.record({
32
66
  operation: 'create',
33
67
  resource: { kind: 'scene', id },
34
68
  result: 'failed',
@@ -36,20 +70,24 @@ export class TuiSceneRuntime extends Service {
36
70
  }, identity);
37
71
  throw new Error(`TUI scene "${id}" is already registered`);
38
72
  }
39
- const normalized = { ...descriptor, id };
40
- this.scenes.set(id, normalized);
41
- this.ctx.get('tuiEffectLedger')?.record({ operation: 'create', resource: { kind: 'scene', id }, result: 'applied' }, identity);
42
- return () => {
43
- if (this.scenes.get(id) !== normalized)
73
+ const normalized = Object.freeze({ ...descriptor, id });
74
+ state.scenes.set(id, normalized);
75
+ state.owners.set(id, activationOwner);
76
+ caller.get('tuiEffectLedger')?.record({ operation: 'create', resource: { kind: 'scene', id }, result: 'applied' }, identity);
77
+ const dispose = () => {
78
+ if (state.scenes.get(id) !== normalized)
44
79
  return;
45
- this.scenes.delete(id);
46
- this.ctx.get('tuiEffectLedger')?.record({ operation: 'release', resource: { kind: 'scene', id }, result: 'applied' }, identity);
80
+ state.scenes.delete(id);
81
+ state.owners.delete(id);
82
+ caller.get('tuiEffectLedger')?.record({ operation: 'release', resource: { kind: 'scene', id }, result: 'applied' }, identity);
47
83
  // Disposing the open scene must not strand the user on a dead screen.
48
- if (this.current === normalized) {
49
- this.current = undefined;
50
- this.notify();
84
+ if (state.current === normalized) {
85
+ state.current = undefined;
86
+ notifyScenes(state, activationOwner);
51
87
  }
52
88
  };
89
+ bindCallerEffect(caller, dispose);
90
+ return dispose;
53
91
  }
54
92
  /**
55
93
  * Swap the conversation for the named scene. Returns false (and warns)
@@ -57,37 +95,98 @@ export class TuiSceneRuntime extends Service {
57
95
  * the log, not silently do nothing in the UI.
58
96
  */
59
97
  open(id) {
60
- const scene = this.scenes.get(id.trim().toLowerCase());
61
- if (scene === undefined) {
62
- this.ctx.logger.warn(`dsh-tui: no TUI scene registered as "${id}"`);
63
- return false;
64
- }
65
- if (scene === this.current)
66
- return true;
67
- this.current = scene;
68
- this.notify();
69
- return true;
98
+ const caller = requirePluginCaller(this.ctx, 'tuiScenes.open', this);
99
+ const owner = activationFiber(caller);
100
+ return owner === undefined ? false : openScene(this, id, caller, owner);
70
101
  }
71
102
  close() {
72
- if (this.current === undefined)
73
- return;
74
- this.current = undefined;
75
- this.notify();
103
+ const caller = requirePluginCaller(this.ctx, 'tuiScenes.close', this);
104
+ const owner = activationFiber(caller);
105
+ if (owner !== undefined)
106
+ closeScene(this, caller, owner);
76
107
  }
77
108
  /** The scene currently replacing the conversation, if any. */
78
109
  get active() {
79
- return this.current;
110
+ const caller = requirePluginCaller(this.ctx, 'tuiScenes.active', this);
111
+ const owner = activationFiber(caller);
112
+ const state = sceneStateFor(this);
113
+ return owner !== undefined && state.current !== undefined && state.owners.get(state.current.id) === owner
114
+ ? state.current
115
+ : undefined;
80
116
  }
81
117
  /** UI-side change feed: fired after every open/close/dispose transition. */
82
118
  subscribe(listener) {
83
- this.listeners.add(listener);
84
- return () => {
85
- this.listeners.delete(listener);
86
- };
119
+ const caller = requirePluginCaller(this.ctx, 'tuiScenes.subscribe', this);
120
+ const owner = activationFiber(caller);
121
+ if (owner === undefined)
122
+ return () => { };
123
+ const dispose = subscribeScenes(this, listener, owner);
124
+ bindCallerEffect(caller, dispose);
125
+ return dispose;
126
+ }
127
+ }
128
+ const sceneStates = new WeakMap();
129
+ function sceneStateFor(runtime) {
130
+ const state = sceneStates.get(concreteService(runtime));
131
+ if (state === undefined)
132
+ throw new Error('tuiScenes host state is unavailable');
133
+ return state;
134
+ }
135
+ function openScene(runtime, id, caller, owner) {
136
+ const state = sceneStateFor(runtime);
137
+ const scene = state.scenes.get(id.trim().toLowerCase());
138
+ if (scene === undefined) {
139
+ ;
140
+ (caller?.logger ?? state.logger).warn(`dsh-tui: no TUI scene registered as "${id}"`);
141
+ return false;
142
+ }
143
+ if (owner !== undefined && state.owners.get(scene.id) !== owner) {
144
+ caller?.logger.warn(`dsh-tui: scene "${scene.id}" belongs to another activation`);
145
+ return false;
146
+ }
147
+ if (scene === state.current)
148
+ return true;
149
+ const previousOwner = state.current === undefined ? undefined : state.owners.get(state.current.id);
150
+ state.current = scene;
151
+ notifyScenes(state, previousOwner);
152
+ return true;
153
+ }
154
+ function closeScene(runtime, caller, owner) {
155
+ const state = sceneStateFor(runtime);
156
+ if (state.current === undefined)
157
+ return;
158
+ if (owner !== undefined && state.owners.get(state.current.id) !== owner) {
159
+ caller?.logger.warn(`dsh-tui: scene "${state.current.id}" belongs to another activation`);
160
+ return;
161
+ }
162
+ const previousOwner = state.owners.get(state.current.id);
163
+ state.current = undefined;
164
+ notifyScenes(state, previousOwner);
165
+ }
166
+ function subscribeScenes(runtime, listener, owner) {
167
+ const state = sceneStateFor(runtime);
168
+ const entry = { owner, listener };
169
+ state.listeners.add(entry);
170
+ return () => {
171
+ state.listeners.delete(entry);
172
+ };
173
+ }
174
+ function notifyScenes(state, previousOwner) {
175
+ const currentOwner = state.current === undefined ? undefined : state.owners.get(state.current.id);
176
+ for (const entry of state.listeners) {
177
+ if (entry.owner !== undefined && entry.owner !== currentOwner && entry.owner !== previousOwner)
178
+ continue;
179
+ entry.listener();
180
+ }
181
+ }
182
+ export function getHostSceneRuntime(runtime) {
183
+ if (runtime === undefined)
184
+ return undefined;
185
+ try {
186
+ return sceneStateFor(runtime).host ?? undefined;
87
187
  }
88
- notify() {
89
- for (const listener of this.listeners)
90
- listener();
188
+ catch {
189
+ return undefined;
91
190
  }
92
191
  }
93
192
  export default TuiSceneRuntime;
@@ -86,6 +86,12 @@ export interface TuiSettingsSection {
86
86
  /** Editable fields, in display order. */
87
87
  fields: readonly TuiSettingsField[];
88
88
  }
89
+ /** Host-only settings-section controls used by the TUI bootstrap/channel. */
90
+ export interface TuiSettingsSectionsHost {
91
+ register(section: TuiSettingsSection): () => void;
92
+ list(): readonly TuiSettingsSection[];
93
+ subscribe(listener: () => void): () => void;
94
+ }
89
95
  declare module '@deepseek-ai/cordis' {
90
96
  interface Context {
91
97
  tuiSettingsSections: TuiSettingsSectionsRuntime;
@@ -97,8 +103,6 @@ export declare const name = "dsh-tui-settings-sections";
97
103
  * the dsh settings service (`ctx.settings`).
98
104
  */
99
105
  export declare class TuiSettingsSectionsRuntime extends Service {
100
- private readonly sections;
101
- private readonly listeners;
102
106
  constructor(ctx: Context);
103
107
  register(section: TuiSettingsSection): () => void;
104
108
  /** Registered sections in registration order. */
@@ -110,7 +114,7 @@ export declare class TuiSettingsSectionsRuntime extends Service {
110
114
  * re-read the section list (a plugin (un)loading mid-session changes it).
111
115
  */
112
116
  subscribe(listener: () => void): () => void;
113
- private emit;
114
117
  }
118
+ export declare function getHostSettingsSections(runtime: TuiSettingsSectionsRuntime | undefined): TuiSettingsSectionsHost | undefined;
115
119
  export default TuiSettingsSectionsRuntime;
116
120
  //# sourceMappingURL=settings-sections.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-sections.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/settings-sections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE3D,iEAAiE;AACjE,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE3E,MAAM,WAAW,sBAAsB;IACrC,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,YAAY,CAAC,EAAE,qBAAqB,CAAA;CACrC;AAED,oEAAoE;AACpE,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAErB,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IACvB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,qBAAqB,CAAA;IACxC,IAAI,EAAE,oBAAoB,CAAA;IAC1B,wDAAwD;IACxD,OAAO,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAC3C,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACxB;;;OAGG;IACH,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;IAC/B;;;;;;OAMG;IACH,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAA;CACxD;AAED,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAA;IACV,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,yCAAyC;IACzC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAA;CACpC;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,mBAAmB,EAAE,0BAA0B,CAAA;KAChD;CACF;AAED,eAAO,MAAM,IAAI,8BAA8B,CAAA;AAE/C;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,OAAO;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;gBAEtC,GAAG,EAAE,OAAO;IAIxB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAejD,iDAAiD;IACjD,IAAI,IAAI,SAAS,kBAAkB,EAAE;IAIrC,sDAAsD;IACtD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAInD;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAO3C,OAAO,CAAC,IAAI;CAGb;AAED,eAAe,0BAA0B,CAAA"}
1
+ {"version":3,"file":"settings-sections.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/settings-sections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAG3D,iEAAiE;AACjE,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE3E,MAAM,WAAW,sBAAsB;IACrC,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,YAAY,CAAC,EAAE,qBAAqB,CAAA;CACrC;AAED,oEAAoE;AACpE,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAErB,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IACvB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,qBAAqB,CAAA;IACxC,IAAI,EAAE,oBAAoB,CAAA;IAC1B,wDAAwD;IACxD,OAAO,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAC3C,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACxB;;;OAGG;IACH,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;IAC/B;;;;;;OAMG;IACH,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAA;CACxD;AAED,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAA;IACV,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,yCAAyC;IACzC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAA;CACpC;AAED,6EAA6E;AAC7E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAA;IACjD,IAAI,IAAI,SAAS,kBAAkB,EAAE,CAAA;IACrC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC5C;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,mBAAmB,EAAE,0BAA0B,CAAA;KAChD;CACF;AAED,eAAO,MAAM,IAAI,8BAA8B,CAAA;AAE/C;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,OAAO;gBACzC,GAAG,EAAE,OAAO;IAmBxB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI;IASjD,iDAAiD;IACjD,IAAI,IAAI,SAAS,kBAAkB,EAAE;IAQrC,sDAAsD;IACtD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAQnD;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;CAS5C;AAgED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,0BAA0B,GAAG,SAAS,GAAG,uBAAuB,GAAG,SAAS,CAO5H;AAED,eAAe,0BAA0B,CAAA"}
@@ -10,54 +10,134 @@
10
10
  * metadata only.
11
11
  */
12
12
  import { Service } from '@deepseek-ai/cordis';
13
+ import { activationFiber, bindCallerEffect, compositionRoot, concreteService, requirePluginCaller } from './host-access.js';
13
14
  export const name = 'dsh-tui-settings-sections';
14
15
  /**
15
16
  * Small host-only registry; settings storage and validation remain owned by
16
17
  * the dsh settings service (`ctx.settings`).
17
18
  */
18
19
  export class TuiSettingsSectionsRuntime extends Service {
19
- sections = new Map();
20
- listeners = new Set();
21
20
  constructor(ctx) {
22
21
  super(ctx, 'tuiSettingsSections');
22
+ compositionRoot(ctx);
23
+ const runtime = this;
24
+ const state = { sections: new Map(), owners: new Map(), listeners: new Set(), host: undefined };
25
+ state.host = Object.freeze({
26
+ register(section) {
27
+ return registerSection(runtime, section);
28
+ },
29
+ list() {
30
+ return [...settingsSectionStateFor(runtime).sections.values()];
31
+ },
32
+ subscribe(listener) {
33
+ return subscribeSections(runtime, listener);
34
+ },
35
+ });
36
+ settingsSectionStates.set(this, state);
23
37
  }
24
38
  register(section) {
25
- const ns = section.ns.trim();
26
- if (!/^[a-z][a-z0-9_-]*$/u.test(ns))
27
- throw new TypeError(`invalid TUI settings-section namespace: ${section.ns}`);
28
- if (this.sections.has(ns))
29
- throw new Error(`TUI settings section "${ns}" is already registered`);
30
- const normalized = { ...section, ns };
31
- this.sections.set(ns, normalized);
32
- this.emit();
33
- return () => {
34
- if (this.sections.get(ns) === normalized) {
35
- this.sections.delete(ns);
36
- this.emit();
37
- }
38
- };
39
+ const caller = requirePluginCaller(this.ctx, 'tuiSettingsSections.register', this);
40
+ const owner = activationFiber(caller);
41
+ if (owner === undefined)
42
+ throw new Error('dsh-tui: tuiSettingsSections.register requires a live activation');
43
+ const dispose = registerSection(this, section, owner);
44
+ bindCallerEffect(caller, dispose);
45
+ return dispose;
39
46
  }
40
47
  /** Registered sections in registration order. */
41
48
  list() {
42
- return [...this.sections.values()];
49
+ const caller = requirePluginCaller(this.ctx, 'tuiSettingsSections.list', this);
50
+ const owner = activationFiber(caller);
51
+ return owner === undefined ? [] : [...settingsSectionStateFor(this).sections.entries()]
52
+ .filter(([ns]) => settingsSectionStateFor(this).owners.get(ns) === owner)
53
+ .map(([, section]) => section);
43
54
  }
44
55
  /** The section registered for a namespace, if any. */
45
56
  section(ns) {
46
- return this.sections.get(ns.trim());
57
+ const caller = requirePluginCaller(this.ctx, 'tuiSettingsSections.section', this);
58
+ const owner = activationFiber(caller);
59
+ const state = settingsSectionStateFor(this);
60
+ const normalized = ns.trim();
61
+ return owner !== undefined && state.owners.get(normalized) === owner ? state.sections.get(normalized) : undefined;
47
62
  }
48
63
  /**
49
64
  * Subscribe to register/unregister events so an open settings screen can
50
65
  * re-read the section list (a plugin (un)loading mid-session changes it).
51
66
  */
52
67
  subscribe(listener) {
53
- this.listeners.add(listener);
54
- return () => {
55
- this.listeners.delete(listener);
56
- };
57
- }
58
- emit() {
59
- for (const listener of this.listeners)
60
- listener();
68
+ const caller = requirePluginCaller(this.ctx, 'tuiSettingsSections.subscribe', this);
69
+ const owner = activationFiber(caller);
70
+ if (owner === undefined)
71
+ return () => { };
72
+ const dispose = subscribeSections(this, listener, owner);
73
+ bindCallerEffect(caller, dispose);
74
+ return dispose;
75
+ }
76
+ }
77
+ const settingsSectionStates = new WeakMap();
78
+ function settingsSectionStateFor(runtime) {
79
+ const state = settingsSectionStates.get(concreteService(runtime));
80
+ if (state === undefined)
81
+ throw new Error('tuiSettingsSections host state is unavailable');
82
+ return state;
83
+ }
84
+ function registerSection(runtime, section, owner) {
85
+ const state = settingsSectionStateFor(runtime);
86
+ const ns = section.ns.trim();
87
+ if (!/^[a-z][a-z0-9_-]*$/u.test(ns))
88
+ throw new TypeError(`invalid TUI settings-section namespace: ${section.ns}`);
89
+ if (state.sections.has(ns))
90
+ throw new Error(`TUI settings section "${ns}" is already registered`);
91
+ const normalized = Object.freeze({
92
+ ...section,
93
+ ns,
94
+ descriptions: section.descriptions === undefined ? undefined : Object.freeze({ ...section.descriptions }),
95
+ fields: Object.freeze(section.fields.map(field => Object.freeze({
96
+ ...field,
97
+ path: Object.freeze([...field.path]),
98
+ descriptions: field.descriptions === undefined ? undefined : Object.freeze({ ...field.descriptions }),
99
+ hintDescriptions: field.hintDescriptions === undefined ? undefined : Object.freeze({ ...field.hintDescriptions }),
100
+ options: field.options === undefined
101
+ ? undefined
102
+ : Object.freeze(field.options.map(option => Object.freeze({ ...option, descriptions: option.descriptions === undefined ? undefined : Object.freeze({ ...option.descriptions }) }))),
103
+ secret: field.secret === undefined ? undefined : Object.freeze({ ...field.secret }),
104
+ }))),
105
+ });
106
+ state.sections.set(ns, normalized);
107
+ if (owner !== undefined)
108
+ state.owners.set(ns, owner);
109
+ emitSections(state, owner);
110
+ return () => {
111
+ if (state.sections.get(ns) !== normalized)
112
+ return;
113
+ state.sections.delete(ns);
114
+ state.owners.delete(ns);
115
+ emitSections(state, owner);
116
+ };
117
+ }
118
+ function subscribeSections(runtime, listener, owner) {
119
+ const state = settingsSectionStateFor(runtime);
120
+ const entry = { owner, listener };
121
+ state.listeners.add(entry);
122
+ return () => {
123
+ state.listeners.delete(entry);
124
+ };
125
+ }
126
+ function emitSections(state, changedOwner) {
127
+ for (const entry of state.listeners) {
128
+ if (entry.owner !== undefined && entry.owner !== changedOwner)
129
+ continue;
130
+ entry.listener();
131
+ }
132
+ }
133
+ export function getHostSettingsSections(runtime) {
134
+ if (runtime === undefined)
135
+ return undefined;
136
+ try {
137
+ return settingsSectionStateFor(runtime).host ?? undefined;
138
+ }
139
+ catch {
140
+ return undefined;
61
141
  }
62
142
  }
63
143
  export default TuiSettingsSectionsRuntime;
@@ -42,6 +42,13 @@ export interface TuiShortcutKey {
42
42
  pageUp?: boolean;
43
43
  pageDown?: boolean;
44
44
  }
45
+ /** Controls that only the Chat input path may use. They are kept out of the
46
+ * Cordis service object, so one plugin cannot synthesize an input event to
47
+ * invoke another plugin's shortcut handler. */
48
+ export interface TuiShortcutHost {
49
+ dispatch(input: string, key: TuiShortcutKey): boolean;
50
+ setErrorHandler(handler: (combo: string, error: unknown) => void): () => void;
51
+ }
45
52
  export interface TuiShortcutOptions {
46
53
  /** One-line description (shown by future /help surfaces; required so
47
54
  * every binding is discoverable). */
@@ -74,10 +81,6 @@ declare module '@deepseek-ai/cordis' {
74
81
  }
75
82
  /** `ctx.tuiShortcuts` — plugin keyboard shortcut registry. */
76
83
  export declare class TuiShortcutRuntime extends Service {
77
- private readonly shortcuts;
78
- /** Handler invocation errors are surfaced through this hook — the chat
79
- * screen wires it to its notification toast. */
80
- onError: ((combo: string, error: unknown) => void) | undefined;
81
84
  constructor(ctx: Context);
82
85
  /**
83
86
  * Bind `combo` to `handler`. Invalid, modifier-less, reserved, or
@@ -98,12 +101,7 @@ export declare class TuiShortcutRuntime extends Service {
98
101
  combo: string;
99
102
  description: string;
100
103
  }[];
101
- /**
102
- * Match a keypress; on a hit, run the handler and return true (the UI
103
- * consumes the key). Handler rejections are caught and reported through
104
- * {@link onError} — never propagated into the input path.
105
- */
106
- dispatch(input: string, key: TuiShortcutKey): boolean;
107
104
  }
105
+ export declare function getHostShortcuts(runtime: TuiShortcutRuntime | undefined): TuiShortcutHost | undefined;
108
106
  export default TuiShortcutRuntime;
109
107
  //# sourceMappingURL=shortcuts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shortcuts.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/shortcuts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGtD;;iCAEiC;AACjC,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC;0CACsC;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,cAAc,CAAA;IACrC,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AA6DD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CA8CvE;AAkBD;mEACmE;AACnE,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAiB7F;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,YAAY,EAAE,kBAAkB,CAAA;KACjC;CACF;AAED,8DAA8D;AAC9D,qBAAa,kBAAmB,SAAQ,OAAO;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAClE;qDACiD;IACjD,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;gBAElD,GAAG,EAAE,OAAO;IAIxB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,IAAI;IAoDpF,wEAAwE;IACxE,IAAI,IAAI,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE;IAIzD;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO;CAatD;AAED,eAAe,kBAAkB,CAAA"}
1
+ {"version":3,"file":"shortcuts.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/shortcuts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAItD;;iCAEiC;AACjC,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;+CAE+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAA;IACrD,eAAe,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC9E;AAED,MAAM,WAAW,kBAAkB;IACjC;0CACsC;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,cAAc,CAAA;IACrC,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AA6DD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CA8CvE;AAkBD;mEACmE;AACnE,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAiB7F;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,YAAY,EAAE,kBAAkB,CAAA;KACjC;CACF;AAED,8DAA8D;AAC9D,qBAAa,kBAAmB,SAAQ,OAAO;gBACjC,GAAG,EAAE,OAAO;IAwBxB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,IAAI;IAmFpF,wEAAwE;IACxE,IAAI,IAAI,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE;CAS1D;AAmCD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CAOrG;AAED,eAAe,kBAAkB,CAAA"}