@qoder-ai/qoder-agent-sdk 1.0.17 → 1.0.20

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.
@@ -10,6 +10,7 @@ import type { McpServerConfigForProcessTransport } from './mcp.js';
10
10
  import type { EffortLevel } from './common.js';
11
11
  import type { PermissionMode } from './permissions.js';
12
12
  export type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;
13
+ export type AgentMemoryScope = 'user' | 'project' | 'local';
13
14
  export type AgentDefinition = {
14
15
  description: string;
15
16
  tools?: string[];
@@ -22,6 +23,12 @@ export type AgentDefinition = {
22
23
  maxTurns?: number;
23
24
  effort?: EffortLevel;
24
25
  permissionMode?: PermissionMode;
26
+ /** Run this agent asynchronously whenever it is invoked. */
27
+ background?: boolean;
28
+ /** Persistent memory scope loaded for this agent. */
29
+ memory?: AgentMemoryScope;
30
+ /** Isolate this agent in a temporary git worktree. */
31
+ isolation?: 'worktree';
25
32
  };
26
33
  export type AgentInfo = {
27
34
  name: string;
@@ -281,6 +281,12 @@ export type SDKControlRewindFilesRequest = {
281
281
  user_message_id: string;
282
282
  dry_run?: boolean;
283
283
  };
284
+ export type SDKControlRewindRequest = {
285
+ type: 'rewind';
286
+ user_message_id: string;
287
+ scope?: 'conversation' | 'files' | 'both';
288
+ dry_run?: boolean;
289
+ };
284
290
  export type SDKControlCancelAsyncMessageRequest = {
285
291
  subtype: 'cancel_async_message';
286
292
  message_uuid: string;
@@ -472,7 +478,25 @@ export type SDKControlListPluginsRequest = {
472
478
  export type SDKControlListPluginsResponse = {
473
479
  plugins: PluginDetails[];
474
480
  };
475
- export type SDKControlRequestInner = SDKControlInterruptRequest | SDKControlPermissionRequest | SDKControlInitializeRequest | SDKControlSetPermissionModeRequest | SDKControlSetModelRequest | SDKControlSetProxyRequest | SDKControlGenerateSessionTitleRequest | SDKControlAddDirectoriesRequest | SDKControlSetMaxThinkingTokensRequest | SDKControlMcpStatusRequest | SDKControlGetContextUsageRequest | SDKControlGetUsageInfoRequest | SDKControlGetModelPolicyRequest | SDKControlAccountInfoRequest | SDKHookCallbackRequest | SDKControlMcpMessageRequest | SDKControlRewindFilesRequest | SDKControlCancelAsyncMessageRequest | SDKControlSeedReadStateRequest | SDKControlMcpSetServersRequest | SDKControlReloadPluginsRequest | SDKControlMcpReconnectRequest | SDKControlMcpToggleRequest | SDKControlApplyFlagSettingsRequest | SDKControlGetSettingsRequest | SDKControlElicitationRequest | SDKControlEndSessionRequest | SDKControlChannelEnableRequest | SDKControlMcpInjectTokenRequest | SDKControlMcpAuthenticateRequest | SDKControlMcpOAuthCallbackUrlRequest | SDKControlMcpClearAuthRequest | SDKControlGetByokConfigRequest | SDKControlValidateByokModelRequest | SDKControlListPluginsRequest;
481
+ /** Stop one running task by its stable public task ID. */
482
+ export type SDKControlStopTaskRequest = {
483
+ subtype: 'stop_task';
484
+ task_id: string;
485
+ };
486
+ /**
487
+ * Move foreground Bash/Agent executions into the background. With a tool use
488
+ * ID only the matching execution is targeted; without it all eligible
489
+ * foreground executions are targeted.
490
+ */
491
+ export type SDKControlBackgroundTasksRequest = {
492
+ subtype: 'background_tasks';
493
+ tool_use_id?: string;
494
+ };
495
+ export type SDKControlBackgroundTasksResponse = {
496
+ /** Present for a targeted tool use. Bulk backgrounding may omit the body. */
497
+ backgrounded?: boolean;
498
+ };
499
+ export type SDKControlRequestInner = SDKControlInterruptRequest | SDKControlPermissionRequest | SDKControlInitializeRequest | SDKControlSetPermissionModeRequest | SDKControlSetModelRequest | SDKControlSetProxyRequest | SDKControlGenerateSessionTitleRequest | SDKControlAddDirectoriesRequest | SDKControlSetMaxThinkingTokensRequest | SDKControlMcpStatusRequest | SDKControlGetContextUsageRequest | SDKControlGetUsageInfoRequest | SDKControlGetModelPolicyRequest | SDKControlAccountInfoRequest | SDKHookCallbackRequest | SDKControlMcpMessageRequest | SDKControlRewindFilesRequest | SDKControlRewindRequest | SDKControlCancelAsyncMessageRequest | SDKControlSeedReadStateRequest | SDKControlMcpSetServersRequest | SDKControlReloadPluginsRequest | SDKControlMcpReconnectRequest | SDKControlMcpToggleRequest | SDKControlApplyFlagSettingsRequest | SDKControlGetSettingsRequest | SDKControlElicitationRequest | SDKControlEndSessionRequest | SDKControlChannelEnableRequest | SDKControlMcpInjectTokenRequest | SDKControlMcpAuthenticateRequest | SDKControlMcpOAuthCallbackUrlRequest | SDKControlMcpClearAuthRequest | SDKControlGetByokConfigRequest | SDKControlValidateByokModelRequest | SDKControlListPluginsRequest | SDKControlStopTaskRequest | SDKControlBackgroundTasksRequest;
476
500
  export type SDKControlInitializeResponse = {
477
501
  commands: SlashCommand[];
478
502
  agents: AgentInfo[];
@@ -486,6 +510,8 @@ export type SDKControlInitializeResponse = {
486
510
  models: ModelInfo[];
487
511
  account: AccountInfo;
488
512
  fast_mode_state?: FastModeState;
513
+ /** Optional features implemented by the connected CLI control channel. */
514
+ capabilities?: string[];
489
515
  };
490
516
  export type SDKControlGetContextUsageResponse = {
491
517
  categories: Array<{
@@ -15,6 +15,8 @@ export type BaseHookInput = {
15
15
  session_id: string;
16
16
  transcript_path: string;
17
17
  cwd: string;
18
+ /** Human-readable display name of the model responsible for this event. */
19
+ model?: string;
18
20
  permission_mode?: string;
19
21
  agent_id?: string;
20
22
  agent_type?: string;
@@ -48,7 +50,6 @@ export type SessionStartHookInput = BaseHookInput & {
48
50
  hook_event_name: 'SessionStart';
49
51
  source: 'startup' | 'resume' | 'clear' | 'compact';
50
52
  agent_type?: string;
51
- model?: string;
52
53
  };
53
54
  export type SessionEndHookInput = BaseHookInput & {
54
55
  hook_event_name: 'SessionEnd';
@@ -19,8 +19,8 @@ export type { AICodeTrackingLaunchOptions, QoderAgentLaunchOptions, QoderCliFlag
19
19
  export { buildQoderCliFlagSettings, buildQoderCliFlagSettingsArgs, } from './launch.js';
20
20
  export type { PermissionMode, PermissionBehavior, PermissionDecisionClassification, PermissionUpdateDestination, PermissionRuleValue, PermissionUpdate, PermissionResult, } from './permissions.js';
21
21
  export type { McpStdioServerConfig, McpSSEServerConfig, McpHttpServerConfig, McpSdkServerConfig, McpServerConfigForProcessTransport, McpServerStatus, McpServerStatusConfig, McpSetServersResult, OAuthToken, } from './mcp.js';
22
- export type { SDKAssistantMessage, SDKUserMessage, SDKUserMessageReplay, SDKResultSuccess, SDKResultError, SDKResultMessage, SDKFileAttachment, SDKSystemMessage, SDKPartialAssistantMessage, SDKCompactBoundaryMessage, SDKStatusMessage, SDKAPIRetryMessage, SDKHookStartedMessage, SDKHookProgressMessage, SDKHookResponseMessage, SDKTaskNotificationMessage, SDKTaskStartedMessage, SDKTaskProgressMessage, SDKSessionStateChangedMessage, SDKSessionTitleChangedMessage, SDKFilesPersistedEvent, SDKElicitationCompleteMessage, SDKPromptSuggestionMessage, SDKCloudAgentEventMessage, SDKPermissionDenial, SDKPermissionDeniedMessage, SDKPermissionDeniedReasonType, SDKMessage, } from './messages.js';
22
+ export type { SDKAssistantMessage, SDKUserMessage, SDKUserMessageReplay, SDKResultSuccess, SDKResultError, SDKResultMessage, SDKFileAttachment, SDKSystemMessage, SDKPartialAssistantMessage, SDKCompactBoundaryMessage, SDKStatusMessage, SDKAPIRetryMessage, SDKHookStartedMessage, SDKHookProgressMessage, SDKHookResponseMessage, SDKTaskNotificationMessage, SDKTaskStartedMessage, SDKTaskProgressMessage, SDKTaskUpdatedMessage, SDKBackgroundTasksChangedMessage, SDKSessionStateChangedMessage, SDKSessionTitleChangedMessage, SDKFilesPersistedEvent, SDKElicitationCompleteMessage, SDKPromptSuggestionMessage, SDKCloudAgentEventMessage, SDKPermissionDenial, SDKPermissionDeniedMessage, SDKPermissionDeniedReasonType, SDKMessage, } from './messages.js';
23
23
  export type { BaseHookInput, PreToolUseHookInput, PostToolUseHookInput, PostToolUseFailureHookInput, UserPromptSubmitHookInput, SessionStartHookInput, SessionEndHookInput, StopHookInput, StopFailureHookInput, SubagentStartHookInput, SubagentStopHookInput, PreCompactHookInput, PostCompactHookInput, PermissionRequestHookInput, PermissionDeniedHookInput, SetupHookInput, TeammateIdleHookInput, TaskCreatedHookInput, TaskCompletedHookInput, ElicitationHookInput, ElicitationResultHookInput, ConfigChangeHookInput, WorktreeCreateHookInput, WorktreeRemoveHookInput, InstructionsLoadedHookInput, CwdChangedHookInput, FileChangedHookInput, HookInput, PreToolUseHookSpecificOutput, PostToolUseHookSpecificOutput, PostToolUseFailureHookSpecificOutput, UserPromptSubmitHookSpecificOutput, SessionStartHookSpecificOutput, SetupHookSpecificOutput, SubagentStartHookSpecificOutput, PermissionRequestHookSpecificOutput, ElicitationHookSpecificOutput, ElicitationResultHookSpecificOutput, CwdChangedHookSpecificOutput, FileChangedHookSpecificOutput, WorktreeCreateHookSpecificOutput, SyncHookJSONOutput, AsyncHookJSONOutput, HookJSONOutput, HookEvent, } from './hooks.js';
24
- export type { AgentMcpServerSpec, AgentDefinition, AgentInfo, } from './agents.js';
24
+ export type { AgentMcpServerSpec, AgentDefinition, AgentInfo, AgentMemoryScope, } from './agents.js';
25
25
  export { QoderModelPurpose } from './control.js';
26
- export type { SDKControlRequest, SDKControlResponse, SDKControlCancelRequest, SDKControlInterruptRequest, SDKControlInterruptResponse, SDKControlPermissionRequest, SDKControlInitializeRequest, SDKControlSetPermissionModeRequest, SDKControlSetModelRequest, SDKControlGenerateSessionTitleRequest, SDKControlGenerateSessionTitleResponse, SDKControlAddDirectoriesRequest, SDKControlAddDirectoriesResponse, SDKControlGetModelPolicyRequest, SDKControlGetModelPolicyResponse, SDKControlSetMaxThinkingTokensRequest, SDKControlMcpStatusRequest, SDKControlGetContextUsageRequest, SDKControlGetUsageInfoRequest, SDKControlGetUsageInfoResponse, SDKControlAccountInfoRequest, SDKHookCallbackRequest, SDKControlMcpMessageRequest, SDKControlRewindFilesRequest, SDKControlCancelAsyncMessageRequest, SDKControlSeedReadStateRequest, SDKControlMcpSetServersRequest, SDKControlReloadPluginsRequest, SDKControlMcpReconnectRequest, SDKControlMcpToggleRequest, SDKControlApplyFlagSettingsRequest, SDKControlGetSettingsRequest, SDKControlElicitationRequest, SDKControlEndSessionRequest, SDKControlChannelEnableRequest, SDKControlMcpInjectTokenRequest, SDKControlMcpAuthenticateRequest, SDKControlMcpOAuthCallbackUrlRequest, SDKControlMcpClearAuthRequest, SDKControlRequestInner, SDKControlInitializeResponse, SDKControlGetContextUsageResponse, SDKControlReloadPluginsResponse, SDKControlMcpStatusResponse, SDKControlMcpSetServersResponse, SDKControlMcpAuthenticateResponse, SDKControlGetByokConfigRequest, SDKControlGetByokConfigResponse, SDKControlValidateByokModelRequest, SDKControlValidateByokModelResponse, BYOKModelValidationInput, BYOKProviderInfo, BYOKFieldInfo, BYOKModelTypeInfo, BYOKModelInfo, CustomModel, SDKControlListPluginsRequest, SDKControlListPluginsResponse, SDKKeepAliveMessage, StdoutMessage, ControlMcpServerConfig, } from './control.js';
26
+ export type { SDKControlRequest, SDKControlResponse, SDKControlCancelRequest, SDKControlInterruptRequest, SDKControlInterruptResponse, SDKControlPermissionRequest, SDKControlInitializeRequest, SDKControlSetPermissionModeRequest, SDKControlSetModelRequest, SDKControlGenerateSessionTitleRequest, SDKControlGenerateSessionTitleResponse, SDKControlAddDirectoriesRequest, SDKControlAddDirectoriesResponse, SDKControlGetModelPolicyRequest, SDKControlGetModelPolicyResponse, SDKControlSetMaxThinkingTokensRequest, SDKControlMcpStatusRequest, SDKControlGetContextUsageRequest, SDKControlGetUsageInfoRequest, SDKControlGetUsageInfoResponse, SDKControlAccountInfoRequest, SDKHookCallbackRequest, SDKControlMcpMessageRequest, SDKControlRewindFilesRequest, SDKControlRewindRequest, SDKControlCancelAsyncMessageRequest, SDKControlSeedReadStateRequest, SDKControlMcpSetServersRequest, SDKControlReloadPluginsRequest, SDKControlMcpReconnectRequest, SDKControlMcpToggleRequest, SDKControlApplyFlagSettingsRequest, SDKControlGetSettingsRequest, SDKControlElicitationRequest, SDKControlEndSessionRequest, SDKControlChannelEnableRequest, SDKControlMcpInjectTokenRequest, SDKControlMcpAuthenticateRequest, SDKControlMcpOAuthCallbackUrlRequest, SDKControlMcpClearAuthRequest, SDKControlRequestInner, SDKControlInitializeResponse, SDKControlGetContextUsageResponse, SDKControlReloadPluginsResponse, SDKControlMcpStatusResponse, SDKControlMcpSetServersResponse, SDKControlMcpAuthenticateResponse, SDKControlGetByokConfigRequest, SDKControlGetByokConfigResponse, SDKControlValidateByokModelRequest, SDKControlValidateByokModelResponse, BYOKModelValidationInput, BYOKProviderInfo, BYOKFieldInfo, BYOKModelTypeInfo, BYOKModelInfo, CustomModel, SDKControlListPluginsRequest, SDKControlListPluginsResponse, SDKControlStopTaskRequest, SDKControlBackgroundTasksRequest, SDKControlBackgroundTasksResponse, SDKKeepAliveMessage, StdoutMessage, ControlMcpServerConfig, } from './control.js';
@@ -1 +1 @@
1
- var r="1.1.0";function i(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function n(e={}){let t={...e.settings??{}},o=e.aiCodeTracking?.installGitCommitHook;if(o!==void 0){let s=t.aiCodeTracking;t.aiCodeTracking={...i(s)?s:{},installGitCommitHook:o}}return t}function l(e={}){let t=n(e);return Object.keys(t).length===0?[]:["--settings",JSON.stringify(t)]}var p={Main:"main",Plan:"plan",Task:"task",Compact:"compact",Title:"title",Suggestion:"suggestion",Generate:"generate",HookPrompt:"hook_prompt",Subagent:"subagent",WebFetch:"web_fetch",ImageGen:"image_gen",Compression:"compression",Utility:"utility"};export{p as QoderModelPurpose,r as WIRE_PROTOCOL_VERSION,n as buildQoderCliFlagSettings,l as buildQoderCliFlagSettingsArgs};
1
+ var r="1.2.0";function i(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function n(e={}){let t={...e.settings??{}},o=e.aiCodeTracking?.installGitCommitHook;if(o!==void 0){let s=t.aiCodeTracking;t.aiCodeTracking={...i(s)?s:{},installGitCommitHook:o}}return t}function l(e={}){let t=n(e);return Object.keys(t).length===0?[]:["--settings",JSON.stringify(t)]}var p={Main:"main",Plan:"plan",Task:"task",Compact:"compact",Title:"title",Suggestion:"suggestion",Generate:"generate",HookPrompt:"hook_prompt",Subagent:"subagent",WebFetch:"web_fetch",ImageGen:"image_gen",Compression:"compression",Utility:"utility"};export{p as QoderModelPurpose,r as WIRE_PROTOCOL_VERSION,n as buildQoderCliFlagSettings,l as buildQoderCliFlagSettingsArgs};
@@ -17,6 +17,8 @@ export type SDKAssistantMessage = {
17
17
  type: 'assistant';
18
18
  message: BetaMessage;
19
19
  parent_tool_use_id: string | null;
20
+ /** Qoder model request ID, present only when explicitly enabled in the CLI. */
21
+ request_id?: string;
20
22
  error?: SDKAssistantMessageError;
21
23
  /**
22
24
  * Present when an interrupt truncated the model stream before a stop reason
@@ -254,9 +256,12 @@ export type SDKTaskStartedMessage = {
254
256
  task_id: string;
255
257
  tool_use_id?: string;
256
258
  description: string;
259
+ subagent_type?: string;
257
260
  task_type?: string;
258
261
  workflow_name?: string;
259
262
  prompt?: string;
263
+ /** Final tool set available to the subagent after policy filtering. */
264
+ tools?: string[];
260
265
  uuid: UUID;
261
266
  session_id: string;
262
267
  };
@@ -272,10 +277,42 @@ export type SDKTaskProgressMessage = {
272
277
  duration_ms: number;
273
278
  };
274
279
  last_tool_name?: string;
280
+ subagent_type?: string;
275
281
  summary?: string;
276
282
  uuid: UUID;
277
283
  session_id: string;
278
284
  };
285
+ export type SDKTaskUpdatedMessage = {
286
+ type: 'system';
287
+ subtype: 'task_updated';
288
+ task_id: string;
289
+ /** Wire-safe task fields that changed. Consumers merge this patch. */
290
+ patch: {
291
+ status?: 'pending' | 'running' | 'completed' | 'failed' | 'killed' | 'paused';
292
+ description?: string;
293
+ end_time?: number;
294
+ total_paused_ms?: number;
295
+ error?: string;
296
+ is_backgrounded?: boolean;
297
+ };
298
+ uuid: UUID;
299
+ session_id: string;
300
+ };
301
+ export type SDKBackgroundTasksChangedMessage = {
302
+ type: 'system';
303
+ subtype: 'background_tasks_changed';
304
+ /**
305
+ * Every live background task after the change. This has REPLACE semantics:
306
+ * consumers replace their current background task set with this payload.
307
+ */
308
+ tasks: Array<{
309
+ task_id: string;
310
+ task_type: string;
311
+ description: string;
312
+ }>;
313
+ uuid: UUID;
314
+ session_id: string;
315
+ };
279
316
  export type SDKSessionStateChangedMessage = {
280
317
  type: 'system';
281
318
  subtype: 'session_state_changed';
@@ -354,4 +391,4 @@ export type SDKPermissionDeniedMessage = {
354
391
  decision_reason_type?: SDKPermissionDeniedReasonType;
355
392
  decision_reason?: string;
356
393
  };
357
- export type SDKMessage = SDKAssistantMessage | SDKUserMessage | SDKUserMessageReplay | SDKResultMessage | SDKSystemMessage | SDKPermissionDeniedMessage | SDKPartialAssistantMessage | SDKCompactBoundaryMessage | SDKStatusMessage | SDKAPIRetryMessage | SDKHookStartedMessage | SDKHookProgressMessage | SDKHookResponseMessage | SDKTaskNotificationMessage | SDKTaskStartedMessage | SDKTaskProgressMessage | SDKSessionStateChangedMessage | SDKSessionTitleChangedMessage | SDKFilesPersistedEvent | SDKElicitationCompleteMessage | SDKPromptSuggestionMessage | SDKCloudAgentEventMessage;
394
+ export type SDKMessage = SDKAssistantMessage | SDKUserMessage | SDKUserMessageReplay | SDKResultMessage | SDKSystemMessage | SDKPermissionDeniedMessage | SDKPartialAssistantMessage | SDKCompactBoundaryMessage | SDKStatusMessage | SDKAPIRetryMessage | SDKHookStartedMessage | SDKHookProgressMessage | SDKHookResponseMessage | SDKTaskNotificationMessage | SDKTaskStartedMessage | SDKTaskProgressMessage | SDKTaskUpdatedMessage | SDKBackgroundTasksChangedMessage | SDKSessionStateChangedMessage | SDKSessionTitleChangedMessage | SDKFilesPersistedEvent | SDKElicitationCompleteMessage | SDKPromptSuggestionMessage | SDKCloudAgentEventMessage;
@@ -21,5 +21,5 @@
21
21
  * `system/init` JSONL message. The SDK validates it against the
22
22
  * version it was built against using semver.
23
23
  */
24
- export declare const WIRE_PROTOCOL_VERSION: "1.1.0";
24
+ export declare const WIRE_PROTOCOL_VERSION: "1.2.0";
25
25
  export type WireProtocolVersion = string;
@@ -53,6 +53,7 @@ type InitConfig = {
53
53
  };
54
54
  export declare class QueryRunner implements InternalQuery {
55
55
  private static readonly INITIALIZE_TIMEOUT_MS;
56
+ private static readonly BACKGROUND_TASKS_CAPABILITY;
56
57
  private readonly transport;
57
58
  private readonly inputStream;
58
59
  private readonly pendingRequests;
@@ -84,6 +85,7 @@ export declare class QueryRunner implements InternalQuery {
84
85
  private closed;
85
86
  private authExpiredFired;
86
87
  private protocolHandshakeValidated;
88
+ private cliCapabilities?;
87
89
  private firstResultReceived;
88
90
  private firstResultReceivedResolve?;
89
91
  constructor(transport: Transport, isSingleTurn: boolean, canUseTool?: CanUseTool, hooks?: Partial<Record<InternalHookEvent, HookCallbackMatcher[]>>, abortController?: AbortController, sdkMcpServers?: Map<string, McpServer>, initConfig?: InitConfig, onElicitation?: OnElicitation, diagnostics?: DiagnosticsSink, onAuthExpired?: () => void, controlRequestTimeoutMs?: number, sdkMcpTransports?: Map<string, SdkMcpTransport>, pendingMcpResponses?: Map<string, PendingMcpResponse>, fetchJobToken?: FetchJobToken, resolveModel?: ModelPolicyProvider, resolveModelTimeoutMs?: number, sessionStore?: SessionStore, sessionStoreFlush?: SessionStoreFlush, sdkMcpToolOverrides?: Record<string, Record<string, McpToolRuntimeOverride>>, fetchServiceAccountToken?: FetchServiceAccountToken);
@@ -202,11 +204,15 @@ export declare class QueryRunner implements InternalQuery {
202
204
  * Drop a UUID-stamped async user message while it is still queued.
203
205
  */
204
206
  cancelAsyncMessage(messageUuid: string): Promise<boolean>;
207
+ /** Stop one task without aborting the active main-session turn. */
208
+ stopTask(taskId: string): Promise<void>;
209
+ /** Move one or all eligible foreground tasks into the background. */
210
+ backgroundTasks(toolUseId?: string): Promise<boolean>;
211
+ private requireCliCapability;
205
212
  /**
206
213
  * Set the permission mode.
207
214
  */
208
215
  setPermissionMode(mode: PermissionMode): Promise<void>;
209
- private hasBidirectionalNeeds;
210
216
  private waitForFirstResult;
211
217
  /**
212
218
  * Set the model.
@@ -289,6 +295,13 @@ export declare class QueryRunner implements InternalQuery {
289
295
  rewindFiles(userMessageId: string, options?: {
290
296
  dryRun?: boolean;
291
297
  }): Promise<import('../types/session.js').RewindFilesResult>;
298
+ /**
299
+ * Rewind the active conversation branch, its file checkpoints, or both.
300
+ */
301
+ rewind(userMessageId: string, options?: {
302
+ scope?: import('../types/session.js').RewindScope;
303
+ dryRun?: boolean;
304
+ }): Promise<import('../types/session.js').RewindResult>;
292
305
  /**
293
306
  * Seed read state for a file.
294
307
  */
@@ -1,8 +1,16 @@
1
1
  {
2
2
  "version": 1,
3
- "defaultTransport": "process",
3
+ "brand": "global",
4
+ "sdkVersion": "1.0.20",
5
+ "qoderCliVersion": "1.1.18",
6
+ "defaultTransport": "worker",
4
7
  "workerRuntime": {
5
8
  "packaged": false,
6
- "delivery": "package"
9
+ "delivery": "install",
10
+ "source": "qodercli-worker-runtime",
11
+ "url": "https://download.qoder.com/qodercli/releases/1.1.18/qodercli-worker-runtime-universal.tgz",
12
+ "artifactName": "qodercli-worker-runtime-universal.tgz",
13
+ "sdkVersion": "1.0.20",
14
+ "qoderCliVersion": "1.1.18"
7
15
  }
8
16
  }
@@ -34,10 +34,11 @@ export declare function getSessionInfo(sessionId: string, options?: GetSessionIn
34
34
  /**
35
35
  * Get messages from a session transcript.
36
36
  *
37
- * Parses the JSONL transcript, rebuilds the latest main conversation chain via
38
- * `parentUuid`, and returns visible user/assistant messages in chronological
39
- * order. Supports pagination via offset/limit. Set `includeSystemMessages` to
40
- * include chain system entries such as compact boundaries.
37
+ * Parses the JSONL transcript, follows the session's persisted active leaf
38
+ * (falling back to the latest main leaf for legacy transcripts), and returns
39
+ * visible user/assistant messages in chronological order. Supports pagination
40
+ * via offset/limit. Set `includeSystemMessages` to include chain system entries
41
+ * such as compact boundaries.
41
42
  *
42
43
  * @param sessionId - The session UUID
43
44
  * @param options.dir - Restrict search to this working directory
@@ -1,6 +1,6 @@
1
- export declare const BRAND_CONFIG_DIR_INTERNAL = ".qoder";
2
- export declare const ENV_HOME = "QODER_CLI_HOME";
3
- export declare const ENV_CONFIG_DIR = "QODER_CONFIG_DIR";
1
+ export declare const BRAND_CONFIG_DIR_INTERNAL: string;
2
+ export declare const ENV_HOME: string;
3
+ export declare const ENV_CONFIG_DIR: string;
4
4
  export declare const MAX_SANITIZED_LENGTH = 200;
5
5
  export declare function homedir(): string;
6
6
  /**
@@ -3,4 +3,4 @@
3
3
  *
4
4
  * Source of truth is `../protocol/`.
5
5
  */
6
- export type { AgentDefinition, AgentInfo, AgentMcpServerSpec, } from '../protocol/index.js';
6
+ export type { AgentDefinition, AgentInfo, AgentMemoryScope, AgentMcpServerSpec, } from '../protocol/index.js';
@@ -5,7 +5,7 @@
5
5
  * shim so existing SDK consumer imports keep working.
6
6
  */
7
7
  export type { QoderModelPurpose } from '../protocol/index.js';
8
- export type { SDKControlRequest, SDKControlResponse, SDKControlCancelRequest, SDKControlInterruptRequest, SDKControlInterruptResponse, SDKControlPermissionRequest, SDKControlInitializeRequest, SDKControlSetPermissionModeRequest, SDKControlSetModelRequest, SDKControlGenerateSessionTitleRequest, SDKControlGenerateSessionTitleResponse, SDKControlAddDirectoriesRequest, SDKControlAddDirectoriesResponse, SDKControlGetModelPolicyRequest, SDKControlGetByokConfigRequest, SDKControlGetByokConfigResponse, SDKControlValidateByokModelRequest, SDKControlValidateByokModelResponse, SDKControlSetMaxThinkingTokensRequest, SDKControlMcpStatusRequest, SDKControlGetContextUsageRequest, SDKControlGetUsageInfoRequest, SDKControlGetUsageInfoResponse, SDKControlAccountInfoRequest, SDKHookCallbackRequest, SDKControlMcpMessageRequest, SDKControlRewindFilesRequest, SDKControlCancelAsyncMessageRequest, SDKControlSeedReadStateRequest, SDKControlMcpSetServersRequest, SDKControlReloadPluginsRequest, SDKControlMcpReconnectRequest, SDKControlMcpToggleRequest, SDKControlApplyFlagSettingsRequest, SDKControlGetSettingsRequest, SDKControlElicitationRequest, SDKControlEndSessionRequest, SDKControlChannelEnableRequest, SDKControlMcpInjectTokenRequest, SDKControlMcpAuthenticateRequest, SDKControlMcpOAuthCallbackUrlRequest, SDKControlMcpClearAuthRequest, SDKControlRequestInner, SDKControlInitializeResponse, SDKControlGetContextUsageResponse, SDKControlReloadPluginsResponse, SDKControlListPluginsRequest, SDKControlListPluginsResponse, SDKControlMcpStatusResponse, SDKControlMcpSetServersResponse, SDKKeepAliveMessage, StdoutMessage, ControlMcpServerConfig, BYOKModelValidationInput, } from '../protocol/index.js';
8
+ export type { SDKControlRequest, SDKControlResponse, SDKControlCancelRequest, SDKControlInterruptRequest, SDKControlInterruptResponse, SDKControlPermissionRequest, SDKControlInitializeRequest, SDKControlSetPermissionModeRequest, SDKControlSetModelRequest, SDKControlGenerateSessionTitleRequest, SDKControlGenerateSessionTitleResponse, SDKControlAddDirectoriesRequest, SDKControlAddDirectoriesResponse, SDKControlGetModelPolicyRequest, SDKControlGetByokConfigRequest, SDKControlGetByokConfigResponse, SDKControlValidateByokModelRequest, SDKControlValidateByokModelResponse, SDKControlSetMaxThinkingTokensRequest, SDKControlMcpStatusRequest, SDKControlGetContextUsageRequest, SDKControlGetUsageInfoRequest, SDKControlGetUsageInfoResponse, SDKControlAccountInfoRequest, SDKHookCallbackRequest, SDKControlMcpMessageRequest, SDKControlRewindFilesRequest, SDKControlRewindRequest, SDKControlCancelAsyncMessageRequest, SDKControlSeedReadStateRequest, SDKControlMcpSetServersRequest, SDKControlReloadPluginsRequest, SDKControlMcpReconnectRequest, SDKControlMcpToggleRequest, SDKControlApplyFlagSettingsRequest, SDKControlGetSettingsRequest, SDKControlElicitationRequest, SDKControlEndSessionRequest, SDKControlChannelEnableRequest, SDKControlMcpInjectTokenRequest, SDKControlMcpAuthenticateRequest, SDKControlMcpOAuthCallbackUrlRequest, SDKControlMcpClearAuthRequest, SDKControlRequestInner, SDKControlInitializeResponse, SDKControlGetContextUsageResponse, SDKControlReloadPluginsResponse, SDKControlListPluginsRequest, SDKControlListPluginsResponse, SDKControlStopTaskRequest, SDKControlBackgroundTasksRequest, SDKControlBackgroundTasksResponse, SDKControlMcpStatusResponse, SDKControlMcpSetServersResponse, SDKKeepAliveMessage, StdoutMessage, ControlMcpServerConfig, BYOKModelValidationInput, } from '../protocol/index.js';
9
9
  /** Wire format for fetch_job_token inbound control request from CLI. */
10
10
  export type FetchJobTokenWireRequest = {
11
11
  subtype: 'fetch_job_token';
@@ -9,7 +9,7 @@ import type { SDKMessage as ProtocolSDKMessage, SDKStatusMessage as ProtocolSDKS
9
9
  import type { MessageParam, UUID } from './common.js';
10
10
  import type { PermissionMode } from './permissions.js';
11
11
  import type { SessionKey } from '../session/session-store.js';
12
- export type { SDKAssistantMessage, SDKResultSuccess, SDKResultError, SDKResultMessage, SDKPartialAssistantMessage, SDKCompactBoundaryMessage, SDKAPIRetryMessage, SDKHookStartedMessage, SDKHookProgressMessage, SDKHookResponseMessage, SDKTaskNotificationMessage, SDKTaskStartedMessage, SDKTaskProgressMessage, SDKSessionStateChangedMessage, SDKSessionTitleChangedMessage, SDKFilesPersistedEvent, SDKElicitationCompleteMessage, SDKPromptSuggestionMessage, SDKCloudAgentEventMessage, SDKPermissionDenial, } from '../protocol/index.js';
12
+ export type { SDKAssistantMessage, SDKResultSuccess, SDKResultError, SDKResultMessage, SDKPartialAssistantMessage, SDKCompactBoundaryMessage, SDKAPIRetryMessage, SDKHookStartedMessage, SDKHookProgressMessage, SDKHookResponseMessage, SDKTaskNotificationMessage, SDKTaskStartedMessage, SDKTaskProgressMessage, SDKTaskUpdatedMessage, SDKBackgroundTasksChangedMessage, SDKSessionStateChangedMessage, SDKSessionTitleChangedMessage, SDKFilesPersistedEvent, SDKElicitationCompleteMessage, SDKPromptSuggestionMessage, SDKCloudAgentEventMessage, SDKPermissionDenial, } from '../protocol/index.js';
13
13
  export type SDKUserMessage = {
14
14
  type: 'user';
15
15
  message: MessageParam;
@@ -11,7 +11,7 @@ import type { Settings } from './settings.js';
11
11
  import type { SDKControlInterruptResponse, SDKControlInitializeResponse, SDKControlGetContextUsageResponse, SDKControlGenerateSessionTitleResponse, SDKControlAddDirectoriesResponse, SDKControlReloadPluginsResponse, StdoutMessage } from './control.js';
12
12
  import type { ModelPolicyProvider } from './model-policy-provider.js';
13
13
  import type { BYOKModelValidationInput, BYOKProviderInfo } from './byok.js';
14
- import type { RewindFilesResult } from './session.js';
14
+ import type { RewindFilesResult, RewindResult, RewindScope } from './session.js';
15
15
  import type { CloudAgentOptions } from './cloud-agent.js';
16
16
  import type { QueryTransportProviderOption } from '../core/query-transport.js';
17
17
  import type { PluginDetails } from './plugins.js';
@@ -89,7 +89,7 @@ export type Options = {
89
89
  /**
90
90
  * Selects the local query transport.
91
91
  *
92
- * - omitted: use `ProcessTransport.default` and spawn qodercli as a child process.
92
+ * - omitted: use the transport baked into the installed SDK package.
93
93
  * - `ProcessTransport.default`: spawn qodercli as a child process.
94
94
  * - `WorkerTransport.default`: run qoder-worker-runtime in a Node worker thread.
95
95
  * - `new WorkerTransport({ ... })`: run worker runtime with provider options.
@@ -173,6 +173,13 @@ export type Options = {
173
173
  mcpServers?: Record<string, McpServerConfig>;
174
174
  allowedMcpServerNames?: string[];
175
175
  model?: string;
176
+ /**
177
+ * Path to a local Qoder runtime.
178
+ *
179
+ * Native binaries and ordinary JavaScript CLI entries use ProcessTransport.
180
+ * Recognized `qoder-worker-runtime*.mjs` entries use WorkerTransport. An
181
+ * explicit `transport` provider takes precedence over this automatic choice.
182
+ */
176
183
  pathToQoderCLIExecutable?: string;
177
184
  permissionMode?: PermissionMode;
178
185
  allowDangerouslySkipPermissions?: boolean;
@@ -304,6 +311,14 @@ export interface Query extends AsyncGenerator<SDKMessage, void> {
304
311
  * was dropped.
305
312
  */
306
313
  cancelAsyncMessage(messageUuid: string): Promise<boolean>;
314
+ /** Stop one running task without interrupting the main session turn. */
315
+ stopTask(taskId: string): Promise<void>;
316
+ /**
317
+ * Move foreground Bash/Agent executions into the background. When a tool
318
+ * use ID is provided only that execution is targeted; otherwise all
319
+ * eligible foreground executions are targeted.
320
+ */
321
+ backgroundTasks(toolUseId?: string): Promise<boolean>;
307
322
  setPermissionMode(mode: PermissionMode): Promise<void>;
308
323
  setModel(model?: string): Promise<void>;
309
324
  /**
@@ -373,6 +388,15 @@ export interface Query extends AsyncGenerator<SDKMessage, void> {
373
388
  rewindFiles(userMessageId: string, options?: {
374
389
  dryRun?: boolean;
375
390
  }): Promise<RewindFilesResult>;
391
+ /**
392
+ * Rewind the active local CLI session to immediately before a historical
393
+ * top-level user input. The edited replacement must be submitted as a new
394
+ * user message with a new UUID after this Promise resolves successfully.
395
+ */
396
+ rewind(userMessageId: string, options?: {
397
+ scope?: RewindScope;
398
+ dryRun?: boolean;
399
+ }): Promise<RewindResult>;
376
400
  seedReadState(path: string, mtime: number): Promise<void>;
377
401
  /**
378
402
  * 主动驱动 MCP OAuth:拉起 OAuth 流程,返回授权 URL 让 host 引导用户跳转。
@@ -115,5 +115,33 @@ export type RewindFilesResult = {
115
115
  insertions?: number;
116
116
  deletions?: number;
117
117
  };
118
+ /** Which parts of a local CLI session should be rewound. */
119
+ export type RewindScope = 'conversation' | 'files' | 'both';
120
+ /** Outcome of a full session rewind request. */
121
+ export type RewindStatus = 'ready' | 'success' | 'partial' | 'rejected';
122
+ export type RewindFileFailure = {
123
+ path: string;
124
+ error: string;
125
+ };
126
+ /**
127
+ * Result returned by {@link Query.rewind}.
128
+ *
129
+ * `ready` is only returned for a successful dry run. `partial` means the
130
+ * conversation branch was rewound but one or more files could not be
131
+ * restored; callers should surface the failures before submitting a new
132
+ * edited input.
133
+ */
134
+ export type RewindResult = {
135
+ status: RewindStatus;
136
+ targetUserMessageId: string;
137
+ scope: RewindScope;
138
+ retainedLeafId?: string | null;
139
+ removedMessageIds?: string[];
140
+ filesChanged?: string[];
141
+ insertions?: number;
142
+ deletions?: number;
143
+ failedFiles?: RewindFileFailure[];
144
+ error?: string;
145
+ };
118
146
  import type { SessionStore } from '../session/session-store.js';
119
147
  export {};
@@ -1,13 +1,61 @@
1
+ import type { PermissionMode } from './permissions.js';
1
2
  export type AgentInput = {
3
+ description: string;
2
4
  prompt: string;
3
- agent?: string;
4
- timeout_ms?: number;
5
- };
6
- export type AgentOutput = {
7
- result: string;
8
- agent?: string;
9
- error?: string;
5
+ subagent_type?: string;
6
+ model?: string;
7
+ mode?: PermissionMode;
8
+ run_in_background?: boolean;
9
+ name?: string;
10
+ /** @deprecated Ignored. Named teammates use the session's implicit team. */
11
+ team_name?: string;
12
+ /** `default` disables definition-level worktree isolation for this invocation. */
13
+ isolation?: 'default' | 'worktree';
14
+ };
15
+ export type AgentToolCompletionResult = {
16
+ kind: 'agent-result';
17
+ agentId?: string;
18
+ agentType: string;
19
+ content: string;
20
+ state: 'running' | 'completed' | 'error' | 'cancelled';
21
+ apiError?: string;
22
+ terminateReason?: 'ERROR' | 'TIMEOUT' | 'GOAL' | 'MAX_TURNS' | 'ABORTED' | 'ERROR_NO_COMPLETE_TASK_CALL';
23
+ terminationDetails?: {
24
+ maxTurns?: number;
25
+ };
26
+ outputPath?: string;
27
+ transcriptPath?: string;
28
+ worktreePath?: string;
29
+ remoteContextId?: string;
30
+ remoteTaskId?: string;
31
+ };
32
+ export type AgentToolBackgroundLaunchResult = {
33
+ isAsync: true;
34
+ status: 'async_launched';
35
+ agentId: string;
36
+ description: string;
37
+ resolvedModel?: string;
38
+ prompt: string;
39
+ outputFile: string;
40
+ canReadOutputFile?: boolean;
10
41
  };
42
+ export type AgentToolTeammateSpawnedResult = {
43
+ status: 'teammate_spawned';
44
+ prompt: string;
45
+ teammate_id: string;
46
+ agent_id: string;
47
+ agent_type?: string;
48
+ model?: string;
49
+ name: string;
50
+ color?: string;
51
+ tmux_session_name: 'in-process';
52
+ tmux_window_name: 'in-process';
53
+ tmux_pane_id: 'in-process';
54
+ team_name: string;
55
+ is_splitpane: false;
56
+ plan_mode_required: boolean;
57
+ };
58
+ export type AgentOutput = AgentToolCompletionResult | AgentToolBackgroundLaunchResult | AgentToolTeammateSpawnedResult;
11
59
  export type BashInput = {
12
60
  command: string;
13
61
  timeout?: number;
@@ -177,18 +225,70 @@ export type NotebookEditOutput = {
177
225
  notebook_path: string;
178
226
  error?: string;
179
227
  };
180
- export type TaskOutputInput = {
181
- task_id: string;
182
- output: string;
183
- };
184
228
  export type TaskStopInput = {
185
229
  task_id: string;
186
- reason?: string;
187
230
  };
188
231
  export type TaskStopOutput = {
189
- success: boolean;
232
+ message: string;
190
233
  task_id: string;
234
+ task_type: string;
235
+ command?: string;
236
+ };
237
+ export type TaskCreateInput = {
238
+ subject: string;
239
+ description: string;
240
+ activeForm?: string;
241
+ metadata?: Record<string, unknown>;
242
+ };
243
+ export type TaskCreateOutput = {
244
+ task: {
245
+ id: string;
246
+ subject: string;
247
+ };
248
+ };
249
+ export type TaskGetInput = {
250
+ taskId: string;
251
+ };
252
+ export type TaskGetOutput = {
253
+ task: {
254
+ id: string;
255
+ subject: string;
256
+ description: string;
257
+ status: 'pending' | 'in_progress' | 'completed';
258
+ blocks: string[];
259
+ blockedBy: string[];
260
+ } | null;
261
+ };
262
+ export type TaskUpdateInput = {
263
+ taskId: string;
264
+ subject?: string;
265
+ description?: string;
266
+ activeForm?: string;
267
+ status?: 'pending' | 'in_progress' | 'completed' | 'deleted';
268
+ addBlocks?: string[];
269
+ addBlockedBy?: string[];
270
+ owner?: string;
271
+ metadata?: Record<string, unknown>;
272
+ };
273
+ export type TaskUpdateOutput = {
274
+ success: boolean;
275
+ taskId: string;
276
+ updatedFields: string[];
191
277
  error?: string;
278
+ statusChange?: {
279
+ from: string;
280
+ to: string;
281
+ };
282
+ };
283
+ export type TaskListInput = Record<string, never>;
284
+ export type TaskListOutput = {
285
+ tasks: Array<{
286
+ id: string;
287
+ subject: string;
288
+ status: 'pending' | 'in_progress' | 'completed';
289
+ owner?: string;
290
+ blockedBy: string[];
291
+ }>;
192
292
  };
193
293
  export type ExitPlanModeInput = {
194
294
  confirm?: boolean;
@@ -271,5 +371,5 @@ export type McpOutput = {
271
371
  content: unknown;
272
372
  isError?: boolean;
273
373
  };
274
- export type ToolInputSchemas = AgentInput | BashInput | FileReadInput | FileEditInput | FileWriteInput | GlobInput | GrepInput | WebFetchInput | WebSearchInput | AskUserQuestionInput | NotebookEditInput | TaskOutputInput | TaskStopInput | ExitPlanModeInput | ConfigInput | EnterWorktreeInput | ExitWorktreeInput | TodoWriteInput | ListMcpResourcesInput | ReadMcpResourceInput | McpInput;
275
- export type ToolOutputSchemas = AgentOutput | BashOutput | FileReadOutput | FileEditOutput | FileWriteOutput | GlobOutput | GrepOutput | WebFetchOutput | WebSearchOutput | AskUserQuestionOutput | NotebookEditOutput | TaskStopOutput | ExitPlanModeOutput | ConfigOutput | EnterWorktreeOutput | ExitWorktreeOutput | TodoWriteOutput | ListMcpResourcesOutput | McpOutput;
374
+ export type ToolInputSchemas = AgentInput | BashInput | FileReadInput | FileEditInput | FileWriteInput | GlobInput | GrepInput | WebFetchInput | WebSearchInput | AskUserQuestionInput | NotebookEditInput | TaskStopInput | TaskCreateInput | TaskGetInput | TaskUpdateInput | TaskListInput | ExitPlanModeInput | ConfigInput | EnterWorktreeInput | ExitWorktreeInput | TodoWriteInput | ListMcpResourcesInput | ReadMcpResourceInput | McpInput;
375
+ export type ToolOutputSchemas = AgentOutput | BashOutput | FileReadOutput | FileEditOutput | FileWriteOutput | GlobOutput | GrepOutput | WebFetchOutput | WebSearchOutput | AskUserQuestionOutput | NotebookEditOutput | TaskStopOutput | TaskCreateOutput | TaskGetOutput | TaskUpdateOutput | TaskListOutput | ExitPlanModeOutput | ConfigOutput | EnterWorktreeOutput | ExitWorktreeOutput | TodoWriteOutput | ListMcpResourcesOutput | McpOutput;