Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/cli-core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@ async function handlePrompt(
maxQueueDepth: config.queueMaxDepth,
verbose: globalFlags.verbose,
waitForCompletion: flags.wait !== false,
terminal: globalFlags.terminal,
});

if ("queued" in result) {
Expand Down Expand Up @@ -364,6 +365,7 @@ async function handleExec(
suppressSdkConsoleErrors: outputPolicy.suppressSdkConsoleErrors,
timeoutMs: globalFlags.timeout,
verbose: globalFlags.verbose,
terminal: globalFlags.terminal,
sessionOptions: {
model: globalFlags.model,
allowedTools: globalFlags.allowedTools,
Expand Down Expand Up @@ -518,6 +520,7 @@ async function handleSetMode(
authPolicy: globalFlags.authPolicy,
timeoutMs: globalFlags.timeout,
verbose: globalFlags.verbose,
terminal: globalFlags.terminal,
});

if (globalFlags.verbose && result.loadError) {
Expand Down Expand Up @@ -555,6 +558,7 @@ async function handleSetConfigOption(
authPolicy: globalFlags.authPolicy,
timeoutMs: globalFlags.timeout,
verbose: globalFlags.verbose,
terminal: globalFlags.terminal,
});

if (globalFlags.verbose && result.loadError) {
Expand Down Expand Up @@ -649,6 +653,7 @@ async function handleSessionsNew(
authPolicy: globalFlags.authPolicy,
timeoutMs: globalFlags.timeout,
verbose: globalFlags.verbose,
terminal: globalFlags.terminal,
sessionOptions: {
model: globalFlags.model,
allowedTools: globalFlags.allowedTools,
Expand Down Expand Up @@ -689,6 +694,7 @@ async function handleSessionsEnsure(
authPolicy: globalFlags.authPolicy,
timeoutMs: globalFlags.timeout,
verbose: globalFlags.verbose,
terminal: globalFlags.terminal,
sessionOptions: {
model: globalFlags.model,
allowedTools: globalFlags.allowedTools,
Expand Down
5 changes: 4 additions & 1 deletion src/cli/flags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export type GlobalFlags = PermissionFlags & {
model?: string;
allowedTools?: string[];
maxTurns?: number;
terminal?: boolean;
};

export type PromptFlags = {
Expand Down Expand Up @@ -210,7 +211,8 @@ export function addGlobalFlags(command: Command): Command {
"Queue owner idle TTL before shutdown (0 = keep alive forever) (default: 300)",
parseTtlSeconds,
)
.option("--verbose", "Enable verbose debug logs");
.option("--verbose", "Enable verbose debug logs")
.option("--terminal", "Enable terminal capability (default: true)", true);
}

export function addSessionOption(command: Command): Command {
Expand Down Expand Up @@ -285,6 +287,7 @@ export function resolveGlobalFlags(command: Command, config: ResolvedAcpxConfig)
model: typeof opts.model === "string" ? parseNonEmptyValue("Model", opts.model) : undefined,
allowedTools: Array.isArray(opts.allowedTools) ? opts.allowedTools : undefined,
maxTurns: typeof opts.maxTurns === "number" ? opts.maxTurns : undefined,
terminal: opts.terminal !== false,
approveAll: opts.approveAll ? true : undefined,
approveReads: opts.approveReads ? true : undefined,
denyAll: opts.denyAll ? true : undefined,
Expand Down
2 changes: 1 addition & 1 deletion src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1023,7 +1023,7 @@ export class AcpClient {
readTextFile: true,
writeTextFile: true,
},
terminal: true,
terminal: this.options.terminal !== false,
},
clientInfo: {
name: "acpx",
Expand Down
11 changes: 11 additions & 0 deletions src/session-runtime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export type RunOnceOptions = {
suppressSdkConsoleErrors?: boolean;
verbose?: boolean;
sessionOptions?: SessionAgentOptions;
terminal?: boolean;
} & TimedRunOptions;

export type SessionCreateOptions = {
Expand All @@ -130,6 +131,7 @@ export type SessionCreateOptions = {
authPolicy?: AuthPolicy;
verbose?: boolean;
sessionOptions?: SessionAgentOptions;
terminal?: boolean;
} & TimedRunOptions;

export type SessionSendOptions = {
Expand All @@ -147,6 +149,7 @@ export type SessionSendOptions = {
waitForCompletion?: boolean;
ttlMs?: number;
maxQueueDepth?: number;
terminal?: boolean;
} & TimedRunOptions;

export type SessionEnsureOptions = {
Expand All @@ -162,6 +165,7 @@ export type SessionEnsureOptions = {
verbose?: boolean;
walkBoundary?: string;
sessionOptions?: SessionAgentOptions;
terminal?: boolean;
} & TimedRunOptions;

export type SessionCancelOptions = {
Expand All @@ -182,6 +186,7 @@ export type SessionSetModeOptions = {
authCredentials?: Record<string, string>;
authPolicy?: AuthPolicy;
verbose?: boolean;
terminal?: boolean;
} & TimedRunOptions;

export type SessionSetConfigOptionOptions = {
Expand All @@ -193,6 +198,7 @@ export type SessionSetConfigOptionOptions = {
authCredentials?: Record<string, string>;
authPolicy?: AuthPolicy;
verbose?: boolean;
terminal?: boolean;
} & TimedRunOptions;

function toPromptResult(
Expand All @@ -219,6 +225,7 @@ type RunSessionPromptOptions = {
timeoutMs?: number;
suppressSdkConsoleErrors?: boolean;
verbose?: boolean;
terminal?: boolean;
onClientAvailable?: (controller: ActiveSessionController) => void;
onClientClosed?: () => void;
onPromptActive?: () => Promise<void> | void;
Expand Down Expand Up @@ -519,6 +526,7 @@ async function runSessionPrompt(options: RunSessionPromptOptions): Promise<Sessi
authPolicy: options.authPolicy,
suppressSdkConsoleErrors: options.suppressSdkConsoleErrors,
verbose: options.verbose,
terminal: options.terminal,
});
client.updateRuntimeOptions({
permissionMode: options.permissionMode,
Expand Down Expand Up @@ -749,6 +757,7 @@ export async function runOnce(options: RunOnceOptions): Promise<RunPromptResult>
verbose: options.verbose,
onAcpOutputMessage: (_direction, message) => output.onAcpMessage(message),
sessionOptions: options.sessionOptions,
terminal: options.terminal,
});

try {
Expand Down Expand Up @@ -796,6 +805,7 @@ export async function createSession(options: SessionCreateOptions): Promise<Sess
authPolicy: options.authPolicy,
verbose: options.verbose,
sessionOptions: options.sessionOptions,
terminal: options.terminal,
});

try {
Expand Down Expand Up @@ -952,6 +962,7 @@ export async function runSessionQueueOwner(options: QueueOwnerRuntimeOptions): P
authPolicy: options.authPolicy,
suppressSdkConsoleErrors: options.suppressSdkConsoleErrors,
verbose: options.verbose,
terminal: options.terminal,
});
const ttlMs = normalizeQueueOwnerTtlMs(options.ttlMs);
const maxQueueDepth = Math.max(1, Math.round(options.maxQueueDepth ?? 16));
Expand Down
2 changes: 2 additions & 0 deletions src/session-runtime/prompt-runner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ type WithConnectedSessionOptions<T> = {
authPolicy?: AuthPolicy;
timeoutMs?: number;
verbose?: boolean;
terminal?: boolean;
onClientAvailable?: (controller: ActiveSessionController) => void;
onClientClosed?: () => void;
run: (client: AcpClient, sessionId: string, record: SessionRecord) => Promise<T>;
Expand All @@ -56,6 +57,7 @@ async function withConnectedSession<T>(
authCredentials: options.authCredentials,
authPolicy: options.authPolicy,
verbose: options.verbose,
terminal: options.terminal,
});
let activeSessionIdForControl = record.acpSessionId;
let notifiedClientAvailable = false;
Expand Down
3 changes: 3 additions & 0 deletions src/session-runtime/queue-owner-process.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export type QueueOwnerRuntimeOptions = {
verbose?: boolean;
ttlMs?: number;
maxQueueDepth?: number;
terminal?: boolean;
};

type SessionSendLike = {
Expand All @@ -31,6 +32,7 @@ type SessionSendLike = {
verbose?: boolean;
ttlMs?: number;
maxQueueDepth?: number;
terminal?: boolean;
};

export function resolveQueueOwnerSpawnArgs(argv: readonly string[] = process.argv): string[] {
Expand All @@ -56,6 +58,7 @@ export function queueOwnerRuntimeOptionsFromSend(
verbose: options.verbose,
ttlMs: options.ttlMs,
maxQueueDepth: options.maxQueueDepth,
terminal: options.terminal,
};
}

Expand Down
1 change: 1 addition & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ export type AcpClientOptions = {
onAcpOutputMessage?: (direction: AcpMessageDirection, message: AcpJsonRpcMessage) => void;
onSessionUpdate?: (notification: SessionNotification) => void;
onClientOperation?: (operation: ClientOperation) => void;
terminal?: boolean;
};

export const SESSION_RECORD_SCHEMA = "acpx.session.v1" as const;
Expand Down