happy-imou-cloud 2.1.39 → 2.1.41

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/{BaseReasoningProcessor-BUTolvO5.cjs → BaseReasoningProcessor-DAPsauUX.cjs} +2 -2
  2. package/dist/{BaseReasoningProcessor-Cbp6sIDm.mjs → BaseReasoningProcessor-Dica2zdX.mjs} +2 -2
  3. package/dist/{ProviderSelectionHandler-B22eXuym.cjs → ProviderSelectionHandler-4nuTd8AP.cjs} +2 -2
  4. package/dist/{ProviderSelectionHandler-DrSgStLw.mjs → ProviderSelectionHandler-CmeZ92yO.mjs} +2 -2
  5. package/dist/{api-BoeZDGwx.cjs → api-C_Tnx4UG.cjs} +131 -5
  6. package/dist/{api-wcqkneTg.mjs → api-CwNEbJBM.mjs} +131 -6
  7. package/dist/{command-CkYq_KwA.cjs → command-C3RwwPVD.cjs} +2 -2
  8. package/dist/{command-DcgK0y3F.mjs → command-D0FxDynx.mjs} +2 -2
  9. package/dist/{index-B9mt95QV.mjs → index-D5m2Duxd.mjs} +7 -7
  10. package/dist/{index-Cgor8CE7.cjs → index-Dh0qGrEd.cjs} +10 -10
  11. package/dist/index.cjs +2 -2
  12. package/dist/index.mjs +2 -2
  13. package/dist/lib.cjs +1 -1
  14. package/dist/lib.d.cts +195 -40
  15. package/dist/lib.d.mts +195 -40
  16. package/dist/lib.mjs +1 -1
  17. package/dist/{registerKillSessionHandler-Buc97BEh.mjs → registerKillSessionHandler-6JloVYkb.mjs} +132 -7
  18. package/dist/{registerKillSessionHandler-DtXhn2Cd.cjs → registerKillSessionHandler-Bkh8uLhC.cjs} +132 -7
  19. package/dist/{runClaude-BYKNCDEU.mjs → runClaude-Bng_IsE7.mjs} +59 -5
  20. package/dist/{runClaude-CwXQwmgw.cjs → runClaude-mIFO7YxF.cjs} +59 -5
  21. package/dist/{runCodex-DqAddhDE.mjs → runCodex-DAc6flez.mjs} +34 -8
  22. package/dist/{runCodex-BkB_YKhV.cjs → runCodex-cNuxGshy.cjs} +34 -8
  23. package/dist/{runGemini-3jkfOtlr.mjs → runGemini-DdXj8ltI.mjs} +65 -7
  24. package/dist/{runGemini-B4uXPrue.cjs → runGemini-DsRFV8WN.cjs} +65 -7
  25. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-Cgor8CE7.cjs');
4
- var persistence = require('./api-BoeZDGwx.cjs');
3
+ var index = require('./index-Dh0qGrEd.cjs');
4
+ var persistence = require('./api-C_Tnx4UG.cjs');
5
5
  var node_events = require('node:events');
6
6
  var node_crypto = require('node:crypto');
7
7
 
@@ -1,5 +1,5 @@
1
- import { a as createSessionMetadata, p as publishSessionRegistration } from './index-B9mt95QV.mjs';
2
- import { s as startOfflineReconnection, c as configuration, i as isAuthenticationRequiredError, l as logger } from './api-wcqkneTg.mjs';
1
+ import { a as createSessionMetadata, p as publishSessionRegistration } from './index-D5m2Duxd.mjs';
2
+ import { s as startOfflineReconnection, c as configuration, i as isAuthenticationRequiredError, l as logger } from './api-CwNEbJBM.mjs';
3
3
  import { EventEmitter } from 'node:events';
4
4
  import { randomUUID } from 'node:crypto';
5
5
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var persistence = require('./api-BoeZDGwx.cjs');
4
- var registerKillSessionHandler = require('./registerKillSessionHandler-DtXhn2Cd.cjs');
3
+ var persistence = require('./api-C_Tnx4UG.cjs');
4
+ var registerKillSessionHandler = require('./registerKillSessionHandler-Bkh8uLhC.cjs');
5
5
 
6
6
  async function runModeLoop(opts) {
7
7
  let currentMode = opts.startingMode;
@@ -1,5 +1,5 @@
1
- import { l as logger } from './api-wcqkneTg.mjs';
2
- import { g as getPendingInteractionTimeoutMs, I as INTERACTION_SUPERSEDED_ERROR, a as INTERACTION_TIMED_OUT_ERROR } from './registerKillSessionHandler-Buc97BEh.mjs';
1
+ import { l as logger } from './api-CwNEbJBM.mjs';
2
+ import { g as getPendingInteractionTimeoutMs, I as INTERACTION_SUPERSEDED_ERROR, a as INTERACTION_TIMED_OUT_ERROR } from './registerKillSessionHandler-6JloVYkb.mjs';
3
3
 
4
4
  async function runModeLoop(opts) {
5
5
  let currentMode = opts.startingMode;
@@ -38,7 +38,7 @@ function _interopNamespaceDefault(e) {
38
38
  var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
39
39
 
40
40
  var name = "happy-imou-cloud";
41
- var version = "2.1.39";
41
+ var version = "2.1.41";
42
42
  var description = "hicloud - Imou 企业定制版。关键是 happy!移动端远程 AI 编程工具,支持 Claude Code、Codex 和 Gemini CLI";
43
43
  var author = "long.zhu";
44
44
  var license = "MIT";
@@ -1232,6 +1232,23 @@ const HappyOrgAccessChannelStateSchema = z.z.enum([
1232
1232
  "reattach_required",
1233
1233
  "runtime_replaced"
1234
1234
  ]);
1235
+ const HappyOrgAcceptanceStateSchema = z.z.enum([
1236
+ "not_ready",
1237
+ "awaiting_acceptance",
1238
+ "closed"
1239
+ ]);
1240
+ const HappyOrgAcceptanceHandoffSchema = z.z.object({
1241
+ dispatchId: z.z.string().min(1),
1242
+ replyTo: z.z.string().min(1),
1243
+ taskId: z.z.string().min(1),
1244
+ positionId: z.z.string().min(1).optional().nullable(),
1245
+ responsibilityId: z.z.string().min(1).optional().nullable(),
1246
+ positionStatus: z.z.string().min(1),
1247
+ latestUserVisibleResult: z.z.string().min(1),
1248
+ blockerSummary: z.z.string().min(1).nullable(),
1249
+ acceptanceState: HappyOrgAcceptanceStateSchema,
1250
+ ceoWriteNextStep: z.z.string().min(1)
1251
+ });
1235
1252
  const HappyOrgRouteTypeSchema = z.z.enum([
1236
1253
  "direct_reply",
1237
1254
  "version_planning_reply",
@@ -1362,7 +1379,8 @@ const HappyOrgTurnReportSchema = HappyOrgTaskContextSchema.extend({
1362
1379
  accessChannelState: HappyOrgAccessChannelStateSchema.nullable(),
1363
1380
  repeatFingerprint: z.z.string().nullable(),
1364
1381
  replyContext: HappyOrgReplyContextSchema.nullish(),
1365
- specialistHome: HappyOrgSpecialistHomeIdentitySchema.nullish()
1382
+ specialistHome: HappyOrgSpecialistHomeIdentitySchema.nullish(),
1383
+ acceptanceHandoff: HappyOrgAcceptanceHandoffSchema.nullish()
1366
1384
  });
1367
1385
  const HappyOrgRepeatEntrySchema = z.z.object({
1368
1386
  count: z.z.number().int().nonnegative(),
@@ -1709,9 +1727,9 @@ function buildHappyOrgTaskBoardView(tasks) {
1709
1727
  ownerName: task.ownerName,
1710
1728
  responsibilityId: task.responsibilityId ?? null,
1711
1729
  responsibilityLabel: task.responsibilityLabel ?? null,
1712
- currentProgress: task.summary || null,
1713
- latestResult: task.reviewSummary || task.resultSummary || null,
1714
- blockerOrDecision: task.blocker || task.decisionNeeded || task.adviceSummary || null,
1730
+ currentProgress: task.positionStatus || task.summary || null,
1731
+ latestResult: task.latestUserVisibleResult || task.reviewSummary || task.resultSummary || null,
1732
+ blockerOrDecision: task.blockerSummary || task.blocker || task.decisionNeeded || task.adviceSummary || task.ceoWriteNextStep || null,
1715
1733
  path: task.path || null,
1716
1734
  updatedAt: task.updatedAt
1717
1735
  };
@@ -1929,6 +1947,22 @@ const TaskValueSchema = z.z.object({
1929
1947
  responsibilityLabel: z.z.string().nullable(),
1930
1948
  activeOwnerAgentId: z.z.string().nullable(),
1931
1949
  hasActiveOwner: z.z.boolean(),
1950
+ lastTurnStatus: z.z.enum(["turn_update", "task_complete", "turn_aborted"]).nullable().optional(),
1951
+ lastInterventionType: z.z.enum(["none", "review_needed", "blocker", "decision_needed"]).nullable().optional(),
1952
+ lastTurnReportedAt: z.z.number().nullable().optional(),
1953
+ turnReportCount: z.z.number().int().nonnegative().optional(),
1954
+ repeatFingerprint: z.z.string().nullable().optional(),
1955
+ accessChannelState: z.z.enum(["ok", "reattach_required", "runtime_replaced"]).nullable().optional(),
1956
+ replyDispatchId: z.z.string().nullable().optional(),
1957
+ replyToSessionId: z.z.string().nullable().optional(),
1958
+ specialistHomePath: z.z.string().nullable().optional(),
1959
+ specialistHomeSessionId: z.z.string().nullable().optional(),
1960
+ specialistHomeMachineId: z.z.string().nullable().optional(),
1961
+ positionStatus: z.z.string().nullable().optional(),
1962
+ latestUserVisibleResult: z.z.string().nullable().optional(),
1963
+ blockerSummary: z.z.string().nullable().optional(),
1964
+ acceptanceState: z.z.enum(["not_ready", "awaiting_acceptance", "closed"]).nullable().optional(),
1965
+ ceoWriteNextStep: z.z.string().nullable().optional(),
1932
1966
  path: z.z.string(),
1933
1967
  portablePath: z.z.string().nullable(),
1934
1968
  successCriteria: z.z.array(z.z.string()),
@@ -2534,6 +2568,22 @@ async function applyCreateTaskRequest(rootPath, request) {
2534
2568
  responsibilityLabel,
2535
2569
  activeOwnerAgentId: null,
2536
2570
  hasActiveOwner: false,
2571
+ lastTurnStatus: null,
2572
+ lastInterventionType: null,
2573
+ lastTurnReportedAt: null,
2574
+ turnReportCount: 0,
2575
+ repeatFingerprint: null,
2576
+ accessChannelState: null,
2577
+ replyDispatchId: null,
2578
+ replyToSessionId: null,
2579
+ specialistHomePath: null,
2580
+ specialistHomeSessionId: null,
2581
+ specialistHomeMachineId: null,
2582
+ positionStatus: null,
2583
+ latestUserVisibleResult: null,
2584
+ blockerSummary: null,
2585
+ acceptanceState: null,
2586
+ ceoWriteNextStep: null,
2537
2587
  path: request.path,
2538
2588
  portablePath: normalizePortablePath(request.path),
2539
2589
  successCriteria: request.successCriteria,
@@ -2998,6 +3048,22 @@ async function recordHappyOrgTurnReport(options) {
2998
3048
  lastUpdatedBy: options.report.memberAgentId,
2999
3049
  activeOwnerAgentId: options.report.memberAgentId,
3000
3050
  hasActiveOwner: nextStatus === "active",
3051
+ lastTurnStatus: options.report.turnStatus,
3052
+ lastInterventionType: options.report.interventionType,
3053
+ lastTurnReportedAt: now,
3054
+ turnReportCount: (bundle.task.value.turnReportCount ?? 0) + 1,
3055
+ repeatFingerprint: options.report.repeatFingerprint ?? bundle.task.value.repeatFingerprint ?? null,
3056
+ accessChannelState: options.report.accessChannelState ?? bundle.task.value.accessChannelState ?? null,
3057
+ replyDispatchId: options.report.replyContext?.dispatchId ?? bundle.task.value.replyDispatchId ?? null,
3058
+ replyToSessionId: options.report.replyContext?.replyTo ?? bundle.task.value.replyToSessionId ?? null,
3059
+ specialistHomePath: options.report.specialistHome?.path ?? bundle.task.value.specialistHomePath ?? null,
3060
+ specialistHomeSessionId: options.report.specialistHome?.happySessionId ?? bundle.task.value.specialistHomeSessionId ?? null,
3061
+ specialistHomeMachineId: options.report.specialistHome?.machineId ?? bundle.task.value.specialistHomeMachineId ?? null,
3062
+ positionStatus: options.report.acceptanceHandoff?.positionStatus ?? bundle.task.value.positionStatus ?? null,
3063
+ latestUserVisibleResult: options.report.acceptanceHandoff?.latestUserVisibleResult ?? bundle.task.value.latestUserVisibleResult ?? null,
3064
+ blockerSummary: options.report.acceptanceHandoff?.blockerSummary ?? bundle.task.value.blockerSummary ?? null,
3065
+ acceptanceState: options.report.acceptanceHandoff?.acceptanceState ?? bundle.task.value.acceptanceState ?? null,
3066
+ ceoWriteNextStep: options.report.acceptanceHandoff?.ceoWriteNextStep ?? bundle.task.value.ceoWriteNextStep ?? null,
3001
3067
  path: options.report.targetArtifact ?? bundle.task.value.path,
3002
3068
  portablePath: normalizePortablePath(options.report.targetArtifact ?? bundle.task.value.path)
3003
3069
  };
@@ -4023,6 +4089,59 @@ async function ensureSigningCredentials(credentials, opts = {}) {
4023
4089
  }
4024
4090
  }
4025
4091
 
4092
+ class AssistantMessageStream {
4093
+ constructor(createId = node_crypto.randomUUID) {
4094
+ this.createId = createId;
4095
+ }
4096
+ activeStream = null;
4097
+ delta() {
4098
+ return this.metadata("delta", "append");
4099
+ }
4100
+ commit() {
4101
+ const metadata = this.metadata("commit", "replace");
4102
+ this.reset();
4103
+ return metadata;
4104
+ }
4105
+ abort() {
4106
+ const metadata = this.metadata("abort", "replace");
4107
+ this.reset();
4108
+ return metadata;
4109
+ }
4110
+ hasActive() {
4111
+ return this.activeStream !== null;
4112
+ }
4113
+ reset() {
4114
+ this.activeStream = null;
4115
+ }
4116
+ metadata(phase, mode) {
4117
+ const activeStream = this.ensureActiveStream();
4118
+ return {
4119
+ streamId: activeStream.streamId,
4120
+ messageId: activeStream.messageId,
4121
+ phase,
4122
+ mode
4123
+ };
4124
+ }
4125
+ ensureActiveStream() {
4126
+ if (this.activeStream) {
4127
+ return this.activeStream;
4128
+ }
4129
+ const id = this.createId();
4130
+ this.activeStream = {
4131
+ streamId: `assistant-${id}`,
4132
+ messageId: id
4133
+ };
4134
+ return this.activeStream;
4135
+ }
4136
+ }
4137
+ function isTransientMessageStreamDelta(body) {
4138
+ if (!body || typeof body !== "object") {
4139
+ return false;
4140
+ }
4141
+ const record = body;
4142
+ return record.type === "message" && record.phase === "delta";
4143
+ }
4144
+
4026
4145
  const MAX_PENDING_RELIABLE_SESSION_MESSAGES = 200;
4027
4146
  const MAX_PENDING_RELIABLE_SESSION_MESSAGE_BYTES = 512 * 1024;
4028
4147
  const PROTOCOL_V3_INITIAL_SNAPSHOT_LIMIT = 150;
@@ -5475,6 +5594,9 @@ class ApiSessionClient extends node_events.EventEmitter {
5475
5594
  });
5476
5595
  }
5477
5596
  shouldBufferReliableCodexMessage(body) {
5597
+ if (isTransientMessageStreamDelta(body)) {
5598
+ return false;
5599
+ }
5478
5600
  switch (body?.type) {
5479
5601
  case "message":
5480
5602
  case "tool-call":
@@ -5491,6 +5613,9 @@ class ApiSessionClient extends node_events.EventEmitter {
5491
5613
  }
5492
5614
  }
5493
5615
  shouldBufferReliableAcpMessage(body) {
5616
+ if (isTransientMessageStreamDelta(body)) {
5617
+ return false;
5618
+ }
5494
5619
  switch (body?.type) {
5495
5620
  case "message":
5496
5621
  case "tool-call":
@@ -6815,6 +6940,7 @@ var api = /*#__PURE__*/Object.freeze({
6815
6940
 
6816
6941
  exports.ApiClient = ApiClient;
6817
6942
  exports.ApiSessionClient = ApiSessionClient;
6943
+ exports.AssistantMessageStream = AssistantMessageStream;
6818
6944
  exports.AsyncLock = AsyncLock;
6819
6945
  exports.HAPPY_CLOUD_DAEMON_PORT = HAPPY_CLOUD_DAEMON_PORT;
6820
6946
  exports.HAPPY_ORG_REPEAT_THRESHOLD = HAPPY_ORG_REPEAT_THRESHOLD;
@@ -18,7 +18,7 @@ import { spawn } from 'node:child_process';
18
18
  import { Expo } from 'expo-server-sdk';
19
19
 
20
20
  var name = "happy-imou-cloud";
21
- var version = "2.1.39";
21
+ var version = "2.1.41";
22
22
  var description = "hicloud - Imou 企业定制版。关键是 happy!移动端远程 AI 编程工具,支持 Claude Code、Codex 和 Gemini CLI";
23
23
  var author = "long.zhu";
24
24
  var license = "MIT";
@@ -1212,6 +1212,23 @@ const HappyOrgAccessChannelStateSchema = z$1.enum([
1212
1212
  "reattach_required",
1213
1213
  "runtime_replaced"
1214
1214
  ]);
1215
+ const HappyOrgAcceptanceStateSchema = z$1.enum([
1216
+ "not_ready",
1217
+ "awaiting_acceptance",
1218
+ "closed"
1219
+ ]);
1220
+ const HappyOrgAcceptanceHandoffSchema = z$1.object({
1221
+ dispatchId: z$1.string().min(1),
1222
+ replyTo: z$1.string().min(1),
1223
+ taskId: z$1.string().min(1),
1224
+ positionId: z$1.string().min(1).optional().nullable(),
1225
+ responsibilityId: z$1.string().min(1).optional().nullable(),
1226
+ positionStatus: z$1.string().min(1),
1227
+ latestUserVisibleResult: z$1.string().min(1),
1228
+ blockerSummary: z$1.string().min(1).nullable(),
1229
+ acceptanceState: HappyOrgAcceptanceStateSchema,
1230
+ ceoWriteNextStep: z$1.string().min(1)
1231
+ });
1215
1232
  const HappyOrgRouteTypeSchema = z$1.enum([
1216
1233
  "direct_reply",
1217
1234
  "version_planning_reply",
@@ -1342,7 +1359,8 @@ const HappyOrgTurnReportSchema = HappyOrgTaskContextSchema.extend({
1342
1359
  accessChannelState: HappyOrgAccessChannelStateSchema.nullable(),
1343
1360
  repeatFingerprint: z$1.string().nullable(),
1344
1361
  replyContext: HappyOrgReplyContextSchema.nullish(),
1345
- specialistHome: HappyOrgSpecialistHomeIdentitySchema.nullish()
1362
+ specialistHome: HappyOrgSpecialistHomeIdentitySchema.nullish(),
1363
+ acceptanceHandoff: HappyOrgAcceptanceHandoffSchema.nullish()
1346
1364
  });
1347
1365
  const HappyOrgRepeatEntrySchema = z$1.object({
1348
1366
  count: z$1.number().int().nonnegative(),
@@ -1689,9 +1707,9 @@ function buildHappyOrgTaskBoardView(tasks) {
1689
1707
  ownerName: task.ownerName,
1690
1708
  responsibilityId: task.responsibilityId ?? null,
1691
1709
  responsibilityLabel: task.responsibilityLabel ?? null,
1692
- currentProgress: task.summary || null,
1693
- latestResult: task.reviewSummary || task.resultSummary || null,
1694
- blockerOrDecision: task.blocker || task.decisionNeeded || task.adviceSummary || null,
1710
+ currentProgress: task.positionStatus || task.summary || null,
1711
+ latestResult: task.latestUserVisibleResult || task.reviewSummary || task.resultSummary || null,
1712
+ blockerOrDecision: task.blockerSummary || task.blocker || task.decisionNeeded || task.adviceSummary || task.ceoWriteNextStep || null,
1695
1713
  path: task.path || null,
1696
1714
  updatedAt: task.updatedAt
1697
1715
  };
@@ -1909,6 +1927,22 @@ const TaskValueSchema = z$1.object({
1909
1927
  responsibilityLabel: z$1.string().nullable(),
1910
1928
  activeOwnerAgentId: z$1.string().nullable(),
1911
1929
  hasActiveOwner: z$1.boolean(),
1930
+ lastTurnStatus: z$1.enum(["turn_update", "task_complete", "turn_aborted"]).nullable().optional(),
1931
+ lastInterventionType: z$1.enum(["none", "review_needed", "blocker", "decision_needed"]).nullable().optional(),
1932
+ lastTurnReportedAt: z$1.number().nullable().optional(),
1933
+ turnReportCount: z$1.number().int().nonnegative().optional(),
1934
+ repeatFingerprint: z$1.string().nullable().optional(),
1935
+ accessChannelState: z$1.enum(["ok", "reattach_required", "runtime_replaced"]).nullable().optional(),
1936
+ replyDispatchId: z$1.string().nullable().optional(),
1937
+ replyToSessionId: z$1.string().nullable().optional(),
1938
+ specialistHomePath: z$1.string().nullable().optional(),
1939
+ specialistHomeSessionId: z$1.string().nullable().optional(),
1940
+ specialistHomeMachineId: z$1.string().nullable().optional(),
1941
+ positionStatus: z$1.string().nullable().optional(),
1942
+ latestUserVisibleResult: z$1.string().nullable().optional(),
1943
+ blockerSummary: z$1.string().nullable().optional(),
1944
+ acceptanceState: z$1.enum(["not_ready", "awaiting_acceptance", "closed"]).nullable().optional(),
1945
+ ceoWriteNextStep: z$1.string().nullable().optional(),
1912
1946
  path: z$1.string(),
1913
1947
  portablePath: z$1.string().nullable(),
1914
1948
  successCriteria: z$1.array(z$1.string()),
@@ -2514,6 +2548,22 @@ async function applyCreateTaskRequest(rootPath, request) {
2514
2548
  responsibilityLabel,
2515
2549
  activeOwnerAgentId: null,
2516
2550
  hasActiveOwner: false,
2551
+ lastTurnStatus: null,
2552
+ lastInterventionType: null,
2553
+ lastTurnReportedAt: null,
2554
+ turnReportCount: 0,
2555
+ repeatFingerprint: null,
2556
+ accessChannelState: null,
2557
+ replyDispatchId: null,
2558
+ replyToSessionId: null,
2559
+ specialistHomePath: null,
2560
+ specialistHomeSessionId: null,
2561
+ specialistHomeMachineId: null,
2562
+ positionStatus: null,
2563
+ latestUserVisibleResult: null,
2564
+ blockerSummary: null,
2565
+ acceptanceState: null,
2566
+ ceoWriteNextStep: null,
2517
2567
  path: request.path,
2518
2568
  portablePath: normalizePortablePath(request.path),
2519
2569
  successCriteria: request.successCriteria,
@@ -2978,6 +3028,22 @@ async function recordHappyOrgTurnReport(options) {
2978
3028
  lastUpdatedBy: options.report.memberAgentId,
2979
3029
  activeOwnerAgentId: options.report.memberAgentId,
2980
3030
  hasActiveOwner: nextStatus === "active",
3031
+ lastTurnStatus: options.report.turnStatus,
3032
+ lastInterventionType: options.report.interventionType,
3033
+ lastTurnReportedAt: now,
3034
+ turnReportCount: (bundle.task.value.turnReportCount ?? 0) + 1,
3035
+ repeatFingerprint: options.report.repeatFingerprint ?? bundle.task.value.repeatFingerprint ?? null,
3036
+ accessChannelState: options.report.accessChannelState ?? bundle.task.value.accessChannelState ?? null,
3037
+ replyDispatchId: options.report.replyContext?.dispatchId ?? bundle.task.value.replyDispatchId ?? null,
3038
+ replyToSessionId: options.report.replyContext?.replyTo ?? bundle.task.value.replyToSessionId ?? null,
3039
+ specialistHomePath: options.report.specialistHome?.path ?? bundle.task.value.specialistHomePath ?? null,
3040
+ specialistHomeSessionId: options.report.specialistHome?.happySessionId ?? bundle.task.value.specialistHomeSessionId ?? null,
3041
+ specialistHomeMachineId: options.report.specialistHome?.machineId ?? bundle.task.value.specialistHomeMachineId ?? null,
3042
+ positionStatus: options.report.acceptanceHandoff?.positionStatus ?? bundle.task.value.positionStatus ?? null,
3043
+ latestUserVisibleResult: options.report.acceptanceHandoff?.latestUserVisibleResult ?? bundle.task.value.latestUserVisibleResult ?? null,
3044
+ blockerSummary: options.report.acceptanceHandoff?.blockerSummary ?? bundle.task.value.blockerSummary ?? null,
3045
+ acceptanceState: options.report.acceptanceHandoff?.acceptanceState ?? bundle.task.value.acceptanceState ?? null,
3046
+ ceoWriteNextStep: options.report.acceptanceHandoff?.ceoWriteNextStep ?? bundle.task.value.ceoWriteNextStep ?? null,
2981
3047
  path: options.report.targetArtifact ?? bundle.task.value.path,
2982
3048
  portablePath: normalizePortablePath(options.report.targetArtifact ?? bundle.task.value.path)
2983
3049
  };
@@ -4003,6 +4069,59 @@ async function ensureSigningCredentials(credentials, opts = {}) {
4003
4069
  }
4004
4070
  }
4005
4071
 
4072
+ class AssistantMessageStream {
4073
+ constructor(createId = randomUUID) {
4074
+ this.createId = createId;
4075
+ }
4076
+ activeStream = null;
4077
+ delta() {
4078
+ return this.metadata("delta", "append");
4079
+ }
4080
+ commit() {
4081
+ const metadata = this.metadata("commit", "replace");
4082
+ this.reset();
4083
+ return metadata;
4084
+ }
4085
+ abort() {
4086
+ const metadata = this.metadata("abort", "replace");
4087
+ this.reset();
4088
+ return metadata;
4089
+ }
4090
+ hasActive() {
4091
+ return this.activeStream !== null;
4092
+ }
4093
+ reset() {
4094
+ this.activeStream = null;
4095
+ }
4096
+ metadata(phase, mode) {
4097
+ const activeStream = this.ensureActiveStream();
4098
+ return {
4099
+ streamId: activeStream.streamId,
4100
+ messageId: activeStream.messageId,
4101
+ phase,
4102
+ mode
4103
+ };
4104
+ }
4105
+ ensureActiveStream() {
4106
+ if (this.activeStream) {
4107
+ return this.activeStream;
4108
+ }
4109
+ const id = this.createId();
4110
+ this.activeStream = {
4111
+ streamId: `assistant-${id}`,
4112
+ messageId: id
4113
+ };
4114
+ return this.activeStream;
4115
+ }
4116
+ }
4117
+ function isTransientMessageStreamDelta(body) {
4118
+ if (!body || typeof body !== "object") {
4119
+ return false;
4120
+ }
4121
+ const record = body;
4122
+ return record.type === "message" && record.phase === "delta";
4123
+ }
4124
+
4006
4125
  const MAX_PENDING_RELIABLE_SESSION_MESSAGES = 200;
4007
4126
  const MAX_PENDING_RELIABLE_SESSION_MESSAGE_BYTES = 512 * 1024;
4008
4127
  const PROTOCOL_V3_INITIAL_SNAPSHOT_LIMIT = 150;
@@ -5455,6 +5574,9 @@ class ApiSessionClient extends EventEmitter {
5455
5574
  });
5456
5575
  }
5457
5576
  shouldBufferReliableCodexMessage(body) {
5577
+ if (isTransientMessageStreamDelta(body)) {
5578
+ return false;
5579
+ }
5458
5580
  switch (body?.type) {
5459
5581
  case "message":
5460
5582
  case "tool-call":
@@ -5471,6 +5593,9 @@ class ApiSessionClient extends EventEmitter {
5471
5593
  }
5472
5594
  }
5473
5595
  shouldBufferReliableAcpMessage(body) {
5596
+ if (isTransientMessageStreamDelta(body)) {
5597
+ return false;
5598
+ }
5474
5599
  switch (body?.type) {
5475
5600
  case "message":
5476
5601
  case "tool-call":
@@ -6793,4 +6918,4 @@ var api = /*#__PURE__*/Object.freeze({
6793
6918
  ApiClient: ApiClient
6794
6919
  });
6795
6920
 
6796
- export { ApiClient as A, clearDaemonState as B, packageJson as C, acquireDaemonLock as D, writeDaemonState as E, releaseDaemonLock as F, validateProfileForAgent as G, HeadTailPreviewBuffer as H, getProfileEnvironmentVariables as I, clearCredentials as J, clearMachineId as K, readHappyOrgDispatchTruthSnapshot as L, processHappyOrgRepoRequests as M, readHappyOrgRepoTaskBoard as N, HappyOrgTurnReportSchema as O, recordHappyOrgTurnReport as P, MessageContentSchema as Q, buildSocketAuth as R, encrypt as S, getLatestDaemonLog as T, persistence as U, api as V, ApiSessionClient as a, connectionState as b, configuration as c, HAPPY_ORG_REPLY_ACK_VERSION as d, HAPPY_ORG_TURN_REPORT_TAG as e, HAPPY_ORG_SUMMARY_MAX_LENGTH as f, HAPPY_ORG_REPEAT_THRESHOLD as g, backoff as h, isAuthenticationRequiredError as i, delay as j, AsyncLock as k, logger as l, encodeBase64 as m, readCredentials as n, ensureSigningCredentials as o, preserveSessionRuntimeMetadata as p, encodeBase64Url as q, readSettings as r, startOfflineReconnection as s, buildClientHeaders as t, updateSettings as u, decodeBase64 as v, writeCredentialsLegacy as w, writeCredentialsDataKey as x, readDaemonState as y, HAPPY_CLOUD_DAEMON_PORT as z };
6921
+ export { ApiClient as A, HAPPY_CLOUD_DAEMON_PORT as B, clearDaemonState as C, packageJson as D, acquireDaemonLock as E, writeDaemonState as F, releaseDaemonLock as G, HeadTailPreviewBuffer as H, validateProfileForAgent as I, getProfileEnvironmentVariables as J, clearCredentials as K, clearMachineId as L, readHappyOrgDispatchTruthSnapshot as M, processHappyOrgRepoRequests as N, readHappyOrgRepoTaskBoard as O, HappyOrgTurnReportSchema as P, recordHappyOrgTurnReport as Q, MessageContentSchema as R, buildSocketAuth as S, encrypt as T, getLatestDaemonLog as U, persistence as V, api as W, ApiSessionClient as a, connectionState as b, configuration as c, AssistantMessageStream as d, HAPPY_ORG_REPLY_ACK_VERSION as e, HAPPY_ORG_TURN_REPORT_TAG as f, HAPPY_ORG_SUMMARY_MAX_LENGTH as g, HAPPY_ORG_REPEAT_THRESHOLD as h, isAuthenticationRequiredError as i, backoff as j, delay as k, logger as l, AsyncLock as m, encodeBase64 as n, readCredentials as o, preserveSessionRuntimeMetadata as p, ensureSigningCredentials as q, readSettings as r, startOfflineReconnection as s, encodeBase64Url as t, updateSettings as u, buildClientHeaders as v, decodeBase64 as w, writeCredentialsLegacy as x, writeCredentialsDataKey as y, readDaemonState as z };
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-Cgor8CE7.cjs');
3
+ var index = require('./index-Dh0qGrEd.cjs');
4
4
  require('chalk');
5
- require('./api-BoeZDGwx.cjs');
5
+ require('./api-C_Tnx4UG.cjs');
6
6
  require('axios');
7
7
  require('fs');
8
8
  require('node:fs');
@@ -1,6 +1,6 @@
1
- import { c as createDefaultRuntimeShell } from './index-B9mt95QV.mjs';
1
+ import { c as createDefaultRuntimeShell } from './index-D5m2Duxd.mjs';
2
2
  import 'chalk';
3
- import './api-wcqkneTg.mjs';
3
+ import './api-CwNEbJBM.mjs';
4
4
  import 'axios';
5
5
  import 'fs';
6
6
  import 'node:fs';
@@ -1,5 +1,5 @@
1
1
  import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import chalk from 'chalk';
2
- import { l as logger, m as encodeBase64, c as configuration, n as readCredentials, o as ensureSigningCredentials, r as readSettings, u as updateSettings, q as encodeBase64Url, j as delay, t as buildClientHeaders, v as decodeBase64, w as writeCredentialsLegacy, x as writeCredentialsDataKey, y as readDaemonState, z as HAPPY_CLOUD_DAEMON_PORT, B as clearDaemonState, C as packageJson, i as isAuthenticationRequiredError, D as acquireDaemonLock, E as writeDaemonState, A as ApiClient, F as releaseDaemonLock, G as validateProfileForAgent, I as getProfileEnvironmentVariables, J as clearCredentials, K as clearMachineId, L as readHappyOrgDispatchTruthSnapshot, M as processHappyOrgRepoRequests, N as readHappyOrgRepoTaskBoard, O as HappyOrgTurnReportSchema, P as recordHappyOrgTurnReport, Q as MessageContentSchema, R as buildSocketAuth, S as encrypt, H as HeadTailPreviewBuffer, T as getLatestDaemonLog } from './api-wcqkneTg.mjs';
2
+ import { l as logger, n as encodeBase64, c as configuration, o as readCredentials, q as ensureSigningCredentials, r as readSettings, u as updateSettings, t as encodeBase64Url, k as delay, v as buildClientHeaders, w as decodeBase64, x as writeCredentialsLegacy, y as writeCredentialsDataKey, z as readDaemonState, B as HAPPY_CLOUD_DAEMON_PORT, C as clearDaemonState, D as packageJson, i as isAuthenticationRequiredError, E as acquireDaemonLock, F as writeDaemonState, A as ApiClient, G as releaseDaemonLock, I as validateProfileForAgent, J as getProfileEnvironmentVariables, K as clearCredentials, L as clearMachineId, M as readHappyOrgDispatchTruthSnapshot, N as processHappyOrgRepoRequests, O as readHappyOrgRepoTaskBoard, P as HappyOrgTurnReportSchema, Q as recordHappyOrgTurnReport, R as MessageContentSchema, S as buildSocketAuth, T as encrypt, H as HeadTailPreviewBuffer, U as getLatestDaemonLog } from './api-CwNEbJBM.mjs';
3
3
  import { z } from 'zod';
4
4
  import fs, { writeFile as writeFile$1, rename, unlink as unlink$1 } from 'fs/promises';
5
5
  import os$1, { homedir } from 'os';
@@ -11877,14 +11877,14 @@ var launch = /*#__PURE__*/Object.freeze({
11877
11877
  const unifiedProviderExecutors = {
11878
11878
  claude: async (opts) => {
11879
11879
  const claudeOptions = opts.claudeOptions ?? {};
11880
- const { runClaude } = await import('./runClaude-BYKNCDEU.mjs');
11880
+ const { runClaude } = await import('./runClaude-Bng_IsE7.mjs');
11881
11881
  await runClaude(opts.credentials, {
11882
11882
  ...claudeOptions,
11883
11883
  startingMode: claudeOptions.startingMode ?? (claudeOptions.startedBy === "daemon" ? "remote" : void 0)
11884
11884
  });
11885
11885
  },
11886
11886
  codex: async (opts) => {
11887
- const { runCodex } = await import('./runCodex-DqAddhDE.mjs');
11887
+ const { runCodex } = await import('./runCodex-DAc6flez.mjs');
11888
11888
  await runCodex({
11889
11889
  credentials: opts.credentials,
11890
11890
  startedBy: opts.startedBy,
@@ -11893,7 +11893,7 @@ const unifiedProviderExecutors = {
11893
11893
  });
11894
11894
  },
11895
11895
  gemini: async (opts) => {
11896
- const { runGemini } = await import('./runGemini-3jkfOtlr.mjs');
11896
+ const { runGemini } = await import('./runGemini-DdXj8ltI.mjs');
11897
11897
  await runGemini({
11898
11898
  credentials: opts.credentials,
11899
11899
  startedBy: opts.startedBy
@@ -11976,7 +11976,7 @@ function shouldRunMainClaudeFlow(opts) {
11976
11976
  return;
11977
11977
  } else if (subcommand === "runtime") {
11978
11978
  if (args[1] === "providers") {
11979
- const { renderRuntimeProviders } = await import('./command-DcgK0y3F.mjs');
11979
+ const { renderRuntimeProviders } = await import('./command-D0FxDynx.mjs');
11980
11980
  console.log(renderRuntimeProviders());
11981
11981
  return;
11982
11982
  }
@@ -12182,8 +12182,8 @@ function shouldRunMainClaudeFlow(opts) {
12182
12182
  const projectId = args[3];
12183
12183
  try {
12184
12184
  const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return config; });
12185
- const { readCredentials: readCredentials2 } = await import('./api-wcqkneTg.mjs').then(function (n) { return n.U; });
12186
- const { ApiClient: ApiClient2 } = await import('./api-wcqkneTg.mjs').then(function (n) { return n.V; });
12185
+ const { readCredentials: readCredentials2 } = await import('./api-CwNEbJBM.mjs').then(function (n) { return n.V; });
12186
+ const { ApiClient: ApiClient2 } = await import('./api-CwNEbJBM.mjs').then(function (n) { return n.W; });
12187
12187
  let userEmail = void 0;
12188
12188
  try {
12189
12189
  const credentials = await readCredentials2();
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var persistence = require('./api-BoeZDGwx.cjs');
4
+ var persistence = require('./api-C_Tnx4UG.cjs');
5
5
  var z = require('zod');
6
6
  var fs$2 = require('fs/promises');
7
7
  var os$1 = require('os');
@@ -72,7 +72,7 @@ async function openBrowser(url) {
72
72
  }
73
73
  }
74
74
 
75
- const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-Cgor8CE7.cjs', document.baseURI).href)));
75
+ const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-Dh0qGrEd.cjs', document.baseURI).href)));
76
76
  const QRCode = require$1("qrcode-terminal/vendor/QRCode");
77
77
  const QRErrorCorrectLevel = require$1("qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel");
78
78
  const pendingTempFiles = /* @__PURE__ */ new Set();
@@ -637,7 +637,7 @@ function setupCleanupHandlers() {
637
637
  });
638
638
  }
639
639
 
640
- const __dirname$2 = path$1.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-Cgor8CE7.cjs', document.baseURI).href))));
640
+ const __dirname$2 = path$1.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-Dh0qGrEd.cjs', document.baseURI).href))));
641
641
  function projectPath() {
642
642
  const path = path$1.resolve(__dirname$2, "..");
643
643
  return path;
@@ -10574,7 +10574,7 @@ class AbortError extends Error {
10574
10574
  }
10575
10575
  }
10576
10576
 
10577
- const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-Cgor8CE7.cjs', document.baseURI).href)));
10577
+ const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-Dh0qGrEd.cjs', document.baseURI).href)));
10578
10578
  const __dirname$1 = path.join(__filename$1, "..");
10579
10579
  function getGlobalClaudeVersion() {
10580
10580
  try {
@@ -11899,14 +11899,14 @@ var launch = /*#__PURE__*/Object.freeze({
11899
11899
  const unifiedProviderExecutors = {
11900
11900
  claude: async (opts) => {
11901
11901
  const claudeOptions = opts.claudeOptions ?? {};
11902
- const { runClaude } = await Promise.resolve().then(function () { return require('./runClaude-CwXQwmgw.cjs'); });
11902
+ const { runClaude } = await Promise.resolve().then(function () { return require('./runClaude-mIFO7YxF.cjs'); });
11903
11903
  await runClaude(opts.credentials, {
11904
11904
  ...claudeOptions,
11905
11905
  startingMode: claudeOptions.startingMode ?? (claudeOptions.startedBy === "daemon" ? "remote" : void 0)
11906
11906
  });
11907
11907
  },
11908
11908
  codex: async (opts) => {
11909
- const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-BkB_YKhV.cjs'); });
11909
+ const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-cNuxGshy.cjs'); });
11910
11910
  await runCodex({
11911
11911
  credentials: opts.credentials,
11912
11912
  startedBy: opts.startedBy,
@@ -11915,7 +11915,7 @@ const unifiedProviderExecutors = {
11915
11915
  });
11916
11916
  },
11917
11917
  gemini: async (opts) => {
11918
- const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-B4uXPrue.cjs'); });
11918
+ const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-DsRFV8WN.cjs'); });
11919
11919
  await runGemini({
11920
11920
  credentials: opts.credentials,
11921
11921
  startedBy: opts.startedBy
@@ -11998,7 +11998,7 @@ function shouldRunMainClaudeFlow(opts) {
11998
11998
  return;
11999
11999
  } else if (subcommand === "runtime") {
12000
12000
  if (args[1] === "providers") {
12001
- const { renderRuntimeProviders } = await Promise.resolve().then(function () { return require('./command-CkYq_KwA.cjs'); });
12001
+ const { renderRuntimeProviders } = await Promise.resolve().then(function () { return require('./command-C3RwwPVD.cjs'); });
12002
12002
  console.log(renderRuntimeProviders());
12003
12003
  return;
12004
12004
  }
@@ -12204,8 +12204,8 @@ function shouldRunMainClaudeFlow(opts) {
12204
12204
  const projectId = args[3];
12205
12205
  try {
12206
12206
  const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return config; });
12207
- const { readCredentials: readCredentials2 } = await Promise.resolve().then(function () { return require('./api-BoeZDGwx.cjs'); }).then(function (n) { return n.persistence; });
12208
- const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./api-BoeZDGwx.cjs'); }).then(function (n) { return n.api; });
12207
+ const { readCredentials: readCredentials2 } = await Promise.resolve().then(function () { return require('./api-C_Tnx4UG.cjs'); }).then(function (n) { return n.persistence; });
12208
+ const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./api-C_Tnx4UG.cjs'); }).then(function (n) { return n.api; });
12209
12209
  let userEmail = void 0;
12210
12210
  try {
12211
12211
  const credentials = await readCredentials2();
package/dist/index.cjs CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  require('chalk');
4
- require('./api-BoeZDGwx.cjs');
4
+ require('./api-C_Tnx4UG.cjs');
5
5
  require('zod');
6
- require('./index-Cgor8CE7.cjs');
6
+ require('./index-Dh0qGrEd.cjs');
7
7
  require('node:child_process');
8
8
  require('node:fs');
9
9
  require('cross-spawn');
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import 'chalk';
2
- import './api-wcqkneTg.mjs';
2
+ import './api-CwNEbJBM.mjs';
3
3
  import 'zod';
4
- import './index-B9mt95QV.mjs';
4
+ import './index-D5m2Duxd.mjs';
5
5
  import 'node:child_process';
6
6
  import 'node:fs';
7
7
  import 'cross-spawn';
package/dist/lib.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var persistence = require('./api-BoeZDGwx.cjs');
3
+ var persistence = require('./api-C_Tnx4UG.cjs');
4
4
  var types = require('./types-DVk3crez.cjs');
5
5
  require('axios');
6
6
  require('chalk');