( opts: BuildCliToolCatalogOptions, )
| 115 | } |
| 116 | |
| 117 | async function loadDaemonBackedXcodeProxyTools( |
| 118 | opts: BuildCliToolCatalogOptions, |
| 119 | ): Promise<ToolDefinition[]> { |
| 120 | const discoveryMode = opts.discoveryMode ?? 'none'; |
| 121 | const quickMode = discoveryMode === 'quick'; |
| 122 | const daemonClient = new DaemonClient({ |
| 123 | socketPath: opts.socketPath, |
| 124 | timeout: getBridgeDiscoveryTimeoutMs(quickMode), |
| 125 | }); |
| 126 | |
| 127 | try { |
| 128 | const isRunning = await daemonClient.isRunning(); |
| 129 | if (!isRunning) { |
| 130 | if (!quickMode) { |
| 131 | return []; |
| 132 | } |
| 133 | |
| 134 | // Fast path for CLI help/discovery: fire-and-forget daemon startup to avoid |
| 135 | // blocking command rendering while still warming a long-lived bridge session. |
| 136 | try { |
| 137 | startDaemonBackground({ |
| 138 | socketPath: opts.socketPath, |
| 139 | workspaceRoot: opts.workspaceRoot, |
| 140 | }); |
| 141 | } catch (startError) { |
| 142 | const message = startError instanceof Error ? startError.message : String(startError); |
| 143 | log('warn', `[xcode-ide] Failed to start daemon in background: ${message}`); |
| 144 | } |
| 145 | return []; |
| 146 | } |
| 147 | |
| 148 | const tools = await daemonClient.listXcodeIdeTools({ |
| 149 | refresh: false, |
| 150 | prefetch: quickMode, |
| 151 | }); |
| 152 | |
| 153 | return tools.map( |
| 154 | (tool): ToolDefinition => |
| 155 | createCliXcodeProxyTool({ |
| 156 | name: tool.remoteName, |
| 157 | description: tool.description, |
| 158 | inputSchema: tool.inputSchema, |
| 159 | annotations: tool.annotations, |
| 160 | }), |
| 161 | ); |
| 162 | } catch (error) { |
| 163 | const message = error instanceof Error ? error.message : String(error); |
| 164 | if (quickMode) { |
| 165 | log('warn', `[xcode-ide] CLI daemon-backed bridge discovery failed: ${message}`); |
| 166 | } else { |
| 167 | log('debug', `[xcode-ide] CLI cached bridge discovery skipped: ${message}`); |
| 168 | } |
| 169 | return []; |
| 170 | } |
| 171 | } |
| 172 | |
| 173 | /** |
| 174 | * Build a tool catalog for CLI usage using the manifest system. |
no test coverage detected