@getpaseo/server 0.1.25 → 0.1.26
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/client/daemon-client.d.ts +4 -20
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +25 -71
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/provider-launch-config.d.ts +11 -0
- package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
- package/dist/server/server/agent/provider-launch-config.js +65 -10
- package/dist/server/server/agent/provider-launch-config.js.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts +0 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +27 -58
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.js +49 -8
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +38 -9
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +10 -3
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/exports.d.ts +1 -0
- package/dist/server/server/exports.d.ts.map +1 -1
- package/dist/server/server/exports.js +1 -0
- package/dist/server/server/exports.js.map +1 -1
- package/dist/server/server/logger.d.ts.map +1 -1
- package/dist/server/server/logger.js +31 -1
- package/dist/server/server/logger.js.map +1 -1
- package/dist/server/server/pid-lock.d.ts +2 -2
- package/dist/server/server/pid-lock.d.ts.map +1 -1
- package/dist/server/server/pid-lock.js +2 -2
- package/dist/server/server/pid-lock.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts +1 -1
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +12 -16
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/shared/messages.d.ts +0 -454
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +0 -9
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/src/server/agent/provider-launch-config.js +65 -10
- package/dist/src/server/agent/provider-launch-config.js.map +1 -1
- package/dist/src/server/agent/providers/claude-agent.js +27 -58
- package/dist/src/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/src/server/agent/providers/codex-app-server-agent.js +49 -8
- package/dist/src/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/src/server/agent/providers/opencode-agent.js +38 -9
- package/dist/src/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/src/server/bootstrap.js +10 -3
- package/dist/src/server/bootstrap.js.map +1 -1
- package/dist/src/server/pid-lock.js +2 -2
- package/dist/src/server/pid-lock.js.map +1 -1
- package/dist/src/server/websocket-server.js +12 -16
- package/dist/src/server/websocket-server.js.map +1 -1
- package/dist/src/shared/messages.js +0 -9
- package/dist/src/shared/messages.js.map +1 -1
- package/package.json +4 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import { promises } from "node:fs";
|
|
@@ -9,7 +9,7 @@ import { mapClaudeCanceledToolCall, mapClaudeCompletedToolCall, mapClaudeFailedT
|
|
|
9
9
|
import { isTaskNotificationUserContent, mapTaskNotificationSystemRecordToToolCall, mapTaskNotificationUserContentToToolCall, } from "./claude/task-notification-tool-call.js";
|
|
10
10
|
import { buildClaudeModelFamilyAliases, buildClaudeSelectableModelIds, listClaudeCatalogModels, } from "./claude/model-catalog.js";
|
|
11
11
|
import { buildToolCallDisplayModel } from "../../../shared/tool-call-display.js";
|
|
12
|
-
import { applyProviderEnv,
|
|
12
|
+
import { applyProviderEnv, } from "../provider-launch-config.js";
|
|
13
13
|
import { getOrchestratorModeInstructions } from "../orchestrator-instructions.js";
|
|
14
14
|
/*
|
|
15
15
|
* Routing invariant:
|
|
@@ -175,21 +175,6 @@ const REWIND_COMMAND = {
|
|
|
175
175
|
};
|
|
176
176
|
const INTERRUPT_TOOL_USE_PLACEHOLDER = "[Request interrupted by user for tool use]";
|
|
177
177
|
const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
178
|
-
function whichClaude() {
|
|
179
|
-
try {
|
|
180
|
-
return execSync("which claude", { encoding: "utf8" }).trim() || null;
|
|
181
|
-
}
|
|
182
|
-
catch {
|
|
183
|
-
return null;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
function resolveClaudeBinary() {
|
|
187
|
-
const claudePath = whichClaude();
|
|
188
|
-
if (claudePath) {
|
|
189
|
-
return claudePath;
|
|
190
|
-
}
|
|
191
|
-
throw new Error("Claude CLI not found. Install claude or configure agents.providers.claude.command.mode='replace'.");
|
|
192
|
-
}
|
|
193
178
|
function resolveClaudeSpawnCommand(spawnOptions, runtimeSettings) {
|
|
194
179
|
const commandConfig = runtimeSettings?.command;
|
|
195
180
|
if (!commandConfig || commandConfig.mode === "default") {
|
|
@@ -201,7 +186,7 @@ function resolveClaudeSpawnCommand(spawnOptions, runtimeSettings) {
|
|
|
201
186
|
if (commandConfig.mode === "append") {
|
|
202
187
|
return {
|
|
203
188
|
command: spawnOptions.command,
|
|
204
|
-
args: [...(commandConfig.args ?? [])
|
|
189
|
+
args: [...spawnOptions.args, ...(commandConfig.args ?? [])],
|
|
205
190
|
};
|
|
206
191
|
}
|
|
207
192
|
return {
|
|
@@ -210,17 +195,17 @@ function resolveClaudeSpawnCommand(spawnOptions, runtimeSettings) {
|
|
|
210
195
|
};
|
|
211
196
|
}
|
|
212
197
|
function applyRuntimeSettingsToClaudeOptions(options, runtimeSettings) {
|
|
213
|
-
const hasEnvOverrides = Object.keys(runtimeSettings?.env ?? {}).length > 0;
|
|
214
|
-
const commandMode = runtimeSettings?.command?.mode;
|
|
215
|
-
const needsCustomSpawn = hasEnvOverrides || commandMode === "append" || commandMode === "replace";
|
|
216
|
-
if (!needsCustomSpawn) {
|
|
217
|
-
return options;
|
|
218
|
-
}
|
|
219
198
|
return {
|
|
220
199
|
...options,
|
|
221
200
|
spawnClaudeCodeProcess: (spawnOptions) => {
|
|
222
201
|
const resolved = resolveClaudeSpawnCommand(spawnOptions, runtimeSettings);
|
|
223
|
-
|
|
202
|
+
// The SDK defaults to spawning "node" via PATH lookup, which fails when
|
|
203
|
+
// running from the managed runtime bundle where node isn't in PATH.
|
|
204
|
+
// Always use process.execPath — the actual node binary running the daemon.
|
|
205
|
+
const command = resolved.command === spawnOptions.command
|
|
206
|
+
? process.execPath
|
|
207
|
+
: resolved.command;
|
|
208
|
+
return spawn(command, resolved.args, {
|
|
224
209
|
cwd: spawnOptions.cwd,
|
|
225
210
|
env: applyProviderEnv(spawnOptions.env, runtimeSettings),
|
|
226
211
|
signal: spawnOptions.signal,
|
|
@@ -963,25 +948,11 @@ export class ClaudeAgentClient {
|
|
|
963
948
|
this.defaults = options.defaults;
|
|
964
949
|
this.logger = options.logger.child({ module: "agent", provider: "claude" });
|
|
965
950
|
this.runtimeSettings = options.runtimeSettings;
|
|
966
|
-
this.claudePath = whichClaude();
|
|
967
|
-
if (this.claudePath) {
|
|
968
|
-
try {
|
|
969
|
-
const version = execSync(`${this.claudePath} --version`, { encoding: "utf8" }).trim();
|
|
970
|
-
this.logger.trace({ claudePath: this.claudePath, version }, "Resolved Claude binary");
|
|
971
|
-
}
|
|
972
|
-
catch {
|
|
973
|
-
this.logger.trace({ claudePath: this.claudePath }, "Resolved Claude binary (version unknown)");
|
|
974
|
-
}
|
|
975
|
-
}
|
|
976
|
-
else {
|
|
977
|
-
this.logger.trace("Claude binary not found in PATH; SDK will use bundled binary");
|
|
978
|
-
}
|
|
979
951
|
}
|
|
980
952
|
async createSession(config) {
|
|
981
953
|
const claudeConfig = this.assertConfig(config);
|
|
982
954
|
return new ClaudeAgentSession(claudeConfig, {
|
|
983
955
|
defaults: this.defaults,
|
|
984
|
-
claudePath: this.claudePath,
|
|
985
956
|
runtimeSettings: this.runtimeSettings,
|
|
986
957
|
logger: this.logger,
|
|
987
958
|
});
|
|
@@ -996,7 +967,6 @@ export class ClaudeAgentClient {
|
|
|
996
967
|
const claudeConfig = this.assertConfig(mergedConfig);
|
|
997
968
|
return new ClaudeAgentSession(claudeConfig, {
|
|
998
969
|
defaults: this.defaults,
|
|
999
|
-
claudePath: this.claudePath,
|
|
1000
970
|
runtimeSettings: this.runtimeSettings,
|
|
1001
971
|
handle,
|
|
1002
972
|
logger: this.logger,
|
|
@@ -1026,11 +996,11 @@ export class ClaudeAgentClient {
|
|
|
1026
996
|
return descriptors;
|
|
1027
997
|
}
|
|
1028
998
|
async isAvailable() {
|
|
1029
|
-
const
|
|
1030
|
-
if (
|
|
1031
|
-
return
|
|
999
|
+
const command = this.runtimeSettings?.command;
|
|
1000
|
+
if (command?.mode === "replace") {
|
|
1001
|
+
return fs.existsSync(command.argv[0]);
|
|
1032
1002
|
}
|
|
1033
|
-
return
|
|
1003
|
+
return true;
|
|
1034
1004
|
}
|
|
1035
1005
|
assertConfig(config) {
|
|
1036
1006
|
if (config.provider !== "claude") {
|
|
@@ -1141,7 +1111,6 @@ class ClaudeAgentSession {
|
|
|
1141
1111
|
};
|
|
1142
1112
|
this.config = config;
|
|
1143
1113
|
this.defaults = options.defaults;
|
|
1144
|
-
this.claudePath = options.claudePath;
|
|
1145
1114
|
this.runtimeSettings = options.runtimeSettings;
|
|
1146
1115
|
this.logger = options.logger;
|
|
1147
1116
|
const handle = options.handle;
|
|
@@ -1805,7 +1774,6 @@ class ClaudeAgentSession {
|
|
|
1805
1774
|
permissionMode: this.currentMode,
|
|
1806
1775
|
agents: this.defaults?.agents,
|
|
1807
1776
|
canUseTool: this.handlePermissionRequest,
|
|
1808
|
-
...(this.claudePath ? { pathToClaudeCodeExecutable: this.claudePath } : {}),
|
|
1809
1777
|
// Use Claude Code preset system prompt and load CLAUDE.md files
|
|
1810
1778
|
// Append provider-agnostic system prompt and orchestrator instructions for agents.
|
|
1811
1779
|
systemPrompt: {
|
|
@@ -2540,26 +2508,27 @@ class ClaudeAgentSession {
|
|
|
2540
2508
|
}
|
|
2541
2509
|
try {
|
|
2542
2510
|
this.logger.trace("interruptActiveTurn: calling query.interrupt()...");
|
|
2543
|
-
|
|
2544
|
-
await queryToInterrupt.interrupt();
|
|
2545
|
-
this.logger.trace({ durationMs: Date.now() - t0 }, "interruptActiveTurn: query.interrupt() returned");
|
|
2546
|
-
// After interrupt(), the query iterator is done (returns done: true).
|
|
2547
|
-
// Clear it so ensureQuery() creates a fresh query for the next turn.
|
|
2548
|
-
// Also end the input stream and call return() to clean up the SDK process.
|
|
2511
|
+
await this.awaitWithTimeout(queryToInterrupt.interrupt(), "interruptActiveTurn query.interrupt()");
|
|
2549
2512
|
this.input?.end();
|
|
2550
2513
|
this.logger.trace("interruptActiveTurn: calling query.return()...");
|
|
2551
|
-
|
|
2552
|
-
await queryToInterrupt.return?.();
|
|
2553
|
-
this.logger.trace({ durationMs: Date.now() - t1 }, "interruptActiveTurn: query.return() returned");
|
|
2514
|
+
await this.awaitWithTimeout(queryToInterrupt.return?.(), "interruptActiveTurn query.return()");
|
|
2554
2515
|
this.query = null;
|
|
2555
2516
|
this.input = null;
|
|
2556
2517
|
this.queryRestartNeeded = false;
|
|
2557
2518
|
}
|
|
2558
2519
|
catch (error) {
|
|
2559
2520
|
this.logger.warn({ err: error }, "Failed to interrupt active turn");
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2521
|
+
this.input?.end();
|
|
2522
|
+
if (this.query === queryToInterrupt) {
|
|
2523
|
+
this.query = null;
|
|
2524
|
+
this.input = null;
|
|
2525
|
+
}
|
|
2526
|
+
// Try to force-close the iterator to unblock the pump's q.next() call.
|
|
2527
|
+
this.awaitWithTimeout(queryToInterrupt.return?.(), "interruptActiveTurn force return after failure").catch(() => { });
|
|
2528
|
+
// Disown the current pump and start a fresh one immediately so
|
|
2529
|
+
// autonomous wakes are not lost while waiting for the next user turn.
|
|
2530
|
+
this.queryPumpPromise = null;
|
|
2531
|
+
this.startQueryPump();
|
|
2563
2532
|
}
|
|
2564
2533
|
}
|
|
2565
2534
|
handleSidechainMessage(message, parentToolUseId) {
|