@chengxianglibra/dsh-data-analysis 0.1.2 → 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.
- package/README.md +136 -99
- package/cordis.patch.yml +1 -1
- package/lib/bin/environment.js +8 -6
- package/lib/client/credentials/changes.js +74 -0
- package/lib/client/credentials/create-datasource.js +126 -22
- package/lib/client/credentials/credential-draft.js +42 -0
- package/lib/client/credentials/defaults.js +11 -0
- package/lib/client/credentials/descriptions.js +46 -0
- package/lib/client/credentials/install.js +209 -81
- package/lib/client/credentials/model.js +323 -51
- package/lib/client/credentials/report-publishing.js +96 -0
- package/lib/client/credentials/styles.js +13 -9
- package/lib/client/i18n/context.js +22 -0
- package/lib/client/i18n/copy.js +57 -0
- package/lib/client/i18n/credentials.js +475 -0
- package/lib/client/i18n/host.js +27 -0
- package/lib/client/i18n/navigation.js +41 -0
- package/lib/client/i18n/presentation.js +577 -0
- package/lib/client/i18n/python.js +36 -0
- package/lib/client/i18n/semantic.js +441 -0
- package/lib/client/input-context.js +21 -0
- package/lib/client/python-tool/card.js +35 -0
- package/lib/client/python-tool/execution-error.js +35 -0
- package/lib/client/python-tool/install.js +9 -0
- package/lib/client/python-tool/model.js +101 -0
- package/lib/client/right-tabs/install.js +535 -0
- package/lib/client/right-tabs/live-delivery.js +58 -0
- package/lib/client/right-tabs/navigation.js +47 -0
- package/lib/client/right-tabs/page.js +178 -0
- package/lib/client/right-tabs/styles.js +11 -0
- package/lib/client/rpc.js +5 -0
- package/lib/client/semantic-reference.js +10 -0
- package/lib/client/workspace-header-action.js +14 -1
- package/lib/client/workspace-shortcuts.js +26 -0
- package/lib/client.js +365 -242
- package/lib/compatibility.js +1 -1
- package/lib/datasource/authoring.js +43 -4
- package/lib/datasource/bridge-programs.js +23 -20
- package/lib/datasource/bridge.js +46 -3
- package/lib/datasource/changes-contract.js +41 -0
- package/lib/datasource/changes.js +49 -0
- package/lib/datasource/configure.js +39 -0
- package/lib/datasource/defaults.js +25 -0
- package/lib/datasource/index.js +2 -1
- package/lib/datasource/python-options.js +21 -0
- package/lib/datasource/python.js +116 -25
- package/lib/datasource/rpc.js +75 -13
- package/lib/datasource/service.js +286 -11
- package/lib/datasource/test.js +2 -1
- package/lib/disclosure/activation.js +19 -7
- package/lib/disclosure/execution-guidance.js +52 -0
- package/lib/disclosure/help.js +4 -1
- package/lib/environment/runtime.js +35 -34
- package/lib/environment/workspace.js +18 -1
- package/lib/lifecycle.js +33 -0
- package/lib/plugin-agents.js +154 -0
- package/lib/plugin.js +94 -172
- package/lib/presentation/asset.js +34 -0
- package/lib/presentation/assets/portable.js +14 -14
- package/lib/presentation/assets/static.js +344 -73
- package/lib/presentation/build/index.js +3 -2
- package/lib/presentation/commit.js +19 -12
- package/lib/presentation/contracts/asset-path.js +9 -0
- package/lib/presentation/contracts/catalog.js +62 -0
- package/lib/presentation/contracts/charts.js +0 -23
- package/lib/presentation/contracts/index.js +17 -5
- package/lib/presentation/contracts/types.js +1 -1
- package/lib/presentation/delivery.js +45 -30
- package/lib/presentation/export-html.js +214 -0
- package/lib/presentation/files.js +4 -5
- package/lib/presentation/projection/index.js +2 -1
- package/lib/presentation/projection/program.js +2 -9
- package/lib/presentation/projection/sql-code.js +13 -13
- package/lib/presentation/reports.js +114 -17
- package/lib/presentation/rpc.js +96 -58
- package/lib/presentation/tool.js +6 -10
- package/lib/report-publishing/adapters.js +111 -0
- package/lib/report-publishing/config.js +69 -0
- package/lib/report-publishing/service.js +180 -0
- package/lib/rpc.js +49 -0
- package/lib/semantic-browser/contracts.js +17 -0
- package/lib/semantic-browser/program.js +10 -0
- package/lib/semantic-browser/service.js +40 -6
- package/lib/semantic-reference/bridge.js +10 -1
- package/lib/semantic-reference/contracts.js +20 -6
- package/lib/semantic-reference/environment.js +56 -0
- package/lib/semantic-reference/labels.js +16 -0
- package/lib/semantic-reference/rpc.js +39 -18
- package/lib/semantic-reference/search.js +5 -4
- package/lib/semantic-reference/usage.js +12 -3
- package/lib/tool-lifecycle.js +22 -0
- package/lib/types/client/credentials/changes.d.ts +9 -0
- package/lib/types/client/credentials/create-datasource.d.ts +3 -1
- package/lib/types/client/credentials/credential-draft.d.ts +14 -0
- package/lib/types/client/credentials/defaults.d.ts +2 -0
- package/lib/types/client/credentials/descriptions.d.ts +1 -0
- package/lib/types/client/credentials/install.d.ts +19 -1
- package/lib/types/client/credentials/model.d.ts +31 -11
- package/lib/types/client/credentials/report-publishing.d.ts +5 -0
- package/lib/types/client/credentials/styles.d.ts +1 -1
- package/lib/types/client/i18n/context.d.ts +17 -0
- package/lib/types/client/i18n/copy.d.ts +806 -0
- package/lib/types/client/i18n/credentials.d.ts +475 -0
- package/lib/types/client/i18n/host.d.ts +16 -0
- package/lib/types/client/i18n/navigation.d.ts +41 -0
- package/lib/types/client/i18n/presentation.d.ts +577 -0
- package/lib/types/client/i18n/python.d.ts +19 -0
- package/lib/types/client/i18n/semantic.d.ts +441 -0
- package/lib/types/client/input-context.d.ts +19 -0
- package/lib/types/client/presentation/ask-dsh.d.ts +4 -8
- package/lib/types/client/presentation/catalog-model.d.ts +24 -0
- package/lib/types/client/presentation/catalog.d.ts +20 -0
- package/lib/types/client/presentation/chart-tooltip.d.ts +2 -2
- package/lib/types/client/presentation/context-reference.d.ts +12 -0
- package/lib/types/client/presentation/copy-context.d.ts +2 -2
- package/lib/types/client/presentation/delivery-model.d.ts +27 -6
- package/lib/types/client/presentation/delivery.d.ts +8 -7
- package/lib/types/client/presentation/download.d.ts +2 -0
- package/lib/types/client/presentation/export-menu.d.ts +26 -0
- package/lib/types/client/presentation/export-view.d.ts +63 -0
- package/lib/types/client/presentation/host-entry.d.ts +8 -2
- package/lib/types/client/presentation/icons.d.ts +1 -1
- package/lib/types/client/presentation/model.d.ts +14 -15
- package/lib/types/client/presentation/reader.d.ts +15 -2
- package/lib/types/client/presentation/reference-source.d.ts +9 -0
- package/lib/types/client/presentation/source-code-model.d.ts +2 -1
- package/lib/types/client/presentation/source-code.d.ts +0 -5
- package/lib/types/client/presentation/source-dialog.d.ts +1 -2
- package/lib/types/client/presentation/sources.d.ts +5 -5
- package/lib/types/client/presentation/styles.d.ts +1 -1
- package/lib/types/client/presentation/table.d.ts +5 -1
- package/lib/types/client/python-tool/card.d.ts +2 -0
- package/lib/types/client/python-tool/execution-error.d.ts +3 -0
- package/lib/types/client/python-tool/install.d.ts +2 -0
- package/lib/types/client/python-tool/model.d.ts +20 -0
- package/lib/types/client/right-tabs/install.d.ts +18 -0
- package/lib/types/client/right-tabs/live-delivery.d.ts +8 -0
- package/lib/types/client/right-tabs/navigation.d.ts +17 -0
- package/lib/types/client/right-tabs/page.d.ts +36 -0
- package/lib/types/client/right-tabs/styles.d.ts +2 -0
- package/lib/types/client/rpc.d.ts +3 -0
- package/lib/types/client/semantic-reference.d.ts +4 -0
- package/lib/types/client/workspace-header-action.d.ts +1 -1
- package/lib/types/client/workspace-shortcuts.d.ts +15 -0
- package/lib/types/client.d.ts +6 -3
- package/lib/types/compatibility.d.ts +1 -1
- package/lib/types/datasource/authoring.d.ts +10 -0
- package/lib/types/datasource/bridge.d.ts +23 -2
- package/lib/types/datasource/changes-contract.d.ts +18 -0
- package/lib/types/datasource/changes.d.ts +15 -0
- package/lib/types/datasource/configure.d.ts +7 -0
- package/lib/types/datasource/defaults.d.ts +7 -0
- package/lib/types/datasource/index.d.ts +6 -1
- package/lib/types/datasource/python-options.d.ts +9 -0
- package/lib/types/datasource/python.d.ts +17 -2
- package/lib/types/datasource/rpc.d.ts +2 -1
- package/lib/types/datasource/service.d.ts +48 -5
- package/lib/types/datasource/test.d.ts +1 -1
- package/lib/types/disclosure/activation.d.ts +2 -1
- package/lib/types/disclosure/execution-guidance.d.ts +6 -0
- package/lib/types/disclosure/help.d.ts +1 -1
- package/lib/types/environment/types.d.ts +2 -1
- package/lib/types/environment/workspace.d.ts +1 -0
- package/lib/types/lifecycle.d.ts +8 -0
- package/lib/types/plugin-agents.d.ts +27 -0
- package/lib/types/plugin.d.ts +12 -28
- package/lib/types/presentation/asset.d.ts +6 -0
- package/lib/types/presentation/build/index.d.ts +7 -2
- package/lib/types/presentation/commit.d.ts +1 -1
- package/lib/types/presentation/contracts/asset-path.d.ts +2 -0
- package/lib/types/presentation/contracts/catalog.d.ts +27 -0
- package/lib/types/presentation/contracts/charts.d.ts +0 -2
- package/lib/types/presentation/contracts/types.d.ts +7 -4
- package/lib/types/presentation/delivery.d.ts +1 -1
- package/lib/types/presentation/export-html.d.ts +13 -0
- package/lib/types/presentation/reports.d.ts +6 -1
- package/lib/types/presentation/rpc.d.ts +3 -2
- package/lib/types/presentation/tool.d.ts +2 -2
- package/lib/types/report-publishing/adapters.d.ts +6 -0
- package/lib/types/report-publishing/config.d.ts +22 -0
- package/lib/types/report-publishing/service.d.ts +68 -0
- package/lib/types/rpc.d.ts +3 -0
- package/lib/types/semantic-browser/contracts.d.ts +7 -0
- package/lib/types/semantic-browser/service.d.ts +7 -1
- package/lib/types/semantic-reference/bridge.d.ts +1 -0
- package/lib/types/semantic-reference/contracts.d.ts +5 -2
- package/lib/types/semantic-reference/environment.d.ts +22 -0
- package/lib/types/semantic-reference/labels.d.ts +16 -0
- package/lib/types/semantic-reference/rpc.d.ts +1 -1
- package/lib/types/semantic-reference/search.d.ts +1 -1
- package/lib/types/tool-lifecycle.d.ts +4 -0
- package/lib/types/workspace-identity.d.ts +6 -0
- package/lib/workspace-identity.js +9 -0
- package/package.json +83 -61
- 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 +32 -0
- package/skills/dsh-data-analysis-files/references/examples.md +93 -0
- package/skills/dsh-data-analysis-presentation/SKILL.md +10 -6
- package/skills/dsh-data-analysis-presentation/references/examples/artifact.draft.json +13 -4
- package/skills/dsh-data-analysis-presentation/references/examples/charts.draft.json +3 -2
- package/skills/dsh-data-analysis-presentation/references/examples/comparison.draft.json +3 -2
- package/skills/dsh-data-analysis-presentation/references/examples/computed-sources.draft.json +12 -5
- package/skills/dsh-data-analysis-presentation/references/examples/computed.draft.json +3 -2
- package/skills/dsh-data-analysis-presentation/references/examples/interaction.draft.json +3 -2
- package/skills/dsh-data-analysis-presentation/references/examples/source-only.draft.json +12 -4
- package/skills/dsh-data-analysis-presentation/references/examples.md +3 -1
- package/skills/dsh-data-analysis-presentation/references/export-html.md +7 -0
- package/skills/dsh-data-analysis-presentation/references/interaction.md +1 -1
- package/skills/dsh-data-analysis-presentation/references/narrative.md +1 -1
- package/skills/dsh-data-analysis-presentation/references/publishing.md +3 -0
- package/skills/dsh-data-analysis-presentation/references/schema.md +25 -1
- package/lib/types/client/presentation/install.d.ts +0 -15
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { finishCleanup, PendingTasks } from "../lifecycle.js";
|
|
2
|
+
import { registerPluginRpc } from "../rpc.js";
|
|
1
3
|
import { SemanticReferenceBridge } from "./bridge.js";
|
|
2
|
-
import { CHANNEL, closed, MAX_WIRE_BYTES, modelMarker, parseCandidatesRequest, parseEnvelope, } from "./contracts.js";
|
|
4
|
+
import { CHANNEL, closed, MAX_WIRE_BYTES, modelMarker, parseCandidatesRequest, parseEnvelope, parsePrepareRequest, } from "./contracts.js";
|
|
3
5
|
import { search } from "./search.js";
|
|
4
6
|
import { workspaceKey } from "./usage.js";
|
|
5
7
|
/** Abort the caller's wait, without pretending to cancel the shared Environment resolver. */
|
|
@@ -30,13 +32,15 @@ export class SemanticReferenceService {
|
|
|
30
32
|
#bridge;
|
|
31
33
|
#controller = new AbortController();
|
|
32
34
|
#closed = false;
|
|
35
|
+
#tasks = new PendingTasks();
|
|
36
|
+
#closing;
|
|
33
37
|
constructor(resolve, usage, bridge = new SemanticReferenceBridge()) {
|
|
34
38
|
this.#resolve = resolve;
|
|
35
39
|
this.#usage = usage;
|
|
36
40
|
this.#bridge = bridge;
|
|
37
41
|
}
|
|
38
|
-
async #environment(sessionId, signal, purpose = 'reference') {
|
|
39
|
-
const runner = await abortable(this.#resolve(sessionId, purpose), signal);
|
|
42
|
+
async #environment(sessionId, signal, purpose = 'reference', workspaceId) {
|
|
43
|
+
const runner = await abortable(this.#tasks.track(this.#resolve(sessionId, purpose, workspaceId)), signal);
|
|
40
44
|
if (runner.status !== 'ready') {
|
|
41
45
|
this.#bridge.invalidate(runner.binding.fingerprint);
|
|
42
46
|
throw new Error('environment-failed');
|
|
@@ -49,18 +53,29 @@ export class SemanticReferenceService {
|
|
|
49
53
|
throw new Error('environment-mismatch');
|
|
50
54
|
return runner;
|
|
51
55
|
}
|
|
52
|
-
|
|
56
|
+
handle(endpoint, payload, caller) {
|
|
57
|
+
return this.#tasks.track(this.#handle(endpoint, payload, caller));
|
|
58
|
+
}
|
|
59
|
+
async #handle(endpoint, payload, caller) {
|
|
53
60
|
if (this.#closed)
|
|
54
61
|
throw new Error('disposed');
|
|
55
62
|
const signal = AbortSignal.any([caller, this.#controller.signal]);
|
|
56
63
|
signal.throwIfAborted();
|
|
57
64
|
if (Buffer.byteLength(JSON.stringify(payload) ?? '') > MAX_WIRE_BYTES)
|
|
58
65
|
throw new Error('invalid-request');
|
|
66
|
+
if (endpoint === 'semantic-references/prepare') {
|
|
67
|
+
const { workspaceId, envelope } = parsePrepareRequest(payload);
|
|
68
|
+
const runner = await this.#environment(envelope.sessionId, signal, 'prepare', workspaceId);
|
|
69
|
+
if (runner.binding.fingerprint !== envelope.environmentFingerprint)
|
|
70
|
+
throw new Error('environment-mismatch');
|
|
71
|
+
signal.throwIfAborted();
|
|
72
|
+
return { envelope };
|
|
73
|
+
}
|
|
59
74
|
if (endpoint === 'semantic-references/candidates') {
|
|
60
75
|
const request = parseCandidatesRequest(payload);
|
|
61
76
|
const environment = await this.#environment(request.sessionId, signal, 'candidates');
|
|
62
77
|
const projection = await this.#bridge.candidates(environment, signal);
|
|
63
|
-
const scores = await abortable(this.#usage.scores(workspaceKey(environment.binding.projectRoot)), signal);
|
|
78
|
+
const scores = await abortable(this.#tasks.track(this.#usage.scores(workspaceKey(environment.binding.projectRoot))), signal);
|
|
64
79
|
// A live Agent may disappear or change binding while Catalog/storage work awaits.
|
|
65
80
|
const current = await this.#environment(request.sessionId, signal);
|
|
66
81
|
if (current.binding.fingerprint !== environment.binding.fingerprint)
|
|
@@ -86,13 +101,26 @@ export class SemanticReferenceService {
|
|
|
86
101
|
this.#controller.abort();
|
|
87
102
|
this.#bridge.dispose();
|
|
88
103
|
}
|
|
89
|
-
|
|
104
|
+
close() {
|
|
105
|
+
if (this.#closing)
|
|
106
|
+
return this.#closing;
|
|
90
107
|
this.stop();
|
|
91
|
-
|
|
108
|
+
this.#closing = finishCleanup([
|
|
109
|
+
() => this.#bridge.close(),
|
|
110
|
+
() => this.#tasks.drain(),
|
|
111
|
+
() => this.#usage.close(),
|
|
112
|
+
]);
|
|
113
|
+
return this.#closing;
|
|
92
114
|
}
|
|
93
115
|
}
|
|
94
116
|
export function registerSemanticReferenceRpc(connection, service, browser) {
|
|
95
|
-
const unregister = connection
|
|
117
|
+
const unregister = registerPluginRpc(connection, CHANNEL, [
|
|
118
|
+
'semantic-references/prepare',
|
|
119
|
+
'semantic-references/candidates',
|
|
120
|
+
'semantic-references/selected',
|
|
121
|
+
'semantic-references/serialize',
|
|
122
|
+
'semantic-browser/catalog',
|
|
123
|
+
], async (endpoint, payload, signal) => {
|
|
96
124
|
if (browser && endpoint === 'semantic-browser/catalog') {
|
|
97
125
|
return browser(endpoint, payload, signal);
|
|
98
126
|
}
|
|
@@ -109,14 +137,7 @@ export function registerSemanticReferenceRpc(connection, service, browser) {
|
|
|
109
137
|
},
|
|
110
138
|
};
|
|
111
139
|
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
try {
|
|
116
|
-
await unregister();
|
|
117
|
-
}
|
|
118
|
-
finally {
|
|
119
|
-
await service.close();
|
|
120
|
-
}
|
|
121
|
-
};
|
|
140
|
+
});
|
|
141
|
+
let closing;
|
|
142
|
+
return () => (closing ??= finishCleanup([() => service.stop(), unregister, () => service.close()]));
|
|
122
143
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { semanticKindLabels } from "./labels.js";
|
|
2
2
|
export function normalize(text) {
|
|
3
3
|
return text.normalize('NFKC').toLowerCase().trim().replace(/\s+/gu, ' ');
|
|
4
4
|
}
|
|
@@ -24,7 +24,10 @@ export function dice(a, b) {
|
|
|
24
24
|
function match(item, query) {
|
|
25
25
|
const name = normalize(item.name), path = normalize(item.ref.path), key = normalize(item.refKey);
|
|
26
26
|
const fields = [name, path, key];
|
|
27
|
-
const
|
|
27
|
+
const label = Object.hasOwn(semanticKindLabels, item.ref.kind)
|
|
28
|
+
? semanticKindLabels[item.ref.kind]
|
|
29
|
+
: '';
|
|
30
|
+
const all = [...fields, normalize(item.ref.kind), normalize(label)];
|
|
28
31
|
const searchTokens = all.flatMap(tokens);
|
|
29
32
|
if (fields.includes(query))
|
|
30
33
|
return { item, tier: 0, score: 1, field: 0 };
|
|
@@ -76,7 +79,6 @@ export function search(projection, rawQuery, usage = new Map()) {
|
|
|
76
79
|
...projection.items
|
|
77
80
|
.filter((item) => !keys.has(item.refKey))
|
|
78
81
|
.sort(fallback)
|
|
79
|
-
.slice(0, LIMIT - recent.length)
|
|
80
82
|
.map((item) => ({ ...item, section: 'kind' })),
|
|
81
83
|
];
|
|
82
84
|
}
|
|
@@ -89,6 +91,5 @@ export function search(projection, rawQuery, usage = new Map()) {
|
|
|
89
91
|
a.field - b.field ||
|
|
90
92
|
heat(a.item, b.item) ||
|
|
91
93
|
compareText(a.item.refKey, b.item.refKey))
|
|
92
|
-
.slice(0, LIMIT)
|
|
93
94
|
.map((m) => ({ ...m.item, section: m.tier === 3 ? 'fuzzy' : 'strict' }));
|
|
94
95
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { defineDomain, domainTable, } from '@deepseek-ai/dsh-storage-domain';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
+
import { finishCleanup } from "../lifecycle.js";
|
|
4
5
|
import { parseRef, refKey } from "./contracts.js";
|
|
5
6
|
const refSchema = z.unknown().transform((value, ctx) => {
|
|
6
7
|
try {
|
|
@@ -75,6 +76,7 @@ export class SemanticReferenceUsage {
|
|
|
75
76
|
#clock;
|
|
76
77
|
#diagnostic;
|
|
77
78
|
#closed = false;
|
|
79
|
+
#closing;
|
|
78
80
|
constructor(facility, clock = Date.now, diagnostic = () => { }) {
|
|
79
81
|
this.#clock = clock;
|
|
80
82
|
this.#diagnostic = diagnostic;
|
|
@@ -135,9 +137,16 @@ export class SemanticReferenceUsage {
|
|
|
135
137
|
this.#queues.delete(key);
|
|
136
138
|
}
|
|
137
139
|
}
|
|
138
|
-
|
|
140
|
+
close() {
|
|
141
|
+
if (this.#closing)
|
|
142
|
+
return this.#closing;
|
|
139
143
|
this.#closed = true;
|
|
140
|
-
|
|
141
|
-
|
|
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;
|
|
142
151
|
}
|
|
143
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
|
+
}
|
|
@@ -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;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export declare function CreateDatasource({ model, workspaceId, close }: {
|
|
1
|
+
export declare function CreateDatasource({ model, workspaceId, close, name, requestId }: {
|
|
2
2
|
model: any;
|
|
3
3
|
workspaceId: any;
|
|
4
4
|
close: any;
|
|
5
|
+
name: any;
|
|
6
|
+
requestId: any;
|
|
5
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 @@
|
|
|
1
|
+
export declare function datasourceDescription(description: string): string;
|
|
@@ -1 +1,19 @@
|
|
|
1
|
-
|
|
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;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import type { DatasourceAuthoring, DatasourceCreateInput } from '../../datasource/authoring.ts';
|
|
2
|
-
import type {
|
|
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';
|
|
3
6
|
import type { BrowserRpc } from '../semantic-browser/model.ts';
|
|
7
|
+
import type { CredentialChanges } from './changes.ts';
|
|
4
8
|
interface QueryHandle {
|
|
5
9
|
generation: string;
|
|
6
10
|
id: string;
|
|
@@ -11,7 +15,7 @@ export interface ClientOperation {
|
|
|
11
15
|
name: string;
|
|
12
16
|
workspaceId?: string;
|
|
13
17
|
overviewUpdated?: boolean;
|
|
14
|
-
error?:
|
|
18
|
+
error?: Notice;
|
|
15
19
|
operation?: CredentialOperationView;
|
|
16
20
|
}
|
|
17
21
|
export interface CredentialClientState {
|
|
@@ -19,12 +23,13 @@ export interface CredentialClientState {
|
|
|
19
23
|
workspaceId: string;
|
|
20
24
|
sessionId: string;
|
|
21
25
|
generation: string;
|
|
26
|
+
revision?: string;
|
|
22
27
|
datasources: CredentialContextView[];
|
|
23
|
-
requests: CredentialRequestView[];
|
|
28
|
+
requests: (CredentialRequestView | ConfigurationRequestView)[];
|
|
24
29
|
requestId: string;
|
|
25
30
|
selected: string;
|
|
26
31
|
loading: boolean;
|
|
27
|
-
error:
|
|
32
|
+
error: Notice;
|
|
28
33
|
operations: ClientOperation[];
|
|
29
34
|
outcomes: Record<string, ClientOperation>;
|
|
30
35
|
operation?: CredentialOperationView;
|
|
@@ -33,27 +38,42 @@ export interface CredentialClientState {
|
|
|
33
38
|
export declare function credentialMessage(code: string): string;
|
|
34
39
|
export declare class CredentialClientModel {
|
|
35
40
|
#private;
|
|
36
|
-
constructor(rpc: BrowserRpc, storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'
|
|
41
|
+
constructor(rpc: BrowserRpc, storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>, changes?: CredentialChanges);
|
|
37
42
|
getSnapshot: () => CredentialClientState;
|
|
38
43
|
subscribe: (listener: () => void) => (() => void);
|
|
39
|
-
|
|
40
|
-
|
|
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 & {
|
|
41
51
|
generation: string;
|
|
42
52
|
}>;
|
|
43
53
|
createDatasource(workspaceId: string, schema: DatasourceAuthoring & {
|
|
44
54
|
generation: string;
|
|
45
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>;
|
|
46
61
|
close(): void;
|
|
62
|
+
suspend(): void;
|
|
47
63
|
openRequest(id: string): void;
|
|
48
64
|
select(token: string): void;
|
|
49
|
-
selectWorkspace(workspaceId: string): Promise<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>;
|
|
50
69
|
session(sessionId: string): void;
|
|
51
70
|
selectOperation(id: string): void;
|
|
52
|
-
|
|
71
|
+
dismissOutcome(scope: string): void;
|
|
72
|
+
start(context: CredentialContextView, action: CredentialAction, changes?: Record<string, string>, reference?: string, deleteCredentials?: boolean): Promise<void>;
|
|
53
73
|
recover(): void;
|
|
54
74
|
cancelRequest(id: string): Promise<void>;
|
|
55
75
|
cancelOperation(scope?: string): Promise<void>;
|
|
56
76
|
reset(): void;
|
|
57
|
-
dispose(): void
|
|
77
|
+
dispose(): Promise<void>;
|
|
58
78
|
}
|
|
59
79
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const credentialStyles = "\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-dialog{--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-accent:#087b70;--mc-tint:#eaf6f2;--mc-danger:#b04436;--mc-warning:#886217;color:var(--mc-text);background:var(--mc-bg);border:1px solid var(--mc-border);border-radius:16px;width:calc(100vw - 48px);max-width:1060px;height:min(760px,calc(100dvh - 64px));max-height:calc(100dvh - 32px);padding:0;box-shadow:0 28px 100px #0003;pointer-events:auto;font:14px/1.55 system-ui,sans-serif;overflow:hidden}\n.mc-dialog::backdrop{background:#102a3a66;backdrop-filter:blur(4px)}\n.mc-dialog *{box-sizing:border-box}.mc-shell{height:100%;display:flex;flex-direction:column}.mc-dialog button,.mc-dialog input,.mc-dialog select{font:inherit;color:inherit}.mc-dialog button{cursor:pointer;border:1px solid var(--mc-border);border-radius:8px;padding:7px 12px;background:var(--mc-bg);line-height:1.5}.mc-dialog button:hover{background:var(--mc-soft)}.mc-dialog button:disabled{cursor:default;opacity:.5}.mc-dialog :focus-visible{outline:2px solid var(--mc-accent);outline-offset:3px}.mc-dialog select,.mc-dialog input{border:1px solid var(--mc-border);border-radius:8px;background:var(--mc-bg);padding:9px 10px;max-width:100%;min-width:0}.mc-dialog select{width:100%}.mc-dialog button.mc-primary{color:#fff;background:var(--mc-accent);border-color:var(--mc-accent)}.mc-dialog button.mc-primary:hover{filter:brightness(.93)}.mc-dialog button.mc-danger{color:var(--mc-danger)}.mc-dialog button.mc-quiet{border-color:transparent;background:transparent;color:var(--mc-muted)}.mc-dialog button.mc-quiet:hover{background:var(--mc-soft)}\n.mc-header{display:flex;align-items:center;gap:14px;padding:22px 26px;border-bottom:1px solid var(--mc-border);flex:none}.mc-header-mark{display:grid;place-items:center;width:42px;height:42px;border:1px solid var(--mc-border);border-radius:12px;background:var(--mc-soft);color:var(--mc-accent);flex:none}.mc-header-copy{flex:1;min-width:0}.mc-header h2{font-size:20px;line-height:1.4;margin:0 0 4px;font-weight:650}.mc-header p{margin:0;font-size:12px;color:var(--mc-muted)}.mc-dialog .mc-close{display:grid;place-items:center;padding:8px;border:0;background:transparent;color:var(--mc-muted)}\n.mc-columns{display:grid;grid-template-columns:244px minmax(0,1fr);flex:1;min-height:0}.mc-nav{display:flex;flex-direction:column;gap:24px;padding:22px 16px;background:var(--mc-soft);border-right:1px solid var(--mc-border);overflow:auto}.mc-workspace-label{display:block;font-size:12px;font-weight:600;color:var(--mc-muted);margin-bottom:8px}.mc-nav-heading{display:flex;align-items:center;justify-content:space-between;margin:0 0 10px;padding:0 4px;font-size:12px;color:var(--mc-muted)}.mc-nav-heading h3{font-size:inherit;font-weight:600;margin:0}.mc-nav-heading button{padding:4px}.mc-datasources{list-style:none;padding:0;margin:0;display:grid;gap:6px}.mc-dialog .mc-datasource{display:flex;align-items:start;gap:10px;width:100%;padding:12px 10px;border:1px solid transparent;background:transparent;text-align:left}.mc-dialog .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-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-dialog .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@media(prefers-color-scheme:dark){.mc-dialog{--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-accent:#39b8a8;--mc-tint:#153d39;--mc-danger:#ef998b;--mc-warning:#d6b778}.mc-dialog button.mc-primary{color:#102a29}}\n@media(max-width:700px){.mc-property{grid-template-columns:minmax(0,1fr);gap:5px;padding:12px 14px}}\n@media(max-width:700px){.mc-dialog{width:calc(100vw - 16px);height:calc(100dvh - 16px);max-height:calc(100dvh - 16px);border-radius:12px}.mc-header{padding:16px;gap:10px}.mc-header-mark{display:none}.mc-header h2{font-size:18px}.mc-columns{display:flex;flex-direction:column;overflow:auto}.mc-nav{flex:none;padding:14px 16px;gap:14px;overflow:visible;border-right:0;border-bottom:1px solid var(--mc-border)}.mc-workspace-label{font-size:11px;margin-bottom:5px}.mc-nav select{padding:7px 10px}.mc-nav-heading{margin-bottom:5px}.mc-datasources{display:flex;overflow-x:auto;padding:2px;gap:6px}.mc-datasources li{flex:0 0 auto;max-width:240px}.mc-dialog .mc-datasource{padding:9px 10px}.mc-datasource-name{font-size:12px}.mc-main{overflow:visible;flex:1;flex-shrink:0}.mc-form-body{padding:22px 18px}.mc-detail-heading h3{font-size:20px}.mc-field{padding:14px}.mc-field-header{flex-wrap:wrap;gap:10px}.mc-field-actions{margin-left:auto}.mc-form-footer{padding:14px 18px;position:static}.mc-form-footer .mc-cancel{margin-left:0}.mc-alert{margin:14px 18px 0}.mc-activity{padding:14px 18px}.mc-test-heading{align-items:start;flex-wrap:wrap}.mc-close{align-self:start}.mc-empty{padding:32px 18px}.mc-requests{padding:12px 16px}}\n";
|
|
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;
|