@superblocksteam/vite-plugin-file-sync 2.0.161-next.0 → 2.0.162-next.0

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 (78) hide show
  1. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts +2 -0
  2. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
  3. package/dist/ai-service/agent/prompts/build-base-system-prompt.js +39 -27
  4. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  5. package/dist/ai-service/agent/tools/rbac/effective-permissions.d.ts +13 -0
  6. package/dist/ai-service/agent/tools/rbac/effective-permissions.d.ts.map +1 -0
  7. package/dist/ai-service/agent/tools/rbac/effective-permissions.js +49 -0
  8. package/dist/ai-service/agent/tools/rbac/effective-permissions.js.map +1 -0
  9. package/dist/ai-service/agent/tools.d.ts +5 -5
  10. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  11. package/dist/ai-service/agent/tools.js +27 -9
  12. package/dist/ai-service/agent/tools.js.map +1 -1
  13. package/dist/ai-service/agent/tools2/access-control.d.ts +5 -0
  14. package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
  15. package/dist/ai-service/agent/tools2/access-control.js +16 -0
  16. package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
  17. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +2 -0
  18. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
  19. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +6 -2
  20. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
  21. package/dist/ai-service/app-skills/helpers.d.ts +1 -1
  22. package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
  23. package/dist/ai-service/app-skills/helpers.js +2 -1
  24. package/dist/ai-service/app-skills/helpers.js.map +1 -1
  25. package/dist/ai-service/chat/chat-session-store.d.ts +2 -0
  26. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  27. package/dist/ai-service/chat/chat-session-store.js +2 -2
  28. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  29. package/dist/ai-service/checkpoint-screenshot.d.ts +9 -0
  30. package/dist/ai-service/checkpoint-screenshot.d.ts.map +1 -0
  31. package/dist/ai-service/checkpoint-screenshot.js +40 -0
  32. package/dist/ai-service/checkpoint-screenshot.js.map +1 -0
  33. package/dist/ai-service/index.d.ts +15 -9
  34. package/dist/ai-service/index.d.ts.map +1 -1
  35. package/dist/ai-service/index.js +141 -58
  36. package/dist/ai-service/index.js.map +1 -1
  37. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
  38. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts.map +1 -1
  39. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +9 -7
  40. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js.map +1 -1
  41. package/dist/ai-service/state-machine/clark-fsm.d.ts +18 -9
  42. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  43. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  44. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  45. package/dist/ai-service/state-machine/handlers/agent-planning.js +68 -53
  46. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  47. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  48. package/dist/ai-service/state-machine/handlers/llm-generating.js +15 -2
  49. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  50. package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
  51. package/dist/ai-service/state-machine/helpers/peer.js +21 -9
  52. package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
  53. package/dist/ai-service/state-machine/helpers/stable-peer.d.ts +20 -6
  54. package/dist/ai-service/state-machine/helpers/stable-peer.d.ts.map +1 -1
  55. package/dist/ai-service/state-machine/helpers/stable-peer.js +124 -30
  56. package/dist/ai-service/state-machine/helpers/stable-peer.js.map +1 -1
  57. package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
  58. package/dist/ai-service/state-machine/mocks.js +1 -0
  59. package/dist/ai-service/state-machine/mocks.js.map +1 -1
  60. package/dist/ai-service/types.d.ts +4 -0
  61. package/dist/ai-service/types.d.ts.map +1 -1
  62. package/dist/file-sync-vite-plugin.d.ts +5 -1
  63. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  64. package/dist/file-sync-vite-plugin.js +27 -11
  65. package/dist/file-sync-vite-plugin.js.map +1 -1
  66. package/dist/inject-index-vite-plugin.d.ts +15 -0
  67. package/dist/inject-index-vite-plugin.d.ts.map +1 -1
  68. package/dist/inject-index-vite-plugin.js +31 -0
  69. package/dist/inject-index-vite-plugin.js.map +1 -1
  70. package/dist/lock-service/index.d.ts +1 -0
  71. package/dist/lock-service/index.d.ts.map +1 -1
  72. package/dist/lock-service/index.js +14 -7
  73. package/dist/lock-service/index.js.map +1 -1
  74. package/dist/socket-manager.d.ts +12 -4
  75. package/dist/socket-manager.d.ts.map +1 -1
  76. package/dist/socket-manager.js +195 -39
  77. package/dist/socket-manager.js.map +1 -1
  78. package/package.json +9 -9
@@ -15,7 +15,8 @@ import type { ContextId } from "./llm/context-v2/types.js";
15
15
  import { RecordingManager } from "./recording/index.js";
16
16
  import type { BuildErrorPhase, BuildSystemError } from "./state-machine/clark-fsm.js";
17
17
  import { CLARK_USAGE_ORIGIN } from "./state-machine/helpers/prompt-request-metrics.js";
18
- import type { AiServiceConfig, AiServiceEvents, EditorClient, UserChange, ApiUpdate } from "./types.ts";
18
+ import { StablePeer } from "./state-machine/helpers/stable-peer.js";
19
+ import type { AiServiceConfig, AiServiceEvents, AiInputSource, EditorClient, UserChange, ApiUpdate } from "./types.ts";
19
20
  import type { PeerConnectionLiveness } from "./util/peer-liveness.js";
20
21
  export { AiServiceFeatureFlags } from "./features.js";
21
22
  export { getManagedNativeDbGateDenialReason, hasEditLifecycleCapability, isManagedNativeDbAvailableForClark, } from "./managed-native-db-availability.js";
@@ -87,7 +88,7 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
87
88
  private readonly toolRegistry;
88
89
  private readonly requestDeduplicator;
89
90
  private readonly entityPermissionStore;
90
- private _onGenerationCompleteCallback;
91
+ private readonly generationCompleteWaiters;
91
92
  private activeGenerationTrace;
92
93
  /** JWT-derived userId of the currently-authenticated peer, set by
93
94
  * `notifyAuthenticatedRpc` and cleared on disconnect / peer swap.
@@ -172,6 +173,8 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
172
173
  getBranchName: () => string;
173
174
  getLastCommitId: () => string | undefined;
174
175
  }): void;
176
+ setAuthenticatedEditorPeersProvider(provider: Parameters<StablePeer["setAuthenticatedEditorPeersProvider"]>[0]): void;
177
+ setAuthenticatedGatewayPeersProvider(provider: Parameters<StablePeer["setAuthenticatedGatewayPeersProvider"]>[0]): void;
175
178
  setOnGitOperationComplete(callback: () => void): void;
176
179
  get appRootDirPath(): string;
177
180
  get organizationId(): string;
@@ -391,6 +394,7 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
391
394
  * with no UI state. (APPS-4080)
392
395
  */
393
396
  private tryHandlePaywallForRequest;
397
+ private publishUserInput;
394
398
  /**
395
399
  * Persist the user's prompt + the "credits ran out" advice and open the
396
400
  * paywall modal when the pre-call quota check denies the request. Mirrors
@@ -415,7 +419,7 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
415
419
  * the chat is durable across refresh even if the live peer push drops.
416
420
  */
417
421
  private handlePreCallPaywall;
418
- handleAiGenerate(request: AiGenerateRequest): Promise<void>;
422
+ handleAiGenerate(request: AiGenerateRequest, inputSource?: AiInputSource): Promise<void>;
419
423
  handleAiSummarizeApiUsage(request: AiSummarizeApiUsageRequest): Promise<void>;
420
424
  handleAiSummarizeError(request: AiSummarizeErrorRequest): Promise<void>;
421
425
  handleAiLabelAttachment(request: AiLabelAttachmentRequest): Promise<AiLabelAttachmentResponse>;
@@ -427,10 +431,12 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
427
431
  handleUserAcceptedDraft(silently?: boolean): Promise<void>;
428
432
  handleUserRejectedDraft(silently?: boolean): Promise<void>;
429
433
  /**
430
- * Called when the user closes the integration setup form via the X button.
431
- * Clears backend state so Clark knows the form is no longer open.
434
+ * Called when the integration setup form closes. Clears backend state so
435
+ * Clark knows the form is no longer open.
432
436
  */
433
- handleIntegrationSetupClosed(): Promise<void>;
437
+ handleIntegrationSetupClosed(request?: void | {
438
+ outcome: "abandoned" | "saved";
439
+ }): Promise<void>;
434
440
  handleUserCanceled(): Promise<void>;
435
441
  /**
436
442
  * UI-initiated cancellation of a background task. Delegates to
@@ -460,7 +466,8 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
460
466
  * Submit a prompt with interrupt behavior.
461
467
  * If not busy, starts immediately. Otherwise interrupts and continues.
462
468
  */
463
- handleAiGenerateWithQueue(request: AiGenerateRequest, mode: "queue" | "interrupt"): Promise<{
469
+ handleAiGenerateWithQueue(request: AiGenerateRequest, mode: "queue" | "interrupt", inputSource?: AiInputSource): Promise<{
470
+ generationId?: string;
464
471
  status: "started" | "interrupted";
465
472
  }>;
466
473
  /**
@@ -685,8 +692,7 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
685
692
  */
686
693
  waitUntilGenerationComplete(): Promise<void>;
687
694
  /**
688
- * Manually trigger the generation complete callback.
689
- * Should be called when Clark transitions to Idle or AwaitingUser state.
695
+ * Resolve generation waiters when Clark reaches a terminal state.
690
696
  */
691
697
  private triggerGenerationComplete;
692
698
  isGeneratingFullAppOrBroadUpdate(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-service/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-service/index.ts"],"names":[],"mappings":"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"}
@@ -362,6 +362,7 @@ const NPM_REGISTRY_REFRESH_WAIT_MS = 5_000;
362
362
  * prompt proceeds with no baseCommitId rather than waiting indefinitely.
363
363
  */
364
364
  const RESOLVE_BASE_COMMIT_ID_CHAT_STORE_TIMEOUT_MS = 2_000;
365
+ const GENERATION_COMPLETION_WAIT_TIMEOUT_MS = 30_000;
365
366
  export function truncateString(str, maxBytes) {
366
367
  // Rough approximation: assume 2 bytes per character
367
368
  const maxChars = Math.floor(maxBytes / 2);
@@ -427,11 +428,13 @@ export class AiService extends TracedEventEmitter {
427
428
  chatSessionStore;
428
429
  contextManagerV2;
429
430
  llmClient;
430
- stablePeer = new StablePeer();
431
+ stablePeer = new StablePeer({
432
+ currentRequestKey: () => this.clark.context.promptOutcomeDedupeKey,
433
+ });
431
434
  toolRegistry = new ToolRegistry();
432
435
  requestDeduplicator = new RequestDeduplicator();
433
436
  entityPermissionStore = new SessionEntityPermissionStore();
434
- _onGenerationCompleteCallback;
437
+ generationCompleteWaiters = new Set();
435
438
  activeGenerationTrace;
436
439
  /** JWT-derived userId of the currently-authenticated peer, set by
437
440
  * `notifyAuthenticatedRpc` and cleared on disconnect / peer swap.
@@ -557,6 +560,12 @@ export class AiService extends TracedEventEmitter {
557
560
  setSyncContextProvider(provider) {
558
561
  this._syncContextProvider = provider;
559
562
  }
563
+ setAuthenticatedEditorPeersProvider(provider) {
564
+ this.stablePeer.setAuthenticatedEditorPeersProvider(provider);
565
+ }
566
+ setAuthenticatedGatewayPeersProvider(provider) {
567
+ this.stablePeer.setAuthenticatedGatewayPeersProvider(provider);
568
+ }
560
569
  setOnGitOperationComplete(callback) {
561
570
  this._onGitOperationComplete = callback;
562
571
  }
@@ -1416,20 +1425,6 @@ export class AiService extends TracedEventEmitter {
1416
1425
  this.getLogger().info(`[ai-service] Transitioned from ${from} to ${to} with event ${event.type}`);
1417
1426
  try {
1418
1427
  await handler(transition);
1419
- // Trigger callback when Clark enters idle states (generation complete)
1420
- if (to === ClarkStateNames.Idle ||
1421
- to === ClarkStateNames.AwaitingUser) {
1422
- // The turn is over: drop per-turn billing attribution so stray
1423
- // LLM calls before the next prompt bill as default generation.
1424
- if (clark.context.usageMetadata || clark.context.baseCommitId) {
1425
- clark.updateContext((context) => ({
1426
- ...context,
1427
- usageMetadata: undefined,
1428
- baseCommitId: undefined,
1429
- }));
1430
- }
1431
- this.triggerGenerationComplete();
1432
- }
1433
1428
  }
1434
1429
  catch (error) {
1435
1430
  const errorMeta = getErrorMeta(error);
@@ -1451,6 +1446,22 @@ export class AiService extends TracedEventEmitter {
1451
1446
  }
1452
1447
  throw error;
1453
1448
  }
1449
+ finally {
1450
+ if (to === ClarkStateNames.Idle ||
1451
+ to === ClarkStateNames.AwaitingUser ||
1452
+ to === ClarkStateNames.Dead) {
1453
+ // The turn is over: drop per-turn billing attribution so stray
1454
+ // LLM calls before the next prompt bill as default generation.
1455
+ if (clark.context.usageMetadata || clark.context.baseCommitId) {
1456
+ clark.updateContext((context) => ({
1457
+ ...context,
1458
+ usageMetadata: undefined,
1459
+ baseCommitId: undefined,
1460
+ }));
1461
+ }
1462
+ this.triggerGenerationComplete();
1463
+ }
1464
+ }
1454
1465
  };
1455
1466
  };
1456
1467
  }
@@ -1943,7 +1954,7 @@ export class AiService extends TracedEventEmitter {
1943
1954
  * chat record + modal — instead of the interrupt path silently rejecting
1944
1955
  * with no UI state. (APPS-4080)
1945
1956
  */
1946
- async tryHandlePaywallForRequest(request) {
1957
+ async tryHandlePaywallForRequest(request, inputSource) {
1947
1958
  try {
1948
1959
  await this.ensureAiQuotaAvailable(this.config.inferenceAuthToken ?? request.jwt);
1949
1960
  return undefined;
@@ -1952,13 +1963,28 @@ export class AiService extends TracedEventEmitter {
1952
1963
  if (error instanceof Error) {
1953
1964
  const reason = getAiQuotaPaywallReasonFromMessage(error.message);
1954
1965
  if (reason) {
1955
- await this.handlePreCallPaywall(request, reason);
1966
+ await this.handlePreCallPaywall(request, reason, inputSource);
1956
1967
  return reason;
1957
1968
  }
1958
1969
  }
1959
1970
  throw error;
1960
1971
  }
1961
1972
  }
1973
+ publishUserInput(message, inputSource, includeInputPeer) {
1974
+ if (inputSource?.kind === "editor") {
1975
+ this.stablePeer.pushMessageToObservers(message, inputSource, {
1976
+ includeInputPeer,
1977
+ });
1978
+ return;
1979
+ }
1980
+ if (!includeInputPeer || !this.clark.context.peer)
1981
+ return;
1982
+ void this.clark.context.peer.call
1983
+ .aiPushMessage(message)
1984
+ .catch((err) => {
1985
+ this.getLogger().warn("[ai-service] Failed to publish user input", getErrorMeta(err));
1986
+ });
1987
+ }
1962
1988
  /**
1963
1989
  * Persist the user's prompt + the "credits ran out" advice and open the
1964
1990
  * paywall modal when the pre-call quota check denies the request. Mirrors
@@ -1982,7 +2008,7 @@ export class AiService extends TracedEventEmitter {
1982
2008
  * - Uses fire-and-forget peer pushes after each `await` on the store so
1983
2009
  * the chat is durable across refresh even if the live peer push drops.
1984
2010
  */
1985
- async handlePreCallPaywall(request, paywallReason) {
2011
+ async handlePreCallPaywall(request, paywallReason, inputSource) {
1986
2012
  this.getLogger().info(`[ai-service] Pre-call paywall denial; persisting prompt + advice for chat history`, { paywallReason });
1987
2013
  // APPS-4080: pre-cache the CANCELLED + paywallReason snapshot into
1988
2014
  // `lastGenerationState` BEFORE any chat-persistence await. Without
@@ -2004,22 +2030,20 @@ export class AiService extends TracedEventEmitter {
2004
2030
  // 1. Persist + echo the user's prompt so the chat doesn't lose it.
2005
2031
  const responseMetadata = request.responseMetadata;
2006
2032
  if (!responseMetadata) {
2033
+ const messageId = randomUUID();
2034
+ this.publishUserInput({
2035
+ attachments: request.promptContext?.attachments,
2036
+ content: request.prompt,
2037
+ id: messageId,
2038
+ role: "user",
2039
+ timestamp: Date.now(),
2040
+ type: "text",
2041
+ }, inputSource, true);
2007
2042
  try {
2008
- const chatmessageId = await this.chatSessionStore.recordUser(request.prompt, { attachments: request.promptContext?.attachments });
2009
- if (chatmessageId && this.clark.context.peer) {
2010
- void this.clark.context.peer.call
2011
- .aiPushMessage({
2012
- role: "user",
2013
- type: "text",
2014
- content: request.prompt,
2015
- id: chatmessageId,
2016
- timestamp: Date.now(),
2017
- attachments: request.promptContext?.attachments,
2018
- })
2019
- .catch((err) => {
2020
- this.getLogger().warn("[ai-service] Failed to echo pre-call paywall user prompt", getErrorMeta(err));
2021
- });
2022
- }
2043
+ await this.chatSessionStore.recordUser(request.prompt, {
2044
+ attachments: request.promptContext?.attachments,
2045
+ messageId,
2046
+ });
2023
2047
  }
2024
2048
  catch (err) {
2025
2049
  this.getLogger().warn("[ai-service] Failed to persist pre-call paywall user prompt", getErrorMeta(err));
@@ -2036,8 +2060,37 @@ export class AiService extends TracedEventEmitter {
2036
2060
  // `tool_permission_response` is intentionally skipped — those
2037
2061
  // don't have a persisted chat representation. The user will see
2038
2062
  // the permission prompt again on resume.
2063
+ const isTypedOverride = (responseMetadata.type === "multi_choice_response" &&
2064
+ responseMetadata.selectedChoiceIndices.length === 0) ||
2065
+ (responseMetadata.type === "plan_response" &&
2066
+ !responseMetadata.approved);
2067
+ const responseMessage = responseMetadata.type === "multi_choice_response" &&
2068
+ responseMetadata.selectedChoiceIndices.length > 0
2069
+ ? {
2070
+ content: request.prompt,
2071
+ id: randomUUID(),
2072
+ responseToMessageId: responseMetadata.responseToMessageId,
2073
+ role: "user",
2074
+ selectedChoiceIndices: responseMetadata.selectedChoiceIndices,
2075
+ selectedScopes: responseMetadata.selectedScopes,
2076
+ timestamp: Date.now(),
2077
+ type: "multi_choice_response",
2078
+ }
2079
+ : isTypedOverride
2080
+ ? {
2081
+ content: request.prompt,
2082
+ id: randomUUID(),
2083
+ role: "user",
2084
+ timestamp: Date.now(),
2085
+ type: "text",
2086
+ }
2087
+ : undefined;
2088
+ if (responseMessage) {
2089
+ this.publishUserInput(responseMessage, inputSource, isTypedOverride);
2090
+ }
2039
2091
  const metadata = responseMetadata.type === "multi_choice_response"
2040
2092
  ? {
2093
+ ...(responseMessage?.id ? { messageId: responseMessage.id } : {}),
2041
2094
  responseToMessageId: responseMetadata.responseToMessageId,
2042
2095
  selectedChoiceIndices: responseMetadata.selectedChoiceIndices,
2043
2096
  selectedScopes: responseMetadata.selectedScopes,
@@ -2061,13 +2114,19 @@ export class AiService extends TracedEventEmitter {
2061
2114
  selectedLabel: responseMetadata.selectedLabel,
2062
2115
  }
2063
2116
  : {
2117
+ ...(responseMessage?.id
2118
+ ? { messageId: responseMessage.id }
2119
+ : {}),
2064
2120
  responseToMessageId: responseMetadata.responseToMessageId,
2065
2121
  approved: responseMetadata.approved,
2066
2122
  enableTesting: responseMetadata.enableTesting,
2067
2123
  };
2068
2124
  try {
2069
2125
  const chatmessageId = await this.chatSessionStore.recordUserResponse(request.prompt, responseMetadata.type, metadata);
2070
- if (chatmessageId && this.clark.context.peer) {
2126
+ if (chatmessageId &&
2127
+ this.clark.context.peer &&
2128
+ !responseMessage &&
2129
+ inputSource?.kind !== "editor") {
2071
2130
  void this.clark.context.peer.call
2072
2131
  .aiPushMessage({
2073
2132
  role: "user",
@@ -2218,7 +2277,7 @@ export class AiService extends TracedEventEmitter {
2218
2277
  }
2219
2278
  }
2220
2279
  }
2221
- async handleAiGenerate(request) {
2280
+ async handleAiGenerate(request, inputSource) {
2222
2281
  this.getLogger().info(`[ai-service] handleAiGenerate: peerId=${this.stablePeer.peerId ?? "unknown"}`);
2223
2282
  this.storeMigrationTurnCredentials(request.jwt, request.llmConfig);
2224
2283
  if (this.clark.state === ClarkStateNames.Dead) {
@@ -2254,7 +2313,7 @@ export class AiService extends TracedEventEmitter {
2254
2313
  // advice + open modal via the same `aiSetGenerationState(CANCELLED,
2255
2314
  // paywallReason)` saga path the mid-stream paywall uses, then resolve
2256
2315
  // the socket call so the UI's catch doesn't run. (APPS-4080)
2257
- const paywallReason = await this.tryHandlePaywallForRequest(request);
2316
+ const paywallReason = await this.tryHandlePaywallForRequest(request, inputSource);
2258
2317
  if (paywallReason) {
2259
2318
  recordPromptEntryRejection({
2260
2319
  dedupeKey: resolvePromptRequestDedupeKey(request),
@@ -2348,6 +2407,7 @@ export class AiService extends TracedEventEmitter {
2348
2407
  .with(activeGenerationTrace.context, () => Promise.resolve(transitionTo({
2349
2408
  type: USER_SENT_PROMPT,
2350
2409
  request,
2410
+ inputSource,
2351
2411
  })))
2352
2412
  .catch((error) => {
2353
2413
  activeGenerationTrace.finish(error);
@@ -2789,6 +2849,9 @@ export class AiService extends TracedEventEmitter {
2789
2849
  }
2790
2850
  async handleUserAcceptedDraft(silently) {
2791
2851
  this.getLogger().info(`[ai-service] handleUserAcceptedDraft`);
2852
+ if (this.clark.state === ClarkStateNames.Idle) {
2853
+ return;
2854
+ }
2792
2855
  this.submitAcceptanceEvaluation(true);
2793
2856
  if (this.clark.state !== ClarkStateNames.AwaitingUser) {
2794
2857
  throw new Error("Service is not awaiting user input");
@@ -2809,10 +2872,10 @@ export class AiService extends TracedEventEmitter {
2809
2872
  });
2810
2873
  }
2811
2874
  /**
2812
- * Called when the user closes the integration setup form via the X button.
2813
- * Clears backend state so Clark knows the form is no longer open.
2875
+ * Called when the integration setup form closes. Clears backend state so
2876
+ * Clark knows the form is no longer open.
2814
2877
  */
2815
- async handleIntegrationSetupClosed() {
2878
+ async handleIntegrationSetupClosed(request = undefined) {
2816
2879
  this.clark.updateContext((ctx) => ({
2817
2880
  ...ctx,
2818
2881
  pendingIntegrationActionPrompt: undefined,
@@ -2825,7 +2888,9 @@ export class AiService extends TracedEventEmitter {
2825
2888
  contextManagerV2: this.contextManagerV2,
2826
2889
  applicationId: this.config.applicationId,
2827
2890
  };
2828
- await this.clark.recordSystemMessage(params, "Environment event", "User closed the integration setup form. The integration setup might not have been completed successfully.");
2891
+ await this.clark.recordSystemMessage(params, "Environment event", request && request.outcome === "saved"
2892
+ ? "User saved the integration and closed the integration setup form successfully."
2893
+ : "User closed the integration setup form. The integration setup might not have been completed successfully.");
2829
2894
  }
2830
2895
  async handleUserCanceled() {
2831
2896
  // Drop parked/in-flight permission prompts first so interval replay and
@@ -2934,7 +2999,7 @@ export class AiService extends TracedEventEmitter {
2934
2999
  * Submit a prompt with interrupt behavior.
2935
3000
  * If not busy, starts immediately. Otherwise interrupts and continues.
2936
3001
  */
2937
- async handleAiGenerateWithQueue(request, mode) {
3002
+ async handleAiGenerateWithQueue(request, mode, inputSource) {
2938
3003
  this.getLogger().info(`[ai-service] handleAiGenerateWithQueue: peerId=${this.stablePeer.peerId ?? "unknown"}, mode=${mode}`);
2939
3004
  if (this.clark.state === ClarkStateNames.Dead) {
2940
3005
  recordPromptEntryRejection({
@@ -2953,18 +3018,25 @@ export class AiService extends TracedEventEmitter {
2953
3018
  return { status: "started" };
2954
3019
  }
2955
3020
  this.assertNoActivePolicyGateRun();
3021
+ // Read after the generation is under way: both paths write the prompt id
3022
+ // into context before they return, and it is the same id every
3023
+ // `aiSetGenerationState` push for this generation carries. Handing it back
3024
+ // is what lets a caller recognize its own terminal state. (APPS-5161)
2956
3025
  if (!this.isBusy()) {
2957
- await this.handleAiGenerate(request);
2958
- return { status: "started" };
3026
+ await this.handleAiGenerate(request, inputSource);
3027
+ return { generationId: this.clark.context.promptId, status: "started" };
2959
3028
  }
2960
- await this.interruptAndContinue(request);
2961
- return { status: "interrupted" };
3029
+ await this.interruptAndContinue(request, inputSource);
3030
+ return {
3031
+ generationId: this.clark.context.promptId,
3032
+ status: "interrupted",
3033
+ };
2962
3034
  }
2963
3035
  /**
2964
3036
  * Interrupt current generation and continue with new prompt.
2965
3037
  * The partial response is preserved in chat history for context.
2966
3038
  */
2967
- async interruptAndContinue(request) {
3039
+ async interruptAndContinue(request, inputSource) {
2968
3040
  // The user interrupted — abort the in-flight generation FIRST, before
2969
3041
  // anything else. The caller (UI saga) signals `interrupted` immediately
2970
3042
  // on this method's return, so the old run must actually be dead by
@@ -3015,7 +3087,7 @@ export class AiService extends TracedEventEmitter {
3015
3087
  // `handleAiGenerate`. The aborted run is NOT resumed; the user can
3016
3088
  // start fresh once credits are restored via the same "send any
3017
3089
  // message" affordance the standard paywall uses.
3018
- const paywallReason = await this.tryHandlePaywallForRequest(request);
3090
+ const paywallReason = await this.tryHandlePaywallForRequest(request, inputSource);
3019
3091
  if (paywallReason) {
3020
3092
  recordPromptEntryRejection({
3021
3093
  dedupeKey: resolvePromptRequestDedupeKey(request),
@@ -3039,7 +3111,7 @@ export class AiService extends TracedEventEmitter {
3039
3111
  ...request,
3040
3112
  prompt: enhancedPrompt,
3041
3113
  };
3042
- await this.handleAiGenerate(enhancedRequest);
3114
+ await this.handleAiGenerate(enhancedRequest, inputSource);
3043
3115
  }
3044
3116
  /**
3045
3117
  * Wait for the FSM to transition out of busy state after abort.
@@ -4930,14 +5002,25 @@ export class AiService extends TracedEventEmitter {
4930
5002
  // Not generating, return immediately
4931
5003
  return;
4932
5004
  }
4933
- // Wait for generation to complete
4934
- return new Promise((resolve) => {
4935
- this._onGenerationCompleteCallback = resolve;
5005
+ return new Promise((resolve, reject) => {
5006
+ const complete = () => {
5007
+ clearTimeout(timeout);
5008
+ resolve();
5009
+ };
5010
+ this.generationCompleteWaiters.add(complete);
5011
+ const timeout = setTimeout(() => {
5012
+ if (!this.generationCompleteWaiters.delete(complete)) {
5013
+ return;
5014
+ }
5015
+ const error = new Error(`generation completion wait timed out after ${GENERATION_COMPLETION_WAIT_TIMEOUT_MS}ms`);
5016
+ this.getLogger().warn(`[ai-service] ${error.message}`);
5017
+ reject(error);
5018
+ }, GENERATION_COMPLETION_WAIT_TIMEOUT_MS);
5019
+ timeout.unref();
4936
5020
  });
4937
5021
  }
4938
5022
  /**
4939
- * Manually trigger the generation complete callback.
4940
- * Should be called when Clark transitions to Idle or AwaitingUser state.
5023
+ * Resolve generation waiters when Clark reaches a terminal state.
4941
5024
  */
4942
5025
  triggerGenerationComplete() {
4943
5026
  // The FSM parked, so any still-open generation span is over. Runs that
@@ -4945,10 +5028,10 @@ export class AiService extends TracedEventEmitter {
4945
5028
  // ends it on the paths that emit neither (user/agent cancel,
4946
5029
  // runtime-updated-without-edits, planning errors that park in Idle).
4947
5030
  this.activeGenerationTrace?.finish();
4948
- if (this._onGenerationCompleteCallback) {
4949
- const callback = this._onGenerationCompleteCallback;
4950
- this._onGenerationCompleteCallback = undefined;
4951
- callback();
5031
+ const waiters = Array.from(this.generationCompleteWaiters);
5032
+ this.generationCompleteWaiters.clear();
5033
+ for (const resolve of waiters) {
5034
+ resolve();
4952
5035
  }
4953
5036
  }
4954
5037
  async isGeneratingFullAppOrBroadUpdate() {