qlogicagent 0.6.0 → 1.0.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/dist/agent.js +9 -9
- package/dist/cli.js +158 -148
- package/dist/index.js +158 -148
- package/dist/orchestration.js +9 -9
- package/dist/types/agent/types.d.ts +50 -0
- package/dist/types/cli/stdio-server.d.ts +60 -0
- package/dist/types/cli/tool-bootstrap.d.ts +5 -13
- package/dist/types/llm/index.d.ts +7 -1
- package/dist/types/llm/media-client.d.ts +43 -0
- package/dist/types/llm/media-transport.d.ts +80 -0
- package/dist/types/llm/model-catalog.d.ts +4 -4
- package/dist/types/llm/provider-def.d.ts +7 -0
- package/dist/types/llm/provider-registry.d.ts +1 -1
- package/dist/types/llm/transport.d.ts +2 -0
- package/dist/types/llm/transports/anthropic-messages.d.ts +34 -11
- package/dist/types/llm/transports/gemini-media.d.ts +21 -0
- package/dist/types/llm/transports/minimax-media.d.ts +21 -0
- package/dist/types/llm/transports/openai-chat.d.ts +1 -1
- package/dist/types/llm/transports/openai-media.d.ts +24 -0
- package/dist/types/llm/transports/qwen-media.d.ts +25 -0
- package/dist/types/llm/transports/volcengine-media.d.ts +34 -0
- package/dist/types/orchestration/tool-loop/tool-schema.d.ts +1 -2
- package/dist/types/protocol/index.d.ts +7 -0
- package/dist/types/protocol/methods.d.ts +380 -0
- package/dist/types/protocol/notifications.d.ts +296 -0
- package/dist/types/runtime/prompt/environment-context.d.ts +1 -1
- package/dist/types/runtime/session/index.d.ts +1 -1
- package/dist/types/runtime/session/session-state.d.ts +18 -9
- package/dist/types/skills/memory/qmemory-adapter.d.ts +1 -0
- package/dist/types/skills/tools/shell/shell-exec.d.ts +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized Notification Event Protocol — all JSON-RPC notification types
|
|
3
|
+
* that qlogicagent emits to external apps.
|
|
4
|
+
*
|
|
5
|
+
* This is the SINGLE SOURCE OF TRUTH for the agent's outbound event contract.
|
|
6
|
+
* Frontend, Electron, Hub, and test harness all consume these types.
|
|
7
|
+
*
|
|
8
|
+
* Reference: Codex app-server events, Claude Code streaming events,
|
|
9
|
+
* DeerFlow LangGraph stream modes.
|
|
10
|
+
*/
|
|
11
|
+
import type { TokenUsage } from "../agent/types.js";
|
|
12
|
+
import type { TodoItem } from "../contracts/todo.js";
|
|
13
|
+
/** Embedded thread item for clients using the Thread protocol. */
|
|
14
|
+
export interface NotificationThreadItem {
|
|
15
|
+
id: string;
|
|
16
|
+
type: string;
|
|
17
|
+
role: "user" | "assistant" | "system";
|
|
18
|
+
text?: string;
|
|
19
|
+
toolName?: string;
|
|
20
|
+
toolCallId?: string;
|
|
21
|
+
arguments?: string;
|
|
22
|
+
output?: string;
|
|
23
|
+
approved?: boolean;
|
|
24
|
+
strategy?: string;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
}
|
|
27
|
+
/** Turn started — always emitted first. */
|
|
28
|
+
export interface TurnStartNotification {
|
|
29
|
+
turnId: string;
|
|
30
|
+
/** Model being used for this turn (Codex parity). */
|
|
31
|
+
model?: string;
|
|
32
|
+
/** Provider id. */
|
|
33
|
+
provider?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Streaming text chunk from the main agent. */
|
|
36
|
+
export interface TurnDeltaNotification {
|
|
37
|
+
turnId: string;
|
|
38
|
+
text: string;
|
|
39
|
+
item?: NotificationThreadItem;
|
|
40
|
+
}
|
|
41
|
+
/** Turn completed successfully. */
|
|
42
|
+
export interface TurnEndNotification {
|
|
43
|
+
turnId: string;
|
|
44
|
+
content: string;
|
|
45
|
+
usage?: TokenUsage;
|
|
46
|
+
model?: string;
|
|
47
|
+
provider?: string;
|
|
48
|
+
item?: NotificationThreadItem;
|
|
49
|
+
}
|
|
50
|
+
/** Turn failed. */
|
|
51
|
+
export interface TurnErrorNotification {
|
|
52
|
+
turnId: string;
|
|
53
|
+
error: string;
|
|
54
|
+
code?: string;
|
|
55
|
+
}
|
|
56
|
+
/** Agent self-recovered from an error (retry, conversation repair, etc.). */
|
|
57
|
+
export interface TurnRecoveryNotification {
|
|
58
|
+
turnId: string;
|
|
59
|
+
action: string;
|
|
60
|
+
detail?: string;
|
|
61
|
+
item?: NotificationThreadItem;
|
|
62
|
+
}
|
|
63
|
+
/** Tool invocation started — includes arguments for UI display. */
|
|
64
|
+
export interface TurnToolCallNotification {
|
|
65
|
+
turnId: string;
|
|
66
|
+
callId: string;
|
|
67
|
+
name: string;
|
|
68
|
+
/** Serialized arguments JSON. Enables UI to display "searching for X", "reading file Y". */
|
|
69
|
+
arguments?: string;
|
|
70
|
+
item?: NotificationThreadItem;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Tool execution completed.
|
|
74
|
+
* Includes truncated output for "Used X sources" style panels.
|
|
75
|
+
*/
|
|
76
|
+
export interface TurnToolResultNotification {
|
|
77
|
+
turnId: string;
|
|
78
|
+
callId: string;
|
|
79
|
+
name: string;
|
|
80
|
+
ok: boolean;
|
|
81
|
+
error?: string;
|
|
82
|
+
/** Truncated tool output (max 2000 chars). Enables source preview panels. */
|
|
83
|
+
outputPreview?: string;
|
|
84
|
+
item?: NotificationThreadItem;
|
|
85
|
+
}
|
|
86
|
+
/** Tool execution blocked by permission system. */
|
|
87
|
+
export interface TurnToolBlockedNotification {
|
|
88
|
+
turnId: string;
|
|
89
|
+
callId: string;
|
|
90
|
+
name: string;
|
|
91
|
+
reason: string;
|
|
92
|
+
item?: NotificationThreadItem;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Reasoning/thinking token stream — separate from main delta.
|
|
96
|
+
* Enables DeerFlow-style collapsible thinking blocks.
|
|
97
|
+
*
|
|
98
|
+
* For models that support extended thinking (Claude, DeepSeek-R1, o1),
|
|
99
|
+
* reasoning content is streamed via this event instead of turn.delta.
|
|
100
|
+
*/
|
|
101
|
+
export interface TurnReasoningDeltaNotification {
|
|
102
|
+
turnId: string;
|
|
103
|
+
text: string;
|
|
104
|
+
}
|
|
105
|
+
/** Plan/strategy update — rendered as DeerFlow Plan component. */
|
|
106
|
+
export interface TurnPlanUpdateNotification {
|
|
107
|
+
turnId: string;
|
|
108
|
+
slug: string;
|
|
109
|
+
content: string;
|
|
110
|
+
item?: NotificationThreadItem;
|
|
111
|
+
}
|
|
112
|
+
/** Suggestion items — interactive quick-action buttons. */
|
|
113
|
+
export interface TurnSuggestionsNotification {
|
|
114
|
+
turnId: string;
|
|
115
|
+
items: Array<{
|
|
116
|
+
text: string;
|
|
117
|
+
icon?: string;
|
|
118
|
+
action?: string;
|
|
119
|
+
}>;
|
|
120
|
+
}
|
|
121
|
+
/** Sub-agent (fork, skill, dream) started execution. */
|
|
122
|
+
export interface TurnSubagentStartedNotification {
|
|
123
|
+
turnId: string;
|
|
124
|
+
subagentId: string;
|
|
125
|
+
agentType: string;
|
|
126
|
+
prompt?: string;
|
|
127
|
+
}
|
|
128
|
+
/** Sub-agent streaming text chunk. */
|
|
129
|
+
export interface TurnSubagentDeltaNotification {
|
|
130
|
+
agentType: string;
|
|
131
|
+
subagentId?: string;
|
|
132
|
+
text: string;
|
|
133
|
+
}
|
|
134
|
+
/** Sub-agent completed execution. */
|
|
135
|
+
export interface TurnSubagentEndedNotification {
|
|
136
|
+
turnId: string;
|
|
137
|
+
subagentId: string;
|
|
138
|
+
agentType: string;
|
|
139
|
+
ok: boolean;
|
|
140
|
+
/** Truncated result (max 2000 chars). */
|
|
141
|
+
outputPreview?: string;
|
|
142
|
+
error?: string;
|
|
143
|
+
}
|
|
144
|
+
export type MediaResultType = "image" | "tts" | "video";
|
|
145
|
+
/** Structured media generation result — enables media preview cards. */
|
|
146
|
+
export interface TurnMediaResultNotification {
|
|
147
|
+
turnId: string;
|
|
148
|
+
mediaType: MediaResultType;
|
|
149
|
+
/** Local file path or URL. */
|
|
150
|
+
url: string;
|
|
151
|
+
/** Model used for generation. */
|
|
152
|
+
model?: string;
|
|
153
|
+
/** Provider id. */
|
|
154
|
+
provider?: string;
|
|
155
|
+
/** Duration in seconds (for TTS/video). */
|
|
156
|
+
durationSeconds?: number;
|
|
157
|
+
/** Image dimensions. */
|
|
158
|
+
width?: number;
|
|
159
|
+
height?: number;
|
|
160
|
+
/** MIME type (e.g. "audio/mpeg", "image/png"). */
|
|
161
|
+
mimeType?: string;
|
|
162
|
+
/** Billing info. */
|
|
163
|
+
billingUnit?: string;
|
|
164
|
+
billingQuantity?: number;
|
|
165
|
+
}
|
|
166
|
+
/** Full todo list updated — enables DeerFlow-style todo panel sync. */
|
|
167
|
+
export interface TurnTodosUpdatedNotification {
|
|
168
|
+
turnId?: string;
|
|
169
|
+
items: TodoItem[];
|
|
170
|
+
summary: {
|
|
171
|
+
total: number;
|
|
172
|
+
completed: number;
|
|
173
|
+
inProgress: number;
|
|
174
|
+
notStarted: number;
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/** Infrastructure task state change (bash, agent fork, dream). */
|
|
178
|
+
export interface TaskUpdatedNotification {
|
|
179
|
+
taskId: string;
|
|
180
|
+
type: string;
|
|
181
|
+
lifecycle: string;
|
|
182
|
+
label?: string;
|
|
183
|
+
}
|
|
184
|
+
/** Long-running command execution progress (shell, script). */
|
|
185
|
+
export interface TurnExecProgressNotification {
|
|
186
|
+
output: string;
|
|
187
|
+
elapsedTimeSeconds: number;
|
|
188
|
+
totalLines: number;
|
|
189
|
+
totalBytes: number;
|
|
190
|
+
}
|
|
191
|
+
export type ArtifactType = "code" | "file" | "image" | "document" | "diagram" | "table";
|
|
192
|
+
/** Structured artifact produced by the agent — enables Canvas-style rendering. */
|
|
193
|
+
export interface TurnArtifactNotification {
|
|
194
|
+
turnId: string;
|
|
195
|
+
artifactId: string;
|
|
196
|
+
type: ArtifactType;
|
|
197
|
+
title: string;
|
|
198
|
+
/** File path (for file/code artifacts). */
|
|
199
|
+
filePath?: string;
|
|
200
|
+
/** Language id (for code artifacts). */
|
|
201
|
+
language?: string;
|
|
202
|
+
/** Content body (may be truncated for large artifacts). */
|
|
203
|
+
content?: string;
|
|
204
|
+
/** MIME type. */
|
|
205
|
+
mimeType?: string;
|
|
206
|
+
}
|
|
207
|
+
/** Agent requests user approval before executing a restricted tool. */
|
|
208
|
+
export interface ToolApprovalRequestNotification {
|
|
209
|
+
approvalId: string;
|
|
210
|
+
callId: string;
|
|
211
|
+
toolName: string;
|
|
212
|
+
arguments: string;
|
|
213
|
+
message?: string;
|
|
214
|
+
suggestions?: string[];
|
|
215
|
+
}
|
|
216
|
+
/** Skill instruction directive. */
|
|
217
|
+
export interface TurnSkillInstructionNotification {
|
|
218
|
+
turnId: string;
|
|
219
|
+
instruction: unknown;
|
|
220
|
+
}
|
|
221
|
+
/** Memory content changed (local md or QMemory). */
|
|
222
|
+
export interface MemoryUpdatedNotification {
|
|
223
|
+
source: string;
|
|
224
|
+
/** Memory target (memory, user, etc.). */
|
|
225
|
+
target?: string;
|
|
226
|
+
/** Number of entries. */
|
|
227
|
+
entryCount?: number;
|
|
228
|
+
/** Human-readable summary of what changed. */
|
|
229
|
+
summary?: string;
|
|
230
|
+
}
|
|
231
|
+
/** Session metadata changed (title, model, etc.). */
|
|
232
|
+
export interface SessionInfoNotification {
|
|
233
|
+
sessionId: string;
|
|
234
|
+
title?: string;
|
|
235
|
+
model?: string;
|
|
236
|
+
provider?: string;
|
|
237
|
+
cwd?: string;
|
|
238
|
+
turnCount?: number;
|
|
239
|
+
}
|
|
240
|
+
/** Permission rule saved/updated. */
|
|
241
|
+
export interface PermissionRuleUpdatedNotification {
|
|
242
|
+
/** Tool name glob pattern. */
|
|
243
|
+
pattern: string;
|
|
244
|
+
/** New permission behavior (allow, deny, ask). */
|
|
245
|
+
behavior: string;
|
|
246
|
+
}
|
|
247
|
+
/** Team created, updated, or destroyed. */
|
|
248
|
+
export interface TeamUpdatedNotification {
|
|
249
|
+
teamName: string;
|
|
250
|
+
action: "created" | "destroyed" | "member_joined" | "member_left";
|
|
251
|
+
members?: Array<{
|
|
252
|
+
agentName: string;
|
|
253
|
+
role: string;
|
|
254
|
+
}>;
|
|
255
|
+
}
|
|
256
|
+
export interface PongNotification {
|
|
257
|
+
}
|
|
258
|
+
/** Real-time token usage update (emitted after each LLM call within a turn). */
|
|
259
|
+
export interface TurnUsageUpdateNotification {
|
|
260
|
+
turnId: string;
|
|
261
|
+
usage: TokenUsage;
|
|
262
|
+
model?: string;
|
|
263
|
+
/** Cumulative cost estimate for this session (USD). */
|
|
264
|
+
sessionCostUSD?: number;
|
|
265
|
+
}
|
|
266
|
+
export interface NotificationMethodMap {
|
|
267
|
+
"turn.start": TurnStartNotification;
|
|
268
|
+
"turn.delta": TurnDeltaNotification;
|
|
269
|
+
"turn.end": TurnEndNotification;
|
|
270
|
+
"turn.error": TurnErrorNotification;
|
|
271
|
+
"turn.recovery": TurnRecoveryNotification;
|
|
272
|
+
"turn.tool_call": TurnToolCallNotification;
|
|
273
|
+
"turn.tool_result": TurnToolResultNotification;
|
|
274
|
+
"turn.tool_blocked": TurnToolBlockedNotification;
|
|
275
|
+
"turn.reasoning_delta": TurnReasoningDeltaNotification;
|
|
276
|
+
"turn.plan_update": TurnPlanUpdateNotification;
|
|
277
|
+
"turn.suggestions": TurnSuggestionsNotification;
|
|
278
|
+
"turn.subagent_started": TurnSubagentStartedNotification;
|
|
279
|
+
"turn.subagent_delta": TurnSubagentDeltaNotification;
|
|
280
|
+
"turn.subagent_ended": TurnSubagentEndedNotification;
|
|
281
|
+
"turn.media_result": TurnMediaResultNotification;
|
|
282
|
+
"turn.todos_updated": TurnTodosUpdatedNotification;
|
|
283
|
+
"task.updated": TaskUpdatedNotification;
|
|
284
|
+
"turn.exec_progress": TurnExecProgressNotification;
|
|
285
|
+
"turn.artifact": TurnArtifactNotification;
|
|
286
|
+
"tool.approval.request": ToolApprovalRequestNotification;
|
|
287
|
+
"turn.skill_instruction": TurnSkillInstructionNotification;
|
|
288
|
+
"memory.updated": MemoryUpdatedNotification;
|
|
289
|
+
"session.info": SessionInfoNotification;
|
|
290
|
+
"permission.rule_updated": PermissionRuleUpdatedNotification;
|
|
291
|
+
"team.updated": TeamUpdatedNotification;
|
|
292
|
+
"turn.usage_update": TurnUsageUpdateNotification;
|
|
293
|
+
"pong": PongNotification;
|
|
294
|
+
}
|
|
295
|
+
/** All known notification method names. */
|
|
296
|
+
export type NotificationMethod = keyof NotificationMethodMap;
|
|
@@ -20,4 +20,4 @@ export type ShellType = "bash" | "powershell" | "zsh" | "cmd" | "fish" | "unknow
|
|
|
20
20
|
* Create a system prompt section that provides environment context.
|
|
21
21
|
* Memoized — computed once per session (environment doesn't change mid-session).
|
|
22
22
|
*/
|
|
23
|
-
export declare function createEnvironmentContextSection(): SystemPromptSection;
|
|
23
|
+
export declare function createEnvironmentContextSection(cwdOverride?: string): SystemPromptSection;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { SessionState, type SessionCostSnapshot } from "./session-state.js";
|
|
1
|
+
export { SessionState, type SessionUsageSnapshot, type SessionCostSnapshot } from "./session-state.js";
|
|
2
2
|
export { appendMessage, saveSessionState, loadSessionForResume, listSessions, deleteSession, pruneOldSessions, shouldGenerateTaskSummary, maybeGenerateTaskSummary, type SessionMetadata, type PersistedSession, type SessionListEntry, type TaskSummaryDeps, } from "./session-persistence.js";
|
|
@@ -21,18 +21,24 @@ export interface ModelUsage {
|
|
|
21
21
|
outputTokens: number;
|
|
22
22
|
cacheRead: number;
|
|
23
23
|
cacheCreation: number;
|
|
24
|
-
|
|
24
|
+
/** Media generation call count (image/video/music/tts/3d) */
|
|
25
|
+
mediaCalls: number;
|
|
26
|
+
/** Total seconds of media output (video, music) */
|
|
27
|
+
mediaDurationSeconds: number;
|
|
28
|
+
/** Total characters processed (TTS) */
|
|
29
|
+
mediaCharacters: number;
|
|
25
30
|
}
|
|
26
31
|
/** Snapshot of the session state for persistence / restore */
|
|
27
|
-
export interface
|
|
32
|
+
export interface SessionUsageSnapshot {
|
|
28
33
|
sessionId: string;
|
|
29
|
-
totalCostUSD: number;
|
|
30
34
|
modelUsage: Record<string, ModelUsage>;
|
|
31
35
|
totalInputTokens: number;
|
|
32
36
|
totalOutputTokens: number;
|
|
33
37
|
turnCount: number;
|
|
34
38
|
lastSavedAt: number;
|
|
35
39
|
}
|
|
40
|
+
/** @deprecated Use SessionUsageSnapshot. Kept for persistence compat. */
|
|
41
|
+
export type SessionCostSnapshot = SessionUsageSnapshot;
|
|
36
42
|
/** Thresholds for background memory extraction — CC sessionMemory.ts parity */
|
|
37
43
|
export interface MemoryExtractionThresholds {
|
|
38
44
|
/** Token threshold before FIRST extraction (default 10000) */
|
|
@@ -45,7 +51,6 @@ export interface MemoryExtractionThresholds {
|
|
|
45
51
|
export declare class SessionState {
|
|
46
52
|
readonly sessionId: string;
|
|
47
53
|
private _trustAccepted;
|
|
48
|
-
private _totalCostUSD;
|
|
49
54
|
private _modelUsage;
|
|
50
55
|
private _totalInputTokens;
|
|
51
56
|
private _totalOutputTokens;
|
|
@@ -60,7 +65,6 @@ export declare class SessionState {
|
|
|
60
65
|
constructor(sessionId: string, thresholds?: Partial<MemoryExtractionThresholds>);
|
|
61
66
|
get trustAccepted(): boolean;
|
|
62
67
|
setTrustAccepted(accepted: boolean): void;
|
|
63
|
-
get totalCostUSD(): number;
|
|
64
68
|
get totalInputTokens(): number;
|
|
65
69
|
get totalOutputTokens(): number;
|
|
66
70
|
get turnCount(): number;
|
|
@@ -71,12 +75,17 @@ export declare class SessionState {
|
|
|
71
75
|
getAllModelUsage(): Record<string, ModelUsage>;
|
|
72
76
|
/**
|
|
73
77
|
* Add usage from an API response — CC addToTotalSessionCost() parity.
|
|
78
|
+
* Tracks token counts only; pricing is handled by Hub/Admin.
|
|
74
79
|
*
|
|
75
80
|
* @param usage - Token counts from the API response
|
|
76
81
|
* @param model - Model identifier
|
|
77
|
-
* @param costUSD - Calculated cost (caller computes based on pricing)
|
|
78
82
|
*/
|
|
79
|
-
addUsage(usage: TokenUsage, model: string
|
|
83
|
+
addUsage(usage: TokenUsage, model: string): void;
|
|
84
|
+
/**
|
|
85
|
+
* Add usage from a media generation call (non-token billing).
|
|
86
|
+
* Tracks quantities only (calls, seconds, characters); pricing is Hub/Admin's job.
|
|
87
|
+
*/
|
|
88
|
+
addMediaUsage(model: string, billingUnit: string, quantity: number): void;
|
|
80
89
|
/** Record a tool call (for extraction threshold tracking) */
|
|
81
90
|
recordToolCall(): void;
|
|
82
91
|
/** Increment turn count */
|
|
@@ -98,7 +107,7 @@ export declare class SessionState {
|
|
|
98
107
|
* Create a snapshot for persistence.
|
|
99
108
|
* CC saveCurrentSessionCosts() parity.
|
|
100
109
|
*/
|
|
101
|
-
createSnapshot():
|
|
110
|
+
createSnapshot(): SessionUsageSnapshot;
|
|
102
111
|
/**
|
|
103
112
|
* Restore from a previous snapshot.
|
|
104
113
|
* CC setCostStateForRestore() parity.
|
|
@@ -106,7 +115,7 @@ export declare class SessionState {
|
|
|
106
115
|
* GUARD: Only restores if the snapshot's sessionId matches this session.
|
|
107
116
|
* Prevents cross-session cost leakage (CC's lastSessionId guard).
|
|
108
117
|
*/
|
|
109
|
-
restoreFromSnapshot(snapshot:
|
|
118
|
+
restoreFromSnapshot(snapshot: SessionUsageSnapshot): boolean;
|
|
110
119
|
/** Register a state change listener. Returns unsubscribe function. */
|
|
111
120
|
onStateChange(listener: () => void): () => void;
|
|
112
121
|
private notifyListeners;
|
|
@@ -35,6 +35,7 @@ export interface QMemoryHealthStatus {
|
|
|
35
35
|
*/
|
|
36
36
|
export declare function createQMemoryAdapter(config: QMemoryAdapterConfig): MemoryProvider & {
|
|
37
37
|
health(): Promise<QMemoryHealthStatus>;
|
|
38
|
+
remove(memoryId: string): Promise<boolean>;
|
|
38
39
|
ingestExtracted(items: ExtractedMemoryItem[], userId: string, options?: MemoryIngestOptions): Promise<{
|
|
39
40
|
memoriesAdded: number;
|
|
40
41
|
}>;
|
|
@@ -14,6 +14,8 @@ export interface ExecOptions {
|
|
|
14
14
|
shouldAutoBackground?: boolean;
|
|
15
15
|
/** When provided, stdout is piped and this callback fires per chunk. */
|
|
16
16
|
onStdout?: (data: string) => void;
|
|
17
|
+
/** Per-call CWD override. When set, spawn uses this instead of the session CWD. */
|
|
18
|
+
cwd?: string;
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* Set the shell provider for this session.
|