@getpaseo/server 0.1.74 → 0.1.75

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.
Files changed (113) hide show
  1. package/dist/scripts/supervisor-entrypoint.js +2 -21
  2. package/dist/scripts/supervisor-entrypoint.js.map +1 -1
  3. package/dist/scripts/supervisor-log-config.js +31 -0
  4. package/dist/scripts/supervisor-log-config.js.map +1 -0
  5. package/dist/server/server/agent/agent-manager.d.ts +4 -1
  6. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  7. package/dist/server/server/agent/agent-manager.js +139 -14
  8. package/dist/server/server/agent/agent-manager.js.map +1 -1
  9. package/dist/server/server/agent/agent-prompt.d.ts.map +1 -1
  10. package/dist/server/server/agent/agent-prompt.js +27 -0
  11. package/dist/server/server/agent/agent-prompt.js.map +1 -1
  12. package/dist/server/server/agent/agent-sdk-types.d.ts +2 -0
  13. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  14. package/dist/server/server/agent/agent-sdk-types.js +3 -0
  15. package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
  16. package/dist/server/server/agent/foreground-run-state.d.ts +1 -1
  17. package/dist/server/server/agent/foreground-run-state.d.ts.map +1 -1
  18. package/dist/server/server/agent/foreground-run-state.js +2 -4
  19. package/dist/server/server/agent/foreground-run-state.js.map +1 -1
  20. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
  21. package/dist/server/server/agent/provider-manifest.js +3 -3
  22. package/dist/server/server/agent/provider-manifest.js.map +1 -1
  23. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  24. package/dist/server/server/agent/provider-registry.js +13 -5
  25. package/dist/server/server/agent/provider-registry.js.map +1 -1
  26. package/dist/server/server/agent/providers/acp-agent.d.ts +39 -1
  27. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
  28. package/dist/server/server/agent/providers/acp-agent.js +121 -14
  29. package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
  30. package/dist/server/server/agent/providers/claude/agent.d.ts +1 -1
  31. package/dist/server/server/agent/providers/claude/agent.d.ts.map +1 -1
  32. package/dist/server/server/agent/providers/claude/agent.js +80 -24
  33. package/dist/server/server/agent/providers/claude/agent.js.map +1 -1
  34. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +7 -1
  35. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts.map +1 -1
  36. package/dist/server/server/agent/providers/codex/app-server-transport.js +28 -1
  37. package/dist/server/server/agent/providers/codex/app-server-transport.js.map +1 -1
  38. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -1
  39. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +36 -7
  40. package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -1
  41. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +14 -4
  42. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  43. package/dist/server/server/agent/providers/codex-app-server-agent.js +121 -15
  44. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  45. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +10 -1
  46. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
  47. package/dist/server/server/agent/providers/copilot-acp-agent.js +114 -7
  48. package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -1
  49. package/dist/server/server/agent/providers/opencode-agent.d.ts +6 -4
  50. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  51. package/dist/server/server/agent/providers/opencode-agent.js +48 -34
  52. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  53. package/dist/server/server/agent/providers/pi-direct-agent.d.ts +1 -1
  54. package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -1
  55. package/dist/server/server/agent/providers/pi-direct-agent.js +2 -15
  56. package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -1
  57. package/dist/server/server/agent/providers/provider-runner.d.ts +1 -1
  58. package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -1
  59. package/dist/server/server/agent/providers/provider-runner.js +2 -1
  60. package/dist/server/server/agent/providers/provider-runner.js.map +1 -1
  61. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts +1 -1
  62. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts.map +1 -1
  63. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +2 -1
  64. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js.map +1 -1
  65. package/dist/server/server/agent/stt-manager.d.ts +5 -1
  66. package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
  67. package/dist/server/server/agent/stt-manager.js +3 -2
  68. package/dist/server/server/agent/stt-manager.js.map +1 -1
  69. package/dist/server/server/bootstrap.d.ts +5 -0
  70. package/dist/server/server/bootstrap.d.ts.map +1 -1
  71. package/dist/server/server/bootstrap.js.map +1 -1
  72. package/dist/server/server/dictation/dictation-stream-manager.d.ts +2 -0
  73. package/dist/server/server/dictation/dictation-stream-manager.d.ts.map +1 -1
  74. package/dist/server/server/dictation/dictation-stream-manager.js +2 -1
  75. package/dist/server/server/dictation/dictation-stream-manager.js.map +1 -1
  76. package/dist/server/server/logger.js +1 -1
  77. package/dist/server/server/logger.js.map +1 -1
  78. package/dist/server/server/persisted-config.d.ts +18 -0
  79. package/dist/server/server/persisted-config.d.ts.map +1 -1
  80. package/dist/server/server/persisted-config.js +2 -0
  81. package/dist/server/server/persisted-config.js.map +1 -1
  82. package/dist/server/server/schedule/service.d.ts.map +1 -1
  83. package/dist/server/server/schedule/service.js +14 -1
  84. package/dist/server/server/schedule/service.js.map +1 -1
  85. package/dist/server/server/session.d.ts +3 -0
  86. package/dist/server/server/session.d.ts.map +1 -1
  87. package/dist/server/server/session.js +89 -18
  88. package/dist/server/server/session.js.map +1 -1
  89. package/dist/server/server/speech/providers/local/config.d.ts +5 -0
  90. package/dist/server/server/speech/providers/local/config.d.ts.map +1 -1
  91. package/dist/server/server/speech/providers/local/config.js +35 -0
  92. package/dist/server/server/speech/providers/local/config.js.map +1 -1
  93. package/dist/server/server/speech/speech-config-resolver.d.ts.map +1 -1
  94. package/dist/server/server/speech/speech-config-resolver.js +1 -0
  95. package/dist/server/server/speech/speech-config-resolver.js.map +1 -1
  96. package/dist/server/server/speech/speech-runtime.d.ts +2 -0
  97. package/dist/server/server/speech/speech-runtime.d.ts.map +1 -1
  98. package/dist/server/server/speech/speech-runtime.js +2 -0
  99. package/dist/server/server/speech/speech-runtime.js.map +1 -1
  100. package/dist/server/server/voice/voice-turn-controller.d.ts +1 -0
  101. package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
  102. package/dist/server/server/voice/voice-turn-controller.js +1 -1
  103. package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
  104. package/dist/server/server/websocket-server.d.ts.map +1 -1
  105. package/dist/server/server/websocket-server.js +2 -0
  106. package/dist/server/server/websocket-server.js.map +1 -1
  107. package/dist/src/server/agent/agent-sdk-types.js +3 -0
  108. package/dist/src/server/agent/agent-sdk-types.js.map +1 -1
  109. package/dist/src/server/agent/provider-manifest.js +3 -3
  110. package/dist/src/server/agent/provider-manifest.js.map +1 -1
  111. package/dist/src/server/persisted-config.js +2 -0
  112. package/dist/src/server/persisted-config.js.map +1 -1
  113. package/package.json +3 -3
@@ -1,3 +1,4 @@
1
+ import { getAgentStreamEventTurnId, } from "../agent-sdk-types.js";
1
2
  import { homedir } from "node:os";
2
3
  import { randomUUID } from "node:crypto";
3
4
  import * as fsSync from "node:fs";
@@ -13,7 +14,7 @@ import { findExecutable, isCommandAvailable } from "../../../utils/executable.js
13
14
  import { spawnProcess } from "../../../utils/spawn.js";
14
15
  import { extractCodexTerminalSessionId, nonEmptyString } from "./tool-call-mapper-utils.js";
15
16
  import { buildCodexFeatures, codexModelSupportsFastMode } from "./codex-feature-definitions.js";
16
- import { CodexAppServerClient } from "./codex/app-server-transport.js";
17
+ import { CodexAppServerClient, } from "./codex/app-server-transport.js";
17
18
  import { renderProviderImageOutputAsAssistantMarkdown, } from "./provider-image-output.js";
18
19
  import { formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, resolveBinaryVersion, toDiagnosticErrorMessage, } from "./diagnostic-utils.js";
19
20
  import { runProviderTurn } from "./provider-runner.js";
@@ -1911,13 +1912,53 @@ function buildCodexAppServerInitializeParams() {
1911
1912
  },
1912
1913
  };
1913
1914
  }
1915
+ function normalizeOpenAICompatibleBaseUrl(value) {
1916
+ const trimmed = value.trim();
1917
+ if (!trimmed) {
1918
+ return null;
1919
+ }
1920
+ const withoutTrailingSlashes = trimmed.replace(/\/+$/u, "");
1921
+ if (withoutTrailingSlashes.endsWith("/v1")) {
1922
+ return withoutTrailingSlashes;
1923
+ }
1924
+ return `${withoutTrailingSlashes}/v1`;
1925
+ }
1926
+ function buildCodexCustomProviderConfig(runtimeSettings, customProvider) {
1927
+ if (customProvider?.extends !== CODEX_PROVIDER) {
1928
+ return null;
1929
+ }
1930
+ const baseUrl = runtimeSettings?.env?.OPENAI_BASE_URL;
1931
+ if (typeof baseUrl !== "string") {
1932
+ return null;
1933
+ }
1934
+ const normalizedBaseUrl = normalizeOpenAICompatibleBaseUrl(baseUrl);
1935
+ if (!normalizedBaseUrl) {
1936
+ return null;
1937
+ }
1938
+ const providerConfig = {
1939
+ name: customProvider.label,
1940
+ base_url: normalizedBaseUrl,
1941
+ wire_api: "responses",
1942
+ };
1943
+ if (runtimeSettings?.env?.OPENAI_API_KEY?.trim()) {
1944
+ providerConfig.env_key = "OPENAI_API_KEY";
1945
+ providerConfig.requires_openai_auth = false;
1946
+ }
1947
+ return {
1948
+ model_provider: customProvider.id,
1949
+ model_providers: {
1950
+ [customProvider.id]: providerConfig,
1951
+ },
1952
+ };
1953
+ }
1914
1954
  class CodexAppServerAgentSession {
1915
- constructor(config, resumeHandle, logger, spawnAppServer, deps = {}, ephemeral = false, goalsEnabled = false) {
1955
+ constructor(config, resumeHandle, logger, spawnAppServer, deps = {}, ephemeral = false, goalsEnabled = false, agentId) {
1916
1956
  this.resumeHandle = resumeHandle;
1917
1957
  this.spawnAppServer = spawnAppServer;
1918
1958
  this.deps = deps;
1919
1959
  this.ephemeral = ephemeral;
1920
1960
  this.goalsEnabled = goalsEnabled;
1961
+ this.agentId = agentId;
1921
1962
  this.provider = CODEX_PROVIDER;
1922
1963
  this.capabilities = CODEX_APP_SERVER_CAPABILITIES;
1923
1964
  this.currentThreadId = null;
@@ -1956,7 +1997,11 @@ class CodexAppServerAgentSession {
1956
1997
  this.collaborationModes = [];
1957
1998
  this.resolvedCollaborationMode = null;
1958
1999
  this.cachedSkills = [];
1959
- this.logger = logger.child({ module: "agent", provider: CODEX_PROVIDER });
2000
+ this.logger = logger.child({
2001
+ module: "agent",
2002
+ provider: CODEX_PROVIDER,
2003
+ agentId: this.agentId,
2004
+ });
1960
2005
  if (config.modeId === undefined) {
1961
2006
  throw new Error("Codex agent requires modeId to be specified");
1962
2007
  }
@@ -1990,7 +2035,7 @@ class CodexAppServerAgentSession {
1990
2035
  if (this.connected)
1991
2036
  return;
1992
2037
  const child = await this.spawnAppServer();
1993
- this.client = new CodexAppServerClient(child, this.logger);
2038
+ this.client = new CodexAppServerClient(child, this.logger, () => this.traceContext());
1994
2039
  this.client.setNotificationHandler((method, params) => this.handleNotification(method, params));
1995
2040
  this.registerRequestHandlers();
1996
2041
  await this.client.request("initialize", buildCodexAppServerInitializeParams());
@@ -2003,6 +2048,13 @@ class CodexAppServerAgentSession {
2003
2048
  }
2004
2049
  this.connected = true;
2005
2050
  }
2051
+ traceContext() {
2052
+ return {
2053
+ agentId: this.agentId,
2054
+ sessionId: this.currentThreadId ?? undefined,
2055
+ turnId: this.activeForegroundTurnId ?? undefined,
2056
+ };
2057
+ }
2006
2058
  async loadCollaborationModes() {
2007
2059
  if (!this.client)
2008
2060
  return;
@@ -2023,7 +2075,13 @@ class CodexAppServerAgentSession {
2023
2075
  });
2024
2076
  }
2025
2077
  catch (error) {
2026
- this.logger.trace({ error }, "Failed to load collaboration modes");
2078
+ this.logger.trace({
2079
+ agentId: this.agentId,
2080
+ provider: CODEX_PROVIDER,
2081
+ sessionId: this.currentThreadId,
2082
+ turnId: this.activeForegroundTurnId ?? undefined,
2083
+ error,
2084
+ }, "provider.codex.metadata.collaboration_modes_failed");
2027
2085
  this.collaborationModes = [];
2028
2086
  }
2029
2087
  this.refreshResolvedCollaborationMode();
@@ -2054,7 +2112,13 @@ class CodexAppServerAgentSession {
2054
2112
  this.cachedSkills = skills;
2055
2113
  }
2056
2114
  catch (error) {
2057
- this.logger.trace({ error }, "Failed to load skills list");
2115
+ this.logger.trace({
2116
+ agentId: this.agentId,
2117
+ provider: CODEX_PROVIDER,
2118
+ sessionId: this.currentThreadId,
2119
+ turnId: this.activeForegroundTurnId ?? undefined,
2120
+ error,
2121
+ }, "provider.codex.metadata.skills_failed");
2058
2122
  this.cachedSkills = [];
2059
2123
  }
2060
2124
  }
@@ -2212,9 +2276,10 @@ class CodexAppServerAgentSession {
2212
2276
  await this.client.request("thread/resume", params);
2213
2277
  }
2214
2278
  catch (error) {
2215
- this.logger.warn({ error }, "Failed to resume Codex thread, starting new thread");
2216
- this.currentThreadId = null;
2217
- await this.ensureThread();
2279
+ const threadId = this.currentThreadId;
2280
+ const message = error instanceof Error ? error.message : String(error);
2281
+ this.logger.warn({ error, threadId }, "Failed to resume persisted Codex thread");
2282
+ throw new Error(`Failed to resume Codex thread ${threadId}: ${message}`, { cause: error });
2218
2283
  }
2219
2284
  }
2220
2285
  parseSlashCommandInput(text) {
@@ -2807,6 +2872,9 @@ class CodexAppServerAgentSession {
2807
2872
  if (this.config.extra?.codex) {
2808
2873
  Object.assign(innerConfig, this.config.extra.codex);
2809
2874
  }
2875
+ if (this.deps.customCodexConfig) {
2876
+ Object.assign(innerConfig, this.deps.customCodexConfig);
2877
+ }
2810
2878
  return Object.keys(innerConfig).length > 0 ? innerConfig : null;
2811
2879
  }
2812
2880
  async buildUserInput(prompt) {
@@ -2821,6 +2889,13 @@ class CodexAppServerAgentSession {
2821
2889
  notifySubscribers(event) {
2822
2890
  const turnId = this.activeForegroundTurnId;
2823
2891
  const tagged = turnId ? { ...event, turnId } : event;
2892
+ this.logger.trace({
2893
+ agentId: this.agentId,
2894
+ provider: CODEX_PROVIDER,
2895
+ sessionId: this.currentThreadId,
2896
+ turnId: getAgentStreamEventTurnId(tagged),
2897
+ event: tagged,
2898
+ }, "provider.codex.event_emit");
2824
2899
  for (const callback of this.subscribers) {
2825
2900
  try {
2826
2901
  callback(tagged);
@@ -2835,6 +2910,7 @@ class CodexAppServerAgentSession {
2835
2910
  }
2836
2911
  handleNotification(method, params) {
2837
2912
  const parsed = CodexNotificationSchema.parse({ method, params });
2913
+ this.traceParsedNotification(method, params, parsed);
2838
2914
  switch (parsed.kind) {
2839
2915
  case "thread_started":
2840
2916
  this.handleThreadStartedNotification(parsed);
@@ -2890,6 +2966,17 @@ class CodexAppServerAgentSession {
2890
2966
  this.warnUnknownNotificationMethod(parsed.method, parsed.params);
2891
2967
  }
2892
2968
  }
2969
+ traceParsedNotification(method, params, parsed) {
2970
+ this.logger.trace({
2971
+ agentId: this.agentId,
2972
+ provider: CODEX_PROVIDER,
2973
+ sessionId: this.currentThreadId,
2974
+ turnId: this.activeForegroundTurnId ?? undefined,
2975
+ method,
2976
+ params,
2977
+ parsed,
2978
+ }, "provider.codex.parsed_event");
2979
+ }
2893
2980
  getSubAgentCallIdForThread(threadId) {
2894
2981
  if (!threadId || threadId === this.currentThreadId) {
2895
2982
  return null;
@@ -3385,7 +3472,14 @@ class CodexAppServerAgentSession {
3385
3472
  return;
3386
3473
  }
3387
3474
  this.warnedUnknownNotificationMethods.add(method);
3388
- this.logger.trace({ method, params }, "Unhandled Codex app-server notification method");
3475
+ this.logger.trace({
3476
+ agentId: this.agentId,
3477
+ provider: CODEX_PROVIDER,
3478
+ sessionId: this.currentThreadId,
3479
+ turnId: this.activeForegroundTurnId ?? undefined,
3480
+ method,
3481
+ params,
3482
+ }, "provider.codex.event_unhandled");
3389
3483
  }
3390
3484
  warnInvalidNotificationPayload(method, params) {
3391
3485
  const key = method;
@@ -3618,6 +3712,12 @@ export class CodexAppServerAgentClient {
3618
3712
  this.capabilities = CODEX_APP_SERVER_CAPABILITIES;
3619
3713
  this.goalsEnabledPromise = null;
3620
3714
  }
3715
+ sessionDeps() {
3716
+ return {
3717
+ ...this.deps,
3718
+ customCodexConfig: buildCodexCustomProviderConfig(this.runtimeSettings, this.deps.customProvider),
3719
+ };
3720
+ }
3621
3721
  resolveGoalsEnabled() {
3622
3722
  if (!this.goalsEnabledPromise) {
3623
3723
  this.goalsEnabledPromise = (async () => {
@@ -3625,7 +3725,11 @@ export class CodexAppServerAgentClient {
3625
3725
  const launchPrefix = await resolveCodexLaunchPrefix(this.runtimeSettings);
3626
3726
  const versionOutput = await resolveBinaryVersion(launchPrefix.command);
3627
3727
  const enabled = codexVersionAtLeast(versionOutput, CODEX_GOALS_MIN_VERSION);
3628
- this.logger.trace({ versionOutput, enabled }, "Resolved codex goals feature gate");
3728
+ this.logger.trace({
3729
+ provider: CODEX_PROVIDER,
3730
+ versionOutput,
3731
+ enabled,
3732
+ }, "provider.codex.config.goals_resolved");
3629
3733
  return enabled;
3630
3734
  }
3631
3735
  catch (error) {
@@ -3643,9 +3747,11 @@ export class CodexAppServerAgentClient {
3643
3747
  args.push("--enable", "goals");
3644
3748
  }
3645
3749
  this.logger.trace({
3750
+ agentId: options?.agentId,
3751
+ provider: CODEX_PROVIDER,
3646
3752
  launchPrefix,
3647
3753
  goalsEnabled: options?.goalsEnabled === true,
3648
- }, "Spawning Codex app server");
3754
+ }, "provider.codex.spawn");
3649
3755
  const child = spawnProcess(launchPrefix.command, args, {
3650
3756
  detached: process.platform !== "win32",
3651
3757
  stdio: ["pipe", "pipe", "pipe"],
@@ -3665,7 +3771,7 @@ export class CodexAppServerAgentClient {
3665
3771
  }
3666
3772
  const sessionConfig = { ...config, provider: CODEX_PROVIDER };
3667
3773
  const goalsEnabled = await this.resolveGoalsEnabled();
3668
- const session = new CodexAppServerAgentSession(sessionConfig, null, this.logger, () => this.spawnAppServer(launchContext?.env, { goalsEnabled }), this.deps, options?.persistSession === false, goalsEnabled);
3774
+ const session = new CodexAppServerAgentSession(sessionConfig, null, this.logger, () => this.spawnAppServer(launchContext?.env, { goalsEnabled, agentId: launchContext?.agentId }), this.sessionDeps(), options?.persistSession === false, goalsEnabled, launchContext?.agentId);
3669
3775
  await session.connect();
3670
3776
  return session;
3671
3777
  }
@@ -3678,13 +3784,13 @@ export class CodexAppServerAgentClient {
3678
3784
  cwd: overrides?.cwd ?? storedConfig.cwd ?? process.cwd(),
3679
3785
  };
3680
3786
  const goalsEnabled = await this.resolveGoalsEnabled();
3681
- const session = new CodexAppServerAgentSession(merged, handle, this.logger, () => this.spawnAppServer(launchContext?.env, { goalsEnabled }), this.deps, false, goalsEnabled);
3787
+ const session = new CodexAppServerAgentSession(merged, handle, this.logger, () => this.spawnAppServer(launchContext?.env, { goalsEnabled, agentId: launchContext?.agentId }), this.sessionDeps(), false, goalsEnabled, launchContext?.agentId);
3682
3788
  await session.connect();
3683
3789
  return session;
3684
3790
  }
3685
3791
  async listPersistedAgents(options) {
3686
3792
  const child = await this.spawnAppServer();
3687
- const client = this.deps._createCodexClient?.(child, this.logger) ??
3793
+ const client = this.deps._createCodexClient?.(child, this.logger, () => ({})) ??
3688
3794
  new CodexAppServerClient(child, this.logger);
3689
3795
  try {
3690
3796
  await client.request("initialize", buildCodexAppServerInitializeParams());