@getpaseo/server 0.1.88 → 0.1.90

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 (94) hide show
  1. package/dist/server/server/agent/agent-manager.js +4 -1
  2. package/dist/server/server/agent/agent-prompt.js +4 -1
  3. package/dist/server/server/agent/agent-sdk-types.d.ts +1 -0
  4. package/dist/server/server/agent/agent-storage.d.ts +22 -22
  5. package/dist/server/server/agent/agent-storage.js +2 -9
  6. package/dist/server/server/agent/create-agent/create.d.ts +2 -0
  7. package/dist/server/server/agent/create-agent/create.js +26 -7
  8. package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +1 -0
  9. package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +4 -0
  10. package/dist/server/server/agent/create-agent-mode.d.ts +3 -8
  11. package/dist/server/server/agent/create-agent-mode.js +16 -2
  12. package/dist/server/server/agent/import-sessions.js +1 -1
  13. package/dist/server/server/agent/mcp-server.d.ts +1 -0
  14. package/dist/server/server/agent/mcp-server.js +113 -70
  15. package/dist/server/server/agent/provider-snapshot-manager.d.ts +2 -1
  16. package/dist/server/server/agent/provider-snapshot-manager.js +18 -2
  17. package/dist/server/server/agent/providers/acp-agent.d.ts +3 -3
  18. package/dist/server/server/agent/providers/acp-agent.js +18 -13
  19. package/dist/server/server/agent/providers/codex-app-server-agent.js +16 -22
  20. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +2 -0
  21. package/dist/server/server/agent/providers/mock-load-test-agent.js +69 -2
  22. package/dist/server/server/agent/providers/opencode-agent.js +19 -8
  23. package/dist/server/server/agent/providers/pi/agent.js +13 -0
  24. package/dist/server/server/agent/providers/pi/rpc-types.d.ts +3 -0
  25. package/dist/server/server/agent/timeline-projection.js +30 -1
  26. package/dist/server/server/atomic-file.d.ts +3 -0
  27. package/dist/server/server/atomic-file.js +19 -0
  28. package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +1 -0
  29. package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +10 -2
  30. package/dist/server/server/bootstrap.d.ts +7 -2
  31. package/dist/server/server/bootstrap.js +154 -115
  32. package/dist/server/server/chat/chat-service.js +2 -4
  33. package/dist/server/server/config.js +41 -0
  34. package/dist/server/server/daemon-keypair.js +2 -2
  35. package/dist/server/server/loop-service.d.ts +26 -22
  36. package/dist/server/server/loop-service.js +27 -9
  37. package/dist/server/server/package-version.d.ts +2 -2
  38. package/dist/server/server/paseo-worktree-archive-service.d.ts +2 -0
  39. package/dist/server/server/paseo-worktree-archive-service.js +28 -9
  40. package/dist/server/server/persisted-config.d.ts +84 -28
  41. package/dist/server/server/persisted-config.js +20 -3
  42. package/dist/server/server/pid-lock.d.ts +2 -2
  43. package/dist/server/server/private-files.d.ts +0 -1
  44. package/dist/server/server/private-files.js +0 -5
  45. package/dist/server/server/schedule/service.d.ts +6 -0
  46. package/dist/server/server/schedule/service.js +41 -18
  47. package/dist/server/server/schedule/store.js +3 -2
  48. package/dist/server/server/script-health-monitor.d.ts +4 -4
  49. package/dist/server/server/script-health-monitor.js +6 -6
  50. package/dist/server/server/script-proxy.d.ts +2 -39
  51. package/dist/server/server/script-proxy.js +1 -244
  52. package/dist/server/server/script-route-branch-handler.d.ts +2 -2
  53. package/dist/server/server/script-route-branch-handler.js +3 -37
  54. package/dist/server/server/script-status-projection.d.ts +6 -4
  55. package/dist/server/server/script-status-projection.js +85 -37
  56. package/dist/server/server/server-id.js +3 -3
  57. package/dist/server/server/service-proxy.d.ts +237 -0
  58. package/dist/server/server/service-proxy.js +714 -0
  59. package/dist/server/server/session.d.ts +12 -18
  60. package/dist/server/server/session.js +206 -117
  61. package/dist/server/server/speech/providers/local/worker-client.js +1 -11
  62. package/dist/server/server/websocket-server.d.ts +7 -4
  63. package/dist/server/server/websocket-server.js +9 -4
  64. package/dist/server/server/workspace-bootstrap-dedupe.d.ts +34 -0
  65. package/dist/server/server/workspace-bootstrap-dedupe.js +23 -0
  66. package/dist/server/server/workspace-directory.d.ts +8 -0
  67. package/dist/server/server/workspace-directory.js +141 -11
  68. package/dist/server/server/workspace-git-service.d.ts +3 -0
  69. package/dist/server/server/workspace-git-service.js +53 -12
  70. package/dist/server/server/workspace-registry.d.ts +2 -2
  71. package/dist/server/server/workspace-registry.js +2 -6
  72. package/dist/server/server/workspace-service-env.d.ts +1 -0
  73. package/dist/server/server/workspace-service-env.js +23 -18
  74. package/dist/server/server/worktree/commands.d.ts +2 -0
  75. package/dist/server/server/worktree/commands.js +4 -1
  76. package/dist/server/server/worktree-bootstrap.d.ts +4 -3
  77. package/dist/server/server/worktree-bootstrap.js +14 -13
  78. package/dist/server/server/worktree-core.d.ts +1 -0
  79. package/dist/server/server/worktree-core.js +2 -0
  80. package/dist/server/server/worktree-session.d.ts +6 -2
  81. package/dist/server/server/worktree-session.js +3 -0
  82. package/dist/server/services/github-service.d.ts +1 -0
  83. package/dist/server/services/github-service.js +7 -1
  84. package/dist/server/utils/checkout-git.d.ts +6 -3
  85. package/dist/server/utils/checkout-git.js +40 -38
  86. package/dist/server/utils/worktree.d.ts +17 -12
  87. package/dist/server/utils/worktree.js +39 -22
  88. package/dist/src/server/persisted-config.js +20 -3
  89. package/dist/src/server/private-files.js +0 -5
  90. package/package.json +9 -7
  91. package/dist/server/server/editor-targets.d.ts +0 -18
  92. package/dist/server/server/editor-targets.js +0 -109
  93. package/dist/server/utils/script-hostname.d.ts +0 -8
  94. package/dist/server/utils/script-hostname.js +0 -14
@@ -2,7 +2,7 @@ import { randomUUID } from "node:crypto";
2
2
  import { resolve } from "node:path";
3
3
  import { stat } from "node:fs/promises";
4
4
  import { AGENT_LIFECYCLE_STATUSES, } from "@getpaseo/protocol/agent-lifecycle";
5
- import { PARENT_AGENT_ID_LABEL } from "@getpaseo/protocol/agent-labels";
5
+ import { isDelegatedAgent, PARENT_AGENT_ID_LABEL } from "@getpaseo/protocol/agent-labels";
6
6
  import { z } from "zod";
7
7
  import { getAgentStreamEventTurnId, } from "./agent-sdk-types.js";
8
8
  import { buildArchivedAgentRecord } from "./agent-archive.js";
@@ -2402,6 +2402,9 @@ export class AgentManager {
2402
2402
  }
2403
2403
  }
2404
2404
  broadcastAgentAttention(agent, reason) {
2405
+ if (isDelegatedAgent(agent)) {
2406
+ return;
2407
+ }
2405
2408
  this.onAgentAttention?.({
2406
2409
  agentId: agent.id,
2407
2410
  provider: agent.provider,
@@ -120,9 +120,12 @@ export async function sendPromptToAgent(params) {
120
120
  if (params.sessionMode) {
121
121
  await params.agentManager.setAgentMode(params.agentId, params.sessionMode);
122
122
  }
123
+ const runOptions = params.messageId
124
+ ? { ...params.runOptions, messageId: params.messageId }
125
+ : params.runOptions;
123
126
  return startAgentRun(params.agentManager, params.agentId, params.prompt, params.logger, {
124
127
  replaceRunning: true,
125
- runOptions: params.runOptions,
128
+ runOptions,
126
129
  });
127
130
  }
128
131
  export async function startCreatedAgentInitialPrompt(params) {
@@ -84,6 +84,7 @@ export interface ResolveAgentCreateConfigInput {
84
84
  requestedMode: string | undefined;
85
85
  featureValues: Record<string, unknown> | undefined;
86
86
  parent: AgentCreateConfigParent | null;
87
+ unattended: boolean;
87
88
  availableModes: AgentMode[] | undefined;
88
89
  }
89
90
  export interface ResolveAgentCreateConfigResult {
@@ -167,22 +167,12 @@ declare const STORED_AGENT_SCHEMA: z.ZodObject<{
167
167
  archivedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
168
168
  }, "strip", z.ZodTypeAny, {
169
169
  cwd: string;
170
- createdAt: string;
171
170
  id: string;
172
171
  provider: string;
172
+ createdAt: string;
173
173
  updatedAt: string;
174
174
  labels: Record<string, string>;
175
175
  lastStatus: "error" | "running" | "initializing" | "idle" | "closed";
176
- config?: {
177
- modeId?: string | null | undefined;
178
- model?: string | null | undefined;
179
- thinkingOptionId?: string | null | undefined;
180
- featureValues?: Record<string, unknown> | null | undefined;
181
- extra?: Record<string, any> | null | undefined;
182
- systemPrompt?: string | null | undefined;
183
- mcpServers?: Record<string, any> | null | undefined;
184
- } | null | undefined;
185
- internal?: boolean | undefined;
186
176
  title?: string | null | undefined;
187
177
  persistence?: {
188
178
  provider: string;
@@ -193,6 +183,15 @@ declare const STORED_AGENT_SCHEMA: z.ZodObject<{
193
183
  lastActivityAt?: string | undefined;
194
184
  lastUserMessageAt?: string | null | undefined;
195
185
  lastModeId?: string | null | undefined;
186
+ config?: {
187
+ modeId?: string | null | undefined;
188
+ model?: string | null | undefined;
189
+ thinkingOptionId?: string | null | undefined;
190
+ featureValues?: Record<string, unknown> | null | undefined;
191
+ extra?: Record<string, any> | null | undefined;
192
+ systemPrompt?: string | null | undefined;
193
+ mcpServers?: Record<string, any> | null | undefined;
194
+ } | null | undefined;
196
195
  runtimeInfo?: {
197
196
  provider: string;
198
197
  sessionId: string | null;
@@ -229,23 +228,14 @@ declare const STORED_AGENT_SCHEMA: z.ZodObject<{
229
228
  requiresAttention?: boolean | undefined;
230
229
  attentionReason?: "finished" | "error" | "permission" | null | undefined;
231
230
  attentionTimestamp?: string | null | undefined;
231
+ internal?: boolean | undefined;
232
232
  archivedAt?: string | null | undefined;
233
233
  }, {
234
234
  cwd: string;
235
- createdAt: string;
236
235
  id: string;
237
236
  provider: string;
237
+ createdAt: string;
238
238
  updatedAt: string;
239
- config?: {
240
- modeId?: string | null | undefined;
241
- model?: string | null | undefined;
242
- thinkingOptionId?: string | null | undefined;
243
- featureValues?: Record<string, unknown> | null | undefined;
244
- extra?: Record<string, any> | null | undefined;
245
- systemPrompt?: string | null | undefined;
246
- mcpServers?: Record<string, any> | null | undefined;
247
- } | null | undefined;
248
- internal?: boolean | undefined;
249
239
  title?: string | null | undefined;
250
240
  persistence?: {
251
241
  provider: string;
@@ -258,6 +248,15 @@ declare const STORED_AGENT_SCHEMA: z.ZodObject<{
258
248
  labels?: Record<string, string> | undefined;
259
249
  lastStatus?: "error" | "running" | "initializing" | "idle" | "closed" | undefined;
260
250
  lastModeId?: string | null | undefined;
251
+ config?: {
252
+ modeId?: string | null | undefined;
253
+ model?: string | null | undefined;
254
+ thinkingOptionId?: string | null | undefined;
255
+ featureValues?: Record<string, unknown> | null | undefined;
256
+ extra?: Record<string, any> | null | undefined;
257
+ systemPrompt?: string | null | undefined;
258
+ mcpServers?: Record<string, any> | null | undefined;
259
+ } | null | undefined;
261
260
  runtimeInfo?: {
262
261
  provider: string;
263
262
  sessionId: string | null;
@@ -294,6 +293,7 @@ declare const STORED_AGENT_SCHEMA: z.ZodObject<{
294
293
  requiresAttention?: boolean | undefined;
295
294
  attentionReason?: "finished" | "error" | "permission" | null | undefined;
296
295
  attentionTimestamp?: string | null | undefined;
296
+ internal?: boolean | undefined;
297
297
  archivedAt?: string | null | undefined;
298
298
  }>;
299
299
  export type SerializableAgentConfig = Pick<AgentSessionConfig, "modeId" | "model" | "thinkingOptionId" | "featureValues" | "extra" | "systemPrompt" | "mcpServers">;
@@ -1,7 +1,7 @@
1
- import { randomUUID } from "node:crypto";
2
1
  import { promises as fs } from "node:fs";
3
2
  import path from "node:path";
4
3
  import { z } from "zod";
4
+ import { writeJsonFileAtomic } from "../atomic-file.js";
5
5
  import { AgentFeatureSchema, AgentStatusSchema } from "../messages.js";
6
6
  import { toStoredAgentRecord } from "./agent-projections.js";
7
7
  const SERIALIZABLE_CONFIG_SCHEMA = z
@@ -109,8 +109,7 @@ export class AgentStorage {
109
109
  const agentId = record.id;
110
110
  const nextPath = this.buildRecordPath(record);
111
111
  const previousPath = this.pathById.get(agentId);
112
- await fs.mkdir(path.dirname(nextPath), { recursive: true });
113
- await writeFileAtomically(nextPath, JSON.stringify(record, null, 2));
112
+ await writeJsonFileAtomic(nextPath, record);
114
113
  this.addIndexedPath(agentId, nextPath);
115
114
  if (previousPath && previousPath !== nextPath) {
116
115
  try {
@@ -317,10 +316,4 @@ function projectDirNameFromCwd(cwd) {
317
316
  }
318
317
  return prefix + withoutRoot.replace(/[\\/]+/g, "-");
319
318
  }
320
- async function writeFileAtomically(targetPath, payload) {
321
- const directory = path.dirname(targetPath);
322
- const tempPath = path.join(directory, `.agent.tmp-${process.pid}-${Date.now()}-${randomUUID()}`);
323
- await fs.writeFile(tempPath, payload, "utf8");
324
- await fs.rename(tempPath, targetPath);
325
- }
326
319
  //# sourceMappingURL=agent-storage.js.map
@@ -20,6 +20,7 @@ interface CreateAgentCommandDependencies {
20
20
  agentStorage: AgentStorage;
21
21
  logger: Logger;
22
22
  paseoHome?: string;
23
+ worktreesRoot?: string;
23
24
  workspaceGitService?: Pick<WorkspaceGitService, "getSnapshot" | "listWorktrees" | "resolveRepoRoot">;
24
25
  terminalManager?: TerminalManager | null;
25
26
  providerSnapshotManager: ProviderSnapshotManager;
@@ -63,6 +64,7 @@ export interface CreateAgentFromMcpInput {
63
64
  mode?: string;
64
65
  background: boolean;
65
66
  notifyOnFinish: boolean;
67
+ detached?: boolean;
66
68
  callerAgentId?: string;
67
69
  callerContext?: {
68
70
  lockedCwd?: string;
@@ -3,7 +3,7 @@ import { expandUserPath, resolvePathFromBase } from "../../path-utils.js";
3
3
  import { toWorktreeRequestError } from "../../worktree-errors.js";
4
4
  import { scheduleAgentMetadataGeneration } from "../agent-metadata-generator.js";
5
5
  import { setupFinishNotification, startCreatedAgentInitialPrompt } from "../agent-prompt.js";
6
- import { resolveClientMessageId } from "../../client-message-id.js";
6
+ import { normalizeClientMessageId, resolveClientMessageId } from "../../client-message-id.js";
7
7
  import { resolveRequiredProviderModel } from "../mcp-shared.js";
8
8
  import { appendTimelineItemIfAgentKnown, emitLiveTimelineItemIfAgentKnown, } from "../timeline-append.js";
9
9
  export async function createAgentCommand(dependencies, input) {
@@ -46,6 +46,13 @@ async function resolveSessionCreateAgent(dependencies, input) {
46
46
  });
47
47
  const prompt = buildAgentPrompt(trimmedPrompt ?? "", input.images, input.attachments);
48
48
  const hasPromptContent = Array.isArray(prompt) ? prompt.length > 0 : prompt.length > 0;
49
+ const clientMessageId = normalizeClientMessageId(input.clientMessageId);
50
+ const runOptions = input.outputSchema || clientMessageId
51
+ ? {
52
+ ...(input.outputSchema ? { outputSchema: input.outputSchema } : {}),
53
+ ...(clientMessageId ? { messageId: clientMessageId } : {}),
54
+ }
55
+ : undefined;
49
56
  return {
50
57
  config: sessionConfig,
51
58
  createOptions: {
@@ -57,7 +64,7 @@ async function resolveSessionCreateAgent(dependencies, input) {
57
64
  },
58
65
  metadataInitialPrompt: trimmedPrompt,
59
66
  prompt: hasPromptContent ? prompt : undefined,
60
- runOptions: input.outputSchema ? { outputSchema: input.outputSchema } : undefined,
67
+ runOptions,
61
68
  explicitTitle: input.explicitTitle,
62
69
  setupContinuation,
63
70
  background: true,
@@ -93,8 +100,14 @@ async function resolveMcpCreateAgent(dependencies, input) {
93
100
  requestedMode: input.mode,
94
101
  featureValues: input.features,
95
102
  parent: parentAgent,
103
+ unattended: false,
104
+ });
105
+ const labels = mergeLabels({
106
+ callerAgentId: input.callerAgentId,
107
+ detached: input.detached ?? false,
108
+ childAgentDefaultLabels: input.callerContext?.childAgentDefaultLabels,
109
+ labels: input.labels,
96
110
  });
97
- const labels = mergeLabels(input.callerAgentId, input.callerContext?.childAgentDefaultLabels, input.labels);
98
111
  const trimmedPrompt = input.initialPrompt.trim();
99
112
  return {
100
113
  config: {
@@ -220,6 +233,7 @@ async function resolveMcpCwd(params) {
220
233
  ...(params.initialPrompt ? { firstAgentContext: { prompt: params.initialPrompt } } : {}),
221
234
  runSetup: false,
222
235
  paseoHome: dependencies.paseoHome,
236
+ worktreesRoot: dependencies.worktreesRoot,
223
237
  },
224
238
  createPaseoWorktree: dependencies.createPaseoWorktree,
225
239
  resolveDefaultBranch: baseBranch ? async () => baseBranch : undefined,
@@ -260,12 +274,17 @@ async function createMcpWorktree(options) {
260
274
  throw toWorktreeRequestError(error);
261
275
  }
262
276
  }
263
- function mergeLabels(callerAgentId, childAgentDefaultLabels, labels) {
277
+ function mergeLabels(params) {
264
278
  const mergedLabels = {
265
- ...(callerAgentId ? { [PARENT_AGENT_ID_LABEL]: callerAgentId } : {}),
266
- ...childAgentDefaultLabels,
267
- ...labels,
279
+ ...(!params.detached && params.callerAgentId
280
+ ? { [PARENT_AGENT_ID_LABEL]: params.callerAgentId }
281
+ : {}),
282
+ ...params.childAgentDefaultLabels,
283
+ ...params.labels,
268
284
  };
285
+ if (params.detached) {
286
+ delete mergedLabels[PARENT_AGENT_ID_LABEL];
287
+ }
269
288
  return Object.keys(mergedLabels).length > 0 ? mergedLabels : undefined;
270
289
  }
271
290
  //# sourceMappingURL=create.js.map
@@ -7,6 +7,7 @@ import type { AgentManager } from "./agent-manager.js";
7
7
  import type { AgentStorage } from "./agent-storage.js";
8
8
  interface CreateAgentLifecycleDispatchDependencies {
9
9
  paseoHome: string;
10
+ worktreesRoot?: string;
10
11
  agentManager: AgentManager;
11
12
  agentStorage: AgentStorage;
12
13
  github: GitHubService;
@@ -46,6 +46,7 @@ export class CreateAgentLifecycleDispatch {
46
46
  firstAgentContext,
47
47
  runSetup: false,
48
48
  paseoHome: this.dependencies.paseoHome,
49
+ worktreesRoot: this.dependencies.worktreesRoot,
49
50
  };
50
51
  switch (target.mode) {
51
52
  case "branch-off":
@@ -108,12 +109,14 @@ export class CreateAgentLifecycleDispatch {
108
109
  async archiveAutoCreatedWorktree(options) {
109
110
  const ownership = await isPaseoOwnedWorktreeCwd(options.worktreePath, {
110
111
  paseoHome: this.dependencies.paseoHome,
112
+ worktreesRoot: this.dependencies.worktreesRoot,
111
113
  });
112
114
  if (!ownership.allowed) {
113
115
  throw new Error("Auto-created worktree is not a Paseo-owned worktree");
114
116
  }
115
117
  await archivePaseoWorktree({
116
118
  paseoHome: this.dependencies.paseoHome,
119
+ worktreesRoot: this.dependencies.worktreesRoot,
117
120
  github: this.dependencies.github,
118
121
  workspaceGitService: this.dependencies.workspaceGitService,
119
122
  agentManager: this.dependencies.agentManager,
@@ -129,6 +132,7 @@ export class CreateAgentLifecycleDispatch {
129
132
  targetPath: options.worktreePath,
130
133
  repoRoot: options.repoRoot ?? ownership.repoRoot ?? null,
131
134
  worktreesRoot: ownership.worktreeRoot,
135
+ worktreesBaseRoot: this.dependencies.worktreesRoot,
132
136
  requestId: randomUUID(),
133
137
  });
134
138
  if (options.agentId) {
@@ -1,18 +1,13 @@
1
- import type { AgentCreateConfigUnattendedInput, AgentProvider, ResolveAgentCreateConfigInput, ResolveAgentCreateConfigResult } from "./agent-sdk-types.js";
2
- interface CreateAgentModeParent {
3
- provider: AgentProvider;
4
- modeId: string | null;
5
- isUnattended: boolean;
6
- }
1
+ import type { AgentCreateConfigParent, AgentCreateConfigUnattendedInput, AgentProvider, ResolveAgentCreateConfigInput, ResolveAgentCreateConfigResult } from "./agent-sdk-types.js";
7
2
  export interface ResolveCreateAgentModeInput {
8
3
  requestedMode: string | undefined;
9
4
  targetProvider: AgentProvider;
10
- parent: CreateAgentModeParent | null;
5
+ parent: AgentCreateConfigParent | null;
6
+ unattended: boolean;
11
7
  availableModes: string[] | undefined;
12
8
  targetUnattendedMode: string | undefined;
13
9
  }
14
10
  export declare function resolveAndValidateCreateAgentMode(input: ResolveCreateAgentModeInput): string | undefined;
15
11
  export declare function resolveDefaultAgentCreateConfig(input: ResolveAgentCreateConfigInput): ResolveAgentCreateConfigResult;
16
12
  export declare function isDefaultAgentCreateConfigUnattended(input: AgentCreateConfigUnattendedInput): boolean;
17
- export {};
18
13
  //# sourceMappingURL=create-agent-mode.d.ts.map
@@ -4,6 +4,15 @@ function listModes(modes) {
4
4
  }
5
5
  return modes.length > 0 ? modes.join(", ") : "(none)";
6
6
  }
7
+ function isUnattendedCreateConfigParent(parent) {
8
+ return parent.isUnattended;
9
+ }
10
+ function formatCreateConfigParentMode(parent) {
11
+ return parent.modeId ?? "<none>";
12
+ }
13
+ function formatCreateConfigParentSource(parent) {
14
+ return `caller (provider '${parent.provider}')`;
15
+ }
7
16
  export function resolveAndValidateCreateAgentMode(input) {
8
17
  const { requestedMode, targetProvider, parent, availableModes } = input;
9
18
  if (requestedMode !== undefined) {
@@ -13,15 +22,19 @@ export function resolveAndValidateCreateAgentMode(input) {
13
22
  return requestedMode;
14
23
  }
15
24
  if (!parent) {
25
+ if (input.unattended && input.targetUnattendedMode !== undefined) {
26
+ return input.targetUnattendedMode;
27
+ }
16
28
  return undefined;
17
29
  }
18
30
  if (parent.provider === targetProvider) {
19
31
  return parent.modeId ?? undefined;
20
32
  }
21
- if (parent.isUnattended && input.targetUnattendedMode !== undefined) {
33
+ if ((input.unattended || isUnattendedCreateConfigParent(parent)) &&
34
+ input.targetUnattendedMode !== undefined) {
22
35
  return input.targetUnattendedMode;
23
36
  }
24
- throw new Error(`cannot inherit mode '${parent.modeId ?? "<none>"}' from caller (provider '${parent.provider}') for new agent (provider '${targetProvider}'). Pass an explicit mode. Available modes for '${targetProvider}': ${listModes(availableModes)}`);
37
+ throw new Error(`cannot inherit mode '${formatCreateConfigParentMode(parent)}' from ${formatCreateConfigParentSource(parent)} for new agent (provider '${targetProvider}'). Pass an explicit mode. Available modes for '${targetProvider}': ${listModes(availableModes)}`);
25
38
  }
26
39
  export function resolveDefaultAgentCreateConfig(input) {
27
40
  const availableModeIds = input.availableModes?.map((mode) => mode.id);
@@ -30,6 +43,7 @@ export function resolveDefaultAgentCreateConfig(input) {
30
43
  requestedMode: input.requestedMode,
31
44
  targetProvider: input.provider,
32
45
  parent: input.parent,
46
+ unattended: input.unattended,
33
47
  availableModes: availableModeIds,
34
48
  targetUnattendedMode: input.availableModes?.find(isUnattendedMode)?.id,
35
49
  }),
@@ -37,7 +37,7 @@ export async function listImportableProviderSessions(input) {
37
37
  const providerFilter = request.providers ? new Set(request.providers) : undefined;
38
38
  const importedHandles = await collectImportedProviderSessionHandles(agentManager, agentStorage);
39
39
  const descriptors = await agentManager.listImportablePersistedAgents({
40
- limit: 200,
40
+ limit,
41
41
  providerFilter,
42
42
  cwd: request.cwd,
43
43
  });
@@ -25,6 +25,7 @@ export interface AgentMcpServerOptions {
25
25
  clearWorkspaceArchiving?: ArchivePaseoWorktreeDependencies["clearWorkspaceArchiving"];
26
26
  createPaseoWorktree?: CreatePaseoWorktreeWorkflowFn;
27
27
  paseoHome?: string;
28
+ worktreesRoot?: string;
28
29
  /**
29
30
  * ID of the agent that is connecting to this MCP server.
30
31
  * Used for cwd/mode inheritance when agents spawn child agents.