happy-imou-cloud 2.1.16 → 2.1.17

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-TghqGOqo.mjs → BaseReasoningProcessor-BAv0_85s.mjs} +2 -2
  2. package/dist/{BaseReasoningProcessor-D6AIOycG.cjs → BaseReasoningProcessor-D_cBN7IM.cjs} +2 -2
  3. package/dist/{ProviderSelectionHandler-DxDz5NAw.cjs → ProviderSelectionHandler-Cyinzbk-.cjs} +2 -2
  4. package/dist/{ProviderSelectionHandler-Be6q2nTi.mjs → ProviderSelectionHandler-D3qMOxaQ.mjs} +2 -2
  5. package/dist/{api-BePMt8XI.mjs → api-CrGI5ANv.mjs} +2 -2
  6. package/dist/{api-BUAppqAe.cjs → api-ykburCIA.cjs} +2 -2
  7. package/dist/{command-CAZ2gxud.cjs → command-3_48b_TM.cjs} +3 -3
  8. package/dist/{command-DlRscTrt.mjs → command-BGK4qQ-4.mjs} +3 -3
  9. package/dist/{index-OfWx3GbO.mjs → index-CVp6QcCz.mjs} +119 -23
  10. package/dist/{index-LKiNbRQ1.cjs → index-CX3AYEyM.cjs} +121 -25
  11. package/dist/index.cjs +3 -3
  12. package/dist/index.mjs +3 -3
  13. package/dist/lib.cjs +1 -1
  14. package/dist/lib.mjs +1 -1
  15. package/dist/{persistence-CQ1ub64T.cjs → persistence-DFC6LL-_.cjs} +1 -1
  16. package/dist/{persistence-BOtU4fYZ.mjs → persistence-vDMpMN8U.mjs} +1 -1
  17. package/dist/{registerKillSessionHandler-DcFWS8JV.mjs → registerKillSessionHandler-CefmiOrp.mjs} +3 -3
  18. package/dist/{registerKillSessionHandler-BTabJYFZ.cjs → registerKillSessionHandler-Dztdudkl.cjs} +3 -3
  19. package/dist/{runClaude-COLx_2h1.cjs → runClaude-Ca_A2OHq.cjs} +5 -5
  20. package/dist/{runClaude-BhJT-JJJ.mjs → runClaude-DuzlOk3Z.mjs} +5 -5
  21. package/dist/{runCodex-BNznOpcn.mjs → runCodex-CayUbEDE.mjs} +6 -6
  22. package/dist/{runCodex-CcOicO3f.cjs → runCodex-Cyfj_rOx.cjs} +6 -6
  23. package/dist/{runGemini-iSsDFz8x.cjs → runGemini-CUpbNLsb.cjs} +5 -5
  24. package/dist/{runGemini-C-ADeQ79.mjs → runGemini-EB-Mh7Ua.mjs} +5 -5
  25. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
- import { a as createSessionMetadata, p as publishSessionRegistration } from './index-OfWx3GbO.mjs';
2
- import { s as startOfflineReconnection, c as configuration, i as isAuthenticationRequiredError, l as logger } from './api-BePMt8XI.mjs';
1
+ import { a as createSessionMetadata, p as publishSessionRegistration } from './index-CVp6QcCz.mjs';
2
+ import { s as startOfflineReconnection, c as configuration, i as isAuthenticationRequiredError, l as logger } from './api-CrGI5ANv.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-LKiNbRQ1.cjs');
4
- var api = require('./api-BUAppqAe.cjs');
3
+ var index = require('./index-CX3AYEyM.cjs');
4
+ var api = require('./api-ykburCIA.cjs');
5
5
  var node_events = require('node:events');
6
6
  var node_crypto = require('node:crypto');
7
7
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var api = require('./api-BUAppqAe.cjs');
4
- var registerKillSessionHandler = require('./registerKillSessionHandler-BTabJYFZ.cjs');
3
+ var api = require('./api-ykburCIA.cjs');
4
+ var registerKillSessionHandler = require('./registerKillSessionHandler-Dztdudkl.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-BePMt8XI.mjs';
2
- import { g as getPendingInteractionTimeoutMs, I as INTERACTION_SUPERSEDED_ERROR, a as INTERACTION_TIMED_OUT_ERROR } from './registerKillSessionHandler-DcFWS8JV.mjs';
1
+ import { l as logger } from './api-CrGI5ANv.mjs';
2
+ import { g as getPendingInteractionTimeoutMs, I as INTERACTION_SUPERSEDED_ERROR, a as INTERACTION_TIMED_OUT_ERROR } from './registerKillSessionHandler-CefmiOrp.mjs';
3
3
 
4
4
  async function runModeLoop(opts) {
5
5
  let currentMode = opts.startingMode;
@@ -16,7 +16,7 @@ import { spawn } from 'node:child_process';
16
16
  import { Expo } from 'expo-server-sdk';
17
17
 
18
18
  var name = "happy-imou-cloud";
19
- var version = "2.1.16";
19
+ var version = "2.1.17";
20
20
  var description = "hicloud - Imou 企业定制版。关键是 happy!移动端远程 AI 编程工具,支持 Claude Code、Codex 和 Gemini CLI";
21
21
  var author = "long.zhu";
22
22
  var license = "MIT";
@@ -431,7 +431,7 @@ async function listDaemonLogFiles(limit = 50) {
431
431
  return { file, path: fullPath, modified: stats.mtime };
432
432
  }).sort((a, b) => b.modified.getTime() - a.modified.getTime());
433
433
  try {
434
- const { readDaemonState } = await import('./persistence-BOtU4fYZ.mjs');
434
+ const { readDaemonState } = await import('./persistence-vDMpMN8U.mjs');
435
435
  const state = await readDaemonState();
436
436
  if (!state) {
437
437
  return logs;
@@ -18,7 +18,7 @@ var node_child_process = require('node:child_process');
18
18
  var expoServerSdk = require('expo-server-sdk');
19
19
 
20
20
  var name = "happy-imou-cloud";
21
- var version = "2.1.16";
21
+ var version = "2.1.17";
22
22
  var description = "hicloud - Imou 企业定制版。关键是 happy!移动端远程 AI 编程工具,支持 Claude Code、Codex 和 Gemini CLI";
23
23
  var author = "long.zhu";
24
24
  var license = "MIT";
@@ -433,7 +433,7 @@ async function listDaemonLogFiles(limit = 50) {
433
433
  return { file, path: fullPath, modified: stats.mtime };
434
434
  }).sort((a, b) => b.modified.getTime() - a.modified.getTime());
435
435
  try {
436
- const { readDaemonState } = await Promise.resolve().then(function () { return require('./persistence-CQ1ub64T.cjs'); });
436
+ const { readDaemonState } = await Promise.resolve().then(function () { return require('./persistence-DFC6LL-_.cjs'); });
437
437
  const state = await readDaemonState();
438
438
  if (!state) {
439
439
  return logs;
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-LKiNbRQ1.cjs');
3
+ var index = require('./index-CX3AYEyM.cjs');
4
4
  require('chalk');
5
- require('./api-BUAppqAe.cjs');
5
+ require('./api-ykburCIA.cjs');
6
6
  require('axios');
7
7
  require('fs');
8
8
  require('node:fs');
@@ -18,7 +18,7 @@ require('crypto');
18
18
  require('path');
19
19
  require('node:child_process');
20
20
  require('expo-server-sdk');
21
- require('./persistence-CQ1ub64T.cjs');
21
+ require('./persistence-DFC6LL-_.cjs');
22
22
  require('node:fs/promises');
23
23
  require('os');
24
24
  require('tmp');
@@ -1,6 +1,6 @@
1
- import { c as createDefaultRuntimeShell } from './index-OfWx3GbO.mjs';
1
+ import { c as createDefaultRuntimeShell } from './index-CVp6QcCz.mjs';
2
2
  import 'chalk';
3
- import './api-BePMt8XI.mjs';
3
+ import './api-CrGI5ANv.mjs';
4
4
  import 'axios';
5
5
  import 'fs';
6
6
  import 'node:fs';
@@ -16,7 +16,7 @@ import 'crypto';
16
16
  import 'path';
17
17
  import 'node:child_process';
18
18
  import 'expo-server-sdk';
19
- import './persistence-BOtU4fYZ.mjs';
19
+ import './persistence-vDMpMN8U.mjs';
20
20
  import 'node:fs/promises';
21
21
  import 'os';
22
22
  import 'tmp';
@@ -1,6 +1,6 @@
1
1
  import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import chalk from 'chalk';
2
- import { l as logger, e as encodeBase64, c as configuration, k as buildAuthenticatedHeaders, S as SigningBootstrapRequiredError, m as SIGNING_BOOTSTRAP_REQUIRED_MESSAGE, n as encodeBase64Url, h as delay, o as buildClientHeaders, q as decodeBase64, r as HAPPY_CLOUD_DAEMON_PORT, t as packageJson, A as ApiClient, u as HeadTailPreviewBuffer, v as getLatestDaemonLog } from './api-BePMt8XI.mjs';
3
- import { writeCredentialsLegacy, writeCredentialsDataKey, readCredentials, readSettings, updateSettings, readDaemonState, clearDaemonState, acquireDaemonLock, writeDaemonState, releaseDaemonLock, validateProfileForAgent, getProfileEnvironmentVariables, clearCredentials, clearMachineId } from './persistence-BOtU4fYZ.mjs';
2
+ import { l as logger, e as encodeBase64, c as configuration, k as buildAuthenticatedHeaders, S as SigningBootstrapRequiredError, m as SIGNING_BOOTSTRAP_REQUIRED_MESSAGE, n as encodeBase64Url, h as delay, o as buildClientHeaders, q as decodeBase64, r as HAPPY_CLOUD_DAEMON_PORT, t as packageJson, A as ApiClient, u as HeadTailPreviewBuffer, v as getLatestDaemonLog } from './api-CrGI5ANv.mjs';
3
+ import { writeCredentialsLegacy, writeCredentialsDataKey, readCredentials, readSettings, updateSettings, readDaemonState, clearDaemonState, acquireDaemonLock, writeDaemonState, releaseDaemonLock, validateProfileForAgent, getProfileEnvironmentVariables, clearCredentials, clearMachineId } from './persistence-vDMpMN8U.mjs';
4
4
  import { z } from 'zod';
5
5
  import fs, { writeFile as writeFile$1, rename, unlink as unlink$1 } from 'fs/promises';
6
6
  import os$1, { homedir } from 'os';
@@ -12,7 +12,7 @@ import qrcode from 'qrcode-terminal';
12
12
  import { writeFile, unlink, readdir, readFile, mkdir } from 'node:fs/promises';
13
13
  import { createRequire } from 'node:module';
14
14
  import os, { tmpdir, homedir as homedir$1 } from 'node:os';
15
- import path, { join, resolve as resolve$1, isAbsolute, delimiter, normalize, dirname as dirname$1 } from 'node:path';
15
+ import path, { join, resolve as resolve$1, isAbsolute, delimiter, normalize, dirname as dirname$1, basename } from 'node:path';
16
16
  import open from 'open';
17
17
  import React, { useState } from 'react';
18
18
  import { useInput, Box, Text, render } from 'ink';
@@ -6155,14 +6155,32 @@ function getToolOutputDelta(previous, next) {
6155
6155
  const overlap = findToolOutputOverlap(previous, next);
6156
6156
  return overlap > 0 ? next.slice(overlap) : next;
6157
6157
  }
6158
+ function shouldReplaceToolOutput(previous, next) {
6159
+ if (!previous || previous.length === 0) {
6160
+ return false;
6161
+ }
6162
+ if (next.startsWith(previous)) {
6163
+ return false;
6164
+ }
6165
+ const previousWithoutTrailingNewlines = previous.replace(/[\r\n]+$/g, "");
6166
+ if (previousWithoutTrailingNewlines.length === previous.length) {
6167
+ return false;
6168
+ }
6169
+ return next.startsWith(previousWithoutTrailingNewlines);
6170
+ }
6158
6171
  function appendToolOutput(existing, next) {
6159
- const preview = existing?.preview ?? new HeadTailPreviewBuffer(
6172
+ const shouldReplace = shouldReplaceToolOutput(existing?.lastRawText, next);
6173
+ const preview = shouldReplace || !existing?.preview ? new HeadTailPreviewBuffer(
6160
6174
  DEFAULT_TOOL_CALL_OUTPUT_PREVIEW_HEAD_BYTES,
6161
6175
  DEFAULT_TOOL_CALL_OUTPUT_PREVIEW_TAIL_BYTES
6162
- );
6163
- const textToAppend = getToolOutputDelta(existing?.lastRawText, next);
6164
- if (textToAppend.length > 0) {
6165
- preview.append(textToAppend);
6176
+ ) : existing.preview;
6177
+ if (shouldReplace) {
6178
+ preview.append(next);
6179
+ } else {
6180
+ const textToAppend = getToolOutputDelta(existing?.lastRawText, next);
6181
+ if (textToAppend.length > 0) {
6182
+ preview.append(textToAppend);
6183
+ }
6166
6184
  }
6167
6185
  return {
6168
6186
  preview,
@@ -8656,6 +8674,7 @@ const CODEX_HOME_SEED_FILES = [
8656
8674
  const CODEX_HOME_SEED_DIRS = [
8657
8675
  "rules"
8658
8676
  ];
8677
+ const MAX_CODEX_SKILL_DESCRIPTION_LENGTH = 1024;
8659
8678
  function getCodexPlatformTarget(platform, arch) {
8660
8679
  if (platform === "win32" && arch === "x64") {
8661
8680
  return {
@@ -8827,6 +8846,60 @@ function copyCodexHomeEntry(sourcePath, destPath) {
8827
8846
  verbatimSymlinks: true
8828
8847
  });
8829
8848
  }
8849
+ function extractSkillDescriptionFromFrontmatter(frontmatter) {
8850
+ const lines = frontmatter.split(/\r?\n/);
8851
+ for (let index = 0; index < lines.length; index++) {
8852
+ const line = lines[index];
8853
+ const match = /^description:\s*(.*)$/.exec(line);
8854
+ if (!match) {
8855
+ continue;
8856
+ }
8857
+ const remainder = match[1]?.trim() ?? "";
8858
+ if (!remainder || remainder === "|" || remainder === ">") {
8859
+ const descriptionLines = [];
8860
+ for (let offset = index + 1; offset < lines.length; offset++) {
8861
+ const descriptionLine = lines[offset] ?? "";
8862
+ if (descriptionLine.length > 0 && !/^\s/.test(descriptionLine)) {
8863
+ break;
8864
+ }
8865
+ descriptionLines.push(descriptionLine.replace(/^\s{2}/, ""));
8866
+ }
8867
+ return descriptionLines.join("\n").trim();
8868
+ }
8869
+ return remainder.replace(/^['"]|['"]$/g, "").trim();
8870
+ }
8871
+ return null;
8872
+ }
8873
+ function extractSkillDescription(skillManifestPath) {
8874
+ const manifest = readFileSync(skillManifestPath, "utf8");
8875
+ const frontmatterMatch = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(manifest);
8876
+ const frontmatter = frontmatterMatch?.[1];
8877
+ if (!frontmatter) {
8878
+ return null;
8879
+ }
8880
+ return extractSkillDescriptionFromFrontmatter(frontmatter);
8881
+ }
8882
+ function shouldSeedCodexSkillEntry(sourcePath) {
8883
+ if (basename(sourcePath) === ".system") {
8884
+ return true;
8885
+ }
8886
+ const manifestPath = join(sourcePath, "SKILL.md");
8887
+ if (!existsSync(manifestPath)) {
8888
+ return true;
8889
+ }
8890
+ try {
8891
+ const description = extractSkillDescription(manifestPath);
8892
+ if (description && description.length > MAX_CODEX_SKILL_DESCRIPTION_LENGTH) {
8893
+ logger.debug(
8894
+ `[codex] Skipping CODEX_HOME skill entry ${sourcePath} because its description exceeds ${MAX_CODEX_SKILL_DESCRIPTION_LENGTH} characters`
8895
+ );
8896
+ return false;
8897
+ }
8898
+ } catch (error) {
8899
+ logger.debug(`[codex] Failed to inspect CODEX_HOME skill entry ${sourcePath}`, error);
8900
+ }
8901
+ return true;
8902
+ }
8830
8903
  function seedIsolatedCodexHome(sourceHomeDir, isolatedHomeDir) {
8831
8904
  if (!existsSync(sourceHomeDir)) {
8832
8905
  return;
@@ -8852,9 +8925,13 @@ function seedIsolatedCodexHome(sourceHomeDir, isolatedHomeDir) {
8852
8925
  const destSkillsDir = join(isolatedHomeDir, "skills");
8853
8926
  mkdirSync$1(destSkillsDir, { recursive: true });
8854
8927
  for (const entryName of readdirSync(sourceSkillsDir)) {
8928
+ const sourceEntryPath = join(sourceSkillsDir, entryName);
8929
+ if (!shouldSeedCodexSkillEntry(sourceEntryPath)) {
8930
+ continue;
8931
+ }
8855
8932
  try {
8856
8933
  copyCodexHomeEntry(
8857
- join(sourceSkillsDir, entryName),
8934
+ sourceEntryPath,
8858
8935
  join(destSkillsDir, entryName)
8859
8936
  );
8860
8937
  } catch (error) {
@@ -9676,6 +9753,7 @@ function normalizeClaudeToolResultContent(value) {
9676
9753
  function createTimeoutError(timeoutMs) {
9677
9754
  return new Error(`Claude response did not complete within ${timeoutMs}ms`);
9678
9755
  }
9756
+ const CLAUDE_RESPONSE_PROGRESS_POLL_MS = 1e3;
9679
9757
  function normalizePermissionResult(input, decision) {
9680
9758
  if (decision === "approved" || decision === "approved_for_session") {
9681
9759
  return {
@@ -9707,6 +9785,7 @@ class ClaudeCodeBackend {
9707
9785
  consumeTask = null;
9708
9786
  activeResponse = null;
9709
9787
  responseCompletionOutcome = null;
9788
+ responseLastProgressAt = null;
9710
9789
  disposed = false;
9711
9790
  lastStatus = null;
9712
9791
  onMessage(handler) {
@@ -9731,6 +9810,7 @@ class ClaudeCodeBackend {
9731
9810
  await this.ensureQueryStarted();
9732
9811
  this.responseCompletionOutcome = null;
9733
9812
  this.activeResponse = new Future();
9813
+ this.responseLastProgressAt = Date.now();
9734
9814
  void this.activeResponse.promise.catch(() => {
9735
9815
  });
9736
9816
  this.emitStatus("running");
@@ -9763,18 +9843,25 @@ class ClaudeCodeBackend {
9763
9843
  if (!this.activeResponse) {
9764
9844
  return;
9765
9845
  }
9766
- let timeoutHandle;
9767
- try {
9846
+ while (this.activeResponse) {
9847
+ const elapsedSinceProgress = Date.now() - (this.responseLastProgressAt ?? Date.now());
9848
+ const remainingMs = timeoutMs - elapsedSinceProgress;
9849
+ if (remainingMs <= 0) {
9850
+ const timeoutError = createTimeoutError(timeoutMs);
9851
+ this.rejectActiveResponse(timeoutError);
9852
+ throw timeoutError;
9853
+ }
9768
9854
  await Promise.race([
9769
9855
  this.activeResponse.promise,
9770
- new Promise((_, reject) => {
9771
- timeoutHandle = setTimeout(() => reject(createTimeoutError(timeoutMs)), timeoutMs);
9856
+ new Promise((resolve2) => {
9857
+ setTimeout(resolve2, Math.min(CLAUDE_RESPONSE_PROGRESS_POLL_MS, remainingMs));
9772
9858
  })
9773
9859
  ]);
9774
- } finally {
9775
- if (timeoutHandle) {
9776
- clearTimeout(timeoutHandle);
9777
- }
9860
+ }
9861
+ const completionOutcome = this.responseCompletionOutcome;
9862
+ const rejectedError = completionOutcome && typeof completionOutcome === "object" && "error" in completionOutcome ? completionOutcome.error : null;
9863
+ if (rejectedError) {
9864
+ throw rejectedError;
9778
9865
  }
9779
9866
  }
9780
9867
  async dispose() {
@@ -9898,6 +9985,7 @@ class ClaudeCodeBackend {
9898
9985
  }
9899
9986
  }
9900
9987
  handleMessage(message) {
9988
+ this.markResponseProgress();
9901
9989
  switch (message.type) {
9902
9990
  case "system":
9903
9991
  this.handleSystemMessage(message);
@@ -10011,6 +10099,7 @@ class ClaudeCodeBackend {
10011
10099
  }
10012
10100
  resolveActiveResponse() {
10013
10101
  this.responseCompletionOutcome = { kind: "resolved" };
10102
+ this.responseLastProgressAt = null;
10014
10103
  if (!this.activeResponse) {
10015
10104
  return;
10016
10105
  }
@@ -10020,6 +10109,7 @@ class ClaudeCodeBackend {
10020
10109
  }
10021
10110
  rejectActiveResponse(error) {
10022
10111
  this.responseCompletionOutcome = { kind: "rejected", error };
10112
+ this.responseLastProgressAt = null;
10023
10113
  if (!this.activeResponse) {
10024
10114
  return;
10025
10115
  }
@@ -10027,6 +10117,12 @@ class ClaudeCodeBackend {
10027
10117
  this.activeResponse = null;
10028
10118
  active.reject(error);
10029
10119
  }
10120
+ markResponseProgress() {
10121
+ if (!this.activeResponse) {
10122
+ return;
10123
+ }
10124
+ this.responseLastProgressAt = Date.now();
10125
+ }
10030
10126
  }
10031
10127
 
10032
10128
  function mapToClaudeMode(mode) {
@@ -10332,11 +10428,11 @@ var launch = /*#__PURE__*/Object.freeze({
10332
10428
 
10333
10429
  const unifiedProviderExecutors = {
10334
10430
  claude: async (opts) => {
10335
- const { runClaude } = await import('./runClaude-BhJT-JJJ.mjs');
10431
+ const { runClaude } = await import('./runClaude-DuzlOk3Z.mjs');
10336
10432
  await runClaude(opts.credentials, opts.claudeOptions ?? {});
10337
10433
  },
10338
10434
  codex: async (opts) => {
10339
- const { runCodex } = await import('./runCodex-BNznOpcn.mjs');
10435
+ const { runCodex } = await import('./runCodex-CayUbEDE.mjs');
10340
10436
  await runCodex({
10341
10437
  credentials: opts.credentials,
10342
10438
  startedBy: opts.startedBy,
@@ -10345,7 +10441,7 @@ const unifiedProviderExecutors = {
10345
10441
  });
10346
10442
  },
10347
10443
  gemini: async (opts) => {
10348
- const { runGemini } = await import('./runGemini-C-ADeQ79.mjs');
10444
+ const { runGemini } = await import('./runGemini-EB-Mh7Ua.mjs');
10349
10445
  await runGemini({
10350
10446
  credentials: opts.credentials,
10351
10447
  startedBy: opts.startedBy
@@ -10428,7 +10524,7 @@ function shouldRunMainClaudeFlow(opts) {
10428
10524
  return;
10429
10525
  } else if (subcommand === "runtime") {
10430
10526
  if (args[1] === "providers") {
10431
- const { renderRuntimeProviders } = await import('./command-DlRscTrt.mjs');
10527
+ const { renderRuntimeProviders } = await import('./command-BGK4qQ-4.mjs');
10432
10528
  console.log(renderRuntimeProviders());
10433
10529
  return;
10434
10530
  }
@@ -10617,8 +10713,8 @@ function shouldRunMainClaudeFlow(opts) {
10617
10713
  const projectId = args[3];
10618
10714
  try {
10619
10715
  const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return config; });
10620
- const { readCredentials: readCredentials2 } = await import('./persistence-BOtU4fYZ.mjs');
10621
- const { ApiClient: ApiClient2 } = await import('./api-BePMt8XI.mjs').then(function (n) { return n.w; });
10716
+ const { readCredentials: readCredentials2 } = await import('./persistence-vDMpMN8U.mjs');
10717
+ const { ApiClient: ApiClient2 } = await import('./api-CrGI5ANv.mjs').then(function (n) { return n.w; });
10622
10718
  let userEmail = void 0;
10623
10719
  try {
10624
10720
  const credentials = await readCredentials2();
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var api = require('./api-BUAppqAe.cjs');
5
- var persistence = require('./persistence-CQ1ub64T.cjs');
4
+ var api = require('./api-ykburCIA.cjs');
5
+ var persistence = require('./persistence-DFC6LL-_.cjs');
6
6
  var z = require('zod');
7
7
  var fs$2 = require('fs/promises');
8
8
  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-LKiNbRQ1.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-CX3AYEyM.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();
@@ -695,7 +695,7 @@ function setupCleanupHandlers() {
695
695
  });
696
696
  }
697
697
 
698
- 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-LKiNbRQ1.cjs', document.baseURI).href))));
698
+ 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-CX3AYEyM.cjs', document.baseURI).href))));
699
699
  function projectPath() {
700
700
  const path = path$1.resolve(__dirname$2, "..");
701
701
  return path;
@@ -6177,14 +6177,32 @@ function getToolOutputDelta(previous, next) {
6177
6177
  const overlap = findToolOutputOverlap(previous, next);
6178
6178
  return overlap > 0 ? next.slice(overlap) : next;
6179
6179
  }
6180
+ function shouldReplaceToolOutput(previous, next) {
6181
+ if (!previous || previous.length === 0) {
6182
+ return false;
6183
+ }
6184
+ if (next.startsWith(previous)) {
6185
+ return false;
6186
+ }
6187
+ const previousWithoutTrailingNewlines = previous.replace(/[\r\n]+$/g, "");
6188
+ if (previousWithoutTrailingNewlines.length === previous.length) {
6189
+ return false;
6190
+ }
6191
+ return next.startsWith(previousWithoutTrailingNewlines);
6192
+ }
6180
6193
  function appendToolOutput(existing, next) {
6181
- const preview = existing?.preview ?? new api.HeadTailPreviewBuffer(
6194
+ const shouldReplace = shouldReplaceToolOutput(existing?.lastRawText, next);
6195
+ const preview = shouldReplace || !existing?.preview ? new api.HeadTailPreviewBuffer(
6182
6196
  DEFAULT_TOOL_CALL_OUTPUT_PREVIEW_HEAD_BYTES,
6183
6197
  DEFAULT_TOOL_CALL_OUTPUT_PREVIEW_TAIL_BYTES
6184
- );
6185
- const textToAppend = getToolOutputDelta(existing?.lastRawText, next);
6186
- if (textToAppend.length > 0) {
6187
- preview.append(textToAppend);
6198
+ ) : existing.preview;
6199
+ if (shouldReplace) {
6200
+ preview.append(next);
6201
+ } else {
6202
+ const textToAppend = getToolOutputDelta(existing?.lastRawText, next);
6203
+ if (textToAppend.length > 0) {
6204
+ preview.append(textToAppend);
6205
+ }
6188
6206
  }
6189
6207
  return {
6190
6208
  preview,
@@ -8678,6 +8696,7 @@ const CODEX_HOME_SEED_FILES = [
8678
8696
  const CODEX_HOME_SEED_DIRS = [
8679
8697
  "rules"
8680
8698
  ];
8699
+ const MAX_CODEX_SKILL_DESCRIPTION_LENGTH = 1024;
8681
8700
  function getCodexPlatformTarget(platform, arch) {
8682
8701
  if (platform === "win32" && arch === "x64") {
8683
8702
  return {
@@ -8849,6 +8868,60 @@ function copyCodexHomeEntry(sourcePath, destPath) {
8849
8868
  verbatimSymlinks: true
8850
8869
  });
8851
8870
  }
8871
+ function extractSkillDescriptionFromFrontmatter(frontmatter) {
8872
+ const lines = frontmatter.split(/\r?\n/);
8873
+ for (let index = 0; index < lines.length; index++) {
8874
+ const line = lines[index];
8875
+ const match = /^description:\s*(.*)$/.exec(line);
8876
+ if (!match) {
8877
+ continue;
8878
+ }
8879
+ const remainder = match[1]?.trim() ?? "";
8880
+ if (!remainder || remainder === "|" || remainder === ">") {
8881
+ const descriptionLines = [];
8882
+ for (let offset = index + 1; offset < lines.length; offset++) {
8883
+ const descriptionLine = lines[offset] ?? "";
8884
+ if (descriptionLine.length > 0 && !/^\s/.test(descriptionLine)) {
8885
+ break;
8886
+ }
8887
+ descriptionLines.push(descriptionLine.replace(/^\s{2}/, ""));
8888
+ }
8889
+ return descriptionLines.join("\n").trim();
8890
+ }
8891
+ return remainder.replace(/^['"]|['"]$/g, "").trim();
8892
+ }
8893
+ return null;
8894
+ }
8895
+ function extractSkillDescription(skillManifestPath) {
8896
+ const manifest = fs.readFileSync(skillManifestPath, "utf8");
8897
+ const frontmatterMatch = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(manifest);
8898
+ const frontmatter = frontmatterMatch?.[1];
8899
+ if (!frontmatter) {
8900
+ return null;
8901
+ }
8902
+ return extractSkillDescriptionFromFrontmatter(frontmatter);
8903
+ }
8904
+ function shouldSeedCodexSkillEntry(sourcePath) {
8905
+ if (path.basename(sourcePath) === ".system") {
8906
+ return true;
8907
+ }
8908
+ const manifestPath = path.join(sourcePath, "SKILL.md");
8909
+ if (!fs.existsSync(manifestPath)) {
8910
+ return true;
8911
+ }
8912
+ try {
8913
+ const description = extractSkillDescription(manifestPath);
8914
+ if (description && description.length > MAX_CODEX_SKILL_DESCRIPTION_LENGTH) {
8915
+ api.logger.debug(
8916
+ `[codex] Skipping CODEX_HOME skill entry ${sourcePath} because its description exceeds ${MAX_CODEX_SKILL_DESCRIPTION_LENGTH} characters`
8917
+ );
8918
+ return false;
8919
+ }
8920
+ } catch (error) {
8921
+ api.logger.debug(`[codex] Failed to inspect CODEX_HOME skill entry ${sourcePath}`, error);
8922
+ }
8923
+ return true;
8924
+ }
8852
8925
  function seedIsolatedCodexHome(sourceHomeDir, isolatedHomeDir) {
8853
8926
  if (!fs.existsSync(sourceHomeDir)) {
8854
8927
  return;
@@ -8874,9 +8947,13 @@ function seedIsolatedCodexHome(sourceHomeDir, isolatedHomeDir) {
8874
8947
  const destSkillsDir = path.join(isolatedHomeDir, "skills");
8875
8948
  fs.mkdirSync(destSkillsDir, { recursive: true });
8876
8949
  for (const entryName of fs.readdirSync(sourceSkillsDir)) {
8950
+ const sourceEntryPath = path.join(sourceSkillsDir, entryName);
8951
+ if (!shouldSeedCodexSkillEntry(sourceEntryPath)) {
8952
+ continue;
8953
+ }
8877
8954
  try {
8878
8955
  copyCodexHomeEntry(
8879
- path.join(sourceSkillsDir, entryName),
8956
+ sourceEntryPath,
8880
8957
  path.join(destSkillsDir, entryName)
8881
8958
  );
8882
8959
  } catch (error) {
@@ -9055,7 +9132,7 @@ class AbortError extends Error {
9055
9132
  }
9056
9133
  }
9057
9134
 
9058
- 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-LKiNbRQ1.cjs', document.baseURI).href)));
9135
+ 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-CX3AYEyM.cjs', document.baseURI).href)));
9059
9136
  const __dirname$1 = path.join(__filename$1, "..");
9060
9137
  function getGlobalClaudeVersion() {
9061
9138
  try {
@@ -9698,6 +9775,7 @@ function normalizeClaudeToolResultContent(value) {
9698
9775
  function createTimeoutError(timeoutMs) {
9699
9776
  return new Error(`Claude response did not complete within ${timeoutMs}ms`);
9700
9777
  }
9778
+ const CLAUDE_RESPONSE_PROGRESS_POLL_MS = 1e3;
9701
9779
  function normalizePermissionResult(input, decision) {
9702
9780
  if (decision === "approved" || decision === "approved_for_session") {
9703
9781
  return {
@@ -9729,6 +9807,7 @@ class ClaudeCodeBackend {
9729
9807
  consumeTask = null;
9730
9808
  activeResponse = null;
9731
9809
  responseCompletionOutcome = null;
9810
+ responseLastProgressAt = null;
9732
9811
  disposed = false;
9733
9812
  lastStatus = null;
9734
9813
  onMessage(handler) {
@@ -9753,6 +9832,7 @@ class ClaudeCodeBackend {
9753
9832
  await this.ensureQueryStarted();
9754
9833
  this.responseCompletionOutcome = null;
9755
9834
  this.activeResponse = new Future();
9835
+ this.responseLastProgressAt = Date.now();
9756
9836
  void this.activeResponse.promise.catch(() => {
9757
9837
  });
9758
9838
  this.emitStatus("running");
@@ -9785,18 +9865,25 @@ class ClaudeCodeBackend {
9785
9865
  if (!this.activeResponse) {
9786
9866
  return;
9787
9867
  }
9788
- let timeoutHandle;
9789
- try {
9868
+ while (this.activeResponse) {
9869
+ const elapsedSinceProgress = Date.now() - (this.responseLastProgressAt ?? Date.now());
9870
+ const remainingMs = timeoutMs - elapsedSinceProgress;
9871
+ if (remainingMs <= 0) {
9872
+ const timeoutError = createTimeoutError(timeoutMs);
9873
+ this.rejectActiveResponse(timeoutError);
9874
+ throw timeoutError;
9875
+ }
9790
9876
  await Promise.race([
9791
9877
  this.activeResponse.promise,
9792
- new Promise((_, reject) => {
9793
- timeoutHandle = setTimeout(() => reject(createTimeoutError(timeoutMs)), timeoutMs);
9878
+ new Promise((resolve2) => {
9879
+ setTimeout(resolve2, Math.min(CLAUDE_RESPONSE_PROGRESS_POLL_MS, remainingMs));
9794
9880
  })
9795
9881
  ]);
9796
- } finally {
9797
- if (timeoutHandle) {
9798
- clearTimeout(timeoutHandle);
9799
- }
9882
+ }
9883
+ const completionOutcome = this.responseCompletionOutcome;
9884
+ const rejectedError = completionOutcome && typeof completionOutcome === "object" && "error" in completionOutcome ? completionOutcome.error : null;
9885
+ if (rejectedError) {
9886
+ throw rejectedError;
9800
9887
  }
9801
9888
  }
9802
9889
  async dispose() {
@@ -9920,6 +10007,7 @@ class ClaudeCodeBackend {
9920
10007
  }
9921
10008
  }
9922
10009
  handleMessage(message) {
10010
+ this.markResponseProgress();
9923
10011
  switch (message.type) {
9924
10012
  case "system":
9925
10013
  this.handleSystemMessage(message);
@@ -10033,6 +10121,7 @@ class ClaudeCodeBackend {
10033
10121
  }
10034
10122
  resolveActiveResponse() {
10035
10123
  this.responseCompletionOutcome = { kind: "resolved" };
10124
+ this.responseLastProgressAt = null;
10036
10125
  if (!this.activeResponse) {
10037
10126
  return;
10038
10127
  }
@@ -10042,6 +10131,7 @@ class ClaudeCodeBackend {
10042
10131
  }
10043
10132
  rejectActiveResponse(error) {
10044
10133
  this.responseCompletionOutcome = { kind: "rejected", error };
10134
+ this.responseLastProgressAt = null;
10045
10135
  if (!this.activeResponse) {
10046
10136
  return;
10047
10137
  }
@@ -10049,6 +10139,12 @@ class ClaudeCodeBackend {
10049
10139
  this.activeResponse = null;
10050
10140
  active.reject(error);
10051
10141
  }
10142
+ markResponseProgress() {
10143
+ if (!this.activeResponse) {
10144
+ return;
10145
+ }
10146
+ this.responseLastProgressAt = Date.now();
10147
+ }
10052
10148
  }
10053
10149
 
10054
10150
  function mapToClaudeMode(mode) {
@@ -10354,11 +10450,11 @@ var launch = /*#__PURE__*/Object.freeze({
10354
10450
 
10355
10451
  const unifiedProviderExecutors = {
10356
10452
  claude: async (opts) => {
10357
- const { runClaude } = await Promise.resolve().then(function () { return require('./runClaude-COLx_2h1.cjs'); });
10453
+ const { runClaude } = await Promise.resolve().then(function () { return require('./runClaude-Ca_A2OHq.cjs'); });
10358
10454
  await runClaude(opts.credentials, opts.claudeOptions ?? {});
10359
10455
  },
10360
10456
  codex: async (opts) => {
10361
- const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-CcOicO3f.cjs'); });
10457
+ const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-Cyfj_rOx.cjs'); });
10362
10458
  await runCodex({
10363
10459
  credentials: opts.credentials,
10364
10460
  startedBy: opts.startedBy,
@@ -10367,7 +10463,7 @@ const unifiedProviderExecutors = {
10367
10463
  });
10368
10464
  },
10369
10465
  gemini: async (opts) => {
10370
- const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-iSsDFz8x.cjs'); });
10466
+ const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-CUpbNLsb.cjs'); });
10371
10467
  await runGemini({
10372
10468
  credentials: opts.credentials,
10373
10469
  startedBy: opts.startedBy
@@ -10450,7 +10546,7 @@ function shouldRunMainClaudeFlow(opts) {
10450
10546
  return;
10451
10547
  } else if (subcommand === "runtime") {
10452
10548
  if (args[1] === "providers") {
10453
- const { renderRuntimeProviders } = await Promise.resolve().then(function () { return require('./command-CAZ2gxud.cjs'); });
10549
+ const { renderRuntimeProviders } = await Promise.resolve().then(function () { return require('./command-3_48b_TM.cjs'); });
10454
10550
  console.log(renderRuntimeProviders());
10455
10551
  return;
10456
10552
  }
@@ -10639,8 +10735,8 @@ function shouldRunMainClaudeFlow(opts) {
10639
10735
  const projectId = args[3];
10640
10736
  try {
10641
10737
  const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return config; });
10642
- const { readCredentials: readCredentials2 } = await Promise.resolve().then(function () { return require('./persistence-CQ1ub64T.cjs'); });
10643
- const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./api-BUAppqAe.cjs'); }).then(function (n) { return n.api; });
10738
+ const { readCredentials: readCredentials2 } = await Promise.resolve().then(function () { return require('./persistence-DFC6LL-_.cjs'); });
10739
+ const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./api-ykburCIA.cjs'); }).then(function (n) { return n.api; });
10644
10740
  let userEmail = void 0;
10645
10741
  try {
10646
10742
  const credentials = await readCredentials2();
package/dist/index.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  require('chalk');
4
- require('./api-BUAppqAe.cjs');
5
- require('./persistence-CQ1ub64T.cjs');
4
+ require('./api-ykburCIA.cjs');
5
+ require('./persistence-DFC6LL-_.cjs');
6
6
  require('zod');
7
- require('./index-LKiNbRQ1.cjs');
7
+ require('./index-CX3AYEyM.cjs');
8
8
  require('node:child_process');
9
9
  require('node:fs');
10
10
  require('cross-spawn');
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import 'chalk';
2
- import './api-BePMt8XI.mjs';
3
- import './persistence-BOtU4fYZ.mjs';
2
+ import './api-CrGI5ANv.mjs';
3
+ import './persistence-vDMpMN8U.mjs';
4
4
  import 'zod';
5
- import './index-OfWx3GbO.mjs';
5
+ import './index-CVp6QcCz.mjs';
6
6
  import 'node:child_process';
7
7
  import 'node:fs';
8
8
  import 'cross-spawn';
package/dist/lib.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var api = require('./api-BUAppqAe.cjs');
3
+ var api = require('./api-ykburCIA.cjs');
4
4
  var types = require('./types-DVk3crez.cjs');
5
5
  require('axios');
6
6
  require('chalk');
package/dist/lib.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { A as ApiClient, a as ApiSessionClient, c as configuration, l as logger } from './api-BePMt8XI.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, c as configuration, l as logger } from './api-CrGI5ANv.mjs';
2
2
  export { R as RawJSONLinesSchema } from './types-CiliQpqS.mjs';
3
3
  import 'axios';
4
4
  import 'chalk';
@@ -3,7 +3,7 @@
3
3
  var promises = require('node:fs/promises');
4
4
  var fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var api = require('./api-BUAppqAe.cjs');
6
+ var api = require('./api-ykburCIA.cjs');
7
7
  var z = require('zod');
8
8
  require('axios');
9
9
  require('chalk');
@@ -1,7 +1,7 @@
1
1
  import { unlink, readFile, mkdir, open, stat, writeFile, rename } from 'node:fs/promises';
2
2
  import { existsSync, unlinkSync, readdirSync, constants, writeFileSync, readFileSync } from 'node:fs';
3
3
  import { join, dirname } from 'node:path';
4
- import { c as configuration, l as logger, e as encodeBase64 } from './api-BePMt8XI.mjs';
4
+ import { c as configuration, l as logger, e as encodeBase64 } from './api-CrGI5ANv.mjs';
5
5
  import * as z from 'zod';
6
6
  import 'axios';
7
7
  import 'chalk';
@@ -1,8 +1,8 @@
1
- import { k as initialMachineMetadata, R as RuntimeShell, l as resolveCanonicalToolNameV2, f as formatDisplayMessage } from './index-OfWx3GbO.mjs';
2
- import { readSettings } from './persistence-BOtU4fYZ.mjs';
1
+ import { k as initialMachineMetadata, R as RuntimeShell, l as resolveCanonicalToolNameV2, f as formatDisplayMessage } from './index-CVp6QcCz.mjs';
2
+ import { readSettings } from './persistence-vDMpMN8U.mjs';
3
3
  import { randomUUID } from 'node:crypto';
4
4
  import { basename } from 'node:path';
5
- import { H as HAPPY_ORG_TURN_REPORT_TAG, d as HAPPY_ORG_SUMMARY_MAX_LENGTH, f as HAPPY_ORG_REPEAT_THRESHOLD, l as logger } from './api-BePMt8XI.mjs';
5
+ import { H as HAPPY_ORG_TURN_REPORT_TAG, d as HAPPY_ORG_SUMMARY_MAX_LENGTH, f as HAPPY_ORG_REPEAT_THRESHOLD, l as logger } from './api-CrGI5ANv.mjs';
6
6
  import { createHash } from 'crypto';
7
7
  import 'axios';
8
8
  import 'node:events';
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-LKiNbRQ1.cjs');
4
- var persistence = require('./persistence-CQ1ub64T.cjs');
3
+ var index = require('./index-CX3AYEyM.cjs');
4
+ var persistence = require('./persistence-DFC6LL-_.cjs');
5
5
  var node_crypto = require('node:crypto');
6
6
  var path = require('node:path');
7
- var api = require('./api-BUAppqAe.cjs');
7
+ var api = require('./api-ykburCIA.cjs');
8
8
  var crypto = require('crypto');
9
9
  require('axios');
10
10
  require('node:events');
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var node_crypto = require('node:crypto');
4
- var api = require('./api-BUAppqAe.cjs');
4
+ var api = require('./api-ykburCIA.cjs');
5
5
  require('cross-spawn');
6
6
  require('@agentclientprotocol/sdk');
7
- var index = require('./index-LKiNbRQ1.cjs');
7
+ var index = require('./index-CX3AYEyM.cjs');
8
8
  require('ps-list');
9
9
  require('fs');
10
10
  require('path');
@@ -15,7 +15,7 @@ var path = require('node:path');
15
15
  var os = require('node:os');
16
16
  var node_child_process = require('node:child_process');
17
17
  require('node:readline');
18
- require('./persistence-CQ1ub64T.cjs');
18
+ require('./persistence-DFC6LL-_.cjs');
19
19
  var promises = require('node:fs/promises');
20
20
  var fs = require('fs/promises');
21
21
  require('crypto');
@@ -26,9 +26,9 @@ require('tweetnacl');
26
26
  require('open');
27
27
  var React = require('react');
28
28
  var ink = require('ink');
29
- var ProviderSelectionHandler = require('./ProviderSelectionHandler-DxDz5NAw.cjs');
29
+ var ProviderSelectionHandler = require('./ProviderSelectionHandler-Cyinzbk-.cjs');
30
30
  var types = require('./types-DVk3crez.cjs');
31
- var registerKillSessionHandler = require('./registerKillSessionHandler-BTabJYFZ.cjs');
31
+ var registerKillSessionHandler = require('./registerKillSessionHandler-Dztdudkl.cjs');
32
32
  require('socket.io-client');
33
33
  require('expo-server-sdk');
34
34
  var node_util = require('node:util');
@@ -1,8 +1,8 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { l as logger, g as backoff, h as delay, j as AsyncLock, c as configuration, s as startOfflineReconnection, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError } from './api-BePMt8XI.mjs';
2
+ import { l as logger, g as backoff, h as delay, j as AsyncLock, c as configuration, s as startOfflineReconnection, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError } from './api-CrGI5ANv.mjs';
3
3
  import 'cross-spawn';
4
4
  import '@agentclientprotocol/sdk';
5
- import { m as getProjectPath, F as Future, n as claudeLocal, E as ExitCodeError, o as trimIdent, q as createClaudeBackend, f as formatDisplayMessage, t as truncateDisplayMessage, u as claudeCheckSession, w as projectPath, x as mapToClaudeMode, P as PushableAsyncIterable, y as query, A as AbortError, e as stopCaffeinate, p as publishSessionRegistration, z as getEnvironmentInfo, a as createSessionMetadata, B as startCaffeinate, b as closeProviderSession } from './index-OfWx3GbO.mjs';
5
+ import { m as getProjectPath, F as Future, n as claudeLocal, E as ExitCodeError, o as trimIdent, q as createClaudeBackend, f as formatDisplayMessage, t as truncateDisplayMessage, u as claudeCheckSession, w as projectPath, x as mapToClaudeMode, P as PushableAsyncIterable, y as query, A as AbortError, e as stopCaffeinate, p as publishSessionRegistration, z as getEnvironmentInfo, a as createSessionMetadata, B as startCaffeinate, b as closeProviderSession } from './index-CVp6QcCz.mjs';
6
6
  import 'ps-list';
7
7
  import 'fs';
8
8
  import 'path';
@@ -13,7 +13,7 @@ import { dirname, basename, join, resolve } from 'node:path';
13
13
  import { homedir } from 'node:os';
14
14
  import { execSync } from 'node:child_process';
15
15
  import 'node:readline';
16
- import './persistence-BOtU4fYZ.mjs';
16
+ import './persistence-vDMpMN8U.mjs';
17
17
  import { readFile } from 'node:fs/promises';
18
18
  import { stat, watch, access } from 'fs/promises';
19
19
  import 'crypto';
@@ -24,9 +24,9 @@ import 'tweetnacl';
24
24
  import 'open';
25
25
  import React, { useState, useRef, useEffect, useCallback } from 'react';
26
26
  import { useStdout, useInput, Box, Text, render } from 'ink';
27
- import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-Be6q2nTi.mjs';
27
+ import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-D3qMOxaQ.mjs';
28
28
  import { R as RawJSONLinesSchema } from './types-CiliQpqS.mjs';
29
- import { B as BasePermissionHandler, d as MessageBuffer, C as ConversationHistory$1, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, i as finalizeHappyOrgTurnWithBusinessAck, l as launchRuntimeHandleWithFactoryResult, k as forwardAgentMessageToProviderSession, s as syncControlledByUserState, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, h as hashObject, c as registerKillSessionHandler } from './registerKillSessionHandler-DcFWS8JV.mjs';
29
+ import { B as BasePermissionHandler, d as MessageBuffer, C as ConversationHistory$1, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, i as finalizeHappyOrgTurnWithBusinessAck, l as launchRuntimeHandleWithFactoryResult, k as forwardAgentMessageToProviderSession, s as syncControlledByUserState, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, h as hashObject, c as registerKillSessionHandler } from './registerKillSessionHandler-CefmiOrp.mjs';
30
30
  import 'socket.io-client';
31
31
  import 'expo-server-sdk';
32
32
  import { isDeepStrictEqual } from 'node:util';
@@ -1,6 +1,6 @@
1
- import { p as preserveSessionRuntimeMetadata, l as logger, b as connectionState, A as ApiClient } from './api-BePMt8XI.mjs';
2
- import { B as BasePermissionHandler, h as hashObject, d as MessageBuffer, C as ConversationHistory$1, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, i as finalizeHappyOrgTurnWithBusinessAck, c as registerKillSessionHandler, l as launchRuntimeHandleWithFactoryResult, j as inferToolResultError, k as forwardAgentMessageToProviderSession, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, r as resolveHappyOrgQueuedTurn, s as syncControlledByUserState } from './registerKillSessionHandler-DcFWS8JV.mjs';
3
- import { f as formatDisplayMessage, v as validateCodexAcpSpawn, h as createCodexBackend, t as truncateDisplayMessage, b as closeProviderSession, e as stopCaffeinate, i as readManagedSessionTag, j as resolveManagedSessionTag } from './index-OfWx3GbO.mjs';
1
+ import { p as preserveSessionRuntimeMetadata, l as logger, b as connectionState, A as ApiClient } from './api-CrGI5ANv.mjs';
2
+ import { B as BasePermissionHandler, h as hashObject, d as MessageBuffer, C as ConversationHistory$1, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, i as finalizeHappyOrgTurnWithBusinessAck, c as registerKillSessionHandler, l as launchRuntimeHandleWithFactoryResult, j as inferToolResultError, k as forwardAgentMessageToProviderSession, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, r as resolveHappyOrgQueuedTurn, s as syncControlledByUserState } from './registerKillSessionHandler-CefmiOrp.mjs';
3
+ import { f as formatDisplayMessage, v as validateCodexAcpSpawn, h as createCodexBackend, t as truncateDisplayMessage, b as closeProviderSession, e as stopCaffeinate, i as readManagedSessionTag, j as resolveManagedSessionTag } from './index-CVp6QcCz.mjs';
4
4
  import 'cross-spawn';
5
5
  import '@agentclientprotocol/sdk';
6
6
  import { randomUUID } from 'node:crypto';
@@ -14,7 +14,7 @@ import 'node:path';
14
14
  import 'node:os';
15
15
  import 'node:child_process';
16
16
  import 'node:readline';
17
- import './persistence-BOtU4fYZ.mjs';
17
+ import './persistence-vDMpMN8U.mjs';
18
18
  import 'node:fs/promises';
19
19
  import 'fs/promises';
20
20
  import 'crypto';
@@ -25,8 +25,8 @@ import 'tweetnacl';
25
25
  import 'open';
26
26
  import React, { useState, useRef, useEffect, useCallback } from 'react';
27
27
  import { useStdout, useInput, Box, Text, render } from 'ink';
28
- import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-Be6q2nTi.mjs';
29
- import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-TghqGOqo.mjs';
28
+ import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-D3qMOxaQ.mjs';
29
+ import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-BAv0_85s.mjs';
30
30
  import 'zod';
31
31
  import 'socket.io-client';
32
32
  import 'expo-server-sdk';
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var api = require('./api-BUAppqAe.cjs');
4
- var registerKillSessionHandler = require('./registerKillSessionHandler-BTabJYFZ.cjs');
5
- var index = require('./index-LKiNbRQ1.cjs');
3
+ var api = require('./api-ykburCIA.cjs');
4
+ var registerKillSessionHandler = require('./registerKillSessionHandler-Dztdudkl.cjs');
5
+ var index = require('./index-CX3AYEyM.cjs');
6
6
  require('cross-spawn');
7
7
  require('@agentclientprotocol/sdk');
8
8
  var node_crypto = require('node:crypto');
@@ -16,7 +16,7 @@ require('node:path');
16
16
  require('node:os');
17
17
  require('node:child_process');
18
18
  require('node:readline');
19
- require('./persistence-CQ1ub64T.cjs');
19
+ require('./persistence-DFC6LL-_.cjs');
20
20
  require('node:fs/promises');
21
21
  require('fs/promises');
22
22
  require('crypto');
@@ -27,8 +27,8 @@ require('tweetnacl');
27
27
  require('open');
28
28
  var React = require('react');
29
29
  var ink = require('ink');
30
- var ProviderSelectionHandler = require('./ProviderSelectionHandler-DxDz5NAw.cjs');
31
- var BaseReasoningProcessor = require('./BaseReasoningProcessor-D6AIOycG.cjs');
30
+ var ProviderSelectionHandler = require('./ProviderSelectionHandler-Cyinzbk-.cjs');
31
+ var BaseReasoningProcessor = require('./BaseReasoningProcessor-D_cBN7IM.cjs');
32
32
  require('zod');
33
33
  require('socket.io-client');
34
34
  require('expo-server-sdk');
@@ -3,10 +3,10 @@
3
3
  var ink = require('ink');
4
4
  var React = require('react');
5
5
  var node_crypto = require('node:crypto');
6
- var api = require('./api-BUAppqAe.cjs');
7
- var registerKillSessionHandler = require('./registerKillSessionHandler-BTabJYFZ.cjs');
8
- var index = require('./index-LKiNbRQ1.cjs');
9
- var BaseReasoningProcessor = require('./BaseReasoningProcessor-D6AIOycG.cjs');
6
+ var api = require('./api-ykburCIA.cjs');
7
+ var registerKillSessionHandler = require('./registerKillSessionHandler-Dztdudkl.cjs');
8
+ var index = require('./index-CX3AYEyM.cjs');
9
+ var BaseReasoningProcessor = require('./BaseReasoningProcessor-D_cBN7IM.cjs');
10
10
  require('cross-spawn');
11
11
  require('@agentclientprotocol/sdk');
12
12
  require('ps-list');
@@ -17,7 +17,7 @@ require('node:child_process');
17
17
  require('node:readline');
18
18
  require('tweetnacl');
19
19
  require('axios');
20
- require('./persistence-CQ1ub64T.cjs');
20
+ require('./persistence-DFC6LL-_.cjs');
21
21
  require('open');
22
22
  require('chalk');
23
23
  require('fs');
@@ -1,10 +1,10 @@
1
1
  import { useStdout, useInput, Box, Text, render } from 'ink';
2
2
  import React, { useState, useRef, useEffect, useCallback } from 'react';
3
3
  import { randomUUID } from 'node:crypto';
4
- import { l as logger, b as connectionState, A as ApiClient } from './api-BePMt8XI.mjs';
5
- import { B as BasePermissionHandler, C as ConversationHistory$1, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, s as syncControlledByUserState, b as MessageQueue2, h as hashObject, c as registerKillSessionHandler, d as MessageBuffer, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, i as finalizeHappyOrgTurnWithBusinessAck, l as launchRuntimeHandleWithFactoryResult, j as inferToolResultError, k as forwardAgentMessageToProviderSession } from './registerKillSessionHandler-DcFWS8JV.mjs';
6
- import { g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, b as closeProviderSession, s as saveGeminiModelToConfig, d as createGeminiBackend, e as stopCaffeinate } from './index-OfWx3GbO.mjs';
7
- import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-TghqGOqo.mjs';
4
+ import { l as logger, b as connectionState, A as ApiClient } from './api-CrGI5ANv.mjs';
5
+ import { B as BasePermissionHandler, C as ConversationHistory$1, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, s as syncControlledByUserState, b as MessageQueue2, h as hashObject, c as registerKillSessionHandler, d as MessageBuffer, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, i as finalizeHappyOrgTurnWithBusinessAck, l as launchRuntimeHandleWithFactoryResult, j as inferToolResultError, k as forwardAgentMessageToProviderSession } from './registerKillSessionHandler-CefmiOrp.mjs';
6
+ import { g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, b as closeProviderSession, s as saveGeminiModelToConfig, d as createGeminiBackend, e as stopCaffeinate } from './index-CVp6QcCz.mjs';
7
+ import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-BAv0_85s.mjs';
8
8
  import 'cross-spawn';
9
9
  import '@agentclientprotocol/sdk';
10
10
  import 'ps-list';
@@ -15,7 +15,7 @@ import 'node:child_process';
15
15
  import 'node:readline';
16
16
  import 'tweetnacl';
17
17
  import 'axios';
18
- import './persistence-BOtU4fYZ.mjs';
18
+ import './persistence-vDMpMN8U.mjs';
19
19
  import 'open';
20
20
  import 'chalk';
21
21
  import 'fs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "happy-imou-cloud",
3
- "version": "2.1.16",
3
+ "version": "2.1.17",
4
4
  "description": "hicloud - Imou 企业定制版。关键是 happy!移动端远程 AI 编程工具,支持 Claude Code、Codex 和 Gemini CLI",
5
5
  "author": "long.zhu",
6
6
  "license": "MIT",