@qoder-ai/qoder-agent-sdk 1.0.19 → 1.0.21

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<{
@@ -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};
@@ -256,9 +256,12 @@ export type SDKTaskStartedMessage = {
256
256
  task_id: string;
257
257
  tool_use_id?: string;
258
258
  description: string;
259
+ subagent_type?: string;
259
260
  task_type?: string;
260
261
  workflow_name?: string;
261
262
  prompt?: string;
263
+ /** Final tool set available to the subagent after policy filtering. */
264
+ tools?: string[];
262
265
  uuid: UUID;
263
266
  session_id: string;
264
267
  };
@@ -274,10 +277,42 @@ export type SDKTaskProgressMessage = {
274
277
  duration_ms: number;
275
278
  };
276
279
  last_tool_name?: string;
280
+ subagent_type?: string;
277
281
  summary?: string;
278
282
  uuid: UUID;
279
283
  session_id: string;
280
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
+ };
281
316
  export type SDKSessionStateChangedMessage = {
282
317
  type: 'system';
283
318
  subtype: 'session_state_changed';
@@ -356,4 +391,4 @@ export type SDKPermissionDeniedMessage = {
356
391
  decision_reason_type?: SDKPermissionDeniedReasonType;
357
392
  decision_reason?: string;
358
393
  };
359
- 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;
@@ -4,5 +4,7 @@
4
4
  * This is the main entry point for the Qoder Agent SDK query functionality.
5
5
  */
6
6
  export { query } from './query.js';
7
+ export { startup } from './startup.js';
8
+ export type { StartupParams, WarmQuery } from './startup.js';
7
9
  export { QueryRunner } from './query-runner.js';
8
10
  export { generateRequestId, createControlRequest, createControlResponse, createControlErrorResponse, isControlResponse, isControlRequest, isControlCancelRequest, isKeepAlive, isStreamlinedText, isStreamlinedToolUseSummary, isPostTurnSummary, isResultMessage, } from './control-protocol.js';
@@ -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
  */
@@ -0,0 +1,11 @@
1
+ import type { Options, Query } from '../types/options.js';
2
+ import type { SDKUserMessage } from '../types/messages.js';
3
+ export interface WarmQuery extends AsyncDisposable {
4
+ query(prompt: string | AsyncIterable<SDKUserMessage>): Query;
5
+ close(): void;
6
+ }
7
+ export interface StartupParams {
8
+ options?: Options;
9
+ initializeTimeoutMs?: number;
10
+ }
11
+ export declare function startup(params?: StartupParams): Promise<WarmQuery>;
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "version": 1,
3
3
  "brand": "global",
4
- "sdkVersion": "1.0.19",
5
- "qoderCliVersion": "1.1.16",
4
+ "sdkVersion": "1.0.21",
5
+ "qoderCliVersion": "1.1.20",
6
6
  "defaultTransport": "worker",
7
7
  "workerRuntime": {
8
8
  "packaged": false,
9
9
  "delivery": "install",
10
10
  "source": "qodercli-worker-runtime",
11
- "url": "https://download.qoder.com/qodercli/releases/1.1.16/qodercli-worker-runtime-universal.tgz",
11
+ "url": "https://download.qoder.com/qodercli/releases/1.1.20/qodercli-worker-runtime-universal.tgz",
12
12
  "artifactName": "qodercli-worker-runtime-universal.tgz",
13
- "sdkVersion": "1.0.19",
14
- "qoderCliVersion": "1.1.16"
13
+ "sdkVersion": "1.0.21",
14
+ "qoderCliVersion": "1.1.20"
15
15
  }
16
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
@@ -0,0 +1,2 @@
1
+ import type { ResolveSettingsOptions, ResolvedSettings } from '../types/settings.js';
2
+ export declare function resolveSettings(options?: ResolveSettingsOptions): Promise<ResolvedSettings>;
@@ -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';
@@ -311,6 +311,14 @@ export interface Query extends AsyncGenerator<SDKMessage, void> {
311
311
  * was dropped.
312
312
  */
313
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>;
314
322
  setPermissionMode(mode: PermissionMode): Promise<void>;
315
323
  setModel(model?: string): Promise<void>;
316
324
  /**
@@ -380,6 +388,15 @@ export interface Query extends AsyncGenerator<SDKMessage, void> {
380
388
  rewindFiles(userMessageId: string, options?: {
381
389
  dryRun?: boolean;
382
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>;
383
400
  seedReadState(path: string, mtime: number): Promise<void>;
384
401
  /**
385
402
  * 主动驱动 MCP OAuth:拉起 OAuth 流程,返回授权 URL 让 host 引导用户跳转。
@@ -48,4 +48,56 @@ export type UninstallPluginResult = {
48
48
  pluginId: string;
49
49
  fullyRemoved: boolean;
50
50
  reverseDependents: string[];
51
+ };
52
+ export type PluginValidationSeverity = 'error' | 'warning';
53
+ export type PluginValidationPhase = 'target' | 'manifest' | 'component' | 'load-simulation' | 'installability';
54
+ export type PluginValidationPosition = {
55
+ line: number;
56
+ character: number;
57
+ };
58
+ export type PluginValidationLocation = {
59
+ path: string;
60
+ jsonPointer?: string;
61
+ range?: {
62
+ start: PluginValidationPosition;
63
+ end: PluginValidationPosition;
64
+ };
65
+ };
66
+ export type PluginValidationDiagnostic = {
67
+ severity: PluginValidationSeverity;
68
+ code: string;
69
+ message: string;
70
+ phase: PluginValidationPhase;
71
+ location?: PluginValidationLocation;
72
+ suggestion?: string;
73
+ };
74
+ export type PluginValidationReport = {
75
+ schemaVersion: 1;
76
+ validator: {
77
+ name: 'qodercli';
78
+ version: string;
79
+ };
80
+ valid: boolean;
81
+ target: {
82
+ inputPath: string;
83
+ resolvedPath: string;
84
+ manifestPath?: string;
85
+ };
86
+ plugin?: {
87
+ name: string;
88
+ version?: string;
89
+ displayName?: string;
90
+ };
91
+ diagnostics: PluginValidationDiagnostic[];
92
+ summary: {
93
+ errorCount: number;
94
+ warningCount: number;
95
+ componentCount: number;
96
+ };
97
+ resources?: PluginResources;
98
+ };
99
+ export type ValidatePluginOptions = {
100
+ cliPath?: string;
101
+ env?: Record<string, string>;
102
+ signal?: AbortSignal;
51
103
  };
@@ -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,4 +1,5 @@
1
1
  import type { PermissionMode } from './permissions.js';
2
+ import type { SettingSource } from './options.js';
2
3
  /**
3
4
  * Settings fields with a verified qodercli execution path.
4
5
  *
@@ -42,13 +43,25 @@ export interface Settings {
42
43
  }>;
43
44
  [k: string]: unknown;
44
45
  }
46
+ export type ResolvedSettingSource = SettingSource;
45
47
  export type ResolvedSettingsSource = {
46
- source: 'user' | 'project' | 'local' | 'managed' | 'flag' | string;
48
+ source: ResolvedSettingSource;
47
49
  settings: Settings;
48
50
  path?: string;
49
51
  };
52
+ export type SettingsProvenanceEntry = {
53
+ source: ResolvedSettingSource;
54
+ path?: string;
55
+ };
56
+ export type ResolveSettingsOptions = {
57
+ /** Directory used to resolve project and local settings. */
58
+ cwd?: string;
59
+ /** Filesystem settings sources to load. Omit for all sources; pass [] for none. */
60
+ settingSources?: SettingSource[];
61
+ };
50
62
  export type ResolvedSettings = {
51
63
  effective: Settings;
64
+ provenance: Record<string, SettingsProvenanceEntry>;
52
65
  sources: ResolvedSettingsSource[];
53
66
  };
54
67
  /**
@@ -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,14 @@ 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;
191
- error?: string;
234
+ task_type: string;
235
+ command?: string;
192
236
  };
193
237
  export type TaskCreateInput = {
194
238
  subject: string;
@@ -327,5 +371,5 @@ export type McpOutput = {
327
371
  content: unknown;
328
372
  isError?: boolean;
329
373
  };
330
- export type ToolInputSchemas = AgentInput | BashInput | FileReadInput | FileEditInput | FileWriteInput | GlobInput | GrepInput | WebFetchInput | WebSearchInput | AskUserQuestionInput | NotebookEditInput | TaskOutputInput | TaskStopInput | TaskCreateInput | TaskGetInput | TaskUpdateInput | TaskListInput | ExitPlanModeInput | ConfigInput | EnterWorktreeInput | ExitWorktreeInput | TodoWriteInput | ListMcpResourcesInput | ReadMcpResourceInput | McpInput;
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;
331
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qoder-ai/qoder-agent-sdk",
3
- "version": "1.0.19",
3
+ "version": "1.0.21",
4
4
  "description": "TypeScript SDK for building Qoder-powered coding agents.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -50,7 +50,7 @@
50
50
  "peerDependencies": {
51
51
  "zod": "^3.25.0 || ^4.0.0"
52
52
  },
53
- "qoderCliVersion": "1.1.16",
53
+ "qoderCliVersion": "1.1.20",
54
54
  "qoderSdkBrand": "global",
55
55
  "license": "SEE LICENSE IN LICENSE"
56
56
  }
@@ -143,6 +143,7 @@ function normalizePlatformOverride(value) {
143
143
  'linux-x64',
144
144
  'linux-x64-baseline',
145
145
  'linux-x64-musl',
146
+ 'openharmony-arm64',
146
147
  'windows-arm64',
147
148
  'windows-x64',
148
149
  ]);
@@ -182,6 +183,15 @@ function getPlatformTarget() {
182
183
  }
183
184
  }
184
185
 
186
+ // HarmonyOS reports process.platform === 'openharmony'. Only aarch64 is
187
+ // produced; the artifact is qodercli-openharmony-arm64.tar.gz.
188
+ if (process.platform === 'openharmony') {
189
+ if (process.arch !== 'arm64') {
190
+ throw new Error(`Unsupported OpenHarmony architecture: ${process.arch}`);
191
+ }
192
+ return 'openharmony-arm64';
193
+ }
194
+
185
195
  throw new Error(`Unsupported platform: ${process.platform}/${process.arch}`);
186
196
  }
187
197