@chengxianglibra/dsh-data-analysis 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +6 -3
- package/README.md +6 -3
- package/lib/client/credentials/install.js +1 -1
- package/lib/client/input-context.js +1 -1
- package/lib/client/python-tool/card.js +2 -2
- package/lib/client/python-tool/model.js +1 -1
- package/lib/client/right-tabs/install.js +10 -7
- package/lib/client/settings/install.js +7 -3
- package/lib/client.js +82 -71
- package/lib/datasource/changes-contract.js +6 -2
- package/lib/datasource/python.js +3 -1
- package/lib/plugin.js +11 -5
- package/lib/presentation/execution-policy.js +5 -0
- package/lib/presentation/projection/index.js +27 -10
- package/lib/presentation/tool.js +2 -1
- package/lib/settings.js +11 -15
- package/lib/types/client/settings/card.d.ts +2 -2
- package/lib/types/disclosure/execution-guidance.d.ts +8 -0
- package/lib/types/plugin.d.ts +23 -3
- package/lib/types/presentation/execution-policy.d.ts +5 -0
- package/lib/types/rpc.d.ts +2 -2
- package/lib/types/semantic-reference/rpc.d.ts +2 -2
- package/lib/types/settings.d.ts +8 -8
- package/package.json +79 -69
- package/python/presentation-kit/dist/dsh_data_analysis_presentation_kit-1.1.0-py3-none-any.whl +0 -0
- package/skills/dsh-data-analysis-files/SKILL.md +3 -3
- package/skills/dsh-data-analysis-files/references/delivery.md +2 -2
|
@@ -18,14 +18,18 @@ const descriptor = {
|
|
|
18
18
|
name: 'sessionId',
|
|
19
19
|
wire: 'sessionId',
|
|
20
20
|
source: 'json',
|
|
21
|
-
codec: {
|
|
21
|
+
codec: {
|
|
22
|
+
mode: 'strict',
|
|
23
|
+
typeSymbol: `${owner}#CredentialSessionId`,
|
|
24
|
+
create: () => sessionId,
|
|
25
|
+
},
|
|
22
26
|
},
|
|
23
27
|
],
|
|
24
28
|
cancellation: { parameter: 'signal' },
|
|
25
29
|
result: {
|
|
26
30
|
mode: 'strict',
|
|
27
31
|
typeSymbol: `${owner}#CredentialRevision`,
|
|
28
|
-
|
|
32
|
+
create: () => credentialRevisionSchema,
|
|
29
33
|
},
|
|
30
34
|
};
|
|
31
35
|
export const credentialChangesHost = {
|
package/lib/datasource/python.js
CHANGED
|
@@ -116,6 +116,7 @@ export function registerMarivoPythonTool(ctx, source, service, options = {}) {
|
|
|
116
116
|
command: `${process.platform === 'win32' ? '& ' : ''}${quote(binding.pythonExecutable)} -c ${quote(PYTHON_LAUNCHER)}`,
|
|
117
117
|
workdir: binding.projectRoot,
|
|
118
118
|
timeoutMs: requestedTimeoutMs,
|
|
119
|
+
onExpiry: 'kill',
|
|
119
120
|
signal: prepared.signal,
|
|
120
121
|
stdin: JSON.stringify({
|
|
121
122
|
identity: binding,
|
|
@@ -135,7 +136,8 @@ export function registerMarivoPythonTool(ctx, source, service, options = {}) {
|
|
|
135
136
|
const startedAt = new Date().toISOString();
|
|
136
137
|
phase = 'executing';
|
|
137
138
|
shellStartedAt = performance.now();
|
|
138
|
-
const
|
|
139
|
+
const execution = await service.track(shell.execute(spec));
|
|
140
|
+
const result = await service.track(execution.result());
|
|
139
141
|
executionElapsedMs = performance.now() - shellStartedAt;
|
|
140
142
|
const finishedAt = new Date().toISOString();
|
|
141
143
|
const credentialValues = prepared.values;
|
package/lib/plugin.js
CHANGED
|
@@ -5,7 +5,7 @@ import { createMarivoAgentInstallation } from "./plugin-agents.js";
|
|
|
5
5
|
import { registerPublishingCredentials } from "./report-publishing/adapters.js";
|
|
6
6
|
import { resolvePublishingConfig } from "./report-publishing/config.js";
|
|
7
7
|
import { ReportPublishingService } from "./report-publishing/service.js";
|
|
8
|
-
import { installPythonSettings } from "./settings.js";
|
|
8
|
+
import { currentPythonOptions, installPythonSettings, } from "./settings.js";
|
|
9
9
|
import { resolvePresentationWorkspace } from "./workspace-identity.js";
|
|
10
10
|
export { installMarivoPlugin } from "./plugin-agents.js";
|
|
11
11
|
export { resolvePresentationWorkspace } from "./workspace-identity.js";
|
|
@@ -17,7 +17,7 @@ import { apply as installSkillFilesystem } from '@deepseek-ai/dsh-skill-filesyst
|
|
|
17
17
|
import { WorkspaceId } from '@deepseek-ai/dsh-workspace';
|
|
18
18
|
import z from '@deepseek-ai/schemastery';
|
|
19
19
|
import { MarivoDatasourceBridge } from "./datasource/bridge.js";
|
|
20
|
-
import { DEFAULT_PYTHON_TIMEOUT_MS
|
|
20
|
+
import { DEFAULT_PYTHON_TIMEOUT_MS } from "./datasource/python-options.js";
|
|
21
21
|
import { registerCredentialRpc } from "./datasource/rpc.js";
|
|
22
22
|
import { MarivoCredentialService } from "./datasource/service.js";
|
|
23
23
|
import { registerMarivoRuntimeShellEnvironment } from "./datasource/shell-env.js";
|
|
@@ -47,7 +47,13 @@ export const Config = z.object({
|
|
|
47
47
|
// Defer validation to authoring so loader errors cannot echo configured values.
|
|
48
48
|
datasourceDefaults: z.any(),
|
|
49
49
|
reportPublishing: z.any(),
|
|
50
|
-
pythonTimeoutMs: z
|
|
50
|
+
pythonTimeoutMs: z
|
|
51
|
+
.number()
|
|
52
|
+
.min(1)
|
|
53
|
+
.max(2_147_483_647)
|
|
54
|
+
.step(1)
|
|
55
|
+
.default(DEFAULT_PYTHON_TIMEOUT_MS)
|
|
56
|
+
.volatile(),
|
|
51
57
|
credentialInteraction: z.union(['web', 'none']).default('web'),
|
|
52
58
|
projectRoot: z.string(),
|
|
53
59
|
pythonExecutable: z.string(),
|
|
@@ -65,7 +71,7 @@ function configuredProjectRoot(config, agent) {
|
|
|
65
71
|
/** Ensure the shared Runtime once, mount its skills, then bind each Workspace lazily. */
|
|
66
72
|
export async function apply(ctx, config = {}) {
|
|
67
73
|
const publishingConfig = resolvePublishingConfig(config.reportPublishing);
|
|
68
|
-
const pythonOptions =
|
|
74
|
+
const pythonOptions = currentPythonOptions(config);
|
|
69
75
|
const pythonExecutable = config.pythonExecutable ?? process.env.DSH_DATA_ANALYSIS_PYTHON;
|
|
70
76
|
const runtimeRoot = config.runtimeRoot ?? process.env.DSH_DATA_ANALYSIS_RUNTIME_ROOT;
|
|
71
77
|
const bootstrapPythonExecutable = config.bootstrapPythonExecutable ?? process.env.DSH_DATA_ANALYSIS_BOOTSTRAP_PYTHON;
|
|
@@ -134,7 +140,7 @@ export async function apply(ctx, config = {}) {
|
|
|
134
140
|
return closing;
|
|
135
141
|
};
|
|
136
142
|
try {
|
|
137
|
-
pythonSettings = installPythonSettings(ctx,
|
|
143
|
+
pythonSettings = installPythonSettings(ctx, config);
|
|
138
144
|
unregisterChanges = ctx.typert.register(credentialChangesHost);
|
|
139
145
|
installSkillFilesystem(ctx, {
|
|
140
146
|
providerName: 'dsh-data-analysis-marivo',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MarivoEnvironmentError } from "../../environment/errors.js";
|
|
2
2
|
import { readPythonExecution } from "../../python-execution.js";
|
|
3
3
|
import { PRESENTATION_BUDGETS, PresentationContractError, parsePresentationDocument, parsePresentationDraft, parseTypedDataset, } from "../contracts/index.js";
|
|
4
|
+
import { PRESENTATION_EXECUTION_BUDGETS } from "../execution-policy.js";
|
|
4
5
|
import { readWorkspaceJson } from "./files.js";
|
|
5
6
|
import { MARIVO_PRESENTATION_READ_PROGRAM } from "./program.js";
|
|
6
7
|
export { readWorkspaceJson } from "./files.js";
|
|
@@ -60,16 +61,32 @@ export class MarivoPresentationProjection {
|
|
|
60
61
|
let diagnostics = [];
|
|
61
62
|
const artifactData = new Map();
|
|
62
63
|
if (draft.sources.length > 0) {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
64
|
+
const startedAt = performance.now();
|
|
65
|
+
let result;
|
|
66
|
+
try {
|
|
67
|
+
result = await this.#runner.runChecked({
|
|
68
|
+
program: MARIVO_PRESENTATION_READ_PROGRAM,
|
|
69
|
+
args: [JSON.stringify({ sources: draft.sources, datasets: artifactSelections })],
|
|
70
|
+
limits: {
|
|
71
|
+
timeoutMs: PRESENTATION_EXECUTION_BUDGETS.sourceReadTimeoutMs,
|
|
72
|
+
stdoutMaxBytes: PRESENTATION_BUDGETS.documentBytes,
|
|
73
|
+
stderrMaxBytes: 65_536,
|
|
74
|
+
},
|
|
75
|
+
signal: options.signal,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (!(error instanceof MarivoEnvironmentError) || error.code !== 'subprocess-timeout')
|
|
80
|
+
throw error;
|
|
81
|
+
// Construct only safe operation metadata; upstream messages/details may contain secrets.
|
|
82
|
+
throw new MarivoEnvironmentError('subprocess-timeout', 'Presentation source reading timed out. Source projection did not complete; report submission has not started. Keep the draft and source declarations for retry; do not remove sources or rerun analysis to repair presentation.', {
|
|
83
|
+
phase: 'presentation-source-read',
|
|
84
|
+
timeoutMs: PRESENTATION_EXECUTION_BUDGETS.sourceReadTimeoutMs,
|
|
85
|
+
durationMs: Math.max(0, Math.round(performance.now() - startedAt)),
|
|
86
|
+
sourceCount: draft.sources.length,
|
|
87
|
+
sessionCount: new Set(draft.sources.map((source) => source.ref.sessionId)).size,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
73
90
|
this.#assertReady(options.signal);
|
|
74
91
|
if (result.exitCode !== 0)
|
|
75
92
|
throw new MarivoEnvironmentError('subprocess-failed', 'The bound Marivo presentation read failed.', { exitCode: result.exitCode });
|
package/lib/presentation/tool.js
CHANGED
|
@@ -2,6 +2,7 @@ import { randomUUID } from 'node:crypto';
|
|
|
2
2
|
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
3
3
|
import { registerMarivoTool } from "../tool-lifecycle.js";
|
|
4
4
|
import { parsePresentationBuildId } from "./contracts/index.js";
|
|
5
|
+
import { PRESENTATION_EXECUTION_BUDGETS } from "./execution-policy.js";
|
|
5
6
|
import { MARIVO_PRESENT_TOOL_NAME, MARIVO_PRESENTATION_DELIVERY_KIND, parsePresentationDelivery, presentationReceiptText, } from "./receipt.js";
|
|
6
7
|
import { publishPresentation, resolvePresentation } from "./reports.js";
|
|
7
8
|
/** One call projects a draft, builds the document, commits them, then emits the receipt. */
|
|
@@ -38,7 +39,7 @@ export function createMarivoPresentTool(source, session, lifecycleSignal) {
|
|
|
38
39
|
],
|
|
39
40
|
presentationMeta: (_args, value) => JSON.parse(value.deliveryJson),
|
|
40
41
|
},
|
|
41
|
-
timeoutMs:
|
|
42
|
+
timeoutMs: PRESENTATION_EXECUTION_BUDGETS.toolTimeoutMs,
|
|
42
43
|
async execute(args, exec) {
|
|
43
44
|
const signal = lifecycleSignal ? AbortSignal.any([exec.signal, lifecycleSignal]) : exec.signal;
|
|
44
45
|
if (typeof args.draft_path !== 'string' ||
|
package/lib/settings.js
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import z from '@deepseek-ai/schemastery';
|
|
2
1
|
import { resolvePythonOptions } from "./datasource/python-options.js";
|
|
3
2
|
export const PYTHON_SETTINGS_NAMESPACE = 'dsh-data-analysis';
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
export function currentPythonOptions(options) {
|
|
4
|
+
const value = options.pythonTimeoutMs;
|
|
5
|
+
return resolvePythonOptions({
|
|
6
|
+
pythonTimeoutMs: value !== null && typeof value === 'object' && typeof value.get === 'function'
|
|
7
|
+
? value.get()
|
|
8
|
+
: value,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
/** Config is projected by the Host settings service; a headless composition reads its live entry. */
|
|
8
12
|
export function installPythonSettings(ctx, options) {
|
|
9
|
-
const entry = resolvePythonOptions(options);
|
|
10
|
-
let source = () => entry;
|
|
11
13
|
const dispose = ctx.inject(['settings'], (settingsCtx) => {
|
|
12
|
-
settingsCtx.settings.
|
|
13
|
-
validate: resolvePythonOptions,
|
|
14
|
-
setSource: (current) => {
|
|
15
|
-
source = current;
|
|
16
|
-
},
|
|
17
|
-
onChange: () => { },
|
|
18
|
-
});
|
|
14
|
+
settingsCtx.effect(() => settingsCtx.settings.configure({ auto: false }, ctx.fiber));
|
|
19
15
|
});
|
|
20
|
-
return { get: () =>
|
|
16
|
+
return { get: () => currentPythonOptions(options), dispose: () => dispose.dispose() };
|
|
21
17
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ConfigForm } from '@deepseek-ai/dsh-client-ui-settings/client';
|
|
2
2
|
export interface PythonSettingsValue {
|
|
3
3
|
pythonTimeoutMs: number;
|
|
4
4
|
}
|
|
5
5
|
/** Seconds in the form, exact integer milliseconds at the Host boundary. */
|
|
6
6
|
export declare function timeoutMilliseconds(text: string): number | undefined;
|
|
7
7
|
export declare function PythonSettingsCard({ scope }: {
|
|
8
|
-
scope:
|
|
8
|
+
scope: ConfigForm<PythonSettingsValue>;
|
|
9
9
|
}): import("react").JSX.Element | null;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
2
2
|
import type { MarivoDisclosureController } from './activation.ts';
|
|
3
|
+
declare module '@deepseek-ai/dsh-llm' {
|
|
4
|
+
interface MessageSourceMap {
|
|
5
|
+
plugin: {
|
|
6
|
+
kind: 'plugin';
|
|
7
|
+
plugin: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
}
|
|
3
11
|
export declare const MARIVO_DATASOURCE_CREDENTIAL_PROMPT: string;
|
|
4
12
|
export declare const MARIVO_ANALYSIS_CLOSEOUT_PROMPT: string;
|
|
5
13
|
/** Full-plugin seam: requires its execution tools, credentials service and system sections. */
|
package/lib/types/plugin.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { type ReportPublishingConfig } from './report-publishing/config.ts';
|
|
2
|
+
import { type PythonTimeoutConfig } from './settings.ts';
|
|
2
3
|
export { installMarivoPlugin, type MarivoPluginEnvironmentResolver } from './plugin-agents.ts';
|
|
3
4
|
export { resolvePresentationWorkspace } from './workspace-identity.ts';
|
|
4
5
|
import type { Context } from '@deepseek-ai/cordis';
|
|
5
6
|
import z from '@deepseek-ai/schemastery';
|
|
6
7
|
import type { DatasourceDefaults } from './datasource/defaults.ts';
|
|
7
|
-
import { type MarivoPythonOptions } from './datasource/python-options.ts';
|
|
8
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
13
|
/** Loader-safe configuration for the shared Runtime and per-Workspace bindings. */
|
|
14
|
-
export interface Config extends
|
|
14
|
+
export interface Config extends PythonTimeoutConfig {
|
|
15
15
|
readonly reportPublishing?: ReportPublishingConfig;
|
|
16
16
|
/** Non-secret creation defaults by backend; checked against each live Runtime schema. */
|
|
17
17
|
readonly datasourceDefaults?: DatasourceDefaults;
|
|
@@ -28,6 +28,26 @@ export interface Config extends MarivoPythonOptions {
|
|
|
28
28
|
readonly installTimeoutMs?: number;
|
|
29
29
|
}
|
|
30
30
|
/** Cordis loader schema. Runtime defaults are resolved in {@link apply}. */
|
|
31
|
-
export declare const Config: z<
|
|
31
|
+
export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
32
|
+
datasourceDefaults: z<any, any, "plain">;
|
|
33
|
+
reportPublishing: z<any, any, "plain">;
|
|
34
|
+
pythonTimeoutMs: z<number, number, "volatile-defined">;
|
|
35
|
+
credentialInteraction: z<"none" | "web", "none" | "web", "defined">;
|
|
36
|
+
projectRoot: z<string, string, "plain">;
|
|
37
|
+
pythonExecutable: z<string, string, "plain">;
|
|
38
|
+
runtimeRoot: z<string, string, "plain">;
|
|
39
|
+
bootstrapPythonExecutable: z<string, string, "plain">;
|
|
40
|
+
installTimeoutMs: z<number, number, "defined">;
|
|
41
|
+
}>>, Schemastery.ObjectT<NoInfer<{
|
|
42
|
+
datasourceDefaults: z<any, any, "plain">;
|
|
43
|
+
reportPublishing: z<any, any, "plain">;
|
|
44
|
+
pythonTimeoutMs: z<number, number, "volatile-defined">;
|
|
45
|
+
credentialInteraction: z<"none" | "web", "none" | "web", "defined">;
|
|
46
|
+
projectRoot: z<string, string, "plain">;
|
|
47
|
+
pythonExecutable: z<string, string, "plain">;
|
|
48
|
+
runtimeRoot: z<string, string, "plain">;
|
|
49
|
+
bootstrapPythonExecutable: z<string, string, "plain">;
|
|
50
|
+
installTimeoutMs: z<number, number, "defined">;
|
|
51
|
+
}>>, "plain">;
|
|
32
52
|
/** Ensure the shared Runtime once, mount its skills, then bind each Workspace lazily. */
|
|
33
53
|
export declare function apply(ctx: Context, config?: Config): Promise<() => Promise<void>>;
|
package/lib/types/rpc.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/** Dedicated plugin RPC envelopes over Harness-owned authenticated exact Fetch routes. */
|
|
2
|
-
import { type
|
|
3
|
-
export declare function registerPluginRpc(connection: Pick<HostConnectionHandle, 'fetch'>, channel: string, endpoints: readonly string[], handler:
|
|
2
|
+
import { type ConnectionRpcHandlerResult, type HostConnectionHandle } from '@deepseek-ai/dsh-client-connection';
|
|
3
|
+
export declare function registerPluginRpc(connection: Pick<HostConnectionHandle, 'fetch'>, channel: string, endpoints: readonly string[], handler: (endpoint: string, payload: unknown, signal: AbortSignal) => Promise<ConnectionRpcHandlerResult>): () => Promise<void>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ConnectionRpcHandlerResult, HostConnectionHandle } from '@deepseek-ai/dsh-client-connection';
|
|
2
2
|
import type { MarivoCheckedRunner } from '../environment/types.ts';
|
|
3
3
|
import { SemanticReferenceBridge } from './bridge.ts';
|
|
4
4
|
import { type SemanticReferenceUsage } from './usage.ts';
|
|
@@ -12,4 +12,4 @@ export declare class SemanticReferenceService {
|
|
|
12
12
|
stop(): void;
|
|
13
13
|
close(): Promise<void>;
|
|
14
14
|
}
|
|
15
|
-
export declare function registerSemanticReferenceRpc(connection: HostConnectionHandle, service: SemanticReferenceService, browser?:
|
|
15
|
+
export declare function registerSemanticReferenceRpc(connection: HostConnectionHandle, service: SemanticReferenceService, browser?: (endpoint: string, payload: unknown, signal: AbortSignal) => Promise<ConnectionRpcHandlerResult>): () => Promise<void>;
|
package/lib/types/settings.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
-
import z from '@deepseek-ai/schemastery';
|
|
3
2
|
import { type MarivoPythonOptions } from './datasource/python-options.ts';
|
|
4
3
|
export declare const PYTHON_SETTINGS_NAMESPACE = "dsh-data-analysis";
|
|
5
|
-
export
|
|
6
|
-
pythonTimeoutMs
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
export interface PythonTimeoutConfig {
|
|
5
|
+
pythonTimeoutMs?: number | {
|
|
6
|
+
get(): number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export declare function currentPythonOptions(options: PythonTimeoutConfig): Required<MarivoPythonOptions>;
|
|
10
|
+
/** Config is projected by the Host settings service; a headless composition reads its live entry. */
|
|
11
|
+
export declare function installPythonSettings(ctx: Context, options: PythonTimeoutConfig): {
|
|
12
12
|
get: () => Required<MarivoPythonOptions>;
|
|
13
13
|
dispose: () => Promise<void>;
|
|
14
14
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chengxianglibra/dsh-data-analysis",
|
|
3
3
|
"description": "Marivo runtime, live Help, secure datasource execution and presentation delivery for DeepSeek Harness",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.2",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/chengxianglibra/dsh-data-analysis.git",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"schema": "dsh-data-analysis-compatibility/v2",
|
|
75
75
|
"dsh": {
|
|
76
76
|
"distribution": "@deepseek-ai/dsh",
|
|
77
|
-
"peerRange": ">=0.1.
|
|
77
|
+
"peerRange": ">=0.1.7-rc.1"
|
|
78
78
|
},
|
|
79
79
|
"marivo": {
|
|
80
80
|
"version": "0.5.5",
|
|
@@ -101,7 +101,9 @@
|
|
|
101
101
|
"@deepseek-ai/dsh-client-ui-layout",
|
|
102
102
|
"@deepseek-ai/dsh-client-ui-sidebar-right",
|
|
103
103
|
"@deepseek-ai/dsh-client-ui-settings",
|
|
104
|
-
"@deepseek-ai/dsh-client-ui-settings-plugins"
|
|
104
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins",
|
|
105
|
+
"@deepseek-ai/dsh-client-ui-plugin-manager",
|
|
106
|
+
"@deepseek-ai/dsh-client-ui-workspace"
|
|
105
107
|
],
|
|
106
108
|
"platform": "web"
|
|
107
109
|
},
|
|
@@ -112,37 +114,42 @@
|
|
|
112
114
|
"dependencies": {
|
|
113
115
|
"@aws-sdk/client-s3": "^3.1129.0",
|
|
114
116
|
"@deepseek-ai/schemastery": "^3.18.1",
|
|
117
|
+
"@noble/hashes": "2.4.0",
|
|
115
118
|
"zod": "^4.4.3"
|
|
116
119
|
},
|
|
117
120
|
"devDependencies": {
|
|
118
|
-
"@deepseek-ai/dsh-
|
|
119
|
-
"@deepseek-ai/dsh-
|
|
120
|
-
"@deepseek-ai/dsh-
|
|
121
|
-
"@deepseek-ai/dsh-
|
|
122
|
-
"@deepseek-ai/dsh-
|
|
123
|
-
"@deepseek-ai/dsh-client-
|
|
124
|
-
"@deepseek-ai/dsh-client-ui-
|
|
125
|
-
"@deepseek-ai/dsh-client-ui-
|
|
126
|
-
"@deepseek-ai/dsh-
|
|
127
|
-
"@deepseek-ai/dsh-
|
|
128
|
-
"@deepseek-ai/dsh-
|
|
129
|
-
"@deepseek-ai/dsh-
|
|
130
|
-
"@deepseek-ai/dsh-
|
|
131
|
-
"@deepseek-ai/dsh-
|
|
132
|
-
"@deepseek-ai/dsh-
|
|
133
|
-
"@deepseek-ai/dsh-
|
|
134
|
-
"@deepseek-ai/dsh-
|
|
135
|
-
"@deepseek-ai/dsh-
|
|
136
|
-
"@deepseek-ai/dsh-
|
|
137
|
-
"@deepseek-ai/dsh-
|
|
138
|
-
"@deepseek-ai/dsh-
|
|
139
|
-
"@deepseek-ai/dsh-
|
|
140
|
-
"@deepseek-ai/dsh-
|
|
141
|
-
"@deepseek-ai/dsh-
|
|
142
|
-
"@deepseek-ai/dsh-
|
|
143
|
-
"@deepseek-ai/dsh-
|
|
144
|
-
"@deepseek-ai/dsh-
|
|
145
|
-
"@deepseek-ai/dsh-
|
|
121
|
+
"@deepseek-ai/dsh-app-boot": "0.1.7-rc.1",
|
|
122
|
+
"@deepseek-ai/dsh-config-editor": "0.1.7-rc.1",
|
|
123
|
+
"@deepseek-ai/dsh-agent-loop": "0.1.7-rc.1",
|
|
124
|
+
"@deepseek-ai/dsh-anonymous-user-id": "0.1.7-rc.1",
|
|
125
|
+
"@deepseek-ai/dsh-bash-local": "0.1.7-rc.1",
|
|
126
|
+
"@deepseek-ai/dsh-client-store": "0.1.7-rc.1",
|
|
127
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.1",
|
|
128
|
+
"@deepseek-ai/dsh-client-ui-plugin-manager": "0.1.7-rc.1",
|
|
129
|
+
"@deepseek-ai/dsh-client-ui-workspace": "0.1.7-rc.1",
|
|
130
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.1",
|
|
131
|
+
"@deepseek-ai/dsh-client-ui-sidebar-right": "0.1.7-rc.1",
|
|
132
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.1",
|
|
133
|
+
"@deepseek-ai/dsh-credentials-local": "0.1.7-rc.1",
|
|
134
|
+
"@deepseek-ai/dsh-fs-local": "0.1.7-rc.1",
|
|
135
|
+
"@deepseek-ai/dsh-sandbox-local": "0.1.7-rc.1",
|
|
136
|
+
"@deepseek-ai/dsh-sandbox-policy": "0.1.7-rc.1",
|
|
137
|
+
"@deepseek-ai/dsh-fs-observation-policy": "0.1.7-rc.1",
|
|
138
|
+
"@deepseek-ai/dsh-launch-environment": "0.1.7-rc.1",
|
|
139
|
+
"@deepseek-ai/dsh-llm-deepseek": "0.1.7-rc.1",
|
|
140
|
+
"@deepseek-ai/dsh-scope": "0.1.7-rc.1",
|
|
141
|
+
"@deepseek-ai/dsh-session-persistence": "0.1.7-rc.1",
|
|
142
|
+
"@deepseek-ai/dsh-session-persistence-jsonl": "0.1.7-rc.1",
|
|
143
|
+
"@deepseek-ai/dsh-session-projection": "0.1.7-rc.1",
|
|
144
|
+
"@deepseek-ai/dsh-skill": "0.1.7-rc.1",
|
|
145
|
+
"@deepseek-ai/dsh-storage": "0.1.7-rc.1",
|
|
146
|
+
"@deepseek-ai/dsh-storage-json": "0.1.7-rc.1",
|
|
147
|
+
"@deepseek-ai/dsh-subprocess-local": "0.1.7-rc.1",
|
|
148
|
+
"@deepseek-ai/dsh-tool-bash": "0.1.7-rc.1",
|
|
149
|
+
"@deepseek-ai/dsh-tool-fs": "0.1.7-rc.1",
|
|
150
|
+
"@deepseek-ai/dsh-tool-present": "0.1.7-rc.1",
|
|
151
|
+
"@deepseek-ai/dsh-tool-skill": "0.1.7-rc.1",
|
|
152
|
+
"@deepseek-ai/dsh-util-workspace-path": "0.1.7-rc.1",
|
|
146
153
|
"@shikijs/core": "4.4.3",
|
|
147
154
|
"@shikijs/engine-javascript": "4.4.3",
|
|
148
155
|
"@shikijs/langs": "4.4.3",
|
|
@@ -159,47 +166,50 @@
|
|
|
159
166
|
"sql-formatter": "15.8.2",
|
|
160
167
|
"typescript": "^6.0.3",
|
|
161
168
|
"zustand": "4.4.7",
|
|
162
|
-
"@deepseek-ai/dsh-settings": "0.1.
|
|
163
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.1.
|
|
164
|
-
"@deepseek-ai/dsh-client-ui-settings-plugins": "0.1.
|
|
165
|
-
"@deepseek-ai/dsh-
|
|
169
|
+
"@deepseek-ai/dsh-settings": "0.1.7-rc.1",
|
|
170
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.1.7-rc.1",
|
|
171
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": "0.1.7-rc.1",
|
|
172
|
+
"@deepseek-ai/dsh-ptc-runtime-node": "0.1.7-rc.1",
|
|
173
|
+
"@deepseek-ai/dsh-ptc-runtime": "0.1.7-rc.1"
|
|
166
174
|
},
|
|
167
175
|
"peerDependencies": {
|
|
168
176
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
169
|
-
"@deepseek-ai/dsh-agent": ">=0.1.
|
|
170
|
-
"@deepseek-ai/dsh-api-gateway": ">=0.1.
|
|
171
|
-
"@deepseek-ai/dsh-api-session-controller": ">=0.1.
|
|
172
|
-
"@deepseek-ai/dsh-api-workspace-controller": ">=0.1.
|
|
173
|
-
"@deepseek-ai/dsh-atomic-write": ">=0.1.
|
|
174
|
-
"@deepseek-ai/dsh-client-connection": ">=0.1.
|
|
175
|
-
"@deepseek-ai/dsh-client-locale": ">=0.1.
|
|
176
|
-
"@deepseek-ai/dsh-client-ui-chat": ">=0.1.
|
|
177
|
-
"@deepseek-ai/dsh-client-ui-conversation": ">=0.1.
|
|
178
|
-
"@deepseek-ai/dsh-client-ui-input-trigger": ">=0.1.
|
|
179
|
-
"@deepseek-ai/dsh-client-ui-layout": ">=0.1.
|
|
180
|
-
"@deepseek-ai/dsh-client-ui-primitives": ">=0.1.
|
|
181
|
-
"@deepseek-ai/dsh-client-ui-
|
|
182
|
-
"@deepseek-ai/dsh-client-ui-
|
|
183
|
-
"@deepseek-ai/dsh-client-ui-
|
|
184
|
-
"@deepseek-ai/dsh-
|
|
185
|
-
"@deepseek-ai/dsh-
|
|
186
|
-
"@deepseek-ai/dsh-
|
|
187
|
-
"@deepseek-ai/dsh-
|
|
188
|
-
"@deepseek-ai/dsh-
|
|
189
|
-
"@deepseek-ai/dsh-
|
|
190
|
-
"@deepseek-ai/dsh-
|
|
191
|
-
"@deepseek-ai/dsh-
|
|
192
|
-
"@deepseek-ai/dsh-
|
|
193
|
-
"@deepseek-ai/dsh-
|
|
194
|
-
"@deepseek-ai/dsh-
|
|
195
|
-
"@deepseek-ai/dsh-
|
|
196
|
-
"@deepseek-ai/dsh-
|
|
197
|
-
"@deepseek-ai/dsh-
|
|
198
|
-
"@deepseek-ai/dsh-
|
|
199
|
-
"@deepseek-ai/dsh-
|
|
177
|
+
"@deepseek-ai/dsh-agent": ">=0.1.7-rc.1",
|
|
178
|
+
"@deepseek-ai/dsh-api-gateway": ">=0.1.7-rc.1",
|
|
179
|
+
"@deepseek-ai/dsh-api-session-controller": ">=0.1.7-rc.1",
|
|
180
|
+
"@deepseek-ai/dsh-api-workspace-controller": ">=0.1.7-rc.1",
|
|
181
|
+
"@deepseek-ai/dsh-atomic-write": ">=0.1.7-rc.1",
|
|
182
|
+
"@deepseek-ai/dsh-client-connection": ">=0.1.7-rc.1",
|
|
183
|
+
"@deepseek-ai/dsh-client-locale": ">=0.1.7-rc.1",
|
|
184
|
+
"@deepseek-ai/dsh-client-ui-chat": ">=0.1.7-rc.1",
|
|
185
|
+
"@deepseek-ai/dsh-client-ui-conversation": ">=0.1.7-rc.1",
|
|
186
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": ">=0.1.7-rc.1",
|
|
187
|
+
"@deepseek-ai/dsh-client-ui-layout": ">=0.1.7-rc.1",
|
|
188
|
+
"@deepseek-ai/dsh-client-ui-primitives": ">=0.1.7-rc.1",
|
|
189
|
+
"@deepseek-ai/dsh-client-ui-plugin-manager": ">=0.1.7-rc.1",
|
|
190
|
+
"@deepseek-ai/dsh-client-ui-workspace": ">=0.1.7-rc.1",
|
|
191
|
+
"@deepseek-ai/dsh-client-ui-sidebar": ">=0.1.7-rc.1",
|
|
192
|
+
"@deepseek-ai/dsh-client-ui-sidebar-right": ">=0.1.7-rc.1",
|
|
193
|
+
"@deepseek-ai/dsh-client-ui-tool": ">=0.1.7-rc.1",
|
|
194
|
+
"@deepseek-ai/dsh-credentials": ">=0.1.7-rc.1",
|
|
195
|
+
"@deepseek-ai/dsh-home-paths": ">=0.1.7-rc.1",
|
|
196
|
+
"@deepseek-ai/dsh-llm": ">=0.1.7-rc.1",
|
|
197
|
+
"@deepseek-ai/dsh-sandbox": ">=0.1.7-rc.1",
|
|
198
|
+
"@deepseek-ai/dsh-scope": ">=0.1.7-rc.1",
|
|
199
|
+
"@deepseek-ai/dsh-session": ">=0.1.7-rc.1",
|
|
200
|
+
"@deepseek-ai/dsh-shell": ">=0.1.7-rc.1",
|
|
201
|
+
"@deepseek-ai/dsh-shell-env": ">=0.1.7-rc.1",
|
|
202
|
+
"@deepseek-ai/dsh-skill-filesystem": ">=0.1.7-rc.1",
|
|
203
|
+
"@deepseek-ai/dsh-storage-domain": ">=0.1.7-rc.1",
|
|
204
|
+
"@deepseek-ai/dsh-system-prompt": ">=0.1.7-rc.1",
|
|
205
|
+
"@deepseek-ai/dsh-tools": ">=0.1.7-rc.1",
|
|
206
|
+
"@deepseek-ai/dsh-typert-protocol": ">=0.1.7-rc.1",
|
|
207
|
+
"@deepseek-ai/dsh-typert-registry": ">=0.1.7-rc.1",
|
|
208
|
+
"@deepseek-ai/dsh-util-values": ">=0.1.7-rc.1",
|
|
209
|
+
"@deepseek-ai/dsh-workspace": ">=0.1.7-rc.1",
|
|
200
210
|
"react": "^18.3.1",
|
|
201
|
-
"@deepseek-ai/dsh-settings": ">=0.1.
|
|
202
|
-
"@deepseek-ai/dsh-client-ui-settings": ">=0.1.
|
|
203
|
-
"@deepseek-ai/dsh-client-ui-settings-plugins": ">=0.1.
|
|
211
|
+
"@deepseek-ai/dsh-settings": ">=0.1.7-rc.1",
|
|
212
|
+
"@deepseek-ai/dsh-client-ui-settings": ">=0.1.7-rc.1",
|
|
213
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": ">=0.1.7-rc.1"
|
|
204
214
|
}
|
|
205
215
|
}
|
package/python/presentation-kit/dist/dsh_data_analysis_presentation_kit-1.1.0-py3-none-any.whl
CHANGED
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dsh-data-analysis-files
|
|
3
|
-
description: 分析附件或 Workspace 中的 CSV、JSON、Parquet、Excel 数据,回答问题或交付 CSV、JSON、PNG
|
|
3
|
+
description: 分析附件或 Workspace 中的 CSV、JSON、Parquet、Excel 数据,回答问题或交付 CSV、TSV、XLSX、JSON、PNG 文件并使用原生表格预览。可接续报告展示,无需先建立 Marivo datasource 或语义模型。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 文件分析
|
|
@@ -37,8 +37,8 @@ description: 分析附件或 Workspace 中的 CSV、JSON、Parquet、Excel 数
|
|
|
37
37
|
|
|
38
38
|
## 按用户目标交付
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
普通答案和简短比较表格直接在聊天中回答,不额外创建文件。用户要查看或交付已有的 CSV、TSV、XLSX 表格文件时,确认当前 Session 可访问该文件后,按[文件交付](references/delivery.md)调用实际可用的 Harness 原生 `present`;交付卡片由 Harness 在右侧打开只读表格预览。用户要求生成 CSV、TSV、JSON、PNG 等实际文件时,通过 `marivo_python` 生成最终文件,优先写入当前绑定 Workspace;确认执行成功、文件存在后再调用 `present`。文件生成和原生声明分别核对,路径或代码块不能替代交付。不承诺插件能写入 XLSX,也不把 Harness 对旧 `.xls` 的预览当作插件可分析 `.xls`。
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
需要在报告中筛选或联动分析结果的图表、表格、报告或看板时加载 `dsh-data-analysis-presentation`,将 DataFrame 交给现有 writer,关联实际返回的 `codeRef`,用 `marivo_present` 保存固定 Build。在正文说明文件名与分析范围,不将文件结果冒充 Marivo Artifact 或 Evidence。普通 `present` 不赋予文件 Report/Build 或 Evidence 身份。
|
|
43
43
|
|
|
44
44
|
需要起步代码时读[简短示例](references/examples.md);其中提供无需额外依赖的 PNG 写入代码,也通过 `marivo_python` 执行。
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# 文件交付与恢复
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
用户要求查看或交付 CSV、TSV、XLSX、JSON、PNG 等实际文件时读取本页。生成或确认文件后,按当前 Harness 原生 `present` 工具契约交付;不猜测附件缓存或 Shell 私有临时目录。工具拥有路径与类型校验,契约见 Harness `dsh-v0.1.7-rc.1/packages/deliverables/tool-present/README.zh.md`。
|
|
4
4
|
|
|
5
5
|
## 生成与声明
|
|
6
6
|
|
|
7
7
|
只交付用户要求的最终文件。报告内部的 `presentation.json`、computed 数据和 receipt 不作为默认附件;用户另行要求时,先确认实际文件已经存在且当前 Session 可访问。浏览器内生成的下载不伪装成 Session 文件;报告 HTML 交给展示 Skill 的导出或发布流程。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
文件生成成功,或用户要求预览且已有文件确认可访问后,调用 `present`,分别核对生成与声明结果。CSV、TSV、XLSX 由 Harness 原生表格预览读取文件,契约见 `dsh-v0.1.7-rc.1/packages/client/ui-sidebar-documentpreview/README.zh.md`;这是只读文件视图,不是 Marivo Report/Build,也不代表插件支持写入 XLSX 或分析旧 `.xls`。当前缺少 `present` 时,说明文件实际状态和原生交付能力不可用,并提供准确路径;不虚构卡片,不安装工具或改写 profile。
|
|
10
10
|
|
|
11
11
|
## 失败与再次交付
|
|
12
12
|
|