Add support for authentication

This commit is contained in:
Conrad Irwin
2025-08-28 10:38:14 -06:00
parent a3d6335bfc
commit 64f19462a2

View File

@@ -11,6 +11,7 @@ import {
NewSessionResponse, NewSessionResponse,
PromptRequest, PromptRequest,
PromptResponse, PromptResponse,
RequestError,
ToolCallContent, ToolCallContent,
ToolKind, ToolKind,
} from "@zed-industries/agent-client-protocol"; } from "@zed-industries/agent-client-protocol";
@@ -57,6 +58,18 @@ export class ClaudeAcpAgent implements Agent {
agentCapabilities: { agentCapabilities: {
promptCapabilities: { image: true, embeddedContext: true }, promptCapabilities: { image: true, embeddedContext: true },
}, },
authMethods: [
{
description: "Run `claude /login` in the terminal",
name: "Login with Claude CLI",
id: "claude-login",
},
{
description: "Anthropic API KEY",
name: "Use Anthropic API Key",
id: "anthropic-api-key",
},
],
}; };
} }
async newSession(params: NewSessionRequest): Promise<NewSessionResponse> { async newSession(params: NewSessionRequest): Promise<NewSessionResponse> {
@@ -131,8 +144,13 @@ export class ClaudeAcpAgent implements Agent {
case "result": { case "result": {
// todo!() how is rate-limiting handled? // todo!() how is rate-limiting handled?
switch (message.subtype) { switch (message.subtype) {
case "success": case "success": {
console.error(message.result);
if (message.result.includes("Please run /login")) {
throw RequestError.authRequired();
}
return { stopReason: "end_turn" }; return { stopReason: "end_turn" };
}
case "error_during_execution": case "error_during_execution":
return { stopReason: "refusal" }; return { stopReason: "refusal" };
case "error_max_turns": case "error_max_turns":
@@ -143,6 +161,13 @@ export class ClaudeAcpAgent implements Agent {
} }
case "user": case "user":
case "assistant": { case "assistant": {
if (
message.message.model == "<synthetic>" &&
message.message.content.length == 1 &&
message.message.content[0].text.includes("Please run /login")
) {
throw RequestError.authRequired();
}
for (const notification of toAcpNotifications( for (const notification of toAcpNotifications(
message, message,
params.sessionId, params.sessionId,