@mduan/paseo-cli 0.11.0-fork.38 → 0.11.0-fork.39

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 (25) hide show
  1. package/dist/commands/agent/run.js +1 -0
  2. package/node_modules/@getpaseo/client/dist/daemon-client.d.ts +1 -0
  3. package/node_modules/@getpaseo/client/dist/daemon-client.js +7 -1
  4. package/node_modules/@getpaseo/client/package.json +3 -3
  5. package/node_modules/@getpaseo/highlight/package.json +1 -1
  6. package/node_modules/@getpaseo/plugin/package.json +3 -3
  7. package/node_modules/@getpaseo/protocol/dist/messages.d.ts +16 -0
  8. package/node_modules/@getpaseo/protocol/dist/messages.js +2 -0
  9. package/node_modules/@getpaseo/protocol/package.json +1 -1
  10. package/node_modules/@getpaseo/relay/package.json +1 -1
  11. package/node_modules/@getpaseo/server/dist/server/builtin-plugins/package.json +1 -1
  12. package/node_modules/@getpaseo/server/dist/server/server/agent/create-agent/create.d.ts +2 -0
  13. package/node_modules/@getpaseo/server/dist/server/server/agent/create-agent/create.js +20 -13
  14. package/node_modules/@getpaseo/server/dist/server/server/agent/turn-diffs/store.js +5 -1
  15. package/node_modules/@getpaseo/server/dist/server/server/session.js +2 -0
  16. package/node_modules/@getpaseo/server/dist/server/server/websocket-server.js +1 -0
  17. package/node_modules/@getpaseo/server/dist/server/web-ui/_expo/static/js/web/{index-9977ea1770735b265bfc050848a159d1.js → index-741733179ad64039fff446da9e5b6f11.js} +7 -7
  18. package/node_modules/@getpaseo/server/dist/server/web-ui/_expo/static/js/web/index-741733179ad64039fff446da9e5b6f11.js.br +0 -0
  19. package/node_modules/@getpaseo/server/dist/server/web-ui/_expo/static/js/web/{index-9977ea1770735b265bfc050848a159d1.js.gz → index-741733179ad64039fff446da9e5b6f11.js.gz} +0 -0
  20. package/node_modules/@getpaseo/server/dist/server/web-ui/index.html +1 -1
  21. package/node_modules/@getpaseo/server/dist/server/web-ui/index.html.br +0 -0
  22. package/node_modules/@getpaseo/server/dist/server/web-ui/index.html.gz +0 -0
  23. package/node_modules/@getpaseo/server/package.json +6 -6
  24. package/package.json +7 -7
  25. package/node_modules/@getpaseo/server/dist/server/web-ui/_expo/static/js/web/index-9977ea1770735b265bfc050848a159d1.js.br +0 -0
@@ -509,6 +509,7 @@ export async function runRunCommand(prompt, options, _command) {
509
509
  model: resolvedProviderModel.model,
510
510
  thinkingOptionId,
511
511
  initialPrompt: prompt,
512
+ notifyOnFinish: Boolean(callerAgentId && runsInBackground(options)),
512
513
  images,
513
514
  env: requestEnv,
514
515
  labels: Object.keys(labels).length > 0 ? labels : undefined,
@@ -182,6 +182,7 @@ export interface CreateAgentRequestOptions extends AgentConfigOverrides {
182
182
  env?: CreateAgentRequestMessage["env"];
183
183
  workspaceId?: string;
184
184
  callerAgentId?: string;
185
+ notifyOnFinish?: boolean;
185
186
  initialPrompt?: string;
186
187
  idempotencyKey?: string;
187
188
  clientMessageId?: string;
@@ -1637,6 +1637,11 @@ export class DaemonClient {
1637
1637
  return { agent: payload.agent, project: payload.project ?? null };
1638
1638
  }
1639
1639
  async createAgent(options) {
1640
+ // COMPAT(agentCreationFinishNotifications): added after v0.11.0-fork.38; remove gate after 2027-05-13.
1641
+ if (options.notifyOnFinish &&
1642
+ !this.lastServerInfoMessage?.features?.agentCreationFinishNotifications) {
1643
+ throw new Error("Update the host to receive agent creation finish notifications.");
1644
+ }
1640
1645
  const result = await this.creations.createAgent({
1641
1646
  ...options,
1642
1647
  config: resolveAgentConfig(options),
@@ -1655,6 +1660,7 @@ export class DaemonClient {
1655
1660
  ...(options.env ? { env: options.env } : {}),
1656
1661
  ...(options.workspaceId !== undefined ? { workspaceId: options.workspaceId } : {}),
1657
1662
  ...(options.callerAgentId !== undefined ? { callerAgentId: options.callerAgentId } : {}),
1663
+ ...(options.notifyOnFinish !== undefined ? { notifyOnFinish: options.notifyOnFinish } : {}),
1658
1664
  ...(options.initialPrompt ? { initialPrompt: options.initialPrompt } : {}),
1659
1665
  idempotencyKey: options.idempotencyKey,
1660
1666
  ...(options.clientMessageId ? { clientMessageId: options.clientMessageId } : {}),
@@ -5083,7 +5089,7 @@ export class DaemonClient {
5083
5089
  }
5084
5090
  }
5085
5091
  function resolveAgentConfig(options) {
5086
- const { config, provider, cwd, agentId: _agentId, onEvent: _onEvent, idempotencyKey: _idempotencyKey, clientMessageId: _clientMessageId, callerAgentId: _callerAgentId, outputSchema: _outputSchema, attachments: _attachments, worktree: _worktree, autoArchive: _autoArchive, env: _env, workspaceId: _workspaceId, initialPrompt: _initialPrompt, images: _images, git: _git, worktreeName: _worktreeName, requestId: _requestId, labels: _labels, ...overrides } = options;
5092
+ const { config, provider, cwd, agentId: _agentId, onEvent: _onEvent, idempotencyKey: _idempotencyKey, clientMessageId: _clientMessageId, callerAgentId: _callerAgentId, notifyOnFinish: _notifyOnFinish, outputSchema: _outputSchema, attachments: _attachments, worktree: _worktree, autoArchive: _autoArchive, env: _env, workspaceId: _workspaceId, initialPrompt: _initialPrompt, images: _images, git: _git, worktreeName: _worktreeName, requestId: _requestId, labels: _labels, ...overrides } = options;
5087
5093
  const baseConfig = {
5088
5094
  ...(provider ? { provider } : {}),
5089
5095
  ...(cwd ? { cwd } : {}),
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getpaseo/client",
3
- "version": "0.11.0-fork.38",
3
+ "version": "0.11.0-fork.39",
4
4
  "description": "Paseo client SDK package",
5
5
  "files": [
6
6
  "dist",
@@ -44,7 +44,7 @@
44
44
  "vitest": "^4.1.6"
45
45
  },
46
46
  "dependencies": {
47
- "@getpaseo/protocol": "0.11.0-fork.38",
48
- "@getpaseo/relay": "0.11.0-fork.38"
47
+ "@getpaseo/protocol": "0.11.0-fork.39",
48
+ "@getpaseo/relay": "0.11.0-fork.39"
49
49
  }
50
50
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getpaseo/highlight",
3
- "version": "0.11.0-fork.38",
3
+ "version": "0.11.0-fork.39",
4
4
  "files": [
5
5
  "dist",
6
6
  "!dist/**/*.map",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getpaseo/plugin",
3
- "version": "0.11.0-fork.38",
3
+ "version": "0.11.0-fork.39",
4
4
  "description": "Paseo plugin SDK package",
5
5
  "files": [
6
6
  "dist",
@@ -66,8 +66,8 @@
66
66
  "test": "vitest run"
67
67
  },
68
68
  "devDependencies": {
69
- "@getpaseo/client": "0.11.0-fork.38",
70
- "@getpaseo/protocol": "0.11.0-fork.38",
69
+ "@getpaseo/client": "0.11.0-fork.39",
70
+ "@getpaseo/protocol": "0.11.0-fork.39",
71
71
  "@types/node": "^20.9.0",
72
72
  "@types/react": "~19.2.0",
73
73
  "react": "19.1.0",
@@ -2185,6 +2185,7 @@ export declare const CreateAgentRequestMessageSchema: z.ZodObject<{
2185
2185
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2186
2186
  workspaceId: z.ZodOptional<z.ZodString>;
2187
2187
  callerAgentId: z.ZodOptional<z.ZodString>;
2188
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
2188
2189
  worktreeName: z.ZodOptional<z.ZodString>;
2189
2190
  initialPrompt: z.ZodOptional<z.ZodString>;
2190
2191
  clientMessageId: z.ZodOptional<z.ZodString>;
@@ -2364,6 +2365,7 @@ export declare const AgentCreateRequestSchema: z.ZodObject<{
2364
2365
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2365
2366
  workspaceId: z.ZodOptional<z.ZodString>;
2366
2367
  callerAgentId: z.ZodOptional<z.ZodString>;
2368
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
2367
2369
  worktreeName: z.ZodOptional<z.ZodString>;
2368
2370
  initialPrompt: z.ZodOptional<z.ZodString>;
2369
2371
  clientMessageId: z.ZodOptional<z.ZodString>;
@@ -2686,6 +2688,7 @@ export declare const WorkspaceInitialAgentSchema: z.ZodObject<{
2686
2688
  mimeType: z.ZodString;
2687
2689
  }, z.core.$strip>>>;
2688
2690
  callerAgentId: z.ZodOptional<z.ZodString>;
2691
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
2689
2692
  initialPrompt: z.ZodOptional<z.ZodString>;
2690
2693
  outputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2691
2694
  autoArchive: z.ZodOptional<z.ZodBoolean>;
@@ -4183,6 +4186,7 @@ export declare const WorkspaceCreateRequestSchema: z.ZodObject<{
4183
4186
  mimeType: z.ZodString;
4184
4187
  }, z.core.$strip>>>;
4185
4188
  callerAgentId: z.ZodOptional<z.ZodString>;
4189
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
4186
4190
  initialPrompt: z.ZodOptional<z.ZodString>;
4187
4191
  outputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
4188
4192
  autoArchive: z.ZodOptional<z.ZodBoolean>;
@@ -5973,6 +5977,7 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zod
5973
5977
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5974
5978
  workspaceId: z.ZodOptional<z.ZodString>;
5975
5979
  callerAgentId: z.ZodOptional<z.ZodString>;
5980
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
5976
5981
  worktreeName: z.ZodOptional<z.ZodString>;
5977
5982
  initialPrompt: z.ZodOptional<z.ZodString>;
5978
5983
  clientMessageId: z.ZodOptional<z.ZodString>;
@@ -7059,6 +7064,7 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zod
7059
7064
  mimeType: z.ZodString;
7060
7065
  }, z.core.$strip>>>;
7061
7066
  callerAgentId: z.ZodOptional<z.ZodString>;
7067
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
7062
7068
  initialPrompt: z.ZodOptional<z.ZodString>;
7063
7069
  outputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
7064
7070
  autoArchive: z.ZodOptional<z.ZodBoolean>;
@@ -7234,6 +7240,7 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zod
7234
7240
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
7235
7241
  workspaceId: z.ZodOptional<z.ZodString>;
7236
7242
  callerAgentId: z.ZodOptional<z.ZodString>;
7243
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
7237
7244
  worktreeName: z.ZodOptional<z.ZodString>;
7238
7245
  initialPrompt: z.ZodOptional<z.ZodString>;
7239
7246
  clientMessageId: z.ZodOptional<z.ZodString>;
@@ -7981,6 +7988,7 @@ export declare const ServerInfoStatusPayloadSchema: z.ZodPipe<z.ZodObject<{
7981
7988
  agentRequestReceipts: z.ZodOptional<z.ZodBoolean>;
7982
7989
  workspaceRequestReceipts: z.ZodOptional<z.ZodBoolean>;
7983
7990
  creationLifecycle: z.ZodOptional<z.ZodBoolean>;
7991
+ agentCreationFinishNotifications: z.ZodOptional<z.ZodBoolean>;
7984
7992
  hubAgentRpc: z.ZodOptional<z.ZodBoolean>;
7985
7993
  providersSnapshot: z.ZodOptional<z.ZodBoolean>;
7986
7994
  usageSources: z.ZodOptional<z.ZodBoolean>;
@@ -8104,6 +8112,7 @@ export declare const ServerInfoStatusPayloadSchema: z.ZodPipe<z.ZodObject<{
8104
8112
  agentRequestReceipts?: boolean | undefined;
8105
8113
  workspaceRequestReceipts?: boolean | undefined;
8106
8114
  creationLifecycle?: boolean | undefined;
8115
+ agentCreationFinishNotifications?: boolean | undefined;
8107
8116
  hubAgentRpc?: boolean | undefined;
8108
8117
  providersSnapshot?: boolean | undefined;
8109
8118
  usageSources?: boolean | undefined;
@@ -8228,6 +8237,7 @@ export declare const ServerInfoStatusPayloadSchema: z.ZodPipe<z.ZodObject<{
8228
8237
  agentRequestReceipts?: boolean | undefined;
8229
8238
  workspaceRequestReceipts?: boolean | undefined;
8230
8239
  creationLifecycle?: boolean | undefined;
8240
+ agentCreationFinishNotifications?: boolean | undefined;
8231
8241
  hubAgentRpc?: boolean | undefined;
8232
8242
  providersSnapshot?: boolean | undefined;
8233
8243
  usageSources?: boolean | undefined;
@@ -39561,6 +39571,7 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
39561
39571
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
39562
39572
  workspaceId: z.ZodOptional<z.ZodString>;
39563
39573
  callerAgentId: z.ZodOptional<z.ZodString>;
39574
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
39564
39575
  worktreeName: z.ZodOptional<z.ZodString>;
39565
39576
  initialPrompt: z.ZodOptional<z.ZodString>;
39566
39577
  clientMessageId: z.ZodOptional<z.ZodString>;
@@ -40647,6 +40658,7 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
40647
40658
  mimeType: z.ZodString;
40648
40659
  }, z.core.$strip>>>;
40649
40660
  callerAgentId: z.ZodOptional<z.ZodString>;
40661
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
40650
40662
  initialPrompt: z.ZodOptional<z.ZodString>;
40651
40663
  outputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
40652
40664
  autoArchive: z.ZodOptional<z.ZodBoolean>;
@@ -40822,6 +40834,7 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
40822
40834
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
40823
40835
  workspaceId: z.ZodOptional<z.ZodString>;
40824
40836
  callerAgentId: z.ZodOptional<z.ZodString>;
40837
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
40825
40838
  worktreeName: z.ZodOptional<z.ZodString>;
40826
40839
  initialPrompt: z.ZodOptional<z.ZodString>;
40827
40840
  clientMessageId: z.ZodOptional<z.ZodString>;
@@ -56273,6 +56286,7 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
56273
56286
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
56274
56287
  workspaceId: z.ZodOptional<z.ZodString>;
56275
56288
  callerAgentId: z.ZodOptional<z.ZodString>;
56289
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
56276
56290
  worktreeName: z.ZodOptional<z.ZodString>;
56277
56291
  initialPrompt: z.ZodOptional<z.ZodString>;
56278
56292
  clientMessageId: z.ZodOptional<z.ZodString>;
@@ -57359,6 +57373,7 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
57359
57373
  mimeType: z.ZodString;
57360
57374
  }, z.core.$strip>>>;
57361
57375
  callerAgentId: z.ZodOptional<z.ZodString>;
57376
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
57362
57377
  initialPrompt: z.ZodOptional<z.ZodString>;
57363
57378
  outputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
57364
57379
  autoArchive: z.ZodOptional<z.ZodBoolean>;
@@ -57534,6 +57549,7 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
57534
57549
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
57535
57550
  workspaceId: z.ZodOptional<z.ZodString>;
57536
57551
  callerAgentId: z.ZodOptional<z.ZodString>;
57552
+ notifyOnFinish: z.ZodOptional<z.ZodBoolean>;
57537
57553
  worktreeName: z.ZodOptional<z.ZodString>;
57538
57554
  initialPrompt: z.ZodOptional<z.ZodString>;
57539
57555
  clientMessageId: z.ZodOptional<z.ZodString>;
@@ -1559,6 +1559,7 @@ export const CreateAgentRequestMessageSchema = z.object({
1559
1559
  // Optional caller context lets managed CLI invocations use the same daemon-owned
1560
1560
  // workspace and parentage policy as agent-scoped MCP creation.
1561
1561
  callerAgentId: z.string().optional(),
1562
+ notifyOnFinish: z.boolean().optional(),
1562
1563
  worktreeName: z.string().optional(),
1563
1564
  initialPrompt: z.string().optional(),
1564
1565
  clientMessageId: z.string().optional(),
@@ -3310,6 +3311,7 @@ export const ServerInfoStatusPayloadSchema = z
3310
3311
  // COMPAT(workspaceRequestReceipts): added in v0.8.0; remove gate after 2027-03-07.
3311
3312
  workspaceRequestReceipts: z.boolean().optional(),
3312
3313
  creationLifecycle: z.boolean().optional(),
3314
+ agentCreationFinishNotifications: z.boolean().optional(),
3313
3315
  // COMPAT(hubAgentRpc): added in v0.8.0; remove gate after 2027-03-05.
3314
3316
  hubAgentRpc: z.boolean().optional(),
3315
3317
  providersSnapshot: z.boolean().optional(),
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getpaseo/protocol",
3
- "version": "0.11.0-fork.38",
3
+ "version": "0.11.0-fork.39",
4
4
  "description": "Paseo shared protocol schemas and wire types",
5
5
  "files": [
6
6
  "dist",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getpaseo/relay",
3
- "version": "0.11.0-fork.38",
3
+ "version": "0.11.0-fork.39",
4
4
  "description": "Paseo relay for bridging daemon and client connections",
5
5
  "files": [
6
6
  "dist",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getpaseo/builtin-plugins",
3
- "version": "0.11.0-fork.38",
3
+ "version": "0.11.0-fork.39",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -26,6 +26,8 @@ export interface CreateAgentCommandDependencies {
26
26
  export type EnsureWorkspaceForCreate = (cwd: string, firstAgentContext?: FirstAgentContext) => Promise<string>;
27
27
  export interface CreateAgentFromSessionInput {
28
28
  kind: "session";
29
+ callerAgentId?: string;
30
+ notifyOnFinish?: boolean;
29
31
  onAgentReady?: (agent: ManagedAgent) => Promise<void>;
30
32
  agentId?: string;
31
33
  config: AgentSessionConfig;
@@ -46,21 +46,16 @@ export async function createAgentCommand(dependencies, input) {
46
46
  input.onCreated?.({ agentId: snapshot.id, createdWorktree: resolved.createdWorktree ?? null });
47
47
  }
48
48
  if (resolved.prompt !== undefined) {
49
- const sendResult = await sendInitialPrompt(dependencies, resolved, snapshot);
49
+ const sendResult = await sendInitialPrompt({
50
+ dependencies,
51
+ resolved,
52
+ snapshot,
53
+ callerAgentId: input.notifyOnFinish ? input.callerAgentId : undefined,
54
+ });
50
55
  initialPromptStarted = sendResult.started;
51
56
  liveSnapshot = sendResult.liveSnapshot;
52
57
  initialPromptError = sendResult.error ?? null;
53
58
  }
54
- if (input.kind === "mcp" && input.notifyOnFinish && input.callerAgentId && initialPromptStarted) {
55
- setupFinishNotification({
56
- agentManager: dependencies.agentManager,
57
- agentStorage: dependencies.agentStorage,
58
- childAgentId: snapshot.id,
59
- callerAgentId: input.callerAgentId,
60
- requireParentOwnership: true,
61
- logger: dependencies.logger,
62
- });
63
- }
64
59
  return {
65
60
  snapshot,
66
61
  liveSnapshot,
@@ -243,13 +238,13 @@ async function ensureWorkspaceForMcpCreate(dependencies, cwd, initialPrompt) {
243
238
  }
244
239
  return dependencies.ensureWorkspaceForCreate(cwd, { prompt: initialPrompt });
245
240
  }
246
- async function sendInitialPrompt(dependencies, resolved, snapshot) {
241
+ async function sendInitialPrompt({ dependencies, resolved, snapshot, callerAgentId, }) {
247
242
  try {
248
243
  const prompt = resolved.prompt;
249
244
  if (prompt === undefined) {
250
245
  return { started: false, liveSnapshot: snapshot };
251
246
  }
252
- const liveSnapshot = await startCreatedAgentInitialPrompt({
247
+ const dispatch = startCreatedAgentInitialPrompt({
253
248
  agentManager: dependencies.agentManager,
254
249
  agentId: snapshot.id,
255
250
  snapshot,
@@ -257,6 +252,18 @@ async function sendInitialPrompt(dependencies, resolved, snapshot) {
257
252
  runOptions: resolved.runOptions,
258
253
  logger: resolved.promptLogger ?? dependencies.logger,
259
254
  });
255
+ if (callerAgentId) {
256
+ setupFinishNotification({
257
+ agentManager: dependencies.agentManager,
258
+ agentStorage: dependencies.agentStorage,
259
+ childAgentId: snapshot.id,
260
+ callerAgentId,
261
+ requireParentOwnership: true,
262
+ dispatch,
263
+ logger: dependencies.logger,
264
+ });
265
+ }
266
+ const liveSnapshot = await dispatch;
260
267
  return { started: true, liveSnapshot };
261
268
  }
262
269
  catch (error) {
@@ -74,7 +74,11 @@ export class TurnDiffStore {
74
74
  return record ? record.turns.map(toSummary) : [];
75
75
  }
76
76
  async resolveRange(agentId, target) {
77
- const record = await this.enqueue(agentId, () => this.read(agentId));
77
+ let record = target.kind === "turn" ? await this.read(agentId) : null;
78
+ const hasSavedTurn = target.kind === "turn" && record?.turns.some((turn) => turn.turnId === target.turnId);
79
+ // Atomic records let saved turns bypass later snapshots without exposing partial writes.
80
+ if (!hasSavedTurn)
81
+ record = await this.enqueue(agentId, () => this.read(agentId));
78
82
  if (!record)
79
83
  return null;
80
84
  const { repoRoot } = record;
@@ -3373,6 +3373,8 @@ export class Session {
3373
3373
  providerSnapshotManager: this.providerSnapshotManager,
3374
3374
  }, {
3375
3375
  kind: "session",
3376
+ callerAgentId: msg.callerAgentId,
3377
+ notifyOnFinish: msg.notifyOnFinish,
3376
3378
  onAgentReady: async (agent) => {
3377
3379
  createdAgentId = agent.id;
3378
3380
  await onAgentReady?.(await this.buildAgentPayload(agent));
@@ -1302,6 +1302,7 @@ export class VoiceAssistantWebSocketServer {
1302
1302
  agentRequestReceipts: true,
1303
1303
  workspaceRequestReceipts: true,
1304
1304
  creationLifecycle: true,
1305
+ agentCreationFinishNotifications: true,
1305
1306
  hubAgentRpc: true,
1306
1307
  // COMPAT(directorySync): added in v0.3.x, remove gate after 2027-02-12.
1307
1308
  directorySync: true,