use-acp 0.2.3 → 0.2.4
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.
|
@@ -18,6 +18,7 @@ export interface UseAcpClientReturn {
|
|
|
18
18
|
disconnect: () => void;
|
|
19
19
|
connectionState: ConnectionState;
|
|
20
20
|
activeSessionId: SessionId | null;
|
|
21
|
+
setActiveSessionId: (sessionId: SessionId | null) => void;
|
|
21
22
|
notifications: NotificationEvent[];
|
|
22
23
|
clearNotifications: () => void;
|
|
23
24
|
isSessionLoading: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-acp-client.d.ts","sourceRoot":"","sources":["../../src/hooks/use-acp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAErB,KAAK,SAAS,EACd,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EAEtB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,2BAA2B,EAEjC,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EACV,eAAe,EAEf,iBAAiB,EACjB,SAAS,EACV,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,mBAAmB;IAElC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,aAAa,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAG1C,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IAEjC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IAGjC,eAAe,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAG1B,iBAAiB,EAAE,2BAA2B,GAAG,IAAI,CAAC;IACtD,iBAAiB,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACjE,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAGzC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAG5C,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IAGtC,WAAW,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;CAClD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"use-acp-client.d.ts","sourceRoot":"","sources":["../../src/hooks/use-acp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAErB,KAAK,SAAS,EACd,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EAEtB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,2BAA2B,EAEjC,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EACV,eAAe,EAEf,iBAAiB,EACjB,SAAS,EACV,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,mBAAmB;IAElC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,aAAa,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAG1C,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IAEjC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IAGjC,eAAe,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,kBAAkB,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1D,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAG1B,iBAAiB,EAAE,2BAA2B,GAAG,IAAI,CAAC;IACtD,iBAAiB,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACjE,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAGzC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAG5C,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IAGtC,WAAW,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;CAClD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAmO7E"}
|
|
@@ -157,6 +157,8 @@ export function useAcpClient(options) {
|
|
|
157
157
|
// Auto-connect on mount if specified
|
|
158
158
|
// biome-ignore lint/correctness/useExhaustiveDependencies: Don't include connect/disconnect to avoid re-connecting on every render
|
|
159
159
|
useEffect(() => {
|
|
160
|
+
// Reset the active session id as the connection is being established
|
|
161
|
+
setActiveSessionId(null);
|
|
160
162
|
if (autoConnect) {
|
|
161
163
|
void connect().catch(console.error);
|
|
162
164
|
}
|
|
@@ -173,6 +175,7 @@ export function useAcpClient(options) {
|
|
|
173
175
|
isSessionLoading,
|
|
174
176
|
clearNotifications,
|
|
175
177
|
pendingPermission,
|
|
178
|
+
setActiveSessionId,
|
|
176
179
|
resolvePermission,
|
|
177
180
|
rejectPermission: rejectPermissionCallback,
|
|
178
181
|
agent: agent,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-acp-client.js","sourceRoot":"","sources":["../../src/hooks/use-acp-client.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Agent,\n type AgentCapabilities,\n type AvailableCommand,\n ClientSideConnection,\n type McpServer,\n type RequestPermissionResponse,\n type SessionModeState,\n type SessionNotification,\n} from \"@zed-industries/agent-client-protocol\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n AcpClient,\n type AcpClientOptions,\n type IdentifiedPermissionRequest,\n ListeningAgent,\n} from \"../client/acp-client.js\";\nimport { MultiWebSocketManager } from \"../connection/websocket-manager.js\";\nimport { useAcpStore } from \"../state/atoms.js\";\nimport type {\n ConnectionState,\n ConnectionUrl,\n NotificationEvent,\n SessionId,\n} from \"../state/types.js\";\nimport { useEventCallback } from \"./use-event-callback.js\";\n\nexport interface UseAcpClientOptions {\n // Connection management\n wsUrl: string;\n autoConnect?: boolean;\n reconnectAttempts?: number;\n reconnectDelay?: number;\n\n // Client options\n clientOptions?: Partial<AcpClientOptions>;\n\n // Session management\n initialSessionId?: string | null;\n sessionParams?: {\n cwd?: string;\n mcpServers?: McpServer[];\n };\n}\n\nexport interface UseAcpClientReturn {\n // Connection management\n connect: () => Promise<void>;\n disconnect: () => void;\n connectionState: ConnectionState;\n\n // State management\n activeSessionId: SessionId | null;\n notifications: NotificationEvent[];\n clearNotifications: () => void;\n isSessionLoading: boolean;\n\n // Permission handling\n pendingPermission: IdentifiedPermissionRequest | null;\n resolvePermission: (response: RequestPermissionResponse) => void;\n rejectPermission: (error: Error) => void;\n\n // ACP connection\n agent: Agent | null;\n agentCapabilities: AgentCapabilities | null;\n\n // Slash commands support\n availableCommands: AvailableCommand[];\n\n // Session modes\n sessionMode: SessionModeState | null | undefined;\n}\n\nexport function useAcpClient(options: UseAcpClientOptions): UseAcpClientReturn {\n const {\n wsUrl,\n autoConnect = true,\n reconnectAttempts = 3,\n reconnectDelay = 2000,\n clientOptions = {},\n } = options;\n\n const {\n getConnection,\n notifications,\n activeSessionId,\n agentCapabilities,\n sessionModes,\n setActiveModeId,\n setModeState,\n setActiveSessionId,\n setConnection,\n setActiveConnection,\n addNotification,\n clearNotifications,\n } = useAcpStore();\n\n // State\n const [pendingPermission, setPendingPermission] = useState<IdentifiedPermissionRequest | null>(\n null,\n );\n const [agent, setAgent] = useState<Agent | null>(null);\n const [isSessionLoading, setIsSessionLoading] = useState(false);\n const [availableCommands, setAvailableCommands] = useState<AvailableCommand[]>([]);\n\n // Refs\n const multiWsManagerRef = useRef<MultiWebSocketManager | null>(null);\n const acpClientRef = useRef<AcpClient | null>(null);\n const lastProcessedSessionId = useRef<SessionId | null>(null);\n const sessionCreationInProgress = useRef<boolean>(false);\n\n // Handlers\n const handleConnectionStateChange = useEventCallback(\n (state: ConnectionState, url: ConnectionUrl) => {\n setConnection(url, state);\n addNotification({\n type: \"connection_change\",\n data: state,\n });\n },\n );\n\n const handleError = useEventCallback((error: Error, _url: ConnectionUrl) => {\n addNotification({\n type: \"error\",\n data: error,\n });\n });\n\n const handleSessionNotification = useEventCallback((notification: SessionNotification) => {\n addNotification({\n type: \"session_notification\",\n data: notification,\n });\n\n // Handle available commands updates\n if (notification.update.sessionUpdate === \"available_commands_update\") {\n setAvailableCommands(notification.update.availableCommands);\n }\n });\n\n const handleRequestPermission = useEventCallback((params: IdentifiedPermissionRequest) => {\n setPendingPermission(params);\n });\n\n const connect = useEventCallback(async () => {\n if (!multiWsManagerRef.current) {\n multiWsManagerRef.current = new MultiWebSocketManager({\n onConnectionStateChange: handleConnectionStateChange,\n onError: handleError,\n reconnectAttempts: reconnectAttempts,\n reconnectDelay: reconnectDelay,\n });\n }\n\n setActiveConnection(wsUrl);\n const { readable, writable } = await multiWsManagerRef.current.connect(wsUrl);\n\n // Initialize the connection\n const agent = new ClientSideConnection(\n (agent) => {\n // Initialize the ACP client\n const acpClient = new AcpClient(agent, {\n ...clientOptions,\n onRequestPermission: (params) => {\n clientOptions?.onRequestPermission?.(params);\n handleRequestPermission(params);\n },\n onSessionNotification: (params) => {\n clientOptions?.onSessionNotification?.(params);\n handleSessionNotification(params);\n },\n });\n acpClientRef.current = acpClient;\n return acpClient;\n },\n writable,\n readable as ReadableStream<Uint8Array>,\n );\n\n const listeningAgent: Agent = new ListeningAgent(agent, {\n on_initialize_response: (response) => {\n const capabilities = response.agentCapabilities;\n console.log(\"[acp] Agent capabilities\", capabilities);\n const connectionState = getConnection(wsUrl);\n setConnection(wsUrl, connectionState.state, capabilities);\n },\n on_newSession_response: (response) => {\n console.log(\"[acp] New session created\", response);\n const sessionId = response.sessionId as SessionId;\n setActiveSessionId(sessionId);\n setModeState(sessionId, response.modes);\n },\n on_loadSession_response: (response, params) => {\n console.log(\"[acp] Session resumed\", params);\n const sessionId = params.sessionId as SessionId;\n setActiveSessionId(sessionId);\n setModeState(sessionId, response.modes);\n },\n on_prompt_start: (params) => {\n for (const prompt of params.prompt) {\n addNotification({\n type: \"session_notification\",\n data: {\n sessionId: params.sessionId,\n update: {\n sessionUpdate: \"user_message_chunk\",\n content: prompt,\n },\n },\n });\n }\n },\n on_setSessionMode_start: (params) => {\n console.log(\"[acp] Session mode set\", params);\n const sessionId = params.sessionId as SessionId;\n setActiveModeId(sessionId, params.modeId);\n },\n });\n\n setAgent(listeningAgent);\n });\n\n const disconnect = useEventCallback((url?: ConnectionUrl) => {\n const targetUrl = url || wsUrl;\n\n if (multiWsManagerRef.current) {\n if (url) {\n multiWsManagerRef.current.disconnect(url);\n } else {\n // Disconnect the current URL specifically instead of all connections\n multiWsManagerRef.current.disconnect(targetUrl);\n multiWsManagerRef.current = null;\n acpClientRef.current = null;\n setAgent(null);\n }\n }\n\n if (!url) {\n setPendingPermission(null);\n setAvailableCommands([]);\n // Reset session creation safeguards on full disconnect\n sessionCreationInProgress.current = false;\n lastProcessedSessionId.current = null;\n setIsSessionLoading(false);\n }\n });\n\n const resolvePermission = useEventCallback((response: RequestPermissionResponse) => {\n if (pendingPermission && acpClientRef.current) {\n const permissionId = pendingPermission.deferredId;\n if (permissionId) {\n acpClientRef.current.resolvePermission(permissionId, response);\n }\n }\n setPendingPermission(null);\n });\n\n const rejectPermissionCallback = useEventCallback((error: Error) => {\n if (pendingPermission && acpClientRef.current) {\n const permissionId = pendingPermission.deferredId;\n if (permissionId) {\n acpClientRef.current.rejectPermission(permissionId, error);\n }\n }\n setPendingPermission(null);\n });\n\n // Auto-connect on mount if specified\n // biome-ignore lint/correctness/useExhaustiveDependencies: Don't include connect/disconnect to avoid re-connecting on every render\n useEffect(() => {\n if (autoConnect) {\n void connect().catch(console.error);\n }\n\n return () => {\n disconnect();\n };\n }, [autoConnect, wsUrl]);\n\n return {\n connect,\n disconnect,\n connectionState: getConnection(wsUrl).state,\n activeSessionId,\n notifications: activeSessionId ? notifications[activeSessionId] || [] : [],\n isSessionLoading,\n clearNotifications,\n pendingPermission,\n resolvePermission,\n rejectPermission: rejectPermissionCallback,\n agent: agent,\n agentCapabilities,\n sessionMode: activeSessionId ? sessionModes[activeSessionId] : null,\n availableCommands,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"use-acp-client.js","sourceRoot":"","sources":["../../src/hooks/use-acp-client.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Agent,\n type AgentCapabilities,\n type AvailableCommand,\n ClientSideConnection,\n type McpServer,\n type RequestPermissionResponse,\n type SessionModeState,\n type SessionNotification,\n} from \"@zed-industries/agent-client-protocol\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n AcpClient,\n type AcpClientOptions,\n type IdentifiedPermissionRequest,\n ListeningAgent,\n} from \"../client/acp-client.js\";\nimport { MultiWebSocketManager } from \"../connection/websocket-manager.js\";\nimport { useAcpStore } from \"../state/atoms.js\";\nimport type {\n ConnectionState,\n ConnectionUrl,\n NotificationEvent,\n SessionId,\n} from \"../state/types.js\";\nimport { useEventCallback } from \"./use-event-callback.js\";\n\nexport interface UseAcpClientOptions {\n // Connection management\n wsUrl: string;\n autoConnect?: boolean;\n reconnectAttempts?: number;\n reconnectDelay?: number;\n\n // Client options\n clientOptions?: Partial<AcpClientOptions>;\n\n // Session management\n initialSessionId?: string | null;\n sessionParams?: {\n cwd?: string;\n mcpServers?: McpServer[];\n };\n}\n\nexport interface UseAcpClientReturn {\n // Connection management\n connect: () => Promise<void>;\n disconnect: () => void;\n connectionState: ConnectionState;\n\n // State management\n activeSessionId: SessionId | null;\n setActiveSessionId: (sessionId: SessionId | null) => void;\n notifications: NotificationEvent[];\n clearNotifications: () => void;\n isSessionLoading: boolean;\n\n // Permission handling\n pendingPermission: IdentifiedPermissionRequest | null;\n resolvePermission: (response: RequestPermissionResponse) => void;\n rejectPermission: (error: Error) => void;\n\n // ACP connection\n agent: Agent | null;\n agentCapabilities: AgentCapabilities | null;\n\n // Slash commands support\n availableCommands: AvailableCommand[];\n\n // Session modes\n sessionMode: SessionModeState | null | undefined;\n}\n\nexport function useAcpClient(options: UseAcpClientOptions): UseAcpClientReturn {\n const {\n wsUrl,\n autoConnect = true,\n reconnectAttempts = 3,\n reconnectDelay = 2000,\n clientOptions = {},\n } = options;\n\n const {\n getConnection,\n notifications,\n activeSessionId,\n agentCapabilities,\n sessionModes,\n setActiveModeId,\n setModeState,\n setActiveSessionId,\n setConnection,\n setActiveConnection,\n addNotification,\n clearNotifications,\n } = useAcpStore();\n\n // State\n const [pendingPermission, setPendingPermission] = useState<IdentifiedPermissionRequest | null>(\n null,\n );\n const [agent, setAgent] = useState<Agent | null>(null);\n const [isSessionLoading, setIsSessionLoading] = useState(false);\n const [availableCommands, setAvailableCommands] = useState<AvailableCommand[]>([]);\n\n // Refs\n const multiWsManagerRef = useRef<MultiWebSocketManager | null>(null);\n const acpClientRef = useRef<AcpClient | null>(null);\n const lastProcessedSessionId = useRef<SessionId | null>(null);\n const sessionCreationInProgress = useRef<boolean>(false);\n\n // Handlers\n const handleConnectionStateChange = useEventCallback(\n (state: ConnectionState, url: ConnectionUrl) => {\n setConnection(url, state);\n addNotification({\n type: \"connection_change\",\n data: state,\n });\n },\n );\n\n const handleError = useEventCallback((error: Error, _url: ConnectionUrl) => {\n addNotification({\n type: \"error\",\n data: error,\n });\n });\n\n const handleSessionNotification = useEventCallback((notification: SessionNotification) => {\n addNotification({\n type: \"session_notification\",\n data: notification,\n });\n\n // Handle available commands updates\n if (notification.update.sessionUpdate === \"available_commands_update\") {\n setAvailableCommands(notification.update.availableCommands);\n }\n });\n\n const handleRequestPermission = useEventCallback((params: IdentifiedPermissionRequest) => {\n setPendingPermission(params);\n });\n\n const connect = useEventCallback(async () => {\n if (!multiWsManagerRef.current) {\n multiWsManagerRef.current = new MultiWebSocketManager({\n onConnectionStateChange: handleConnectionStateChange,\n onError: handleError,\n reconnectAttempts: reconnectAttempts,\n reconnectDelay: reconnectDelay,\n });\n }\n\n setActiveConnection(wsUrl);\n const { readable, writable } = await multiWsManagerRef.current.connect(wsUrl);\n\n // Initialize the connection\n const agent = new ClientSideConnection(\n (agent) => {\n // Initialize the ACP client\n const acpClient = new AcpClient(agent, {\n ...clientOptions,\n onRequestPermission: (params) => {\n clientOptions?.onRequestPermission?.(params);\n handleRequestPermission(params);\n },\n onSessionNotification: (params) => {\n clientOptions?.onSessionNotification?.(params);\n handleSessionNotification(params);\n },\n });\n acpClientRef.current = acpClient;\n return acpClient;\n },\n writable,\n readable as ReadableStream<Uint8Array>,\n );\n\n const listeningAgent: Agent = new ListeningAgent(agent, {\n on_initialize_response: (response) => {\n const capabilities = response.agentCapabilities;\n console.log(\"[acp] Agent capabilities\", capabilities);\n const connectionState = getConnection(wsUrl);\n setConnection(wsUrl, connectionState.state, capabilities);\n },\n on_newSession_response: (response) => {\n console.log(\"[acp] New session created\", response);\n const sessionId = response.sessionId as SessionId;\n setActiveSessionId(sessionId);\n setModeState(sessionId, response.modes);\n },\n on_loadSession_response: (response, params) => {\n console.log(\"[acp] Session resumed\", params);\n const sessionId = params.sessionId as SessionId;\n setActiveSessionId(sessionId);\n setModeState(sessionId, response.modes);\n },\n on_prompt_start: (params) => {\n for (const prompt of params.prompt) {\n addNotification({\n type: \"session_notification\",\n data: {\n sessionId: params.sessionId,\n update: {\n sessionUpdate: \"user_message_chunk\",\n content: prompt,\n },\n },\n });\n }\n },\n on_setSessionMode_start: (params) => {\n console.log(\"[acp] Session mode set\", params);\n const sessionId = params.sessionId as SessionId;\n setActiveModeId(sessionId, params.modeId);\n },\n });\n\n setAgent(listeningAgent);\n });\n\n const disconnect = useEventCallback((url?: ConnectionUrl) => {\n const targetUrl = url || wsUrl;\n\n if (multiWsManagerRef.current) {\n if (url) {\n multiWsManagerRef.current.disconnect(url);\n } else {\n // Disconnect the current URL specifically instead of all connections\n multiWsManagerRef.current.disconnect(targetUrl);\n multiWsManagerRef.current = null;\n acpClientRef.current = null;\n setAgent(null);\n }\n }\n\n if (!url) {\n setPendingPermission(null);\n setAvailableCommands([]);\n // Reset session creation safeguards on full disconnect\n sessionCreationInProgress.current = false;\n lastProcessedSessionId.current = null;\n setIsSessionLoading(false);\n }\n });\n\n const resolvePermission = useEventCallback((response: RequestPermissionResponse) => {\n if (pendingPermission && acpClientRef.current) {\n const permissionId = pendingPermission.deferredId;\n if (permissionId) {\n acpClientRef.current.resolvePermission(permissionId, response);\n }\n }\n setPendingPermission(null);\n });\n\n const rejectPermissionCallback = useEventCallback((error: Error) => {\n if (pendingPermission && acpClientRef.current) {\n const permissionId = pendingPermission.deferredId;\n if (permissionId) {\n acpClientRef.current.rejectPermission(permissionId, error);\n }\n }\n setPendingPermission(null);\n });\n\n // Auto-connect on mount if specified\n // biome-ignore lint/correctness/useExhaustiveDependencies: Don't include connect/disconnect to avoid re-connecting on every render\n useEffect(() => {\n // Reset the active session id as the connection is being established\n setActiveSessionId(null);\n\n if (autoConnect) {\n void connect().catch(console.error);\n }\n\n return () => {\n disconnect();\n };\n }, [autoConnect, wsUrl]);\n\n return {\n connect,\n disconnect,\n connectionState: getConnection(wsUrl).state,\n activeSessionId,\n notifications: activeSessionId ? notifications[activeSessionId] || [] : [],\n isSessionLoading,\n clearNotifications,\n pendingPermission,\n setActiveSessionId,\n resolvePermission,\n rejectPermission: rejectPermissionCallback,\n agent: agent,\n agentCapabilities,\n sessionMode: activeSessionId ? sessionModes[activeSessionId] : null,\n availableCommands,\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "use-acp",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.4",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@zed-industries/agent-client-protocol": "
|
|
66
|
+
"@zed-industries/agent-client-protocol": "0.3.1",
|
|
67
67
|
"zustand": "^5.0.2"
|
|
68
68
|
},
|
|
69
69
|
"scripts": {
|