happy-imou-cloud 2.1.32 → 2.1.34

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-CfibmGoR.mjs → BaseReasoningProcessor-CxLnyixP.mjs} +2 -2
  2. package/dist/{BaseReasoningProcessor-CQQrYyo3.cjs → BaseReasoningProcessor-kN8gq-t4.cjs} +2 -2
  3. package/dist/{ProviderSelectionHandler-C1q60HP6.mjs → ProviderSelectionHandler-DuJGNviz.mjs} +2 -2
  4. package/dist/{ProviderSelectionHandler-D9Bd_S25.cjs → ProviderSelectionHandler-oEEvSQ0O.cjs} +2 -2
  5. package/dist/{api-DIFbsA6t.mjs → api-B3Zl8oHG.mjs} +105 -5
  6. package/dist/{api-DeDVledu.cjs → api-C94O6IB2.cjs} +106 -4
  7. package/dist/{command-Cl7kVs7K.cjs → command-96cX402J.cjs} +2 -2
  8. package/dist/{command-ZJ5yPOv4.mjs → command-CMZlS6zf.mjs} +2 -2
  9. package/dist/{index-CT1dgGsX.cjs → index-D4TuE2VS.cjs} +140 -37
  10. package/dist/{index-CFH8qcTw.mjs → index-sqm5plVs.mjs} +137 -34
  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 +412 -0
  15. package/dist/lib.d.mts +412 -0
  16. package/dist/lib.mjs +1 -1
  17. package/dist/{registerKillSessionHandler-9O3r5bEa.cjs → registerKillSessionHandler-7bLVg5RG.cjs} +233 -11
  18. package/dist/{registerKillSessionHandler-DxpGgu6u.mjs → registerKillSessionHandler-Dmm6gsoz.mjs} +233 -11
  19. package/dist/{runClaude-BvRjHUgF.mjs → runClaude-BrvxWJ9-.mjs} +4 -4
  20. package/dist/{runClaude-BmW-_Yrl.cjs → runClaude-Dn1JJ8m9.cjs} +4 -4
  21. package/dist/{runCodex-dmjiaB1v.cjs → runCodex-Dc2Rqb8W.cjs} +5 -5
  22. package/dist/{runCodex-B-B9MfOf.mjs → runCodex-DfYO-7YG.mjs} +5 -5
  23. package/dist/{runGemini-B9W7nfow.mjs → runGemini-C1_AOBlU.mjs} +4 -4
  24. package/dist/{runGemini-CyERhKhw.cjs → runGemini-DQyuAba-.cjs} +4 -4
  25. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
- import { a as createSessionMetadata, p as publishSessionRegistration } from './index-CFH8qcTw.mjs';
2
- import { s as startOfflineReconnection, c as configuration, i as isAuthenticationRequiredError, l as logger } from './api-DIFbsA6t.mjs';
1
+ import { a as createSessionMetadata, p as publishSessionRegistration } from './index-sqm5plVs.mjs';
2
+ import { s as startOfflineReconnection, c as configuration, i as isAuthenticationRequiredError, l as logger } from './api-B3Zl8oHG.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 index = require('./index-CT1dgGsX.cjs');
4
- var persistence = require('./api-DeDVledu.cjs');
3
+ var index = require('./index-D4TuE2VS.cjs');
4
+ var persistence = require('./api-C94O6IB2.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 { l as logger } from './api-DIFbsA6t.mjs';
2
- import { g as getPendingInteractionTimeoutMs, I as INTERACTION_SUPERSEDED_ERROR, a as INTERACTION_TIMED_OUT_ERROR } from './registerKillSessionHandler-DxpGgu6u.mjs';
1
+ import { l as logger } from './api-B3Zl8oHG.mjs';
2
+ import { g as getPendingInteractionTimeoutMs, I as INTERACTION_SUPERSEDED_ERROR, a as INTERACTION_TIMED_OUT_ERROR } from './registerKillSessionHandler-Dmm6gsoz.mjs';
3
3
 
4
4
  async function runModeLoop(opts) {
5
5
  let currentMode = opts.startingMode;
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var persistence = require('./api-DeDVledu.cjs');
4
- var registerKillSessionHandler = require('./registerKillSessionHandler-9O3r5bEa.cjs');
3
+ var persistence = require('./api-C94O6IB2.cjs');
4
+ var registerKillSessionHandler = require('./registerKillSessionHandler-7bLVg5RG.cjs');
5
5
 
6
6
  async function runModeLoop(opts) {
7
7
  let currentMode = opts.startingMode;
@@ -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.32";
21
+ var version = "2.1.34";
22
22
  var description = "hicloud - Imou 企业定制版。关键是 happy!移动端远程 AI 编程工具,支持 Claude Code、Codex 和 Gemini CLI";
23
23
  var author = "long.zhu";
24
24
  var license = "MIT";
@@ -1195,6 +1195,7 @@ var persistence = /*#__PURE__*/Object.freeze({
1195
1195
  const HAPPY_ORG_REPEAT_THRESHOLD = 3;
1196
1196
  const HAPPY_ORG_TURN_REPORT_TAG = "HAPPY_TURN_REPORT";
1197
1197
  const HAPPY_ORG_SUMMARY_MAX_LENGTH = 120;
1198
+ const HAPPY_ORG_REPLY_ACK_VERSION = "happy-org-1.7.7-reply-ack-v1";
1198
1199
  const HappyOrgInterventionTypeSchema = z$1.enum([
1199
1200
  "none",
1200
1201
  "review_needed",
@@ -1211,6 +1212,24 @@ const HappyOrgAccessChannelStateSchema = z$1.enum([
1211
1212
  "reattach_required",
1212
1213
  "runtime_replaced"
1213
1214
  ]);
1215
+ const HappyOrgRouteTypeSchema = z$1.enum([
1216
+ "direct_reply",
1217
+ "version_planning_reply",
1218
+ "analysis_task",
1219
+ "implementation_task",
1220
+ "ack_plus_reply"
1221
+ ]);
1222
+ const HappyOrgAckTypeSchema = z$1.enum([
1223
+ "none",
1224
+ "read_ack",
1225
+ "dispatch_ack",
1226
+ "route_ack",
1227
+ "progress_ack"
1228
+ ]);
1229
+ const HappyOrgReplyModeSchema = z$1.enum([
1230
+ "reply-first",
1231
+ "analysis-first"
1232
+ ]);
1214
1233
  const HappyOrgTaskContextSchema = z$1.object({
1215
1234
  taskId: z$1.string().min(1),
1216
1235
  organizationId: z$1.string().min(1),
@@ -1229,10 +1248,20 @@ const HappyOrgTaskControlSchema = z$1.object({
1229
1248
  });
1230
1249
  const HappyOrgReplyContextSchema = z$1.object({
1231
1250
  dispatchId: z$1.string().min(1),
1251
+ taskId: z$1.string().min(1).optional().nullable(),
1252
+ organizationId: z$1.string().min(1).optional().nullable(),
1232
1253
  scope: z$1.string().min(1),
1233
1254
  replyTo: z$1.string().min(1),
1255
+ memberAgentId: z$1.string().min(1).optional().nullable(),
1256
+ sessionId: z$1.string().min(1).optional().nullable(),
1234
1257
  positionId: z$1.string().min(1).optional().nullable(),
1235
- responsibilityId: z$1.string().min(1).optional().nullable()
1258
+ responsibilityId: z$1.string().min(1).optional().nullable(),
1259
+ routeType: HappyOrgRouteTypeSchema.optional().nullable(),
1260
+ ackType: HappyOrgAckTypeSchema.optional().nullable(),
1261
+ replyMode: HappyOrgReplyModeSchema.optional().nullable(),
1262
+ planIntent: z$1.string().min(1).optional().nullable(),
1263
+ routerReason: z$1.string().min(1).optional().nullable(),
1264
+ goldenRouteId: z$1.string().min(1).optional().nullable()
1236
1265
  });
1237
1266
  const HappyOrgDispatchBusinessAckStatusSchema = z$1.enum([
1238
1267
  "accepted",
@@ -1241,11 +1270,24 @@ const HappyOrgDispatchBusinessAckStatusSchema = z$1.enum([
1241
1270
  ]);
1242
1271
  const HappyOrgDispatchAckLedgerEntrySchema = z$1.object({
1243
1272
  dispatchId: z$1.string().min(1),
1273
+ ackVersion: z$1.string().min(1).optional().nullable(),
1244
1274
  scope: z$1.string().min(1),
1245
1275
  taskAck: z$1.string().min(1),
1246
1276
  readAck: z$1.literal("yes"),
1247
1277
  status: HappyOrgDispatchBusinessAckStatusSchema,
1248
1278
  note: z$1.string().nullable(),
1279
+ taskId: z$1.string().min(1).optional().nullable(),
1280
+ organizationId: z$1.string().min(1).optional().nullable(),
1281
+ memberAgentId: z$1.string().min(1).optional().nullable(),
1282
+ sessionId: z$1.string().min(1).optional().nullable(),
1283
+ positionId: z$1.string().min(1).optional().nullable(),
1284
+ responsibilityId: z$1.string().min(1).optional().nullable(),
1285
+ routeType: HappyOrgRouteTypeSchema.optional().nullable(),
1286
+ ackType: HappyOrgAckTypeSchema.optional().nullable(),
1287
+ replyMode: HappyOrgReplyModeSchema.optional().nullable(),
1288
+ planIntent: z$1.string().min(1).optional().nullable(),
1289
+ routerReason: z$1.string().min(1).optional().nullable(),
1290
+ goldenRouteId: z$1.string().min(1).optional().nullable(),
1249
1291
  acknowledgedAt: z$1.number().int().nonnegative()
1250
1292
  });
1251
1293
  const HappyOrgSpecialistHomeIdentitySchema = z$1.object({
@@ -2102,6 +2144,37 @@ async function listPositionEnvelopes(rootPath) {
2102
2144
  async function readResponsibilities(rootPath) {
2103
2145
  return await readEnvelope(path.join(rootPath, "RESPONSIBILITIES.json"), ResponsibilityEnvelopeSchema);
2104
2146
  }
2147
+ async function readHappyOrgDispatchTruthSnapshot(rootPath) {
2148
+ const [positions, responsibilities] = await Promise.all([
2149
+ listPositionEnvelopes(rootPath),
2150
+ readResponsibilities(rootPath)
2151
+ ]);
2152
+ const normalizedPositions = positions.map((position) => ({
2153
+ positionId: position.value.positionId,
2154
+ slug: position.value.slug,
2155
+ responsibilityIds: [...position.value.responsibilityIds],
2156
+ agentId: position.value.agentId ?? null,
2157
+ occupancyStatus: normalizeOccupancyStatus(position.value.occupancyStatus)
2158
+ }));
2159
+ const normalizedResponsibilities = responsibilities?.value?.map((responsibility) => ({
2160
+ responsibilityId: responsibility.responsibilityId,
2161
+ positionId: responsibility.positionId,
2162
+ memberAgentId: responsibility.memberAgentId ?? null,
2163
+ status: responsibility.status
2164
+ })) ?? normalizedPositions.flatMap((position) => {
2165
+ const responsibilityId = position.responsibilityIds[0] ?? buildResponsibilityId(position.slug);
2166
+ return [{
2167
+ responsibilityId,
2168
+ positionId: position.positionId,
2169
+ memberAgentId: position.agentId,
2170
+ status: position.agentId ? position.occupancyStatus === "active" ? "in_progress" : "assigned" : "vacancy"
2171
+ }];
2172
+ });
2173
+ return {
2174
+ positions: normalizedPositions,
2175
+ responsibilities: normalizedResponsibilities
2176
+ };
2177
+ }
2105
2178
  function mergeTaskEnvelope(taskBundle) {
2106
2179
  const { task, workflow, result } = taskBundle;
2107
2180
  return {
@@ -3884,9 +3957,13 @@ function parseHappyOrgFallbackEnvelope(rawEnvelope) {
3884
3957
  replyTo,
3885
3958
  organizationId: typeof parsed.organization_id === "string" ? parsed.organization_id.trim() : null,
3886
3959
  memberAgentId: typeof parsed.member_agent_id === "string" ? parsed.member_agent_id.trim() : null,
3960
+ sessionId: typeof parsed.session_id === "string" ? parsed.session_id.trim() : null,
3887
3961
  supervisorAgentId: typeof parsed.supervisor_agent_id === "string" ? parsed.supervisor_agent_id.trim() : null,
3888
3962
  positionId: typeof parsed.position_id === "string" ? parsed.position_id.trim() : null,
3889
- responsibilityId: typeof parsed.responsibility_id === "string" ? parsed.responsibility_id.trim() : null
3963
+ responsibilityId: typeof parsed.responsibility_id === "string" ? parsed.responsibility_id.trim() : null,
3964
+ routeType: parsed.route_type === "direct_reply" || parsed.route_type === "version_planning_reply" || parsed.route_type === "analysis_task" || parsed.route_type === "implementation_task" || parsed.route_type === "ack_plus_reply" ? parsed.route_type : null,
3965
+ ackType: parsed.ack_type === "none" || parsed.ack_type === "read_ack" || parsed.ack_type === "dispatch_ack" || parsed.ack_type === "route_ack" || parsed.ack_type === "progress_ack" ? parsed.ack_type : null,
3966
+ replyMode: parsed.reply_mode === "reply-first" || parsed.reply_mode === "analysis-first" ? parsed.reply_mode : null
3890
3967
  };
3891
3968
  } catch {
3892
3969
  return null;
@@ -3910,8 +3987,15 @@ function buildHappyOrgFallbackUserMessage(rawEnvelope) {
3910
3987
  } : {},
3911
3988
  replyContext: {
3912
3989
  dispatchId: envelope.dispatchId,
3990
+ taskId: envelope.taskId,
3991
+ organizationId: envelope.organizationId,
3913
3992
  scope: envelope.scope,
3914
3993
  replyTo: envelope.replyTo,
3994
+ memberAgentId: envelope.memberAgentId,
3995
+ sessionId: envelope.sessionId,
3996
+ routeType: envelope.routeType ?? "ack_plus_reply",
3997
+ ackType: envelope.ackType ?? "dispatch_ack",
3998
+ replyMode: envelope.replyMode ?? "reply-first",
3915
3999
  ...envelope.positionId ? { positionId: envelope.positionId } : {},
3916
4000
  ...envelope.responsibilityId ? { responsibilityId: envelope.responsibilityId } : {}
3917
4001
  }
@@ -6132,6 +6216,15 @@ class ApiClient {
6132
6216
  });
6133
6217
  return response.data.frontDoor;
6134
6218
  }
6219
+ async getOrganizationView(opts = {}) {
6220
+ const response = await this.request({
6221
+ method: "GET",
6222
+ url: `${configuration.serverUrl}/control/v1/views/organization`,
6223
+ headers: opts.organizationId ? { "x-happy-organization-id": opts.organizationId } : void 0,
6224
+ timeout: 5e3
6225
+ });
6226
+ return response.data.organization;
6227
+ }
6135
6228
  async listOrganizationAgents(opts = {}) {
6136
6229
  const response = await this.request({
6137
6230
  method: "GET",
@@ -6154,7 +6247,14 @@ class ApiClient {
6154
6247
  cross_scope_policy: "ask-first",
6155
6248
  position_id: opts.positionId ?? null,
6156
6249
  responsibility_id: opts.responsibilityId ?? null,
6157
- note: opts.note ?? null
6250
+ note: opts.note ?? null,
6251
+ requested_member_agent_id: opts.requestedMemberAgentId ?? null,
6252
+ position_truth_agent_id: opts.positionTruthAgentId ?? null,
6253
+ responsibility_truth_member_agent_id: opts.responsibilityTruthMemberAgentId ?? null,
6254
+ live_binding_session_id: opts.liveBindingSessionId ?? null,
6255
+ runtime_session_id: opts.runtimeSessionId ?? null,
6256
+ validation_result: opts.validationResult ?? "shadow_pass",
6257
+ rejection_reason: opts.rejectionReason ?? null
6158
6258
  },
6159
6259
  headers: withLegacyControlAck({ "x-happy-organization-id": opts.organizationId }),
6160
6260
  timeout: 1e4
@@ -6574,4 +6674,4 @@ var api = /*#__PURE__*/Object.freeze({
6574
6674
  ApiClient: ApiClient
6575
6675
  });
6576
6676
 
6577
- export { ApiClient as A, packageJson as B, acquireDaemonLock as C, writeDaemonState as D, releaseDaemonLock as E, validateProfileForAgent as F, getProfileEnvironmentVariables as G, HeadTailPreviewBuffer as H, clearCredentials as I, clearMachineId as J, processHappyOrgRepoRequests as K, HappyOrgTurnReportSchema as L, recordHappyOrgTurnReport as M, MessageContentSchema as N, buildSocketAuth as O, encrypt as P, getLatestDaemonLog as Q, persistence as R, api as S, ApiSessionClient as a, connectionState as b, configuration as c, HAPPY_ORG_TURN_REPORT_TAG as d, HAPPY_ORG_SUMMARY_MAX_LENGTH as e, HAPPY_ORG_REPEAT_THRESHOLD as f, backoff as g, delay as h, isAuthenticationRequiredError as i, AsyncLock as j, encodeBase64 as k, logger as l, readCredentials as m, ensureSigningCredentials as n, encodeBase64Url as o, preserveSessionRuntimeMetadata as p, buildClientHeaders as q, readSettings as r, startOfflineReconnection as s, decodeBase64 as t, updateSettings as u, writeCredentialsDataKey as v, writeCredentialsLegacy as w, readDaemonState as x, HAPPY_CLOUD_DAEMON_PORT as y, clearDaemonState as z };
6677
+ 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, HappyOrgTurnReportSchema as N, recordHappyOrgTurnReport as O, MessageContentSchema as P, buildSocketAuth as Q, encrypt as R, getLatestDaemonLog as S, persistence as T, api as U, 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 };
@@ -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.32";
41
+ var version = "2.1.34";
42
42
  var description = "hicloud - Imou 企业定制版。关键是 happy!移动端远程 AI 编程工具,支持 Claude Code、Codex 和 Gemini CLI";
43
43
  var author = "long.zhu";
44
44
  var license = "MIT";
@@ -1215,6 +1215,7 @@ var persistence = /*#__PURE__*/Object.freeze({
1215
1215
  const HAPPY_ORG_REPEAT_THRESHOLD = 3;
1216
1216
  const HAPPY_ORG_TURN_REPORT_TAG = "HAPPY_TURN_REPORT";
1217
1217
  const HAPPY_ORG_SUMMARY_MAX_LENGTH = 120;
1218
+ const HAPPY_ORG_REPLY_ACK_VERSION = "happy-org-1.7.7-reply-ack-v1";
1218
1219
  const HappyOrgInterventionTypeSchema = z.z.enum([
1219
1220
  "none",
1220
1221
  "review_needed",
@@ -1231,6 +1232,24 @@ const HappyOrgAccessChannelStateSchema = z.z.enum([
1231
1232
  "reattach_required",
1232
1233
  "runtime_replaced"
1233
1234
  ]);
1235
+ const HappyOrgRouteTypeSchema = z.z.enum([
1236
+ "direct_reply",
1237
+ "version_planning_reply",
1238
+ "analysis_task",
1239
+ "implementation_task",
1240
+ "ack_plus_reply"
1241
+ ]);
1242
+ const HappyOrgAckTypeSchema = z.z.enum([
1243
+ "none",
1244
+ "read_ack",
1245
+ "dispatch_ack",
1246
+ "route_ack",
1247
+ "progress_ack"
1248
+ ]);
1249
+ const HappyOrgReplyModeSchema = z.z.enum([
1250
+ "reply-first",
1251
+ "analysis-first"
1252
+ ]);
1234
1253
  const HappyOrgTaskContextSchema = z.z.object({
1235
1254
  taskId: z.z.string().min(1),
1236
1255
  organizationId: z.z.string().min(1),
@@ -1249,10 +1268,20 @@ const HappyOrgTaskControlSchema = z.z.object({
1249
1268
  });
1250
1269
  const HappyOrgReplyContextSchema = z.z.object({
1251
1270
  dispatchId: z.z.string().min(1),
1271
+ taskId: z.z.string().min(1).optional().nullable(),
1272
+ organizationId: z.z.string().min(1).optional().nullable(),
1252
1273
  scope: z.z.string().min(1),
1253
1274
  replyTo: z.z.string().min(1),
1275
+ memberAgentId: z.z.string().min(1).optional().nullable(),
1276
+ sessionId: z.z.string().min(1).optional().nullable(),
1254
1277
  positionId: z.z.string().min(1).optional().nullable(),
1255
- responsibilityId: z.z.string().min(1).optional().nullable()
1278
+ responsibilityId: z.z.string().min(1).optional().nullable(),
1279
+ routeType: HappyOrgRouteTypeSchema.optional().nullable(),
1280
+ ackType: HappyOrgAckTypeSchema.optional().nullable(),
1281
+ replyMode: HappyOrgReplyModeSchema.optional().nullable(),
1282
+ planIntent: z.z.string().min(1).optional().nullable(),
1283
+ routerReason: z.z.string().min(1).optional().nullable(),
1284
+ goldenRouteId: z.z.string().min(1).optional().nullable()
1256
1285
  });
1257
1286
  const HappyOrgDispatchBusinessAckStatusSchema = z.z.enum([
1258
1287
  "accepted",
@@ -1261,11 +1290,24 @@ const HappyOrgDispatchBusinessAckStatusSchema = z.z.enum([
1261
1290
  ]);
1262
1291
  const HappyOrgDispatchAckLedgerEntrySchema = z.z.object({
1263
1292
  dispatchId: z.z.string().min(1),
1293
+ ackVersion: z.z.string().min(1).optional().nullable(),
1264
1294
  scope: z.z.string().min(1),
1265
1295
  taskAck: z.z.string().min(1),
1266
1296
  readAck: z.z.literal("yes"),
1267
1297
  status: HappyOrgDispatchBusinessAckStatusSchema,
1268
1298
  note: z.z.string().nullable(),
1299
+ taskId: z.z.string().min(1).optional().nullable(),
1300
+ organizationId: z.z.string().min(1).optional().nullable(),
1301
+ memberAgentId: z.z.string().min(1).optional().nullable(),
1302
+ sessionId: z.z.string().min(1).optional().nullable(),
1303
+ positionId: z.z.string().min(1).optional().nullable(),
1304
+ responsibilityId: z.z.string().min(1).optional().nullable(),
1305
+ routeType: HappyOrgRouteTypeSchema.optional().nullable(),
1306
+ ackType: HappyOrgAckTypeSchema.optional().nullable(),
1307
+ replyMode: HappyOrgReplyModeSchema.optional().nullable(),
1308
+ planIntent: z.z.string().min(1).optional().nullable(),
1309
+ routerReason: z.z.string().min(1).optional().nullable(),
1310
+ goldenRouteId: z.z.string().min(1).optional().nullable(),
1269
1311
  acknowledgedAt: z.z.number().int().nonnegative()
1270
1312
  });
1271
1313
  const HappyOrgSpecialistHomeIdentitySchema = z.z.object({
@@ -2122,6 +2164,37 @@ async function listPositionEnvelopes(rootPath) {
2122
2164
  async function readResponsibilities(rootPath) {
2123
2165
  return await readEnvelope(path.join(rootPath, "RESPONSIBILITIES.json"), ResponsibilityEnvelopeSchema);
2124
2166
  }
2167
+ async function readHappyOrgDispatchTruthSnapshot(rootPath) {
2168
+ const [positions, responsibilities] = await Promise.all([
2169
+ listPositionEnvelopes(rootPath),
2170
+ readResponsibilities(rootPath)
2171
+ ]);
2172
+ const normalizedPositions = positions.map((position) => ({
2173
+ positionId: position.value.positionId,
2174
+ slug: position.value.slug,
2175
+ responsibilityIds: [...position.value.responsibilityIds],
2176
+ agentId: position.value.agentId ?? null,
2177
+ occupancyStatus: normalizeOccupancyStatus(position.value.occupancyStatus)
2178
+ }));
2179
+ const normalizedResponsibilities = responsibilities?.value?.map((responsibility) => ({
2180
+ responsibilityId: responsibility.responsibilityId,
2181
+ positionId: responsibility.positionId,
2182
+ memberAgentId: responsibility.memberAgentId ?? null,
2183
+ status: responsibility.status
2184
+ })) ?? normalizedPositions.flatMap((position) => {
2185
+ const responsibilityId = position.responsibilityIds[0] ?? buildResponsibilityId(position.slug);
2186
+ return [{
2187
+ responsibilityId,
2188
+ positionId: position.positionId,
2189
+ memberAgentId: position.agentId,
2190
+ status: position.agentId ? position.occupancyStatus === "active" ? "in_progress" : "assigned" : "vacancy"
2191
+ }];
2192
+ });
2193
+ return {
2194
+ positions: normalizedPositions,
2195
+ responsibilities: normalizedResponsibilities
2196
+ };
2197
+ }
2125
2198
  function mergeTaskEnvelope(taskBundle) {
2126
2199
  const { task, workflow, result } = taskBundle;
2127
2200
  return {
@@ -3904,9 +3977,13 @@ function parseHappyOrgFallbackEnvelope(rawEnvelope) {
3904
3977
  replyTo,
3905
3978
  organizationId: typeof parsed.organization_id === "string" ? parsed.organization_id.trim() : null,
3906
3979
  memberAgentId: typeof parsed.member_agent_id === "string" ? parsed.member_agent_id.trim() : null,
3980
+ sessionId: typeof parsed.session_id === "string" ? parsed.session_id.trim() : null,
3907
3981
  supervisorAgentId: typeof parsed.supervisor_agent_id === "string" ? parsed.supervisor_agent_id.trim() : null,
3908
3982
  positionId: typeof parsed.position_id === "string" ? parsed.position_id.trim() : null,
3909
- responsibilityId: typeof parsed.responsibility_id === "string" ? parsed.responsibility_id.trim() : null
3983
+ responsibilityId: typeof parsed.responsibility_id === "string" ? parsed.responsibility_id.trim() : null,
3984
+ routeType: parsed.route_type === "direct_reply" || parsed.route_type === "version_planning_reply" || parsed.route_type === "analysis_task" || parsed.route_type === "implementation_task" || parsed.route_type === "ack_plus_reply" ? parsed.route_type : null,
3985
+ ackType: parsed.ack_type === "none" || parsed.ack_type === "read_ack" || parsed.ack_type === "dispatch_ack" || parsed.ack_type === "route_ack" || parsed.ack_type === "progress_ack" ? parsed.ack_type : null,
3986
+ replyMode: parsed.reply_mode === "reply-first" || parsed.reply_mode === "analysis-first" ? parsed.reply_mode : null
3910
3987
  };
3911
3988
  } catch {
3912
3989
  return null;
@@ -3930,8 +4007,15 @@ function buildHappyOrgFallbackUserMessage(rawEnvelope) {
3930
4007
  } : {},
3931
4008
  replyContext: {
3932
4009
  dispatchId: envelope.dispatchId,
4010
+ taskId: envelope.taskId,
4011
+ organizationId: envelope.organizationId,
3933
4012
  scope: envelope.scope,
3934
4013
  replyTo: envelope.replyTo,
4014
+ memberAgentId: envelope.memberAgentId,
4015
+ sessionId: envelope.sessionId,
4016
+ routeType: envelope.routeType ?? "ack_plus_reply",
4017
+ ackType: envelope.ackType ?? "dispatch_ack",
4018
+ replyMode: envelope.replyMode ?? "reply-first",
3935
4019
  ...envelope.positionId ? { positionId: envelope.positionId } : {},
3936
4020
  ...envelope.responsibilityId ? { responsibilityId: envelope.responsibilityId } : {}
3937
4021
  }
@@ -6152,6 +6236,15 @@ class ApiClient {
6152
6236
  });
6153
6237
  return response.data.frontDoor;
6154
6238
  }
6239
+ async getOrganizationView(opts = {}) {
6240
+ const response = await this.request({
6241
+ method: "GET",
6242
+ url: `${configuration.serverUrl}/control/v1/views/organization`,
6243
+ headers: opts.organizationId ? { "x-happy-organization-id": opts.organizationId } : void 0,
6244
+ timeout: 5e3
6245
+ });
6246
+ return response.data.organization;
6247
+ }
6155
6248
  async listOrganizationAgents(opts = {}) {
6156
6249
  const response = await this.request({
6157
6250
  method: "GET",
@@ -6174,7 +6267,14 @@ class ApiClient {
6174
6267
  cross_scope_policy: "ask-first",
6175
6268
  position_id: opts.positionId ?? null,
6176
6269
  responsibility_id: opts.responsibilityId ?? null,
6177
- note: opts.note ?? null
6270
+ note: opts.note ?? null,
6271
+ requested_member_agent_id: opts.requestedMemberAgentId ?? null,
6272
+ position_truth_agent_id: opts.positionTruthAgentId ?? null,
6273
+ responsibility_truth_member_agent_id: opts.responsibilityTruthMemberAgentId ?? null,
6274
+ live_binding_session_id: opts.liveBindingSessionId ?? null,
6275
+ runtime_session_id: opts.runtimeSessionId ?? null,
6276
+ validation_result: opts.validationResult ?? "shadow_pass",
6277
+ rejection_reason: opts.rejectionReason ?? null
6178
6278
  },
6179
6279
  headers: withLegacyControlAck({ "x-happy-organization-id": opts.organizationId }),
6180
6280
  timeout: 1e4
@@ -6599,6 +6699,7 @@ exports.ApiSessionClient = ApiSessionClient;
6599
6699
  exports.AsyncLock = AsyncLock;
6600
6700
  exports.HAPPY_CLOUD_DAEMON_PORT = HAPPY_CLOUD_DAEMON_PORT;
6601
6701
  exports.HAPPY_ORG_REPEAT_THRESHOLD = HAPPY_ORG_REPEAT_THRESHOLD;
6702
+ exports.HAPPY_ORG_REPLY_ACK_VERSION = HAPPY_ORG_REPLY_ACK_VERSION;
6602
6703
  exports.HAPPY_ORG_SUMMARY_MAX_LENGTH = HAPPY_ORG_SUMMARY_MAX_LENGTH;
6603
6704
  exports.HAPPY_ORG_TURN_REPORT_TAG = HAPPY_ORG_TURN_REPORT_TAG;
6604
6705
  exports.HappyOrgTurnReportSchema = HappyOrgTurnReportSchema;
@@ -6630,6 +6731,7 @@ exports.preserveSessionRuntimeMetadata = preserveSessionRuntimeMetadata;
6630
6731
  exports.processHappyOrgRepoRequests = processHappyOrgRepoRequests;
6631
6732
  exports.readCredentials = readCredentials;
6632
6733
  exports.readDaemonState = readDaemonState;
6734
+ exports.readHappyOrgDispatchTruthSnapshot = readHappyOrgDispatchTruthSnapshot;
6633
6735
  exports.readSettings = readSettings;
6634
6736
  exports.recordHappyOrgTurnReport = recordHappyOrgTurnReport;
6635
6737
  exports.releaseDaemonLock = releaseDaemonLock;
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-CT1dgGsX.cjs');
3
+ var index = require('./index-D4TuE2VS.cjs');
4
4
  require('chalk');
5
- require('./api-DeDVledu.cjs');
5
+ require('./api-C94O6IB2.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-CFH8qcTw.mjs';
1
+ import { c as createDefaultRuntimeShell } from './index-sqm5plVs.mjs';
2
2
  import 'chalk';
3
- import './api-DIFbsA6t.mjs';
3
+ import './api-B3Zl8oHG.mjs';
4
4
  import 'axios';
5
5
  import 'fs';
6
6
  import 'node:fs';