@getpaseo/server 0.1.78 → 0.1.80

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 (192) hide show
  1. package/dist/scripts/dev-runner.js +1 -13
  2. package/dist/scripts/dev-runner.js.map +1 -1
  3. package/dist/scripts/supervisor-entrypoint.js +17 -3
  4. package/dist/scripts/supervisor-entrypoint.js.map +1 -1
  5. package/dist/server/client/daemon-client.d.ts +34 -2
  6. package/dist/server/client/daemon-client.d.ts.map +1 -1
  7. package/dist/server/client/daemon-client.js +138 -1
  8. package/dist/server/client/daemon-client.js.map +1 -1
  9. package/dist/server/server/agent/agent-manager.d.ts +6 -0
  10. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  11. package/dist/server/server/agent/agent-manager.js +40 -5
  12. package/dist/server/server/agent/agent-manager.js.map +1 -1
  13. package/dist/server/server/agent/agent-metadata-generator.js +1 -1
  14. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
  15. package/dist/server/server/agent/agent-sdk-types.d.ts +5 -0
  16. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  17. package/dist/server/server/agent/agent-storage.d.ts +3 -0
  18. package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
  19. package/dist/server/server/agent/agent-storage.js +58 -22
  20. package/dist/server/server/agent/agent-storage.js.map +1 -1
  21. package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +51 -0
  22. package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts.map +1 -0
  23. package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +140 -0
  24. package/dist/server/server/agent/create-agent-lifecycle-dispatch.js.map +1 -0
  25. package/dist/server/server/agent/import-sessions.js +2 -2
  26. package/dist/server/server/agent/import-sessions.js.map +1 -1
  27. package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
  28. package/dist/server/server/agent/mcp-server.js +202 -99
  29. package/dist/server/server/agent/mcp-server.js.map +1 -1
  30. package/dist/server/server/agent/provider-registry.js +2 -2
  31. package/dist/server/server/agent/provider-registry.js.map +1 -1
  32. package/dist/server/server/agent/providers/acp-agent.d.ts +3 -0
  33. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
  34. package/dist/server/server/agent/providers/acp-agent.js +44 -4
  35. package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
  36. package/dist/server/server/agent/providers/claude/agent.d.ts.map +1 -1
  37. package/dist/server/server/agent/providers/claude/agent.js +17 -9
  38. package/dist/server/server/agent/providers/claude/agent.js.map +1 -1
  39. package/dist/server/server/agent/providers/claude/project-dir.d.ts +5 -0
  40. package/dist/server/server/agent/providers/claude/project-dir.d.ts.map +1 -0
  41. package/dist/server/server/agent/providers/claude/project-dir.js +40 -0
  42. package/dist/server/server/agent/providers/claude/project-dir.js.map +1 -0
  43. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -1
  44. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +13 -2
  45. package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -1
  46. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +4 -0
  47. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  48. package/dist/server/server/agent/providers/codex-app-server-agent.js +57 -19
  49. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  50. package/dist/server/server/agent/providers/cursor-acp-agent.d.ts.map +1 -1
  51. package/dist/server/server/agent/providers/cursor-acp-agent.js +11 -1
  52. package/dist/server/server/agent/providers/cursor-acp-agent.js.map +1 -1
  53. package/dist/server/server/agent/providers/generic-acp-agent.d.ts +2 -0
  54. package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
  55. package/dist/server/server/agent/providers/generic-acp-agent.js +2 -0
  56. package/dist/server/server/agent/providers/generic-acp-agent.js.map +1 -1
  57. package/dist/server/server/agent/providers/opencode/runtime.d.ts +1 -0
  58. package/dist/server/server/agent/providers/opencode/runtime.d.ts.map +1 -1
  59. package/dist/server/server/agent/providers/opencode/runtime.js.map +1 -1
  60. package/dist/server/server/agent/providers/opencode/server-manager.d.ts +4 -0
  61. package/dist/server/server/agent/providers/opencode/server-manager.d.ts.map +1 -1
  62. package/dist/server/server/agent/providers/opencode/server-manager.js +18 -2
  63. package/dist/server/server/agent/providers/opencode/server-manager.js.map +1 -1
  64. package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +2 -0
  65. package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts.map +1 -1
  66. package/dist/server/server/agent/providers/opencode/test-server-manager.js +1 -0
  67. package/dist/server/server/agent/providers/opencode/test-server-manager.js.map +1 -1
  68. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts +2 -0
  69. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts.map +1 -1
  70. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js +1 -1
  71. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js.map +1 -1
  72. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  73. package/dist/server/server/agent/providers/opencode-agent.js +7 -2
  74. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  75. package/dist/server/server/agent/providers/{pi-direct-agent.d.ts → pi/agent.d.ts} +38 -29
  76. package/dist/server/server/agent/providers/pi/agent.d.ts.map +1 -0
  77. package/dist/server/server/agent/providers/pi/agent.js +829 -0
  78. package/dist/server/server/agent/providers/pi/agent.js.map +1 -0
  79. package/dist/server/server/agent/providers/pi/cli-runtime.d.ts +18 -0
  80. package/dist/server/server/agent/providers/pi/cli-runtime.d.ts.map +1 -0
  81. package/dist/server/server/agent/providers/pi/cli-runtime.js +218 -0
  82. package/dist/server/server/agent/providers/pi/cli-runtime.js.map +1 -0
  83. package/dist/server/server/agent/providers/pi/history-mapper.d.ts +5 -0
  84. package/dist/server/server/agent/providers/pi/history-mapper.d.ts.map +1 -0
  85. package/dist/server/server/agent/providers/pi/history-mapper.js +139 -0
  86. package/dist/server/server/agent/providers/pi/history-mapper.js.map +1 -0
  87. package/dist/server/server/agent/providers/pi/rpc-types.d.ts +185 -0
  88. package/dist/server/server/agent/providers/pi/rpc-types.d.ts.map +1 -0
  89. package/dist/server/server/agent/providers/pi/rpc-types.js +2 -0
  90. package/dist/server/server/agent/providers/pi/rpc-types.js.map +1 -0
  91. package/dist/server/server/agent/providers/pi/runtime.d.ts +48 -0
  92. package/dist/server/server/agent/providers/pi/runtime.d.ts.map +1 -0
  93. package/dist/server/server/agent/providers/pi/runtime.js +52 -0
  94. package/dist/server/server/agent/providers/pi/runtime.js.map +1 -0
  95. package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +10 -0
  96. package/dist/server/server/agent/providers/pi/session-descriptor.d.ts.map +1 -0
  97. package/dist/server/server/agent/providers/pi/session-descriptor.js +300 -0
  98. package/dist/server/server/agent/providers/pi/session-descriptor.js.map +1 -0
  99. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts +52 -0
  100. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts.map +1 -0
  101. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js +109 -0
  102. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js.map +1 -0
  103. package/dist/server/server/agent/providers/pi/tool-call-mapper.d.ts +112 -0
  104. package/dist/server/server/agent/providers/pi/tool-call-mapper.d.ts.map +1 -0
  105. package/dist/server/server/agent/providers/pi/tool-call-mapper.js +284 -0
  106. package/dist/server/server/agent/providers/pi/tool-call-mapper.js.map +1 -0
  107. package/dist/server/server/agent/system-prompt.d.ts +2 -0
  108. package/dist/server/server/agent/system-prompt.d.ts.map +1 -0
  109. package/dist/server/server/agent/system-prompt.js +8 -0
  110. package/dist/server/server/agent/system-prompt.js.map +1 -0
  111. package/dist/server/server/bootstrap.d.ts +1 -0
  112. package/dist/server/server/bootstrap.d.ts.map +1 -1
  113. package/dist/server/server/bootstrap.js +15 -1
  114. package/dist/server/server/bootstrap.js.map +1 -1
  115. package/dist/server/server/config.d.ts.map +1 -1
  116. package/dist/server/server/config.js +6 -1
  117. package/dist/server/server/config.js.map +1 -1
  118. package/dist/server/server/daemon-config-store.js +1 -0
  119. package/dist/server/server/daemon-config-store.js.map +1 -1
  120. package/dist/server/server/persisted-config.d.ts +51 -44
  121. package/dist/server/server/persisted-config.d.ts.map +1 -1
  122. package/dist/server/server/persisted-config.js +1 -0
  123. package/dist/server/server/persisted-config.js.map +1 -1
  124. package/dist/server/server/pid-lock.d.ts +2 -2
  125. package/dist/server/server/session.d.ts +21 -0
  126. package/dist/server/server/session.d.ts.map +1 -1
  127. package/dist/server/server/session.js +232 -10
  128. package/dist/server/server/session.js.map +1 -1
  129. package/dist/server/server/websocket-server.d.ts +11 -1
  130. package/dist/server/server/websocket-server.d.ts.map +1 -1
  131. package/dist/server/server/websocket-server.js +10 -2
  132. package/dist/server/server/websocket-server.js.map +1 -1
  133. package/dist/server/server/workspace-git-service.d.ts +5 -1
  134. package/dist/server/server/workspace-git-service.d.ts.map +1 -1
  135. package/dist/server/server/workspace-git-service.js +122 -62
  136. package/dist/server/server/workspace-git-service.js.map +1 -1
  137. package/dist/server/shared/importable-providers.d.ts +1 -1
  138. package/dist/server/shared/importable-providers.d.ts.map +1 -1
  139. package/dist/server/shared/importable-providers.js +1 -1
  140. package/dist/server/shared/importable-providers.js.map +1 -1
  141. package/dist/server/shared/messages.d.ts +2187 -24
  142. package/dist/server/shared/messages.d.ts.map +1 -1
  143. package/dist/server/shared/messages.js +108 -0
  144. package/dist/server/shared/messages.js.map +1 -1
  145. package/dist/server/terminal/terminal-manager.d.ts +1 -0
  146. package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
  147. package/dist/server/terminal/terminal-manager.js +8 -0
  148. package/dist/server/terminal/terminal-manager.js.map +1 -1
  149. package/dist/server/terminal/terminal-session-controller.d.ts +1 -0
  150. package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -1
  151. package/dist/server/terminal/terminal-session-controller.js +26 -0
  152. package/dist/server/terminal/terminal-session-controller.js.map +1 -1
  153. package/dist/server/terminal/terminal.d.ts +1 -0
  154. package/dist/server/terminal/terminal.d.ts.map +1 -1
  155. package/dist/server/terminal/terminal.js +32 -10
  156. package/dist/server/terminal/terminal.js.map +1 -1
  157. package/dist/server/terminal/worker-terminal-manager.d.ts.map +1 -1
  158. package/dist/server/terminal/worker-terminal-manager.js +18 -0
  159. package/dist/server/terminal/worker-terminal-manager.js.map +1 -1
  160. package/dist/server/utils/branch-slug.d.ts +14 -0
  161. package/dist/server/utils/branch-slug.d.ts.map +1 -0
  162. package/dist/server/utils/branch-slug.js +49 -0
  163. package/dist/server/utils/branch-slug.js.map +1 -0
  164. package/dist/server/utils/directory-suggestions.js +2 -2
  165. package/dist/server/utils/directory-suggestions.js.map +1 -1
  166. package/dist/server/utils/path.d.ts +1 -0
  167. package/dist/server/utils/path.d.ts.map +1 -1
  168. package/dist/server/utils/path.js +31 -0
  169. package/dist/server/utils/path.js.map +1 -1
  170. package/dist/server/utils/run-git-command.d.ts.map +1 -1
  171. package/dist/server/utils/run-git-command.js +3 -1
  172. package/dist/server/utils/run-git-command.js.map +1 -1
  173. package/dist/server/utils/worktree.d.ts +1 -12
  174. package/dist/server/utils/worktree.d.ts.map +1 -1
  175. package/dist/server/utils/worktree.js +2 -52
  176. package/dist/server/utils/worktree.js.map +1 -1
  177. package/dist/src/server/persisted-config.js +1 -0
  178. package/dist/src/server/persisted-config.js.map +1 -1
  179. package/dist/src/shared/messages.js +108 -0
  180. package/dist/src/shared/messages.js.map +1 -1
  181. package/package.json +13 -11
  182. package/dist/server/server/agent/orchestrator-instructions.d.ts +0 -7
  183. package/dist/server/server/agent/orchestrator-instructions.d.ts.map +0 -1
  184. package/dist/server/server/agent/orchestrator-instructions.js +0 -51
  185. package/dist/server/server/agent/orchestrator-instructions.js.map +0 -1
  186. package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +0 -1
  187. package/dist/server/server/agent/providers/pi-direct-agent.js +0 -1151
  188. package/dist/server/server/agent/providers/pi-direct-agent.js.map +0 -1
  189. package/dist/server/server/agent/providers/pi-session-recovery-policy.d.ts +0 -22
  190. package/dist/server/server/agent/providers/pi-session-recovery-policy.d.ts.map +0 -1
  191. package/dist/server/server/agent/providers/pi-session-recovery-policy.js +0 -51
  192. package/dist/server/server/agent/providers/pi-session-recovery-policy.js.map +0 -1
@@ -18,7 +18,7 @@ import { ScheduleRunSchema, ScheduleSummarySchema, StoredScheduleSchema, } from
18
18
  import { getAgentProviderDefinition } from "./provider-manifest.js";
19
19
  import { resolveAndValidateCreateAgentMode } from "./create-agent-mode.js";
20
20
  import { resolveSnapshotCwd } from "./provider-snapshot-manager.js";
21
- import { AgentModelSchema, AgentProviderEnum, AgentStatusEnum, ProviderSummarySchema, parseDurationString, resolveRequiredProviderModel, sanitizePermissionRequest, serializeSnapshotWithMetadata, toScheduleSummary, waitForAgentWithTimeout, } from "./mcp-shared.js";
21
+ import { AgentModelSchema, AgentProviderEnum, AgentStatusEnum, ProviderModeSchema, ProviderSummarySchema, parseDurationString, resolveRequiredProviderModel, sanitizePermissionRequest, serializeSnapshotWithMetadata, toScheduleSummary, waitForAgentWithTimeout, } from "./mcp-shared.js";
22
22
  import { sendPromptToAgent, setupFinishNotification, startAgentRun } from "./agent-prompt.js";
23
23
  import { toWorktreeRequestError } from "../worktree-errors.js";
24
24
  import { join } from "node:path";
@@ -53,6 +53,45 @@ function mapModeAcrossProviders(sourceMode, sourceProvider, targetProvider) {
53
53
  }
54
54
  return sourceMode;
55
55
  }
56
+ function addModelVisibleStructuredContent(result) {
57
+ if (result.structuredContent === undefined || result.content.length > 0) {
58
+ return result;
59
+ }
60
+ return {
61
+ ...result,
62
+ content: [
63
+ {
64
+ type: "text",
65
+ text: formatStructuredContentForModel(result.structuredContent),
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ function formatStructuredContentForModel(structuredContent) {
71
+ if (!structuredContent ||
72
+ typeof structuredContent !== "object" ||
73
+ Array.isArray(structuredContent)) {
74
+ return JSON.stringify(structuredContent, null, 2);
75
+ }
76
+ const record = structuredContent;
77
+ const summary = [];
78
+ for (const [key, value] of Object.entries(record)) {
79
+ if (!Array.isArray(value)) {
80
+ continue;
81
+ }
82
+ summary.push(`${key}_count=${value.length}`);
83
+ const ids = value
84
+ .map((item) => item && typeof item === "object" && !Array.isArray(item)
85
+ ? item.id
86
+ : null)
87
+ .filter((id) => typeof id === "string" && id.length > 0);
88
+ if (ids.length === value.length && ids.length > 0) {
89
+ summary.push(`${key}_ids=${ids.join(",")}`);
90
+ }
91
+ }
92
+ const json = JSON.stringify(structuredContent, null, 2);
93
+ return summary.length > 0 ? `${summary.join("\n")}\n\n${json}` : json;
94
+ }
56
95
  function parseTimestamp(value) {
57
96
  if (!value) {
58
97
  return 0;
@@ -264,6 +303,8 @@ export async function createAgentMcpServer(options) {
264
303
  name: "agent-mcp",
265
304
  version: "2.0.0",
266
305
  });
306
+ const registerRawTool = server.registerTool.bind(server);
307
+ const registerTool = (name, config, handler) => registerRawTool(name, config, (async (args, extra) => addModelVisibleStructuredContent(await handler(args, extra))));
267
308
  const resolveCallerAgent = () => {
268
309
  if (!callerAgentId) {
269
310
  return null;
@@ -379,6 +420,53 @@ export async function createAgentMcpServer(options) {
379
420
  return false;
380
421
  }
381
422
  }, { message: "provider must be provider/model, for example codex/gpt-5.4" });
423
+ const ProviderOrProviderModelInputSchema = AgentProviderEnum.trim()
424
+ .min(1, "provider is required")
425
+ .refine((value) => {
426
+ if (!value.includes("/")) {
427
+ return true;
428
+ }
429
+ try {
430
+ resolveRequiredProviderModel(value);
431
+ return true;
432
+ }
433
+ catch {
434
+ return false;
435
+ }
436
+ }, { message: "provider must be provider or provider/model, for example codex/gpt-5.4" });
437
+ const CreateAgentSettingsInputSchema = z
438
+ .object({
439
+ modeId: z.string().optional().describe("Session mode to configure before the first run."),
440
+ thinkingOptionId: z.string().optional().describe("Thinking option ID."),
441
+ features: z
442
+ .record(z.unknown())
443
+ .optional()
444
+ .describe("Provider-specific feature values, for example { fast_mode: true } for Codex."),
445
+ })
446
+ .strict();
447
+ const UpdateAgentSettingsInputSchema = z
448
+ .object({
449
+ modeId: z.string().optional().describe("Session mode ID."),
450
+ model: z.string().nullable().optional().describe("Model ID. Pass null to clear."),
451
+ thinkingOptionId: z
452
+ .string()
453
+ .nullable()
454
+ .optional()
455
+ .describe("Thinking option ID. Pass null to clear."),
456
+ features: z
457
+ .record(z.unknown())
458
+ .optional()
459
+ .describe("Provider-specific feature values, for example { fast_mode: true } for Codex."),
460
+ })
461
+ .strict();
462
+ const InspectProviderSettingsInputSchema = z
463
+ .object({
464
+ modeId: z.string().optional().describe("Draft session mode ID."),
465
+ model: z.string().optional().describe("Draft model ID."),
466
+ thinkingOptionId: z.string().optional().describe("Draft thinking option ID."),
467
+ features: z.record(z.unknown()).optional().describe("Draft provider feature values."),
468
+ })
469
+ .strict();
382
470
  const agentToAgentInputSchema = {
383
471
  cwd: z
384
472
  .string()
@@ -391,21 +479,13 @@ export async function createAgentMcpServer(options) {
391
479
  .max(60, "Title must be 60 characters or fewer")
392
480
  .describe("Short descriptive title (<= 60 chars) summarizing the agent's focus."),
393
481
  provider: ProviderModelInputSchema.describe("Required provider/model pair, for example codex/gpt-5.4."),
394
- thinking: z.string().optional().describe("Thinking option ID"),
395
- features: z
396
- .record(z.unknown())
397
- .optional()
398
- .describe("Provider-specific feature values, for example { fast_mode: true } for Codex."),
399
482
  labels: z.record(z.string(), z.string()).optional().describe("Labels to set on the agent"),
483
+ settings: CreateAgentSettingsInputSchema.optional().describe("Initial runtime settings for the new agent."),
400
484
  initialPrompt: z
401
485
  .string()
402
486
  .trim()
403
487
  .min(1, "initialPrompt is required")
404
488
  .describe("Required first task to run immediately after creation."),
405
- mode: z
406
- .string()
407
- .optional()
408
- .describe("Optional session mode for the new agent. Required when the new agent uses a different provider than the caller agent."),
409
489
  background: z
410
490
  .boolean()
411
491
  .optional()
@@ -428,21 +508,13 @@ export async function createAgentMcpServer(options) {
428
508
  .max(60, "Title must be 60 characters or fewer")
429
509
  .describe("Short descriptive title (<= 60 chars) summarizing the agent's focus."),
430
510
  provider: ProviderModelInputSchema.describe("Required provider/model pair, for example codex/gpt-5.4."),
431
- thinking: z.string().optional().describe("Thinking option ID"),
432
- features: z
433
- .record(z.unknown())
434
- .optional()
435
- .describe("Provider-specific feature values, for example { fast_mode: true } for Codex."),
436
511
  labels: z.record(z.string(), z.string()).optional().describe("Labels to set on the agent"),
512
+ settings: CreateAgentSettingsInputSchema.optional().describe("Initial runtime settings for the new agent."),
437
513
  initialPrompt: z
438
514
  .string()
439
515
  .trim()
440
516
  .min(1, "initialPrompt is required")
441
517
  .describe("Required first task to run immediately after creation."),
442
- mode: z
443
- .string()
444
- .optional()
445
- .describe("Optional session mode to configure before the first run."),
446
518
  worktreeName: z
447
519
  .string()
448
520
  .optional()
@@ -476,16 +548,16 @@ export async function createAgentMcpServer(options) {
476
548
  const createAgentInputSchema = callerAgentId ? agentToAgentInputSchema : topLevelInputSchema;
477
549
  const agentToAgentCreateAgentArgsSchema = z.object(agentToAgentInputSchema).strict();
478
550
  const topLevelCreateAgentArgsSchema = z.object(topLevelInputSchema).strict();
479
- const listProviderFeaturesInputSchema = {
480
- provider: AgentProviderEnum,
481
- cwd: z.string().describe("Working directory used to resolve provider feature availability."),
482
- modeId: z.string().optional(),
483
- model: z.string().optional(),
484
- thinkingOptionId: z.string().optional(),
485
- featureValues: z.record(z.unknown()).optional(),
551
+ const inspectProviderInputSchema = {
552
+ provider: ProviderOrProviderModelInputSchema.describe("Provider ID, optionally with a model ID (for example codex or codex/gpt-5.4)."),
553
+ cwd: z
554
+ .string()
555
+ .optional()
556
+ .describe("Working directory used to resolve provider feature availability."),
557
+ settings: InspectProviderSettingsInputSchema.optional().describe("Draft provider settings used to compute available features."),
486
558
  };
487
559
  if (options.voiceOnly || options.enableVoiceTools || callerContext?.enableVoiceTools) {
488
- server.registerTool("speak", {
560
+ registerTool("speak", {
489
561
  title: "Speak",
490
562
  description: "Speak text to the user via daemon-managed voice output. Blocks until playback completes.",
491
563
  inputSchema: {
@@ -554,6 +626,7 @@ export async function createAgentMcpServer(options) {
554
626
  throw new Error(`Parent agent ${parentAgentId} not found`);
555
627
  }
556
628
  const provider = resolvedProviderModel.provider;
629
+ const settings = callerArgs.settings;
557
630
  const resolvedCwd = resolveChildAgentCwd({
558
631
  parentCwd: parentAgent.cwd,
559
632
  requestedCwd: callerArgs.cwd,
@@ -561,7 +634,7 @@ export async function createAgentMcpServer(options) {
561
634
  allowCustomCwd: callerContext?.allowCustomCwd ?? true,
562
635
  });
563
636
  const resolvedMode = resolveAndValidateCreateAgentMode({
564
- requestedMode: callerArgs.mode,
637
+ requestedMode: settings?.modeId,
565
638
  targetProvider: provider,
566
639
  parent: {
567
640
  provider: parentAgent.provider,
@@ -577,8 +650,8 @@ export async function createAgentMcpServer(options) {
577
650
  background: callerArgs.background ?? false,
578
651
  normalizedTitle: callerArgs.title.trim(),
579
652
  model: resolvedProviderModel.model,
580
- thinking: callerArgs.thinking,
581
- features: callerArgs.features,
653
+ thinkingOptionId: settings?.thinkingOptionId,
654
+ features: settings?.features,
582
655
  labels: callerArgs.labels,
583
656
  notifyOnFinish: callerArgs.notifyOnFinish ?? false,
584
657
  resolvedCwd,
@@ -589,9 +662,9 @@ export async function createAgentMcpServer(options) {
589
662
  const resolveTopLevelCreateAgentArgs = async (args) => {
590
663
  const topLevelArgs = topLevelCreateAgentArgsSchema.parse(args);
591
664
  const resolvedProviderModel = resolveRequiredProviderModel(topLevelArgs.provider);
592
- const { cwd, mode, worktreeName, baseBranch, refName, action, githubPrNumber } = topLevelArgs;
665
+ const { cwd, settings, worktreeName, baseBranch, refName, action, githubPrNumber } = topLevelArgs;
593
666
  const resolvedMode = resolveAndValidateCreateAgentMode({
594
- requestedMode: mode,
667
+ requestedMode: settings?.modeId,
595
668
  targetProvider: resolvedProviderModel.provider,
596
669
  parent: null,
597
670
  availableModes: getAvailableModeIds(resolvedProviderModel.provider),
@@ -644,8 +717,8 @@ export async function createAgentMcpServer(options) {
644
717
  background: topLevelArgs.background ?? false,
645
718
  normalizedTitle: topLevelArgs.title.trim(),
646
719
  model: resolvedProviderModel.model,
647
- thinking: topLevelArgs.thinking,
648
- features: topLevelArgs.features,
720
+ thinkingOptionId: settings?.thinkingOptionId,
721
+ features: settings?.features,
649
722
  labels: topLevelArgs.labels,
650
723
  notifyOnFinish: topLevelArgs.notifyOnFinish ?? false,
651
724
  resolvedCwd,
@@ -653,7 +726,7 @@ export async function createAgentMcpServer(options) {
653
726
  setupContinuation,
654
727
  };
655
728
  };
656
- server.registerTool("create_agent", {
729
+ registerTool("create_agent", {
657
730
  title: "Create agent",
658
731
  description: "Create an agent tied to a working directory. Requires provider/model, for example codex/gpt-5.4. Do not guess; call list_providers and list_models first if uncertain. Optionally run an initial prompt immediately or create a git worktree for the agent.",
659
732
  inputSchema: createAgentInputSchema,
@@ -675,7 +748,7 @@ export async function createAgentMcpServer(options) {
675
748
  const resolved = callerAgentId
676
749
  ? resolveCallerCreateAgentArgs(args, callerAgentId)
677
750
  : await resolveTopLevelCreateAgentArgs(args);
678
- const { provider, initialPrompt, background, normalizedTitle, model, thinking, features, labels, notifyOnFinish, resolvedCwd, resolvedMode, setupContinuation, } = resolved;
751
+ const { provider, initialPrompt, background, normalizedTitle, model, thinkingOptionId, features, labels, notifyOnFinish, resolvedCwd, resolvedMode, setupContinuation, } = resolved;
679
752
  const childAgentDefaultLabels = callerContext?.childAgentDefaultLabels;
680
753
  const mergedLabels = {
681
754
  ...(callerAgentId ? { [PARENT_AGENT_ID_LABEL]: callerAgentId } : {}),
@@ -688,7 +761,7 @@ export async function createAgentMcpServer(options) {
688
761
  modeId: resolvedMode,
689
762
  title: normalizedTitle ?? undefined,
690
763
  model,
691
- thinkingOptionId: thinking,
764
+ thinkingOptionId,
692
765
  featureValues: features,
693
766
  }, undefined, Object.keys(mergedLabels).length > 0 ? { labels: mergedLabels } : undefined);
694
767
  setupContinuation?.startAfterAgentCreate({
@@ -766,25 +839,7 @@ export async function createAgentMcpServer(options) {
766
839
  };
767
840
  return response;
768
841
  });
769
- server.registerTool("set_agent_feature", {
770
- title: "Set agent feature",
771
- description: "Set a provider-specific feature on an existing agent, such as Codex fast_mode.",
772
- inputSchema: {
773
- agentId: z.string(),
774
- featureId: z.string().trim().min(1),
775
- value: z.unknown(),
776
- },
777
- outputSchema: {
778
- success: z.boolean(),
779
- },
780
- }, async ({ agentId, featureId, value }) => {
781
- await agentManager.setAgentFeature(agentId, featureId, value);
782
- return {
783
- content: [],
784
- structuredContent: ensureValidJson({ success: true }),
785
- };
786
- });
787
- server.registerTool("wait_for_agent", {
842
+ registerTool("wait_for_agent", {
788
843
  title: "Wait for agent",
789
844
  description: "Block until the agent requests permission or the current run completes. Returns the pending permission (if any) and recent activity summary.",
790
845
  inputSchema: {
@@ -851,7 +906,7 @@ export async function createAgentMcpServer(options) {
851
906
  cleanup();
852
907
  }
853
908
  });
854
- server.registerTool("send_agent_prompt", {
909
+ registerTool("send_agent_prompt", {
855
910
  title: "Send agent prompt",
856
911
  description: "Send a task to a running agent. Returns immediately after the agent begins processing.",
857
912
  inputSchema: {
@@ -934,7 +989,7 @@ export async function createAgentMcpServer(options) {
934
989
  };
935
990
  return response;
936
991
  });
937
- server.registerTool("get_agent_status", {
992
+ registerTool("get_agent_status", {
938
993
  title: "Get agent status",
939
994
  description: "Return the latest snapshot for an agent, including lifecycle state, capabilities, and pending permissions.",
940
995
  inputSchema: {
@@ -969,7 +1024,7 @@ export async function createAgentMcpServer(options) {
969
1024
  }),
970
1025
  };
971
1026
  });
972
- server.registerTool("list_agents", {
1027
+ registerTool("list_agents", {
973
1028
  title: "List agents",
974
1029
  description: "List recent agents as compact metadata.",
975
1030
  inputSchema: {
@@ -1015,7 +1070,7 @@ export async function createAgentMcpServer(options) {
1015
1070
  structuredContent: ensureValidJson({ agents }),
1016
1071
  };
1017
1072
  });
1018
- server.registerTool("cancel_agent", {
1073
+ registerTool("cancel_agent", {
1019
1074
  title: "Cancel agent run",
1020
1075
  description: "Abort the agent's current run but keep the agent alive for future tasks.",
1021
1076
  inputSchema: {
@@ -1034,7 +1089,7 @@ export async function createAgentMcpServer(options) {
1034
1089
  structuredContent: ensureValidJson({ success }),
1035
1090
  };
1036
1091
  });
1037
- server.registerTool("archive_agent", {
1092
+ registerTool("archive_agent", {
1038
1093
  title: "Archive agent",
1039
1094
  description: "Archive an agent (soft-delete). The agent is interrupted if running and removed from the active list.",
1040
1095
  inputSchema: {
@@ -1051,7 +1106,7 @@ export async function createAgentMcpServer(options) {
1051
1106
  structuredContent: ensureValidJson({ success: true }),
1052
1107
  };
1053
1108
  });
1054
- server.registerTool("kill_agent", {
1109
+ registerTool("kill_agent", {
1055
1110
  title: "Kill agent",
1056
1111
  description: "Terminate an agent session permanently.",
1057
1112
  inputSchema: {
@@ -1068,18 +1123,33 @@ export async function createAgentMcpServer(options) {
1068
1123
  structuredContent: ensureValidJson({ success: true }),
1069
1124
  };
1070
1125
  });
1071
- server.registerTool("update_agent", {
1126
+ registerTool("update_agent", {
1072
1127
  title: "Update agent",
1073
- description: "Update an agent name and/or labels.",
1128
+ description: "Update an agent name, labels, and/or runtime settings.",
1074
1129
  inputSchema: {
1075
1130
  agentId: z.string(),
1076
1131
  name: z.string().optional(),
1077
1132
  labels: z.record(z.string(), z.string()).optional().describe("Labels to set on the agent"),
1133
+ settings: UpdateAgentSettingsInputSchema.optional().describe("Runtime settings to apply to the agent."),
1078
1134
  },
1079
1135
  outputSchema: {
1080
1136
  success: z.boolean(),
1081
1137
  },
1082
- }, async ({ agentId, name, labels }) => {
1138
+ }, async ({ agentId, name, labels, settings }) => {
1139
+ if (settings?.modeId !== undefined) {
1140
+ await agentManager.setAgentMode(agentId, settings.modeId);
1141
+ }
1142
+ if (settings?.model !== undefined) {
1143
+ await agentManager.setAgentModel(agentId, settings.model);
1144
+ }
1145
+ if (settings?.thinkingOptionId !== undefined) {
1146
+ await agentManager.setAgentThinkingOption(agentId, settings.thinkingOptionId);
1147
+ }
1148
+ if (settings?.features) {
1149
+ for (const [featureId, value] of Object.entries(settings.features)) {
1150
+ await agentManager.setAgentFeature(agentId, featureId, value);
1151
+ }
1152
+ }
1083
1153
  const trimmedName = name?.trim();
1084
1154
  if (trimmedName) {
1085
1155
  const record = await agentStorage.get(agentId);
@@ -1101,7 +1171,7 @@ export async function createAgentMcpServer(options) {
1101
1171
  structuredContent: ensureValidJson({ success: true }),
1102
1172
  };
1103
1173
  });
1104
- server.registerTool("list_terminals", {
1174
+ registerTool("list_terminals", {
1105
1175
  title: "List terminals",
1106
1176
  description: "List terminals for a working directory or across all working directories.",
1107
1177
  inputSchema: {
@@ -1134,7 +1204,7 @@ export async function createAgentMcpServer(options) {
1134
1204
  structuredContent: ensureValidJson({ terminals }),
1135
1205
  };
1136
1206
  });
1137
- server.registerTool("create_terminal", {
1207
+ registerTool("create_terminal", {
1138
1208
  title: "Create terminal",
1139
1209
  description: "Create a terminal session for a working directory.",
1140
1210
  inputSchema: {
@@ -1162,7 +1232,7 @@ export async function createAgentMcpServer(options) {
1162
1232
  }),
1163
1233
  };
1164
1234
  });
1165
- server.registerTool("kill_terminal", {
1235
+ registerTool("kill_terminal", {
1166
1236
  title: "Kill terminal",
1167
1237
  description: "Kill an existing terminal session.",
1168
1238
  inputSchema: {
@@ -1185,7 +1255,7 @@ export async function createAgentMcpServer(options) {
1185
1255
  structuredContent: ensureValidJson({ success: true }),
1186
1256
  };
1187
1257
  });
1188
- server.registerTool("capture_terminal", {
1258
+ registerTool("capture_terminal", {
1189
1259
  title: "Capture terminal",
1190
1260
  description: "Capture plain-text terminal output lines from a terminal session.",
1191
1261
  inputSchema: {
@@ -1221,7 +1291,7 @@ export async function createAgentMcpServer(options) {
1221
1291
  }),
1222
1292
  };
1223
1293
  });
1224
- server.registerTool("send_terminal_keys", {
1294
+ registerTool("send_terminal_keys", {
1225
1295
  title: "Send terminal keys",
1226
1296
  description: "Send literal text or special key tokens to a terminal session.",
1227
1297
  inputSchema: {
@@ -1249,7 +1319,7 @@ export async function createAgentMcpServer(options) {
1249
1319
  structuredContent: ensureValidJson({ success: true }),
1250
1320
  };
1251
1321
  });
1252
- server.registerTool("create_schedule", {
1322
+ registerTool("create_schedule", {
1253
1323
  title: "Create schedule",
1254
1324
  description: "Create a recurring schedule that runs on an agent or a new agent.",
1255
1325
  inputSchema: {
@@ -1314,7 +1384,7 @@ export async function createAgentMcpServer(options) {
1314
1384
  structuredContent: ensureValidJson(toScheduleSummary(schedule)),
1315
1385
  };
1316
1386
  });
1317
- server.registerTool("list_schedules", {
1387
+ registerTool("list_schedules", {
1318
1388
  title: "List schedules",
1319
1389
  description: "List all schedules managed by the daemon.",
1320
1390
  inputSchema: {},
@@ -1331,7 +1401,7 @@ export async function createAgentMcpServer(options) {
1331
1401
  structuredContent: ensureValidJson({ schedules }),
1332
1402
  };
1333
1403
  });
1334
- server.registerTool("inspect_schedule", {
1404
+ registerTool("inspect_schedule", {
1335
1405
  title: "Inspect schedule",
1336
1406
  description: "Inspect a schedule and its run history.",
1337
1407
  inputSchema: {
@@ -1348,7 +1418,7 @@ export async function createAgentMcpServer(options) {
1348
1418
  structuredContent: ensureValidJson(schedule),
1349
1419
  };
1350
1420
  });
1351
- server.registerTool("pause_schedule", {
1421
+ registerTool("pause_schedule", {
1352
1422
  title: "Pause schedule",
1353
1423
  description: "Pause an active schedule.",
1354
1424
  inputSchema: {
@@ -1367,7 +1437,7 @@ export async function createAgentMcpServer(options) {
1367
1437
  structuredContent: ensureValidJson({ success: true }),
1368
1438
  };
1369
1439
  });
1370
- server.registerTool("resume_schedule", {
1440
+ registerTool("resume_schedule", {
1371
1441
  title: "Resume schedule",
1372
1442
  description: "Resume a paused schedule.",
1373
1443
  inputSchema: {
@@ -1386,7 +1456,7 @@ export async function createAgentMcpServer(options) {
1386
1456
  structuredContent: ensureValidJson({ success: true }),
1387
1457
  };
1388
1458
  });
1389
- server.registerTool("delete_schedule", {
1459
+ registerTool("delete_schedule", {
1390
1460
  title: "Delete schedule",
1391
1461
  description: "Delete a schedule permanently.",
1392
1462
  inputSchema: {
@@ -1405,7 +1475,7 @@ export async function createAgentMcpServer(options) {
1405
1475
  structuredContent: ensureValidJson({ success: true }),
1406
1476
  };
1407
1477
  });
1408
- server.registerTool("update_schedule", {
1478
+ registerTool("update_schedule", {
1409
1479
  title: "Update schedule",
1410
1480
  description: "Update an existing schedule. Only provided fields are changed; omitted fields remain unchanged.",
1411
1481
  inputSchema: {
@@ -1459,7 +1529,7 @@ export async function createAgentMcpServer(options) {
1459
1529
  structuredContent: ensureValidJson(schedule),
1460
1530
  };
1461
1531
  });
1462
- server.registerTool("schedule_logs", {
1532
+ registerTool("schedule_logs", {
1463
1533
  title: "Schedule logs",
1464
1534
  description: "Get the run history (logs) for a schedule.",
1465
1535
  inputSchema: {
@@ -1478,7 +1548,7 @@ export async function createAgentMcpServer(options) {
1478
1548
  structuredContent: ensureValidJson({ runs }),
1479
1549
  };
1480
1550
  });
1481
- server.registerTool("list_providers", {
1551
+ registerTool("list_providers", {
1482
1552
  title: "List providers",
1483
1553
  description: "List configured agent providers, availability, and their modes.",
1484
1554
  inputSchema: {},
@@ -1492,7 +1562,7 @@ export async function createAgentMcpServer(options) {
1492
1562
  structuredContent: ensureValidJson({ providers }),
1493
1563
  };
1494
1564
  });
1495
- server.registerTool("list_models", {
1565
+ registerTool("list_models", {
1496
1566
  title: "List models",
1497
1567
  description: "List models for an agent provider.",
1498
1568
  inputSchema: {
@@ -1522,32 +1592,65 @@ export async function createAgentMcpServer(options) {
1522
1592
  }),
1523
1593
  };
1524
1594
  });
1525
- server.registerTool("list_provider_features", {
1526
- title: "List provider features",
1527
- description: "List provider-specific features available for a draft agent configuration, such as Codex fast_mode.",
1528
- inputSchema: listProviderFeaturesInputSchema,
1595
+ registerTool("inspect_provider", {
1596
+ title: "Inspect provider",
1597
+ description: "Inspect compact provider capabilities for orchestration, including modes and draft feature settings. Use list_models for the full model list.",
1598
+ inputSchema: inspectProviderInputSchema,
1529
1599
  outputSchema: {
1530
1600
  provider: AgentProviderEnum,
1601
+ label: z.string().nullable().optional(),
1602
+ description: z.string().nullable().optional(),
1603
+ enabled: z.boolean(),
1604
+ status: z.string(),
1605
+ modes: z.array(ProviderModeSchema).nullish(),
1606
+ selectedModel: z.string().nullable(),
1531
1607
  features: z.array(AgentFeatureSchema),
1532
1608
  },
1533
- }, async ({ provider, cwd, modeId, model, thinkingOptionId, featureValues }) => {
1534
- const features = await agentManager.listDraftFeatures({
1609
+ }, async ({ provider, cwd, settings }) => {
1610
+ const resolvedProviderModel = resolveScheduleProviderAndModel({
1535
1611
  provider,
1536
- cwd: expandUserPath(cwd),
1537
- ...(modeId ? { modeId } : {}),
1538
- ...(model ? { model } : {}),
1539
- ...(thinkingOptionId ? { thinkingOptionId } : {}),
1540
- ...(featureValues ? { featureValues } : {}),
1612
+ defaultProvider: provider,
1613
+ });
1614
+ const providerId = resolvedProviderModel.provider;
1615
+ if (!providerRegistry) {
1616
+ throw new Error("Provider registry is not configured");
1617
+ }
1618
+ const definition = providerRegistry[providerId];
1619
+ if (!definition) {
1620
+ throw new Error(`Provider ${providerId} is not configured`);
1621
+ }
1622
+ const summary = await resolveProviderSummary(definition, childLogger);
1623
+ if (!definition.enabled) {
1624
+ throw new Error(`Provider '${providerId}' is disabled`);
1625
+ }
1626
+ if (summary.status !== "available") {
1627
+ throw new Error(summary.error ?? `Provider '${providerId}' is unavailable`);
1628
+ }
1629
+ const resolvedCwd = resolveScopedCwd(cwd, { required: true });
1630
+ const selectedModel = settings?.model ?? resolvedProviderModel.model;
1631
+ const features = await agentManager.listDraftFeatures({
1632
+ provider: providerId,
1633
+ cwd: resolvedCwd,
1634
+ ...(settings?.modeId ? { modeId: settings.modeId } : {}),
1635
+ ...(selectedModel ? { model: selectedModel } : {}),
1636
+ ...(settings?.thinkingOptionId ? { thinkingOptionId: settings.thinkingOptionId } : {}),
1637
+ ...(settings?.features ? { featureValues: settings.features } : {}),
1541
1638
  });
1542
1639
  return {
1543
1640
  content: [],
1544
1641
  structuredContent: ensureValidJson({
1545
- provider,
1642
+ provider: providerId,
1643
+ label: summary.label,
1644
+ description: summary.description,
1645
+ enabled: summary.enabled,
1646
+ status: summary.status,
1647
+ modes: summary.modes,
1648
+ selectedModel: selectedModel ?? null,
1546
1649
  features,
1547
1650
  }),
1548
1651
  };
1549
1652
  });
1550
- server.registerTool("list_worktrees", {
1653
+ registerTool("list_worktrees", {
1551
1654
  title: "List worktrees",
1552
1655
  description: "List Paseo-managed git worktrees for a repository.",
1553
1656
  inputSchema: {
@@ -1572,7 +1675,7 @@ export async function createAgentMcpServer(options) {
1572
1675
  structuredContent: ensureValidJson({ worktrees }),
1573
1676
  };
1574
1677
  });
1575
- server.registerTool("create_worktree", {
1678
+ registerTool("create_worktree", {
1576
1679
  title: "Create worktree",
1577
1680
  description: "Create a Paseo-managed git worktree. Branch off a new branch, check out an existing branch, or check out a GitHub PR.",
1578
1681
  inputSchema: {
@@ -1630,7 +1733,7 @@ export async function createAgentMcpServer(options) {
1630
1733
  }),
1631
1734
  };
1632
1735
  });
1633
- server.registerTool("archive_worktree", {
1736
+ registerTool("archive_worktree", {
1634
1737
  title: "Archive worktree",
1635
1738
  description: "Delete a Paseo-managed git worktree.",
1636
1739
  inputSchema: {
@@ -1706,7 +1809,7 @@ export async function createAgentMcpServer(options) {
1706
1809
  structuredContent: ensureValidJson({ success: true }),
1707
1810
  };
1708
1811
  });
1709
- server.registerTool("get_agent_activity", {
1812
+ registerTool("get_agent_activity", {
1710
1813
  title: "Get agent activity",
1711
1814
  description: "Return recent agent timeline entries as a curated summary.",
1712
1815
  inputSchema: {
@@ -1752,7 +1855,7 @@ export async function createAgentMcpServer(options) {
1752
1855
  }),
1753
1856
  };
1754
1857
  });
1755
- server.registerTool("set_agent_mode", {
1858
+ registerTool("set_agent_mode", {
1756
1859
  title: "Set agent session mode",
1757
1860
  description: "Switch the agent's session mode (plan, bypassPermissions, read-only, auto, etc.).",
1758
1861
  inputSchema: {
@@ -1770,7 +1873,7 @@ export async function createAgentMcpServer(options) {
1770
1873
  structuredContent: ensureValidJson({ success: true, newMode: modeId }),
1771
1874
  };
1772
1875
  });
1773
- server.registerTool("list_pending_permissions", {
1876
+ registerTool("list_pending_permissions", {
1774
1877
  title: "List pending permissions",
1775
1878
  description: "Return all pending permission requests across all agents with the normalized payloads.",
1776
1879
  inputSchema: {},
@@ -1795,7 +1898,7 @@ export async function createAgentMcpServer(options) {
1795
1898
  structuredContent: ensureValidJson({ permissions }),
1796
1899
  };
1797
1900
  });
1798
- server.registerTool("respond_to_permission", {
1901
+ registerTool("respond_to_permission", {
1799
1902
  title: "Respond to permission",
1800
1903
  description: "Approve or deny a pending permission request with an AgentManager-compatible response payload.",
1801
1904
  inputSchema: {