@chengxianglibra/dsh-data-analysis 0.1.2 → 0.2.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 (222) hide show
  1. package/README.en.md +135 -0
  2. package/README.md +105 -98
  3. package/cordis.patch.yml +1 -1
  4. package/lib/bin/environment.js +8 -6
  5. package/lib/client/credentials/changes.js +74 -0
  6. package/lib/client/credentials/create-datasource.js +126 -22
  7. package/lib/client/credentials/credential-draft.js +42 -0
  8. package/lib/client/credentials/defaults.js +11 -0
  9. package/lib/client/credentials/descriptions.js +46 -0
  10. package/lib/client/credentials/install.js +209 -81
  11. package/lib/client/credentials/model.js +323 -51
  12. package/lib/client/credentials/report-publishing.js +96 -0
  13. package/lib/client/credentials/styles.js +13 -9
  14. package/lib/client/i18n/context.js +22 -0
  15. package/lib/client/i18n/copy.js +60 -0
  16. package/lib/client/i18n/credentials.js +475 -0
  17. package/lib/client/i18n/host.js +28 -0
  18. package/lib/client/i18n/navigation.js +41 -0
  19. package/lib/client/i18n/presentation.js +577 -0
  20. package/lib/client/i18n/python.js +36 -0
  21. package/lib/client/i18n/semantic.js +441 -0
  22. package/lib/client/i18n/settings.js +30 -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/settings/card.js +90 -0
  36. package/lib/client/settings/install.js +10 -0
  37. package/lib/client/workspace-header-action.js +14 -1
  38. package/lib/client/workspace-shortcuts.js +26 -0
  39. package/lib/client.js +388 -242
  40. package/lib/compatibility.js +1 -1
  41. package/lib/datasource/authoring.js +43 -4
  42. package/lib/datasource/bridge-programs.js +23 -20
  43. package/lib/datasource/bridge.js +46 -3
  44. package/lib/datasource/changes-contract.js +41 -0
  45. package/lib/datasource/changes.js +49 -0
  46. package/lib/datasource/configure.js +39 -0
  47. package/lib/datasource/defaults.js +25 -0
  48. package/lib/datasource/index.js +2 -1
  49. package/lib/datasource/python-options.js +15 -0
  50. package/lib/datasource/python.js +119 -25
  51. package/lib/datasource/rpc.js +75 -13
  52. package/lib/datasource/service.js +286 -11
  53. package/lib/datasource/test.js +3 -2
  54. package/lib/disclosure/activation.js +19 -7
  55. package/lib/disclosure/execution-guidance.js +49 -0
  56. package/lib/disclosure/help.js +4 -1
  57. package/lib/environment/runtime.js +35 -34
  58. package/lib/environment/workspace.js +18 -1
  59. package/lib/lifecycle.js +33 -0
  60. package/lib/plugin-agents.js +154 -0
  61. package/lib/plugin.js +98 -172
  62. package/lib/presentation/asset.js +34 -0
  63. package/lib/presentation/assets/portable.js +14 -14
  64. package/lib/presentation/assets/static.js +344 -73
  65. package/lib/presentation/build/index.js +3 -2
  66. package/lib/presentation/commit.js +19 -12
  67. package/lib/presentation/contracts/asset-path.js +9 -0
  68. package/lib/presentation/contracts/catalog.js +62 -0
  69. package/lib/presentation/contracts/charts.js +0 -23
  70. package/lib/presentation/contracts/index.js +17 -5
  71. package/lib/presentation/contracts/types.js +1 -1
  72. package/lib/presentation/delivery.js +45 -30
  73. package/lib/presentation/export-html.js +214 -0
  74. package/lib/presentation/files.js +4 -5
  75. package/lib/presentation/projection/index.js +2 -1
  76. package/lib/presentation/projection/program.js +2 -9
  77. package/lib/presentation/projection/sql-code.js +13 -13
  78. package/lib/presentation/reports.js +114 -17
  79. package/lib/presentation/rpc.js +96 -58
  80. package/lib/presentation/tool.js +6 -10
  81. package/lib/report-publishing/adapters.js +111 -0
  82. package/lib/report-publishing/config.js +69 -0
  83. package/lib/report-publishing/service.js +180 -0
  84. package/lib/rpc.js +49 -0
  85. package/lib/semantic-browser/contracts.js +17 -0
  86. package/lib/semantic-browser/program.js +10 -0
  87. package/lib/semantic-browser/service.js +40 -6
  88. package/lib/semantic-reference/bridge.js +10 -1
  89. package/lib/semantic-reference/contracts.js +20 -6
  90. package/lib/semantic-reference/environment.js +56 -0
  91. package/lib/semantic-reference/labels.js +16 -0
  92. package/lib/semantic-reference/rpc.js +39 -18
  93. package/lib/semantic-reference/search.js +5 -4
  94. package/lib/semantic-reference/usage.js +12 -3
  95. package/lib/settings.js +21 -0
  96. package/lib/tool-lifecycle.js +22 -0
  97. package/lib/types/client/credentials/changes.d.ts +9 -0
  98. package/lib/types/client/credentials/create-datasource.d.ts +3 -1
  99. package/lib/types/client/credentials/credential-draft.d.ts +14 -0
  100. package/lib/types/client/credentials/defaults.d.ts +2 -0
  101. package/lib/types/client/credentials/descriptions.d.ts +1 -0
  102. package/lib/types/client/credentials/install.d.ts +19 -1
  103. package/lib/types/client/credentials/model.d.ts +31 -11
  104. package/lib/types/client/credentials/report-publishing.d.ts +5 -0
  105. package/lib/types/client/credentials/styles.d.ts +1 -1
  106. package/lib/types/client/i18n/context.d.ts +17 -0
  107. package/lib/types/client/i18n/copy.d.ts +821 -0
  108. package/lib/types/client/i18n/credentials.d.ts +475 -0
  109. package/lib/types/client/i18n/host.d.ts +17 -0
  110. package/lib/types/client/i18n/navigation.d.ts +41 -0
  111. package/lib/types/client/i18n/presentation.d.ts +577 -0
  112. package/lib/types/client/i18n/python.d.ts +19 -0
  113. package/lib/types/client/i18n/semantic.d.ts +441 -0
  114. package/lib/types/client/i18n/settings.d.ts +16 -0
  115. package/lib/types/client/input-context.d.ts +19 -0
  116. package/lib/types/client/presentation/ask-dsh.d.ts +4 -8
  117. package/lib/types/client/presentation/catalog-model.d.ts +24 -0
  118. package/lib/types/client/presentation/catalog.d.ts +20 -0
  119. package/lib/types/client/presentation/chart-tooltip.d.ts +2 -2
  120. package/lib/types/client/presentation/context-reference.d.ts +12 -0
  121. package/lib/types/client/presentation/copy-context.d.ts +2 -2
  122. package/lib/types/client/presentation/delivery-model.d.ts +27 -6
  123. package/lib/types/client/presentation/delivery.d.ts +8 -7
  124. package/lib/types/client/presentation/download.d.ts +2 -0
  125. package/lib/types/client/presentation/export-menu.d.ts +26 -0
  126. package/lib/types/client/presentation/export-view.d.ts +63 -0
  127. package/lib/types/client/presentation/host-entry.d.ts +8 -2
  128. package/lib/types/client/presentation/icons.d.ts +1 -1
  129. package/lib/types/client/presentation/model.d.ts +14 -15
  130. package/lib/types/client/presentation/reader.d.ts +15 -2
  131. package/lib/types/client/presentation/reference-source.d.ts +9 -0
  132. package/lib/types/client/presentation/source-code-model.d.ts +2 -1
  133. package/lib/types/client/presentation/source-code.d.ts +0 -5
  134. package/lib/types/client/presentation/source-dialog.d.ts +1 -2
  135. package/lib/types/client/presentation/sources.d.ts +5 -5
  136. package/lib/types/client/presentation/styles.d.ts +1 -1
  137. package/lib/types/client/presentation/table.d.ts +5 -1
  138. package/lib/types/client/python-tool/card.d.ts +2 -0
  139. package/lib/types/client/python-tool/execution-error.d.ts +3 -0
  140. package/lib/types/client/python-tool/install.d.ts +2 -0
  141. package/lib/types/client/python-tool/model.d.ts +20 -0
  142. package/lib/types/client/right-tabs/install.d.ts +18 -0
  143. package/lib/types/client/right-tabs/live-delivery.d.ts +8 -0
  144. package/lib/types/client/right-tabs/navigation.d.ts +17 -0
  145. package/lib/types/client/right-tabs/page.d.ts +36 -0
  146. package/lib/types/client/right-tabs/styles.d.ts +2 -0
  147. package/lib/types/client/rpc.d.ts +3 -0
  148. package/lib/types/client/semantic-reference.d.ts +4 -0
  149. package/lib/types/client/settings/card.d.ts +9 -0
  150. package/lib/types/client/settings/install.d.ts +2 -0
  151. package/lib/types/client/workspace-header-action.d.ts +1 -1
  152. package/lib/types/client/workspace-shortcuts.d.ts +15 -0
  153. package/lib/types/client.d.ts +5 -2
  154. package/lib/types/compatibility.d.ts +1 -1
  155. package/lib/types/datasource/authoring.d.ts +10 -0
  156. package/lib/types/datasource/bridge.d.ts +23 -2
  157. package/lib/types/datasource/changes-contract.d.ts +18 -0
  158. package/lib/types/datasource/changes.d.ts +15 -0
  159. package/lib/types/datasource/configure.d.ts +7 -0
  160. package/lib/types/datasource/defaults.d.ts +7 -0
  161. package/lib/types/datasource/index.d.ts +6 -1
  162. package/lib/types/datasource/python-options.d.ts +8 -0
  163. package/lib/types/datasource/python.d.ts +17 -2
  164. package/lib/types/datasource/rpc.d.ts +2 -1
  165. package/lib/types/datasource/service.d.ts +48 -5
  166. package/lib/types/datasource/test.d.ts +1 -1
  167. package/lib/types/disclosure/activation.d.ts +2 -1
  168. package/lib/types/disclosure/execution-guidance.d.ts +6 -0
  169. package/lib/types/disclosure/help.d.ts +1 -1
  170. package/lib/types/environment/types.d.ts +2 -1
  171. package/lib/types/environment/workspace.d.ts +1 -0
  172. package/lib/types/lifecycle.d.ts +8 -0
  173. package/lib/types/plugin-agents.d.ts +29 -0
  174. package/lib/types/plugin.d.ts +12 -28
  175. package/lib/types/presentation/asset.d.ts +6 -0
  176. package/lib/types/presentation/build/index.d.ts +7 -2
  177. package/lib/types/presentation/commit.d.ts +1 -1
  178. package/lib/types/presentation/contracts/asset-path.d.ts +2 -0
  179. package/lib/types/presentation/contracts/catalog.d.ts +27 -0
  180. package/lib/types/presentation/contracts/charts.d.ts +0 -2
  181. package/lib/types/presentation/contracts/types.d.ts +7 -4
  182. package/lib/types/presentation/delivery.d.ts +1 -1
  183. package/lib/types/presentation/export-html.d.ts +13 -0
  184. package/lib/types/presentation/reports.d.ts +6 -1
  185. package/lib/types/presentation/rpc.d.ts +3 -2
  186. package/lib/types/presentation/tool.d.ts +2 -2
  187. package/lib/types/report-publishing/adapters.d.ts +6 -0
  188. package/lib/types/report-publishing/config.d.ts +22 -0
  189. package/lib/types/report-publishing/service.d.ts +68 -0
  190. package/lib/types/rpc.d.ts +3 -0
  191. package/lib/types/semantic-browser/contracts.d.ts +7 -0
  192. package/lib/types/semantic-browser/service.d.ts +7 -1
  193. package/lib/types/semantic-reference/bridge.d.ts +1 -0
  194. package/lib/types/semantic-reference/contracts.d.ts +5 -2
  195. package/lib/types/semantic-reference/environment.d.ts +22 -0
  196. package/lib/types/semantic-reference/labels.d.ts +16 -0
  197. package/lib/types/semantic-reference/rpc.d.ts +1 -1
  198. package/lib/types/semantic-reference/search.d.ts +1 -1
  199. package/lib/types/settings.d.ts +14 -0
  200. package/lib/types/tool-lifecycle.d.ts +4 -0
  201. package/lib/types/workspace-identity.d.ts +6 -0
  202. package/lib/workspace-identity.js +9 -0
  203. package/package.json +93 -61
  204. package/python/presentation-kit/dist/dsh_data_analysis_presentation_kit-1.1.0-py3-none-any.whl +0 -0
  205. package/skills/dsh-data-analysis-files/SKILL.md +44 -0
  206. package/skills/dsh-data-analysis-files/references/delivery.md +15 -0
  207. package/skills/dsh-data-analysis-files/references/examples.md +93 -0
  208. package/skills/dsh-data-analysis-presentation/SKILL.md +15 -15
  209. package/skills/dsh-data-analysis-presentation/references/examples/artifact.draft.json +13 -4
  210. package/skills/dsh-data-analysis-presentation/references/examples/charts.draft.json +3 -2
  211. package/skills/dsh-data-analysis-presentation/references/examples/comparison.draft.json +3 -2
  212. package/skills/dsh-data-analysis-presentation/references/examples/computed-sources.draft.json +12 -5
  213. package/skills/dsh-data-analysis-presentation/references/examples/computed.draft.json +3 -2
  214. package/skills/dsh-data-analysis-presentation/references/examples/interaction.draft.json +3 -2
  215. package/skills/dsh-data-analysis-presentation/references/examples/source-only.draft.json +12 -4
  216. package/skills/dsh-data-analysis-presentation/references/examples.md +3 -1
  217. package/skills/dsh-data-analysis-presentation/references/export-html.md +7 -0
  218. package/skills/dsh-data-analysis-presentation/references/interaction.md +1 -1
  219. package/skills/dsh-data-analysis-presentation/references/narrative.md +1 -1
  220. package/skills/dsh-data-analysis-presentation/references/publishing.md +3 -0
  221. package/skills/dsh-data-analysis-presentation/references/schema.md +29 -2
  222. package/lib/types/client/presentation/install.d.ts +0 -15
@@ -0,0 +1,36 @@
1
+ import type { PresentationReceipt } from '../../presentation/contracts/types.ts';
2
+ import { CredentialClientModel } from '../credentials/model.ts';
3
+ import { ReportCatalogModel } from '../presentation/catalog-model.ts';
4
+ import { PresentationDeliveryModel, type PresentationRpc } from '../presentation/delivery-model.ts';
5
+ import type { ReaderViewMemory } from '../presentation/reader.tsx';
6
+ import { SemanticBrowserModel } from '../semantic-browser/model.ts';
7
+ import type { Directory, Resource } from './navigation.ts';
8
+ export type PageTarget = Resource | {
9
+ kind: Directory;
10
+ workspaceId: string;
11
+ };
12
+ export interface PageState {
13
+ error?: string;
14
+ notice?: string;
15
+ newer?: PresentationReceipt;
16
+ }
17
+ /** Lifetime belongs to a Host tab occurrence, never to a React body mount. */
18
+ export declare class TabPage {
19
+ #private;
20
+ readonly sessionId: string;
21
+ readonly target: PageTarget;
22
+ readonly reader: PresentationDeliveryModel;
23
+ readonly catalog: ReportCatalogModel;
24
+ readonly semantic: SemanticBrowserModel;
25
+ readonly datasources: CredentialClientModel;
26
+ readonly viewMemory: ReaderViewMemory;
27
+ constructor(sessionId: string, target: PageTarget, rpc: PresentationRpc, occurrenceId?: string);
28
+ getSnapshot: () => PageState;
29
+ subscribe: (listener: () => void) => () => void;
30
+ patch(change: Partial<PageState>): void;
31
+ navigate(revision: number, force?: boolean, history?: boolean): Promise<void>;
32
+ refresh(confirmDiscard?: () => boolean): Promise<void>;
33
+ publicationChanged(workspaceId: string, reportId?: string): Promise<void>;
34
+ unavailable(message: string): void;
35
+ dispose(): void;
36
+ }
@@ -0,0 +1,2 @@
1
+ /** Host-only chrome. Portable reports keep their own independent stylesheet. */
2
+ export declare const rightTabStyles = "\n.rt-page{height:100%;width:100%;min-width:0;overflow:auto;padding:16px;box-sizing:border-box;color:var(--dsw-alias-label-primary,#182a33);background:var(--dsw-alias-bg-base,#fff);container-type:inline-size;font:14px/1.6 system-ui,sans-serif}\n.rt-page *{box-sizing:border-box}.rt-page h2{font-size:18px;overflow-wrap:anywhere}.rt-page .rt-heading{margin:0 0 4px}.rt-heading-row{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:4px}.rt-page .rt-heading-row .rt-heading{margin:0}.rt-heading-row>button{flex:none}.rt-caption{color:var(--dsw-alias-label-secondary,#627580);font-size:12px;margin:0 0 16px;overflow-wrap:anywhere}\n.rt-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding-bottom:12px;border-bottom:1px solid var(--dsw-alias-border-l2,#dce4e8);margin-bottom:16px}\n.rt-page button,.rt-page select,.rt-page input{font:inherit;color:inherit;max-width:100%}.rt-page button{cursor:pointer;border:1px solid var(--dsw-alias-border-l2,#dce4e8);background:var(--dsw-alias-bg-base,#fff);border-radius:7px;padding:6px 10px}.rt-page button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#edf4f3)}.rt-page button:disabled{opacity:.5;cursor:default}.rt-page :focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#087b70);outline-offset:3px}\n.rt-page select{padding:8px;border:1px solid var(--dsw-alias-border-l2,#dce4e8);border-radius:7px;background:var(--dsw-alias-bg-base,#fff)}.rt-page [role=alert]{color:var(--dsw-alias-state-warn-label,#b14927);overflow-wrap:anywhere}.rt-notice{padding:12px;border:1px solid var(--dsw-alias-border-l2,#dce4e8);border-radius:8px;background:var(--dsw-alias-bg-module-platform,#f5f7f9)}\n.rt-page .pd-catalog{padding:0;overflow:auto}.rt-page .pd-history{position:static;max-height:300px;border:1px solid var(--dsw-alias-border-l2,#dce4e8);border-radius:8px;margin-bottom:16px;width:100%}\n.rt-page .rt-refresh{display:grid;place-items:center;padding:7px;border-color:transparent;background:transparent}\n@container(max-width:650px){.rt-page .pr-reader{padding:24px 4px}.rt-page .pr-reader h1{font-size:25px}.rt-page .pr-block-metric{padding:14px}.rt-page .pr-metric-value{font-size:clamp(18px,7cqi,30px)}}\n";
@@ -0,0 +1,3 @@
1
+ /** Keep feature RPC names while using Harness's authenticated shared API transport. */
2
+ import type { ClientConnectionRpc } from '@deepseek-ai/dsh-client-connection/client';
3
+ export declare function createPluginRpc(rpc: ClientConnectionRpc): ClientConnectionRpc;
@@ -0,0 +1,4 @@
1
+ import type { ReferenceInsert } from '@deepseek-ai/dsh-client-ui-conversation/client';
2
+ import { type Envelope } from '../semantic-reference/contracts.ts';
3
+ /** Both the @ picker and semantic details insert exactly this Host reference. */
4
+ export declare function semanticReference(envelope: Envelope): ReferenceInsert;
@@ -0,0 +1,9 @@
1
+ import type { SettingsScope } from '@deepseek-ai/dsh-client-ui-settings/client';
2
+ export interface PythonSettingsValue {
3
+ pythonTimeoutMs: number;
4
+ }
5
+ /** Seconds in the form, exact integer milliseconds at the Host boundary. */
6
+ export declare function timeoutMilliseconds(text: string): number | undefined;
7
+ export declare function PythonSettingsCard({ scope }: {
8
+ scope: SettingsScope<PythonSettingsValue>;
9
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,2 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ export declare function installSettings(ctx: Context): void;
@@ -1,6 +1,6 @@
1
1
  export declare function WorkspaceHeaderAction({ label, icon, disabled, title, onClick, }: {
2
2
  label: string;
3
- icon: 'semantic' | 'credentials';
3
+ icon: 'semantic' | 'credentials' | 'reports';
4
4
  disabled: boolean;
5
5
  title?: string;
6
6
  onClick: () => void;
@@ -0,0 +1,15 @@
1
+ import type { SessionSnapshot } from '@deepseek-ai/dsh-api-session-controller/client';
2
+ import { type ConversationSnapshot } from '@deepseek-ai/dsh-client-ui-conversation/client';
3
+ export declare const workspaceDirectories: {
4
+ readonly datasources: "marivo.credentials.datasources-and-credentials";
5
+ readonly semantic: "marivo.navigation.semantic-layer";
6
+ readonly reports: "marivo.presentation.reports";
7
+ };
8
+ export type WorkspaceDirectory = keyof typeof workspaceDirectories;
9
+ /** Only the Host's blank phase exposes preparation actions; drafts are untouched. */
10
+ export declare function WorkspaceShortcuts({ session, conversation, disabled, open, }: {
11
+ session?: SessionSnapshot;
12
+ conversation?: ConversationSnapshot;
13
+ disabled: boolean;
14
+ open: (page: WorkspaceDirectory) => void;
15
+ }): import("react").JSX.Element | null;
@@ -1,7 +1,10 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
+ import { installRightTabs } from './client/right-tabs/install.tsx';
2
3
  export { marivoPresentationDeliveryDefinition, parsePresentationDurableContent, presentationDeliveryFromEvent, presentationsForNode, } from './client/presentation/delivery.ts';
3
4
  export { PresentationDeliveryModel } from './client/presentation/delivery-model.ts';
4
5
  export { HostPresentationReader } from './client/presentation/host-entry.tsx';
5
- export { installPresentation, PresentationCards, PresentationOverlay, } from './client/presentation/install.tsx';
6
6
  export declare const inject: string[];
7
- export declare function apply(ctx: Context): void;
7
+ export declare function apply(ctx: Context, options?: {
8
+ diagnostics?: boolean;
9
+ onInstalled?: (controller: ReturnType<typeof installRightTabs>) => void;
10
+ }): void;
@@ -17,7 +17,7 @@ export interface DshDataAnalysisCompatibility {
17
17
  /** The package semver and the compatibility contract shipped in this exact installation. */
18
18
  export declare const PLUGIN_VERSION: string;
19
19
  export declare const DSH_DATA_ANALYSIS_COMPATIBILITY: DshDataAnalysisCompatibility;
20
- /** Every DSH peer is required and must use this one verified release. */
20
+ /** Every DSH peer is required and must satisfy this declared compatibility range. */
21
21
  export declare const DSH_PEER_RANGE: string;
22
22
  export declare const DSH_DISTRIBUTION: "@deepseek-ai/dsh";
23
23
  export declare const DSH_PEER_DEPENDENCIES: Readonly<{
@@ -18,6 +18,16 @@ export declare const datasourceAuthoringSchema: z.ZodObject<{
18
18
  }, z.core.$strip>>;
19
19
  }, z.core.$strip>;
20
20
  export type DatasourceAuthoring = z.infer<typeof datasourceAuthoringSchema>;
21
+ export interface DatasourceConfiguration {
22
+ name: string;
23
+ backend: string;
24
+ fields: Record<string, unknown>;
25
+ version: string;
26
+ }
27
+ export interface DatasourceUpdateInput extends DatasourceCreateInput {
28
+ name: string;
29
+ version: string;
30
+ }
21
31
  export interface DatasourceCreateInput {
22
32
  backend: string;
23
33
  fields: Record<string, unknown>;
@@ -1,7 +1,7 @@
1
- import type { JsonValue } from '@deepseek-ai/dsh-session';
1
+ import type { JsonValue } from '@deepseek-ai/dsh-util-values';
2
2
  import type { MarivoBridgeSource } from '../environment/source.ts';
3
3
  import type { MarivoCheckedRunner, MarivoEnvironmentBinding } from '../environment/types.ts';
4
- import { type DatasourceAuthoring, type DatasourceCreateInput } from './authoring.ts';
4
+ import { type DatasourceAuthoring, type DatasourceConfiguration, type DatasourceCreateInput, type DatasourceUpdateInput } from './authoring.ts';
5
5
  interface JsonObject {
6
6
  [key: string]: JsonValue;
7
7
  }
@@ -40,11 +40,20 @@ export interface MarivoDatasourceTestResult {
40
40
  }
41
41
  export interface MarivoDatasourceBridgePort {
42
42
  readonly binding: Readonly<MarivoEnvironmentBinding>;
43
+ remove?(description: Readonly<MarivoDatasourceDescription>, signal?: AbortSignal): Promise<{
44
+ name?: string;
45
+ error?: string;
46
+ }>;
43
47
  authoring?(signal?: AbortSignal): Promise<DatasourceAuthoring>;
44
48
  create?(input: DatasourceCreateInput, signal?: AbortSignal): Promise<{
45
49
  name?: string;
46
50
  error?: string;
47
51
  }>;
52
+ configuration?(name: string, signal?: AbortSignal): Promise<DatasourceConfiguration>;
53
+ update?(input: DatasourceUpdateInput, signal?: AbortSignal): Promise<{
54
+ name?: string;
55
+ error?: string;
56
+ }>;
48
57
  describe(name: string, signal?: AbortSignal): Promise<MarivoDatasourceDescription>;
49
58
  inventory(signal?: AbortSignal): Promise<MarivoDatasourceDescription[]>;
50
59
  test(description: Readonly<MarivoDatasourceDescription>, values: Readonly<Record<string, string>>, signal?: AbortSignal): Promise<MarivoDatasourceTestResult>;
@@ -58,11 +67,23 @@ export declare class MarivoDatasourceBridge {
58
67
  readonly binding: Readonly<MarivoEnvironmentBinding>;
59
68
  constructor(runner: MarivoCheckedRunner);
60
69
  authoring(signal?: AbortSignal): Promise<DatasourceAuthoring>;
70
+ configuration(name: string, signal?: AbortSignal): Promise<DatasourceConfiguration>;
71
+ update(input: DatasourceUpdateInput, signal?: AbortSignal): Promise<{
72
+ name?: string;
73
+ error?: string;
74
+ }>;
61
75
  create(input: DatasourceCreateInput, signal?: AbortSignal): Promise<{
62
76
  name?: string;
63
77
  error?: string;
64
78
  }>;
65
79
  describe(name: string, signal?: AbortSignal): Promise<MarivoDatasourceDescription>;
80
+ remove(description: Readonly<MarivoDatasourceDescription>, signal?: AbortSignal): Promise<{
81
+ error: string;
82
+ name?: undefined;
83
+ } | {
84
+ name: string;
85
+ error?: undefined;
86
+ }>;
66
87
  inventory(signal?: AbortSignal): Promise<MarivoDatasourceDescription[]>;
67
88
  test(description: Readonly<MarivoDatasourceDescription>, values: Readonly<Record<string, string>>, signal?: AbortSignal): Promise<MarivoDatasourceTestResult>;
68
89
  }
@@ -0,0 +1,18 @@
1
+ import type { TypertRemoteContribution } from '@deepseek-ai/dsh-typert-protocol';
2
+ import type { TypertContribution } from '@deepseek-ai/dsh-typert-registry';
3
+ import { z } from 'zod';
4
+ export declare const CREDENTIAL_CHANGES_SERVICE = "dshDataAnalysisCredentials";
5
+ export declare const credentialRevisionSchema: z.ZodObject<{
6
+ generation: z.ZodString;
7
+ cursor: z.ZodString;
8
+ }, z.core.$strict>;
9
+ export type CredentialRevision = z.infer<typeof credentialRevisionSchema>;
10
+ export declare const credentialChangesHost: TypertContribution;
11
+ export declare const credentialChangesRemote: TypertRemoteContribution;
12
+ declare module '@deepseek-ai/dsh-typert-protocol' {
13
+ interface TypertRemoteNamespaceMap {
14
+ dshDataAnalysisCredentials: {
15
+ changes(sessionId: string, signal?: AbortSignal): AsyncIterable<CredentialRevision>;
16
+ };
17
+ }
18
+ }
@@ -0,0 +1,15 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
3
+ import { type CredentialRevision } from './changes-contract.ts';
4
+ import { type MarivoCredentialService } from './service.ts';
5
+ /** Reuses the Host's logical stream carrier; credentials and waiting calls keep their owner. */
6
+ export declare class CredentialChangesService extends TypertRemoteService {
7
+ private readonly credentials;
8
+ private readonly lifetime;
9
+ private readonly tasks;
10
+ private closing?;
11
+ constructor(ctx: Context, credentials: Pick<MarivoCredentialService, 'waitWatch'>);
12
+ changes(sessionId: string, caller: AbortSignal): AsyncIterable<CredentialRevision>;
13
+ private snapshot;
14
+ close(): Promise<void>;
15
+ }
@@ -0,0 +1,7 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import { type ToolDefinition } from '@deepseek-ai/dsh-tools';
3
+ import { type MarivoDatasourceBridgeSource } from './bridge.ts';
4
+ import type { MarivoCredentialService } from './service.ts';
5
+ export declare const MARIVO_DATASOURCE_CONFIGURE_TOOL_NAME = "marivo_datasource_configure";
6
+ export declare function createMarivoDatasourceConfigureTool(source: MarivoDatasourceBridgeSource, service: MarivoCredentialService): ToolDefinition;
7
+ export declare function registerMarivoDatasourceConfigureTool(ctx: Context, source: MarivoDatasourceBridgeSource, service: MarivoCredentialService): () => Promise<void>;
@@ -0,0 +1,7 @@
1
+ import type { DatasourceAuthoring } from './authoring.ts';
2
+ export type DatasourceDefaults = Record<string, Record<string, unknown>>;
3
+ export type DatasourceAuthoringView = DatasourceAuthoring & {
4
+ creationDefaults?: DatasourceDefaults;
5
+ };
6
+ /** Validate against this Workspace's live Runtime; never include config values in errors. */
7
+ export declare function withDatasourceDefaults(schema: DatasourceAuthoring, configured: unknown): DatasourceAuthoringView;
@@ -1,6 +1,11 @@
1
+ export type { DatasourceConfiguration, DatasourceUpdateInput } from './authoring.ts';
1
2
  export type { MarivoDatasourceBridgePort, MarivoDatasourceBridgeSource, MarivoDatasourceDescription, MarivoDatasourceFailure, MarivoDatasourceInventoryBridge, MarivoDatasourceInventoryBridgeSource, MarivoDatasourceRepair, MarivoDatasourceTestResult, } from './bridge.ts';
2
3
  export { MarivoDatasourceBridge, resolveMarivoDatasourceBridge, resolveMarivoDatasourceInventoryBridge, } from './bridge.ts';
3
- export { registerMarivoPythonTool } from './python.ts';
4
+ export { createMarivoDatasourceConfigureTool, MARIVO_DATASOURCE_CONFIGURE_TOOL_NAME, registerMarivoDatasourceConfigureTool, } from './configure.ts';
5
+ export type { MarivoPythonExecutionSummary } from './python.ts';
6
+ export { MarivoPythonExecutionError, registerMarivoPythonTool } from './python.ts';
7
+ export type { MarivoPythonOptions } from './python-options.ts';
8
+ export type { ConfigurationRequestView, ConfigurationResult, DatasourceConfigureInput, } from './service.ts';
4
9
  export { MarivoCredentialService } from './service.ts';
5
10
  export { assertMarivoCredentialReferences, MARIVO_CREDENTIAL_STORAGE_PREFIX, marivoCredentialStorageRef, } from './shell-env.ts';
6
11
  export { createMarivoDatasourceTestTool, MARIVO_DATASOURCE_TEST_TOOL_NAME, registerMarivoDatasourceTestTool, } from './test.ts';
@@ -0,0 +1,8 @@
1
+ export declare const DEFAULT_PYTHON_TIMEOUT_MS = 120000;
2
+ export interface MarivoPythonOptions {
3
+ pythonTimeoutMs?: number;
4
+ }
5
+ export type MarivoPythonOptionsSource = MarivoPythonOptions | (() => MarivoPythonOptions);
6
+ /** Do not echo rejected inputs: tool arguments and configuration are not trusted diagnostics. */
7
+ export declare function pythonTimeout(value: unknown, name: string): number;
8
+ export declare function resolvePythonOptions(options: MarivoPythonOptions): Required<MarivoPythonOptions>;
@@ -1,4 +1,19 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
2
  import { type MarivoDatasourceBridgeSource } from './bridge.ts';
3
- import type { MarivoCredentialService } from './service.ts';
4
- export declare function registerMarivoPythonTool(ctx: Context, source: MarivoDatasourceBridgeSource, service: MarivoCredentialService): () => void;
3
+ import { type MarivoPythonOptionsSource } from './python-options.ts';
4
+ import { type MarivoCredentialService } from './service.ts';
5
+ export interface MarivoPythonExecutionSummary {
6
+ phase: 'preparing' | 'executing' | 'capturing-code';
7
+ reason: 'not-started' | 'succeeded' | 'nonzero-exit' | 'timed-out' | 'cancelled' | 'unknown';
8
+ requestedTimeoutMs: number | null;
9
+ effectiveTimeoutMs: number | null;
10
+ elapsedMs: number;
11
+ executionElapsedMs: number | null;
12
+ nextAction: string | null;
13
+ }
14
+ /** The message survives Harness error normalization; it contains only safe adapter facts. */
15
+ export declare class MarivoPythonExecutionError extends Error {
16
+ readonly execution: MarivoPythonExecutionSummary;
17
+ constructor(message: string, execution: MarivoPythonExecutionSummary);
18
+ }
19
+ export declare function registerMarivoPythonTool(ctx: Context, source: MarivoDatasourceBridgeSource, service: MarivoCredentialService, options?: MarivoPythonOptionsSource): () => Promise<void>;
@@ -1,4 +1,5 @@
1
1
  import type { HostConnectionHandle } from '@deepseek-ai/dsh-client-connection';
2
2
  import type { MarivoDatasourceBridgePort } from './bridge.ts';
3
+ import { type DatasourceDefaults } from './defaults.ts';
3
4
  import { type MarivoCredentialService } from './service.ts';
4
- export declare function registerCredentialRpc(connection: HostConnectionHandle, service: MarivoCredentialService, workspace: (id: string) => Promise<MarivoDatasourceBridgePort>): () => Promise<void>;
5
+ export declare function registerCredentialRpc(connection: HostConnectionHandle, service: MarivoCredentialService, workspace: (id: string) => Promise<MarivoDatasourceBridgePort>, datasourceDefaults?: DatasourceDefaults): () => Promise<void>;
@@ -1,12 +1,12 @@
1
1
  import type { Agent } from '@deepseek-ai/dsh-agent';
2
2
  import { type CredentialProvider } from '@deepseek-ai/dsh-credentials';
3
- import type { JsonValue } from '@deepseek-ai/dsh-session';
4
3
  import type { ToolExecution } from '@deepseek-ai/dsh-tools';
5
- import type { DatasourceCreateInput } from './authoring.ts';
4
+ import type { JsonValue } from '@deepseek-ai/dsh-util-values';
5
+ import type { DatasourceCreateInput, DatasourceUpdateInput } from './authoring.ts';
6
6
  import type { MarivoDatasourceBridgePort, MarivoDatasourceDescription, MarivoDatasourceTestResult } from './bridge.ts';
7
7
  export declare const CREDENTIAL_CHANNEL = "/dsh-data-analysis-credentials";
8
8
  export type CredentialStore = Pick<CredentialProvider, 'describe' | 'resolve' | 'set' | 'unset'>;
9
- export type CredentialAction = 'save' | 'update' | 'delete' | 'test' | 'submit' | 'diagnose';
9
+ export type CredentialAction = 'save' | 'update' | 'delete' | 'delete-datasource' | 'test' | 'submit' | 'diagnose';
10
10
  export interface CredentialContextView {
11
11
  token: string;
12
12
  workspaceId: string;
@@ -31,16 +31,49 @@ export interface CredentialRequestView {
31
31
  id: string;
32
32
  sessionId: string;
33
33
  context: CredentialContextView;
34
- status: 'awaiting-input' | 'executing' | 'awaiting-decision' | 'succeeded' | 'handed-off' | 'call-ended' | 'context-changed';
34
+ status: 'awaiting-input' | 'executing' | 'awaiting-decision' | 'succeeded' | 'handed-off' | 'call-ended' | 'cancelled' | 'context-changed';
35
35
  failure?: MarivoDatasourceTestResult;
36
36
  endedAt?: number;
37
37
  }
38
+ export interface DatasourceConfigureInput {
39
+ mode: 'create' | 'edit';
40
+ name?: string;
41
+ reason: string;
42
+ }
43
+ export interface ConfigurationRequestView extends Omit<CredentialRequestView, 'context'> {
44
+ configuration: DatasourceConfigureInput;
45
+ workspaceId: string;
46
+ context?: CredentialContextView;
47
+ }
48
+ interface PendingConfiguration {
49
+ view: ConfigurationRequestView;
50
+ settled: boolean;
51
+ controller: AbortController;
52
+ exec: ToolExecution;
53
+ resolve: () => Promise<MarivoDatasourceBridgePort>;
54
+ fingerprint: string;
55
+ sessionIdentity: string;
56
+ signal: AbortSignal;
57
+ finish: (value: ConfigurationResult) => void;
58
+ stop: () => void;
59
+ }
60
+ export interface ConfigurationResult {
61
+ status: 'ok' | 'failed' | 'cancelled' | 'call-ended' | 'context-changed' | 'needs-configuration';
62
+ name?: string;
63
+ latency_ms?: number | null;
64
+ failure?: MarivoDatasourceTestResult['failure'];
65
+ repair?: MarivoDatasourceTestResult['repair'];
66
+ }
38
67
  export interface CredentialOperationView {
39
68
  id: string;
40
69
  scope: string;
41
70
  action: CredentialAction;
42
71
  status: 'running' | 'succeeded' | 'failed' | 'cancelled';
43
- phase: 'saving' | 'validating' | 'settled';
72
+ phase: 'saving' | 'removing' | 'validating' | 'settled';
73
+ deleteCredentials?: boolean;
74
+ datasourceRemoved?: boolean;
75
+ deletedCredentials?: string[];
76
+ credentialDeleteFailures?: string[];
44
77
  saved: string[];
45
78
  errors: string[];
46
79
  result?: MarivoDatasourceTestResult;
@@ -81,17 +114,25 @@ export declare class MarivoCredentialService {
81
114
  createDatasource(generation: string, fingerprint: string, input: DatasourceCreateInput, resolve: () => Promise<MarivoDatasourceBridgePort>, caller: AbortSignal): Promise<{
82
115
  name: string;
83
116
  }>;
117
+ updateDatasource(generation: string, fingerprint: string, input: DatasourceUpdateInput, resolve: () => Promise<MarivoDatasourceBridgePort>, caller: AbortSignal): Promise<{
118
+ name: string;
119
+ }>;
120
+ configure(exec: ToolExecution, resolve: () => Promise<MarivoDatasourceBridgePort>, input: DatasourceConfigureInput): Promise<ConfigurationResult>;
121
+ configurationRequest(id: string, workspaceId: string, resolve: () => Promise<MarivoDatasourceBridgePort>, caller: AbortSignal): Promise<PendingConfiguration>;
122
+ selectConfiguration(id: string, workspaceId: string, name: string, resolve: () => Promise<MarivoDatasourceBridgePort>, caller: AbortSignal): Promise<ConfigurationRequestView>;
84
123
  prepare(_kind: 'test', exec: ToolExecution, resolve: () => Promise<MarivoDatasourceBridgePort>, name: string): Promise<MarivoDatasourceTestResult | CredentialNeedsInput>;
85
124
  prepareExecution(exec: ToolExecution, resolve: () => Promise<MarivoDatasourceBridgePort>, names: string[]): Promise<PreparedCredentialExecution | CredentialNeedsInput | MarivoDatasourceTestResult>;
86
125
  watch(sessionId: string, cursor?: string): {
87
126
  generation: string;
88
127
  cursor: string;
89
128
  requests: CredentialRequestView[];
129
+ configurationRequests: ConfigurationRequestView[];
90
130
  };
91
131
  waitWatch(sessionId: string, cursor: string | undefined, signal: AbortSignal): Promise<{
92
132
  generation: string;
93
133
  cursor: string;
94
134
  requests: CredentialRequestView[];
135
+ configurationRequests: ConfigurationRequestView[];
95
136
  }>;
96
137
  operation(generation: string, id: string, scope: string): CredentialOperationView | undefined;
97
138
  start(input: {
@@ -103,6 +144,7 @@ export declare class MarivoCredentialService {
103
144
  requestId?: string;
104
145
  changes?: Record<string, string>;
105
146
  reference?: string;
147
+ deleteCredentials?: boolean;
106
148
  }): CredentialOperationView;
107
149
  cancelOperation(generation: string, id: string, scope: string): void;
108
150
  cancelRequest(id: string): void;
@@ -110,3 +152,4 @@ export declare class MarivoCredentialService {
110
152
  track<T>(task: Promise<T>): Promise<T>;
111
153
  close(): Promise<void>;
112
154
  }
155
+ export {};
@@ -4,6 +4,6 @@ import { type MarivoDatasourceBridgeSource } from './bridge.ts';
4
4
  import type { MarivoCredentialService } from './service.ts';
5
5
  export declare const MARIVO_DATASOURCE_TEST_TOOL_NAME = "marivo_datasource_test";
6
6
  export declare function createMarivoDatasourceTestTool(source: MarivoDatasourceBridgeSource, service: MarivoCredentialService): ToolDefinition;
7
- export declare function registerMarivoDatasourceTestTool(ctx: Context, source: MarivoDatasourceBridgeSource, service: MarivoCredentialService): () => void;
7
+ export declare function registerMarivoDatasourceTestTool(ctx: Context, source: MarivoDatasourceBridgeSource, service: MarivoCredentialService): () => Promise<void>;
8
8
  /** Preserve the datasource tools' public status family; raw Marivo results stay inside the service. */
9
9
  export declare function datasourceToolValue(result: Awaited<ReturnType<MarivoCredentialService['prepare']>>): any;
@@ -63,11 +63,12 @@ export declare class MarivoDisclosureController {
63
63
  constructor(agent: Agent, bridgeSource: MarivoHelpBridgeSource, options?: MarivoDisclosureOptions);
64
64
  get activeSkills(): readonly MarivoSkillName[];
65
65
  telemetry(): MarivoDisclosureTelemetry;
66
- addDisposer(disposer: () => void): void;
66
+ addDisposer(disposer: () => unknown): void;
67
67
  observeToolResult(exec: Readonly<ToolExecution>, result: Readonly<ToolExecutionResult>): void;
68
68
  resolveDelivery(query: Readonly<MarivoHelpDeliveryQuery>): MarivoHelpDelivery;
69
69
  prepareStep(messages: readonly UserMessage[], signal: AbortSignal): Promise<UserMessage[]>;
70
70
  dispose(): void;
71
+ close(): Promise<void>;
71
72
  }
72
73
  /** Install skill-triggered Marivo live-help disclosure for one Agent scope. */
73
74
  export declare function installMarivoDisclosure(_ctx: Context, agent: Agent, bridgeSource: MarivoHelpBridgeSource, options?: MarivoDisclosureOptions): MarivoDisclosureController;
@@ -0,0 +1,6 @@
1
+ import type { Agent } from '@deepseek-ai/dsh-agent';
2
+ import type { MarivoDisclosureController } from './activation.ts';
3
+ export declare const MARIVO_DATASOURCE_CREDENTIAL_PROMPT: string;
4
+ export declare const MARIVO_ANALYSIS_CLOSEOUT_PROMPT: string;
5
+ /** Full-plugin seam: requires its execution tools, credentials service and system sections. */
6
+ export declare function installMarivoExecutionGuidance(agent: Agent, controller: MarivoDisclosureController): () => void;
@@ -61,4 +61,4 @@ export declare function readMarivoHelpTargets(bridge: MarivoHelpBridgePort, rawT
61
61
  /** Build the native Harness ToolDefinition without registering Agent activation behavior. */
62
62
  export declare function createMarivoHelpTool(bridgeSource: MarivoHelpBridgeSource, limitOverrides?: Partial<MarivoHelpLimits>, resolveDelivery?: MarivoHelpDeliveryResolver): ToolDefinition;
63
63
  /** Register the focused Help Tool; skill-triggered root disclosure is composed separately. */
64
- export declare function registerMarivoHelpTool(ctx: Context, bridgeSource: MarivoHelpBridgeSource, limits?: Partial<MarivoHelpLimits>, resolveDelivery?: MarivoHelpDeliveryResolver): () => void;
64
+ export declare function registerMarivoHelpTool(ctx: Context, bridgeSource: MarivoHelpBridgeSource, limits?: Partial<MarivoHelpLimits>, resolveDelivery?: MarivoHelpDeliveryResolver): () => Promise<void>;
@@ -7,7 +7,8 @@ export interface MarivoEnvironmentConfig {
7
7
  export interface SharedMarivoRuntimeConfig {
8
8
  runtimeRoot?: string;
9
9
  pythonExecutable?: string;
10
- uvExecutable?: string;
10
+ /** Absolute local Python for venv creation; defaults to python3 (Windows: python). */
11
+ bootstrapPythonExecutable?: string;
11
12
  installTimeoutMs?: number;
12
13
  }
13
14
  /** Validated identity and stable skill root of the shared Marivo installation. */
@@ -6,5 +6,6 @@ export declare class MarivoWorkspaceEnvironmentManager {
6
6
  readonly runtime: SharedMarivoRuntime;
7
7
  constructor(runtime: SharedMarivoRuntime);
8
8
  resolve(projectRoot: string): Promise<MarivoEnvironment>;
9
+ close(): Promise<void>;
9
10
  dispose(): void;
10
11
  }
@@ -0,0 +1,8 @@
1
+ /** Tracks owned work, including work whose caller stopped waiting after cancellation. */
2
+ export declare class PendingTasks {
3
+ #private;
4
+ track<T>(task: Promise<T>): Promise<T>;
5
+ drain(): Promise<void>;
6
+ }
7
+ /** Start every stop synchronously, then await every cleanup even if another one fails. */
8
+ export declare function finishCleanup(actions: readonly (() => unknown)[]): Promise<void>;
@@ -0,0 +1,29 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { Agent } from '@deepseek-ai/dsh-agent';
3
+ import { type MarivoPythonOptions } from './datasource/python-options.ts';
4
+ import { type CredentialStore, MarivoCredentialService } from './datasource/service.ts';
5
+ import type { MarivoHelpBridgeSource } from './disclosure/bridge.ts';
6
+ import { type MarivoDisclosureOptions } from './disclosure/index.ts';
7
+ import { MarivoEnvironment } from './environment/index.ts';
8
+ import type { ReportPublishingService } from './report-publishing/service.ts';
9
+ export type MarivoPluginEnvironmentResolver = (agent: Agent) => MarivoEnvironment | Promise<MarivoEnvironment>;
10
+ /**
11
+ * Install one already-bound environment into every live or subsequently published Agent scope.
12
+ * Installation is transactional for existing Agents and is disposed with the Cordis plugin.
13
+ */
14
+ export declare function createMarivoAgentInstallation(ctx: Context, environmentOrResolver: MarivoEnvironment | MarivoPluginEnvironmentResolver, options?: MarivoDisclosureOptions & MarivoPythonOptions & {
15
+ /** Override used by focused tests; normal plugin installation uses ctx.credentials. */
16
+ reportPublishing?: ReportPublishingService;
17
+ credentials?: CredentialStore;
18
+ credentialService?: MarivoCredentialService;
19
+ credentialInteraction?: 'web' | 'none';
20
+ /** Read once at call admission so saved settings affect existing Agents. */
21
+ pythonOptionsSource?: () => MarivoPythonOptions;
22
+ /** Runtime-scoped Help source; normal plugin installation never binds Help to a Workspace. */
23
+ helpBridgeSource?: MarivoHelpBridgeSource;
24
+ }): {
25
+ install(): void;
26
+ close: () => Promise<void>;
27
+ };
28
+ /** Stops synchronously; the returned Promise also waits for all owned work. */
29
+ export declare function installMarivoPlugin(...args: Parameters<typeof createMarivoAgentInstallation>): () => Promise<void>;
@@ -1,18 +1,20 @@
1
- /** Cordis lifecycle adapter for the Web-profile shared Marivo Runtime. */
1
+ import { type ReportPublishingConfig } from './report-publishing/config.ts';
2
+ export { installMarivoPlugin, type MarivoPluginEnvironmentResolver } from './plugin-agents.ts';
3
+ export { resolvePresentationWorkspace } from './workspace-identity.ts';
2
4
  import type { Context } from '@deepseek-ai/cordis';
3
- import type { Agent } from '@deepseek-ai/dsh-agent';
4
5
  import z from '@deepseek-ai/schemastery';
5
- import { type CredentialStore, MarivoCredentialService } from './datasource/service.ts';
6
- import { type MarivoHelpBridgeSource } from './disclosure/bridge.ts';
7
- import { type MarivoDisclosureOptions } from './disclosure/index.ts';
8
- import { MarivoEnvironment } from './environment/index.ts';
6
+ import type { DatasourceDefaults } from './datasource/defaults.ts';
7
+ import { type MarivoPythonOptions } from './datasource/python-options.ts';
8
+ export { MARIVO_DATASOURCE_CREDENTIAL_PROMPT } from './disclosure/execution-guidance.ts';
9
9
  /** Cordis plugin name used by loader diagnostics and lifecycle logs. */
10
10
  export declare const name = "dsh-data-analysis";
11
11
  /** Services that must exist before the plugin binds and watches Agent scopes. */
12
12
  export declare const inject: string[];
13
- export declare const MARIVO_DATASOURCE_CREDENTIAL_PROMPT: string;
14
13
  /** Loader-safe configuration for the shared Runtime and per-Workspace bindings. */
15
- export interface Config {
14
+ export interface Config extends MarivoPythonOptions {
15
+ readonly reportPublishing?: ReportPublishingConfig;
16
+ /** Non-secret creation defaults by backend; checked against each live Runtime schema. */
17
+ readonly datasourceDefaults?: DatasourceDefaults;
16
18
  readonly credentialInteraction?: 'web' | 'none';
17
19
  /** Explicit project root override; otherwise each Agent uses session.header.cwd. */
18
20
  readonly projectRoot?: string;
@@ -20,30 +22,12 @@ export interface Config {
20
22
  readonly pythonExecutable?: string;
21
23
  /** Shared Runtime root; defaults below $DSH_HOME. */
22
24
  readonly runtimeRoot?: string;
23
- /** Local uv executable; an explicit value must be absolute. */
24
- readonly uvExecutable?: string;
25
+ /** Local Python used to create the managed venv; an explicit value must be absolute. */
26
+ readonly bootstrapPythonExecutable?: string;
25
27
  /** Maximum time for installation and lock acquisition. */
26
28
  readonly installTimeoutMs?: number;
27
29
  }
28
30
  /** Cordis loader schema. Runtime defaults are resolved in {@link apply}. */
29
31
  export declare const Config: z<Config>;
30
- export type MarivoPluginEnvironmentResolver = (agent: Agent) => MarivoEnvironment | Promise<MarivoEnvironment>;
31
- /**
32
- * Install one already-bound environment into every live or subsequently published Agent scope.
33
- * Installation is transactional for existing Agents and is disposed with the Cordis plugin.
34
- */
35
- export declare function installMarivoPlugin(ctx: Context, environmentOrResolver: MarivoEnvironment | MarivoPluginEnvironmentResolver, options?: MarivoDisclosureOptions & {
36
- /** Override used by focused tests; normal plugin installation uses ctx.credentials. */
37
- credentials?: CredentialStore;
38
- credentialService?: MarivoCredentialService;
39
- credentialInteraction?: 'web' | 'none';
40
- /** Runtime-scoped Help source; normal plugin installation never binds Help to a Workspace. */
41
- helpBridgeSource?: MarivoHelpBridgeSource;
42
- }): () => void;
43
- /** Resolve only Harness-owned, header-validated Workspace membership; never infer it from a path. */
44
- export declare function resolvePresentationWorkspace(ctx: Context, sessionId: string): {
45
- id: string;
46
- path: string;
47
- };
48
32
  /** Ensure the shared Runtime once, mount its skills, then bind each Workspace lazily. */
49
33
  export declare function apply(ctx: Context, config?: Config): Promise<() => Promise<void>>;
@@ -0,0 +1,6 @@
1
+ import { type PresentationAsset, type PresentationReceipt } from './contracts/index.ts';
2
+ /** Read a fixed, receipt-verified snapshot; never access analysis or current. */
3
+ export declare function readReceiptAsset(root: string, workspaceId: string, receipt: PresentationReceipt, asset: PresentationAsset, signal: AbortSignal): Promise<{
4
+ bytes: Buffer<ArrayBufferLike>;
5
+ sha256: string;
6
+ }>;
@@ -2,10 +2,15 @@ import { type PresentationDocument } from '../contracts/index.ts';
2
2
  export interface BuiltPresentation {
3
3
  document: PresentationDocument;
4
4
  documentBytes: Buffer;
5
- htmlBytes: Buffer;
5
+ htmlBytes?: Buffer;
6
6
  }
7
7
  /**
8
8
  * Render an S2 snapshot without reading source data, generating identity, or writing files.
9
9
  * Both renderers are built into the installed package; execution needs no build tooling.
10
10
  */
11
- export declare function buildPresentation(value: PresentationDocument): Promise<BuiltPresentation>;
11
+ export declare function buildPresentation(value: PresentationDocument): Promise<BuiltPresentation & {
12
+ htmlBytes: Buffer;
13
+ }>;
14
+ export declare function buildPresentation(value: PresentationDocument, options: {
15
+ html?: boolean;
16
+ }): Promise<BuiltPresentation>;
@@ -1,4 +1,4 @@
1
1
  import type { BuiltPresentation } from './build/index.ts';
2
2
  import { type PresentationReceipt } from './contracts/index.ts';
3
- /** Owns only one newly-created build. A single directory rename publishes both complete files. */
3
+ /** Owns only one newly-created build. A single directory rename publishes all requested complete files. */
4
4
  export declare function commitPresentation(workspaceRoot: string, input: BuiltPresentation, assertOwner: () => Promise<void>, signal?: AbortSignal): Promise<PresentationReceipt>;
@@ -0,0 +1,2 @@
1
+ import type { PresentationAsset } from './types.ts';
2
+ export declare function presentationAssetRelativePath(reportId: string, buildId: string, asset: PresentationAsset): string;