@getpaseo/server 0.1.97-beta.3 → 0.1.98
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.
- package/dist/server/server/agent/agent-manager.d.ts +11 -3
- package/dist/server/server/agent/agent-manager.js +95 -23
- package/dist/server/server/agent/agent-prompt.d.ts +1 -1
- package/dist/server/server/agent/agent-prompt.js +3 -10
- package/dist/server/server/agent/agent-response-loop.js +9 -3
- package/dist/server/server/agent/agent-sdk-types.d.ts +9 -3
- package/dist/server/server/agent/agent-storage.d.ts +20 -240
- package/dist/server/server/agent/agent-storage.js +6 -6
- package/dist/server/server/agent/create-agent/create.d.ts +2 -0
- package/dist/server/server/agent/create-agent/create.js +8 -7
- package/dist/server/server/agent/lifecycle-command.d.ts +15 -1
- package/dist/server/server/agent/lifecycle-command.js +9 -2
- package/dist/server/server/agent/mcp-server.js +263 -119
- package/dist/server/server/agent/mcp-shared.d.ts +35 -179
- package/dist/server/server/agent/provider-notices.d.ts +3 -0
- package/dist/server/server/agent/provider-notices.js +5 -0
- package/dist/server/server/agent/provider-registry.d.ts +2 -0
- package/dist/server/server/agent/provider-registry.js +10 -3
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +3 -0
- package/dist/server/server/agent/provider-snapshot-manager.js +11 -2
- package/dist/server/server/agent/providers/claude/agent.js +257 -143
- package/dist/server/server/agent/providers/claude/models.js +7 -3
- package/dist/server/server/agent/providers/claude/project-dir.js +9 -6
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -22
- package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +8 -118
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +4 -3
- package/dist/server/server/agent/providers/codex-app-server-agent.js +43 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.js +4 -1
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts +9 -0
- package/dist/server/server/agent/providers/diagnostic-utils.js +188 -0
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +1 -5
- package/dist/server/server/agent/providers/mock-slow-provider.js +1 -1
- package/dist/server/server/agent/providers/opencode/server-manager.d.ts +29 -2
- package/dist/server/server/agent/providers/opencode/server-manager.js +83 -17
- package/dist/server/server/agent/providers/opencode-agent.d.ts +2 -0
- package/dist/server/server/agent/providers/opencode-agent.js +14 -9
- package/dist/server/server/agent/providers/pi/agent.d.ts +1 -5
- package/dist/server/server/agent/providers/pi/agent.js +27 -14
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +391 -1261
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js +26 -16
- package/dist/server/server/bootstrap.d.ts +2 -0
- package/dist/server/server/bootstrap.js +32 -2
- package/dist/server/server/loop-service.d.ts +60 -359
- package/dist/server/server/managed-processes/managed-processes.d.ts +76 -0
- package/dist/server/server/managed-processes/managed-processes.js +326 -0
- package/dist/server/server/migrations/backfill-workspace-id.migration.js +10 -6
- package/dist/server/server/package-version.d.ts +1 -7
- package/dist/server/server/paseo-worktree-service.js +15 -1
- package/dist/server/server/persisted-config.d.ts +138 -1009
- package/dist/server/server/persisted-config.js +1 -1
- package/dist/server/server/pid-lock.d.ts +1 -15
- package/dist/server/server/resolve-worktree-creation-intent.d.ts +3 -0
- package/dist/server/server/resolve-worktree-creation-intent.js +3 -3
- package/dist/server/server/session.d.ts +18 -1
- package/dist/server/server/session.js +424 -64
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +2 -2
- package/dist/server/server/speech/providers/openai/runtime.js +3 -4
- package/dist/server/server/speech/speech-types.d.ts +9 -11
- package/dist/server/server/websocket-server.d.ts +1 -0
- package/dist/server/server/websocket-server.js +15 -0
- package/dist/server/server/workspace-archive-service.js +2 -3
- package/dist/server/server/workspace-directory.js +5 -5
- package/dist/server/server/workspace-reconciliation-service.js +2 -2
- package/dist/server/server/workspace-registry.d.ts +17 -48
- package/dist/server/server/workspace-registry.js +9 -0
- package/dist/server/server/worktree-core.d.ts +1 -0
- package/dist/server/server/worktree-core.js +5 -1
- package/dist/server/services/quota-fetcher/manifest.d.ts +4 -0
- package/dist/server/services/quota-fetcher/manifest.js +47 -0
- package/dist/server/services/quota-fetcher/provider.d.ts +17 -0
- package/dist/server/services/quota-fetcher/provider.js +2 -0
- package/dist/server/services/quota-fetcher/providers/claude.d.ts +26 -0
- package/dist/server/services/quota-fetcher/providers/claude.js +217 -0
- package/dist/server/services/quota-fetcher/providers/codex.d.ts +23 -0
- package/dist/server/services/quota-fetcher/providers/codex.js +211 -0
- package/dist/server/services/quota-fetcher/providers/copilot.d.ts +17 -0
- package/dist/server/services/quota-fetcher/providers/copilot.js +75 -0
- package/dist/server/services/quota-fetcher/providers/cursor.d.ts +17 -0
- package/dist/server/services/quota-fetcher/providers/cursor.js +123 -0
- package/dist/server/services/quota-fetcher/providers/grok.d.ts +18 -0
- package/dist/server/services/quota-fetcher/providers/grok.js +89 -0
- package/dist/server/services/quota-fetcher/providers/kimi.d.ts +20 -0
- package/dist/server/services/quota-fetcher/providers/kimi.js +89 -0
- package/dist/server/services/quota-fetcher/providers/zai.d.ts +17 -0
- package/dist/server/services/quota-fetcher/providers/zai.js +58 -0
- package/dist/server/services/quota-fetcher/service.d.ts +28 -0
- package/dist/server/services/quota-fetcher/service.js +58 -0
- package/dist/server/services/quota-fetcher/usage.d.ts +22 -0
- package/dist/server/services/quota-fetcher/usage.js +49 -0
- package/dist/server/terminal/terminal-session-controller.d.ts +8 -0
- package/dist/server/terminal/terminal-session-controller.js +23 -3
- package/dist/server/utils/checkout-git.js +36 -76
- package/dist/server/utils/directory-suggestions.js +98 -2
- package/dist/server/utils/worktree-metadata.d.ts +7 -59
- package/dist/src/server/persisted-config.js +1 -1
- package/package.json +9 -9
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import net from "node:net";
|
|
2
|
+
import os from "node:os";
|
|
2
3
|
import { findExecutable } from "../../../../executable-resolution/executable-resolution.js";
|
|
3
4
|
import { spawnProcess } from "../../../../utils/spawn.js";
|
|
4
5
|
import { terminateWithTreeKill } from "../../../../utils/tree-kill.js";
|
|
@@ -6,19 +7,30 @@ import { createProviderEnvSpec, resolveProviderCommandPrefix, } from "../../prov
|
|
|
6
7
|
const OPENCODE_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT_MS = 5000;
|
|
7
8
|
const OPENCODE_SERVER_FORCE_SHUTDOWN_TIMEOUT_MS = 1000;
|
|
8
9
|
export class OpenCodeServerManager {
|
|
9
|
-
constructor(
|
|
10
|
+
constructor(options) {
|
|
10
11
|
this.currentServer = null;
|
|
11
12
|
this.retiredServers = new Set();
|
|
12
13
|
this.startPromise = null;
|
|
13
14
|
this.forcedRefreshPromise = null;
|
|
14
|
-
this.logger = logger;
|
|
15
|
-
this.runtimeSettings = runtimeSettings;
|
|
16
|
-
this.runtimeSettingsKey = JSON.stringify(runtimeSettings ?? {});
|
|
15
|
+
this.logger = options.logger;
|
|
16
|
+
this.runtimeSettings = options.runtimeSettings;
|
|
17
|
+
this.runtimeSettingsKey = JSON.stringify(this.runtimeSettings ?? {});
|
|
18
|
+
this.managedProcesses = options.managedProcesses;
|
|
19
|
+
this.terminateProcess = options.terminateProcess ?? terminateWithTreeKill;
|
|
20
|
+
this.portAllocator = options.portAllocator ?? findAvailablePort;
|
|
21
|
+
this.resolveCommandPrefix =
|
|
22
|
+
options.resolveCommandPrefix ??
|
|
23
|
+
(() => resolveProviderCommandPrefix(this.runtimeSettings?.command, resolveOpenCodeBinary));
|
|
24
|
+
this.spawnServerProcess = options.spawnServerProcess ?? spawnProcess;
|
|
17
25
|
}
|
|
18
|
-
static getInstance(logger, runtimeSettings) {
|
|
26
|
+
static getInstance(logger, runtimeSettings, options = {}) {
|
|
19
27
|
const nextSettingsKey = JSON.stringify(runtimeSettings ?? {});
|
|
20
28
|
if (!OpenCodeServerManager.instance) {
|
|
21
|
-
OpenCodeServerManager.instance = new OpenCodeServerManager(
|
|
29
|
+
OpenCodeServerManager.instance = new OpenCodeServerManager({
|
|
30
|
+
logger,
|
|
31
|
+
runtimeSettings,
|
|
32
|
+
...options,
|
|
33
|
+
});
|
|
22
34
|
OpenCodeServerManager.registerExitHandler();
|
|
23
35
|
}
|
|
24
36
|
else if (OpenCodeServerManager.instance.runtimeSettingsKey !== nextSettingsKey) {
|
|
@@ -128,11 +140,14 @@ export class OpenCodeServerManager {
|
|
|
128
140
|
return server;
|
|
129
141
|
}
|
|
130
142
|
async startServer(launchEnv) {
|
|
131
|
-
const port = await
|
|
143
|
+
const port = await this.portAllocator();
|
|
132
144
|
const url = `http://127.0.0.1:${port}`;
|
|
133
|
-
const launchPrefix = await
|
|
145
|
+
const launchPrefix = await this.resolveCommandPrefix();
|
|
146
|
+
const serverArgs = [...launchPrefix.args, "serve", "--port", String(port)];
|
|
147
|
+
const serverCwd = os.homedir();
|
|
134
148
|
return new Promise((resolve, reject) => {
|
|
135
|
-
const serverProcess =
|
|
149
|
+
const serverProcess = this.spawnServerProcess(launchPrefix.command, serverArgs, {
|
|
150
|
+
cwd: serverCwd,
|
|
136
151
|
detached: process.platform !== "win32",
|
|
137
152
|
stdio: ["ignore", "pipe", "pipe"],
|
|
138
153
|
...createProviderEnvSpec({
|
|
@@ -140,6 +155,12 @@ export class OpenCodeServerManager {
|
|
|
140
155
|
overlays: [launchEnv],
|
|
141
156
|
}),
|
|
142
157
|
});
|
|
158
|
+
const managedProcessRecord = this.recordManagedServerProcess({
|
|
159
|
+
process: serverProcess,
|
|
160
|
+
command: launchPrefix.command,
|
|
161
|
+
args: serverArgs,
|
|
162
|
+
port,
|
|
163
|
+
});
|
|
143
164
|
let started = false;
|
|
144
165
|
let stderrBuffer = "";
|
|
145
166
|
let stdoutBuffer = "";
|
|
@@ -174,13 +195,17 @@ export class OpenCodeServerManager {
|
|
|
174
195
|
if (output.includes("listening on") && !started) {
|
|
175
196
|
started = true;
|
|
176
197
|
clearTimeout(timeout);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
198
|
+
void (async () => {
|
|
199
|
+
const record = await managedProcessRecord;
|
|
200
|
+
resolve({
|
|
201
|
+
process: serverProcess,
|
|
202
|
+
port,
|
|
203
|
+
url,
|
|
204
|
+
refCount: 0,
|
|
205
|
+
retired: false,
|
|
206
|
+
...(record ? { managedProcessId: record.id } : {}),
|
|
207
|
+
});
|
|
208
|
+
})();
|
|
184
209
|
}
|
|
185
210
|
});
|
|
186
211
|
serverProcess.stderr?.on("data", (data) => {
|
|
@@ -190,10 +215,12 @@ export class OpenCodeServerManager {
|
|
|
190
215
|
});
|
|
191
216
|
serverProcess.on("error", (error) => {
|
|
192
217
|
clearTimeout(timeout);
|
|
218
|
+
this.removeManagedProcessRecordWhenResolved(managedProcessRecord);
|
|
193
219
|
const headline = error instanceof Error ? error.message : String(error);
|
|
194
220
|
reject(new Error(buildStartupErrorMessage(headline)));
|
|
195
221
|
});
|
|
196
222
|
serverProcess.on("exit", (code) => {
|
|
223
|
+
this.removeManagedProcessRecordWhenResolved(managedProcessRecord);
|
|
197
224
|
if (!started) {
|
|
198
225
|
clearTimeout(timeout);
|
|
199
226
|
reject(new Error(buildStartupErrorMessage(`OpenCode server exited with code ${code}`)));
|
|
@@ -231,7 +258,7 @@ export class OpenCodeServerManager {
|
|
|
231
258
|
(server.process.signalCode !== null && server.process.signalCode !== undefined)) {
|
|
232
259
|
return;
|
|
233
260
|
}
|
|
234
|
-
const result = await
|
|
261
|
+
const result = await this.terminateProcess(server.process, {
|
|
235
262
|
gracefulTimeoutMs: OPENCODE_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT_MS,
|
|
236
263
|
forceTimeoutMs: OPENCODE_SERVER_FORCE_SHUTDOWN_TIMEOUT_MS,
|
|
237
264
|
onForceSignal: () => {
|
|
@@ -241,6 +268,45 @@ export class OpenCodeServerManager {
|
|
|
241
268
|
if (result === "kill-timeout") {
|
|
242
269
|
this.logger.warn({ timeoutMs: OPENCODE_SERVER_FORCE_SHUTDOWN_TIMEOUT_MS }, "OpenCode server did not report exit after SIGKILL");
|
|
243
270
|
}
|
|
271
|
+
if (server.managedProcessId) {
|
|
272
|
+
await this.removeManagedProcessId(server.managedProcessId);
|
|
273
|
+
server.managedProcessId = undefined;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
async recordManagedServerProcess(options) {
|
|
277
|
+
const pid = options.process.pid;
|
|
278
|
+
if (!this.managedProcesses || typeof pid !== "number" || pid <= 0) {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
return await this.managedProcesses.record({
|
|
283
|
+
owner: { provider: "opencode", kind: "helper-server" },
|
|
284
|
+
pid,
|
|
285
|
+
command: options.command,
|
|
286
|
+
args: options.args,
|
|
287
|
+
metadata: { port: options.port },
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
this.logger.warn({ err: error, pid, port: options.port }, "Failed to record OpenCode helper process");
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
removeManagedProcessRecordWhenResolved(record) {
|
|
296
|
+
void record.then((resolved) => {
|
|
297
|
+
if (resolved) {
|
|
298
|
+
return this.removeManagedProcessId(resolved.id);
|
|
299
|
+
}
|
|
300
|
+
return undefined;
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
async removeManagedProcessId(id) {
|
|
304
|
+
try {
|
|
305
|
+
await this.managedProcesses?.remove(id);
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
this.logger.warn({ err: error, id }, "Failed to remove OpenCode helper process record");
|
|
309
|
+
}
|
|
244
310
|
}
|
|
245
311
|
}
|
|
246
312
|
OpenCodeServerManager.instance = null;
|
|
@@ -4,6 +4,7 @@ import { type AgentCapabilityFlags, type AgentClient, type AgentCreateSessionOpt
|
|
|
4
4
|
import { isDefaultAgentCreateConfigUnattended } from "../create-agent-mode.js";
|
|
5
5
|
import { type ProviderRuntimeSettings } from "../provider-launch-config.js";
|
|
6
6
|
import { type OpenCodeRuntime } from "./opencode/runtime.js";
|
|
7
|
+
import type { ManagedProcessRegistry } from "../../managed-processes/managed-processes.js";
|
|
7
8
|
declare function resolveOpenCodeCreateConfig(input: ResolveAgentCreateConfigInput): ResolveAgentCreateConfigResult;
|
|
8
9
|
declare function isOpenCodeCreateConfigUnattended(input: Parameters<typeof isDefaultAgentCreateConfigUnattended>[0]): boolean;
|
|
9
10
|
type OpenCodeAgentConfig = AgentSessionConfig & {
|
|
@@ -103,6 +104,7 @@ export declare const __openCodeInternals: {
|
|
|
103
104
|
};
|
|
104
105
|
interface OpenCodeAgentClientDeps {
|
|
105
106
|
runtime?: OpenCodeRuntime;
|
|
107
|
+
managedProcesses?: ManagedProcessRegistry;
|
|
106
108
|
}
|
|
107
109
|
export declare class OpenCodeAgentClient implements AgentClient {
|
|
108
110
|
readonly provider: "opencode";
|
|
@@ -11,7 +11,7 @@ import { execCommand } from "../../../utils/spawn.js";
|
|
|
11
11
|
import { buildToolCallDisplayModel } from "@getpaseo/protocol/tool-call-display";
|
|
12
12
|
import { mapOpencodeToolCall } from "./opencode/tool-call-mapper.js";
|
|
13
13
|
import { OpenCodeServerManager } from "./opencode/server-manager.js";
|
|
14
|
-
import { formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, buildBinaryDiagnosticRows, toDiagnosticErrorMessage, } from "./diagnostic-utils.js";
|
|
14
|
+
import { formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, buildBinaryDiagnosticRows, buildCommandResolutionDiagnosticRows, toDiagnosticErrorMessage, } from "./diagnostic-utils.js";
|
|
15
15
|
import { runProviderTurn } from "./provider-runner.js";
|
|
16
16
|
import { renderPromptAttachmentAsText } from "../prompt-attachments.js";
|
|
17
17
|
import { composeSystemPromptParts } from "../system-prompt.js";
|
|
@@ -398,14 +398,14 @@ function mapOpenCodeAgentToMode(agent) {
|
|
|
398
398
|
};
|
|
399
399
|
}
|
|
400
400
|
function mergeOpenCodeModes(discoveredModes) {
|
|
401
|
-
const
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
401
|
+
const filtered = discoveredModes.filter((mode) => mode.id !== OPENCODE_LEGACY_FULL_ACCESS_MODE_ID);
|
|
402
|
+
// When discovery returns results, trust them exactly — don't inject hardcoded
|
|
403
|
+
// defaults that the user may have intentionally disabled in their OpenCode config.
|
|
404
|
+
// Fall back to DEFAULT_MODES only when discovery produced nothing.
|
|
405
|
+
if (filtered.length > 0) {
|
|
406
|
+
return sortOpenCodeModes(filtered);
|
|
407
407
|
}
|
|
408
|
-
return sortOpenCodeModes(
|
|
408
|
+
return sortOpenCodeModes([...DEFAULT_MODES]);
|
|
409
409
|
}
|
|
410
410
|
function sortOpenCodeModes(modes) {
|
|
411
411
|
const order = new Map(DEFAULT_MODES.map((mode, index) => [mode.id, index]));
|
|
@@ -880,7 +880,9 @@ export class OpenCodeAgentClient {
|
|
|
880
880
|
this.runtimeSettings = runtimeSettings;
|
|
881
881
|
this.runtime =
|
|
882
882
|
deps.runtime ??
|
|
883
|
-
new ProductionOpenCodeRuntime(OpenCodeServerManager.getInstance(this.logger, runtimeSettings
|
|
883
|
+
new ProductionOpenCodeRuntime(OpenCodeServerManager.getInstance(this.logger, runtimeSettings, {
|
|
884
|
+
managedProcesses: deps.managedProcesses,
|
|
885
|
+
}));
|
|
884
886
|
}
|
|
885
887
|
async createSession(config, launchContext, options) {
|
|
886
888
|
const openCodeConfig = this.assertConfig(config);
|
|
@@ -1146,6 +1148,9 @@ export class OpenCodeAgentClient {
|
|
|
1146
1148
|
}
|
|
1147
1149
|
return {
|
|
1148
1150
|
diagnostic: formatProviderDiagnostic("OpenCode", [
|
|
1151
|
+
...(await buildCommandResolutionDiagnosticRows(launch, {
|
|
1152
|
+
knownBinaryNames: ["opencode"],
|
|
1153
|
+
})),
|
|
1149
1154
|
...(await buildBinaryDiagnosticRows(launch, availability)),
|
|
1150
1155
|
{ label: "Server", value: serverStatus },
|
|
1151
1156
|
{ label: "Auth", value: authValue },
|
|
@@ -6,11 +6,7 @@ import type { PiRuntime, PiRuntimeSession } from "./runtime.js";
|
|
|
6
6
|
import type { PiSessionState } from "./rpc-types.js";
|
|
7
7
|
export declare const PiProviderParamsSchema: z.ZodObject<{
|
|
8
8
|
sessionDir: z.ZodOptional<z.ZodString>;
|
|
9
|
-
},
|
|
10
|
-
sessionDir?: string | undefined;
|
|
11
|
-
}, {
|
|
12
|
-
sessionDir?: string | undefined;
|
|
13
|
-
}>;
|
|
9
|
+
}, z.core.$strict>;
|
|
14
10
|
interface PiRpcAgentClientOptions {
|
|
15
11
|
logger: Logger;
|
|
16
12
|
runtimeSettings?: ProviderRuntimeSettings;
|
|
@@ -3,12 +3,13 @@ import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
|
3
3
|
import { homedir, tmpdir } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { z } from "zod";
|
|
6
|
+
import { withTimeout } from "../../../../utils/promise-timeout.js";
|
|
6
7
|
import { importSessionFromPersistence } from "../../provider-session-import.js";
|
|
7
8
|
import { runProviderTurn } from "../provider-runner.js";
|
|
8
9
|
import { checkProviderLaunchAvailable, resolveProviderLaunch, } from "../../provider-launch-config.js";
|
|
9
10
|
import { renderPromptAttachmentAsText } from "../../prompt-attachments.js";
|
|
10
11
|
import { composeSystemPromptParts } from "../../system-prompt.js";
|
|
11
|
-
import { buildBinaryDiagnosticRows, formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, toDiagnosticErrorMessage, } from "../diagnostic-utils.js";
|
|
12
|
+
import { buildBinaryDiagnosticRows, buildCommandResolutionDiagnosticRows, formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, toDiagnosticErrorMessage, } from "../diagnostic-utils.js";
|
|
12
13
|
import { getUserMessageText, streamPiHistory, } from "./history-mapper.js";
|
|
13
14
|
import { PiCliRuntime } from "./cli-runtime.js";
|
|
14
15
|
import { revertPiConversation } from "./rewind.js";
|
|
@@ -1567,24 +1568,33 @@ export class PiRpcAgentClient {
|
|
|
1567
1568
|
});
|
|
1568
1569
|
}
|
|
1569
1570
|
async isAvailable() {
|
|
1570
|
-
const launch = await this.resolvePiLaunch();
|
|
1571
|
-
const availability = await checkProviderLaunchAvailable(launch);
|
|
1572
|
-
if (!availability.available) {
|
|
1573
|
-
return false;
|
|
1574
|
-
}
|
|
1575
|
-
const runtimeSession = await this.runtime.startSession({ cwd: homedir() }).catch(() => null);
|
|
1576
|
-
if (!runtimeSession) {
|
|
1577
|
-
return false;
|
|
1578
|
-
}
|
|
1579
1571
|
try {
|
|
1580
|
-
return
|
|
1572
|
+
return await withTimeout((async () => {
|
|
1573
|
+
const launch = await this.resolvePiLaunch();
|
|
1574
|
+
const availability = await checkProviderLaunchAvailable(launch);
|
|
1575
|
+
if (!availability.available) {
|
|
1576
|
+
return false;
|
|
1577
|
+
}
|
|
1578
|
+
const runtimeSession = await this.runtime
|
|
1579
|
+
.startSession({ cwd: homedir() })
|
|
1580
|
+
.catch(() => null);
|
|
1581
|
+
if (!runtimeSession) {
|
|
1582
|
+
return false;
|
|
1583
|
+
}
|
|
1584
|
+
try {
|
|
1585
|
+
return (await runtimeSession.getAvailableModels()).length > 0;
|
|
1586
|
+
}
|
|
1587
|
+
catch {
|
|
1588
|
+
return false;
|
|
1589
|
+
}
|
|
1590
|
+
finally {
|
|
1591
|
+
await runtimeSession.close().catch(() => undefined);
|
|
1592
|
+
}
|
|
1593
|
+
})(), 2000, "Pi availability check timed out");
|
|
1581
1594
|
}
|
|
1582
1595
|
catch {
|
|
1583
1596
|
return false;
|
|
1584
1597
|
}
|
|
1585
|
-
finally {
|
|
1586
|
-
await runtimeSession.close().catch(() => undefined);
|
|
1587
|
-
}
|
|
1588
1598
|
}
|
|
1589
1599
|
async getDiagnostic() {
|
|
1590
1600
|
try {
|
|
@@ -1633,6 +1643,9 @@ export class PiRpcAgentClient {
|
|
|
1633
1643
|
}
|
|
1634
1644
|
return {
|
|
1635
1645
|
diagnostic: formatProviderDiagnostic("Pi", [
|
|
1646
|
+
...(await buildCommandResolutionDiagnosticRows(launch, {
|
|
1647
|
+
knownBinaryNames: [launch.command],
|
|
1648
|
+
})),
|
|
1636
1649
|
...(await buildBinaryDiagnosticRows(launch, availability)),
|
|
1637
1650
|
{ label: "Configured providers", value: configuredProvidersValue },
|
|
1638
1651
|
{
|