@yadsh/dsh-draft-sessions 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/LICENSE +22 -0
- package/README.md +207 -0
- package/README.ru.md +192 -0
- package/README.zh-CN.md +207 -0
- package/SPEC.md +102 -0
- package/compatibility.json +10 -0
- package/cordis.patch.yml +4 -0
- package/docs/images/draft-sessions-actions.png +0 -0
- package/docs/images/draft-sessions-hero.png +0 -0
- package/docs/images/draft-sessions-stock-fallback.jpg +0 -0
- package/lib/client.js +6197 -0
- package/lib/constants-vAKitj5i.js +11 -0
- package/lib/index.js +292 -0
- package/lib/remote.js +71 -0
- package/lib/schema-BkmWuQBa.js +33 -0
- package/lib/shared/types.js +13 -0
- package/lib/types/client/composer.d.ts +46 -0
- package/lib/types/client/draft-sidebar-view.d.ts +22 -0
- package/lib/types/client/index.d.ts +32 -0
- package/lib/types/client/lifecycle.d.ts +69 -0
- package/lib/types/client/shortcut.d.ts +40 -0
- package/lib/types/client/sidebar.d.ts +40 -0
- package/lib/types/client/workspace-contribution.d.ts +25 -0
- package/lib/types/host/errors.d.ts +7 -0
- package/lib/types/host/schema.d.ts +40 -0
- package/lib/types/host/store.d.ts +28 -0
- package/lib/types/index.d.ts +33 -0
- package/lib/types/remote.d.ts +20 -0
- package/lib/types/shared/constants.d.ts +9 -0
- package/lib/types/shared/types.d.ts +70 -0
- package/package.json +140 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Service, type Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { SessionId } from "@deepseek-ai/dsh-client-runtime/client";
|
|
3
|
+
import type { UpdateDraftRequest } from "../shared/types.js";
|
|
4
|
+
import type { DraftSession } from "../shared/types.js";
|
|
5
|
+
type DraftListRemote = {
|
|
6
|
+
list(request: {
|
|
7
|
+
workspaceId?: string;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
ok: true;
|
|
10
|
+
value: DraftSession[];
|
|
11
|
+
} | {
|
|
12
|
+
ok: false;
|
|
13
|
+
error: {
|
|
14
|
+
message: string;
|
|
15
|
+
};
|
|
16
|
+
}>;
|
|
17
|
+
};
|
|
18
|
+
/** Observable Host-backed draft list used by the sidebar contribution. */
|
|
19
|
+
export declare class DraftSidebarSource extends Service {
|
|
20
|
+
private readonly drafts;
|
|
21
|
+
private snapshot;
|
|
22
|
+
private shellSnapshot;
|
|
23
|
+
private readonly listeners;
|
|
24
|
+
private generation;
|
|
25
|
+
constructor(ctx: Context, drafts?: DraftListRemote);
|
|
26
|
+
getSnapshot: () => readonly DraftSession[];
|
|
27
|
+
/** Stable observable snapshot of blank Session shells owned by drafts. */
|
|
28
|
+
getShellSnapshot: () => ReadonlySet<SessionId>;
|
|
29
|
+
subscribe: (listener: () => void) => (() => void);
|
|
30
|
+
refresh(): Promise<readonly DraftSession[]>;
|
|
31
|
+
accept(draft: DraftSession): void;
|
|
32
|
+
remove(draftId: string): void;
|
|
33
|
+
private publish;
|
|
34
|
+
}
|
|
35
|
+
/** Collect the blank execution Session ids owned by drafts. */
|
|
36
|
+
export declare function draftShellSessionIds(drafts: readonly DraftSession[]): ReadonlySet<SessionId>;
|
|
37
|
+
/** Build a stable, zero-based optimistic reorder update set. */
|
|
38
|
+
export declare function planDraftReorder(drafts: readonly DraftSession[], draftId: string, beforeDraftId?: string): UpdateDraftRequest[];
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=sidebar.d.ts.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { SessionListState, WorkspaceListState } from "@deepseek-ai/dsh-client-runtime/client";
|
|
3
|
+
import { type FC } from "react";
|
|
4
|
+
import type { DraftSession } from "../shared/types.js";
|
|
5
|
+
import { type DraftSidebarSource } from "./sidebar.js";
|
|
6
|
+
type SelectorHook<State> = <Selected>(selector: (state: State) => Selected) => Selected;
|
|
7
|
+
interface DraftContributionProps {
|
|
8
|
+
readonly wide: boolean;
|
|
9
|
+
readonly surface?: "inline" | "tab" | "popover";
|
|
10
|
+
readonly useDrafts: SelectorHook<readonly DraftSession[]>;
|
|
11
|
+
readonly useSessions: SelectorHook<SessionListState>;
|
|
12
|
+
readonly useWorkspaces: SelectorHook<WorkspaceListState>;
|
|
13
|
+
}
|
|
14
|
+
/** Native sidebar-tab cooperation protocol shared by ecosystem plugins. */
|
|
15
|
+
export declare const NATIVE_TABS_KEY = "__dshNativeTabs";
|
|
16
|
+
/** Build the additive draft rows while leaving the workspace browser intact. */
|
|
17
|
+
export declare function createDraftWorkspaceContribution(ctx: Context, source: DraftSidebarSource): FC<DraftContributionProps>;
|
|
18
|
+
/**
|
|
19
|
+
* Cooperate with an ecosystem native-tab host when present and otherwise use
|
|
20
|
+
* the stock additive footer seat. The workspace-browser single slot remains
|
|
21
|
+
* owned by ui-workspace, Archive Manager, or whichever browser is active.
|
|
22
|
+
*/
|
|
23
|
+
export declare function activateWorkspaceContribution(ctx: Context, source: DraftSidebarSource): "activated";
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=workspace-contribution.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type DraftStoreErrorCode = "DRAFT_NOT_FOUND" | "DRAFT_STALE_REVISION" | "DRAFT_LIMIT_REACHED" | "DRAFT_INVALID_INPUT" | "DRAFT_STORAGE_INVALID";
|
|
2
|
+
/** Stable domain failure raised by DraftStore and exposed by the Host service. */
|
|
3
|
+
export declare class DraftStoreError extends Error {
|
|
4
|
+
readonly code: DraftStoreErrorCode;
|
|
5
|
+
constructor(message: string, code: DraftStoreErrorCode);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const draftStateSchema: z.ZodUnion<readonly [z.ZodLiteral<"draft">, z.ZodLiteral<"materializing">, z.ZodLiteral<"ready">, z.ZodLiteral<"converting">, z.ZodLiteral<"error">]>;
|
|
3
|
+
export declare const draftSessionSchema: z.ZodObject<{
|
|
4
|
+
version: z.ZodLiteral<1>;
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
sessionId: z.ZodNullable<z.ZodString>;
|
|
7
|
+
workspaceId: z.ZodString;
|
|
8
|
+
workspacePath: z.ZodOptional<z.ZodString>;
|
|
9
|
+
text: z.ZodString;
|
|
10
|
+
title: z.ZodOptional<z.ZodString>;
|
|
11
|
+
createdAt: z.ZodNumber;
|
|
12
|
+
updatedAt: z.ZodNumber;
|
|
13
|
+
order: z.ZodNumber;
|
|
14
|
+
pinned: z.ZodOptional<z.ZodBoolean>;
|
|
15
|
+
agentPresetId: z.ZodOptional<z.ZodString>;
|
|
16
|
+
state: z.ZodUnion<readonly [z.ZodLiteral<"draft">, z.ZodLiteral<"materializing">, z.ZodLiteral<"ready">, z.ZodLiteral<"converting">, z.ZodLiteral<"error">]>;
|
|
17
|
+
lastError: z.ZodOptional<z.ZodString>;
|
|
18
|
+
revision: z.ZodNumber;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
export declare const draftFileSchema: z.ZodObject<{
|
|
21
|
+
version: z.ZodLiteral<1>;
|
|
22
|
+
drafts: z.ZodArray<z.ZodObject<{
|
|
23
|
+
version: z.ZodLiteral<1>;
|
|
24
|
+
id: z.ZodString;
|
|
25
|
+
sessionId: z.ZodNullable<z.ZodString>;
|
|
26
|
+
workspaceId: z.ZodString;
|
|
27
|
+
workspacePath: z.ZodOptional<z.ZodString>;
|
|
28
|
+
text: z.ZodString;
|
|
29
|
+
title: z.ZodOptional<z.ZodString>;
|
|
30
|
+
createdAt: z.ZodNumber;
|
|
31
|
+
updatedAt: z.ZodNumber;
|
|
32
|
+
order: z.ZodNumber;
|
|
33
|
+
pinned: z.ZodOptional<z.ZodBoolean>;
|
|
34
|
+
agentPresetId: z.ZodOptional<z.ZodString>;
|
|
35
|
+
state: z.ZodUnion<readonly [z.ZodLiteral<"draft">, z.ZodLiteral<"materializing">, z.ZodLiteral<"ready">, z.ZodLiteral<"converting">, z.ZodLiteral<"error">]>;
|
|
36
|
+
lastError: z.ZodOptional<z.ZodString>;
|
|
37
|
+
revision: z.ZodNumber;
|
|
38
|
+
}, z.core.$strict>>;
|
|
39
|
+
}, z.core.$strict>;
|
|
40
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CreateDraftRequest, DeleteDraftRequest, DraftSession, ListDraftsRequest, RebindDraftRequest, UpdateDraftRequest } from "../shared/types.js";
|
|
2
|
+
export interface DraftStoreOptions {
|
|
3
|
+
readonly storagePath?: string;
|
|
4
|
+
readonly maxDraftsPerWorkspace?: number;
|
|
5
|
+
readonly now?: () => number;
|
|
6
|
+
readonly id?: () => string;
|
|
7
|
+
}
|
|
8
|
+
/** Serialized, atomically persisted authority for unsent draft sessions. */
|
|
9
|
+
export declare class DraftStore {
|
|
10
|
+
readonly path: string;
|
|
11
|
+
readonly maxDraftsPerWorkspace: number;
|
|
12
|
+
private readonly now;
|
|
13
|
+
private readonly id;
|
|
14
|
+
private drafts;
|
|
15
|
+
private queue;
|
|
16
|
+
constructor(options?: DraftStoreOptions);
|
|
17
|
+
list(request?: ListDraftsRequest): Promise<DraftSession[]>;
|
|
18
|
+
create(request: CreateDraftRequest): Promise<DraftSession>;
|
|
19
|
+
update(request: UpdateDraftRequest): Promise<DraftSession>;
|
|
20
|
+
delete(request: DeleteDraftRequest): Promise<boolean>;
|
|
21
|
+
rebind(request: RebindDraftRequest): Promise<DraftSession>;
|
|
22
|
+
private enqueue;
|
|
23
|
+
private loaded;
|
|
24
|
+
private find;
|
|
25
|
+
private expectRevision;
|
|
26
|
+
private commit;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import z from "@deepseek-ai/schemastery";
|
|
3
|
+
import { TypertRemoteService } from "@deepseek-ai/dsh-typert-protocol";
|
|
4
|
+
import type { CreateDraftRequest, DeleteDraftRequest, DeleteDraftResult, DraftSession, ListDraftsRequest, RebindDraftRequest, UpdateDraftRequest } from "./shared/types.js";
|
|
5
|
+
import { DraftStore } from "./host/store.js";
|
|
6
|
+
export interface Config {
|
|
7
|
+
/** Absolute or cwd-relative JSON storage path; blank uses $DSH_HOME. */
|
|
8
|
+
readonly storagePath?: string;
|
|
9
|
+
/** Per-workspace safety limit. */
|
|
10
|
+
readonly maxDraftsPerWorkspace?: number;
|
|
11
|
+
}
|
|
12
|
+
declare module "@deepseek-ai/cordis" {
|
|
13
|
+
interface Context {
|
|
14
|
+
draftSessions: DraftSessionsService;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Host service and Typert Remote boundary for persistent draft records. */
|
|
18
|
+
export declare class DraftSessionsService extends TypertRemoteService {
|
|
19
|
+
static Config: z<Config>;
|
|
20
|
+
readonly store: DraftStore;
|
|
21
|
+
constructor(ctx: Context, config?: Config);
|
|
22
|
+
list(request: ListDraftsRequest): Promise<DraftSession[]>;
|
|
23
|
+
create(request: CreateDraftRequest): Promise<DraftSession>;
|
|
24
|
+
update(request: UpdateDraftRequest): Promise<DraftSession>;
|
|
25
|
+
delete(request: DeleteDraftRequest): Promise<DeleteDraftResult>;
|
|
26
|
+
rebind(request: RebindDraftRequest): Promise<DraftSession>;
|
|
27
|
+
}
|
|
28
|
+
export { DraftStoreError } from "./host/errors.js";
|
|
29
|
+
export { DraftStore } from "./host/store.js";
|
|
30
|
+
export * from "./shared/constants.js";
|
|
31
|
+
export * from "./shared/types.js";
|
|
32
|
+
export default DraftSessionsService;
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { InvocationDescriptor, RemoteResult, TypertRemoteNamespace } from "@deepseek-ai/dsh-typert-protocol";
|
|
2
|
+
import type { CreateDraftRequest, DeleteDraftRequest, DeleteDraftResult, DraftSession, ListDraftsRequest, RebindDraftRequest, UpdateDraftRequest } from "./shared/types.js";
|
|
3
|
+
declare module "@deepseek-ai/dsh-typert-protocol" {
|
|
4
|
+
interface TypertRemoteMap {
|
|
5
|
+
"draftSessions/list": (request: ListDraftsRequest) => Promise<RemoteResult<DraftSession[]>>;
|
|
6
|
+
"draftSessions/create": (request: CreateDraftRequest) => Promise<RemoteResult<DraftSession>>;
|
|
7
|
+
"draftSessions/update": (request: UpdateDraftRequest) => Promise<RemoteResult<DraftSession>>;
|
|
8
|
+
"draftSessions/delete": (request: DeleteDraftRequest) => Promise<RemoteResult<DeleteDraftResult>>;
|
|
9
|
+
"draftSessions/rebind": (request: RebindDraftRequest) => Promise<RemoteResult<DraftSession>>;
|
|
10
|
+
}
|
|
11
|
+
interface TypertRemoteNamespaceMap {
|
|
12
|
+
draftSessions: TypertRemoteNamespace<"draftSessions">;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
declare const draftSessionsRemote: {
|
|
16
|
+
package: string;
|
|
17
|
+
descriptors: InvocationDescriptor[];
|
|
18
|
+
};
|
|
19
|
+
export default draftSessionsRemote;
|
|
20
|
+
//# sourceMappingURL=remote.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** On-disk format version. Bump only with an explicit migration. */
|
|
2
|
+
export declare const DRAFT_FILE_VERSION: 1;
|
|
3
|
+
/** Current draft record format. */
|
|
4
|
+
export declare const DRAFT_SESSION_VERSION: 1;
|
|
5
|
+
/** Default maximum number of drafts in a workspace. */
|
|
6
|
+
export declare const DEFAULT_MAX_DRAFTS_PER_WORKSPACE = 50;
|
|
7
|
+
/** Default maximum length of a title derived by consumers. */
|
|
8
|
+
export declare const DEFAULT_TITLE_MAX_LENGTH = 80;
|
|
9
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { DRAFT_FILE_VERSION, DRAFT_SESSION_VERSION } from "./constants.js";
|
|
2
|
+
export type DraftSessionState = "draft" | "materializing" | "ready" | "converting" | "error";
|
|
3
|
+
/** Host-backed authority for one unsent future conversation. */
|
|
4
|
+
export interface DraftSession {
|
|
5
|
+
readonly version: typeof DRAFT_SESSION_VERSION;
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly sessionId: string | null;
|
|
8
|
+
readonly workspaceId: string;
|
|
9
|
+
readonly workspacePath?: string;
|
|
10
|
+
readonly text: string;
|
|
11
|
+
/** Explicit user title. Consumers derive a title from text when absent. */
|
|
12
|
+
readonly title?: string;
|
|
13
|
+
readonly createdAt: number;
|
|
14
|
+
readonly updatedAt: number;
|
|
15
|
+
readonly order: number;
|
|
16
|
+
readonly pinned?: boolean;
|
|
17
|
+
readonly agentPresetId?: string;
|
|
18
|
+
readonly state: DraftSessionState;
|
|
19
|
+
readonly lastError?: string;
|
|
20
|
+
/** Optimistic concurrency token, incremented after every mutation. */
|
|
21
|
+
readonly revision: number;
|
|
22
|
+
}
|
|
23
|
+
export interface DraftFile {
|
|
24
|
+
readonly version: typeof DRAFT_FILE_VERSION;
|
|
25
|
+
readonly drafts: readonly DraftSession[];
|
|
26
|
+
}
|
|
27
|
+
export interface ListDraftsRequest {
|
|
28
|
+
readonly workspaceId?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface CreateDraftRequest {
|
|
31
|
+
readonly workspaceId: string;
|
|
32
|
+
readonly sessionId?: string | null;
|
|
33
|
+
readonly workspacePath?: string;
|
|
34
|
+
readonly text?: string;
|
|
35
|
+
readonly title?: string;
|
|
36
|
+
readonly order?: number;
|
|
37
|
+
readonly pinned?: boolean;
|
|
38
|
+
readonly agentPresetId?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface UpdateDraftRequest {
|
|
41
|
+
readonly id: string;
|
|
42
|
+
readonly expectedRevision: number;
|
|
43
|
+
readonly text?: string;
|
|
44
|
+
/** `null` removes an explicit title and returns to first-line derivation. */
|
|
45
|
+
readonly title?: string | null;
|
|
46
|
+
readonly order?: number;
|
|
47
|
+
readonly pinned?: boolean;
|
|
48
|
+
/** `null` clears the preset binding. */
|
|
49
|
+
readonly agentPresetId?: string | null;
|
|
50
|
+
readonly state?: DraftSessionState;
|
|
51
|
+
/** `null` clears the last materialization error. */
|
|
52
|
+
readonly lastError?: string | null;
|
|
53
|
+
}
|
|
54
|
+
export interface DeleteDraftRequest {
|
|
55
|
+
readonly id: string;
|
|
56
|
+
readonly expectedRevision?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface DeleteDraftResult {
|
|
59
|
+
readonly deleted: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface RebindDraftRequest {
|
|
62
|
+
readonly id: string;
|
|
63
|
+
readonly expectedRevision: number;
|
|
64
|
+
readonly sessionId: string | null;
|
|
65
|
+
}
|
|
66
|
+
/** First non-empty line, compacted for a session-like sidebar row. */
|
|
67
|
+
export declare function deriveDraftTitle(text: string, maxLength?: number): string;
|
|
68
|
+
/** Explicit title when present, otherwise a stable first-line projection. */
|
|
69
|
+
export declare function displayDraftTitle(draft: Pick<DraftSession, "text" | "title">, maxLength?: number): string;
|
|
70
|
+
//# sourceMappingURL=types.d.ts.map
|
package/package.json
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@yadsh/dsh-draft-sessions",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Persistent unsent draft sessions for DeepSeek Harness",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/xarleyn/dsh-plugins.git",
|
|
8
|
+
"directory": "plugins/dsh-draft-sessions"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/xarleyn/dsh-plugins/tree/main/plugins/dsh-draft-sessions#readme",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/xarleyn/dsh-plugins/issues"
|
|
13
|
+
},
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "./lib/index.js",
|
|
16
|
+
"types": "./lib/types/index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./lib/types/index.d.ts",
|
|
20
|
+
"default": "./lib/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./client": {
|
|
23
|
+
"types": "./lib/types/client/index.d.ts",
|
|
24
|
+
"default": "./lib/client.js"
|
|
25
|
+
},
|
|
26
|
+
"./remote": {
|
|
27
|
+
"types": "./lib/types/remote.d.ts",
|
|
28
|
+
"default": "./lib/remote.js"
|
|
29
|
+
},
|
|
30
|
+
"./types": {
|
|
31
|
+
"types": "./lib/types/shared/types.d.ts",
|
|
32
|
+
"default": "./lib/shared/types.js"
|
|
33
|
+
},
|
|
34
|
+
"./package.json": "./package.json"
|
|
35
|
+
},
|
|
36
|
+
"dsh": {
|
|
37
|
+
"bundle": {
|
|
38
|
+
"patch": "./cordis.patch.yml"
|
|
39
|
+
},
|
|
40
|
+
"client": {
|
|
41
|
+
"inject": [
|
|
42
|
+
"@deepseek-ai/dsh-api-gateway",
|
|
43
|
+
"@deepseek-ai/dsh-client-locale",
|
|
44
|
+
"@deepseek-ai/dsh-client-ui-conversation",
|
|
45
|
+
"@deepseek-ai/dsh-client-ui-sidebar"
|
|
46
|
+
],
|
|
47
|
+
"platform": "web"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"files": [
|
|
51
|
+
"lib/**/*.js",
|
|
52
|
+
"lib/types/**/*.d.ts",
|
|
53
|
+
"cordis.patch.yml",
|
|
54
|
+
"compatibility.json",
|
|
55
|
+
"README.md",
|
|
56
|
+
"README.ru.md",
|
|
57
|
+
"README.zh-CN.md",
|
|
58
|
+
"docs/images/*.png",
|
|
59
|
+
"docs/images/*.jpg",
|
|
60
|
+
"SPEC.md",
|
|
61
|
+
"LICENSE"
|
|
62
|
+
],
|
|
63
|
+
"scripts": {
|
|
64
|
+
"clean": "node -e \"require('node:fs').rmSync('lib', { recursive: true, force: true })\"",
|
|
65
|
+
"lint": "eslint src tests scripts",
|
|
66
|
+
"format": "prettier --check . --end-of-line auto",
|
|
67
|
+
"format:write": "prettier --write . --end-of-line auto",
|
|
68
|
+
"typecheck": "tsc --noEmit",
|
|
69
|
+
"test": "vitest run",
|
|
70
|
+
"test:coverage": "vitest run --coverage",
|
|
71
|
+
"smoke:packed": "node scripts/smoke-packed-dsh.mjs",
|
|
72
|
+
"e2e:browser": "node scripts/smoke-packed-dsh.mjs --browser",
|
|
73
|
+
"test:package": "node scripts/verify-package.mjs && node scripts/verify-client-bundle.mjs && node scripts/verify-compatibility.mjs",
|
|
74
|
+
"verify": "pnpm run test:package",
|
|
75
|
+
"build": "pnpm run clean && tsdown && tsc -p tsconfig.build.json",
|
|
76
|
+
"check": "pnpm run format && pnpm run typecheck && pnpm run test && pnpm run build && pnpm run test:package",
|
|
77
|
+
"prepare": "tsdown && tsc -p tsconfig.build.json",
|
|
78
|
+
"prepublishOnly": "pnpm run check"
|
|
79
|
+
},
|
|
80
|
+
"keywords": [
|
|
81
|
+
"deepseek",
|
|
82
|
+
"deepseek-harness",
|
|
83
|
+
"dsh",
|
|
84
|
+
"dsh-plugin",
|
|
85
|
+
"draft",
|
|
86
|
+
"sessions",
|
|
87
|
+
"web-ui"
|
|
88
|
+
],
|
|
89
|
+
"license": "MIT",
|
|
90
|
+
"engines": {
|
|
91
|
+
"node": "^22.19.0 || >=24.0.0"
|
|
92
|
+
},
|
|
93
|
+
"peerDependencies": {
|
|
94
|
+
"@deepseek-ai/cordis": "catalog:dsh",
|
|
95
|
+
"@deepseek-ai/schemastery": "catalog:dsh",
|
|
96
|
+
"@deepseek-ai/dsh-api-gateway": "catalog:dsh",
|
|
97
|
+
"@deepseek-ai/dsh-client-connection": "catalog:dsh",
|
|
98
|
+
"@deepseek-ai/dsh-client-runtime": "catalog:dsh",
|
|
99
|
+
"@deepseek-ai/dsh-client-locale": "catalog:dsh",
|
|
100
|
+
"@deepseek-ai/dsh-client-ui-conversation": "catalog:dsh",
|
|
101
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "catalog:dsh",
|
|
102
|
+
"@deepseek-ai/dsh-typert-protocol": "catalog:dsh",
|
|
103
|
+
"react": "^18.2.0",
|
|
104
|
+
"react-dom": "^18.2.0"
|
|
105
|
+
},
|
|
106
|
+
"dependencies": {
|
|
107
|
+
"zod": "^4.4.3"
|
|
108
|
+
},
|
|
109
|
+
"devDependencies": {
|
|
110
|
+
"@deepseek-ai/cordis": "catalog:dsh-dev",
|
|
111
|
+
"@deepseek-ai/schemastery": "catalog:dsh-dev",
|
|
112
|
+
"@deepseek-ai/dsh-api-gateway": "catalog:dsh-dev",
|
|
113
|
+
"@deepseek-ai/dsh-client-connection": "catalog:dsh-dev",
|
|
114
|
+
"@deepseek-ai/dsh-client-runtime": "catalog:dsh-dev",
|
|
115
|
+
"@deepseek-ai/dsh-client-locale": "catalog:dsh-dev",
|
|
116
|
+
"@deepseek-ai/dsh-client-ui-conversation": "catalog:dsh-dev",
|
|
117
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "catalog:dsh-dev",
|
|
118
|
+
"@deepseek-ai/dsh-typert-protocol": "catalog:dsh-dev",
|
|
119
|
+
"@deepseek-ai/dsh-typert-registry": "catalog:dsh-dev",
|
|
120
|
+
"@testing-library/dom": "^10.4.1",
|
|
121
|
+
"@testing-library/react": "^16.3.0",
|
|
122
|
+
"@types/node": "catalog:tooling",
|
|
123
|
+
"@types/react": "catalog:frontend-dev",
|
|
124
|
+
"@types/react-dom": "catalog:frontend-dev",
|
|
125
|
+
"@vitest/coverage-v8": "^4.1.8",
|
|
126
|
+
"jsdom": "^26.1.0",
|
|
127
|
+
"playwright": "1.62.1",
|
|
128
|
+
"eslint": "catalog:tooling",
|
|
129
|
+
"prettier": "catalog:tooling",
|
|
130
|
+
"react": "catalog:frontend-dev",
|
|
131
|
+
"react-dom": "catalog:frontend-dev",
|
|
132
|
+
"tsdown": "catalog:tooling",
|
|
133
|
+
"typescript": "catalog:plugin-tooling",
|
|
134
|
+
"vitest": "catalog:tooling"
|
|
135
|
+
},
|
|
136
|
+
"publishConfig": {
|
|
137
|
+
"access": "public",
|
|
138
|
+
"registry": "https://registry.npmjs.org/"
|
|
139
|
+
}
|
|
140
|
+
}
|