@norman-else/dsh-claude 0.1.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.
@@ -0,0 +1,230 @@
1
+ import z from "@deepseek-ai/schemastery";
2
+ import { EffortLevel, Options, Query, SDKControlGetContextUsageResponse, SDKUserMessage, SlashCommand } from "@anthropic-ai/claude-agent-sdk";
3
+ import { SubprocessRuntime } from "@deepseek-ai/dsh-subprocess";
4
+ import { Context } from "@deepseek-ai/cordis";
5
+ import { Agent } from "@deepseek-ai/dsh-agent";
6
+ import { CommandDefinition, CommandDescriptor } from "@deepseek-ai/dsh-commands";
7
+ import { SessionEvent } from "@deepseek-ai/dsh-session";
8
+ import { ApprovalService } from "@deepseek-ai/dsh-user-approval";
9
+ //#region src/command-bridge.d.ts
10
+ /**
11
+ * Agent-scope command service contract. The commands service is unreachable
12
+ * from the host plugin's view of `agent.ctx` ("without inject"), but the
13
+ * preset route plugin runs INSIDE the agent's preset composition with
14
+ * `commands` injected. Registrations made through the provided service land
15
+ * in the agent's scope layer, which the command registry inherits into
16
+ * `list(agent)` for exactly that agent — invisible to every other session.
17
+ */
18
+ interface ClaudeAgentCommandService {
19
+ list(agent: unknown): readonly Pick<CommandDescriptor, 'name'>[];
20
+ register(definition: CommandDefinition): () => void;
21
+ }
22
+ declare module '@deepseek-ai/cordis' {
23
+ interface Context {
24
+ claudeCommands?: ClaudeAgentCommandService;
25
+ }
26
+ }
27
+ //#endregion
28
+ //#region src/events.d.ts
29
+ type ClaudeActivityKind = 'status' | 'thinking' | 'tool-call' | 'tool-result' | 'permission' | 'subagent' | 'usage' | 'warning' | 'error';
30
+ type ClaudeActivityPhase = 'started' | 'updated' | 'completed' | 'denied' | 'failed';
31
+ interface ClaudeUsage {
32
+ inputTokens?: number;
33
+ outputTokens?: number;
34
+ cacheReadTokens?: number;
35
+ cacheCreationTokens?: number;
36
+ cumulativeCostUsd?: number;
37
+ }
38
+ interface ClaudeSessionBoundEvent {
39
+ claudeSessionId: string;
40
+ cliVersion?: string;
41
+ sdkVersion: string;
42
+ cwd: string;
43
+ }
44
+ interface ClaudeActivityEvent {
45
+ turn: number;
46
+ step: number;
47
+ ordinal: number;
48
+ kind: ClaudeActivityKind;
49
+ phase?: ClaudeActivityPhase;
50
+ /** Claude task-board identity for lifecycle activity; never a transcript path. */
51
+ taskId?: string;
52
+ toolUseId?: string;
53
+ /** Enclosing Claude tool call for subagent-nested activity. */
54
+ parentToolUseId?: string;
55
+ toolName?: string;
56
+ title?: string;
57
+ summary?: string;
58
+ detail?: string;
59
+ isError?: boolean;
60
+ usage?: ClaudeUsage;
61
+ }
62
+ interface ClaudeContextUsageCategory {
63
+ name: string;
64
+ tokens: number;
65
+ color: string;
66
+ isDeferred?: boolean;
67
+ }
68
+ interface ClaudeContextUsageEvent {
69
+ model: string;
70
+ totalTokens: number;
71
+ maxTokens: number;
72
+ percentage: number;
73
+ categories: readonly ClaudeContextUsageCategory[];
74
+ }
75
+ interface ClaudeContextUsageInput {
76
+ model: unknown;
77
+ totalTokens: unknown;
78
+ maxTokens: unknown;
79
+ percentage: unknown;
80
+ categories: readonly {
81
+ name?: unknown;
82
+ tokens?: unknown;
83
+ color?: unknown;
84
+ isDeferred?: unknown;
85
+ }[];
86
+ }
87
+ declare module '@deepseek-ai/dsh-session/types' {
88
+ interface SessionEventMap {
89
+ 'claude-code/session-bound': ClaudeSessionBoundEvent;
90
+ 'claude-code/activity': ClaudeActivityEvent;
91
+ 'claude-code/context-usage': ClaudeContextUsageEvent;
92
+ 'claude-code/tasks': ClaudeTasksEvent;
93
+ }
94
+ }
95
+ type ClaudeTaskStatus = 'running' | 'completed' | 'failed' | 'stopped' | 'killed';
96
+ interface ClaudeTaskUsage {
97
+ totalTokens?: number;
98
+ toolUses?: number;
99
+ durationMs?: number;
100
+ }
101
+ interface ClaudeTaskInfo {
102
+ taskId: string;
103
+ description: string;
104
+ status: ClaudeTaskStatus;
105
+ /** DSH turn during which this task was first observed, when known. */
106
+ originTurn?: number;
107
+ subagentType?: string;
108
+ taskType?: string;
109
+ lastToolName?: string;
110
+ summary?: string;
111
+ usage?: ClaudeTaskUsage;
112
+ /** True while the task runs detached (background command/subagent). */
113
+ backgrounded?: boolean;
114
+ }
115
+ /** Level snapshot of one session's Claude task board, REPLACE semantics. */
116
+ interface ClaudeTasksEvent {
117
+ tasks: readonly ClaudeTaskInfo[];
118
+ }
119
+ type ClaudeActivityInput = Omit<ClaudeActivityEvent, 'turn' | 'step' | 'ordinal' | 'summary' | 'detail'> & {
120
+ summary?: unknown;
121
+ detail?: unknown;
122
+ };
123
+ //#endregion
124
+ //#region src/sidecar.d.ts
125
+ declare const SIDECAR_SCHEMA_VERSION = 1;
126
+ interface ClaudeSidecarProjection {
127
+ readonly schemaVersion: typeof SIDECAR_SCHEMA_VERSION;
128
+ readonly revision: number;
129
+ readonly binding?: ClaudeSessionBoundEvent;
130
+ readonly activities: readonly ClaudeActivityEvent[];
131
+ readonly contextUsage?: ClaudeContextUsageEvent;
132
+ readonly tasks?: ClaudeTasksEvent;
133
+ }
134
+ interface ClaudeSidecarRepositoryOptions {
135
+ readonly root?: string;
136
+ readonly legacyRoot?: string;
137
+ }
138
+ declare class ClaudeSidecarRepository {
139
+ #private;
140
+ readonly root: string;
141
+ readonly legacyRoot: string | undefined;
142
+ constructor(options?: ClaudeSidecarRepositoryOptions);
143
+ read(sessionId: string): Promise<ClaudeSidecarProjection>;
144
+ writeBinding(sessionId: string, value: Omit<ClaudeSessionBoundEvent, 'sdkVersion'> & {
145
+ sdkVersion?: string;
146
+ }): Promise<ClaudeSidecarProjection>;
147
+ appendActivity(sessionId: string, value: ClaudeActivityInput & {
148
+ turn: number;
149
+ step: number;
150
+ ordinal: number;
151
+ }): Promise<ClaudeSidecarProjection>;
152
+ writeContextUsage(sessionId: string, value: ClaudeContextUsageInput): Promise<ClaudeSidecarProjection>;
153
+ writeTasks(sessionId: string, value: readonly ClaudeTaskInfo[]): Promise<ClaudeSidecarProjection>;
154
+ importLegacy(sessionId: string, events: readonly SessionEvent[]): Promise<ClaudeSidecarProjection>;
155
+ }
156
+ //#endregion
157
+ //#region src/supervisor.d.ts
158
+ type ClaudeSupervisorState = 'starting' | 'idle' | 'running' | 'interrupting' | 'disconnected' | 'outcome-unknown' | 'disposed';
159
+ interface ClaudeSupervisorConfig {
160
+ executablePath: string;
161
+ idleTimeoutMs: number;
162
+ maxProcesses: number;
163
+ defaultModel: string;
164
+ }
165
+ type ClaudeTurnStreamEvent = {
166
+ type: 'text-delta';
167
+ text: string;
168
+ } | {
169
+ type: 'usage';
170
+ usage: ClaudeUsage;
171
+ } | {
172
+ type: 'complete';
173
+ text: string;
174
+ };
175
+ type ClaudeThinkingMode = 'off' | 'ultracode' | EffortLevel;
176
+ interface ClaudeTurnRequest {
177
+ agent: Agent;
178
+ prompt: string;
179
+ model?: string;
180
+ thinkingMode?: ClaudeThinkingMode;
181
+ signal?: AbortSignal;
182
+ }
183
+ interface ClaudeSupervisorSnapshot {
184
+ sessionId: string;
185
+ claudeSessionId?: string;
186
+ state: ClaudeSupervisorState;
187
+ cwd: string;
188
+ model: string;
189
+ thinkingMode?: ClaudeThinkingMode;
190
+ lastUsedAt: number;
191
+ pid?: number;
192
+ }
193
+ type ClaudeQueryFactory = (params: {
194
+ prompt: AsyncIterable<SDKUserMessage>;
195
+ options: Options;
196
+ }) => Query;
197
+ declare class ClaudeSupervisor {
198
+ #private;
199
+ constructor(dependencies: {
200
+ runtime: Pick<SubprocessRuntime, 'spawn'>;
201
+ approval: Pick<ApprovalService, 'request'>;
202
+ config: ClaudeSupervisorConfig;
203
+ queryFactory?: ClaudeQueryFactory;
204
+ runDetached?: <T>(operation: () => T) => T;
205
+ sidecar?: ClaudeSidecarRepository;
206
+ });
207
+ snapshots(): ClaudeSupervisorSnapshot[];
208
+ supportedCommands(agent: Agent, model?: string): Promise<readonly SlashCommand[]>;
209
+ contextUsage(agent: Agent, model?: string): Promise<SDKControlGetContextUsageResponse>;
210
+ contextWindow(model: string): number | undefined;
211
+ runTurn(request: ClaudeTurnRequest): Promise<AsyncIterable<ClaudeTurnStreamEvent>>;
212
+ disposeSession(sessionId: string): Promise<void>;
213
+ dispose(): Promise<void>;
214
+ }
215
+ //#endregion
216
+ //#region src/index.d.ts
217
+ declare const name = "llm-claude";
218
+ declare const inject: string[];
219
+ interface Config {
220
+ executablePath?: string;
221
+ model?: string;
222
+ idleTimeoutMs?: number;
223
+ maxProcesses?: number;
224
+ }
225
+ declare const Config: z<Config>;
226
+ declare function mountClaudeMetadata(ctx: Context, supervisor: ClaudeSupervisor, agent: Agent, model: string, sidecar: ClaudeSidecarRepository, resolveCommands?: () => ClaudeAgentCommandService | undefined): (() => Promise<void>) | undefined;
227
+ declare function apply(ctx: Context, config: Config): Promise<void>;
228
+ //#endregion
229
+ export { Config, apply, inject, mountClaudeMetadata, name };
230
+ //# sourceMappingURL=index.d.mts.map