@chengxianglibra/dsh-data-analysis 0.1.1 → 0.2.0

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 (303) hide show
  1. package/README.md +139 -53
  2. package/cordis.patch.yml +1 -1
  3. package/lib/bin/environment.js +9 -7
  4. package/lib/bin/presentation-lint.js +21 -0
  5. package/lib/bridges.js +2 -2
  6. package/lib/client/credentials/changes.js +74 -0
  7. package/lib/client/credentials/create-datasource.js +171 -0
  8. package/lib/client/credentials/credential-draft.js +42 -0
  9. package/lib/client/credentials/defaults.js +11 -0
  10. package/lib/client/credentials/descriptions.js +46 -0
  11. package/lib/client/credentials/install.js +319 -0
  12. package/lib/client/credentials/model.js +766 -0
  13. package/lib/client/credentials/report-publishing.js +96 -0
  14. package/lib/client/credentials/styles.js +21 -0
  15. package/lib/client/i18n/context.js +22 -0
  16. package/lib/client/i18n/copy.js +57 -0
  17. package/lib/client/i18n/credentials.js +475 -0
  18. package/lib/client/i18n/host.js +27 -0
  19. package/lib/client/i18n/navigation.js +41 -0
  20. package/lib/client/i18n/presentation.js +577 -0
  21. package/lib/client/i18n/python.js +36 -0
  22. package/lib/client/i18n/semantic.js +441 -0
  23. package/lib/client/input-context.js +21 -0
  24. package/lib/client/python-tool/card.js +35 -0
  25. package/lib/client/python-tool/execution-error.js +35 -0
  26. package/lib/client/python-tool/install.js +9 -0
  27. package/lib/client/python-tool/model.js +101 -0
  28. package/lib/client/right-tabs/install.js +535 -0
  29. package/lib/client/right-tabs/live-delivery.js +58 -0
  30. package/lib/client/right-tabs/navigation.js +47 -0
  31. package/lib/client/right-tabs/page.js +178 -0
  32. package/lib/client/right-tabs/styles.js +11 -0
  33. package/lib/client/rpc.js +5 -0
  34. package/lib/client/semantic-reference.js +10 -0
  35. package/lib/client/workspace-header-action.js +24 -0
  36. package/lib/client/workspace-shortcuts.js +26 -0
  37. package/lib/client.js +1250 -730
  38. package/lib/compatibility.js +2 -2
  39. package/lib/datasource/authoring.js +109 -0
  40. package/lib/datasource/bridge-programs.js +42 -27
  41. package/lib/datasource/bridge.js +144 -9
  42. package/lib/datasource/changes-contract.js +41 -0
  43. package/lib/datasource/changes.js +49 -0
  44. package/lib/datasource/configure.js +39 -0
  45. package/lib/datasource/defaults.js +25 -0
  46. package/lib/datasource/index.js +4 -2
  47. package/lib/datasource/python-options.js +21 -0
  48. package/lib/datasource/python.js +206 -0
  49. package/lib/datasource/resolver-program.js +112 -0
  50. package/lib/datasource/rpc.js +150 -0
  51. package/lib/datasource/service.js +962 -0
  52. package/lib/datasource/shell-env.js +2 -333
  53. package/lib/datasource/test.js +25 -51
  54. package/lib/disclosure/activation.js +19 -7
  55. package/lib/disclosure/execution-guidance.js +52 -0
  56. package/lib/disclosure/help.js +4 -1
  57. package/lib/environment/binding.js +54 -9
  58. package/lib/environment/runtime.js +120 -108
  59. package/lib/environment/subprocess.js +6 -1
  60. package/lib/environment/summary.js +3 -3
  61. package/lib/environment/workspace.js +23 -1
  62. package/lib/index.js +1 -1
  63. package/lib/lifecycle.js +33 -0
  64. package/lib/plugin-agents.js +154 -0
  65. package/lib/plugin.js +172 -133
  66. package/lib/presentation/asset.js +34 -0
  67. package/lib/presentation/assets/portable.js +606 -0
  68. package/lib/presentation/assets/static.js +1216 -0
  69. package/lib/presentation/build/index.js +72 -0
  70. package/lib/presentation/commit.js +163 -0
  71. package/lib/presentation/contracts/asset-path.js +9 -0
  72. package/lib/presentation/contracts/catalog.js +62 -0
  73. package/lib/presentation/contracts/charts.js +453 -0
  74. package/lib/presentation/contracts/editing.js +58 -0
  75. package/lib/presentation/contracts/index.js +663 -0
  76. package/lib/presentation/contracts/interaction.js +62 -0
  77. package/lib/presentation/contracts/types.js +15 -0
  78. package/lib/presentation/contracts/values.js +28 -0
  79. package/lib/presentation/delivery.js +71 -0
  80. package/lib/presentation/export-html.js +214 -0
  81. package/lib/presentation/files.js +82 -0
  82. package/lib/presentation/index.js +6 -0
  83. package/lib/presentation/lint.js +46 -0
  84. package/lib/presentation/projection/files.js +85 -0
  85. package/lib/presentation/projection/index.js +196 -0
  86. package/lib/presentation/projection/program.js +137 -0
  87. package/lib/presentation/projection/sql-code.js +79 -0
  88. package/lib/presentation/receipt.js +34 -0
  89. package/lib/presentation/reports.js +219 -0
  90. package/lib/presentation/rpc.js +186 -0
  91. package/lib/presentation/tool.js +118 -0
  92. package/lib/python-execution-contracts.js +1 -0
  93. package/lib/python-execution.js +232 -0
  94. package/lib/report-publishing/adapters.js +111 -0
  95. package/lib/report-publishing/config.js +69 -0
  96. package/lib/report-publishing/service.js +180 -0
  97. package/lib/rpc.js +49 -0
  98. package/lib/semantic-browser/contracts.js +97 -0
  99. package/lib/semantic-browser/definition.js +64 -0
  100. package/lib/semantic-browser/program.js +129 -0
  101. package/lib/semantic-browser/service.js +106 -0
  102. package/lib/semantic-reference/bridge.js +127 -0
  103. package/lib/semantic-reference/contracts.js +127 -0
  104. package/lib/semantic-reference/environment.js +56 -0
  105. package/lib/semantic-reference/index.js +3 -0
  106. package/lib/semantic-reference/labels.js +16 -0
  107. package/lib/semantic-reference/rpc.js +143 -0
  108. package/lib/semantic-reference/search.js +95 -0
  109. package/lib/semantic-reference/usage.js +152 -0
  110. package/lib/tool-lifecycle.js +22 -0
  111. package/lib/types/bridges.d.ts +2 -2
  112. package/lib/types/client/credentials/changes.d.ts +9 -0
  113. package/lib/types/client/credentials/create-datasource.d.ts +7 -0
  114. package/lib/types/client/credentials/credential-draft.d.ts +14 -0
  115. package/lib/types/client/credentials/defaults.d.ts +2 -0
  116. package/lib/types/client/credentials/descriptions.d.ts +1 -0
  117. package/lib/types/client/credentials/install.d.ts +19 -0
  118. package/lib/types/client/credentials/model.d.ts +79 -0
  119. package/lib/types/client/credentials/report-publishing.d.ts +5 -0
  120. package/lib/types/client/credentials/styles.d.ts +1 -0
  121. package/lib/types/client/i18n/context.d.ts +17 -0
  122. package/lib/types/client/i18n/copy.d.ts +806 -0
  123. package/lib/types/client/i18n/credentials.d.ts +475 -0
  124. package/lib/types/client/i18n/host.d.ts +16 -0
  125. package/lib/types/client/i18n/navigation.d.ts +41 -0
  126. package/lib/types/client/i18n/presentation.d.ts +577 -0
  127. package/lib/types/client/i18n/python.d.ts +19 -0
  128. package/lib/types/client/i18n/semantic.d.ts +441 -0
  129. package/lib/types/client/input-context.d.ts +19 -0
  130. package/lib/types/client/presentation/ask-dsh.d.ts +5 -0
  131. package/lib/types/client/presentation/catalog-model.d.ts +24 -0
  132. package/lib/types/client/presentation/catalog.d.ts +20 -0
  133. package/lib/types/client/presentation/chart-explorer.d.ts +12 -0
  134. package/lib/types/client/presentation/chart-geometry.d.ts +30 -0
  135. package/lib/types/client/presentation/chart-renderer.d.ts +10 -0
  136. package/lib/types/client/presentation/chart-specials.d.ts +10 -0
  137. package/lib/types/client/presentation/chart-styles.d.ts +1 -0
  138. package/lib/types/client/presentation/chart-tooltip.d.ts +13 -0
  139. package/lib/types/client/presentation/chart-view.d.ts +23 -0
  140. package/lib/types/client/presentation/context-reference.d.ts +12 -0
  141. package/lib/types/client/presentation/copy-context.d.ts +5 -0
  142. package/lib/types/client/presentation/delivery-model.d.ts +75 -0
  143. package/lib/types/client/presentation/delivery.d.ts +78 -0
  144. package/lib/types/client/presentation/download.d.ts +2 -0
  145. package/lib/types/client/presentation/editor-controls.d.ts +12 -0
  146. package/lib/types/client/presentation/export-menu.d.ts +26 -0
  147. package/lib/types/client/presentation/export-view.d.ts +63 -0
  148. package/lib/types/client/presentation/global-filters.d.ts +6 -0
  149. package/lib/types/client/presentation/host-entry.d.ts +18 -0
  150. package/lib/types/client/presentation/icons.d.ts +4 -0
  151. package/lib/types/client/presentation/markdown.d.ts +5 -0
  152. package/lib/types/client/presentation/model.d.ts +61 -0
  153. package/lib/types/client/presentation/reader.d.ts +24 -0
  154. package/lib/types/client/presentation/reference-source.d.ts +9 -0
  155. package/lib/types/client/presentation/source-code-model.d.ts +17 -0
  156. package/lib/types/client/presentation/source-code.d.ts +6 -0
  157. package/lib/types/client/presentation/source-dialog.d.ts +12 -0
  158. package/lib/types/client/presentation/source-facts.d.ts +20 -0
  159. package/lib/types/client/presentation/source-format.d.ts +5 -0
  160. package/lib/types/client/presentation/source-highlight.d.ts +7 -0
  161. package/lib/types/client/presentation/sources.d.ts +13 -0
  162. package/lib/types/client/presentation/styles.d.ts +1 -0
  163. package/lib/types/client/presentation/table.d.ts +16 -0
  164. package/lib/types/client/presentation/use-element-width.d.ts +5 -0
  165. package/lib/types/client/python-tool/card.d.ts +2 -0
  166. package/lib/types/client/python-tool/execution-error.d.ts +3 -0
  167. package/lib/types/client/python-tool/install.d.ts +2 -0
  168. package/lib/types/client/python-tool/model.d.ts +20 -0
  169. package/lib/types/client/right-tabs/install.d.ts +18 -0
  170. package/lib/types/client/right-tabs/live-delivery.d.ts +8 -0
  171. package/lib/types/client/right-tabs/navigation.d.ts +17 -0
  172. package/lib/types/client/right-tabs/page.d.ts +36 -0
  173. package/lib/types/client/right-tabs/styles.d.ts +2 -0
  174. package/lib/types/client/rpc.d.ts +3 -0
  175. package/lib/types/client/semantic-reference.d.ts +4 -0
  176. package/lib/types/client/workspace-header-action.d.ts +7 -0
  177. package/lib/types/client/workspace-shortcuts.d.ts +15 -0
  178. package/lib/types/client.d.ts +9 -124
  179. package/lib/types/compatibility.d.ts +3 -3
  180. package/lib/types/datasource/authoring.d.ts +35 -0
  181. package/lib/types/datasource/bridge.d.ts +43 -4
  182. package/lib/types/datasource/changes-contract.d.ts +18 -0
  183. package/lib/types/datasource/changes.d.ts +15 -0
  184. package/lib/types/datasource/configure.d.ts +7 -0
  185. package/lib/types/datasource/defaults.d.ts +7 -0
  186. package/lib/types/datasource/index.d.ts +8 -5
  187. package/lib/types/datasource/python-options.d.ts +9 -0
  188. package/lib/types/datasource/python.d.ts +19 -0
  189. package/lib/types/datasource/resolver-program.d.ts +6 -0
  190. package/lib/types/datasource/rpc.d.ts +5 -0
  191. package/lib/types/datasource/service.d.ts +155 -0
  192. package/lib/types/datasource/shell-env.d.ts +0 -29
  193. package/lib/types/datasource/test.d.ts +6 -29
  194. package/lib/types/disclosure/activation.d.ts +2 -1
  195. package/lib/types/disclosure/execution-guidance.d.ts +6 -0
  196. package/lib/types/disclosure/help.d.ts +1 -1
  197. package/lib/types/environment/binding.d.ts +5 -1
  198. package/lib/types/environment/errors.d.ts +1 -1
  199. package/lib/types/environment/runtime.d.ts +5 -5
  200. package/lib/types/environment/types.d.ts +15 -3
  201. package/lib/types/environment/workspace.d.ts +1 -0
  202. package/lib/types/index.d.ts +1 -1
  203. package/lib/types/lifecycle.d.ts +8 -0
  204. package/lib/types/plugin-agents.d.ts +27 -0
  205. package/lib/types/plugin.d.ts +14 -24
  206. package/lib/types/presentation/asset.d.ts +6 -0
  207. package/lib/types/presentation/build/index.d.ts +16 -0
  208. package/lib/types/presentation/commit.d.ts +4 -0
  209. package/lib/types/presentation/contracts/asset-path.d.ts +2 -0
  210. package/lib/types/presentation/contracts/catalog.d.ts +27 -0
  211. package/lib/types/presentation/contracts/charts.d.ts +11 -0
  212. package/lib/types/presentation/contracts/editing.d.ts +8 -0
  213. package/lib/types/presentation/contracts/index.d.ts +11 -0
  214. package/lib/types/presentation/contracts/interaction.d.ts +8 -0
  215. package/lib/types/presentation/contracts/types.d.ts +255 -0
  216. package/lib/types/presentation/contracts/values.d.ts +9 -0
  217. package/lib/types/presentation/delivery.d.ts +3 -0
  218. package/lib/types/presentation/export-html.d.ts +13 -0
  219. package/lib/types/presentation/files.d.ts +7 -0
  220. package/lib/types/presentation/index.d.ts +6 -0
  221. package/lib/types/presentation/lint.d.ts +13 -0
  222. package/lib/types/presentation/projection/files.d.ts +2 -0
  223. package/lib/types/presentation/projection/index.d.ts +20 -0
  224. package/lib/types/presentation/projection/program.d.ts +2 -0
  225. package/lib/types/presentation/projection/sql-code.d.ts +2 -0
  226. package/lib/types/presentation/receipt.d.ts +14 -0
  227. package/lib/types/presentation/reports.d.ts +10 -0
  228. package/lib/types/presentation/rpc.d.ts +25 -0
  229. package/lib/types/presentation/tool.d.ts +12 -0
  230. package/lib/types/python-execution-contracts.d.ts +10 -0
  231. package/lib/types/python-execution.d.ts +10 -0
  232. package/lib/types/report-publishing/adapters.d.ts +6 -0
  233. package/lib/types/report-publishing/config.d.ts +22 -0
  234. package/lib/types/report-publishing/service.d.ts +68 -0
  235. package/lib/types/rpc.d.ts +3 -0
  236. package/lib/types/semantic-browser/contracts.d.ts +47 -0
  237. package/lib/types/semantic-browser/definition.d.ts +20 -0
  238. package/lib/types/semantic-browser/program.d.ts +2 -0
  239. package/lib/types/semantic-browser/service.d.ts +26 -0
  240. package/lib/types/semantic-reference/bridge.d.ts +12 -0
  241. package/lib/types/semantic-reference/contracts.d.ts +54 -0
  242. package/lib/types/semantic-reference/environment.d.ts +22 -0
  243. package/lib/types/semantic-reference/index.d.ts +3 -0
  244. package/lib/types/semantic-reference/labels.d.ts +16 -0
  245. package/lib/types/semantic-reference/rpc.d.ts +15 -0
  246. package/lib/types/semantic-reference/search.d.ts +10 -0
  247. package/lib/types/semantic-reference/usage.d.ts +43 -0
  248. package/lib/types/tool-lifecycle.d.ts +4 -0
  249. package/lib/types/workspace-identity.d.ts +6 -0
  250. package/lib/workspace-identity.js +9 -0
  251. package/package.json +99 -53
  252. package/python/presentation-kit/dist/dsh_data_analysis_presentation_kit-1.1.0-py3-none-any.whl +0 -0
  253. package/skills/dsh-data-analysis-files/SKILL.md +32 -0
  254. package/skills/dsh-data-analysis-files/references/examples.md +93 -0
  255. package/skills/dsh-data-analysis-presentation/SKILL.md +28 -0
  256. package/skills/dsh-data-analysis-presentation/references/chart-examples.md +18 -0
  257. package/skills/dsh-data-analysis-presentation/references/charts.md +55 -0
  258. package/skills/dsh-data-analysis-presentation/references/examples/artifact.draft.json +36 -0
  259. package/skills/dsh-data-analysis-presentation/references/examples/charts-bins.dataset.json +33 -0
  260. package/skills/dsh-data-analysis-presentation/references/examples/charts-boxes.dataset.json +45 -0
  261. package/skills/dsh-data-analysis-presentation/references/examples/charts-composition.dataset.json +33 -0
  262. package/skills/dsh-data-analysis-presentation/references/examples/charts-funnel.dataset.json +27 -0
  263. package/skills/dsh-data-analysis-presentation/references/examples/charts-precision.dataset.json +21 -0
  264. package/skills/dsh-data-analysis-presentation/references/examples/charts-series.dataset.json +58 -0
  265. package/skills/dsh-data-analysis-presentation/references/examples/charts-shares.dataset.json +33 -0
  266. package/skills/dsh-data-analysis-presentation/references/examples/charts-waterfall.dataset.json +44 -0
  267. package/skills/dsh-data-analysis-presentation/references/examples/charts.draft.json +393 -0
  268. package/skills/dsh-data-analysis-presentation/references/examples/comparison-selected.dataset.json +24 -0
  269. package/skills/dsh-data-analysis-presentation/references/examples/comparison-summary.dataset.json +22 -0
  270. package/skills/dsh-data-analysis-presentation/references/examples/comparison.dataset.json +18 -0
  271. package/skills/dsh-data-analysis-presentation/references/examples/comparison.draft.json +80 -0
  272. package/skills/dsh-data-analysis-presentation/references/examples/computed-sources.draft.json +42 -0
  273. package/skills/dsh-data-analysis-presentation/references/examples/computed.dataset.json +12 -0
  274. package/skills/dsh-data-analysis-presentation/references/examples/computed.draft.json +58 -0
  275. package/skills/dsh-data-analysis-presentation/references/examples/interaction-detail.dataset.json +30 -0
  276. package/skills/dsh-data-analysis-presentation/references/examples/interaction-summary.dataset.json +22 -0
  277. package/skills/dsh-data-analysis-presentation/references/examples/interaction.draft.json +279 -0
  278. package/skills/dsh-data-analysis-presentation/references/examples/source-only.draft.json +27 -0
  279. package/skills/dsh-data-analysis-presentation/references/examples/write-charts.py +73 -0
  280. package/skills/dsh-data-analysis-presentation/references/examples/write-comparison.py +42 -0
  281. package/skills/dsh-data-analysis-presentation/references/examples/write-computed.py +21 -0
  282. package/skills/dsh-data-analysis-presentation/references/examples/write-interaction.py +33 -0
  283. package/skills/dsh-data-analysis-presentation/references/examples.md +44 -0
  284. package/skills/dsh-data-analysis-presentation/references/export-html.md +7 -0
  285. package/skills/dsh-data-analysis-presentation/references/interaction.md +56 -0
  286. package/skills/dsh-data-analysis-presentation/references/narrative.md +37 -0
  287. package/skills/dsh-data-analysis-presentation/references/publishing.md +3 -0
  288. package/skills/dsh-data-analysis-presentation/references/schema.md +162 -0
  289. package/lib/datasource/access.js +0 -60
  290. package/lib/datasource/credentials.js +0 -24
  291. package/lib/evidence/bridge-program.js +0 -153
  292. package/lib/evidence/bridge.js +0 -166
  293. package/lib/evidence/index.js +0 -2
  294. package/lib/evidence/sources.js +0 -263
  295. package/lib/types/datasource/access.d.ts +0 -27
  296. package/lib/types/evidence/bridge.d.ts +0 -40
  297. package/lib/types/evidence/index.d.ts +0 -4
  298. package/lib/types/evidence/sources.d.ts +0 -57
  299. package/python/report-kit/dist/dsh_data_analysis_report_kit-3.0.0-py3-none-any.whl +0 -0
  300. package/skills/dsh-data-analysis-report/SKILL.md +0 -57
  301. package/skills/dsh-data-analysis-report/assets/marivo-artifact.js +0 -113
  302. package/skills/dsh-data-analysis-report/assets/marivo-session-dag.js +0 -1201
  303. package/skills/dsh-data-analysis-report/assets/report-data.js +0 -449
@@ -0,0 +1,152 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { defineDomain, domainTable, } from '@deepseek-ai/dsh-storage-domain';
3
+ import { z } from 'zod';
4
+ import { finishCleanup } from "../lifecycle.js";
5
+ import { parseRef, refKey } from "./contracts.js";
6
+ const refSchema = z.unknown().transform((value, ctx) => {
7
+ try {
8
+ return parseRef(value);
9
+ }
10
+ catch {
11
+ ctx.addIssue({ code: 'custom', message: 'invalid semantic ref' });
12
+ return z.NEVER;
13
+ }
14
+ });
15
+ const daySchema = z.strictObject({
16
+ day: z.iso.date(),
17
+ count: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER),
18
+ });
19
+ export const usageSchema = z
20
+ .strictObject({
21
+ entries: z.record(z.string(), z.strictObject({
22
+ ref: refSchema,
23
+ days: z
24
+ .array(daySchema)
25
+ .min(1)
26
+ .max(7)
27
+ .refine((days) => days.every((day, i) => i === 0 || days[i - 1].day < day.day)),
28
+ lastSelectedAt: z.number().int().min(0).max(8_640_000_000_000_000),
29
+ })),
30
+ })
31
+ .refine((row) => Object.entries(row.entries).every(([key, entry]) => key === refKey(entry.ref)));
32
+ export const usageSpec = defineDomain({
33
+ name: 'dsh_data_analysis_semantic_reference_usage',
34
+ version: 0,
35
+ tables: { workspaces: domainTable(usageSchema) },
36
+ });
37
+ export function workspaceKey(canonicalRoot) {
38
+ return createHash('sha256').update(canonicalRoot).digest('hex');
39
+ }
40
+ export function localDay(date) {
41
+ return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
42
+ }
43
+ export function windowDays(now) {
44
+ const date = new Date(now);
45
+ date.setHours(12, 0, 0, 0);
46
+ return Array.from({ length: 7 }, (_, i) => {
47
+ const d = new Date(date);
48
+ d.setDate(d.getDate() - (6 - i));
49
+ return localDay(d);
50
+ });
51
+ }
52
+ export function increment(row, input, now) {
53
+ const ref = parseRef(input), window = windowDays(now), today = window[6];
54
+ const entries = Object.create(null);
55
+ for (const [key, value] of Object.entries(row.entries)) {
56
+ const days = value.days.filter((day) => window.includes(day.day));
57
+ if (days.length)
58
+ entries[key] = { ...value, days };
59
+ }
60
+ const key = refKey(ref), prior = entries[key], days = prior?.days ?? [];
61
+ const count = days.find((day) => day.day === today)?.count ?? 0;
62
+ entries[key] = {
63
+ ref,
64
+ days: [
65
+ ...days.filter((day) => day.day !== today),
66
+ { day: today, count: Math.min(Number.MAX_SAFE_INTEGER, count + 1) },
67
+ ].sort((a, b) => a.day.localeCompare(b.day)),
68
+ lastSelectedAt: now,
69
+ };
70
+ return { entries };
71
+ }
72
+ /** Only admitted mutations join the per-Workspace queue; close drains those jobs. */
73
+ export class SemanticReferenceUsage {
74
+ #ready;
75
+ #queues = new Map();
76
+ #clock;
77
+ #diagnostic;
78
+ #closed = false;
79
+ #closing;
80
+ constructor(facility, clock = Date.now, diagnostic = () => { }) {
81
+ this.#clock = clock;
82
+ this.#diagnostic = diagnostic;
83
+ this.#ready = Promise.resolve()
84
+ .then(() => facility.open(usageSpec))
85
+ .catch(() => {
86
+ diagnostic();
87
+ return undefined;
88
+ });
89
+ }
90
+ async scores(key) {
91
+ try {
92
+ const domain = await this.#ready;
93
+ if (!domain || this.#closed)
94
+ return new Map();
95
+ const window = windowDays(this.#clock()), row = domain.table('workspaces').get(key);
96
+ return new Map(Object.entries(row?.entries ?? {}).map(([key, entry]) => [
97
+ key,
98
+ {
99
+ count: entry.days
100
+ .filter((day) => window.includes(day.day))
101
+ .reduce((sum, day) => Math.min(Number.MAX_SAFE_INTEGER, sum + day.count), 0),
102
+ last: entry.lastSelectedAt,
103
+ },
104
+ ]));
105
+ }
106
+ catch {
107
+ this.#diagnostic();
108
+ return new Map();
109
+ }
110
+ }
111
+ async selected(key, ref, signal) {
112
+ const parsed = parseRef(ref);
113
+ const domain = await this.#ready;
114
+ signal.throwIfAborted();
115
+ if (this.#closed)
116
+ throw new Error('disposed');
117
+ if (!domain)
118
+ return;
119
+ const now = this.#clock();
120
+ const job = (this.#queues.get(key) ?? Promise.resolve())
121
+ .then(async () => {
122
+ const table = domain.table('workspaces');
123
+ if (table.get(key) === undefined)
124
+ await table.put(key, increment({ entries: {} }, parsed, now));
125
+ else
126
+ await table.update(key, (row) => increment(row, parsed, now));
127
+ })
128
+ .catch(() => {
129
+ this.#diagnostic();
130
+ });
131
+ this.#queues.set(key, job);
132
+ try {
133
+ await job;
134
+ }
135
+ finally {
136
+ if (this.#queues.get(key) === job)
137
+ this.#queues.delete(key);
138
+ }
139
+ }
140
+ close() {
141
+ if (this.#closing)
142
+ return this.#closing;
143
+ this.#closed = true;
144
+ this.#closing = finishCleanup([
145
+ async () => {
146
+ await Promise.all(this.#queues.values());
147
+ await (await this.#ready)?.close();
148
+ },
149
+ ]);
150
+ return this.#closing;
151
+ }
152
+ }
@@ -0,0 +1,22 @@
1
+ import { finishCleanup, PendingTasks } from "./lifecycle.js";
2
+ /** A plugin tool owns its execution promises; withdrawing its schema is not a drain. */
3
+ export function registerMarivoTool(ctx, tool) {
4
+ const lifetime = new AbortController();
5
+ const pending = new PendingTasks();
6
+ const unregister = ctx.tools.register({
7
+ ...tool,
8
+ execute(args, exec) {
9
+ if (lifetime.signal.aborted)
10
+ return Promise.reject(new Error('Marivo tool disposed'));
11
+ return pending.track(tool.execute(args, { ...exec, signal: AbortSignal.any([exec.signal, lifetime.signal]) }));
12
+ },
13
+ });
14
+ let closing;
15
+ return () => {
16
+ if (closing)
17
+ return closing;
18
+ lifetime.abort();
19
+ closing = finishCleanup([unregister, () => pending.drain()]);
20
+ return closing;
21
+ };
22
+ }
@@ -1,11 +1,11 @@
1
1
  import { MarivoDatasourceBridge } from './datasource/bridge.ts';
2
2
  import { MarivoHelpBridge } from './disclosure/bridge.ts';
3
3
  import type { MarivoEnvironment } from './environment/binding.ts';
4
- import { MarivoEvidenceBridge } from './evidence/bridge.ts';
4
+ import { MarivoPresentationProjection } from './presentation/projection/index.ts';
5
5
  export interface MarivoBridgeSet {
6
6
  readonly help: MarivoHelpBridge;
7
7
  readonly datasource: MarivoDatasourceBridge;
8
- readonly evidence: MarivoEvidenceBridge;
8
+ readonly presentation: MarivoPresentationProjection;
9
9
  }
10
10
  /** Compose domain adapters without adding domain methods back to the Environment. */
11
11
  export declare function createMarivoBridgeSet(environment: MarivoEnvironment): MarivoBridgeSet;
@@ -0,0 +1,9 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { RemoteStreamItem } from '@deepseek-ai/dsh-api-gateway/client';
3
+ import { type CredentialRevision } from '../../datasource/changes-contract.ts';
4
+ export type CredentialChangeFeed = AsyncIterable<RemoteStreamItem<CredentialRevision>> & {
5
+ dispose(): Promise<void>;
6
+ };
7
+ export type CredentialChanges = (sessionId: string) => CredentialChangeFeed;
8
+ /** Mount before opening a logical stream, using the existing Gateway WebSocket. */
9
+ export declare function credentialChanges(ctx: Context): CredentialChanges;
@@ -0,0 +1,7 @@
1
+ export declare function CreateDatasource({ model, workspaceId, close, name, requestId }: {
2
+ model: any;
3
+ workspaceId: any;
4
+ close: any;
5
+ name: any;
6
+ requestId: any;
7
+ }): import("react").JSX.Element;
@@ -0,0 +1,14 @@
1
+ export interface CredentialDraft {
2
+ id: string;
3
+ field: string;
4
+ key?: string;
5
+ value: string;
6
+ existing?: string;
7
+ reference?: string;
8
+ }
9
+ export declare function credentialReference(name: string, draft: CredentialDraft): string;
10
+ /** Values are kept separate from the public configuration, then handed to the credential operation. */
11
+ export declare function prepareCredentials(name: string, drafts: CredentialDraft[]): {
12
+ fields: Record<string, string | Record<string, string>>;
13
+ changes: Record<string, string>;
14
+ };
@@ -0,0 +1,2 @@
1
+ import type { DatasourceAuthoringView } from '../../datasource/defaults.ts';
2
+ export declare function creationFieldValues(schema: DatasourceAuthoringView, backend: string): Record<string, string>;
@@ -0,0 +1 @@
1
+ export declare function datasourceDescription(description: string): string;
@@ -0,0 +1,19 @@
1
+ import type { CredentialChanges } from './changes.ts';
2
+ import { CredentialClientModel } from './model.ts';
3
+ export declare function CredentialIcon({ name, size }: {
4
+ name: any;
5
+ size?: number | undefined;
6
+ }): import("react").JSX.Element;
7
+ export declare function TestResult({ result, stale }: {
8
+ result: any;
9
+ stale?: boolean | undefined;
10
+ }): import("react").JSX.Element | null;
11
+ export declare function DatasourceProperties({ context }: {
12
+ context: any;
13
+ }): import("react").JSX.Element;
14
+ export declare function CredentialPanel({ model, workspaces, onRefresh }: {
15
+ model: any;
16
+ workspaces: any;
17
+ onRefresh: any;
18
+ }): import("react").JSX.Element | null;
19
+ export declare function installCredentials(ctx: any, rpc: any, changes?: CredentialChanges): CredentialClientModel;
@@ -0,0 +1,79 @@
1
+ import type { DatasourceAuthoring, DatasourceConfiguration, DatasourceCreateInput } from '../../datasource/authoring.ts';
2
+ import type { DatasourceAuthoringView } from '../../datasource/defaults.ts';
3
+ import type { ConfigurationRequestView, CredentialAction, CredentialContextView, CredentialOperationView, CredentialRequestView } from '../../datasource/service.ts';
4
+ import type { PublishingCredentialView, PublishingField } from '../../report-publishing/service.ts';
5
+ import { type Notice } from './../i18n/copy.ts';
6
+ import type { BrowserRpc } from '../semantic-browser/model.ts';
7
+ import type { CredentialChanges } from './changes.ts';
8
+ interface QueryHandle {
9
+ generation: string;
10
+ id: string;
11
+ scope: string;
12
+ }
13
+ export interface ClientOperation {
14
+ handle: QueryHandle;
15
+ name: string;
16
+ workspaceId?: string;
17
+ overviewUpdated?: boolean;
18
+ error?: Notice;
19
+ operation?: CredentialOperationView;
20
+ }
21
+ export interface CredentialClientState {
22
+ open: boolean;
23
+ workspaceId: string;
24
+ sessionId: string;
25
+ generation: string;
26
+ revision?: string;
27
+ datasources: CredentialContextView[];
28
+ requests: (CredentialRequestView | ConfigurationRequestView)[];
29
+ requestId: string;
30
+ selected: string;
31
+ loading: boolean;
32
+ error: Notice;
33
+ operations: ClientOperation[];
34
+ outcomes: Record<string, ClientOperation>;
35
+ operation?: CredentialOperationView;
36
+ handle?: QueryHandle;
37
+ }
38
+ export declare function credentialMessage(code: string): string;
39
+ export declare class CredentialClientModel {
40
+ #private;
41
+ constructor(rpc: BrowserRpc, storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>, changes?: CredentialChanges);
42
+ getSnapshot: () => CredentialClientState;
43
+ subscribe: (listener: () => void) => (() => void);
44
+ publishingCredentials(endpoint: 'describe' | 'set' | 'unset', workspaceId: string, payload: {
45
+ field?: PublishingField;
46
+ value?: string;
47
+ configId?: string;
48
+ }, signal: AbortSignal): Promise<PublishingCredentialView>;
49
+ show(workspaceId: string, selectedToken?: string): Promise<void>;
50
+ authoring(workspaceId: string, signal: AbortSignal, mode?: 'create' | 'edit'): Promise<DatasourceAuthoringView & {
51
+ generation: string;
52
+ }>;
53
+ createDatasource(workspaceId: string, schema: DatasourceAuthoring & {
54
+ generation: string;
55
+ }, input: DatasourceCreateInput): Promise<void>;
56
+ configuration(workspaceId: string, name: string, signal: AbortSignal): Promise<DatasourceConfiguration>;
57
+ saveConfiguration(workspaceId: string, schema: DatasourceAuthoring & {
58
+ generation: string;
59
+ }, input: DatasourceCreateInput, original?: DatasourceConfiguration, requestId?: string, changes?: Record<string, string>): Promise<void>;
60
+ selectConfiguration(workspaceId: string, requestId: string, name: string): Promise<void>;
61
+ close(): void;
62
+ suspend(): void;
63
+ openRequest(id: string): void;
64
+ select(token: string): void;
65
+ selectWorkspace(workspaceId: string, selectedToken?: string): Promise<void>;
66
+ /** Receive the shared Host watch without sharing a tab's selection or form state. */
67
+ syncRequests(sessionId: string, state: CredentialClientState): void;
68
+ refreshDatasources(): Promise<void>;
69
+ session(sessionId: string): void;
70
+ selectOperation(id: string): void;
71
+ dismissOutcome(scope: string): void;
72
+ start(context: CredentialContextView, action: CredentialAction, changes?: Record<string, string>, reference?: string, deleteCredentials?: boolean): Promise<void>;
73
+ recover(): void;
74
+ cancelRequest(id: string): Promise<void>;
75
+ cancelOperation(scope?: string): Promise<void>;
76
+ reset(): void;
77
+ dispose(): Promise<void>;
78
+ }
79
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { CredentialClientModel } from './model.ts';
2
+ export declare function ReportPublishingCredentials({ model, workspaceId, }: {
3
+ model: CredentialClientModel;
4
+ workspaceId: string;
5
+ }): import("react").JSX.Element | null;
@@ -0,0 +1 @@
1
+ export declare const credentialStyles = "\n.mc-panel,.rt-page[data-rt-kind=datasources]{--mc-accent:#2563eb;--mc-tint:#eff6ff}\n.rt-page[data-rt-kind=datasources] :focus-visible{outline-color:var(--mc-accent)}\n.mc-input-heading{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px;min-width:0}.mc-input-name{font-weight:500;color:var(--mc-text);overflow-wrap:anywhere}.mc-input-description{flex:1 1 200px;min-width:0;font-size:11px;line-height:1.6;color:var(--mc-muted);overflow-wrap:anywhere}\n.mc-panel{--mc-bg:var(--dsw-alias-surface-primary,#fff);--mc-soft:var(--dsw-alias-interactive-bg-hover,#f5f7f9);--mc-text:var(--dsw-alias-label-primary,#182a33);--mc-muted:var(--dsw-alias-label-secondary,#627580);--mc-border:var(--dsw-alias-border-l2,#dce4e8);--mc-danger:#b04436;--mc-warning:#886217;color:var(--mc-text);background:var(--mc-bg);min-width:0;width:100%;font:14px/1.55 system-ui,sans-serif}\n\n.mc-panel *{box-sizing:border-box}.mc-shell{display:flex;flex-direction:column}.mc-panel button,.mc-panel input,.mc-panel select{font:inherit;color:inherit}.mc-panel button{cursor:pointer;border:1px solid var(--mc-border);border-radius:8px;padding:7px 12px;background:var(--mc-bg);line-height:1.5}.mc-panel button:hover{background:var(--mc-soft)}.mc-panel button:disabled{cursor:default;opacity:.5}.mc-panel :focus-visible{outline:2px solid var(--mc-accent);outline-offset:3px}.mc-panel select,.mc-panel input{border:1px solid var(--mc-border);border-radius:8px;background:var(--mc-bg);padding:9px 10px;max-width:100%;min-width:0}.mc-panel select{width:100%}.mc-panel button.mc-primary{color:#fff;background:var(--mc-accent);border-color:var(--mc-accent)}.mc-panel button.mc-primary:hover{filter:brightness(.93)}.mc-panel button.mc-danger{color:var(--mc-danger);background:#fef2f2;border-color:#fecaca}.mc-panel button.mc-danger:hover:not(:disabled){background:#fee2e2}.mc-panel button.mc-quiet{border-color:transparent;background:transparent;color:var(--mc-muted)}.mc-panel button.mc-quiet:hover{background:var(--mc-soft)}\n.mc-columns{display:flex;flex-direction:column;min-width:0}.mc-nav{padding:0 0 16px;border-bottom:1px solid var(--mc-border);min-width:0}.mc-nav>button{margin-bottom:12px}.mc-nav-heading{font-size:12px;color:var(--mc-muted);margin-bottom:8px}.mc-nav-heading h3{font:inherit;margin:0}.mc-datasources{list-style:none;padding:0;margin:0;display:flex;overflow-x:auto;gap:6px;padding:3px}.mc-datasources li{flex:0 0 200px;max-width:240px}.mc-panel .mc-datasource{display:flex;align-items:start;gap:10px;width:100%;padding:12px 10px;border:1px solid transparent;background:transparent;text-align:left}.mc-panel .mc-datasource[aria-pressed=true]{border-color:var(--mc-border);background:var(--mc-bg);box-shadow:0 2px 5px #102a3a05}.mc-datasource>svg{margin-top:2px;flex:none;color:var(--mc-muted)}.mc-datasource[aria-pressed=true]>svg{color:var(--mc-accent)}.mc-datasource-copy{min-width:0;display:grid;gap:4px}.mc-datasource-name{font-size:13px;font-weight:600;overflow-wrap:anywhere}.mc-datasource-status{font-size:11px;color:var(--mc-muted);display:flex;align-items:center;gap:5px}.mc-dot{width:6px;height:6px;background:var(--mc-muted);border-radius:50%;flex:none}.mc-dot[data-ready=true]{background:var(--mc-accent)}.mc-dot[data-ready=false]{background:#c58a26}\n.mc-main{min-width:0;overflow:auto;display:flex;flex-direction:column}.mc-form{display:flex;flex-direction:column;flex:1;min-width:0}.mc-form-body{padding:26px 30px;flex:1}.mc-detail-heading{display:flex;align-items:start;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:22px}.mc-eyebrow{font-size:11px;color:var(--mc-muted);margin:0 0 5px}.mc-detail-heading h3{font-size:22px;font-weight:650;line-height:1.4;margin:0;overflow-wrap:anywhere}.mc-badge{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--mc-border);border-radius:6px;padding:3px 7px;font-size:11px;white-space:nowrap;color:var(--mc-muted)}.mc-badge[data-ready=true]{color:var(--mc-accent);background:var(--mc-tint);border-color:transparent}.mc-badge[data-ready=false]{color:var(--mc-warning)}\n.mc-section-heading{font-size:13px;font-weight:600;margin:0 0 12px}.mc-properties{margin:0 0 24px;min-width:0}.mc-property-list{margin:0;border:1px solid var(--mc-border);border-radius:12px;overflow:hidden}.mc-property{display:grid;grid-template-columns:minmax(0,140px) minmax(0,1fr);gap:16px;padding:12px 18px;align-items:start}.mc-property+.mc-property{border-top:1px solid var(--mc-border)}.mc-property dt{font-size:12px;color:var(--mc-muted);overflow-wrap:anywhere}.mc-property dd{margin:0;min-width:0;font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.mc-property pre{font:12px/1.6 ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.mc-property-json{max-height:240px;overflow:auto}\n.mc-publishing{margin-top:28px;padding-top:24px;border-top:1px solid var(--mc-border)}\n.mc-fields{border:1px solid var(--mc-border);border-radius:12px;overflow:hidden;margin:0 0 14px}.mc-field{min-width:0;border:0;padding:18px;margin:0}.mc-field+.mc-field{border-top:1px solid var(--mc-border)}.mc-field-header{display:flex;align-items:start;gap:12px;justify-content:space-between}.mc-field-title{min-width:0}.mc-field-title h4{font-size:13px;margin:0 0 4px;font-weight:600;overflow-wrap:anywhere}.mc-field-title p{margin:0;font-size:11px;color:var(--mc-muted);overflow-wrap:anywhere}.mc-field-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;flex:none}.mc-panel .mc-field-actions button{font-size:12px;padding:5px 9px}.mc-secret-input{display:grid;gap:7px;margin-top:14px;font-size:12px;color:var(--mc-muted)}.mc-secret-input input{width:100%;color:var(--mc-text)}.mc-field-note{font-size:11px;color:var(--mc-muted);margin:10px 0 0;overflow-wrap:anywhere}.mc-confirm{margin-top:12px;padding:12px;border:1px solid var(--mc-border);border-radius:8px;background:var(--mc-soft);display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:12px}.mc-confirm p{flex-basis:100%;margin:0}.mc-note{font-size:12px;color:var(--mc-muted);margin:12px 0;overflow-wrap:anywhere}\n.mc-test{margin-top:24px;padding-top:20px;border-top:1px solid var(--mc-border)}.mc-test-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}.mc-test-heading h4{margin:0;font-size:13px}.mc-test-heading time{font-size:11px;color:var(--mc-muted)}.mc-result{border-radius:9px;padding:12px 14px;background:var(--mc-tint);color:var(--mc-accent);font-size:12px}.mc-result[data-tone=error]{background:var(--mc-soft);color:var(--mc-danger)}.mc-result[data-tone=stale]{background:var(--mc-soft);color:var(--mc-muted)}.mc-result-title{display:flex;align-items:center;gap:7px;font-weight:600;font-size:13px}.mc-result p{margin:6px 0 0}.mc-result details{margin-top:9px}.mc-result summary{cursor:pointer}.mc-result pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:180px;overflow:auto;font:12px/1.6 ui-monospace,monospace}.mc-empty-test{font-size:12px;color:var(--mc-muted);margin:0}\n.mc-form-footer{padding:16px 30px;border-top:1px solid var(--mc-border);background:var(--mc-bg);position:sticky;bottom:0;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.mc-form-footer button{font-size:13px}.mc-form-footer .mc-cancel{margin-left:auto}.mc-alert{margin:16px 30px 0;padding:12px 14px;border-radius:8px;font-size:12px;background:var(--mc-soft);color:var(--mc-danger);white-space:pre-wrap;overflow-wrap:anywhere}.mc-request-status{margin:0 0 18px;padding:12px 14px;border-radius:9px;background:var(--mc-soft);font-size:12px}.mc-request-status p{margin:4px 0 0;color:var(--mc-muted)}.mc-requests{padding:12px 20px;border-bottom:1px solid var(--mc-border);display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px}.mc-requests button{font-size:12px}.mc-pending-entry{font:inherit;font-size:12px;cursor:pointer;border:1px solid currentColor;border-radius:7px;padding:5px 9px;background:transparent;color:inherit}\n.mc-activity{padding:14px 30px;background:var(--mc-soft);border-top:1px solid var(--mc-border)}.mc-activity-heading{font-size:12px;color:var(--mc-muted);margin:0 0 8px}.mc-activity-list{display:flex;gap:6px;flex-wrap:wrap}.mc-activity-list button{font-size:12px}.mc-activity-list button[aria-pressed=true]{border-color:var(--mc-accent);color:var(--mc-accent)}.mc-progress{font-size:12px;margin-top:10px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.mc-progress p{margin:0}.mc-progress button{font-size:12px;margin-left:auto}.mc-operation-note{font-size:12px;margin-top:12px;color:var(--mc-muted)}.mc-operation-note p{margin:6px 0}.mc-operation-note[data-error=true]{color:var(--mc-danger)}.mc-empty{padding:64px 28px;text-align:center;color:var(--mc-muted);margin:auto}.mc-empty>svg{margin-bottom:10px;opacity:.65}.mc-empty h3{font-size:15px;color:var(--mc-text);margin:0 0 8px}.mc-empty p{font-size:12px;margin:0}.mc-loading{padding:18px 30px;font-size:12px;color:var(--mc-muted)}\n.mc-request-status{padding:18px;margin:0 0 8px;border:1px solid var(--mc-border);background:var(--mc-bg)}.mc-request-heading{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.mc-request-heading h3{margin:0;font-size:14px;font-weight:600}.mc-request-heading>button{margin-left:auto;font-size:12px}.mc-request-reason{margin-top:14px;color:var(--mc-muted)}.mc-request-reason summary{cursor:pointer;line-height:1.6}.mc-request-reason p{margin:10px 0 0;line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere}.mc-request-choice{border:0;padding:0;min-width:0;display:flex;flex-wrap:wrap;gap:8px;margin-top:18px;padding-top:16px;border-top:1px solid var(--mc-border)}.mc-request-choice button[aria-pressed=true]{color:var(--mc-accent);border-color:var(--mc-accent);background:var(--mc-tint)}.mc-existing-source{margin-top:14px}.mc-inline-credentials{margin-top:28px;padding-top:20px;border-top:1px solid var(--mc-border)}.mc-inline-credentials h4{font-size:14px;margin:0}.mc-credential-entry{margin:16px 0 20px}.mc-reference-options{margin-top:10px;font-size:12px;color:var(--mc-muted)}.mc-reference-options summary{cursor:pointer}.mc-reference-options[open]{padding:12px;border:1px solid var(--mc-border);border-radius:8px}.mc-reference-options .mc-note{line-height:1.7}.mc-credential-group>button{font-size:12px}\n.mc-panel .mc-icon-button{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:6px;flex:none;border-color:transparent;background:transparent}.mc-heading-actions{display:flex;align-items:center;gap:8px;min-width:0}.mc-panel .mc-datasource-heading{display:block}.mc-name-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.mc-name-row h3{min-width:0}.mc-test-heading>.mc-heading-actions{margin-left:auto}.mc-heading-actions time{text-align:right}\n@media(prefers-color-scheme:dark){.mc-panel,.rt-page[data-rt-kind=datasources]{--mc-accent:#60a5fa;--mc-tint:#172b4d}.mc-panel{--mc-bg:var(--dsw-alias-surface-primary,#182127);--mc-soft:var(--dsw-alias-interactive-bg-hover,#202d34);--mc-text:var(--dsw-alias-label-primary,#e4edf1);--mc-muted:var(--dsw-alias-label-secondary,#9baeb9);--mc-border:var(--dsw-alias-border-l2,#35464f);--mc-danger:#ef998b;--mc-warning:#d6b778}.mc-panel button.mc-primary{color:#10213b}.mc-panel button.mc-danger{background:#40272b;border-color:#704047}.mc-panel button.mc-danger:hover:not(:disabled){background:#513037}}\n@container(max-width:650px){.mc-property{grid-template-columns:minmax(0,1fr);gap:5px;padding:12px 14px}.mc-field-header{flex-wrap:wrap}.mc-field-actions{margin-left:auto}.mc-test-heading{flex-wrap:wrap}}\n.mc-panel .mc-form-body{padding:22px 0}.mc-panel .mc-form-footer{padding:14px 0;position:static}.mc-panel .mc-alert{margin:16px 0 0}.mc-panel .mc-activity{padding:14px}.mc-panel .mc-main{overflow:visible}.mc-panel .mc-requests{padding:12px 0;margin-bottom:16px}.mc-panel .mc-detail-heading h3{font-size:20px}\n";
@@ -0,0 +1,17 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { PresentationLocale } from '../../presentation/contracts/types.ts';
3
+ import { type Translator } from './copy.ts';
4
+ export declare function CopyProvider({ t, children }: {
5
+ t: Translator;
6
+ children: ReactNode;
7
+ }): import("react").JSX.Element;
8
+ export declare function HostCopyProvider({ t, children }: {
9
+ t: Translator;
10
+ children: ReactNode;
11
+ }): import("react").JSX.Element;
12
+ export declare function ReportCopyProvider({ locale, children, }: {
13
+ locale: PresentationLocale;
14
+ children: ReactNode;
15
+ }): import("react").JSX.Element;
16
+ export declare function useCopy(): Translator;
17
+ export declare function useActionCopy(): Translator;