@yadsh/dsh-qa-surface 0.15.6 → 0.16.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 +8 -0
- package/lib/access/capability-catalog.js +11 -4
- package/lib/access/capability-catalog.js.map +1 -1
- package/lib/access/service.js +46 -5
- package/lib/access/service.js.map +1 -1
- package/lib/accounts/store.js +2 -2
- package/lib/accounts/store.js.map +1 -1
- package/lib/admin/service.js +4 -2
- package/lib/admin/service.js.map +1 -1
- package/lib/admin/session-log.js +3 -0
- package/lib/admin/session-log.js.map +1 -1
- package/lib/agent-scope.js +9 -0
- package/lib/agent-scope.js.map +1 -0
- package/lib/chat-sharing/native-fence.js +111 -0
- package/lib/chat-sharing/native-fence.js.map +1 -0
- package/lib/chat-sharing/resources.js +57 -0
- package/lib/chat-sharing/resources.js.map +1 -0
- package/lib/chat-sharing/store.js +193 -0
- package/lib/chat-sharing/store.js.map +1 -0
- package/lib/chat-sharing/transport.js +274 -0
- package/lib/chat-sharing/transport.js.map +1 -0
- package/lib/chat-sharing/turn-guard.js +154 -0
- package/lib/chat-sharing/turn-guard.js.map +1 -0
- package/lib/chat-sharing/types.js +2 -0
- package/lib/chat-sharing/types.js.map +1 -0
- package/lib/chat-sharing/uploads.js +55 -0
- package/lib/chat-sharing/uploads.js.map +1 -0
- package/lib/client/QaAccountsController.js +29 -2
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaConfigController.js +7 -12
- package/lib/client/QaConfigController.js.map +1 -1
- package/lib/client/QaSessionController.js +186 -19
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +110 -9
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaSurfaceGuard.js +6 -1
- package/lib/client/QaSurfaceGuard.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +13 -3
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/account-conversation.js +33 -0
- package/lib/client/account-conversation.js.map +1 -0
- package/lib/client/account-sessions.js +106 -0
- package/lib/client/account-sessions.js.map +1 -0
- package/lib/client/account-upload.js +30 -0
- package/lib/client/account-upload.js.map +1 -0
- package/lib/client/chat-artifacts.js +17 -3
- package/lib/client/chat-artifacts.js.map +1 -1
- package/lib/client/chat-sharing-api.js +2 -0
- package/lib/client/chat-sharing-api.js.map +1 -0
- package/lib/client/components/QaChangelog.js +70 -3
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaChatSharing.js +92 -0
- package/lib/client/components/QaChatSharing.js.map +1 -0
- package/lib/client/components/QaComposer.js +8 -4
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaFileAttachment.js +12 -3
- package/lib/client/components/QaFileAttachment.js.map +1 -1
- package/lib/client/components/QaFilesPanel.js +11 -4
- package/lib/client/components/QaFilesPanel.js.map +1 -1
- package/lib/client/components/QaHeader.js +3 -3
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaMessage.js +34 -9
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaSidebar.js +1 -1
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaSourcesPanel.js +12 -4
- package/lib/client/components/QaSourcesPanel.js.map +1 -1
- package/lib/client/components/QaWorkspaceBrowser.js +28 -7
- package/lib/client/components/QaWorkspaceBrowser.js.map +1 -1
- package/lib/client/components/source-refs.js +42 -23
- package/lib/client/components/source-refs.js.map +1 -1
- package/lib/client/index.js +60 -6
- package/lib/client/index.js.map +1 -1
- package/lib/client/lineage.js +4 -3
- package/lib/client/lineage.js.map +1 -1
- package/lib/client/markdown/katex-css.js +1 -1
- package/lib/client/markdown/render.js +3 -4
- package/lib/client/markdown/render.js.map +1 -1
- package/lib/client/markdown/source-chip.js +4 -1
- package/lib/client/markdown/source-chip.js.map +1 -1
- package/lib/client/notifications/notification-dispatcher.js +50 -11
- package/lib/client/notifications/notification-dispatcher.js.map +1 -1
- package/lib/client/notifications/use-turn-notifications.js +107 -18
- package/lib/client/notifications/use-turn-notifications.js.map +1 -1
- package/lib/client/project-session-state.js +28 -13
- package/lib/client/project-session-state.js.map +1 -1
- package/lib/client/session-admission.js +9 -1
- package/lib/client/session-admission.js.map +1 -1
- package/lib/client/session-sources.js +44 -3
- package/lib/client/session-sources.js.map +1 -1
- package/lib/client/slash/useSlashNavigation.js +8 -5
- package/lib/client/slash/useSlashNavigation.js.map +1 -1
- package/lib/client/source-preview.js +1 -1
- package/lib/client/source-preview.js.map +1 -1
- package/lib/client/styles.js +9 -2
- package/lib/client/styles.js.map +1 -1
- package/lib/client/turn-sources.js +2 -1
- package/lib/client/turn-sources.js.map +1 -1
- package/lib/client/types.js.map +1 -1
- package/lib/client/workspace-download.js +42 -2
- package/lib/client/workspace-download.js.map +1 -1
- package/lib/client.js +3337 -947
- package/lib/client.js.map +1 -1
- package/lib/enforcement/skill-policy.js +29 -4
- package/lib/enforcement/skill-policy.js.map +1 -1
- package/lib/enforcement/skill-resource-paths.js +32 -0
- package/lib/enforcement/skill-resource-paths.js.map +1 -0
- package/lib/enforcement/structured-result.js +38 -0
- package/lib/enforcement/structured-result.js.map +1 -0
- package/lib/enforcement/tool-grants.js +3 -1
- package/lib/enforcement/tool-grants.js.map +1 -1
- package/lib/index.js +403 -15
- package/lib/index.js.map +1 -1
- package/lib/prompt-notes.js +18 -1
- package/lib/prompt-notes.js.map +1 -1
- package/lib/provenance/collector.js +13 -1
- package/lib/provenance/collector.js.map +1 -1
- package/lib/provenance/connectors.js +32 -8
- package/lib/provenance/connectors.js.map +1 -1
- package/lib/provenance/dedupe.js +8 -1
- package/lib/provenance/dedupe.js.map +1 -1
- package/lib/provenance/document-preview.js +19 -1
- package/lib/provenance/document-preview.js.map +1 -1
- package/lib/provenance/extractors.js +67 -1
- package/lib/provenance/extractors.js.map +1 -1
- package/lib/provenance/file-download.js +56 -0
- package/lib/provenance/file-download.js.map +1 -0
- package/lib/provenance/file-preview.js +12 -1
- package/lib/provenance/file-preview.js.map +1 -1
- package/lib/provenance/host-store.js +59 -10
- package/lib/provenance/host-store.js.map +1 -1
- package/lib/provenance/integration-extractor.js +63 -0
- package/lib/provenance/integration-extractor.js.map +1 -0
- package/lib/qa-tools/docs-tools.js +14 -0
- package/lib/qa-tools/docs-tools.js.map +1 -1
- package/lib/secure-session.js +37 -5
- package/lib/secure-session.js.map +1 -1
- package/lib/session-fork-host.js +157 -0
- package/lib/session-fork-host.js.map +1 -0
- package/lib/session-fork.js +34 -0
- package/lib/session-fork.js.map +1 -0
- package/lib/session-ownership.js +5 -1
- package/lib/session-ownership.js.map +1 -1
- package/lib/shared/session-lineage.js +6 -0
- package/lib/shared/session-lineage.js.map +1 -0
- package/lib/slash/draft-target.js +21 -0
- package/lib/slash/draft-target.js.map +1 -0
- package/lib/slash/remotes.js +39 -4
- package/lib/slash/remotes.js.map +1 -1
- package/lib/typert.host.js +1628 -231
- package/lib/typert.remote-client.d.ts +48 -1
- package/lib/typert.remote-client.js +1436 -193
- package/lib/types/access/capability-catalog.d.ts +1 -1
- package/lib/types/access/service.d.ts +7 -0
- package/lib/types/access.js +2 -0
- package/lib/types/access.js.map +1 -0
- package/lib/types/accounts/store.d.ts +1 -1
- package/lib/types/accounts.js +2 -0
- package/lib/types/accounts.js.map +1 -0
- package/lib/types/admin/session-log.d.ts +2 -0
- package/lib/types/admin.js +2 -0
- package/lib/types/admin.js.map +1 -0
- package/lib/types/agent-scope.d.ts +4 -0
- package/lib/types/capability.js +2 -0
- package/lib/types/capability.js.map +1 -0
- package/lib/types/chat-sharing/native-fence.d.ts +11 -0
- package/lib/types/chat-sharing/resources.d.ts +5 -0
- package/lib/types/chat-sharing/store.d.ts +28 -0
- package/lib/types/chat-sharing/transport.d.ts +31 -0
- package/lib/types/chat-sharing/turn-guard.d.ts +21 -0
- package/lib/types/chat-sharing/types.d.ts +25 -0
- package/lib/types/chat-sharing/uploads.d.ts +5 -0
- package/lib/types/client/QaAccountsController.d.ts +3 -0
- package/lib/types/client/QaConfigController.d.ts +3 -2
- package/lib/types/client/QaSessionController.d.ts +17 -3
- package/lib/types/client/QaSurface.d.ts +6 -1
- package/lib/types/client/account-conversation.d.ts +6 -0
- package/lib/types/client/account-sessions.d.ts +7 -0
- package/lib/types/client/account-upload.d.ts +15 -0
- package/lib/types/client/chat-sharing-api.d.ts +35 -0
- package/lib/types/client/components/QaChatSharing.d.ts +10 -0
- package/lib/types/client/components/QaComposer.d.ts +2 -0
- package/lib/types/client/components/QaFileAttachment.d.ts +3 -2
- package/lib/types/client/components/QaFilesPanel.d.ts +4 -1
- package/lib/types/client/components/QaMessage.d.ts +5 -2
- package/lib/types/client/components/QaWorkspaceBrowser.d.ts +8 -1
- package/lib/types/client/components/source-refs.d.ts +1 -0
- package/lib/types/client/lineage.d.ts +2 -2
- package/lib/types/client/notifications/notification-dispatcher.d.ts +10 -6
- package/lib/types/client/notifications/use-turn-notifications.d.ts +4 -0
- package/lib/types/client/project-session-state.d.ts +1 -0
- package/lib/types/client/session-admission.d.ts +2 -0
- package/lib/types/client/session-sources.d.ts +1 -0
- package/lib/types/client/turn-sources.d.ts +1 -1
- package/lib/types/client/types.d.ts +8 -1
- package/lib/types/client/workspace-download.d.ts +9 -1
- package/lib/types/config.js +2 -0
- package/lib/types/config.js.map +1 -0
- package/lib/types/documents.js +2 -0
- package/lib/types/documents.js.map +1 -0
- package/lib/types/enforcement/skill-resource-paths.d.ts +5 -0
- package/lib/types/enforcement/structured-result.d.ts +11 -0
- package/lib/types/expert-memory.js +2 -0
- package/lib/types/expert-memory.js.map +1 -0
- package/lib/types/index.d.ts +35 -1
- package/lib/types/policy.js +2 -0
- package/lib/types/policy.js.map +1 -0
- package/lib/types/prompt-notes.d.ts +2 -0
- package/lib/types/provenance/connectors.d.ts +4 -1
- package/lib/types/provenance/document-preview.d.ts +2 -0
- package/lib/types/provenance/extractors.d.ts +2 -0
- package/lib/types/provenance/file-download.d.ts +10 -0
- package/lib/types/provenance/host-store.d.ts +2 -0
- package/lib/types/provenance/integration-extractor.d.ts +5 -0
- package/lib/types/provenance/types.d.ts +2 -0
- package/lib/types/qa-tools/docs-tools.d.ts +2 -0
- package/lib/types/quality.js +7 -0
- package/lib/types/quality.js.map +1 -0
- package/lib/types/secure-session.d.ts +20 -1
- package/lib/types/session-fork-host.d.ts +27 -0
- package/lib/types/session-fork.d.ts +7 -0
- package/lib/types/session.js +2 -0
- package/lib/types/session.js.map +1 -0
- package/lib/types/shared/session-lineage.d.ts +7 -0
- package/lib/types/skills.js +2 -0
- package/lib/types/skills.js.map +1 -0
- package/lib/types/slash/draft-target.d.ts +7 -0
- package/lib/types/slash/remotes.d.ts +7 -0
- package/lib/types/slash.js +2 -0
- package/lib/types/slash.js.map +1 -0
- package/lib/types/types/access.d.ts +43 -0
- package/lib/types/types/accounts.d.ts +173 -0
- package/lib/types/types/admin.d.ts +286 -0
- package/lib/types/types/capability.d.ts +230 -0
- package/lib/types/types/config.d.ts +594 -0
- package/lib/types/types/documents.d.ts +34 -0
- package/lib/types/types/expert-memory.d.ts +35 -0
- package/lib/types/types/policy.d.ts +54 -0
- package/lib/types/types/quality.d.ts +100 -0
- package/lib/types/types/session.d.ts +382 -0
- package/lib/types/types/skills.d.ts +143 -0
- package/lib/types/types/slash.d.ts +159 -0
- package/lib/types/types.d.ts +13 -2180
- package/package.json +8 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Agent } from "@deepseek-ai/dsh-agent";
|
|
2
2
|
import type { Context } from "@deepseek-ai/cordis";
|
|
3
|
-
import type
|
|
3
|
+
import { type ScopeKey } from "@deepseek-ai/dsh-scope";
|
|
4
4
|
import type { SkillSummary } from "@deepseek-ai/dsh-skill";
|
|
5
5
|
import type { QaCapabilityDescriptor, QaSkillDescriptor } from "../types.js";
|
|
6
6
|
export interface CapabilityCatalogSnapshot {
|
|
@@ -126,6 +126,11 @@ export declare class QaAccessService {
|
|
|
126
126
|
reclaimDelegatedSessions(): Promise<void>;
|
|
127
127
|
/** Throttled, off the critical path, and never awaited by a request. */
|
|
128
128
|
private maybeSweepDelegatedSessions;
|
|
129
|
+
/** Read-only preview for the role a draft will materialize; reserves nothing. */
|
|
130
|
+
slashDraftSkills(token: string, requestedSubrole: string | null, adminPreview: boolean): Promise<{
|
|
131
|
+
skills: import("@deepseek-ai/dsh-skill").SkillSummary[];
|
|
132
|
+
policy: QaEffectiveCapabilityPolicy | undefined;
|
|
133
|
+
}>;
|
|
129
134
|
current(token: string): QaCurrentAccess;
|
|
130
135
|
session(token: string, sessionId: string): QaSessionAccess;
|
|
131
136
|
reserveSession(token: string, sessionId: string, requestedSubrole: string | null, adminPreview: boolean): QaAccountUserPublic;
|
|
@@ -185,6 +190,8 @@ export declare class QaAccessService {
|
|
|
185
190
|
* foreign browser never reaches it.
|
|
186
191
|
*/
|
|
187
192
|
policyForColdSession(token: string, sessionId: string): Promise<QaEffectiveCapabilityPolicy>;
|
|
193
|
+
/** A participant's own live ceiling, without claiming or changing the chat. */
|
|
194
|
+
participantPolicy(userId: string, sessionId: string): Promise<QaEffectiveCapabilityPolicy>;
|
|
188
195
|
/** The browser's entry point: the token resolves the owning account. */
|
|
189
196
|
policyForSession(token: string, sessionId: string, agent: Agent): Promise<QaResolvedSessionPolicy | undefined>;
|
|
190
197
|
/** Activation history of one session, for review and quality analysis. */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/types/access.ts"],"names":[],"mappings":""}
|
|
@@ -448,7 +448,7 @@ export declare class QaAccounts {
|
|
|
448
448
|
* API, which resolves its own service token — need the public shape the
|
|
449
449
|
* token-shaped entries return, without a browser token to hand.
|
|
450
450
|
*/
|
|
451
|
-
accountById(userId: string): QaAccountUserPublic | undefined;
|
|
451
|
+
accountById(userId: string, includeDisabled?: boolean): QaAccountUserPublic | undefined;
|
|
452
452
|
findUser(email: string): QaAccountUserPublic | undefined;
|
|
453
453
|
/**
|
|
454
454
|
* Operator write: replace one account's profile, addressed by email. The
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/types/accounts.ts"],"names":[],"mappings":""}
|
|
@@ -26,6 +26,8 @@ export interface QaStoredSessionHeader {
|
|
|
26
26
|
readonly cwd?: string;
|
|
27
27
|
/** Set on a subagent's session; such sessions are not conversations. */
|
|
28
28
|
readonly parentSessionId?: string;
|
|
29
|
+
/** Ordinary seeded branch; never a delegated run. */
|
|
30
|
+
readonly isFork?: boolean;
|
|
29
31
|
readonly agentPreset?: string;
|
|
30
32
|
}
|
|
31
33
|
export type QaSessionReadResult = {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/types/admin.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../src/types/capability.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
3
|
+
declare module "@deepseek-ai/cordis" {
|
|
4
|
+
interface Events {
|
|
5
|
+
"connection/request"(request: IncomingMessage, response: ServerResponse, next: () => Promise<void>): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export declare function qaNativeEndpointDenied(endpoint: string): boolean;
|
|
9
|
+
/** Native operator APIs carry no QA identity. Accounts use the QA transport. */
|
|
10
|
+
export declare function installQaNativeFence(ctx: Context, enabled: () => boolean): () => void;
|
|
11
|
+
//# sourceMappingURL=native-fence.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
/** Paths reach recipients only through the chat's sources or reported outputs. */
|
|
3
|
+
export declare function qaChatPublishedFile(ctx: Context, id: string, requested: string, sourceAllowed: (id: string, path: string) => boolean): boolean;
|
|
4
|
+
export declare function qaChatAttachmentPath(ctx: Context, id: string, attachmentId: string): string;
|
|
5
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SqliteDatabase } from "@yadsh/dsh-plugin-kit/sqlite";
|
|
2
|
+
import type { QaAccounts } from "../accounts/store.js";
|
|
3
|
+
import type { QaChatAccess, QaChatGrant, QaChatMode, QaChatAuthor } from "./types.js";
|
|
4
|
+
/** Separate schema: installing sharing does not upgrade the accounts CLI's DB. */
|
|
5
|
+
export declare class QaChatSharingStore {
|
|
6
|
+
private readonly accounts;
|
|
7
|
+
readonly storage: SqliteDatabase;
|
|
8
|
+
constructor(filePath: string, accounts: () => QaAccounts);
|
|
9
|
+
access(token: string, sessionId: string): QaChatAccess;
|
|
10
|
+
owner(token: string, sessionId: string): QaChatAccess;
|
|
11
|
+
write(token: string, sessionId: string): QaChatAccess;
|
|
12
|
+
/** Exact address lookup after ownership, never an account directory. */
|
|
13
|
+
set(token: string, sessionId: string, email: string, mode: QaChatMode | null): readonly QaChatGrant[];
|
|
14
|
+
grants(token: string, sessionId: string): readonly QaChatGrant[];
|
|
15
|
+
visible(token: string): readonly QaChatAccess[];
|
|
16
|
+
revalidate(token: string, previous: QaChatAccess): QaChatAccess;
|
|
17
|
+
recordAuthor(token: string, access: QaChatAccess, requestId: string): void;
|
|
18
|
+
authors(token: string, sessionId: string): readonly QaChatAuthor[];
|
|
19
|
+
requestActor(sessionId: string, requestId: string): {
|
|
20
|
+
userId: string;
|
|
21
|
+
revision: number | null;
|
|
22
|
+
} | undefined;
|
|
23
|
+
/** Copy only immutable attribution for the native prefix, never memberships. */
|
|
24
|
+
forkAuthors(sourceId: string, targetId: string, requests: readonly string[]): void;
|
|
25
|
+
dropSession(id: string): void;
|
|
26
|
+
actorStillAllowed(sessionId: string, userId: string, revision: number): boolean;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { SessionControlFrame, SessionFollowFrame, SessionFollowRequest, SessionPageRequest, SessionPage, SessionListValue, SessionProjectionsValue, SessionPromptRequest, SessionPromptValue, SessionAttachmentRequest, SessionAttachmentValue, SessionRenameRequest, SessionRenameValue, SessionCancelValue, SessionUpdateQueueRequest, SessionUpdateQueueValue, SessionSearchRequest, SessionSearchValue, SessionSelectModelRequest, SessionSelectModelValue } from "@deepseek-ai/dsh-api-session-controller/types";
|
|
3
|
+
import type { QaChatSharingStore } from "./store.js";
|
|
4
|
+
/** Durable access is checked before and after asynchronous reads and per frame. */
|
|
5
|
+
export declare class QaChatTransport {
|
|
6
|
+
private readonly ctx;
|
|
7
|
+
private readonly store;
|
|
8
|
+
private readonly admit;
|
|
9
|
+
private readonly participantPolicy?;
|
|
10
|
+
private readonly locks;
|
|
11
|
+
constructor(ctx: Context, store: () => QaChatSharingStore, admit: (token: string, id: string) => Promise<unknown>, participantPolicy?: ((userId: string, id: string) => Promise<unknown>) | undefined);
|
|
12
|
+
list(token: string, signal: AbortSignal): Promise<SessionListValue>;
|
|
13
|
+
page(token: string, request: SessionPageRequest, signal: AbortSignal): Promise<SessionPage>;
|
|
14
|
+
search(token: string, request: SessionSearchRequest, signal: AbortSignal): Promise<SessionSearchValue>;
|
|
15
|
+
projections(token: string, id: string, signal: AbortSignal): Promise<SessionProjectionsValue>;
|
|
16
|
+
follow(token: string, request: SessionFollowRequest, signal: AbortSignal): AsyncIterable<SessionFollowFrame>;
|
|
17
|
+
control(token: string, signal: AbortSignal): AsyncIterable<SessionControlFrame>;
|
|
18
|
+
/** Queue admission is serialized, rechecked after resume, and signed before insertion. */
|
|
19
|
+
prompt(token: string, request: SessionPromptRequest, signal: AbortSignal): Promise<SessionPromptValue>;
|
|
20
|
+
attachment(token: string, request: SessionAttachmentRequest): Promise<SessionAttachmentValue>;
|
|
21
|
+
rename(token: string, request: SessionRenameRequest): Promise<SessionRenameValue>;
|
|
22
|
+
selectModel(token: string, request: SessionSelectModelRequest): Promise<SessionSelectModelValue>;
|
|
23
|
+
cancel(token: string, id: string): Promise<SessionCancelValue>;
|
|
24
|
+
updateQueue(token: string, request: SessionUpdateQueueRequest): Promise<SessionUpdateQueueValue>;
|
|
25
|
+
private ownerOperation;
|
|
26
|
+
private serial;
|
|
27
|
+
private sessionAccess;
|
|
28
|
+
private addressAccess;
|
|
29
|
+
private signRecord;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { QaChatSharingStore } from "./store.js";
|
|
3
|
+
import type { QaEffectiveCapabilityPolicy } from "../types.js";
|
|
4
|
+
/** A mixed batch receives the intersection, never the union, of actor rights. */
|
|
5
|
+
export declare class QaChatTurnGuard {
|
|
6
|
+
private readonly ctx;
|
|
7
|
+
private readonly store;
|
|
8
|
+
private readonly policy;
|
|
9
|
+
private readonly enabled;
|
|
10
|
+
private readonly resourceSafe;
|
|
11
|
+
private readonly actors;
|
|
12
|
+
private readonly disposers;
|
|
13
|
+
constructor(ctx: Context, store: () => QaChatSharingStore, policy: (userId: string, sessionId: string) => Promise<QaEffectiveCapabilityPolicy>, enabled?: () => boolean, resourceSafe?: (tool: string) => boolean);
|
|
14
|
+
private root;
|
|
15
|
+
private participants;
|
|
16
|
+
collaborative(sessionId: string): boolean;
|
|
17
|
+
/** Called after permission mutation. Only a turn carrying stale input stops. */
|
|
18
|
+
revoke(sessionId: string): void;
|
|
19
|
+
dispose(): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=turn-guard.d.ts.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type QaChatMode = "read" | "collaborate";
|
|
2
|
+
export interface QaChatAccess {
|
|
3
|
+
readonly sessionId: string;
|
|
4
|
+
readonly ownerId: string;
|
|
5
|
+
readonly ownerName: string;
|
|
6
|
+
readonly actorId: string;
|
|
7
|
+
readonly mode: QaChatMode | "owner";
|
|
8
|
+
readonly revision: number;
|
|
9
|
+
}
|
|
10
|
+
export interface QaChatGrant {
|
|
11
|
+
readonly userId: string;
|
|
12
|
+
readonly email: string;
|
|
13
|
+
readonly displayName: string;
|
|
14
|
+
readonly mode: QaChatMode;
|
|
15
|
+
}
|
|
16
|
+
export interface QaChatAuthor {
|
|
17
|
+
readonly requestId: string;
|
|
18
|
+
readonly userId: string;
|
|
19
|
+
readonly displayName: string;
|
|
20
|
+
}
|
|
21
|
+
/** JSON-shaped native frames; the local recursive codec owns the wire schema. */
|
|
22
|
+
export type QaChatJson = null | string | number | boolean | readonly QaChatJson[] | {
|
|
23
|
+
readonly [key: string]: QaChatJson;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { QaChatSharingStore } from "./store.js";
|
|
3
|
+
/** Authenticate before transferring the body, and fence every uploaded chunk. */
|
|
4
|
+
export declare function installQaChatUploads(ctx: Context, store: () => QaChatSharingStore, admit: (token: string, id: string) => Promise<unknown>): () => Promise<void>;
|
|
5
|
+
//# sourceMappingURL=uploads.d.ts.map
|
|
@@ -37,6 +37,7 @@ export type QaAccountsSnapshot = {
|
|
|
37
37
|
readonly ownership: readonly QaOwnershipEntry[];
|
|
38
38
|
/** Bumped whenever ownedIds, ownIds or ownership changes; re-projects lists. */
|
|
39
39
|
readonly ownedRevision: number;
|
|
40
|
+
readonly sharedChats?: readonly import("../chat-sharing/types.js").QaChatAccess[];
|
|
40
41
|
};
|
|
41
42
|
/** The Host's password floor, mirrored so a refusal and its copy name the same number. */
|
|
42
43
|
export declare const QA_MIN_PASSWORD_LENGTH = 8;
|
|
@@ -188,6 +189,8 @@ export declare class QaAccountsController {
|
|
|
188
189
|
/** The admin cross-user ownership view; failures degrade to an empty map. */
|
|
189
190
|
private fetchOwnership;
|
|
190
191
|
/** Session id → owner display name; empty unless an admin is signed in. */
|
|
192
|
+
private fetchSharedChats;
|
|
193
|
+
/** Session id → owner display name; empty unless an admin is signed in. */
|
|
191
194
|
ownerNames(): ReadonlyMap<string, string>;
|
|
192
195
|
/**
|
|
193
196
|
* The chat owner's display name for author labels: admins see it on
|
|
@@ -13,7 +13,8 @@ export type QaConfigFallback = () => Promise<ResolvedQaSurfaceConfig>;
|
|
|
13
13
|
* The DSH gateway pins settings RPCs to loopback, so a browser served over the
|
|
14
14
|
* LAN always sees the namespace as `unavailable`. When the caller supplies the
|
|
15
15
|
* `qaSurface/describe` Remote as a fallback, that channel answers instead: the
|
|
16
|
-
* projection
|
|
16
|
+
* projection asks this channel even while a fenced settings request remains
|
|
17
|
+
* in `loading`, then reports the Host-owned
|
|
17
18
|
* configuration as `ready`. A rejected fallback returns the projection to
|
|
18
19
|
* `unavailable`, exactly as when no fallback exists.
|
|
19
20
|
*/
|
|
@@ -43,7 +44,7 @@ export declare class QaConfigController {
|
|
|
43
44
|
refreshFallback(): void;
|
|
44
45
|
/**
|
|
45
46
|
* The fallback trigger rides every refresh: the scope flips to
|
|
46
|
-
* `unavailable`
|
|
47
|
+
* `unavailable` or stuck in `loading` when the gateway fences settings, which a
|
|
47
48
|
* constructor-time check can miss. The state guard makes repeats a no-op,
|
|
48
49
|
* so one fetch runs per controller lifetime; the recursive refresh lets the
|
|
49
50
|
* pending state surface before the first notification pass.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ConnectionGenerationState } from "@deepseek-ai/dsh-client-connection/client";
|
|
2
|
+
import type { QaSharingApi } from "./chat-sharing-api.js";
|
|
2
3
|
import type { QaAttachmentDraft, QaQueueOperation, QaSessionState, ResolvedQaSurfaceConfig } from "../types.js";
|
|
3
|
-
import type { QaApprovalApi, QaConversation, QaCreateSession, QaFileUpload, QaQueueStatusRemote, QaSecureSession, QaSessions, QaSessionsApi, QaQuestionApi, QaSlashApi, QaSourceApi, StorageLike } from "./types.js";
|
|
4
|
+
import type { QaApprovalApi, QaConversation, QaCreateSession, QaForkSession, QaFileUpload, QaQueueStatusRemote, QaSecureSession, QaSessions, QaSessionsApi, QaQuestionApi, QaSlashApi, QaSourceApi, StorageLike } from "./types.js";
|
|
4
5
|
import type { QaApprovalDecision, QaQuestionAnswerItem } from "../types.js";
|
|
5
6
|
declare module "@deepseek-ai/dsh-api-session-controller/client" {
|
|
6
7
|
interface SessionReferenceSourceMap {
|
|
@@ -24,9 +25,11 @@ export interface QaAccountsFacade {
|
|
|
24
25
|
readonly onAuthRequired: () => void;
|
|
25
26
|
}
|
|
26
27
|
export interface QaSessionControllerOptions {
|
|
28
|
+
readonly sharingApi?: QaSharingApi;
|
|
27
29
|
readonly sessions: QaSessions;
|
|
28
30
|
readonly api: QaSessionsApi;
|
|
29
31
|
readonly createSession: QaCreateSession;
|
|
32
|
+
readonly forkSession?: QaForkSession;
|
|
30
33
|
/** Conversation assembly feeding the transcript projection. */
|
|
31
34
|
readonly conversation: QaConversation;
|
|
32
35
|
readonly connection: ConnectionGenerationState;
|
|
@@ -87,6 +90,9 @@ export declare class QaSessionController {
|
|
|
87
90
|
private readonly listeners;
|
|
88
91
|
private readonly sessions;
|
|
89
92
|
private readonly createSessionRemote;
|
|
93
|
+
private readonly forkSessionRemote?;
|
|
94
|
+
private forking;
|
|
95
|
+
private inheritedThroughSeq;
|
|
90
96
|
private readonly conversation;
|
|
91
97
|
private readonly connection;
|
|
92
98
|
private readonly config;
|
|
@@ -139,6 +145,9 @@ export declare class QaSessionController {
|
|
|
139
145
|
private viewingSubagent;
|
|
140
146
|
private connectedOnce;
|
|
141
147
|
private disposed;
|
|
148
|
+
private chatAccess;
|
|
149
|
+
private readonly sharingApi;
|
|
150
|
+
private accessPoll;
|
|
142
151
|
private generation;
|
|
143
152
|
/**
|
|
144
153
|
* The session the current chat identity names, or null while the chat it
|
|
@@ -192,6 +201,7 @@ export declare class QaSessionController {
|
|
|
192
201
|
private slashError;
|
|
193
202
|
private slashLoadedAt;
|
|
194
203
|
private slashLoading;
|
|
204
|
+
private slashReadRevision;
|
|
195
205
|
/** Last published view; its identity is the render signal. */
|
|
196
206
|
private slashViewCache;
|
|
197
207
|
/** Bumped to re-open a palette the user dismissed; see `QaSlashView`. */
|
|
@@ -221,7 +231,7 @@ export declare class QaSessionController {
|
|
|
221
231
|
* call this surface makes — while a human command goes to the Host's command
|
|
222
232
|
* runtime and never becomes a model message.
|
|
223
233
|
*/
|
|
224
|
-
send(text: string, attachments?: readonly QaAttachmentDraft[], pick?: string | null): Promise<boolean>;
|
|
234
|
+
send(text: string, attachments?: readonly QaAttachmentDraft[], pick?: string | null, fastReview?: boolean): Promise<boolean>;
|
|
225
235
|
/**
|
|
226
236
|
* What the stand answers about its load, or null when it does not answer.
|
|
227
237
|
*
|
|
@@ -253,6 +263,7 @@ export declare class QaSessionController {
|
|
|
253
263
|
* skill registry has no browser-facing change event, so a skill installed
|
|
254
264
|
* while the page is open is only discovered by asking again.
|
|
255
265
|
*/
|
|
266
|
+
private slashReadTarget;
|
|
256
267
|
refreshSlashCatalog(force?: boolean): Promise<void>;
|
|
257
268
|
/**
|
|
258
269
|
* Install one catalog answer. `null` means the deployment runs with the
|
|
@@ -281,7 +292,7 @@ export declare class QaSessionController {
|
|
|
281
292
|
* hides the marker message, and the consecutive turns read as variants of
|
|
282
293
|
* the original question (switched in the surface).
|
|
283
294
|
*/
|
|
284
|
-
regenerate(): Promise<boolean>;
|
|
295
|
+
regenerate(fastReview?: boolean): Promise<boolean>;
|
|
285
296
|
stop(): Promise<void>;
|
|
286
297
|
/**
|
|
287
298
|
* Edit, send now, or drop one message that still waits for its turn. Every
|
|
@@ -327,6 +338,8 @@ export declare class QaSessionController {
|
|
|
327
338
|
* deployment's only chance to learn the reason.
|
|
328
339
|
*/
|
|
329
340
|
private materializeDraft;
|
|
341
|
+
/** Branch a completed answer without submitting or cancelling a turn. */
|
|
342
|
+
forkFromAnswer(answerSeq: number): Promise<void>;
|
|
330
343
|
/**
|
|
331
344
|
* Open one of this browser's indexed chats. The id must be present in the
|
|
332
345
|
* host session list and pass policy attestation; an unknown id is forgotten
|
|
@@ -557,6 +570,7 @@ export declare class QaSessionController {
|
|
|
557
570
|
*/
|
|
558
571
|
private attestPolicy;
|
|
559
572
|
private emit;
|
|
573
|
+
private refreshChatAccess;
|
|
560
574
|
/**
|
|
561
575
|
* Answer a request the Host parked for this chat. The Host re-checks the
|
|
562
576
|
* request against the chat, so an answer that lost its race is a no-op; the
|
|
@@ -3,19 +3,24 @@ import type { InjectFace, PropsRenderSlots, PropsRuntime } from "@deepseek-ai/ds
|
|
|
3
3
|
import type { QaConfigController } from "./QaConfigController.js";
|
|
4
4
|
import type { QaRouteController } from "./QaRouteController.js";
|
|
5
5
|
import type { QaAccountsController } from "./QaAccountsController.js";
|
|
6
|
-
import type { QaApprovalApi, QaAccessApi, QaAdminApi, QaConversation, QaCreateSession, QaFileUpload, QaQueueStatusRemote, QaSecureSession, QaSessions, QaSessionsApi, QaQuestionApi, QaSkillApi, QaSlashApi, QaSourceApi } from "./types.js";
|
|
6
|
+
import type { QaApprovalApi, QaAccessApi, QaAdminApi, QaConversation, QaCreateSession, QaForkSession, QaFileUpload, QaQueueStatusRemote, QaSecureSession, QaSessions, QaSessionsApi, QaQuestionApi, QaSkillApi, QaSlashApi, QaSourceApi } from "./types.js";
|
|
7
7
|
import type { QaSurfacePanelRegistry } from "./panels/registry.js";
|
|
8
8
|
import type { QaUserSettingsSections } from "./settings-extensions/index.js";
|
|
9
9
|
import type { QaAuditController } from "./audit/controller.js";
|
|
10
|
+
import type { QaSharingApi } from "./chat-sharing-api.js";
|
|
10
11
|
export interface QaSurfaceFace {
|
|
12
|
+
readonly sharingApi?: QaSharingApi;
|
|
11
13
|
readonly route: QaRouteController;
|
|
12
14
|
readonly config: QaConfigController;
|
|
13
15
|
readonly sessions: QaSessions;
|
|
14
16
|
readonly conversation: QaConversation;
|
|
17
|
+
/** Select the authenticated transport after asynchronous Host config loads. */
|
|
18
|
+
readonly resolveRuntime?: (accountsEnabled: boolean) => Pick<QaSurfaceFace, "sessions" | "conversation">;
|
|
15
19
|
readonly api: QaSessionsApi;
|
|
16
20
|
readonly connection: ConnectionGenerationState;
|
|
17
21
|
readonly secureSession: QaSecureSession;
|
|
18
22
|
readonly createSession: QaCreateSession;
|
|
23
|
+
readonly forkSession?: QaForkSession;
|
|
19
24
|
readonly accessApi: QaAccessApi;
|
|
20
25
|
/**
|
|
21
26
|
* The administrative console's surface. Optional so an older Host that does
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { UiConversation } from "@deepseek-ai/dsh-client-ui-conversation/client";
|
|
3
|
+
import type { QaSessions } from "./types.js";
|
|
4
|
+
/** Native assembly must use the same Session scope as the secured transport. */
|
|
5
|
+
export declare function createQaAccountConversation(ctx: Context, sessions: QaSessions, source: UiConversation): UiConversation;
|
|
6
|
+
//# sourceMappingURL=account-conversation.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { QaSessions } from "./types.js";
|
|
3
|
+
import type { QaChatWire, QaSessionRemotes } from "./chat-sharing-api.js";
|
|
4
|
+
import type { ConnectionGenerationState } from "@deepseek-ai/dsh-client-connection/client";
|
|
5
|
+
/** Use the installed native Session class and projections with a tokenized transport. */
|
|
6
|
+
export declare function createQaAccountSessions(ctx: Context, root: QaSessions, remote: QaSessionRemotes, wire: QaChatWire, token: () => string | null, generation: ConnectionGenerationState, subscribeAccount: (listener: () => void) => () => void): QaSessions;
|
|
7
|
+
//# sourceMappingURL=account-sessions.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { QaFileUpload } from "./types.js";
|
|
2
|
+
export interface QaUploadCarrier {
|
|
3
|
+
post(request: {
|
|
4
|
+
path: string;
|
|
5
|
+
body: Blob;
|
|
6
|
+
headers: Record<string, string>;
|
|
7
|
+
signal?: AbortSignal;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
status: number;
|
|
10
|
+
body: string;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
/** Use the native background carrier, addressed to the authenticated QA route. */
|
|
14
|
+
export declare function createQaAccountUpload(carrier: () => QaUploadCarrier | undefined, token: () => string | null): QaFileUpload;
|
|
15
|
+
//# sourceMappingURL=account-upload.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { createSessionControlStream } from "@deepseek-ai/dsh-api-session-controller/client";
|
|
2
|
+
import type { RemoteResult, RemoteStreamHandle } from "@deepseek-ai/dsh-typert-protocol";
|
|
3
|
+
import type * as Native from "@deepseek-ai/dsh-api-session-controller/types";
|
|
4
|
+
import type { QaChatAccess, QaChatAuthor, QaChatGrant, QaChatMode, QaChatJson } from "../chat-sharing/types.js";
|
|
5
|
+
export interface QaSharingApi {
|
|
6
|
+
attachmentPath?(token: string, id: string, attachmentId: string): Promise<RemoteResult<string>>;
|
|
7
|
+
access(token: string, id: string): Promise<RemoteResult<QaChatAccess>>;
|
|
8
|
+
visible(token: string): Promise<RemoteResult<readonly QaChatAccess[]>>;
|
|
9
|
+
grants(token: string, id: string): Promise<RemoteResult<readonly QaChatGrant[]>>;
|
|
10
|
+
set(token: string, id: string, email: string, mode: QaChatMode | null): Promise<RemoteResult<readonly QaChatGrant[]>>;
|
|
11
|
+
}
|
|
12
|
+
/** Handwritten face is checked against the generated transport at package build. */
|
|
13
|
+
export interface QaChatWire {
|
|
14
|
+
chatAudit(token: string, id: string, full: boolean): Promise<RemoteResult<QaChatJson>>;
|
|
15
|
+
chatAttachmentPath(token: string, id: string, attachmentId: string): Promise<RemoteResult<string>>;
|
|
16
|
+
chatAccess(token: string, id: string): ReturnType<QaSharingApi["access"]>;
|
|
17
|
+
chatVisible(token: string): ReturnType<QaSharingApi["visible"]>;
|
|
18
|
+
chatGrants(token: string, id: string): ReturnType<QaSharingApi["grants"]>;
|
|
19
|
+
chatSetGrant(token: string, id: string, email: string, mode: QaChatMode | null): ReturnType<QaSharingApi["set"]>;
|
|
20
|
+
chatAuthors(token: string, id: string): Promise<RemoteResult<readonly QaChatAuthor[]>>;
|
|
21
|
+
chatList(token: string, signal?: AbortSignal): Promise<RemoteResult<Native.SessionListValue>>;
|
|
22
|
+
chatSearch(token: string, request: Native.SessionSearchRequest, signal?: AbortSignal): Promise<RemoteResult<Native.SessionSearchValue>>;
|
|
23
|
+
chatSelectModel(token: string, request: Native.SessionSelectModelRequest): Promise<RemoteResult<Native.SessionSelectModelValue>>;
|
|
24
|
+
chatPage(token: string, request: Native.SessionPageRequest, signal?: AbortSignal): Promise<RemoteResult<Native.SessionPage>>;
|
|
25
|
+
chatFollow(token: string, request: Native.SessionFollowRequest, signal?: AbortSignal): RemoteStreamHandle<Native.SessionFollowFrame, never>;
|
|
26
|
+
chatControl(token: string, signal?: AbortSignal): RemoteStreamHandle<Native.SessionControlFrame, never>;
|
|
27
|
+
chatProjections(token: string, id: string, signal?: AbortSignal): Promise<RemoteResult<Native.SessionProjectionsValue>>;
|
|
28
|
+
chatPrompt(token: string, request: Native.SessionPromptRequest, signal?: AbortSignal): Promise<RemoteResult<Native.SessionPromptValue>>;
|
|
29
|
+
chatAttachment(token: string, request: Native.SessionAttachmentRequest): Promise<RemoteResult<Native.SessionAttachmentValue>>;
|
|
30
|
+
chatRename(token: string, request: Native.SessionRenameRequest): Promise<RemoteResult<Native.SessionRenameValue>>;
|
|
31
|
+
chatCancel(token: string, id: string): Promise<RemoteResult<Native.SessionCancelValue>>;
|
|
32
|
+
chatUpdateQueue(token: string, request: Native.SessionUpdateQueueRequest): Promise<RemoteResult<Native.SessionUpdateQueueValue>>;
|
|
33
|
+
}
|
|
34
|
+
export type QaSessionRemotes = Parameters<typeof createSessionControlStream>[0];
|
|
35
|
+
//# sourceMappingURL=chat-sharing-api.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { QaSharingApi } from "../chat-sharing-api.js";
|
|
2
|
+
import type { QaChatAccess } from "../../chat-sharing/types.js";
|
|
3
|
+
export declare const qaChatModeLabel: (mode: QaChatAccess["mode"]) => string;
|
|
4
|
+
export declare function QaChatSharing(props: {
|
|
5
|
+
access: QaChatAccess;
|
|
6
|
+
token: string;
|
|
7
|
+
api: QaSharingApi;
|
|
8
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare const QA_SHARING_STYLES = "\n.dsh-qa-sharing{padding:8px 20px;color:var(--dsw-alias-label-secondary);font-size:13px;border-bottom:1px solid var(--dsw-alias-border-l2);display:flex;gap:12px;align-items:center;flex-wrap:wrap}\n.dsh-qa-sharing__notice{margin:0;color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-sharing>span{overflow-wrap:anywhere;min-width:0}\n.dsh-qa-sharing>button,.dsh-qa-sharing__body .dsh-qa-btn{appearance:none;cursor:pointer;min-height:40px;font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:8px 12px}\n.dsh-qa-sharing>button:hover,.dsh-qa-sharing__body .dsh-qa-btn:hover{background:var(--dsw-alias-bg-layer-3)}\n.dsh-qa-sharing>button:disabled,.dsh-qa-sharing__body .dsh-qa-btn:disabled{cursor:default;opacity:.55}\n.dsh-qa-sharing>button:focus-visible,.dsh-qa-sharing__body .dsh-qa-btn:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-brand-primary));outline-offset:2px}\n.dsh-qa-sharing__form{display:grid;gap:12px;margin:16px 0}\n.dsh-qa-sharing__body label{display:flex;flex-direction:column;gap:6px}\n.dsh-qa-sharing__body input,.dsh-qa-sharing__body select{font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:8px;min-width:0;max-width:100%}\n.dsh-qa-sharing__people{list-style:none;padding:0;margin:16px 0}\n.dsh-qa-sharing__people li{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:12px 0;border-top:1px solid var(--dsw-alias-border-l2)}\n.dsh-qa-sharing__people span{flex:1;min-width:140px;overflow-wrap:anywhere}\n.dsh-qa-sharing__people small{display:block;color:var(--dsw-alias-label-tertiary)}\n";
|
|
10
|
+
//# sourceMappingURL=QaChatSharing.d.ts.map
|
|
@@ -2,6 +2,8 @@ import type { QaAttachmentDraft, QaSlashView, ResolvedQaSlashCommands } from "..
|
|
|
2
2
|
import { type QaAttachmentLimits } from "../attachments.js";
|
|
3
3
|
import type { QaQuickQuestion } from "../types.js";
|
|
4
4
|
export interface QaComposerProps {
|
|
5
|
+
readonly fastMode?: boolean;
|
|
6
|
+
readonly onFastModeChange?: (enabled: boolean) => void;
|
|
5
7
|
readonly placeholder: string;
|
|
6
8
|
/** Shown while the chat is empty; the label reads, the prompt sends. */
|
|
7
9
|
readonly quickQuestions?: readonly QaQuickQuestion[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export interface QaFileAttachmentProps {
|
|
2
2
|
readonly name: string;
|
|
3
|
-
readonly bytes: number;
|
|
3
|
+
readonly bytes: number | null;
|
|
4
4
|
/** Pending draft vs already-sent attachment: pending offers removal. */
|
|
5
5
|
readonly tone: "draft" | "sent";
|
|
6
6
|
readonly onRemove?: () => void;
|
|
@@ -12,6 +12,7 @@ export interface QaFileAttachmentProps {
|
|
|
12
12
|
readonly onOpen?: () => void;
|
|
13
13
|
/** Save the file. Omitted where the surface cannot read its bytes. */
|
|
14
14
|
readonly onDownload?: () => void;
|
|
15
|
+
readonly onApprove?: () => Promise<void>;
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
17
18
|
* One attached file: the extension badge, the name and the size. A sent
|
|
@@ -19,5 +20,5 @@ export interface QaFileAttachmentProps {
|
|
|
19
20
|
* re-reads its bytes; a file the turn produced is the same chip with the two
|
|
20
21
|
* controls that make it usable — open it, or take it away.
|
|
21
22
|
*/
|
|
22
|
-
export declare function QaFileAttachment({ name, bytes, tone, onRemove, onOpen, onDownload, }: QaFileAttachmentProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export declare function QaFileAttachment({ name, bytes, tone, onRemove, onOpen, onDownload, onApprove, }: QaFileAttachmentProps): import("react/jsx-runtime").JSX.Element;
|
|
23
24
|
//# sourceMappingURL=QaFileAttachment.d.ts.map
|
|
@@ -9,8 +9,11 @@ export interface QaFilesPanelProps {
|
|
|
9
9
|
readonly onJumpToMessage: (messageId: string) => void;
|
|
10
10
|
/** Open a produced file in the workspace viewer below. */
|
|
11
11
|
readonly onArtifactOpen?: (artifact: QaArtifactView) => void;
|
|
12
|
+
readonly onAttachmentOpen?: (file: import("../../types.js").QaFileView) => void;
|
|
13
|
+
readonly materialsOnly?: boolean;
|
|
12
14
|
/** Save a produced file. */
|
|
13
15
|
readonly onArtifactDownload?: (artifact: QaArtifactView) => void;
|
|
16
|
+
readonly onArtifactApprove?: (artifact: QaArtifactView) => Promise<void>;
|
|
14
17
|
/**
|
|
15
18
|
* A file to open on arrival, with the request's stamp. The stamp is what makes
|
|
16
19
|
* a second click on the same card a fresh arrival rather than a no-op.
|
|
@@ -36,5 +39,5 @@ export interface QaFilesPanelProps {
|
|
|
36
39
|
* back, and the images are the same object URLs the message showed — while the
|
|
37
40
|
* workspace section reads through the Host's fenced listing and file reads.
|
|
38
41
|
*/
|
|
39
|
-
export declare function QaFilesPanel({ groups, resolveImage, onJumpToMessage, onArtifactOpen, onArtifactDownload, openArtifact, sessionId, api, }: QaFilesPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
export declare function QaFilesPanel({ groups, resolveImage, onJumpToMessage, onArtifactOpen, onAttachmentOpen, materialsOnly, onArtifactDownload, onArtifactApprove, openArtifact, sessionId, api, }: QaFilesPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
40
43
|
//# sourceMappingURL=QaFilesPanel.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { QaArtifactView, QaMessage as QaMessageModel, QaSource, QaTurnSources } from "../../types.js";
|
|
1
|
+
import type { QaArtifactView, QaFileView, QaMessage as QaMessageModel, QaSource, QaTurnSources } from "../../types.js";
|
|
2
2
|
import type { QaFeedbackReason } from "../../types.js";
|
|
3
3
|
export interface QaMessageProps {
|
|
4
4
|
readonly message: QaMessageModel;
|
|
@@ -11,6 +11,7 @@ export interface QaMessageProps {
|
|
|
11
11
|
readonly stateKey?: string;
|
|
12
12
|
/** Ask for a fresh variant of this answer; omit to hide the control. */
|
|
13
13
|
readonly onRegenerate?: () => void;
|
|
14
|
+
readonly onFork?: (answerSeq: number) => Promise<void>;
|
|
14
15
|
/** Resolve one durable attachment into a viewable URL. */
|
|
15
16
|
readonly resolveImage?: (attachmentId: string) => Promise<string>;
|
|
16
17
|
/** Open the drawer at the exact canonical snapshot shown in this footer. */
|
|
@@ -23,8 +24,10 @@ export interface QaMessageProps {
|
|
|
23
24
|
* file without promising an action it cannot perform.
|
|
24
25
|
*/
|
|
25
26
|
readonly onArtifactOpen?: (artifact: QaArtifactView) => void;
|
|
27
|
+
readonly onAttachmentOpen?: (file: QaFileView) => void;
|
|
26
28
|
/** Save a produced file. Omitted on the same terms as {@link onArtifactOpen}. */
|
|
27
29
|
readonly onArtifactDownload?: (artifact: QaArtifactView) => void;
|
|
30
|
+
readonly onArtifactApprove?: (artifact: QaArtifactView) => Promise<void>;
|
|
28
31
|
/** Operator-configured running phrases; omitted reads the built-in list. */
|
|
29
32
|
readonly thinkingPhrases?: readonly string[];
|
|
30
33
|
/**
|
|
@@ -47,5 +50,5 @@ export interface QaMessageProps {
|
|
|
47
50
|
* comparison is by value, which keeps fresh copies cheap to recognize.
|
|
48
51
|
*/
|
|
49
52
|
export declare function sameMessage(a: QaMessageModel, b: QaMessageModel): boolean;
|
|
50
|
-
export declare const QaMessage: import("react").MemoExoticComponent<({ message, renderMarkdown, showTimestamp, stateKey, onRegenerate, resolveImage, onOpenSources, onSourceDetail, onArtifactOpen, onArtifactDownload, thinkingPhrases, onRateFeedback, }: QaMessageProps) => import("react/jsx-runtime").JSX.Element>;
|
|
53
|
+
export declare const QaMessage: import("react").MemoExoticComponent<({ message, renderMarkdown, showTimestamp, stateKey, onRegenerate, onFork, resolveImage, onOpenSources, onSourceDetail, onArtifactOpen, onAttachmentOpen, onArtifactDownload, onArtifactApprove, thinkingPhrases, onRateFeedback, }: QaMessageProps) => import("react/jsx-runtime").JSX.Element>;
|
|
51
54
|
//# sourceMappingURL=QaMessage.d.ts.map
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { QaBoundSourceApi } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Object URL for a PDF body, revoked when the payload changes or the panel
|
|
4
|
+
* closes. A blob URL is what lets the browser's own viewer draw the document
|
|
5
|
+
* without the bytes ever leaving the page.
|
|
6
|
+
*/
|
|
7
|
+
export declare function usePdfUrl(payload: string | undefined): string | null;
|
|
2
8
|
export interface QaWorkspaceBrowserProps {
|
|
3
9
|
readonly sessionId: string;
|
|
4
10
|
readonly api: QaBoundSourceApi;
|
|
@@ -8,6 +14,7 @@ export interface QaWorkspaceBrowserProps {
|
|
|
8
14
|
* turn produced previews through the same fenced read a browsed file uses.
|
|
9
15
|
*/
|
|
10
16
|
readonly initialFile?: string;
|
|
17
|
+
readonly materialsOnly?: boolean;
|
|
11
18
|
}
|
|
12
19
|
/**
|
|
13
20
|
* The chat's own workspace, browsable from the files rail.
|
|
@@ -17,5 +24,5 @@ export interface QaWorkspaceBrowserProps {
|
|
|
17
24
|
* the visitor out of the chat's tree. Opening a file reads exactly that file —
|
|
18
25
|
* text inline, anything else as a downloadable handle.
|
|
19
26
|
*/
|
|
20
|
-
export declare function QaWorkspaceBrowser({ sessionId, api, initialFile, }: QaWorkspaceBrowserProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare function QaWorkspaceBrowser({ sessionId, api, initialFile, materialsOnly, }: QaWorkspaceBrowserProps): import("react/jsx-runtime").JSX.Element;
|
|
21
28
|
//# sourceMappingURL=QaWorkspaceBrowser.d.ts.map
|
|
@@ -12,5 +12,6 @@ export interface QaSourceRefs {
|
|
|
12
12
|
}
|
|
13
13
|
/** Display name for a file-backed source: the file name alone, case kept. */
|
|
14
14
|
export declare function sourceFileName(source: QaSource): string;
|
|
15
|
+
export declare function sourceRefsSignature(sources: readonly QaSource[]): string;
|
|
15
16
|
export declare function buildSourceRefs(sources: readonly QaSource[]): QaSourceRefs;
|
|
16
17
|
//# sourceMappingURL=source-refs.d.ts.map
|
|
@@ -6,14 +6,14 @@ import type { SessionSummary } from "@deepseek-ai/dsh-api-session-controller/cli
|
|
|
6
6
|
* A delegated run is an implementation detail of a single answer: the Host
|
|
7
7
|
* refuses to attest it, its sources reach the parent chat through the
|
|
8
8
|
* provenance inheritance flow, and it has no owner. The host list the surface
|
|
9
|
-
* already follows
|
|
9
|
+
* already follows marks delegated runs with `origin`; ordinary forks also carry `parentId`, so every
|
|
10
10
|
* projection that talks about chats asks this one question instead of
|
|
11
11
|
* re-deriving it — and a chat row, a chat count and a claim batch can never
|
|
12
12
|
* disagree about what a chat is.
|
|
13
13
|
*/
|
|
14
14
|
export declare function isDelegatedSession(summary: Pick<SessionSummary, "origin" | "parentId"> | undefined): boolean;
|
|
15
15
|
/** The session-list slice the lineage walk reads. */
|
|
16
|
-
export type SessionLineage = Readonly<Record<string, Pick<SessionSummary, "parentId"> | undefined>>;
|
|
16
|
+
export type SessionLineage = Readonly<Record<string, Pick<SessionSummary, "parentId" | "origin"> | undefined>>;
|
|
17
17
|
/**
|
|
18
18
|
* The chat a session belongs to: itself when nothing delegated it, otherwise
|
|
19
19
|
* the root of its parent chain.
|