happy-imou-cloud 2.1.52 → 2.1.53

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 (49) hide show
  1. package/dist/{AcpBackend-DtxGBKiz.cjs → AcpBackend-B3s99ivd.cjs} +3 -3
  2. package/dist/{AcpBackend-3-XDjrku.mjs → AcpBackend-Dephumdg.mjs} +3 -3
  3. package/dist/{BaseReasoningProcessor-GrsmssbV.mjs → BaseReasoningProcessor-D0lBynU3.mjs} +1 -1
  4. package/dist/{BaseReasoningProcessor-CAQB14n9.cjs → BaseReasoningProcessor-DgyEX2ex.cjs} +1 -1
  5. package/dist/{ConversationHistory-DblMPp5X.cjs → ConversationHistory-DYF60lvE.cjs} +3 -3
  6. package/dist/{ConversationHistory-BtPGSkJU.mjs → ConversationHistory-Dr1H-t58.mjs} +3 -3
  7. package/dist/{ProviderSelectionHandler-DrWMeahq.cjs → ProviderSelectionHandler-BsIj6tUM.cjs} +2 -2
  8. package/dist/{ProviderSelectionHandler-AbhoRyth.mjs → ProviderSelectionHandler-oIejggTi.mjs} +2 -2
  9. package/dist/{RuntimeShell-DCeyYzOs.cjs → RuntimeShell-CoXntnel.cjs} +2 -2
  10. package/dist/{RuntimeShell-BbEINPUC.mjs → RuntimeShell-DZhi4Zhd.mjs} +2 -2
  11. package/dist/{bootstrapManagedProviderSession-BM1PDHRS.cjs → bootstrapManagedProviderSession-DuPoeGsz.cjs} +2 -2
  12. package/dist/{bootstrapManagedProviderSession-pAWC0cg8.mjs → bootstrapManagedProviderSession-HezKZOHo.mjs} +2 -2
  13. package/dist/{claude-Cd1EV34h.cjs → claude-DJ98mF1g.cjs} +3 -3
  14. package/dist/{claude-CwRWUUVR.mjs → claude-Dm0RQqLD.mjs} +3 -3
  15. package/dist/{codex-suiruFqm.cjs → codex-CGoezd1l.cjs} +4 -4
  16. package/dist/{codex-B0MiKtqc.mjs → codex-CjtUx7la.mjs} +4 -4
  17. package/dist/{command-BNdy9kbh.mjs → command-CX3Ijure.mjs} +8 -8
  18. package/dist/{command-DD7nnM4r.cjs → command-DAb1FNFD.cjs} +8 -8
  19. package/dist/{config-BuQStBK_.cjs → config-D9ppiOqF.cjs} +1 -1
  20. package/dist/{config-C9Yb905M.mjs → config-DsOkKwwg.mjs} +1 -1
  21. package/dist/{createDefaultRuntimeShell-BM2lyPQ4.mjs → createDefaultRuntimeShell-BJdgPwWt.mjs} +6 -6
  22. package/dist/{createDefaultRuntimeShell-DQlet_Es.cjs → createDefaultRuntimeShell-Dt2klFXx.cjs} +6 -6
  23. package/dist/{cursor-Cf87RaxN.mjs → cursor-BxWThmbf.mjs} +4 -4
  24. package/dist/{cursor-D4eQeadD.cjs → cursor-DOu6sau_.cjs} +4 -4
  25. package/dist/{index-CxPxEDeE.mjs → index-B_Cm6MhB.mjs} +11 -11
  26. package/dist/{index-Ca00OSY5.cjs → index-Cd7d2BMe.cjs} +14 -14
  27. package/dist/index.cjs +2 -2
  28. package/dist/index.mjs +2 -2
  29. package/dist/{installFatalProcessHandlers-CwVyatD4.cjs → installFatalProcessHandlers-CNnOiioM.cjs} +1 -1
  30. package/dist/{installFatalProcessHandlers-DG1QZYHP.mjs → installFatalProcessHandlers-DeJFoOCl.mjs} +1 -1
  31. package/dist/{launch-Cj9fXgj3.mjs → launch-CTC8E1YI.mjs} +8 -8
  32. package/dist/{launch-BZfxJTsA.cjs → launch-CVYm-vTg.cjs} +8 -8
  33. package/dist/lib.cjs +1 -1
  34. package/dist/lib.d.cts +8 -1
  35. package/dist/lib.d.mts +8 -1
  36. package/dist/lib.mjs +1 -1
  37. package/dist/{runClaude-CqqJipYj.mjs → runClaude-BB-5Su2y.mjs} +29 -37
  38. package/dist/{runClaude-vRuF9RZV.cjs → runClaude-DbiPMUS4.cjs} +29 -37
  39. package/dist/{runCodex-BuENvdll.mjs → runCodex-BAWWDwBE.mjs} +49 -34
  40. package/dist/{runCodex-D61xJnYS.cjs → runCodex-CIZFYkTI.cjs} +49 -34
  41. package/dist/{runCursor-BuIUSR5U.mjs → runCursor-DJgPZ-11.mjs} +17 -28
  42. package/dist/{runCursor-avWVar8f.cjs → runCursor-GR8a5T-H.cjs} +17 -28
  43. package/dist/{runGemini-DPeGLZXt.mjs → runGemini-CwKyhP0O.mjs} +23 -34
  44. package/dist/{runGemini-Dkmy1MA6.cjs → runGemini-yWXF4JBe.cjs} +23 -34
  45. package/dist/{sessionControl-DoQKVLbo.cjs → sessionControl-BM3380c0.cjs} +122 -3
  46. package/dist/{sessionControl-BmmjRdC4.mjs → sessionControl-D8sHsOfs.mjs} +122 -4
  47. package/dist/{types-CwpYbO-W.cjs → types-Be833t7e.cjs} +82 -11
  48. package/dist/{types-DleyDaIf.mjs → types-CDuesyX_.mjs} +83 -12
  49. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
- import { c as createDefaultRuntimeShell } from './createDefaultRuntimeShell-BM2lyPQ4.mjs';
1
+ import { c as createDefaultRuntimeShell } from './createDefaultRuntimeShell-BJdgPwWt.mjs';
2
2
  import 'cross-spawn';
3
3
  import '@agentclientprotocol/sdk';
4
4
  import 'node:crypto';
5
- import './types-DleyDaIf.mjs';
5
+ import './types-CDuesyX_.mjs';
6
6
  import 'axios';
7
7
  import 'chalk';
8
8
  import 'fs';
@@ -19,7 +19,7 @@ import 'crypto';
19
19
  import 'path';
20
20
  import 'node:child_process';
21
21
  import 'expo-server-sdk';
22
- import './index-CxPxEDeE.mjs';
22
+ import './index-B_Cm6MhB.mjs';
23
23
  import 'os';
24
24
  import 'qrcode-terminal';
25
25
  import 'node:module';
@@ -35,13 +35,13 @@ import 'node:readline';
35
35
  import 'http';
36
36
  import 'util';
37
37
  import 'node:url';
38
- import './codex-B0MiKtqc.mjs';
39
- import './AcpBackend-3-XDjrku.mjs';
40
- import './RuntimeShell-BbEINPUC.mjs';
38
+ import './codex-CjtUx7la.mjs';
39
+ import './AcpBackend-Dephumdg.mjs';
40
+ import './RuntimeShell-DZhi4Zhd.mjs';
41
41
  import './resolveCommand-B3BGyBE2.mjs';
42
- import './claude-CwRWUUVR.mjs';
42
+ import './claude-Dm0RQqLD.mjs';
43
43
  import './future-xRdLl3vf.mjs';
44
- import './cursor-Cf87RaxN.mjs';
44
+ import './cursor-BxWThmbf.mjs';
45
45
 
46
46
  function isRuntimeProvider(value) {
47
47
  return value === "claude" || value === "codex" || value === "cursor";
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var createDefaultRuntimeShell = require('./createDefaultRuntimeShell-DQlet_Es.cjs');
3
+ var createDefaultRuntimeShell = require('./createDefaultRuntimeShell-Dt2klFXx.cjs');
4
4
  require('cross-spawn');
5
5
  require('@agentclientprotocol/sdk');
6
6
  require('node:crypto');
7
- require('./types-CwpYbO-W.cjs');
7
+ require('./types-Be833t7e.cjs');
8
8
  require('axios');
9
9
  require('chalk');
10
10
  require('fs');
@@ -21,7 +21,7 @@ require('crypto');
21
21
  require('path');
22
22
  require('node:child_process');
23
23
  require('expo-server-sdk');
24
- require('./index-Ca00OSY5.cjs');
24
+ require('./index-Cd7d2BMe.cjs');
25
25
  require('os');
26
26
  require('qrcode-terminal');
27
27
  require('node:module');
@@ -37,13 +37,13 @@ require('node:readline');
37
37
  require('http');
38
38
  require('util');
39
39
  require('node:url');
40
- require('./codex-suiruFqm.cjs');
41
- require('./AcpBackend-DtxGBKiz.cjs');
42
- require('./RuntimeShell-DCeyYzOs.cjs');
40
+ require('./codex-CGoezd1l.cjs');
41
+ require('./AcpBackend-B3s99ivd.cjs');
42
+ require('./RuntimeShell-CoXntnel.cjs');
43
43
  require('./resolveCommand-DYMd9PNC.cjs');
44
- require('./claude-Cd1EV34h.cjs');
44
+ require('./claude-DJ98mF1g.cjs');
45
45
  require('./future-Dq4Ha1Dn.cjs');
46
- require('./cursor-D4eQeadD.cjs');
46
+ require('./cursor-DOu6sau_.cjs');
47
47
 
48
48
  function isRuntimeProvider(value) {
49
49
  return value === "claude" || value === "codex" || value === "cursor";
package/dist/lib.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var persistence = require('./types-CwpYbO-W.cjs');
3
+ var persistence = require('./types-Be833t7e.cjs');
4
4
  require('axios');
5
5
  require('chalk');
6
6
  require('fs');
package/dist/lib.d.cts CHANGED
@@ -3855,6 +3855,11 @@ interface ProtocolV3SessionSyncOptions {
3855
3855
  snapshotLimit?: number;
3856
3856
  changesLimit?: number;
3857
3857
  }
3858
+ type MetadataUpdateDurability = 'durable' | 'snapshot-only';
3859
+ interface UpdateMetadataOptions {
3860
+ durability?: MetadataUpdateDurability;
3861
+ requireCapability?: boolean;
3862
+ }
3858
3863
  declare class ApiSessionClient extends EventEmitter {
3859
3864
  private credentials;
3860
3865
  readonly sessionId: string;
@@ -3950,7 +3955,7 @@ declare class ApiSessionClient extends EventEmitter {
3950
3955
  * Update session metadata
3951
3956
  * @param handler - Handler function that returns the updated metadata
3952
3957
  */
3953
- updateMetadata(handler: (metadata: Metadata) => Metadata): void;
3958
+ updateMetadata(handler: (metadata: Metadata) => Metadata, options?: UpdateMetadataOptions): void;
3954
3959
  /**
3955
3960
  * Update session agent state
3956
3961
  * @param handler - Handler function that returns the updated agent state
@@ -3993,8 +3998,10 @@ declare class ApiSessionClient extends EventEmitter {
3993
3998
  private replayBufferedLiveSessionEvent;
3994
3999
  private bufferLiveSessionEvent;
3995
4000
  private supportsKnownProtocolCapability;
4001
+ private resolveMetadataUpdateDurability;
3996
4002
  private shouldUseCommittedSessionWriteAcks;
3997
4003
  private emitEncryptedSessionMessage;
4004
+ private emitTransientSessionMessage;
3998
4005
  private enqueueReliableSessionMessage;
3999
4006
  private dequeueReliableSessionMessage;
4000
4007
  private flushReliableSessionMessages;
package/dist/lib.d.mts CHANGED
@@ -3855,6 +3855,11 @@ interface ProtocolV3SessionSyncOptions {
3855
3855
  snapshotLimit?: number;
3856
3856
  changesLimit?: number;
3857
3857
  }
3858
+ type MetadataUpdateDurability = 'durable' | 'snapshot-only';
3859
+ interface UpdateMetadataOptions {
3860
+ durability?: MetadataUpdateDurability;
3861
+ requireCapability?: boolean;
3862
+ }
3858
3863
  declare class ApiSessionClient extends EventEmitter {
3859
3864
  private credentials;
3860
3865
  readonly sessionId: string;
@@ -3950,7 +3955,7 @@ declare class ApiSessionClient extends EventEmitter {
3950
3955
  * Update session metadata
3951
3956
  * @param handler - Handler function that returns the updated metadata
3952
3957
  */
3953
- updateMetadata(handler: (metadata: Metadata) => Metadata): void;
3958
+ updateMetadata(handler: (metadata: Metadata) => Metadata, options?: UpdateMetadataOptions): void;
3954
3959
  /**
3955
3960
  * Update session agent state
3956
3961
  * @param handler - Handler function that returns the updated agent state
@@ -3993,8 +3998,10 @@ declare class ApiSessionClient extends EventEmitter {
3993
3998
  private replayBufferedLiveSessionEvent;
3994
3999
  private bufferLiveSessionEvent;
3995
4000
  private supportsKnownProtocolCapability;
4001
+ private resolveMetadataUpdateDurability;
3996
4002
  private shouldUseCommittedSessionWriteAcks;
3997
4003
  private emitEncryptedSessionMessage;
4004
+ private emitTransientSessionMessage;
3998
4005
  private enqueueReliableSessionMessage;
3999
4006
  private dequeueReliableSessionMessage;
4000
4007
  private flushReliableSessionMessages;
package/dist/lib.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-DleyDaIf.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-CDuesyX_.mjs';
2
2
  import 'axios';
3
3
  import 'chalk';
4
4
  import 'fs';
@@ -1,8 +1,8 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { l as logger, o as backoff, e as delay, R as RawJSONLinesSchema, d as AssistantMessageStream, q as AsyncLock, c as configuration, s as startOfflineReconnection, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError, h as hashObject } from './types-DleyDaIf.mjs';
2
+ import { l as logger, o as backoff, d as delay, R as RawJSONLinesSchema, q as AsyncLock, c as configuration, s as startOfflineReconnection, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError, h as hashObject } from './types-CDuesyX_.mjs';
3
3
  import 'cross-spawn';
4
4
  import '@agentclientprotocol/sdk';
5
- import { t as getProjectPath, u as claudeLocal, E as ExitCodeError, v as trimIdent, w as claudeCheckSession, p as projectPath, s as stopCaffeinate, e as publishSessionRegistration, x as getEnvironmentInfo, d as createSessionMetadata, y as startCaffeinate, b as closeProviderSession } from './index-CxPxEDeE.mjs';
5
+ import { t as getProjectPath, u as claudeLocal, E as ExitCodeError, v as trimIdent, w as claudeCheckSession, p as projectPath, s as stopCaffeinate, e as publishSessionRegistration, x as getEnvironmentInfo, d as createSessionMetadata, y as startCaffeinate, b as closeProviderSession } from './index-B_Cm6MhB.mjs';
6
6
  import 'ps-list';
7
7
  import 'fs';
8
8
  import 'path';
@@ -23,14 +23,14 @@ import 'tweetnacl';
23
23
  import 'open';
24
24
  import React, { useState, useRef, useEffect, useCallback } from 'react';
25
25
  import { useStdout, useInput, Box, Text, render } from 'ink';
26
- import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-AbhoRyth.mjs';
26
+ import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-oIejggTi.mjs';
27
27
  import 'socket.io-client';
28
28
  import 'expo-server-sdk';
29
29
  import { F as Future } from './future-xRdLl3vf.mjs';
30
- import { M as MessageBuffer, C as ConversationHistory$1, b as buildTurnResultPushNotification, d as createSessionTranscriptInkRenderer, a as buildReadyPushNotification, l as launchRuntimeHandleWithFactoryResult, c as buildPermissionPushNotification } from './ConversationHistory-BtPGSkJU.mjs';
31
- import { c as createClaudeBackend, m as mapToClaudeMode, P as PushableAsyncIterable, q as query, A as AbortError } from './claude-CwRWUUVR.mjs';
32
- import { B as BasePermissionHandler, d as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, f as finalizeHappyOrgTurnWithBusinessAck, i as renderTerminalOutputPreview, p as prepareTerminalOutputForForwarding, h as forwardAgentMessageToProviderSession, s as syncControlledByUserState, c as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, r as registerKillSessionHandler } from './sessionControl-BmmjRdC4.mjs';
33
- import { f as formatDisplayMessage, t as truncateDisplayMessage } from './RuntimeShell-BbEINPUC.mjs';
30
+ import { M as MessageBuffer, C as ConversationHistory$1, b as buildTurnResultPushNotification, d as createSessionTranscriptInkRenderer, a as buildReadyPushNotification, l as launchRuntimeHandleWithFactoryResult, c as buildPermissionPushNotification } from './ConversationHistory-Dr1H-t58.mjs';
31
+ import { c as createClaudeBackend, m as mapToClaudeMode, P as PushableAsyncIterable, q as query, A as AbortError } from './claude-Dm0RQqLD.mjs';
32
+ import { B as BasePermissionHandler, c as BufferedAssistantStreamEmitter, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, h as finalizeHappyOrgTurnWithBusinessAck, j as renderTerminalOutputPreview, p as prepareTerminalOutputForForwarding, i as forwardAgentMessageToProviderSession, s as syncControlledByUserState, d as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, r as registerKillSessionHandler } from './sessionControl-D8sHsOfs.mjs';
33
+ import { f as formatDisplayMessage, t as truncateDisplayMessage } from './RuntimeShell-DZhi4Zhd.mjs';
34
34
  import { isDeepStrictEqual } from 'node:util';
35
35
  import { createServer } from 'node:http';
36
36
  import 'zod';
@@ -1011,7 +1011,9 @@ async function claudeAcpRemoteLauncher(session) {
1011
1011
  let unexpectedRuntimeStopRecovery = null;
1012
1012
  let readyAlreadySent = false;
1013
1013
  let currentHappyOrgTurn = null;
1014
- const assistantMessageStream = new AssistantMessageStream();
1014
+ const assistantMessageEmitter = new BufferedAssistantStreamEmitter({
1015
+ send: (payload) => session.client.sendAgentMessage("claude", payload)
1016
+ });
1015
1017
  const permissionHandler = new ClaudeAcpPermissionHandler(session.client);
1016
1018
  const selectionHandler = new ProviderSelectionHandler(session.client, "Claude");
1017
1019
  const conversationHistory = new ConversationHistory$1({
@@ -1070,7 +1072,7 @@ async function claudeAcpRemoteLauncher(session) {
1070
1072
  currentAssistantMessageId = null;
1071
1073
  currentThinkingMessageId = null;
1072
1074
  currentHappyOrgTurn = null;
1073
- assistantMessageStream.reset();
1075
+ assistantMessageEmitter.reset();
1074
1076
  session.onThinkingChange(false);
1075
1077
  };
1076
1078
  const emitAssistantMessageDelta = (text) => {
@@ -1080,17 +1082,10 @@ async function claudeAcpRemoteLauncher(session) {
1080
1082
  if (!text.trim()) {
1081
1083
  return false;
1082
1084
  }
1083
- if (!assistantMessageStream.hasActive()) {
1085
+ if (!assistantMessageEmitter.hasActive()) {
1084
1086
  currentAssistantStreamStartLength = accumulatedResponse.length - text.length;
1085
1087
  }
1086
- const stream = assistantMessageStream.delta();
1087
- session.client.sendAgentMessage("claude", {
1088
- type: "message",
1089
- message: text,
1090
- id: stream.messageId,
1091
- ...stream
1092
- });
1093
- return true;
1088
+ return assistantMessageEmitter.pushDelta(text);
1094
1089
  };
1095
1090
  const emitPendingThinkingMessage = () => {
1096
1091
  const thinking = accumulatedThinking.trim();
@@ -1109,20 +1104,22 @@ async function claudeAcpRemoteLauncher(session) {
1109
1104
  if (!finalMessage) {
1110
1105
  accumulatedResponse = "";
1111
1106
  isResponseInProgress = false;
1112
- assistantMessageStream.reset();
1107
+ assistantMessageEmitter.reset();
1113
1108
  return;
1114
1109
  }
1115
1110
  if (currentAssistantMessageId) {
1116
1111
  messageBuffer.updateMessage(currentAssistantMessageId, finalMessage, { mode: "replace" });
1117
1112
  }
1118
1113
  conversationHistory.addAssistantMessage(finalMessage);
1119
- const hadActiveStream = assistantMessageStream.hasActive();
1120
- const stream = hadActiveStream ? assistantMessageStream.commit() : null;
1121
- session.client.sendAgentMessage("claude", {
1122
- type: "message",
1123
- message: hadActiveStream ? finalMessage.slice(currentAssistantStreamStartLength) : finalMessage,
1124
- ...stream ? { id: stream.messageId, ...stream } : {}
1125
- });
1114
+ const hadActiveStream = assistantMessageEmitter.hasActive();
1115
+ if (hadActiveStream) {
1116
+ assistantMessageEmitter.commit(finalMessage.slice(currentAssistantStreamStartLength));
1117
+ } else {
1118
+ session.client.sendAgentMessage("claude", {
1119
+ type: "message",
1120
+ message: finalMessage
1121
+ });
1122
+ }
1126
1123
  session.client.sendClaudeSessionMessage({
1127
1124
  type: "assistant",
1128
1125
  uuid: randomUUID(),
@@ -1143,22 +1140,16 @@ async function claudeAcpRemoteLauncher(session) {
1143
1140
  isResponseInProgress = false;
1144
1141
  };
1145
1142
  const commitActiveAssistantMessageStream = () => {
1146
- if (!assistantMessageStream.hasActive()) {
1143
+ if (!assistantMessageEmitter.hasActive()) {
1147
1144
  return false;
1148
1145
  }
1149
1146
  const finalMessage = accumulatedResponse.trim();
1150
1147
  if (!finalMessage) {
1151
- assistantMessageStream.reset();
1148
+ assistantMessageEmitter.reset();
1152
1149
  currentAssistantStreamStartLength = accumulatedResponse.length;
1153
1150
  return false;
1154
1151
  }
1155
- const stream = assistantMessageStream.commit();
1156
- session.client.sendAgentMessage("claude", {
1157
- type: "message",
1158
- message: finalMessage.slice(currentAssistantStreamStartLength),
1159
- id: stream.messageId,
1160
- ...stream
1161
- });
1152
+ assistantMessageEmitter.commit(finalMessage.slice(currentAssistantStreamStartLength));
1162
1153
  currentAssistantStreamStartLength = accumulatedResponse.length;
1163
1154
  return true;
1164
1155
  };
@@ -1386,7 +1377,7 @@ ${systemPrompt}` : systemPrompt,
1386
1377
  const abortActiveTurn = async () => {
1387
1378
  const activeController = rotateAbortController();
1388
1379
  activeController.abort();
1389
- assistantMessageStream.reset();
1380
+ assistantMessageEmitter.reset();
1390
1381
  session.onThinkingChange(false);
1391
1382
  if (runtimeHandle) {
1392
1383
  await runtimeHandle.cancel().catch((error) => {
@@ -3273,7 +3264,7 @@ async function runOfflineClaudeLocalFallback(opts) {
3273
3264
  serverUrl: configuration.serverUrl,
3274
3265
  onReconnected: async () => {
3275
3266
  const response = await opts.api.getOrCreateSession({
3276
- tag: randomUUID(),
3267
+ tag: opts.sessionTag ?? randomUUID(),
3277
3268
  metadata: opts.metadata,
3278
3269
  state: opts.state
3279
3270
  });
@@ -3470,6 +3461,7 @@ async function runClaude(credentials, options = {}) {
3470
3461
  if (!response) {
3471
3462
  await runOfflineClaudeLocalFallback({
3472
3463
  api,
3464
+ sessionTag,
3473
3465
  metadata,
3474
3466
  state,
3475
3467
  workingDirectory,
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var node_crypto = require('node:crypto');
4
- var persistence = require('./types-CwpYbO-W.cjs');
4
+ var persistence = require('./types-Be833t7e.cjs');
5
5
  require('cross-spawn');
6
6
  require('@agentclientprotocol/sdk');
7
- var index = require('./index-Ca00OSY5.cjs');
7
+ var index = require('./index-Cd7d2BMe.cjs');
8
8
  require('ps-list');
9
9
  require('fs');
10
10
  require('path');
@@ -25,14 +25,14 @@ require('tweetnacl');
25
25
  require('open');
26
26
  var React = require('react');
27
27
  var ink = require('ink');
28
- var ProviderSelectionHandler = require('./ProviderSelectionHandler-DrWMeahq.cjs');
28
+ var ProviderSelectionHandler = require('./ProviderSelectionHandler-BsIj6tUM.cjs');
29
29
  require('socket.io-client');
30
30
  require('expo-server-sdk');
31
31
  var future = require('./future-Dq4Ha1Dn.cjs');
32
- var ConversationHistory = require('./ConversationHistory-DblMPp5X.cjs');
33
- var claude = require('./claude-Cd1EV34h.cjs');
34
- var sessionControl = require('./sessionControl-DoQKVLbo.cjs');
35
- var RuntimeShell = require('./RuntimeShell-DCeyYzOs.cjs');
32
+ var ConversationHistory = require('./ConversationHistory-DYF60lvE.cjs');
33
+ var claude = require('./claude-DJ98mF1g.cjs');
34
+ var sessionControl = require('./sessionControl-BM3380c0.cjs');
35
+ var RuntimeShell = require('./RuntimeShell-CoXntnel.cjs');
36
36
  var node_util = require('node:util');
37
37
  var node_http = require('node:http');
38
38
  require('zod');
@@ -1013,7 +1013,9 @@ async function claudeAcpRemoteLauncher(session) {
1013
1013
  let unexpectedRuntimeStopRecovery = null;
1014
1014
  let readyAlreadySent = false;
1015
1015
  let currentHappyOrgTurn = null;
1016
- const assistantMessageStream = new persistence.AssistantMessageStream();
1016
+ const assistantMessageEmitter = new sessionControl.BufferedAssistantStreamEmitter({
1017
+ send: (payload) => session.client.sendAgentMessage("claude", payload)
1018
+ });
1017
1019
  const permissionHandler = new ClaudeAcpPermissionHandler(session.client);
1018
1020
  const selectionHandler = new ProviderSelectionHandler.ProviderSelectionHandler(session.client, "Claude");
1019
1021
  const conversationHistory = new ConversationHistory.ConversationHistory({
@@ -1072,7 +1074,7 @@ async function claudeAcpRemoteLauncher(session) {
1072
1074
  currentAssistantMessageId = null;
1073
1075
  currentThinkingMessageId = null;
1074
1076
  currentHappyOrgTurn = null;
1075
- assistantMessageStream.reset();
1077
+ assistantMessageEmitter.reset();
1076
1078
  session.onThinkingChange(false);
1077
1079
  };
1078
1080
  const emitAssistantMessageDelta = (text) => {
@@ -1082,17 +1084,10 @@ async function claudeAcpRemoteLauncher(session) {
1082
1084
  if (!text.trim()) {
1083
1085
  return false;
1084
1086
  }
1085
- if (!assistantMessageStream.hasActive()) {
1087
+ if (!assistantMessageEmitter.hasActive()) {
1086
1088
  currentAssistantStreamStartLength = accumulatedResponse.length - text.length;
1087
1089
  }
1088
- const stream = assistantMessageStream.delta();
1089
- session.client.sendAgentMessage("claude", {
1090
- type: "message",
1091
- message: text,
1092
- id: stream.messageId,
1093
- ...stream
1094
- });
1095
- return true;
1090
+ return assistantMessageEmitter.pushDelta(text);
1096
1091
  };
1097
1092
  const emitPendingThinkingMessage = () => {
1098
1093
  const thinking = accumulatedThinking.trim();
@@ -1111,20 +1106,22 @@ async function claudeAcpRemoteLauncher(session) {
1111
1106
  if (!finalMessage) {
1112
1107
  accumulatedResponse = "";
1113
1108
  isResponseInProgress = false;
1114
- assistantMessageStream.reset();
1109
+ assistantMessageEmitter.reset();
1115
1110
  return;
1116
1111
  }
1117
1112
  if (currentAssistantMessageId) {
1118
1113
  messageBuffer.updateMessage(currentAssistantMessageId, finalMessage, { mode: "replace" });
1119
1114
  }
1120
1115
  conversationHistory.addAssistantMessage(finalMessage);
1121
- const hadActiveStream = assistantMessageStream.hasActive();
1122
- const stream = hadActiveStream ? assistantMessageStream.commit() : null;
1123
- session.client.sendAgentMessage("claude", {
1124
- type: "message",
1125
- message: hadActiveStream ? finalMessage.slice(currentAssistantStreamStartLength) : finalMessage,
1126
- ...stream ? { id: stream.messageId, ...stream } : {}
1127
- });
1116
+ const hadActiveStream = assistantMessageEmitter.hasActive();
1117
+ if (hadActiveStream) {
1118
+ assistantMessageEmitter.commit(finalMessage.slice(currentAssistantStreamStartLength));
1119
+ } else {
1120
+ session.client.sendAgentMessage("claude", {
1121
+ type: "message",
1122
+ message: finalMessage
1123
+ });
1124
+ }
1128
1125
  session.client.sendClaudeSessionMessage({
1129
1126
  type: "assistant",
1130
1127
  uuid: node_crypto.randomUUID(),
@@ -1145,22 +1142,16 @@ async function claudeAcpRemoteLauncher(session) {
1145
1142
  isResponseInProgress = false;
1146
1143
  };
1147
1144
  const commitActiveAssistantMessageStream = () => {
1148
- if (!assistantMessageStream.hasActive()) {
1145
+ if (!assistantMessageEmitter.hasActive()) {
1149
1146
  return false;
1150
1147
  }
1151
1148
  const finalMessage = accumulatedResponse.trim();
1152
1149
  if (!finalMessage) {
1153
- assistantMessageStream.reset();
1150
+ assistantMessageEmitter.reset();
1154
1151
  currentAssistantStreamStartLength = accumulatedResponse.length;
1155
1152
  return false;
1156
1153
  }
1157
- const stream = assistantMessageStream.commit();
1158
- session.client.sendAgentMessage("claude", {
1159
- type: "message",
1160
- message: finalMessage.slice(currentAssistantStreamStartLength),
1161
- id: stream.messageId,
1162
- ...stream
1163
- });
1154
+ assistantMessageEmitter.commit(finalMessage.slice(currentAssistantStreamStartLength));
1164
1155
  currentAssistantStreamStartLength = accumulatedResponse.length;
1165
1156
  return true;
1166
1157
  };
@@ -1388,7 +1379,7 @@ ${systemPrompt}` : systemPrompt,
1388
1379
  const abortActiveTurn = async () => {
1389
1380
  const activeController = rotateAbortController();
1390
1381
  activeController.abort();
1391
- assistantMessageStream.reset();
1382
+ assistantMessageEmitter.reset();
1392
1383
  session.onThinkingChange(false);
1393
1384
  if (runtimeHandle) {
1394
1385
  await runtimeHandle.cancel().catch((error) => {
@@ -3275,7 +3266,7 @@ async function runOfflineClaudeLocalFallback(opts) {
3275
3266
  serverUrl: persistence.configuration.serverUrl,
3276
3267
  onReconnected: async () => {
3277
3268
  const response = await opts.api.getOrCreateSession({
3278
- tag: node_crypto.randomUUID(),
3269
+ tag: opts.sessionTag ?? node_crypto.randomUUID(),
3279
3270
  metadata: opts.metadata,
3280
3271
  state: opts.state
3281
3272
  });
@@ -3472,6 +3463,7 @@ async function runClaude(credentials, options = {}) {
3472
3463
  if (!response) {
3473
3464
  await runOfflineClaudeLocalFallback({
3474
3465
  api,
3466
+ sessionTag,
3475
3467
  metadata,
3476
3468
  state,
3477
3469
  workingDirectory,