@getpaseo/server 0.1.87 → 0.1.89

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 (69) hide show
  1. package/dist/server/server/agent/agent-manager.js +4 -1
  2. package/dist/server/server/agent/agent-storage.d.ts +22 -22
  3. package/dist/server/server/agent/create-agent/create.d.ts +2 -0
  4. package/dist/server/server/agent/create-agent/create.js +16 -5
  5. package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +1 -0
  6. package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +4 -0
  7. package/dist/server/server/agent/mcp-server.d.ts +1 -0
  8. package/dist/server/server/agent/mcp-server.js +137 -63
  9. package/dist/server/server/agent/mcp-shared.d.ts +1 -0
  10. package/dist/server/server/agent/providers/pi/agent.js +13 -0
  11. package/dist/server/server/agent/providers/pi/rpc-types.d.ts +3 -0
  12. package/dist/server/server/agent/timeline-projection.d.ts +17 -1
  13. package/dist/server/server/agent/timeline-projection.js +82 -17
  14. package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +1 -0
  15. package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +6 -1
  16. package/dist/server/server/bootstrap.d.ts +7 -2
  17. package/dist/server/server/bootstrap.js +152 -115
  18. package/dist/server/server/config.js +41 -0
  19. package/dist/server/server/loop-service.d.ts +22 -22
  20. package/dist/server/server/package-version.d.ts +2 -2
  21. package/dist/server/server/paseo-worktree-archive-service.d.ts +2 -0
  22. package/dist/server/server/paseo-worktree-archive-service.js +28 -9
  23. package/dist/server/server/persisted-config.d.ts +89 -33
  24. package/dist/server/server/persisted-config.js +17 -0
  25. package/dist/server/server/pid-lock.d.ts +2 -2
  26. package/dist/server/server/schedule/cron.js +52 -5
  27. package/dist/server/server/script-health-monitor.d.ts +4 -4
  28. package/dist/server/server/script-health-monitor.js +6 -6
  29. package/dist/server/server/script-proxy.d.ts +2 -39
  30. package/dist/server/server/script-proxy.js +1 -244
  31. package/dist/server/server/script-route-branch-handler.d.ts +2 -2
  32. package/dist/server/server/script-route-branch-handler.js +3 -37
  33. package/dist/server/server/script-status-projection.d.ts +6 -4
  34. package/dist/server/server/script-status-projection.js +85 -37
  35. package/dist/server/server/service-proxy.d.ts +237 -0
  36. package/dist/server/server/service-proxy.js +714 -0
  37. package/dist/server/server/session.d.ts +11 -4
  38. package/dist/server/server/session.js +96 -99
  39. package/dist/server/server/websocket-server.d.ts +7 -4
  40. package/dist/server/server/websocket-server.js +9 -4
  41. package/dist/server/server/workspace-directory.js +4 -0
  42. package/dist/server/server/workspace-git-service.d.ts +3 -0
  43. package/dist/server/server/workspace-git-service.js +53 -12
  44. package/dist/server/server/workspace-registry.d.ts +2 -2
  45. package/dist/server/server/workspace-service-env.d.ts +1 -0
  46. package/dist/server/server/workspace-service-env.js +23 -18
  47. package/dist/server/server/worktree/commands.d.ts +2 -0
  48. package/dist/server/server/worktree/commands.js +4 -1
  49. package/dist/server/server/worktree-bootstrap.d.ts +4 -3
  50. package/dist/server/server/worktree-bootstrap.js +14 -13
  51. package/dist/server/server/worktree-core.d.ts +1 -0
  52. package/dist/server/server/worktree-core.js +2 -0
  53. package/dist/server/server/worktree-session.d.ts +6 -2
  54. package/dist/server/server/worktree-session.js +3 -0
  55. package/dist/server/services/github-service.d.ts +1 -0
  56. package/dist/server/services/github-service.js +7 -1
  57. package/dist/server/terminal/terminal-manager.js +11 -1
  58. package/dist/server/terminal/terminal-session-controller.d.ts +3 -1
  59. package/dist/server/terminal/terminal-session-controller.js +22 -12
  60. package/dist/server/terminal/terminal.d.ts +1 -0
  61. package/dist/server/terminal/terminal.js +34 -0
  62. package/dist/server/utils/checkout-git.d.ts +6 -2
  63. package/dist/server/utils/checkout-git.js +136 -54
  64. package/dist/server/utils/worktree.d.ts +17 -12
  65. package/dist/server/utils/worktree.js +39 -22
  66. package/dist/src/server/persisted-config.js +17 -0
  67. package/package.json +5 -5
  68. package/dist/server/utils/script-hostname.d.ts +0 -8
  69. package/dist/server/utils/script-hostname.js +0 -14
@@ -1,6 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { resolvePaseoNodeEnv } from "./paseo-env.js";
3
3
  import { z } from "zod";
4
+ import { expandTilde } from "../utils/path.js";
4
5
  import { loadPersistedConfig, LogFormatSchema, LogLevelSchema, } from "./persisted-config.js";
5
6
  import { ProviderOverrideSchema } from "./agent/provider-launch-config.js";
6
7
  import { AgentProviderSchema } from "@getpaseo/protocol/provider-manifest";
@@ -109,6 +110,33 @@ function resolveRelayConfig(input) {
109
110
  const publicUseTls = resolveTlsFromEnv(input.env.PASEO_RELAY_PUBLIC_USE_TLS, input.persisted.daemon?.relay?.publicUseTls, useTls);
110
111
  return { enabled, endpoint, publicEndpoint, useTls, publicUseTls };
111
112
  }
113
+ function resolveServiceProxyPublicBaseUrl(value) {
114
+ if (value === null) {
115
+ return null;
116
+ }
117
+ try {
118
+ return new URL(value).toString().replace(/\/$/, "");
119
+ }
120
+ catch {
121
+ throw new Error(`Invalid PASEO_SERVICE_PROXY_PUBLIC_BASE_URL: ${value}`);
122
+ }
123
+ }
124
+ function resolveServiceProxyConfig(env, persisted) {
125
+ const enabledShim = parseBooleanEnv(env.PASEO_SERVICE_PROXY_ENABLED) ?? persisted.daemon?.serviceProxy?.enabled;
126
+ // COMPAT(serviceProxyEnabled): added 2026-06-02, remove after 2026-12-02.
127
+ // `enabled=false` used to disable the separate service proxy listener. Localhost
128
+ // service proxying is now always enabled; this only suppresses optional layers.
129
+ const optionalLayersEnabled = enabledShim !== false;
130
+ const publicBaseUrl = optionalLayersEnabled
131
+ ? resolveServiceProxyPublicBaseUrl(env.PASEO_SERVICE_PROXY_PUBLIC_BASE_URL ??
132
+ persisted.daemon?.serviceProxy?.publicBaseUrl ??
133
+ null)
134
+ : null;
135
+ const standaloneListen = optionalLayersEnabled
136
+ ? (env.PASEO_SERVICE_PROXY_LISTEN ?? persisted.daemon?.serviceProxy?.listen ?? null)
137
+ : null;
138
+ return { publicBaseUrl, standaloneListen };
139
+ }
112
140
  function resolveVoiceLlmConfig(env, persisted) {
113
141
  const envVoiceLlmProvider = parseOptionalVoiceLlmProvider(env.PASEO_VOICE_LLM_PROVIDER);
114
142
  const persistedVoiceLlmProvider = parseOptionalVoiceLlmProvider(persisted.features?.voiceMode?.llm?.provider);
@@ -145,6 +173,16 @@ function resolveAuthConfig(env, persisted) {
145
173
  ? { password: persisted.daemon.auth.password }
146
174
  : undefined;
147
175
  }
176
+ function resolveWorktreesRoot(paseoHome, persisted) {
177
+ const configuredRoot = persisted.worktrees?.root?.trim();
178
+ if (!configuredRoot) {
179
+ return undefined;
180
+ }
181
+ const expandedRoot = expandTilde(configuredRoot);
182
+ return path.isAbsolute(expandedRoot)
183
+ ? path.resolve(expandedRoot)
184
+ : path.resolve(paseoHome, expandedRoot);
185
+ }
148
186
  function resolveAppendSystemPrompt(persisted) {
149
187
  return persisted.daemon?.appendSystemPrompt ?? "";
150
188
  }
@@ -173,6 +211,7 @@ export function loadConfig(paseoHome, options) {
173
211
  cliRelayEnabled: options?.cli?.relayEnabled,
174
212
  cliRelayUseTls: options?.cli?.relayUseTls,
175
213
  });
214
+ const serviceProxy = resolveServiceProxyConfig(env, persisted);
176
215
  const { openai, speech } = resolveSpeechConfig({
177
216
  paseoHome,
178
217
  env,
@@ -183,6 +222,7 @@ export function loadConfig(paseoHome, options) {
183
222
  return {
184
223
  listen,
185
224
  paseoHome,
225
+ worktreesRoot: resolveWorktreesRoot(paseoHome, persisted),
186
226
  corsAllowedOrigins: resolveCorsAllowedOrigins(env, persisted),
187
227
  hostnames,
188
228
  mcpEnabled,
@@ -199,6 +239,7 @@ export function loadConfig(paseoHome, options) {
199
239
  relayPublicEndpoint: relay.publicEndpoint,
200
240
  relayUseTls: relay.useTls,
201
241
  relayPublicUseTls: relay.publicUseTls,
242
+ serviceProxy,
202
243
  appBaseUrl,
203
244
  auth: resolveAuthConfig(env, persisted),
204
245
  openai,
@@ -10,16 +10,16 @@ declare const LoopLogEntrySchema: z.ZodObject<{
10
10
  level: z.ZodEnum<["info", "error"]>;
11
11
  text: z.ZodString;
12
12
  }, "strip", z.ZodTypeAny, {
13
+ text: string;
13
14
  level: "error" | "info";
14
15
  source: "worker" | "loop" | "verifier" | "verify-check";
15
- text: string;
16
16
  timestamp: string;
17
17
  seq: number;
18
18
  iteration: number | null;
19
19
  }, {
20
+ text: string;
20
21
  level: "error" | "info";
21
22
  source: "worker" | "loop" | "verifier" | "verify-check";
22
- text: string;
23
23
  timestamp: string;
24
24
  seq: number;
25
25
  iteration: number | null;
@@ -33,16 +33,16 @@ declare const LoopVerifyCheckResultSchema: z.ZodObject<{
33
33
  startedAt: z.ZodString;
34
34
  completedAt: z.ZodString;
35
35
  }, "strip", z.ZodTypeAny, {
36
- command: string;
37
36
  exitCode: number;
37
+ command: string;
38
38
  stdout: string;
39
39
  stderr: string;
40
40
  startedAt: string;
41
41
  completedAt: string;
42
42
  passed: boolean;
43
43
  }, {
44
- command: string;
45
44
  exitCode: number;
45
+ command: string;
46
46
  stdout: string;
47
47
  stderr: string;
48
48
  startedAt: string;
@@ -86,16 +86,16 @@ declare const LoopIterationRecordSchema: z.ZodObject<{
86
86
  startedAt: z.ZodString;
87
87
  completedAt: z.ZodString;
88
88
  }, "strip", z.ZodTypeAny, {
89
- command: string;
90
89
  exitCode: number;
90
+ command: string;
91
91
  stdout: string;
92
92
  stderr: string;
93
93
  startedAt: string;
94
94
  completedAt: string;
95
95
  passed: boolean;
96
96
  }, {
97
- command: string;
98
97
  exitCode: number;
98
+ command: string;
99
99
  stdout: string;
100
100
  stderr: string;
101
101
  startedAt: string;
@@ -131,8 +131,8 @@ declare const LoopIterationRecordSchema: z.ZodObject<{
131
131
  workerOutcome: "completed" | "failed" | "canceled" | null;
132
132
  failureReason: string | null;
133
133
  verifyChecks: {
134
- command: string;
135
134
  exitCode: number;
135
+ command: string;
136
136
  stdout: string;
137
137
  stderr: string;
138
138
  startedAt: string;
@@ -156,8 +156,8 @@ declare const LoopIterationRecordSchema: z.ZodObject<{
156
156
  workerOutcome: "completed" | "failed" | "canceled" | null;
157
157
  failureReason: string | null;
158
158
  verifyChecks: {
159
- command: string;
160
159
  exitCode: number;
160
+ command: string;
161
161
  stdout: string;
162
162
  stderr: string;
163
163
  startedAt: string;
@@ -215,16 +215,16 @@ declare const LoopRecordSchema: z.ZodObject<{
215
215
  startedAt: z.ZodString;
216
216
  completedAt: z.ZodString;
217
217
  }, "strip", z.ZodTypeAny, {
218
- command: string;
219
218
  exitCode: number;
219
+ command: string;
220
220
  stdout: string;
221
221
  stderr: string;
222
222
  startedAt: string;
223
223
  completedAt: string;
224
224
  passed: boolean;
225
225
  }, {
226
- command: string;
227
226
  exitCode: number;
227
+ command: string;
228
228
  stdout: string;
229
229
  stderr: string;
230
230
  startedAt: string;
@@ -260,8 +260,8 @@ declare const LoopRecordSchema: z.ZodObject<{
260
260
  workerOutcome: "completed" | "failed" | "canceled" | null;
261
261
  failureReason: string | null;
262
262
  verifyChecks: {
263
- command: string;
264
263
  exitCode: number;
264
+ command: string;
265
265
  stdout: string;
266
266
  stderr: string;
267
267
  startedAt: string;
@@ -285,8 +285,8 @@ declare const LoopRecordSchema: z.ZodObject<{
285
285
  workerOutcome: "completed" | "failed" | "canceled" | null;
286
286
  failureReason: string | null;
287
287
  verifyChecks: {
288
- command: string;
289
288
  exitCode: number;
289
+ command: string;
290
290
  stdout: string;
291
291
  stderr: string;
292
292
  startedAt: string;
@@ -309,16 +309,16 @@ declare const LoopRecordSchema: z.ZodObject<{
309
309
  level: z.ZodEnum<["info", "error"]>;
310
310
  text: z.ZodString;
311
311
  }, "strip", z.ZodTypeAny, {
312
+ text: string;
312
313
  level: "error" | "info";
313
314
  source: "worker" | "loop" | "verifier" | "verify-check";
314
- text: string;
315
315
  timestamp: string;
316
316
  seq: number;
317
317
  iteration: number | null;
318
318
  }, {
319
+ text: string;
319
320
  level: "error" | "info";
320
321
  source: "worker" | "loop" | "verifier" | "verify-check";
321
- text: string;
322
322
  timestamp: string;
323
323
  seq: number;
324
324
  iteration: number | null;
@@ -328,12 +328,12 @@ declare const LoopRecordSchema: z.ZodObject<{
328
328
  activeWorkerAgentId: z.ZodNullable<z.ZodString>;
329
329
  activeVerifierAgentId: z.ZodNullable<z.ZodString>;
330
330
  }, "strip", z.ZodTypeAny, {
331
- status: "running" | "failed" | "succeeded" | "stopped";
332
331
  cwd: string;
333
332
  name: string | null;
334
- createdAt: string;
335
333
  id: string;
334
+ status: "running" | "failed" | "succeeded" | "stopped";
336
335
  provider: string;
336
+ createdAt: string;
337
337
  updatedAt: string;
338
338
  modeId: string | null;
339
339
  model: string | null;
@@ -350,8 +350,8 @@ declare const LoopRecordSchema: z.ZodObject<{
350
350
  workerOutcome: "completed" | "failed" | "canceled" | null;
351
351
  failureReason: string | null;
352
352
  verifyChecks: {
353
- command: string;
354
353
  exitCode: number;
354
+ command: string;
355
355
  stdout: string;
356
356
  stderr: string;
357
357
  startedAt: string;
@@ -379,9 +379,9 @@ declare const LoopRecordSchema: z.ZodObject<{
379
379
  maxTimeMs: number | null;
380
380
  stopRequestedAt: string | null;
381
381
  logs: {
382
+ text: string;
382
383
  level: "error" | "info";
383
384
  source: "worker" | "loop" | "verifier" | "verify-check";
384
- text: string;
385
385
  timestamp: string;
386
386
  seq: number;
387
387
  iteration: number | null;
@@ -391,12 +391,12 @@ declare const LoopRecordSchema: z.ZodObject<{
391
391
  activeWorkerAgentId: string | null;
392
392
  activeVerifierAgentId: string | null;
393
393
  }, {
394
- status: "running" | "failed" | "succeeded" | "stopped";
395
394
  cwd: string;
396
395
  name: string | null;
397
- createdAt: string;
398
396
  id: string;
397
+ status: "running" | "failed" | "succeeded" | "stopped";
399
398
  provider: string;
399
+ createdAt: string;
400
400
  updatedAt: string;
401
401
  model: string | null;
402
402
  startedAt: string;
@@ -412,8 +412,8 @@ declare const LoopRecordSchema: z.ZodObject<{
412
412
  workerOutcome: "completed" | "failed" | "canceled" | null;
413
413
  failureReason: string | null;
414
414
  verifyChecks: {
415
- command: string;
416
415
  exitCode: number;
416
+ command: string;
417
417
  stdout: string;
418
418
  stderr: string;
419
419
  startedAt: string;
@@ -440,9 +440,9 @@ declare const LoopRecordSchema: z.ZodObject<{
440
440
  maxTimeMs: number | null;
441
441
  stopRequestedAt: string | null;
442
442
  logs: {
443
+ text: string;
443
444
  level: "error" | "info";
444
445
  source: "worker" | "loop" | "verifier" | "verify-check";
445
- text: string;
446
446
  timestamp: string;
447
447
  seq: number;
448
448
  iteration: number | null;
@@ -7,11 +7,11 @@ export declare const packageJsonSchema: z.ZodObject<{
7
7
  name: z.ZodOptional<z.ZodString>;
8
8
  version: z.ZodOptional<z.ZodString>;
9
9
  }, "strip", z.ZodTypeAny, {
10
- version?: string | undefined;
11
10
  name?: string | undefined;
12
- }, {
13
11
  version?: string | undefined;
12
+ }, {
14
13
  name?: string | undefined;
14
+ version?: string | undefined;
15
15
  }>;
16
16
  export type PackageJson = z.infer<typeof packageJsonSchema>;
17
17
  export declare class PackageVersionResolutionError extends Error {
@@ -6,6 +6,7 @@ import type { GitHubService } from "../services/github-service.js";
6
6
  import type { TerminalManager } from "../terminal/terminal-manager.js";
7
7
  export interface ArchivePaseoWorktreeDependencies {
8
8
  paseoHome?: string;
9
+ worktreesRoot?: string;
9
10
  github: GitHubService;
10
11
  workspaceGitService: Pick<WorkspaceGitService, "getSnapshot">;
11
12
  agentManager: Pick<AgentManager, "listAgents" | "archiveAgent" | "archiveSnapshot">;
@@ -33,6 +34,7 @@ export declare function archivePaseoWorktree(dependencies: ArchivePaseoWorktreeD
33
34
  targetPath: string;
34
35
  repoRoot: string | null;
35
36
  worktreesRoot?: string;
37
+ worktreesBaseRoot?: string;
36
38
  requestId: string;
37
39
  }): Promise<string[]>;
38
40
  export declare function killTerminalsUnderPath(dependencies: KillTerminalsUnderPathDependencies, rootPath: string): Promise<void>;
@@ -1,9 +1,10 @@
1
1
  import { normalizeWorkspaceId as normalizePersistedWorkspaceId } from "./workspace-registry-model.js";
2
- import { deletePaseoWorktree, resolvePaseoWorktreeRootForCwd } from "../utils/worktree.js";
2
+ import { deletePaseoWorktree, resolvePaseoWorktreeRootForCwd, WorktreeTeardownError, } from "../utils/worktree.js";
3
3
  export async function archivePaseoWorktree(dependencies, options) {
4
4
  let targetPath = options.targetPath;
5
5
  const resolvedWorktree = await resolvePaseoWorktreeRootForCwd(targetPath, {
6
6
  paseoHome: dependencies.paseoHome,
7
+ worktreesRoot: options.worktreesBaseRoot ?? dependencies.worktreesRoot,
7
8
  });
8
9
  if (resolvedWorktree) {
9
10
  targetPath = resolvedWorktree.worktreePath;
@@ -50,13 +51,26 @@ export async function archivePaseoWorktree(dependencies, options) {
50
51
  dependencies.sessionLogger?.warn({ err: result.reason, targetPath }, "Worktree archive teardown step failed; continuing");
51
52
  }
52
53
  }
53
- await deletePaseoWorktree({
54
- cwd: options.repoRoot,
55
- worktreePath: targetPath,
56
- worktreesRoot: options.worktreesRoot,
57
- paseoHome: dependencies.paseoHome,
58
- });
59
- if (options.repoRoot) {
54
+ let teardownError = null;
55
+ try {
56
+ await deletePaseoWorktree({
57
+ cwd: options.repoRoot,
58
+ worktreePath: targetPath,
59
+ worktreesRoot: options.worktreesRoot,
60
+ paseoHome: dependencies.paseoHome,
61
+ worktreesBaseRoot: options.worktreesBaseRoot ?? dependencies.worktreesRoot,
62
+ });
63
+ }
64
+ catch (error) {
65
+ if (error instanceof WorktreeTeardownError) {
66
+ teardownError = error;
67
+ dependencies.sessionLogger?.warn({ err: error, targetPath }, "Worktree teardown failed during archive; archiving workspace record anyway");
68
+ }
69
+ else {
70
+ throw error;
71
+ }
72
+ }
73
+ if (!teardownError && options.repoRoot) {
60
74
  try {
61
75
  await dependencies.workspaceGitService.getSnapshot(options.repoRoot, {
62
76
  force: true,
@@ -75,9 +89,14 @@ export async function archivePaseoWorktree(dependencies, options) {
75
89
  await dependencies.archiveWorkspaceRecord(workspaceId);
76
90
  }
77
91
  catch (error) {
78
- dependencies.sessionLogger?.warn({ err: error, workspaceId }, "Failed to archive workspace record; worktree FS already removed");
92
+ dependencies.sessionLogger?.warn({ err: error, workspaceId }, teardownError
93
+ ? "Failed to archive workspace record after teardown failed"
94
+ : "Failed to archive workspace record; worktree FS already removed");
79
95
  }
80
96
  }));
97
+ if (teardownError) {
98
+ throw teardownError;
99
+ }
81
100
  }
82
101
  finally {
83
102
  dependencies.clearWorkspaceArchiving(affectedWorkspaceIdList);
@@ -46,6 +46,19 @@ export declare const PersistedConfigSchema: z.ZodObject<{
46
46
  useTls?: boolean | undefined;
47
47
  publicUseTls?: boolean | undefined;
48
48
  }>>;
49
+ serviceProxy: z.ZodOptional<z.ZodObject<{
50
+ enabled: z.ZodOptional<z.ZodBoolean>;
51
+ listen: z.ZodOptional<z.ZodString>;
52
+ publicBaseUrl: z.ZodOptional<z.ZodString>;
53
+ }, "strict", z.ZodTypeAny, {
54
+ publicBaseUrl?: string | undefined;
55
+ enabled?: boolean | undefined;
56
+ listen?: string | undefined;
57
+ }, {
58
+ publicBaseUrl?: string | undefined;
59
+ enabled?: boolean | undefined;
60
+ listen?: string | undefined;
61
+ }>>;
49
62
  auth: z.ZodOptional<z.ZodObject<{
50
63
  password: z.ZodOptional<z.ZodString>;
51
64
  }, "strict", z.ZodTypeAny, {
@@ -76,6 +89,11 @@ export declare const PersistedConfigSchema: z.ZodObject<{
76
89
  useTls?: boolean | undefined;
77
90
  publicUseTls?: boolean | undefined;
78
91
  } | undefined;
92
+ serviceProxy?: {
93
+ publicBaseUrl?: string | undefined;
94
+ enabled?: boolean | undefined;
95
+ listen?: string | undefined;
96
+ } | undefined;
79
97
  }, {
80
98
  auth?: {
81
99
  password?: string | undefined;
@@ -99,6 +117,11 @@ export declare const PersistedConfigSchema: z.ZodObject<{
99
117
  useTls?: boolean | undefined;
100
118
  publicUseTls?: boolean | undefined;
101
119
  } | undefined;
120
+ serviceProxy?: {
121
+ publicBaseUrl?: string | undefined;
122
+ enabled?: boolean | undefined;
123
+ listen?: string | undefined;
124
+ } | undefined;
102
125
  }>, {
103
126
  auth?: {
104
127
  password?: string | undefined;
@@ -121,6 +144,11 @@ export declare const PersistedConfigSchema: z.ZodObject<{
121
144
  useTls?: boolean | undefined;
122
145
  publicUseTls?: boolean | undefined;
123
146
  } | undefined;
147
+ serviceProxy?: {
148
+ publicBaseUrl?: string | undefined;
149
+ enabled?: boolean | undefined;
150
+ listen?: string | undefined;
151
+ } | undefined;
124
152
  }, {
125
153
  auth?: {
126
154
  password?: string | undefined;
@@ -144,6 +172,11 @@ export declare const PersistedConfigSchema: z.ZodObject<{
144
172
  useTls?: boolean | undefined;
145
173
  publicUseTls?: boolean | undefined;
146
174
  } | undefined;
175
+ serviceProxy?: {
176
+ publicBaseUrl?: string | undefined;
177
+ enabled?: boolean | undefined;
178
+ listen?: string | undefined;
179
+ } | undefined;
147
180
  }>>;
148
181
  app: z.ZodOptional<z.ZodObject<{
149
182
  baseUrl: z.ZodOptional<z.ZodString>;
@@ -182,6 +215,13 @@ export declare const PersistedConfigSchema: z.ZodObject<{
182
215
  apiKey?: string | undefined;
183
216
  } | undefined;
184
217
  }>>;
218
+ worktrees: z.ZodOptional<z.ZodObject<{
219
+ root: z.ZodOptional<z.ZodString>;
220
+ }, "strict", z.ZodTypeAny, {
221
+ root?: string | undefined;
222
+ }, {
223
+ root?: string | undefined;
224
+ }>>;
185
225
  agents: z.ZodOptional<z.ZodObject<{
186
226
  providers: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodObject<{
187
227
  extends: z.ZodOptional<z.ZodString>;
@@ -199,7 +239,7 @@ export declare const PersistedConfigSchema: z.ZodObject<{
199
239
  label: z.ZodString;
200
240
  description: z.ZodOptional<z.ZodString>;
201
241
  isDefault: z.ZodOptional<z.ZodBoolean>;
202
- }, "strict", z.ZodTypeAny, {
242
+ }, "strip", z.ZodTypeAny, {
203
243
  id: string;
204
244
  label: string;
205
245
  description?: string | undefined;
@@ -210,7 +250,7 @@ export declare const PersistedConfigSchema: z.ZodObject<{
210
250
  description?: string | undefined;
211
251
  isDefault?: boolean | undefined;
212
252
  }>, "many">>;
213
- }, "strict", z.ZodTypeAny, {
253
+ }, "strip", z.ZodTypeAny, {
214
254
  id: string;
215
255
  label: string;
216
256
  description?: string | undefined;
@@ -243,7 +283,7 @@ export declare const PersistedConfigSchema: z.ZodObject<{
243
283
  label: z.ZodString;
244
284
  description: z.ZodOptional<z.ZodString>;
245
285
  isDefault: z.ZodOptional<z.ZodBoolean>;
246
- }, "strict", z.ZodTypeAny, {
286
+ }, "strip", z.ZodTypeAny, {
247
287
  id: string;
248
288
  label: string;
249
289
  description?: string | undefined;
@@ -254,7 +294,7 @@ export declare const PersistedConfigSchema: z.ZodObject<{
254
294
  description?: string | undefined;
255
295
  isDefault?: boolean | undefined;
256
296
  }>, "many">>;
257
- }, "strict", z.ZodTypeAny, {
297
+ }, "strip", z.ZodTypeAny, {
258
298
  id: string;
259
299
  label: string;
260
300
  description?: string | undefined;
@@ -280,7 +320,7 @@ export declare const PersistedConfigSchema: z.ZodObject<{
280
320
  disallowedTools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
281
321
  enabled: z.ZodOptional<z.ZodBoolean>;
282
322
  order: z.ZodOptional<z.ZodNumber>;
283
- }, "strict", z.ZodTypeAny, {
323
+ }, "strip", z.ZodTypeAny, {
284
324
  description?: string | undefined;
285
325
  label?: string | undefined;
286
326
  enabled?: boolean | undefined;
@@ -793,7 +833,34 @@ export declare const PersistedConfigSchema: z.ZodObject<{
793
833
  format?: "json" | "pretty" | undefined;
794
834
  }>>;
795
835
  }, "strict", z.ZodTypeAny, {
796
- version?: 1 | undefined;
836
+ daemon?: {
837
+ auth?: {
838
+ password?: string | undefined;
839
+ } | undefined;
840
+ mcp?: z.objectOutputType<{
841
+ enabled: z.ZodOptional<z.ZodBoolean>;
842
+ injectIntoAgents: z.ZodOptional<z.ZodBoolean>;
843
+ }, z.ZodTypeAny, "passthrough"> | undefined;
844
+ listen?: string | undefined;
845
+ hostnames?: true | string[] | undefined;
846
+ autoArchiveAfterMerge?: boolean | undefined;
847
+ appendSystemPrompt?: string | undefined;
848
+ cors?: {
849
+ allowedOrigins?: string[] | undefined;
850
+ } | undefined;
851
+ relay?: {
852
+ enabled?: boolean | undefined;
853
+ endpoint?: string | undefined;
854
+ publicEndpoint?: string | undefined;
855
+ useTls?: boolean | undefined;
856
+ publicUseTls?: boolean | undefined;
857
+ } | undefined;
858
+ serviceProxy?: {
859
+ publicBaseUrl?: string | undefined;
860
+ enabled?: boolean | undefined;
861
+ listen?: string | undefined;
862
+ } | undefined;
863
+ } | undefined;
797
864
  features?: {
798
865
  dictation?: {
799
866
  enabled?: boolean | undefined;
@@ -827,6 +894,10 @@ export declare const PersistedConfigSchema: z.ZodObject<{
827
894
  } | undefined;
828
895
  } | undefined;
829
896
  } | undefined;
897
+ version?: 1 | undefined;
898
+ worktrees?: {
899
+ root?: string | undefined;
900
+ } | undefined;
830
901
  log?: {
831
902
  level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
832
903
  console?: {
@@ -897,16 +968,18 @@ export declare const PersistedConfigSchema: z.ZodObject<{
897
968
  apiKey?: string | undefined;
898
969
  } | undefined;
899
970
  } | undefined;
971
+ }, {
900
972
  daemon?: {
901
973
  auth?: {
902
974
  password?: string | undefined;
903
975
  } | undefined;
904
- mcp?: z.objectOutputType<{
976
+ mcp?: z.objectInputType<{
905
977
  enabled: z.ZodOptional<z.ZodBoolean>;
906
978
  injectIntoAgents: z.ZodOptional<z.ZodBoolean>;
907
979
  }, z.ZodTypeAny, "passthrough"> | undefined;
908
980
  listen?: string | undefined;
909
981
  hostnames?: true | string[] | undefined;
982
+ allowedHosts?: true | string[] | undefined;
910
983
  autoArchiveAfterMerge?: boolean | undefined;
911
984
  appendSystemPrompt?: string | undefined;
912
985
  cors?: {
@@ -919,9 +992,12 @@ export declare const PersistedConfigSchema: z.ZodObject<{
919
992
  useTls?: boolean | undefined;
920
993
  publicUseTls?: boolean | undefined;
921
994
  } | undefined;
995
+ serviceProxy?: {
996
+ publicBaseUrl?: string | undefined;
997
+ enabled?: boolean | undefined;
998
+ listen?: string | undefined;
999
+ } | undefined;
922
1000
  } | undefined;
923
- }, {
924
- version?: 1 | undefined;
925
1001
  features?: {
926
1002
  dictation?: {
927
1003
  enabled?: boolean | undefined;
@@ -955,6 +1031,10 @@ export declare const PersistedConfigSchema: z.ZodObject<{
955
1031
  } | undefined;
956
1032
  } | undefined;
957
1033
  } | undefined;
1034
+ version?: 1 | undefined;
1035
+ worktrees?: {
1036
+ root?: string | undefined;
1037
+ } | undefined;
958
1038
  log?: {
959
1039
  level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
960
1040
  console?: {
@@ -992,30 +1072,6 @@ export declare const PersistedConfigSchema: z.ZodObject<{
992
1072
  apiKey?: string | undefined;
993
1073
  } | undefined;
994
1074
  } | undefined;
995
- daemon?: {
996
- auth?: {
997
- password?: string | undefined;
998
- } | undefined;
999
- mcp?: z.objectInputType<{
1000
- enabled: z.ZodOptional<z.ZodBoolean>;
1001
- injectIntoAgents: z.ZodOptional<z.ZodBoolean>;
1002
- }, z.ZodTypeAny, "passthrough"> | undefined;
1003
- listen?: string | undefined;
1004
- hostnames?: true | string[] | undefined;
1005
- allowedHosts?: true | string[] | undefined;
1006
- autoArchiveAfterMerge?: boolean | undefined;
1007
- appendSystemPrompt?: string | undefined;
1008
- cors?: {
1009
- allowedOrigins?: string[] | undefined;
1010
- } | undefined;
1011
- relay?: {
1012
- enabled?: boolean | undefined;
1013
- endpoint?: string | undefined;
1014
- publicEndpoint?: string | undefined;
1015
- useTls?: boolean | undefined;
1016
- publicUseTls?: boolean | undefined;
1017
- } | undefined;
1018
- } | undefined;
1019
1075
  }>;
1020
1076
  type PersistedConfigSchemaOutput = z.infer<typeof PersistedConfigSchema>;
1021
1077
  export type PersistedConfig = Omit<PersistedConfigSchemaOutput, "agents"> & {
@@ -49,6 +49,11 @@ const ProvidersSchema = z
49
49
  local: LocalSpeechProviderSchema.optional(),
50
50
  })
51
51
  .strict();
52
+ const WorktreesConfigSchema = z
53
+ .object({
54
+ root: z.string().min(1).optional(),
55
+ })
56
+ .strict();
52
57
  const BcryptHashSchema = z.string().regex(/^\$2[aby]\$\d{2}\$[./A-Za-z0-9]{53}$/, {
53
58
  message: "Expected a bcrypt hash",
54
59
  });
@@ -197,6 +202,17 @@ export const PersistedConfigSchema = z
197
202
  })
198
203
  .strict()
199
204
  .optional(),
205
+ serviceProxy: z
206
+ .object({
207
+ // COMPAT(serviceProxyEnabled): added 2026-06-02, remove after 2026-12-02.
208
+ // Parsed only to suppress optional public/listen layers for old configs;
209
+ // localhost service proxying remains always enabled.
210
+ enabled: z.boolean().optional(),
211
+ listen: z.string().optional(),
212
+ publicBaseUrl: z.string().url().optional(),
213
+ })
214
+ .strict()
215
+ .optional(),
200
216
  auth: DaemonAuthSchema.optional(),
201
217
  })
202
218
  .strict()
@@ -212,6 +228,7 @@ export const PersistedConfigSchema = z
212
228
  .strict()
213
229
  .optional(),
214
230
  providers: ProvidersSchema.optional(),
231
+ worktrees: WorktreesConfigSchema.optional(),
215
232
  agents: z
216
233
  .object({
217
234
  providers: z.preprocess(normalizeAgentProviders, ProviderOverridesSchema).optional(),
@@ -7,15 +7,15 @@ export declare const pidLockInfoSchema: z.ZodObject<{
7
7
  listen: z.ZodNullable<z.ZodString>;
8
8
  desktopManaged: z.ZodOptional<z.ZodBoolean>;
9
9
  }, "strip", z.ZodTypeAny, {
10
- uid: number;
11
10
  hostname: string;
11
+ uid: number;
12
12
  startedAt: string;
13
13
  listen: string | null;
14
14
  pid: number;
15
15
  desktopManaged?: boolean | undefined;
16
16
  }, {
17
- uid: number;
18
17
  hostname: string;
18
+ uid: number;
19
19
  startedAt: string;
20
20
  listen: string | null;
21
21
  pid: number;