snow-ai 0.7.34 → 0.7.35

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.
package/bundle/cli.mjs CHANGED
@@ -1537,7 +1537,7 @@ var require_react_development = __commonJS({
1537
1537
  }
1538
1538
  return dispatcher.useContext(Context);
1539
1539
  }
1540
- function useState94(initialState) {
1540
+ function useState95(initialState) {
1541
1541
  var dispatcher = resolveDispatcher();
1542
1542
  return dispatcher.useState(initialState);
1543
1543
  }
@@ -2340,7 +2340,7 @@ var require_react_development = __commonJS({
2340
2340
  exports2.useMemo = useMemo48;
2341
2341
  exports2.useReducer = useReducer8;
2342
2342
  exports2.useRef = useRef32;
2343
- exports2.useState = useState94;
2343
+ exports2.useState = useState95;
2344
2344
  exports2.useSyncExternalStore = useSyncExternalStore4;
2345
2345
  exports2.useTransition = useTransition;
2346
2346
  exports2.version = ReactVersion;
@@ -2803,7 +2803,7 @@ var processOk, kExitEmitter, global2, ObjectDefineProperty, Emitter, SignalExitB
2803
2803
  var init_mjs = __esm({
2804
2804
  "node_modules/signal-exit/dist/mjs/index.js"() {
2805
2805
  init_signals();
2806
- processOk = (process21) => !!process21 && typeof process21 === "object" && typeof process21.removeListener === "function" && typeof process21.emit === "function" && typeof process21.reallyExit === "function" && typeof process21.listeners === "function" && typeof process21.kill === "function" && typeof process21.pid === "number" && typeof process21.on === "function";
2806
+ processOk = (process22) => !!process22 && typeof process22 === "object" && typeof process22.removeListener === "function" && typeof process22.emit === "function" && typeof process22.reallyExit === "function" && typeof process22.listeners === "function" && typeof process22.kill === "function" && typeof process22.pid === "number" && typeof process22.on === "function";
2807
2807
  kExitEmitter = Symbol.for("signal-exit emitter");
2808
2808
  global2 = globalThis;
2809
2809
  ObjectDefineProperty = Object.defineProperty.bind(Object);
@@ -2896,15 +2896,15 @@ var init_mjs = __esm({
2896
2896
  #originalProcessReallyExit;
2897
2897
  #sigListeners = {};
2898
2898
  #loaded = false;
2899
- constructor(process21) {
2899
+ constructor(process22) {
2900
2900
  super();
2901
- this.#process = process21;
2901
+ this.#process = process22;
2902
2902
  this.#sigListeners = {};
2903
2903
  for (const sig of signals) {
2904
2904
  this.#sigListeners[sig] = () => {
2905
2905
  const listeners2 = this.#process.listeners(sig);
2906
2906
  let { count } = this.#emitter;
2907
- const p = process21;
2907
+ const p = process22;
2908
2908
  if (typeof p.__signal_exit_emitter__ === "object" && typeof p.__signal_exit_emitter__.count === "number") {
2909
2909
  count += p.__signal_exit_emitter__.count;
2910
2910
  }
@@ -2913,12 +2913,12 @@ var init_mjs = __esm({
2913
2913
  const ret2 = this.#emitter.emit("exit", null, sig);
2914
2914
  const s = sig === "SIGHUP" ? this.#hupSig : sig;
2915
2915
  if (!ret2)
2916
- process21.kill(process21.pid, s);
2916
+ process22.kill(process22.pid, s);
2917
2917
  }
2918
2918
  };
2919
2919
  }
2920
- this.#originalProcessReallyExit = process21.reallyExit;
2921
- this.#originalProcessEmit = process21.emit;
2920
+ this.#originalProcessReallyExit = process22.reallyExit;
2921
+ this.#originalProcessEmit = process22.emit;
2922
2922
  }
2923
2923
  onExit(cb2, opts) {
2924
2924
  if (!processOk(this.#process)) {
@@ -53743,14 +53743,18 @@ function loadConfig() {
53743
53743
  ...DEFAULT_CONFIG3.snowcfg,
53744
53744
  ...configWithoutMcp.snowcfg,
53745
53745
  baseUrlMode: normalizeBaseUrlMode(configWithoutMcp.snowcfg.baseUrlMode),
53746
+ visionBaseUrlMode: normalizeBaseUrlMode(configWithoutMcp.snowcfg.visionBaseUrlMode),
53746
53747
  requestMethod: normalizeRequestMethod(configWithoutMcp.snowcfg.requestMethod),
53748
+ visionRequestMethod: normalizeRequestMethod(configWithoutMcp.snowcfg.visionRequestMethod),
53747
53749
  streamIdleTimeoutSec: normalizeStreamIdleTimeoutSec(configWithoutMcp.snowcfg.streamIdleTimeoutSec)
53748
53750
  };
53749
53751
  } else {
53750
53752
  apiConfig = {
53751
53753
  ...DEFAULT_CONFIG3.snowcfg,
53752
53754
  baseUrlMode: DEFAULT_CONFIG3.snowcfg.baseUrlMode,
53755
+ visionBaseUrlMode: DEFAULT_CONFIG3.snowcfg.visionBaseUrlMode,
53753
53756
  requestMethod: DEFAULT_CONFIG3.snowcfg.requestMethod,
53757
+ visionRequestMethod: DEFAULT_CONFIG3.snowcfg.visionRequestMethod,
53754
53758
  streamIdleTimeoutSec: DEFAULT_STREAM_IDLE_TIMEOUT_SEC
53755
53759
  };
53756
53760
  }
@@ -53798,12 +53802,17 @@ async function updateSnowConfig(apiConfig) {
53798
53802
  const currentConfig = loadConfig();
53799
53803
  const normalizedIdleTimeoutSec = normalizeStreamIdleTimeoutSec(apiConfig.streamIdleTimeoutSec ?? currentConfig.snowcfg.streamIdleTimeoutSec);
53800
53804
  const normalizedBaseUrlMode = normalizeBaseUrlMode(apiConfig.baseUrlMode ?? currentConfig.snowcfg.baseUrlMode);
53805
+ const normalizedVisionBaseUrlMode = normalizeBaseUrlMode(apiConfig.visionBaseUrlMode ?? currentConfig.snowcfg.visionBaseUrlMode);
53806
+ const normalizedVisionRequestMethod = normalizeRequestMethod(apiConfig.visionRequestMethod ?? currentConfig.snowcfg.visionRequestMethod);
53801
53807
  const updatedConfig = {
53802
53808
  ...currentConfig,
53803
53809
  snowcfg: {
53804
53810
  ...currentConfig.snowcfg,
53805
53811
  ...apiConfig,
53806
53812
  baseUrlMode: normalizedBaseUrlMode,
53813
+ visionBaseUrlMode: normalizedVisionBaseUrlMode,
53814
+ requestMethod: normalizeRequestMethod(apiConfig.requestMethod ?? currentConfig.snowcfg.requestMethod),
53815
+ visionRequestMethod: normalizedVisionRequestMethod,
53807
53816
  streamIdleTimeoutSec: normalizedIdleTimeoutSec
53808
53817
  }
53809
53818
  };
@@ -54139,6 +54148,12 @@ var init_apiConfig = __esm({
54139
54148
  requestMethod: "chat",
54140
54149
  advancedModel: "",
54141
54150
  basicModel: "",
54151
+ supportsVision: true,
54152
+ visionBaseUrl: "",
54153
+ visionBaseUrlMode: "auto",
54154
+ visionApiKey: "",
54155
+ visionRequestMethod: "chat",
54156
+ visionModel: "",
54142
54157
  maxContextTokens: 2e5,
54143
54158
  maxTokens: 64e3,
54144
54159
  anthropicBeta: false,
@@ -56680,6 +56695,9 @@ async function* createStreamingChatCompletion(options3, abortSignal, onRetry) {
56680
56695
  } else {
56681
56696
  config3 = getSnowConfig();
56682
56697
  }
56698
+ if (options3.configOverride) {
56699
+ config3 = { ...config3, ...options3.configOverride };
56700
+ }
56683
56701
  let customSystemPromptContent;
56684
56702
  if (options3.customSystemPromptId) {
56685
56703
  const { getSystemPromptConfig: getSystemPromptConfig2 } = await Promise.resolve().then(() => (init_apiConfig(), apiConfig_exports));
@@ -57186,6 +57204,9 @@ async function* createStreamingResponse(options3, abortSignal, onRetry) {
57186
57204
  } else {
57187
57205
  config3 = getSnowConfig();
57188
57206
  }
57207
+ if (options3.configOverride) {
57208
+ config3 = { ...config3, ...options3.configOverride };
57209
+ }
57189
57210
  let customSystemPromptContent;
57190
57211
  if (options3.customSystemPromptId) {
57191
57212
  const { getSystemPromptConfig: getSystemPromptConfig2 } = await Promise.resolve().then(() => (init_apiConfig(), apiConfig_exports));
@@ -57646,6 +57667,9 @@ async function* createStreamingGeminiCompletion(options3, abortSignal, onRetry)
57646
57667
  } else {
57647
57668
  config3 = getSnowConfig();
57648
57669
  }
57670
+ if (options3.configOverride) {
57671
+ config3 = { ...config3, ...options3.configOverride };
57672
+ }
57649
57673
  let customSystemPromptContent;
57650
57674
  if (options3.customSystemPromptId) {
57651
57675
  const { getSystemPromptConfig: getSystemPromptConfig2 } = await Promise.resolve().then(() => (init_apiConfig(), apiConfig_exports));
@@ -58327,6 +58351,9 @@ async function* createStreamingAnthropicCompletion(options3, abortSignal, onRetr
58327
58351
  } else {
58328
58352
  config3 = getSnowConfig();
58329
58353
  }
58354
+ if (options3.configOverride) {
58355
+ config3 = { ...config3, ...options3.configOverride };
58356
+ }
58330
58357
  let customSystemPromptContent;
58331
58358
  if (options3.customSystemPromptId) {
58332
58359
  const { getSystemPromptConfig: getSystemPromptConfig2 } = await Promise.resolve().then(() => (init_apiConfig(), apiConfig_exports));
@@ -59574,20 +59601,20 @@ var init_summaryAgent = __esm({
59574
59601
  */
59575
59602
  async generateSummary(userMessage, assistantMessage, abortSignal) {
59576
59603
  const result2 = await this.generateSummaryInternal(userMessage, assistantMessage, abortSignal);
59577
- this.applyTerminalTitle(result2 == null ? void 0 : result2.title);
59604
+ this.applyTerminalTitle(result2 == null ? void 0 : result2.summary);
59578
59605
  return result2;
59579
59606
  }
59580
59607
  /**
59581
- * 把 summary 标题设置为终端窗口/标签标题,失败时静默忽略
59608
+ * 把 conversation summary 设置为终端窗口/标签标题,失败时静默忽略
59582
59609
  */
59583
- applyTerminalTitle(title) {
59610
+ applyTerminalTitle(summary) {
59584
59611
  var _a20;
59585
- if (!title)
59612
+ if (!summary)
59586
59613
  return;
59587
59614
  try {
59588
59615
  if (!((_a20 = process.stdout) == null ? void 0 : _a20.isTTY))
59589
59616
  return;
59590
- const finalTitle = `Snow CLI - ${title}`;
59617
+ const finalTitle = `Snow CLI - ${summary}`;
59591
59618
  try {
59592
59619
  process.title = finalTitle;
59593
59620
  } catch {
@@ -59895,6 +59922,33 @@ function loadHookConfig(hookType, scope) {
59895
59922
  return [];
59896
59923
  }
59897
59924
  }
59925
+ function isExecutableHookAction(action) {
59926
+ var _a20, _b14;
59927
+ if (action.enabled !== true) {
59928
+ return false;
59929
+ }
59930
+ if (action.type === "command") {
59931
+ return Boolean((_a20 = action.command) == null ? void 0 : _a20.trim());
59932
+ }
59933
+ if (action.type === "prompt") {
59934
+ return Boolean((_b14 = action.prompt) == null ? void 0 : _b14.trim());
59935
+ }
59936
+ return false;
59937
+ }
59938
+ function hasEnabledHookActionsInRules(rules) {
59939
+ return rules.some((rule) => rule.hooks.some(isExecutableHookAction));
59940
+ }
59941
+ function loadHookConfigWithFallback(hookType) {
59942
+ const projectRules = loadHookConfig(hookType, "project");
59943
+ if (projectRules.length > 0) {
59944
+ return projectRules;
59945
+ }
59946
+ return loadHookConfig(hookType, "global");
59947
+ }
59948
+ function hasEnabledHookActions(hookType, scope) {
59949
+ const rules = scope ? loadHookConfig(hookType, scope) : loadHookConfigWithFallback(hookType);
59950
+ return hasEnabledHookActionsInRules(rules);
59951
+ }
59898
59952
  function saveHookConfig(hookType, scope, rules) {
59899
59953
  ensureHooksDirectory(scope);
59900
59954
  const filePath = getHookFilePath(hookType, scope);
@@ -59986,25 +60040,25 @@ var init_processManager = __esm({
59986
60040
  /**
59987
60041
  * Register a child process for tracking
59988
60042
  */
59989
- register(process21) {
60043
+ register(process22) {
59990
60044
  if (this.isShuttingDown) {
59991
- this.killProcess(process21);
60045
+ this.killProcess(process22);
59992
60046
  return;
59993
60047
  }
59994
- this.processes.add(process21);
60048
+ this.processes.add(process22);
59995
60049
  const cleanup = () => {
59996
- this.processes.delete(process21);
60050
+ this.processes.delete(process22);
59997
60051
  };
59998
- process21.once("exit", cleanup);
59999
- process21.once("error", cleanup);
60052
+ process22.once("exit", cleanup);
60053
+ process22.once("error", cleanup);
60000
60054
  }
60001
60055
  /**
60002
60056
  * Kill a specific process gracefully
60003
60057
  * On Windows, uses taskkill with /T flag to terminate process tree
60004
60058
  */
60005
- killProcess(process21) {
60006
- const pid = process21.pid;
60007
- if (!pid || process21.killed) {
60059
+ killProcess(process22) {
60060
+ const pid = process22.pid;
60061
+ if (!pid || process22.killed) {
60008
60062
  return;
60009
60063
  }
60010
60064
  if (this.isWindows) {
@@ -60012,11 +60066,11 @@ var init_processManager = __esm({
60012
60066
  });
60013
60067
  } else {
60014
60068
  try {
60015
- process21.kill("SIGTERM");
60069
+ process22.kill("SIGTERM");
60016
60070
  setTimeout(() => {
60017
60071
  try {
60018
- if (!process21.killed) {
60019
- process21.kill("SIGKILL");
60072
+ if (!process22.killed) {
60073
+ process22.kill("SIGKILL");
60020
60074
  }
60021
60075
  } catch {
60022
60076
  }
@@ -60031,8 +60085,8 @@ var init_processManager = __esm({
60031
60085
  */
60032
60086
  killAll() {
60033
60087
  this.isShuttingDown = true;
60034
- for (const process21 of this.processes) {
60035
- this.killProcess(process21);
60088
+ for (const process22 of this.processes) {
60089
+ this.killProcess(process22);
60036
60090
  }
60037
60091
  this.processes.clear();
60038
60092
  }
@@ -60138,10 +60192,7 @@ var init_unifiedHooksExecutor = __esm({
60138
60192
  * @returns 执行结果
60139
60193
  */
60140
60194
  async executeHooks(hookType, context2) {
60141
- let rules = loadHookConfig(hookType, "project");
60142
- if (rules.length === 0) {
60143
- rules = loadHookConfig(hookType, "global");
60144
- }
60195
+ const rules = loadHookConfigWithFallback(hookType);
60145
60196
  if (rules.length === 0) {
60146
60197
  return {
60147
60198
  success: true,
@@ -60160,7 +60211,7 @@ var init_unifiedHooksExecutor = __esm({
60160
60211
  continue;
60161
60212
  }
60162
60213
  for (const action of rule.hooks) {
60163
- if (action.enabled === false) {
60214
+ if (action.enabled !== true) {
60164
60215
  totalSkipped++;
60165
60216
  continue;
60166
60217
  }
@@ -60697,8 +60748,13 @@ function normalizeStreamIdleTimeoutSec2(value) {
60697
60748
  }
60698
60749
  return value;
60699
60750
  }
60751
+ function normalizeRequestMethod2(method) {
60752
+ if (method === "chat" || method === "responses" || method === "gemini" || method === "anthropic") {
60753
+ return method;
60754
+ }
60755
+ return DEFAULT_CONFIG3.snowcfg.requestMethod;
60756
+ }
60700
60757
  function loadProfile(profileName) {
60701
- var _a20;
60702
60758
  ensureProfilesDirectory();
60703
60759
  migrateLegacyConfig();
60704
60760
  const profilePath = getProfilePath(profileName);
@@ -60708,13 +60764,19 @@ function loadProfile(profileName) {
60708
60764
  try {
60709
60765
  const configData = readFileSync7(profilePath, "utf8");
60710
60766
  const parsedConfig = JSON.parse(configData);
60767
+ const parsedSnowcfg = parsedConfig.snowcfg || {};
60711
60768
  const mergedConfig = {
60712
60769
  ...DEFAULT_CONFIG3,
60713
60770
  ...parsedConfig,
60714
60771
  snowcfg: {
60715
60772
  ...DEFAULT_CONFIG3.snowcfg,
60716
- ...parsedConfig.snowcfg || {},
60717
- streamIdleTimeoutSec: normalizeStreamIdleTimeoutSec2((_a20 = parsedConfig.snowcfg) == null ? void 0 : _a20.streamIdleTimeoutSec)
60773
+ ...parsedSnowcfg,
60774
+ baseUrlMode: normalizeBaseUrlMode(parsedSnowcfg.baseUrlMode),
60775
+ visionBaseUrlMode: normalizeBaseUrlMode(parsedSnowcfg.visionBaseUrlMode),
60776
+ requestMethod: normalizeRequestMethod2(parsedSnowcfg.requestMethod),
60777
+ visionRequestMethod: normalizeRequestMethod2(parsedSnowcfg.visionRequestMethod),
60778
+ supportsVision: parsedSnowcfg.supportsVision !== false,
60779
+ streamIdleTimeoutSec: normalizeStreamIdleTimeoutSec2(parsedSnowcfg.streamIdleTimeoutSec)
60718
60780
  }
60719
60781
  };
60720
60782
  return mergedConfig;
@@ -64180,12 +64242,12 @@ var require_constants5 = __commonJS({
64180
64242
  var require_llhttp_wasm = __commonJS({
64181
64243
  "node_modules/undici/lib/llhttp/llhttp-wasm.js"(exports2, module2) {
64182
64244
  "use strict";
64183
- var { Buffer: Buffer3 } = __require("node:buffer");
64245
+ var { Buffer: Buffer4 } = __require("node:buffer");
64184
64246
  var wasmBase64 = "AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRwX3NldF9sZW5pZW50X2hlYWRlcnMAISFsbGh0dHBfc2V0X2xlbmllbnRfY2h1bmtlZF9sZW5ndGgAIh1sbGh0dHBfc2V0X2xlbmllbnRfa2VlcF9hbGl2ZQAjJGxsaHR0cF9zZXRfbGVuaWVudF90cmFuc2Zlcl9lbmNvZGluZwAkGmxsaHR0cF9zZXRfbGVuaWVudF92ZXJzaW9uACUjbGxodHRwX3NldF9sZW5pZW50X2RhdGFfYWZ0ZXJfY2xvc2UAJidsbGh0dHBfc2V0X2xlbmllbnRfb3B0aW9uYWxfbGZfYWZ0ZXJfY3IAJyxsbGh0dHBfc2V0X2xlbmllbnRfb3B0aW9uYWxfY3JsZl9hZnRlcl9jaHVuawAoKGxsaHR0cF9zZXRfbGVuaWVudF9vcHRpb25hbF9jcl9iZWZvcmVfbGYAKSpsbGh0dHBfc2V0X2xlbmllbnRfc3BhY2VzX2FmdGVyX2NodW5rX3NpemUAKhhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YANgkYAQBBAQsSAQIDBAUKBgcyNDMuKy8tLDAxCq/ZAjQWAEHA1QAoAgAEQAALQcDVAEEBNgIACxQAIAAQOCAAIAI2AjggACABOgAoCxQAIAAgAC8BNCAALQAwIAAQNxAACx4BAX9BwAAQOiIBEDggAUGACDYCOCABIAA6ACggAQuPDAEHfwJAIABFDQAgAEEIayIBIABBBGsoAgAiAEF4cSIEaiEFAkAgAEEBcQ0AIABBA3FFDQEgASABKAIAIgBrIgFB1NUAKAIASQ0BIAAgBGohBAJAAkBB2NUAKAIAIAFHBEAgAEH/AU0EQCAAQQN2IQMgASgCCCIAIAEoAgwiAkYEQEHE1QBBxNUAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgASgCGCEGIAEgASgCDCIARwRAIAAgASgCCCICNgIIIAIgADYCDAwDCyABQRRqIgMoAgAiAkUEQCABKAIQIgJFDQIgAUEQaiEDCwNAIAMhByACIgBBFGoiAygCACICDQAgAEEQaiEDIAAoAhAiAg0ACyAHQQA2AgAMAgsgBSgCBCIAQQNxQQNHDQIgBSAAQX5xNgIEQczVACAENgIAIAUgBDYCACABIARBAXI2AgQMAwtBACEACyAGRQ0AAkAgASgCHCICQQJ0QfTXAGoiAygCACABRgRAIAMgADYCACAADQFByNUAQcjVACgCAEF+IAJ3cTYCAAwCCyAGQRBBFCAGKAIQIAFGG2ogADYCACAARQ0BCyAAIAY2AhggASgCECICBEAgACACNgIQIAIgADYCGAsgAUEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgBU8NACAFKAIEIgBBAXFFDQACQAJAAkACQCAAQQJxRQRAQdzVACgCACAFRgRAQdzVACABNgIAQdDVAEHQ1QAoAgAgBGoiADYCACABIABBAXI2AgQgAUHY1QAoAgBHDQZBzNUAQQA2AgBB2NUAQQA2AgAMBgtB2NUAKAIAIAVGBEBB2NUAIAE2AgBBzNUAQczVACgCACAEaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgAMBgsgAEF4cSAEaiEEIABB/wFNBEAgAEEDdiEDIAUoAggiACAFKAIMIgJGBEBBxNUAQcTVACgCAEF+IAN3cTYCAAwFCyACIAA2AgggACACNgIMDAQLIAUoAhghBiAFIAUoAgwiAEcEQEHU1QAoAgAaIAAgBSgCCCICNgIIIAIgADYCDAwDCyAFQRRqIgMoAgAiAkUEQCAFKAIQIgJFDQIgBUEQaiEDCwNAIAMhByACIgBBFGoiAygCACICDQAgAEEQaiEDIAAoAhAiAg0ACyAHQQA2AgAMAgsgBSAAQX5xNgIEIAEgBGogBDYCACABIARBAXI2AgQMAwtBACEACyAGRQ0AAkAgBSgCHCICQQJ0QfTXAGoiAygCACAFRgRAIAMgADYCACAADQFByNUAQcjVACgCAEF+IAJ3cTYCAAwCCyAGQRBBFCAGKAIQIAVGG2ogADYCACAARQ0BCyAAIAY2AhggBSgCECICBEAgACACNgIQIAIgADYCGAsgBUEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgBGogBDYCACABIARBAXI2AgQgAUHY1QAoAgBHDQBBzNUAIAQ2AgAMAQsgBEH/AU0EQCAEQXhxQezVAGohAAJ/QcTVACgCACICQQEgBEEDdnQiA3FFBEBBxNUAIAIgA3I2AgAgAAwBCyAAKAIICyICIAE2AgwgACABNgIIIAEgADYCDCABIAI2AggMAQtBHyECIARB////B00EQCAEQSYgBEEIdmciAGt2QQFxIABBAXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAg7jAQABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEjJCUnKCmeA5sDmgORA4oDgwOAA/0C+wL4AvIC8QLvAu0C6ALnAuYC5QLkAtwC2wLaAtkC2ALXAtYC1QLPAs4CzALLAsoCyQLIAscCxgLEAsMCvgK8AroCuQK4ArcCtgK1ArQCswKyArECsAKuAq0CqQKoAqcCpgKlAqQCowKiAqECoAKfApgCkAKMAosCigKBAv4B/QH8AfsB+gH5AfgB9wH1AfMB8AHrAekB6AHnAeYB5QHkAeMB4gHhAeAB3wHeAd0B3AHaAdkB2AHXAdYB1QHUAdMB0gHRAdABzwHOAc0BzAHLAcoByQHIAccBxgHFAcQBwwHCAcEBwAG/Ab4BvQG8AbsBugG5AbgBtwG2AbUBtAGzAbIBsQGwAa8BrgGtAawBqwGqAakBqAGnAaYBpQGkAaMBogGfAZ4BmQGYAZcBlgGVAZQBkwGSAZEBkAGPAY0BjAGHAYYBhQGEAYMBggF9fHt6eXZ1dFBRUlNUVQsgASAERw1yQf0BIQIMvgMLIAEgBEcNmAFB2wEhAgy9AwsgASAERw3xAUGOASECDLwDCyABIARHDfwBQYQBIQIMuwMLIAEgBEcNigJB/wAhAgy6AwsgASAERw2RAkH9ACECDLkDCyABIARHDZQCQfsAIQIMuAMLIAEgBEcNHkEeIQIMtwMLIAEgBEcNGUEYIQIMtgMLIAEgBEcNygJBzQAhAgy1AwsgASAERw3VAkHGACECDLQDCyABIARHDdYCQcMAIQIMswMLIAEgBEcN3AJBOCECDLIDCyADLQAwQQFGDa0DDIkDC0EAIQACQAJAAkAgAy0AKkUNACADLQArRQ0AIAMvATIiAkECcUUNAQwCCyADLwEyIgJBAXFFDQELQQEhACADLQAoQQFGDQAgAy8BNCIGQeQAa0HkAEkNACAGQcwBRg0AIAZBsAJGDQAgAkHAAHENAEEAIQAgAkGIBHFBgARGDQAgAkEocUEARyEACyADQQA7ATIgA0EAOgAxAkAgAEUEQCADQQA6ADEgAy0ALkEEcQ0BDLEDCyADQgA3AyALIANBADoAMSADQQE6ADYMSAtBACEAAkAgAygCOCICRQ0AIAIoAjAiAkUNACADIAIRAAAhAAsgAEUNSCAAQRVHDWIgA0EENgIcIAMgATYCFCADQdIbNgIQIANBFTYCDEEAIQIMrwMLIAEgBEYEQEEGIQIMrwMLIAEtAABBCkcNGSABQQFqIQEMGgsgA0IANwMgQRIhAgyUAwsgASAERw2KA0EjIQIMrAMLIAEgBEYEQEEHIQIMrAMLAkACQCABLQAAQQprDgQBGBgAGAsgAUEBaiEBQRAhAgyTAwsgAUEBaiEBIANBL2otAABBAXENF0EAIQIgA0EANgIcIAMgATYCFCADQZkgNgIQIANBGTYCDAyrAwsgAyADKQMgIgwgBCABa60iCn0iC0IAIAsgDFgbNwMgIAogDFoNGEEIIQIMqgMLIAEgBEcEQCADQQk2AgggAyABNgIEQRQhAgyRAwtBCSECDKkDCyADKQMgUA2uAgxDCyABIARGBEBBCyECDKgDCyABLQAAQQpHDRYgAUEBaiEBDBcLIANBL2otAABBAXFFDRkMJgtBACEAAkAgAygCOCICRQ0AIAIoAlAiAkUNACADIAIRAAAhAAsgAA0ZDEILQQAhAAJAIAMoAjgiAkUNACACKAJQIgJFDQAgAyACEQAAIQALIAANGgwkC0EAIQACQCADKAI4IgJFDQAgAigCUCICRQ0AIAMgAhEAACEACyAADRsMMgsgA0Evai0AAEEBcUUNHAwiC0EAIQACQCADKAI4IgJFDQAgAigCVCICRQ0AIAMgAhEAACEACyAADRwMQgtBACEAAkAgAygCOCICRQ0AIAIoAlQiAkUNACADIAIRAAAhAAsgAA0dDCALIAEgBEYEQEETIQIMoAMLAkAgAS0AACIAQQprDgQfIyMAIgsgAUEBaiEBDB8LQQAhAAJAIAMoAjgiAkUNACACKAJUIgJFDQAgAyACEQAAIQALIAANIgxCCyABIARGBEBBFiECDJ4DCyABLQAAQcDBAGotAABBAUcNIwyDAwsCQANAIAEtAABBsDtqLQAAIgBBAUcEQAJAIABBAmsOAgMAJwsgAUEBaiEBQSEhAgyGAwsgBCABQQFqIgFHDQALQRghAgydAwsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAFBAWoiARA0IgANIQxBC0EAIQACQCADKAI4IgJFDQAgAigCVCICRQ0AIAMgAhEAACEACyAADSMMKgsgASAERgRAQRwhAgybAwsgA0EKNgIIIAMgATYCBEEAIQACQCADKAI4IgJFDQAgAigCUCICRQ0AIAMgAhEAACEACyAADSVBJCECDIEDCyABIARHBEADQCABLQAAQbA9ai0AACIAQQNHBEAgAEEBaw4FGBomggMlJgsgBCABQQFqIgFHDQALQRshAgyaAwtBGyECDJkDCwNAIAEtAABBsD9qLQAAIgBBA0cEQCAAQQFrDgUPEScTJicLIAQgAUEBaiIBRw0AC0EeIQIMmAMLIAEgBEcEQCADQQs2AgggAyABNgIEQQchAgz/AgtBHyECDJcDCyABIARGBEBBICECDJcDCwJAIAEtAABBDWsOFC4/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8APwtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQMlgMLIANBL2ohAgNAIAEgBEYEQEEhIQIMlwMLAkACQAJAIAEtAAAiAEEJaw4YAgApKQEpKSkpKSkpKSkpKSkpKSkpKSkCJwsgAUEBaiEBIANBL2otAABBAXFFDQoMGAsgAUEBaiEBDBcLIAFBAWohASACLQAAQQJxDQALQQAhAiADQQA2AhwgAyABNgIUIANBnxU2AhAgA0EMNgIMDJUDCyADLQAuQYABcUUNAQtBACEAAkAgAygCOCICRQ0AIAIoAlwiAkUNACADIAIRAAAhAAsgAEUN5gIgAEEVRgRAIANBJDYCHCADIAE2AhQgA0GbGzYCECADQRU2AgxBACECDJQDC0EAIQIgA0EANgIcIAMgATYCFCADQZAONgIQIANBFDYCDAyTAwtBACECIANBADYCHCADIAE2AhQgA0G+IDYCECADQQI2AgwMkgMLIAMoAgQhAEEAIQIgA0EANgIEIAMgACABIAynaiIBEDIiAEUNKyADQQc2AhwgAyABNgIUIAMgADYCDAyRAwsgAy0ALkHAAHFFDQELQQAhAAJAIAMoAjgiAkUNACACKAJYIgJFDQAgAyACEQAAIQALIABFDSsgAEEVRgRAIANBCjYCHCADIAE2AhQgA0HrGTYCECADQRU2AgxBACECDJADC0EAIQIgA0EANgIcIAMgATYCFCADQZMMNgIQIANBEzYCDAyPAwtBACECIANBADYCHCADIAE2AhQgA0GCFTYCECADQQI2AgwMjgMLQQAhAiADQQA2AhwgAyABNgIUIANB3RQ2AhAgA0EZNgIMDI0DC0EAIQIgA0EANgIcIAMgATYCFCADQeYdNgIQIANBGTYCDAyMAwsgAEEVRg09QQAhAiADQQA2AhwgAyABNgIUIANB0A82AhAgA0EiNgIMDIsDCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFDSggA0ENNgIcIAMgATYCFCADIAA2AgwMigMLIABBFUYNOkEAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAyJAwsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQMyIARQRAIAFBAWohAQwoCyADQQ42AhwgAyAANgIMIAMgAUEBajYCFAyIAwsgAEEVRg03QQAhAiADQQA2AhwgAyABNgIUIANB0A82AhAgA0EiNgIMDIcDCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDCcLIANBDzYCHCADIAA2AgwgAyABQQFqNgIUDIYDC0EAIQIgA0EANgIcIAMgATYCFCADQeIXNgIQIANBGTYCDAyFAwsgAEEVRg0zQQAhAiADQQA2AhwgAyABNgIUIANB1gw2AhAgA0EjNgIMDIQDCyADKAIEIQBBACECIANBADYCBCADIAAgARA0IgBFDSUgA0ERNgIcIAMgATYCFCADIAA2AgwMgwMLIABBFUYNMEEAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAyCAwsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwlCyADQRI2AhwgAyAANgIMIAMgAUEBajYCFAyBAwsgA0Evai0AAEEBcUUNAQtBFyECDOYCC0EAIQIgA0EANgIcIAMgATYCFCADQeIXNgIQIANBGTYCDAz+AgsgAEE7Rw0AIAFBAWohAQwMC0EAIQIgA0EANgIcIAMgATYCFCADQZIYNgIQIANBAjYCDAz8AgsgAEEVRg0oQQAhAiADQQA2AhwgAyABNgIUIANB1gw2AhAgA0EjNgIMDPsCCyADQRQ2AhwgAyABNgIUIAMgADYCDAz6AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQz1AgsgA0EVNgIcIAMgADYCDCADIAFBAWo2AhQM+QILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDQiAEUEQCABQQFqIQEM8wILIANBFzYCHCADIAA2AgwgAyABQQFqNgIUDPgCCyAAQRVGDSNBACECIANBADYCHCADIAE2AhQgA0HWDDYCECADQSM2AgwM9wILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDQiAEUEQCABQQFqIQEMHQsgA0EZNgIcIAMgADYCDCADIAFBAWo2AhQM9gILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDQiAEUEQCABQQFqIQEM7wILIANBGjYCHCADIAA2AgwgAyABQQFqNgIUDPUCCyAAQRVGDR9BACECIANBADYCHCADIAE2AhQgA0HQDzYCECADQSI2AgwM9AILIAMoAgQhACADQQA2AgQgAyAAIAEQMyIARQRAIAFBAWohAQwbCyADQRw2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8wILIAMoAgQhACADQQA2AgQgAyAAIAEQMyIARQRAIAFBAWohAQzrAgsgA0EdNgIcIAMgADYCDCADIAFBAWo2AhRBACECDPICCyAAQTtHDQEgAUEBaiEBC0EmIQIM1wILQQAhAiADQQA2AhwgAyABNgIUIANBnxU2AhAgA0EMNgIMDO8CCyABIARHBEADQCABLQAAQSBHDYQCIAQgAUEBaiIBRw0AC0EsIQIM7wILQSwhAgzuAgsgASAERgRAQTQhAgzuAgsCQAJAA0ACQCABLQAAQQprDgQCAAADAAsgBCABQQFqIgFHDQALQTQhAgzvAgsgAygCBCEAIANBADYCBCADIAAgARAxIgBFDZ8CIANBMjYCHCADIAE2AhQgAyAANgIMQQAhAgzuAgsgAygCBCEAIANBADYCBCADIAAgARAxIgBFBEAgAUEBaiEBDJ8CCyADQTI2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM7QILIAEgBEcEQAJAA0AgAS0AAEEwayIAQf8BcUEKTwRAQTohAgzXAgsgAykDICILQpmz5syZs+bMGVYNASADIAtCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAMgCiALfDcDICAEIAFBAWoiAUcNAAtBwAAhAgzuAgsgAygCBCEAIANBADYCBCADIAAgAUEBaiIBEDEiAA0XDOICC0HAACECDOwCCyABIARGBEBByQAhAgzsAgsCQANAAkAgAS0AAEEJaw4YAAKiAqICqQKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASEC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IAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASEC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BCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMpAELIANBADYCHCADIAE2AhQgA0G8CjYCECADQQc2AgxBACECDKMBC0HPACECDIkBC0HRACECDIgBC0HnACECDIcBCyABIARGBEBB+gAhAgygAQsCQCABLQAAQQlrDgQgAAAgAAsgAUEBaiEBQeYAIQIMhgELIAEgBEYEQEH5ACECDJ8BCwJAIAEtAABBCWsOBB8AAB8AC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQRAQeIBIQIMhgELIABBFUcEQCADQQA2AhwgAyABNgIUIANByQ02AhAgA0EaNgIMQQAhAgyfAQsgA0H4ADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDJ4BCyABIARHBEAgA0ENNgIIIAMgATYCBEHkACECDIUBC0H3ACECDJ0BCyABIARGBEBB9gAhAgydAQsCQAJAAkAgAS0AAEHIAGsOCwABCwsLCwsLCwsCCwsgAUEBaiEBQd0AIQIMhQELIAFBAWohAUHgACECDIQBCyABQQFqIQFB4wAhAgyDAQtB9QAhAiABIARGDZsBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbXVAGotAABHDQggAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJwBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIABEAgA0H0ADYCHCADIAE2AhQgAyAANgIMQQAhAgycAQtB4gAhAgyCAQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJwBC0HhACECDIIBCyADQfMANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMmgELIAMtACkiAEEja0ELSQ0JAkAgAEEGSw0AQQEgAHRBygBxRQ0ADAoLQQAhAiADQQA2AhwgAyABNgIUIANB7Qk2AhAgA0EINgIMDJkBC0HyACECIAEgBEYNmAEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBs9UAai0AAEcNBSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMmQELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfEANgIcIAMgATYCFCADIAA2AgxBACECDJkBC0HfACECDH8LQQAhAAJAIAMoAjgiAkUNACACKAI0IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANB6g02AhAgA0EmNgIMQQAhAgyZAQtB3gAhAgx/CyADQfAANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMlwELIAMtAClBIUYNBiADQQA2AhwgAyABNgIUIANBkQo2AhAgA0EINgIMQQAhAgyWAQtB7wAhAiABIARGDZUBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDVAGotAABHDQIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJYBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIARQ0CIANB7QA2AhwgAyABNgIUIAMgADYCDEEAIQIMlQELIANBADYCAAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDYABIANB7gA2AhwgAyABNgIUIAMgADYCDEEAIQIMkwELQdwAIQIMeQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJMBC0HbACECDHkLIANB7AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyRAQsgAy0AKSIAQSNJDQAgAEEuRg0AIANBADYCHCADIAE2AhQgA0HJCTYCECADQQg2AgxBACECDJABC0HaACECDHYLIAEgBEYEQEHrACECDI8BCwJAIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMjwELQdkAIQIMdQsgASAERwRAIANBDjYCCCADIAE2AgRB2AAhAgx1C0HqACECDI0BCyABIARGBEBB6QAhAgyNAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1wAhAgx0CyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeiADQegANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyABIARGBEBB5wAhAgyMAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELQdYAIQIMcgsgASAERgRAQeUAIQIMiwELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDI0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNfSADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeyADQeQANgIcIAMgATYCFCADIAA2AgwMiwELQdQAIQIMcQsgAy0AKUEiRg2GAUHTACECDHALQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALIABFBEBB1QAhAgxwCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQaQNNgIQIANBITYCDEEAIQIMiQELIANB4QA2AhwgAyABNgIUIANB0Bo2AhAgA0EVNgIMQQAhAgyIAQsgASAERgRAQeAAIQIMiAELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HSACECDHALIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIgBCyADQQA2AhwgAyABNgIUIANBthE2AhAgA0EJNgIMQQAhAgyHAQsgASAERgRAQd8AIQIMhwELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBthE2AhAgA0ECNgIMQQAhAgyGAQsgASAERgRAQd0AIQIMhgELIAEtAAAiAkENRgRAIAFBAWohAUHQACECDG0LIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyFAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0HKLTYCECADQQc2AgwMgwELIAEgBEYEQEHbACECDIMBCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc4AIQIMaAsgASAERgRAQdoAIQIMgQELIAEtAABBCWsOBAABAQABC0EAIQIgA0EANgIcIANBmhI2AhAgA0EHNgIMIAMgAUEBajYCFAx/CyADQYASOwEqQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2QA2AhwgAyABNgIUIANB6ho2AhAgA0EVNgIMQQAhAgx+C0HNACECDGQLIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDHwLIAEgBEYEQEHZACECDHwLIAEtAABBIEcNPSABQQFqIQEgAy0ALkEBcQ09IANBADYCHCADIAE2AhQgA0HCHDYCECADQR42AgxBACECDHsLIAEgBEYEQEHYACECDHsLAkACQAJAAkACQCABLQAAIgBBCmsOBAIDAwABCyABQQFqIQFBLCECDGULIABBOkcNASADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgx9CyABQQFqIQEgA0Evai0AAEEBcUUNcyADLQAyQYABcUUEQCADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALAkACQCAADhZNTEsBAQEBAQEBAQEBAQEBAQEBAQEAAQsgA0EpNgIcIAMgATYCFCADQawZNgIQIANBFTYCDEEAIQIMfgsg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c3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw==";
64185
64247
  var wasmBuffer;
64186
64248
  Object.defineProperty(module2, "exports", {
64187
64249
  get: () => {
64188
- return wasmBuffer ? wasmBuffer : wasmBuffer = Buffer3.from(wasmBase64, "base64");
64250
+ return wasmBuffer ? wasmBuffer : wasmBuffer = Buffer4.from(wasmBase64, "base64");
64189
64251
  }
64190
64252
  });
64191
64253
  }
@@ -64195,12 +64257,12 @@ var require_llhttp_wasm = __commonJS({
64195
64257
  var require_llhttp_simd_wasm = __commonJS({
64196
64258
  "node_modules/undici/lib/llhttp/llhttp_simd-wasm.js"(exports2, module2) {
64197
64259
  "use strict";
64198
- var { Buffer: Buffer3 } = __require("node:buffer");
64260
+ var { Buffer: Buffer4 } = __require("node:buffer");
64199
64261
  var wasmBase64 = "AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgLhocCAwd/A34BeyABIAJqIQQCQCAAIgMoAgwiAA0AIAMoAgQEQCADIAE2AgQLIwBBEGsiCSQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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DAgLQeMBDAcLQdcBDAYLQdgBDAULQdkBDAQLQdoBDAMLQdsBDAILQd0BDAELQdwBCyECA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAn8CQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAwJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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A0EXNgIcIAMgADYCDCADIAFBAWo2AhQM+AILIABBFUYNI0EAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAz3AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwdCyADQRk2AhwgAyAANgIMIAMgAUEBajYCFAz2AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQzvAgsgA0EaNgIcIAMgADYCDCADIAFBAWo2AhQM9QILIABBFUYNH0EAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAz0AgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDBsLIANBHDYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgzzAgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDOsCCyADQR02AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8gILIABBO0cNASABQQFqIQELQSYhAgzXAgtBACECIANBADYCHCADIAE2AhQgA0GfFTYCECADQQw2AgwM7wILIAEgBEcEQANAIAEtAABBIEcNhAIgBCABQQFqIgFHDQALQSwhAgzvAgtBLCECDO4CCyABIARGBEBBNCECDO4CCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtBNCECDO8CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNnwIgA0EyNgIcIAMgATYCFCADIAA2AgxBACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUEQCABQQFqIQEMnwILIANBMjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgztAgsgASAERwRAAkADQCABLQAAQTBrIgBB/wFxQQpPBEBBOiECDNcCCyADKQMgIgtCmbPmzJmz5swZVg0BIAMgC0IKfiIKNwMgIAogAK1C/wGDIgtCf4VWDQEgAyAKIAt8NwMgIAQgAUEBaiIBRw0AC0HAACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABQQFqIgEQMSIADRcM4gILQcAAIQIM7AILIAEgBEYEQEHJACECDOwCCwJAA0ACQCABLQAAQQlrDhgAAqICogKpAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAgCiAgsgBCABQQFqIgFHDQALQckAIQIM7AILIAFBAWohASADQS9qLQAAQQFxDaUCIANBADYCHCADIAE2AhQgA0GXEDYCECADQQo2AgxBACECDOsCCyABIARHBEADQCABLQAAQSBHDRUgBCABQQFqIgFHDQALQfgAIQIM6wILQfgAIQIM6gILIANBAjoAKAw4C0EAIQIgA0EANgIcIANBvws2AhAgA0ECNgIMIAMgAUEBajYCFAzoAgtBACECDM4CC0ENIQIMzQILQRMhAgzMAgtBFSECDMsCC0EWIQIMygILQRghAgzJAgtBGSECDMgCC0EaIQIMxwILQRshAgzGAgtBHCECDMUCC0EdIQIMxAILQR4hAgzDAgtBHyECDMICC0EgIQIMwQILQSIhAgzAAgtBIyECDL8CC0ElIQIMvgILQeUAIQIMvQILIANBPTYCHCADIAE2AhQgAyAANgIMQQAhAgzVAgsgA0EbNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIM1AILIANBIDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNMCCyADQRM2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzSAgsgA0ELNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0QILIANBEDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNACCyADQSA2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzPAgsgA0ELNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzgILIANBDDYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM0CC0EAIQIgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDAzMAgsCQANAAkAgAS0AAEEKaw4EAAICAAILIAQgAUEBaiIBRw0AC0H9ASECDMwCCwJAAkAgAy0ANkEBRw0AQQAhAAJAIAMoAjgiAkUNACACKAJgIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB/AE2AhwgAyABNgIUIANB3Bk2AhAgA0EVNgIMQQAhAgzNAgtB3AEhAgyzAgsgA0EANgIcIAMgATYCFCADQfkLNgIQIANBHzYCDEEAIQIMywILAkACQCADLQAoQQFrDgIEAQALQdsBIQIMsgILQdQBIQIMsQILIANBAjoAMUEAIQACQCADKAI4IgJFDQAgAigCACICRQ0AIAMgAhEAACEACyAARQRAQd0BIQIMsQILIABBFUcEQCADQQA2AhwgAyABNgIUIANBtAw2AhAgA0EQNgIMQQAhAgzKAgsgA0H7ATYCHCADIAE2AhQgA0GBGjYCECADQRU2AgxBACECDMkCCyABIARGBEBB+gEhAgzJAgsgAS0AAEHIAEYNASADQQE6ACgLQcABIQIMrgILQdoBIQIMrQILIAEgBEcEQCADQQw2AgggAyABNgIEQdkBIQIMrQILQfkBIQIMxQILIAEgBEYEQEH4ASECDMUCCyABLQAAQcgARw0EIAFBAWohAUHYASECDKsCCyABIARGBEBB9wEhAgzEAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQdYBIQIMqwILIAFBAWohAUHXASECDKoCC0H2ASECIAEgBEYNwgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABButUAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMwwILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgBFBEBB4wEhAgyqAgsgA0H1ATYCHCADIAE2AhQgAyAANgIMQQAhAgzCAgtB9AEhAiABIARGDcECIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjVAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMICCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB5R82AhAgA0EINgIMDL8CC0HVASECDKUCCyADQfMBNgIcIAMgATYCFCADIAA2AgxBACECDL0CC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ1uIABBFUcEQCADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgy9AgsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDLwCCyABIARHBEAgA0ENNgIIIAMgATYCBEHTASECDKMCC0HyASECDLsCCyABIARGBEBB8QEhAgy7AgsCQAJAAkAgAS0AAEHIAGsOCwABCAgICAgICAgCCAsgAUEBaiEBQdABIQIMowILIAFBAWohAUHRASECDKICCyABQQFqIQFB0gEhAgyhAgtB8AEhAiABIARGDbkCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEG11QBqLQAARw0EIABBAkYNAyAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy5AgtB7wEhAiABIARGDbgCIAMoAgAiACAEIAFraiEGIAEgAGtBAWohBQNAIAEtAAAgAEGz1QBqLQAARw0DIABBAUYNAiAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy4AgtB7gEhAiABIARGDbcCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEGw1QBqLQAARw0CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy3AgsgAygCBCEAIANCADcDACADIAAgBUEBaiIBECsiAEUNAiADQewBNgIcIAMgATYCFCADIAA2AgxBACECDLYCCyADQQA2AgALIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ2cAiADQe0BNgIcIAMgATYCFCADIAA2AgxBACECDLQCC0HPASECDJoCC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMtAILQc4BIQIMmgILIANB6wE2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyyAgsgASAERgRAQesBIQIMsgILIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMsQILQc0BIQIMlwILIAEgBEcEQCADQQ42AgggAyABNgIEQcwBIQIMlwILQeoBIQIMrwILIAEgBEYEQEHpASECDK8CCyABLQAAQTBrIgBB/wFxQQpJBEAgAyAAOgAqIAFBAWohAUHLASECDJYCCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNlwIgA0HoATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgASAERgRAQecBIQIMrgILAkAgAS0AAEEuRgRAIAFBAWohAQwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmAIgA0HmATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgtBygEhAgyUAgsgASAERgRAQeUBIQIMrQILQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDK8CCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmgIgA0HjATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5AE2AhwgAyABNgIUIAMgADYCDAytAgtByQEhAgyTAgtBACEAAkAgAygCOCICRQ0AIAIoAkQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GkDTYCECADQSE2AgxBACECDK0CC0HIASECDJMCCyADQeEBNgIcIAMgATYCFCADQdAaNgIQIANBFTYCDEEAIQIMqwILIAEgBEYEQEHhASECDKsCCwJAIAEtAABBIEYEQCADQQA7ATQgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GZETYCECADQQk2AgxBACECDKsCC0HHASECDJECCyABIARGBEBB4AEhAgyqAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKsCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyqAgtBxgEhAgyQAgsgASAERgRAQd8BIQIMqQILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyqAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqQILQcUBIQIMjwILIAEgBEYEQEHeASECDKgCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqQILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKgCC0HEASECDI4CCyABIARGBEBB3QEhAgynAgsCQAJAAkACQCABLQAAQQprDhcCAwMAAwMDAwMDAwMDAwMDAwMDAwMDAQMLIAFBAWoMBQsgAUEBaiEBQcMBIQIMjwILIAFBAWohASADQS9qLQAAQQFxDQggA0EANgIcIAMgATYCFCADQY0LNgIQIANBDTYCDEEAIQIMpwILIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKYCCyABIARHBEAgA0EPNgIIIAMgATYCBEEBIQIMjQILQdwBIQIMpQILAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0HbASECDKYCCyADKAIEIQAgA0EANgIEIAMgACABEC0iAEUEQCABQQFqIQEMBAsgA0HaATYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgylAgsgAygCBCEAIANBADYCBCADIAAgARAtIgANASABQQFqCyEBQcEBIQIMigILIANB2QE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMogILQcIBIQIMiAILIANBL2otAABBAXENASADQQA2AhwgAyABNgIUIANB5Bw2AhAgA0EZNgIMQQAhAgygAgsgASAERgRAQdkB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CyADIAU2AgAMkAILIANBADYCACAGQQFqIQFBGgw8C0HKASECIAEgBEYNjgIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBjdUAai0AAEcNOyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjwILIANBADYCACAGQQFqIQFBIQw7CyABIARGBEBByQEhAgyOAgsCQAJAIAEtAABBwQBrDhQAPT09PT09PT09PT09PT09PT09AT0LIAFBAWohAUGtASECDPUBCyABQQFqIQFBsAEhAgz0AQsgASAERgRAQcgBIQIMjQILAkACQCABLQAAQdUAaw4LADw8PDw8PDw8PAE8CyABQQFqIQFBrgEhAgz0AQsgAUEBaiEBQa8BIQIM8wELQccBIQIgASAERg2LAiADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw04IABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyMAgsgA0EANgIAIAZBAWohAUEqDDgLIAEgBEYEQEHGASECDIsCCyABLQAAQdAARw04IAFBAWohAUElDDcLQcUBIQIgASAERg2JAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGB1QBqLQAARw02IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyKAgsgA0EANgIAIAZBAWohAUEODDYLIAEgBEYEQEHEASECDIkCCyABLQAAQcUARw02IAFBAWohAUGrASECDO8BCyABIARGBEBBwwEhAgyIAgsCQAJAAkACQCABLQAAQcIAaw4PAAECOTk5OTk5OTk5OTkDOQsgAUEBaiEBQacBIQIM8QELIAFBAWohAUGoASECDPABCyABQQFqIQFBqQEhAgzvAQsgAUEBaiEBQaoBIQIM7gELQcIBIQIgASAERg2GAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEH+1ABqLQAARw0zIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyHAgsgA0EANgIAIAZBAWohAUEUDDMLQcEBIQIgASAERg2FAiADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANA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BTYCAAzsAQsgA0EANgIAIAZBAWohAUEXDBgLQaYBIQIgASAERg3qASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHB1ABqLQAARw0XIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzrAQsgA0EANgIAIAZBAWohAUEYDBcLIAEgBEYEQEGlASECDOoBCwJAAkAgAS0AAEHJAGsOBwAZGRkZGQEZCyABQQFqIQFBiwEhAgzRAQsgAUEBaiEBQYwBIQIM0AELQaQBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw0VIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEJDBULQaMBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw0UIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEfDBQLQaIBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEG+1ABqLQAARw0TIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUECDBMLQaEBIQIgASAERg3lASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYDQCABLQAAIABBvNQAai0AAEcNESAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5QELIAEgBEYEQEGgASECDOUBC0EBIAEtAABB3wBHDREaIAFBAWohAUGHASECDMsBCyADQQA2AgAgBkEBaiEBQYgBIQIMygELQZ8BIQIgASAERg3iASADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw0PIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzjAQsgA0EANgIAIAZBAWohAUEpDA8LQZ4BIQIgASAERg3hASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEG41ABqLQAARw0OIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAziAQsgA0EANgIAIAZBAWohAUEtDA4LIAEgBEYEQEGdASECDOEBCyABLQAAQcUARw0OIAFBAWohAUGEASECDMcBCyABIARGBEBBnAEhAgzgAQsCQAJAIAEtAABBzABrDggADw8PDw8PAQ8LIAFBAWohAUGCASECDMcBCyABQQFqIQFBgwEhAgzGAQtBmwEhAiABIARGDd4BIAMoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQbPUAGotAABHDQsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN8BCyADQQA2AgAgBkEBaiEBQSMMCwtBmgEhAiABIARGDd0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDUAGotAABHDQogAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN4BCyADQQA2AgAgBkEBaiEBQQAMCgsgASAERgRAQZkBIQIM3QELAkACQCABLQAAQcgAaw4IAAwMDAwMDAEMCyABQQFqIQFB/QAhAgzEAQsgAUEBaiEBQYABIQIMwwELIAEgBEYEQEGYASECDNwBCwJAAkAgAS0AAEHOAGsOAwALAQsLIAFBAWohAUH+ACECDMMBCyABQQFqIQFB/wAhAgzCAQsgASAERgRAQZcBIQIM2wELIAEtAABB2QBHDQggAUEBaiEBQQgMBwtBlgEhAiABIARGDdkBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazUAGotAABHDQYgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNoBCyADQQA2AgAgBkEBaiEBQQUMBgtBlQEhAiABIARGDdgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQabUAGotAABHDQUgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNkBCyADQQA2AgAgBkEBaiEBQRYMBQtBlAEhAiABIARGDdcBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDQQgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyADQQA2AgAgBkEBaiEBQRAMBAsgASAERgRAQZMBIQIM1wELAkACQCABLQAAQcMAaw4MAAYGBgYGBgYGBgYBBgsgAUEBaiEBQfkAIQIMvgELIAFBAWohAUH6ACECDL0BC0GSASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBoNQAai0AAEcNAiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBJAwCCyADQQA2AgAMAgsgASAERgRAQZEBIQIM1AELIAEtAABBzABHDQEgAUEBaiEBQRMLOgApIAMoAgQhACADQQA2AgQgAyAAIAEQLiIADQIMAQtBACECIANBADYCHCADIAE2AhQgA0H+HzYCECADQQY2AgwM0QELQfgAIQIMtwELIANBkAE2AhwgAyABNgIUIAMgADYCDEEAIQIMzwELQQAhAAJAIAMoAjgiAkUNACACKAJAIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GCDzYCECADQSA2AgxBACECDM4BC0H3ACECDLQBCyADQY8BNgIcIAMgATYCFCADQewbNgIQIANBFTYCDEEAIQIMzAELIAEgBEYEQEGPASECDMwBCwJAIAEtAABBIEYEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQZsfNgIQIANBBjYCDEEAIQIMzAELQQIhAgyyAQsDQCABLQAAQSBHDQIgBCABQQFqIgFHDQALQY4BIQIMygELIAEgBEYEQEGNASECDMoBCwJAIAEtAABBCWsOBEoAAEoAC0H1ACECDLABCyADLQApQQVGBEBB9gAhAgywAQtB9AAhAgyvAQsgASAERgRAQYwBIQIMyAELIANBEDYCCCADIAE2AgQMCgsgASAERgRAQYsBIQIMxwELAkAgAS0AAEEJaw4ERwAARwALQfMAIQIMrQELIAEgBEcEQCADQRA2AgggAyABNgIEQfEAIQIMrQELQYoBIQIMxQELAkAgASAERwRAA0AgAS0AAEGg0ABqLQAAIgBBA0cEQAJAIABBAWsOAkkABAtB8AAhAgyvAQsgBCABQQFqIgFHDQALQYgBIQIMxgELQYgBIQIMxQELIANBADYCHCADIAE2AhQgA0HbIDYCECADQQc2AgxBACECDMQBCyABIARGBEBBiQEhAgzEAQsCQAJAAkAgAS0AAEGg0gBqLQAAQQFrDgNGAgABC0HyACECDKwBCyADQQA2AhwgAyABNgIUIANBtBI2AhAgA0EHNgIMQQAhAgzEAQtB6gAhAgyqAQsgASAERwRAIAFBAWohAUHvACECDKoBC0GHASECDMIBCyAEIAEiAEYEQEGGASECDMIBCyAALQAAIgFBL0YEQCAAQQFqIQFB7gAhAgypAQsgAUEJayICQRdLDQEgACEBQQEgAnRBm4CABHENQQwBCyAEIAEiAEYEQEGFASECDMEBCyAALQAAQS9HDQAgAEEBaiEBDAMLQQAhAiADQQA2AhwgAyAANgIUIANB2yA2AhAgA0EHNgIMDL8BCwJAAkACQAJAAkADQCABLQAAQaDOAGotAAAiAEEFRwRAAkACQCAAQQFrDghHBQYHCAAEAQgLQesAIQIMrQELIAFBAWohAUHtACECDKwBCyAEIAFBAWoiAUcNAAtBhAEhAgzDAQsgAUEBagwUCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDMEBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDMABCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDL8BCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy+AQsgASAERgRAQYMBIQIMvgELAkAgAS0AAEGgzgBqLQAAQQFrDgg+BAUGAAgCAwcLIAFBAWohAQtBAyECDKMBCyABQQFqDA0LQQAhAiADQQA2AhwgA0HREjYCECADQQc2AgwgAyABQQFqNgIUDLoBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDLkBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDLgBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDLcBCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy2AQtB7AAhAgycAQsgASAERgRAQYIBIQIMtQELIAFBAWoMAgsgASAERgRAQYEBIQIMtAELIAFBAWoMAQsgASAERg0BIAFBAWoLIQFBBCECDJgBC0GAASECDLABCwNAIAEtAABBoMwAai0AACIAQQJHBEAgAEEBRwRAQekAIQIMmQELDDELIAQgAUEBaiIBRw0AC0H/ACECDK8BCyABIARGBEBB/gAhAgyvAQsCQCABLQAAQQlrDjcvAwYvBAYGBgYGBgYGBgYGBgYGBgYGBgUGBgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYABgsgAUEBagshAUEFIQIMlAELIAFBAWoMBgsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgypAQsgA0EANgIcIAMgATYCFCADQY0UNgIQIANBBzYCDEEAIQIMqAELAkACQAJAAkADQCABLQAAQaDKAGotAAAiAEEFRwRAAkAgAEEBaw4GLgMEBQYABgtB6AAhAgyUAQsgBCABQQFqIgFHDQALQf0AIQIMqwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMqgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMqQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMqAELIANBADYCHCADIAE2AhQgA0HkCDYCECADQQc2AgxBACECDKcBCyABIARGDQEgAUEBagshAUEGIQIMjAELQfwAIQIMpAELAkACQAJAAkADQCABLQAAQaDIAGotAAAiAEEFRwRAIABBAWsOBCkCAwQFCyAEIAFBAWoiAUcNAAtB+wAhAgynAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgymAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgylAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgykAQsgA0EANgIcIAMgATYCFCADQbwKNgIQIANBBzYCDEEAIQIMowELQc8AIQIMiQELQdEAIQIMiAELQecAIQIMhwELIAEgBEYEQEH6ACECDKABCwJAIAEtAABBCWsOBCAAACAACyABQQFqIQFB5gAhAgyGAQsgASAERgRAQfkAIQIMnwELAkAgAS0AAEEJaw4EHwAAHwALQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFBEBB4gEhAgyGAQsgAEEVRwRAIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDJ8BCyADQfgANgIcIAMgATYCFCADQeoaNgIQIANBFTYCDEEAIQIMngELIAEgBEcEQCADQQ02AgggAyABNgIEQeQAIQIMhQELQfcAIQIMnQELIAEgBEYEQEH2ACECDJ0BCwJAAkACQCABLQAAQcgAaw4LAAELCwsLCwsLCwILCyABQQFqIQFB3QAhAgyFAQsgAUEBaiEBQeAAIQIMhAELIAFBAWohAUHjACECDIMBC0H1ACECIAEgBEYNmwEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBtdUAai0AAEcNCCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMnAELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfQANgIcIAMgATYCFCADIAA2AgxBACECDJwBC0HiACECDIIBC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMnAELQeEAIQIMggELIANB8wA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyaAQsgAy0AKSIAQSNrQQtJDQkCQCAAQQZLDQBBASAAdEHKAHFFDQAMCgtBACECIANBADYCHCADIAE2AhQgA0HtCTYCECADQQg2AgwMmQELQfIAIQIgASAERg2YASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGz1QBqLQAARw0FIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAQsgAygCBCEAIANCADcDACADIAAgBkEBaiIBECsiAARAIANB8QA2AhwgAyABNgIUIAMgADYCDEEAIQIMmQELQd8AIQIMfwtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJkBC0HeACECDH8LIANB8AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyXAQsgAy0AKUEhRg0GIANBADYCHCADIAE2AhQgA0GRCjYCECADQQg2AgxBACECDJYBC0HvACECIAEgBEYNlQEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMlgELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgBFDQIgA0HtADYCHCADIAE2AhQgAyAANgIMQQAhAgyVAQsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNgAEgA0HuADYCHCADIAE2AhQgAyAANgIMQQAhAgyTAQtB3AAhAgx5C0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMkwELQdsAIQIMeQsgA0HsADYCHCADIAE2AhQgA0GAGzYCECADQRU2AgxBACECDJEBCyADLQApIgBBI0kNACAAQS5GDQAgA0EANgIcIAMgATYCFCADQckJNgIQIANBCDYCDEEAIQIMkAELQdoAIQIMdgsgASAERgRAQesAIQIMjwELAkAgAS0AAEEvRgRAIAFBAWohAQwBCyAD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ciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw==";
64200
64262
  var wasmBuffer;
64201
64263
  Object.defineProperty(module2, "exports", {
64202
64264
  get: () => {
64203
- return wasmBuffer ? wasmBuffer : wasmBuffer = Buffer3.from(wasmBase64, "base64");
64265
+ return wasmBuffer ? wasmBuffer : wasmBuffer = Buffer4.from(wasmBase64, "base64");
64204
64266
  }
64205
64267
  });
64206
64268
  }
@@ -90367,15 +90429,15 @@ var require_generators = __commonJS({
90367
90429
  var stack = new Error().stack;
90368
90430
  return function() {
90369
90431
  var generator = generatorFunction.apply(this, arguments);
90370
- var spawn15 = new PromiseSpawn$(
90432
+ var spawn16 = new PromiseSpawn$(
90371
90433
  void 0,
90372
90434
  void 0,
90373
90435
  yieldHandler,
90374
90436
  stack
90375
90437
  );
90376
- var ret2 = spawn15.promise();
90377
- spawn15._generator = generator;
90378
- spawn15._promiseFulfilled(void 0);
90438
+ var ret2 = spawn16.promise();
90439
+ spawn16._generator = generator;
90440
+ spawn16._promiseFulfilled(void 0);
90379
90441
  return ret2;
90380
90442
  };
90381
90443
  };
@@ -90390,9 +90452,9 @@ var require_generators = __commonJS({
90390
90452
  if (typeof generatorFunction !== "function") {
90391
90453
  return apiRejection("generatorFunction must be a function\n\n See http://goo.gl/MqrFmX\n");
90392
90454
  }
90393
- var spawn15 = new PromiseSpawn(generatorFunction, this);
90394
- var ret2 = spawn15.promise();
90395
- spawn15._run(Promise2.spawn);
90455
+ var spawn16 = new PromiseSpawn(generatorFunction, this);
90456
+ var ret2 = spawn16.promise();
90457
+ spawn16._run(Promise2.spawn);
90396
90458
  return ret2;
90397
90459
  };
90398
90460
  };
@@ -92471,33 +92533,33 @@ var require_stream2 = __commonJS({
92471
92533
  var require_safe_buffer = __commonJS({
92472
92534
  "node_modules/safe-buffer/index.js"(exports2, module2) {
92473
92535
  var buffer = __require("buffer");
92474
- var Buffer3 = buffer.Buffer;
92536
+ var Buffer4 = buffer.Buffer;
92475
92537
  function copyProps(src, dst) {
92476
92538
  for (var key in src) {
92477
92539
  dst[key] = src[key];
92478
92540
  }
92479
92541
  }
92480
- if (Buffer3.from && Buffer3.alloc && Buffer3.allocUnsafe && Buffer3.allocUnsafeSlow) {
92542
+ if (Buffer4.from && Buffer4.alloc && Buffer4.allocUnsafe && Buffer4.allocUnsafeSlow) {
92481
92543
  module2.exports = buffer;
92482
92544
  } else {
92483
92545
  copyProps(buffer, exports2);
92484
92546
  exports2.Buffer = SafeBuffer;
92485
92547
  }
92486
92548
  function SafeBuffer(arg, encodingOrOffset, length) {
92487
- return Buffer3(arg, encodingOrOffset, length);
92549
+ return Buffer4(arg, encodingOrOffset, length);
92488
92550
  }
92489
- copyProps(Buffer3, SafeBuffer);
92551
+ copyProps(Buffer4, SafeBuffer);
92490
92552
  SafeBuffer.from = function(arg, encodingOrOffset, length) {
92491
92553
  if (typeof arg === "number") {
92492
92554
  throw new TypeError("Argument must not be a number");
92493
92555
  }
92494
- return Buffer3(arg, encodingOrOffset, length);
92556
+ return Buffer4(arg, encodingOrOffset, length);
92495
92557
  };
92496
92558
  SafeBuffer.alloc = function(size2, fill, encoding) {
92497
92559
  if (typeof size2 !== "number") {
92498
92560
  throw new TypeError("Argument must be a number");
92499
92561
  }
92500
- var buf = Buffer3(size2);
92562
+ var buf = Buffer4(size2);
92501
92563
  if (fill !== void 0) {
92502
92564
  if (typeof encoding === "string") {
92503
92565
  buf.fill(fill, encoding);
@@ -92513,7 +92575,7 @@ var require_safe_buffer = __commonJS({
92513
92575
  if (typeof size2 !== "number") {
92514
92576
  throw new TypeError("Argument must be a number");
92515
92577
  }
92516
- return Buffer3(size2);
92578
+ return Buffer4(size2);
92517
92579
  };
92518
92580
  SafeBuffer.allocUnsafeSlow = function(size2) {
92519
92581
  if (typeof size2 !== "number") {
@@ -92649,7 +92711,7 @@ var require_BufferList = __commonJS({
92649
92711
  throw new TypeError("Cannot call a class as a function");
92650
92712
  }
92651
92713
  }
92652
- var Buffer3 = require_safe_buffer().Buffer;
92714
+ var Buffer4 = require_safe_buffer().Buffer;
92653
92715
  var util2 = __require("util");
92654
92716
  function copyBuffer(src, target, offset) {
92655
92717
  src.copy(target, offset);
@@ -92696,8 +92758,8 @@ var require_BufferList = __commonJS({
92696
92758
  return ret2;
92697
92759
  };
92698
92760
  BufferList.prototype.concat = function concat2(n) {
92699
- if (this.length === 0) return Buffer3.alloc(0);
92700
- var ret2 = Buffer3.allocUnsafe(n >>> 0);
92761
+ if (this.length === 0) return Buffer4.alloc(0);
92762
+ var ret2 = Buffer4.allocUnsafe(n >>> 0);
92701
92763
  var p = this.head;
92702
92764
  var i = 0;
92703
92765
  while (p) {
@@ -92817,14 +92879,14 @@ var require_stream_writable = __commonJS({
92817
92879
  deprecate: require_node()
92818
92880
  };
92819
92881
  var Stream3 = require_stream2();
92820
- var Buffer3 = require_safe_buffer().Buffer;
92882
+ var Buffer4 = require_safe_buffer().Buffer;
92821
92883
  var OurUint8Array = (typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() {
92822
92884
  };
92823
92885
  function _uint8ArrayToBuffer(chunk2) {
92824
- return Buffer3.from(chunk2);
92886
+ return Buffer4.from(chunk2);
92825
92887
  }
92826
92888
  function _isUint8Array(obj2) {
92827
- return Buffer3.isBuffer(obj2) || obj2 instanceof OurUint8Array;
92889
+ return Buffer4.isBuffer(obj2) || obj2 instanceof OurUint8Array;
92828
92890
  }
92829
92891
  var destroyImpl = require_destroy();
92830
92892
  util2.inherits(Writable2, Stream3);
@@ -92946,7 +93008,7 @@ var require_stream_writable = __commonJS({
92946
93008
  var state = this._writableState;
92947
93009
  var ret2 = false;
92948
93010
  var isBuf = !state.objectMode && _isUint8Array(chunk2);
92949
- if (isBuf && !Buffer3.isBuffer(chunk2)) {
93011
+ if (isBuf && !Buffer4.isBuffer(chunk2)) {
92950
93012
  chunk2 = _uint8ArrayToBuffer(chunk2);
92951
93013
  }
92952
93014
  if (typeof encoding === "function") {
@@ -92982,7 +93044,7 @@ var require_stream_writable = __commonJS({
92982
93044
  };
92983
93045
  function decodeChunk(state, chunk2, encoding) {
92984
93046
  if (!state.objectMode && state.decodeStrings !== false && typeof chunk2 === "string") {
92985
- chunk2 = Buffer3.from(chunk2, encoding);
93047
+ chunk2 = Buffer4.from(chunk2, encoding);
92986
93048
  }
92987
93049
  return chunk2;
92988
93050
  }
@@ -93325,14 +93387,14 @@ var require_stream_readable = __commonJS({
93325
93387
  return emitter.listeners(type).length;
93326
93388
  };
93327
93389
  var Stream3 = require_stream2();
93328
- var Buffer3 = require_safe_buffer().Buffer;
93390
+ var Buffer4 = require_safe_buffer().Buffer;
93329
93391
  var OurUint8Array = (typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() {
93330
93392
  };
93331
93393
  function _uint8ArrayToBuffer(chunk2) {
93332
- return Buffer3.from(chunk2);
93394
+ return Buffer4.from(chunk2);
93333
93395
  }
93334
93396
  function _isUint8Array(obj2) {
93335
- return Buffer3.isBuffer(obj2) || obj2 instanceof OurUint8Array;
93397
+ return Buffer4.isBuffer(obj2) || obj2 instanceof OurUint8Array;
93336
93398
  }
93337
93399
  var util2 = Object.create(require_util8());
93338
93400
  util2.inherits = require_inherits();
@@ -93431,7 +93493,7 @@ var require_stream_readable = __commonJS({
93431
93493
  if (typeof chunk2 === "string") {
93432
93494
  encoding = encoding || state.defaultEncoding;
93433
93495
  if (encoding !== state.encoding) {
93434
- chunk2 = Buffer3.from(chunk2, encoding);
93496
+ chunk2 = Buffer4.from(chunk2, encoding);
93435
93497
  encoding = "";
93436
93498
  }
93437
93499
  skipChunkCheck = true;
@@ -93455,7 +93517,7 @@ var require_stream_readable = __commonJS({
93455
93517
  if (er) {
93456
93518
  stream.emit("error", er);
93457
93519
  } else if (state.objectMode || chunk2 && chunk2.length > 0) {
93458
- if (typeof chunk2 !== "string" && !state.objectMode && Object.getPrototypeOf(chunk2) !== Buffer3.prototype) {
93520
+ if (typeof chunk2 !== "string" && !state.objectMode && Object.getPrototypeOf(chunk2) !== Buffer4.prototype) {
93459
93521
  chunk2 = _uint8ArrayToBuffer(chunk2);
93460
93522
  }
93461
93523
  if (addToFront) {
@@ -93947,7 +94009,7 @@ var require_stream_readable = __commonJS({
93947
94009
  return ret2;
93948
94010
  }
93949
94011
  function copyFromBuffer(n, list3) {
93950
- var ret2 = Buffer3.allocUnsafe(n);
94012
+ var ret2 = Buffer4.allocUnsafe(n);
93951
94013
  var p = list3.head;
93952
94014
  var c = 1;
93953
94015
  p.data.copy(ret2);
@@ -153754,9 +153816,9 @@ var init_pdf = __esm({
153754
153816
  ((module2, __unused_webpack_exports, __webpack_require__3) => {
153755
153817
  var globalThis2 = __webpack_require__3(4576);
153756
153818
  var userAgent = __webpack_require__3(2839);
153757
- var process21 = globalThis2.process;
153819
+ var process22 = globalThis2.process;
153758
153820
  var Deno2 = globalThis2.Deno;
153759
- var versions = process21 && process21.versions || Deno2 && Deno2.version;
153821
+ var versions = process22 && process22.versions || Deno2 && Deno2.version;
153760
153822
  var v8 = versions && versions.v8;
153761
153823
  var match, version4;
153762
153824
  if (v8) {
@@ -180456,6 +180518,19 @@ var init_en = __esm({
180456
180518
  chatReasoningEffort: "Chat Reasoning Effort:",
180457
180519
  advancedModel: "Advanced Model(Type to search):",
180458
180520
  basicModel: "Basic Model(Type to search):",
180521
+ supportsVision: "Current Model Supports Vision:",
180522
+ supportsVisionYes: "Yes",
180523
+ supportsVisionNo: "No, configure a dedicated vision model",
180524
+ visionConfig: "Vision Model Configuration:",
180525
+ visionConfigTitle: "Vision Model Configuration",
180526
+ visionConfigSubtitle: "Configure an independent vision model URL, API key, request method, and model for a primary model without vision support",
180527
+ visionConfigOpenHint: "(Press Enter to enter, Esc to return to main configuration)",
180528
+ visionConfigNavigationHint: "\u2191\u2193 Navigate \xB7 Enter edit/select \xB7 Esc return to main configuration \xB7 Ctrl+S save",
180529
+ visionBaseUrl: "Vision Model URL:",
180530
+ visionBaseUrlMode: "Vision Model URL Mode:",
180531
+ visionApiKey: "Vision Model API Key:",
180532
+ visionRequestMethod: "Vision Model Request Method:",
180533
+ visionModel: "Vision Model(Type to search):",
180459
180534
  maxContextTokens: "Max Context Tokens:",
180460
180535
  maxTokens: "Max Tokens:",
180461
180536
  streamIdleTimeoutSec: "Stream Idle Timeout(sec):",
@@ -180808,6 +180883,7 @@ var init_en = __esm({
180808
180883
  help: "Show keyboard shortcuts and help information",
180809
180884
  clear: "Clear chat context and conversation history",
180810
180885
  copyLast: "Copy last AI message to clipboard",
180886
+ delSession: "Delete the current session and clear the screen",
180811
180887
  resume: "Resume a conversation",
180812
180888
  mcp: "Show Model Context Protocol services and tools",
180813
180889
  yolo: "Toggle unattended mode (auto-approve all tools)",
@@ -180823,7 +180899,7 @@ var init_en = __esm({
180823
180899
  roleSubagent: "Customize sub-agent prompts with ROLE-{name}.md files. Use -l to list, -d to delete",
180824
180900
  usage: "View token usage statistics with interactive charts",
180825
180901
  export: "Export chat conversation to text file with save dialog",
180826
- config: "Export or import Snow CLI YAML configuration. Usage: /config [export|import]",
180902
+ config: "Export or import Snow CLI YAML configuration. Usage: /config <export|import>",
180827
180903
  custom: "Add custom command and save to ~/.snow/commands",
180828
180904
  skills: "Create skill template with documentation and examples",
180829
180905
  skillsPicker: "Pick a skill and inject its SKILL.md content into the input",
@@ -180865,6 +180941,10 @@ var init_en = __esm({
180865
180941
  copyFailedPrefix: "\u2717 Failed to copy to clipboard",
180866
180942
  unknownError: "Unknown error"
180867
180943
  },
180944
+ delSessionFeedback: {
180945
+ noCurrentSession: "No current session to delete.",
180946
+ deleteFailed: "Failed to delete the current session."
180947
+ },
180868
180948
  // Command output messages (for command execution results)
180869
180949
  commandOutput: {
180870
180950
  // Auto-format command messages
@@ -180915,7 +180995,7 @@ var init_en = __esm({
180915
180995
  importSuccess: "Configuration imported successfully from:\n{path}\nImported: {imported}\nSkipped: {skipped}",
180916
180996
  importFailed: "Configuration import failed: {error}",
180917
180997
  none: "none",
180918
- usage: "Usage: /config [export|import]",
180998
+ usage: "Usage: /config <export|import>",
180919
180999
  unknownError: "Unknown error"
180920
181000
  },
180921
181001
  // IDE command messages
@@ -181318,6 +181398,11 @@ var init_en = __esm({
181318
181398
  commandMessage: "Command",
181319
181399
  discontinuedMessage: "\u2514\u2500 user discontinue",
181320
181400
  aiCompletionTimeMessage: "\u2514\u2500 AI finished at {time}",
181401
+ compressionSummaryAutoTitle: "Auto-compressed summary collapsed",
181402
+ compressionSummaryManualTitle: "Manual compressed summary collapsed",
181403
+ compressionSummaryStats: "{lines} lines \xB7 {chars} chars",
181404
+ compressionSummaryPreviewPrefix: "Preview",
181405
+ compressionSummaryOriginalSaved: "Display only; original text is fully preserved",
181321
181406
  // File operations
181322
181407
  fileCreated: "Created",
181323
181408
  fileModified: "Modified",
@@ -182273,6 +182358,19 @@ var init_zh = __esm({
182273
182358
  chatReasoningEffort: "Chat \u601D\u8003\u5F3A\u5EA6:",
182274
182359
  advancedModel: "\u9AD8\u7EA7\u6A21\u578B(\u952E\u5165\u53EF\u641C\u7D22):",
182275
182360
  basicModel: "\u57FA\u7840\u6A21\u578B(\u952E\u5165\u53EF\u641C\u7D22):",
182361
+ supportsVision: "\u5F53\u524D\u6A21\u578B\u652F\u6301\u89C6\u89C9:",
182362
+ supportsVisionYes: "\u662F",
182363
+ supportsVisionNo: "\u5426\uFF0C\u9700\u8981\u5355\u72EC\u914D\u7F6E\u89C6\u89C9\u6A21\u578B",
182364
+ visionConfig: "\u89C6\u89C9\u6A21\u578B\u914D\u7F6E:",
182365
+ visionConfigTitle: "\u89C6\u89C9\u6A21\u578B\u914D\u7F6E",
182366
+ visionConfigSubtitle: "\u4E3A\u4E0D\u652F\u6301\u89C6\u89C9\u7684\u4E3B\u6A21\u578B\u914D\u7F6E\u72EC\u7ACB\u89C6\u89C9\u6A21\u578B URL\u3001APIKey\u3001\u8BF7\u6C42\u65B9\u6848\u548C\u6A21\u578B",
182367
+ visionConfigOpenHint: "(\u6309 Enter \u8FDB\u5165\uFF0CEsc \u8FD4\u56DE\u4E3B\u914D\u7F6E)",
182368
+ visionConfigNavigationHint: "\u2191\u2193 \u5BFC\u822A \xB7 Enter \u7F16\u8F91/\u9009\u62E9 \xB7 Esc \u8FD4\u56DE\u4E3B\u914D\u7F6E \xB7 Ctrl+S \u4FDD\u5B58",
182369
+ visionBaseUrl: "\u89C6\u89C9\u6A21\u578B URL:",
182370
+ visionBaseUrlMode: "\u89C6\u89C9\u6A21\u578B URL \u6A21\u5F0F:",
182371
+ visionApiKey: "\u89C6\u89C9\u6A21\u578B APIKey:",
182372
+ visionRequestMethod: "\u89C6\u89C9\u6A21\u578B\u8BF7\u6C42\u65B9\u6848:",
182373
+ visionModel: "\u89C6\u89C9\u6A21\u578B(\u952E\u5165\u53EF\u641C\u7D22):",
182276
182374
  maxContextTokens: "\u6700\u5927\u4E0A\u4E0B\u6587\u4EE4\u724C:",
182277
182375
  maxTokens: "\u6700\u5927\u56DE\u590D\u4EE4\u724C\u6570:",
182278
182376
  streamIdleTimeoutSec: "\u6D41\u5F0F\u7A7A\u95F2\u8D85\u65F6(\u79D2):",
@@ -182625,6 +182723,7 @@ var init_zh = __esm({
182625
182723
  help: "\u663E\u793A\u5FEB\u6377\u952E\u548C\u5E2E\u52A9\u4FE1\u606F",
182626
182724
  clear: "\u6E05\u7A7A\u804A\u5929\u4E0A\u4E0B\u6587\u548C\u5BF9\u8BDD\u5386\u53F2",
182627
182725
  copyLast: "\u590D\u5236\u6700\u540E\u4E00\u6761AI\u56DE\u590D\u5230\u526A\u8D34\u677F",
182726
+ delSession: "\u5220\u9664\u5F53\u524D\u4F1A\u8BDD\u5E76\u6E05\u5C4F",
182628
182727
  resume: "\u6062\u590D\u5BF9\u8BDD",
182629
182728
  mcp: "\u663E\u793A\u6A21\u578B\u4E0A\u4E0B\u6587\u534F\u8BAE\u670D\u52A1\u548C\u5DE5\u5177",
182630
182729
  yolo: "\u5207\u6362\u65E0\u4EBA\u503C\u5B88\u6A21\u5F0F(\u81EA\u52A8\u6279\u51C6\u6240\u6709\u5DE5\u5177)",
@@ -182640,7 +182739,7 @@ var init_zh = __esm({
182640
182739
  roleSubagent: "\u4E3A\u5B50\u4EE3\u7406\u81EA\u5B9A\u4E49\u524D\u7F6E\u63D0\u793A\u8BCD (ROLE-\u540D\u5B57.md)\u3002\u4F7F\u7528 -l \u5217\u51FA\uFF0C-d \u5220\u9664",
182641
182740
  usage: "\u67E5\u770B\u5E26\u6709\u4EA4\u4E92\u5F0F\u56FE\u8868\u7684\u4EE4\u724C\u4F7F\u7528\u7EDF\u8BA1",
182642
182741
  export: "\u5C06\u804A\u5929\u5BF9\u8BDD\u5BFC\u51FA\u5230\u5E26\u4FDD\u5B58\u5BF9\u8BDD\u6846\u7684\u6587\u672C\u6587\u4EF6",
182643
- config: "\u5BFC\u51FA\u6216\u5BFC\u5165 Snow CLI YAML \u914D\u7F6E\u3002\u7528\u6CD5: /config [export|import]",
182742
+ config: "\u5BFC\u51FA\u6216\u5BFC\u5165 Snow CLI YAML \u914D\u7F6E\u3002\u7528\u6CD5: /config <export|import>",
182644
182743
  custom: "\u6DFB\u52A0\u81EA\u5B9A\u4E49\u547D\u4EE4\u5E76\u4FDD\u5B58\u5230 ~/.snow/commands",
182645
182744
  skills: "\u521B\u5EFA\u5305\u542B\u6587\u6863\u548C\u793A\u4F8B\u7684\u6280\u80FD\u6A21\u677F",
182646
182745
  skillsPicker: "\u9009\u62E9 Skill \u5E76\u5C06\u5176 SKILL.md \u5185\u5BB9\u6CE8\u5165\u5230\u8F93\u5165\u6846",
@@ -182682,6 +182781,10 @@ var init_zh = __esm({
182682
182781
  copyFailedPrefix: "\u2717 \u590D\u5236\u5230\u526A\u8D34\u677F\u5931\u8D25",
182683
182782
  unknownError: "\u672A\u77E5\u9519\u8BEF"
182684
182783
  },
182784
+ delSessionFeedback: {
182785
+ noCurrentSession: "\u5F53\u524D\u6CA1\u6709\u53EF\u5220\u9664\u7684\u4F1A\u8BDD\u3002",
182786
+ deleteFailed: "\u5220\u9664\u5F53\u524D\u4F1A\u8BDD\u5931\u8D25\u3002"
182787
+ },
182685
182788
  // 命令输出消息(用于命令执行结果)
182686
182789
  commandOutput: {
182687
182790
  // 自动格式化命令消息
@@ -182732,7 +182835,7 @@ var init_zh = __esm({
182732
182835
  importSuccess: "\u914D\u7F6E\u5DF2\u6210\u529F\u4ECE\u4EE5\u4E0B\u6587\u4EF6\u5BFC\u5165:\n{path}\n\u5DF2\u5BFC\u5165: {imported}\n\u5DF2\u8DF3\u8FC7: {skipped}",
182733
182836
  importFailed: "\u914D\u7F6E\u5BFC\u5165\u5931\u8D25: {error}",
182734
182837
  none: "\u65E0",
182735
- usage: "\u7528\u6CD5: /config [export|import]",
182838
+ usage: "\u7528\u6CD5: /config <export|import>",
182736
182839
  unknownError: "\u672A\u77E5\u9519\u8BEF"
182737
182840
  },
182738
182841
  // IDE 命令消息
@@ -183135,6 +183238,11 @@ var init_zh = __esm({
183135
183238
  commandMessage: "\u547D\u4EE4",
183136
183239
  discontinuedMessage: "\u2514\u2500 \u7528\u6237\u4E2D\u65AD",
183137
183240
  aiCompletionTimeMessage: "\u2514\u2500 AI \u7ED3\u675F\u65F6\u95F4\uFF1A{time}",
183241
+ compressionSummaryAutoTitle: "\u81EA\u52A8\u538B\u7F29\u6458\u8981\u5DF2\u6298\u53E0",
183242
+ compressionSummaryManualTitle: "\u624B\u52A8\u538B\u7F29\u6458\u8981\u5DF2\u6298\u53E0",
183243
+ compressionSummaryStats: "{lines} \u884C \xB7 {chars} \u5B57\u7B26",
183244
+ compressionSummaryPreviewPrefix: "\u6458\u8981\u9884\u89C8",
183245
+ compressionSummaryOriginalSaved: "\u4EC5\u4F18\u5316\u663E\u793A\uFF0C\u539F\u6587\u5DF2\u5B8C\u6574\u4FDD\u5B58",
183138
183246
  // File operations
183139
183247
  fileCreated: "\u5DF2\u521B\u5EFA",
183140
183248
  fileModified: "\u5DF2\u4FEE\u6539",
@@ -184089,6 +184197,19 @@ var init_zh_TW = __esm({
184089
184197
  chatReasoningEffort: "Chat \u601D\u8003\u5F37\u5EA6:",
184090
184198
  advancedModel: "\u9032\u968E\u6A21\u578B(\u8F38\u5165\u5F8C\u53EF\u4EE5\u641C\u5C0B):",
184091
184199
  basicModel: "\u57FA\u790E\u6A21\u578B(\u8F38\u5165\u5F8C\u53EF\u4EE5\u641C\u5C0B):",
184200
+ supportsVision: "\u76EE\u524D\u6A21\u578B\u652F\u63F4\u8996\u89BA:",
184201
+ supportsVisionYes: "\u662F",
184202
+ supportsVisionNo: "\u5426\uFF0C\u9700\u8981\u55AE\u7368\u914D\u7F6E\u8996\u89BA\u6A21\u578B",
184203
+ visionConfig: "\u8996\u89BA\u6A21\u578B\u914D\u7F6E:",
184204
+ visionConfigTitle: "\u8996\u89BA\u6A21\u578B\u914D\u7F6E",
184205
+ visionConfigSubtitle: "\u70BA\u4E0D\u652F\u63F4\u8996\u89BA\u7684\u4E3B\u6A21\u578B\u914D\u7F6E\u7368\u7ACB\u8996\u89BA\u6A21\u578B URL\u3001APIKey\u3001\u8ACB\u6C42\u65B9\u6848\u548C\u6A21\u578B",
184206
+ visionConfigOpenHint: "(\u6309 Enter \u9032\u5165\uFF0CEsc \u8FD4\u56DE\u4E3B\u914D\u7F6E)",
184207
+ visionConfigNavigationHint: "\u2191\u2193 \u5C0E\u822A \xB7 Enter \u7DE8\u8F2F/\u9078\u64C7 \xB7 Esc \u8FD4\u56DE\u4E3B\u914D\u7F6E \xB7 Ctrl+S \u5132\u5B58",
184208
+ visionBaseUrl: "\u8996\u89BA\u6A21\u578B URL:",
184209
+ visionBaseUrlMode: "\u8996\u89BA\u6A21\u578B URL \u6A21\u5F0F:",
184210
+ visionApiKey: "\u8996\u89BA\u6A21\u578B APIKey:",
184211
+ visionRequestMethod: "\u8996\u89BA\u6A21\u578B\u8ACB\u6C42\u65B9\u6848:",
184212
+ visionModel: "\u8996\u89BA\u6A21\u578B(\u8F38\u5165\u5F8C\u53EF\u4EE5\u641C\u5C0B):",
184092
184213
  maxContextTokens: "\u6700\u5927\u4E0A\u4E0B\u6587\u4EE4\u724C:",
184093
184214
  maxTokens: "\u6700\u5927\u56DE\u590D\u4EE4\u724C\u6578:",
184094
184215
  streamIdleTimeoutSec: "\u6D41\u5F0F\u9592\u7F6E\u8D85\u6642(\u79D2):",
@@ -184441,6 +184562,7 @@ var init_zh_TW = __esm({
184441
184562
  help: "\u986F\u793A\u5FEB\u6377\u9375\u548C\u8AAA\u660E\u8CC7\u8A0A",
184442
184563
  clear: "\u6E05\u7A7A\u804A\u5929\u4E0A\u4E0B\u6587\u548C\u5C0D\u8A71\u6B77\u53F2",
184443
184564
  copyLast: "\u8907\u88FD\u6700\u5F8C\u4E00\u689DAI\u56DE\u8986\u5230\u526A\u8CBC\u7C3F",
184565
+ delSession: "\u522A\u9664\u76EE\u524D\u6703\u8A71\u4E26\u6E05\u5C4F",
184444
184566
  resume: "\u6062\u5FA9\u5C0D\u8A71",
184445
184567
  mcp: "\u986F\u793A\u6A21\u578B\u4E0A\u4E0B\u6587\u5354\u5B9A\u670D\u52D9\u548C\u5DE5\u5177",
184446
184568
  yolo: "\u5207\u63DB\u7121\u4EBA\u503C\u5B88\u6A21\u5F0F(\u81EA\u52D5\u6279\u51C6\u6240\u6709\u5DE5\u5177)",
@@ -184456,7 +184578,7 @@ var init_zh_TW = __esm({
184456
184578
  roleSubagent: "\u70BA\u5B50\u4EE3\u7406\u81EA\u8A02\u524D\u7F6E\u63D0\u793A\u8A5E (ROLE-\u540D\u5B57.md)\u3002\u4F7F\u7528 -l \u5217\u51FA\uFF0C-d \u522A\u9664",
184457
184579
  usage: "\u67E5\u770B\u5E36\u6709\u4E92\u52D5\u5F0F\u5716\u8868\u7684\u4EE4\u724C\u4F7F\u7528\u7D71\u8A08",
184458
184580
  export: "\u5C07\u804A\u5929\u5C0D\u8A71\u532F\u51FA\u5230\u5E36\u5132\u5B58\u5C0D\u8A71\u65B9\u584A\u7684\u6587\u5B57\u6A94\u6848",
184459
- config: "\u532F\u51FA\u6216\u532F\u5165 Snow CLI YAML \u8A2D\u5B9A\u3002\u7528\u6CD5: /config [export|import]",
184581
+ config: "\u532F\u51FA\u6216\u532F\u5165 Snow CLI YAML \u8A2D\u5B9A\u3002\u7528\u6CD5: /config <export|import>",
184460
184582
  custom: "\u65B0\u589E\u81EA\u8A02\u547D\u4EE4\u4E26\u5132\u5B58\u5230 ~/.snow/commands",
184461
184583
  skills: "\u5EFA\u7ACB\u5305\u542B\u6587\u4EF6\u548C\u7BC4\u4F8B\u7684\u6280\u80FD\u6A21\u677F",
184462
184584
  skillsPicker: "\u9078\u64C7 Skill \u4E26\u5C07\u5176 SKILL.md \u5167\u5BB9\u6CE8\u5165\u5230\u8F38\u5165\u6846",
@@ -184498,6 +184620,10 @@ var init_zh_TW = __esm({
184498
184620
  copyFailedPrefix: "\u2717 \u8907\u88FD\u5230\u526A\u8CBC\u7C3F\u5931\u6557",
184499
184621
  unknownError: "\u672A\u77E5\u932F\u8AA4"
184500
184622
  },
184623
+ delSessionFeedback: {
184624
+ noCurrentSession: "\u76EE\u524D\u6C92\u6709\u53EF\u522A\u9664\u7684\u6703\u8A71\u3002",
184625
+ deleteFailed: "\u522A\u9664\u76EE\u524D\u6703\u8A71\u5931\u6557\u3002"
184626
+ },
184501
184627
  // 命令輸出消息(用於命令執行結果)
184502
184628
  commandOutput: {
184503
184629
  // 自動格式化命令消息
@@ -184548,7 +184674,7 @@ var init_zh_TW = __esm({
184548
184674
  importSuccess: "\u8A2D\u5B9A\u5DF2\u6210\u529F\u5F9E\u4EE5\u4E0B\u6A94\u6848\u532F\u5165:\n{path}\n\u5DF2\u532F\u5165: {imported}\n\u5DF2\u8DF3\u904E: {skipped}",
184549
184675
  importFailed: "\u8A2D\u5B9A\u532F\u5165\u5931\u6557: {error}",
184550
184676
  none: "\u7121",
184551
- usage: "\u7528\u6CD5: /config [export|import]",
184677
+ usage: "\u7528\u6CD5: /config <export|import>",
184552
184678
  unknownError: "\u672A\u77E5\u932F\u8AA4"
184553
184679
  },
184554
184680
  // IDE 命令訊息
@@ -184951,6 +185077,11 @@ var init_zh_TW = __esm({
184951
185077
  commandMessage: "\u547D\u4EE4",
184952
185078
  discontinuedMessage: "\u2514\u2500 \u4F7F\u7528\u8005\u4E2D\u65B7",
184953
185079
  aiCompletionTimeMessage: "\u2514\u2500 AI \u7D50\u675F\u6642\u9593\uFF1A{time}",
185080
+ compressionSummaryAutoTitle: "\u81EA\u52D5\u58D3\u7E2E\u6458\u8981\u5DF2\u647A\u758A",
185081
+ compressionSummaryManualTitle: "\u624B\u52D5\u58D3\u7E2E\u6458\u8981\u5DF2\u647A\u758A",
185082
+ compressionSummaryStats: "{lines} \u884C \xB7 {chars} \u5B57\u5143",
185083
+ compressionSummaryPreviewPrefix: "\u6458\u8981\u9810\u89BD",
185084
+ compressionSummaryOriginalSaved: "\u50C5\u6700\u4F73\u5316\u986F\u793A\uFF0C\u539F\u6587\u5DF2\u5B8C\u6574\u5132\u5B58",
184954
185085
  // File operations
184955
185086
  fileCreated: "\u5DF2\u5EFA\u7ACB",
184956
185087
  fileModified: "\u5DF2\u4FEE\u6539",
@@ -203338,7 +203469,7 @@ var require_cross_spawn = __commonJS({
203338
203469
  var cp = __require("child_process");
203339
203470
  var parse5 = require_parse4();
203340
203471
  var enoent = require_enoent();
203341
- function spawn15(command, args2, options3) {
203472
+ function spawn16(command, args2, options3) {
203342
203473
  const parsed = parse5(command, args2, options3);
203343
203474
  const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
203344
203475
  enoent.hookChildProcess(spawned, parsed);
@@ -203350,8 +203481,8 @@ var require_cross_spawn = __commonJS({
203350
203481
  result2.error = result2.error || enoent.verifyENOENTSync(result2.status, parsed);
203351
203482
  return result2;
203352
203483
  }
203353
- module2.exports = spawn15;
203354
- module2.exports.spawn = spawn15;
203484
+ module2.exports = spawn16;
203485
+ module2.exports.spawn = spawn16;
203355
203486
  module2.exports.sync = spawnSync7;
203356
203487
  module2.exports._parse = parse5;
203357
203488
  module2.exports._enoent = enoent;
@@ -206659,6 +206790,10 @@ function getProjectId(projectPath) {
206659
206790
  const safeDirName = sanitizeProjectName(dirName) || "project";
206660
206791
  return `${safeDirName}-${pathHash}`;
206661
206792
  }
206793
+ function getProjectName(projectPath) {
206794
+ const cwd2 = projectPath || process.cwd();
206795
+ return path18.basename(cwd2);
206796
+ }
206662
206797
  function getProjectPath() {
206663
206798
  return process.cwd();
206664
206799
  }
@@ -360732,7 +360867,7 @@ var require_safer = __commonJS({
360732
360867
  "node_modules/safer-buffer/safer.js"(exports2, module2) {
360733
360868
  "use strict";
360734
360869
  var buffer = __require("buffer");
360735
- var Buffer3 = buffer.Buffer;
360870
+ var Buffer4 = buffer.Buffer;
360736
360871
  var safer = {};
360737
360872
  var key;
360738
360873
  for (key in buffer) {
@@ -360741,12 +360876,12 @@ var require_safer = __commonJS({
360741
360876
  safer[key] = buffer[key];
360742
360877
  }
360743
360878
  var Safer = safer.Buffer = {};
360744
- for (key in Buffer3) {
360745
- if (!Buffer3.hasOwnProperty(key)) continue;
360879
+ for (key in Buffer4) {
360880
+ if (!Buffer4.hasOwnProperty(key)) continue;
360746
360881
  if (key === "allocUnsafe" || key === "allocUnsafeSlow") continue;
360747
- Safer[key] = Buffer3[key];
360882
+ Safer[key] = Buffer4[key];
360748
360883
  }
360749
- safer.Buffer.prototype = Buffer3.prototype;
360884
+ safer.Buffer.prototype = Buffer4.prototype;
360750
360885
  if (!Safer.from || Safer.from === Uint8Array.from) {
360751
360886
  Safer.from = function(value, encodingOrOffset, length) {
360752
360887
  if (typeof value === "number") {
@@ -360755,7 +360890,7 @@ var require_safer = __commonJS({
360755
360890
  if (value && typeof value.length === "undefined") {
360756
360891
  throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value);
360757
360892
  }
360758
- return Buffer3(value, encodingOrOffset, length);
360893
+ return Buffer4(value, encodingOrOffset, length);
360759
360894
  };
360760
360895
  }
360761
360896
  if (!Safer.alloc) {
@@ -360766,7 +360901,7 @@ var require_safer = __commonJS({
360766
360901
  if (size2 < 0 || size2 >= 2 * (1 << 30)) {
360767
360902
  throw new RangeError('The value "' + size2 + '" is invalid for option "size"');
360768
360903
  }
360769
- var buf = Buffer3(size2);
360904
+ var buf = Buffer4(size2);
360770
360905
  if (!fill || fill.length === 0) {
360771
360906
  buf.fill(0);
360772
360907
  } else if (typeof encoding === "string") {
@@ -360861,7 +360996,7 @@ var require_merge_exports = __commonJS({
360861
360996
  var require_internal = __commonJS({
360862
360997
  "node_modules/iconv-lite/encodings/internal.js"(exports2, module2) {
360863
360998
  "use strict";
360864
- var Buffer3 = require_safer().Buffer;
360999
+ var Buffer4 = require_safer().Buffer;
360865
361000
  module2.exports = {
360866
361001
  // Encodings
360867
361002
  utf8: { type: "_internal", bomAware: true },
@@ -360885,7 +361020,7 @@ var require_internal = __commonJS({
360885
361020
  } else if (this.enc === "cesu8") {
360886
361021
  this.enc = "utf8";
360887
361022
  this.encoder = InternalEncoderCesu8;
360888
- if (Buffer3.from("eda0bdedb2a9", "hex").toString() !== "\u{1F4A9}") {
361023
+ if (Buffer4.from("eda0bdedb2a9", "hex").toString() !== "\u{1F4A9}") {
360889
361024
  this.decoder = InternalDecoderCesu8;
360890
361025
  this.defaultCharUnicode = iconv2.defaultCharUnicode;
360891
361026
  }
@@ -360898,8 +361033,8 @@ var require_internal = __commonJS({
360898
361033
  this.decoder = new StringDecoder(codec.enc);
360899
361034
  }
360900
361035
  InternalDecoder.prototype.write = function(buf) {
360901
- if (!Buffer3.isBuffer(buf)) {
360902
- buf = Buffer3.from(buf);
361036
+ if (!Buffer4.isBuffer(buf)) {
361037
+ buf = Buffer4.from(buf);
360903
361038
  }
360904
361039
  return this.decoder.write(buf);
360905
361040
  };
@@ -360910,7 +361045,7 @@ var require_internal = __commonJS({
360910
361045
  this.enc = codec.enc;
360911
361046
  }
360912
361047
  InternalEncoder.prototype.write = function(str2) {
360913
- return Buffer3.from(str2, this.enc);
361048
+ return Buffer4.from(str2, this.enc);
360914
361049
  };
360915
361050
  InternalEncoder.prototype.end = function() {
360916
361051
  };
@@ -360922,15 +361057,15 @@ var require_internal = __commonJS({
360922
361057
  var completeQuads = str2.length - str2.length % 4;
360923
361058
  this.prevStr = str2.slice(completeQuads);
360924
361059
  str2 = str2.slice(0, completeQuads);
360925
- return Buffer3.from(str2, "base64");
361060
+ return Buffer4.from(str2, "base64");
360926
361061
  };
360927
361062
  InternalEncoderBase64.prototype.end = function() {
360928
- return Buffer3.from(this.prevStr, "base64");
361063
+ return Buffer4.from(this.prevStr, "base64");
360929
361064
  };
360930
361065
  function InternalEncoderCesu8(options3, codec) {
360931
361066
  }
360932
361067
  InternalEncoderCesu8.prototype.write = function(str2) {
360933
- var buf = Buffer3.alloc(str2.length * 3);
361068
+ var buf = Buffer4.alloc(str2.length * 3);
360934
361069
  var bufIdx = 0;
360935
361070
  for (var i = 0; i < str2.length; i++) {
360936
361071
  var charCode = str2.charCodeAt(i);
@@ -361026,13 +361161,13 @@ var require_internal = __commonJS({
361026
361161
  str2 = str2.slice(0, str2.length - 1);
361027
361162
  }
361028
361163
  }
361029
- return Buffer3.from(str2, this.enc);
361164
+ return Buffer4.from(str2, this.enc);
361030
361165
  };
361031
361166
  InternalEncoderUtf8.prototype.end = function() {
361032
361167
  if (this.highSurrogate) {
361033
361168
  var str2 = this.highSurrogate;
361034
361169
  this.highSurrogate = "";
361035
- return Buffer3.from(str2, this.enc);
361170
+ return Buffer4.from(str2, this.enc);
361036
361171
  }
361037
361172
  };
361038
361173
  }
@@ -361042,7 +361177,7 @@ var require_internal = __commonJS({
361042
361177
  var require_utf32 = __commonJS({
361043
361178
  "node_modules/iconv-lite/encodings/utf32.js"(exports2) {
361044
361179
  "use strict";
361045
- var Buffer3 = require_safer().Buffer;
361180
+ var Buffer4 = require_safer().Buffer;
361046
361181
  exports2._utf32 = Utf32Codec;
361047
361182
  function Utf32Codec(codecOptions, iconv2) {
361048
361183
  this.iconv = iconv2;
@@ -361060,8 +361195,8 @@ var require_utf32 = __commonJS({
361060
361195
  this.highSurrogate = 0;
361061
361196
  }
361062
361197
  Utf32Encoder.prototype.write = function(str2) {
361063
- var src = Buffer3.from(str2, "ucs2");
361064
- var dst = Buffer3.alloc(src.length * 2);
361198
+ var src = Buffer4.from(str2, "ucs2");
361199
+ var dst = Buffer4.alloc(src.length * 2);
361065
361200
  var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;
361066
361201
  var offset = 0;
361067
361202
  for (var i = 0; i < src.length; i += 2) {
@@ -361097,7 +361232,7 @@ var require_utf32 = __commonJS({
361097
361232
  if (!this.highSurrogate) {
361098
361233
  return;
361099
361234
  }
361100
- var buf = Buffer3.alloc(4);
361235
+ var buf = Buffer4.alloc(4);
361101
361236
  if (this.isLE) {
361102
361237
  buf.writeUInt32LE(this.highSurrogate, 0);
361103
361238
  } else {
@@ -361117,7 +361252,7 @@ var require_utf32 = __commonJS({
361117
361252
  }
361118
361253
  var i = 0;
361119
361254
  var codepoint = 0;
361120
- var dst = Buffer3.alloc(src.length + 4);
361255
+ var dst = Buffer4.alloc(src.length + 4);
361121
361256
  var offset = 0;
361122
361257
  var isLE = this.isLE;
361123
361258
  var overflow = this.overflow;
@@ -361273,7 +361408,7 @@ var require_utf32 = __commonJS({
361273
361408
  var require_utf16 = __commonJS({
361274
361409
  "node_modules/iconv-lite/encodings/utf16.js"(exports2) {
361275
361410
  "use strict";
361276
- var Buffer3 = require_safer().Buffer;
361411
+ var Buffer4 = require_safer().Buffer;
361277
361412
  exports2.utf16be = Utf16BECodec;
361278
361413
  function Utf16BECodec() {
361279
361414
  }
@@ -361283,7 +361418,7 @@ var require_utf16 = __commonJS({
361283
361418
  function Utf16BEEncoder() {
361284
361419
  }
361285
361420
  Utf16BEEncoder.prototype.write = function(str2) {
361286
- var buf = Buffer3.from(str2, "ucs2");
361421
+ var buf = Buffer4.from(str2, "ucs2");
361287
361422
  for (var i = 0; i < buf.length; i += 2) {
361288
361423
  var tmp = buf[i];
361289
361424
  buf[i] = buf[i + 1];
@@ -361300,7 +361435,7 @@ var require_utf16 = __commonJS({
361300
361435
  if (buf.length == 0) {
361301
361436
  return "";
361302
361437
  }
361303
- var buf2 = Buffer3.alloc(buf.length + 1);
361438
+ var buf2 = Buffer4.alloc(buf.length + 1);
361304
361439
  var i = 0;
361305
361440
  var j = 0;
361306
361441
  if (this.overflowByte !== -1) {
@@ -361416,7 +361551,7 @@ var require_utf16 = __commonJS({
361416
361551
  var require_utf7 = __commonJS({
361417
361552
  "node_modules/iconv-lite/encodings/utf7.js"(exports2) {
361418
361553
  "use strict";
361419
- var Buffer3 = require_safer().Buffer;
361554
+ var Buffer4 = require_safer().Buffer;
361420
361555
  exports2.utf7 = Utf7Codec;
361421
361556
  exports2.unicode11utf7 = "utf7";
361422
361557
  function Utf7Codec(codecOptions, iconv2) {
@@ -361430,7 +361565,7 @@ var require_utf7 = __commonJS({
361430
361565
  this.iconv = codec.iconv;
361431
361566
  }
361432
361567
  Utf7Encoder.prototype.write = function(str2) {
361433
- return Buffer3.from(str2.replace(nonDirectChars, function(chunk2) {
361568
+ return Buffer4.from(str2.replace(nonDirectChars, function(chunk2) {
361434
361569
  return "+" + (chunk2 === "+" ? "" : this.iconv.encode(chunk2, "utf16-be").toString("base64").replace(/=+$/, "")) + "-";
361435
361570
  }.bind(this)));
361436
361571
  };
@@ -361468,7 +361603,7 @@ var require_utf7 = __commonJS({
361468
361603
  res += "+";
361469
361604
  } else {
361470
361605
  var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i2), "ascii");
361471
- res += this.iconv.decode(Buffer3.from(b64str, "base64"), "utf16-be");
361606
+ res += this.iconv.decode(Buffer4.from(b64str, "base64"), "utf16-be");
361472
361607
  }
361473
361608
  if (buf[i2] != minusChar) {
361474
361609
  i2--;
@@ -361486,7 +361621,7 @@ var require_utf7 = __commonJS({
361486
361621
  var canBeDecoded = b64str.length - b64str.length % 8;
361487
361622
  base64Accum = b64str.slice(canBeDecoded);
361488
361623
  b64str = b64str.slice(0, canBeDecoded);
361489
- res += this.iconv.decode(Buffer3.from(b64str, "base64"), "utf16-be");
361624
+ res += this.iconv.decode(Buffer4.from(b64str, "base64"), "utf16-be");
361490
361625
  }
361491
361626
  this.inBase64 = inBase64;
361492
361627
  this.base64Accum = base64Accum;
@@ -361495,7 +361630,7 @@ var require_utf7 = __commonJS({
361495
361630
  Utf7Decoder.prototype.end = function() {
361496
361631
  var res = "";
361497
361632
  if (this.inBase64 && this.base64Accum.length > 0) {
361498
- res = this.iconv.decode(Buffer3.from(this.base64Accum, "base64"), "utf16-be");
361633
+ res = this.iconv.decode(Buffer4.from(this.base64Accum, "base64"), "utf16-be");
361499
361634
  }
361500
361635
  this.inBase64 = false;
361501
361636
  this.base64Accum = "";
@@ -361511,14 +361646,14 @@ var require_utf7 = __commonJS({
361511
361646
  function Utf7IMAPEncoder(options3, codec) {
361512
361647
  this.iconv = codec.iconv;
361513
361648
  this.inBase64 = false;
361514
- this.base64Accum = Buffer3.alloc(6);
361649
+ this.base64Accum = Buffer4.alloc(6);
361515
361650
  this.base64AccumIdx = 0;
361516
361651
  }
361517
361652
  Utf7IMAPEncoder.prototype.write = function(str2) {
361518
361653
  var inBase64 = this.inBase64;
361519
361654
  var base64Accum = this.base64Accum;
361520
361655
  var base64AccumIdx = this.base64AccumIdx;
361521
- var buf = Buffer3.alloc(str2.length * 5 + 10);
361656
+ var buf = Buffer4.alloc(str2.length * 5 + 10);
361522
361657
  var bufIdx = 0;
361523
361658
  for (var i2 = 0; i2 < str2.length; i2++) {
361524
361659
  var uChar = str2.charCodeAt(i2);
@@ -361557,7 +361692,7 @@ var require_utf7 = __commonJS({
361557
361692
  return buf.slice(0, bufIdx);
361558
361693
  };
361559
361694
  Utf7IMAPEncoder.prototype.end = function() {
361560
- var buf = Buffer3.alloc(10);
361695
+ var buf = Buffer4.alloc(10);
361561
361696
  var bufIdx = 0;
361562
361697
  if (this.inBase64) {
361563
361698
  if (this.base64AccumIdx > 0) {
@@ -361594,7 +361729,7 @@ var require_utf7 = __commonJS({
361594
361729
  res += "&";
361595
361730
  } else {
361596
361731
  var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i2), "ascii").replace(/,/g, "/");
361597
- res += this.iconv.decode(Buffer3.from(b64str, "base64"), "utf16-be");
361732
+ res += this.iconv.decode(Buffer4.from(b64str, "base64"), "utf16-be");
361598
361733
  }
361599
361734
  if (buf[i2] != minusChar) {
361600
361735
  i2--;
@@ -361612,7 +361747,7 @@ var require_utf7 = __commonJS({
361612
361747
  var canBeDecoded = b64str.length - b64str.length % 8;
361613
361748
  base64Accum = b64str.slice(canBeDecoded);
361614
361749
  b64str = b64str.slice(0, canBeDecoded);
361615
- res += this.iconv.decode(Buffer3.from(b64str, "base64"), "utf16-be");
361750
+ res += this.iconv.decode(Buffer4.from(b64str, "base64"), "utf16-be");
361616
361751
  }
361617
361752
  this.inBase64 = inBase64;
361618
361753
  this.base64Accum = base64Accum;
@@ -361621,7 +361756,7 @@ var require_utf7 = __commonJS({
361621
361756
  Utf7IMAPDecoder.prototype.end = function() {
361622
361757
  var res = "";
361623
361758
  if (this.inBase64 && this.base64Accum.length > 0) {
361624
- res = this.iconv.decode(Buffer3.from(this.base64Accum, "base64"), "utf16-be");
361759
+ res = this.iconv.decode(Buffer4.from(this.base64Accum, "base64"), "utf16-be");
361625
361760
  }
361626
361761
  this.inBase64 = false;
361627
361762
  this.base64Accum = "";
@@ -361634,7 +361769,7 @@ var require_utf7 = __commonJS({
361634
361769
  var require_sbcs_codec = __commonJS({
361635
361770
  "node_modules/iconv-lite/encodings/sbcs-codec.js"(exports2) {
361636
361771
  "use strict";
361637
- var Buffer3 = require_safer().Buffer;
361772
+ var Buffer4 = require_safer().Buffer;
361638
361773
  exports2._sbcs = SBCSCodec;
361639
361774
  function SBCSCodec(codecOptions, iconv2) {
361640
361775
  if (!codecOptions) {
@@ -361650,8 +361785,8 @@ var require_sbcs_codec = __commonJS({
361650
361785
  }
361651
361786
  codecOptions.chars = asciiString + codecOptions.chars;
361652
361787
  }
361653
- this.decodeBuf = Buffer3.from(codecOptions.chars, "ucs2");
361654
- var encodeBuf = Buffer3.alloc(65536, iconv2.defaultCharSingleByte.charCodeAt(0));
361788
+ this.decodeBuf = Buffer4.from(codecOptions.chars, "ucs2");
361789
+ var encodeBuf = Buffer4.alloc(65536, iconv2.defaultCharSingleByte.charCodeAt(0));
361655
361790
  for (var i = 0; i < codecOptions.chars.length; i++) {
361656
361791
  encodeBuf[codecOptions.chars.charCodeAt(i)] = i;
361657
361792
  }
@@ -361663,7 +361798,7 @@ var require_sbcs_codec = __commonJS({
361663
361798
  this.encodeBuf = codec.encodeBuf;
361664
361799
  }
361665
361800
  SBCSEncoder.prototype.write = function(str2) {
361666
- var buf = Buffer3.alloc(str2.length);
361801
+ var buf = Buffer4.alloc(str2.length);
361667
361802
  for (var i = 0; i < str2.length; i++) {
361668
361803
  buf[i] = this.encodeBuf[str2.charCodeAt(i)];
361669
361804
  }
@@ -361676,7 +361811,7 @@ var require_sbcs_codec = __commonJS({
361676
361811
  }
361677
361812
  SBCSDecoder.prototype.write = function(buf) {
361678
361813
  var decodeBuf = this.decodeBuf;
361679
- var newBuf = Buffer3.alloc(buf.length * 2);
361814
+ var newBuf = Buffer4.alloc(buf.length * 2);
361680
361815
  var idx1 = 0;
361681
361816
  var idx2 = 0;
361682
361817
  for (var i = 0; i < buf.length; i++) {
@@ -362304,7 +362439,7 @@ var require_sbcs_data_generated = __commonJS({
362304
362439
  var require_dbcs_codec = __commonJS({
362305
362440
  "node_modules/iconv-lite/encodings/dbcs-codec.js"(exports2) {
362306
362441
  "use strict";
362307
- var Buffer3 = require_safer().Buffer;
362442
+ var Buffer4 = require_safer().Buffer;
362308
362443
  exports2._dbcs = DBCSCodec;
362309
362444
  var UNASSIGNED = -1;
362310
362445
  var GB18030_CODE = -2;
@@ -362540,7 +362675,7 @@ var require_dbcs_codec = __commonJS({
362540
362675
  this.gb18030 = codec.gb18030;
362541
362676
  }
362542
362677
  DBCSEncoder.prototype.write = function(str2) {
362543
- var newBuf = Buffer3.alloc(str2.length * (this.gb18030 ? 4 : 3));
362678
+ var newBuf = Buffer4.alloc(str2.length * (this.gb18030 ? 4 : 3));
362544
362679
  var leadSurrogate = this.leadSurrogate;
362545
362680
  var seqObj = this.seqObj;
362546
362681
  var nextChar = -1;
@@ -362644,7 +362779,7 @@ var require_dbcs_codec = __commonJS({
362644
362779
  if (this.leadSurrogate === -1 && this.seqObj === void 0) {
362645
362780
  return;
362646
362781
  }
362647
- var newBuf = Buffer3.alloc(10);
362782
+ var newBuf = Buffer4.alloc(10);
362648
362783
  var j = 0;
362649
362784
  if (this.seqObj) {
362650
362785
  var dbcsCode = this.seqObj[DEF_CHAR];
@@ -362675,7 +362810,7 @@ var require_dbcs_codec = __commonJS({
362675
362810
  this.gb18030 = codec.gb18030;
362676
362811
  }
362677
362812
  DBCSDecoder.prototype.write = function(buf) {
362678
- var newBuf = Buffer3.alloc(buf.length * 2);
362813
+ var newBuf = Buffer4.alloc(buf.length * 2);
362679
362814
  var nodeIdx = this.nodeIdx;
362680
362815
  var prevBytes = this.prevBytes;
362681
362816
  var prevOffset = this.prevBytes.length;
@@ -364284,7 +364419,7 @@ var require_encodings = __commonJS({
364284
364419
  var require_streams = __commonJS({
364285
364420
  "node_modules/iconv-lite/lib/streams.js"(exports2, module2) {
364286
364421
  "use strict";
364287
- var Buffer3 = require_safer().Buffer;
364422
+ var Buffer4 = require_safer().Buffer;
364288
364423
  module2.exports = function(streamModule) {
364289
364424
  var Transform2 = streamModule.Transform;
364290
364425
  function IconvLiteEncoderStream(conv, options3) {
@@ -364324,7 +364459,7 @@ var require_streams = __commonJS({
364324
364459
  chunks.push(chunk2);
364325
364460
  });
364326
364461
  this.on("end", function() {
364327
- cb2(null, Buffer3.concat(chunks));
364462
+ cb2(null, Buffer4.concat(chunks));
364328
364463
  });
364329
364464
  return this;
364330
364465
  };
@@ -364338,7 +364473,7 @@ var require_streams = __commonJS({
364338
364473
  constructor: { value: IconvLiteDecoderStream }
364339
364474
  });
364340
364475
  IconvLiteDecoderStream.prototype._transform = function(chunk2, encoding, done) {
364341
- if (!Buffer3.isBuffer(chunk2) && !(chunk2 instanceof Uint8Array)) {
364476
+ if (!Buffer4.isBuffer(chunk2) && !(chunk2 instanceof Uint8Array)) {
364342
364477
  return done(new Error("Iconv decoding stream needs buffers as its input."));
364343
364478
  }
364344
364479
  try {
@@ -364381,7 +364516,7 @@ var require_streams = __commonJS({
364381
364516
  var require_lib12 = __commonJS({
364382
364517
  "node_modules/iconv-lite/lib/index.js"(exports2, module2) {
364383
364518
  "use strict";
364384
- var Buffer3 = require_safer().Buffer;
364519
+ var Buffer4 = require_safer().Buffer;
364385
364520
  var bomHandling = require_bom_handling();
364386
364521
  var mergeModules = require_merge_exports();
364387
364522
  module2.exports.encodings = null;
@@ -364392,7 +364527,7 @@ var require_lib12 = __commonJS({
364392
364527
  var encoder = module2.exports.getEncoder(encoding, options3);
364393
364528
  var res = encoder.write(str2);
364394
364529
  var trail = encoder.end();
364395
- return trail && trail.length > 0 ? Buffer3.concat([res, trail]) : res;
364530
+ return trail && trail.length > 0 ? Buffer4.concat([res, trail]) : res;
364396
364531
  };
364397
364532
  module2.exports.decode = function decode2(buf, encoding, options3) {
364398
364533
  if (typeof buf === "string") {
@@ -364400,7 +364535,7 @@ var require_lib12 = __commonJS({
364400
364535
  console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding");
364401
364536
  module2.exports.skipDecodeWarning = true;
364402
364537
  }
364403
- buf = Buffer3.from("" + (buf || ""), "binary");
364538
+ buf = Buffer4.from("" + (buf || ""), "binary");
364404
364539
  }
364405
364540
  var decoder = module2.exports.getDecoder(encoding, options3);
364406
364541
  var res = decoder.write(buf);
@@ -367535,18 +367670,18 @@ function useBackgroundProcesses() {
367535
367670
  globalSetProcesses = setProcesses;
367536
367671
  globalSetShowPanel = setShowPanel;
367537
367672
  const addProcess = (0, import_react27.useCallback)((command, pid) => {
367538
- const process21 = {
367673
+ const process22 = {
367539
367674
  id: `${pid}-${Date.now()}`,
367540
367675
  command,
367541
367676
  pid,
367542
367677
  status: "running",
367543
367678
  startedAt: /* @__PURE__ */ new Date()
367544
367679
  };
367545
- globalProcesses = [...globalProcesses, process21];
367680
+ globalProcesses = [...globalProcesses, process22];
367546
367681
  if (globalSetProcesses) {
367547
367682
  globalSetProcesses(globalProcesses);
367548
367683
  }
367549
- return process21.id;
367684
+ return process22.id;
367550
367685
  }, []);
367551
367686
  const updateProcessStatus = (0, import_react27.useCallback)((id, status, exitCode) => {
367552
367687
  globalProcesses = globalProcesses.map((p) => p.id === id ? {
@@ -367560,11 +367695,11 @@ function useBackgroundProcesses() {
367560
367695
  }
367561
367696
  }, []);
367562
367697
  const killProcess2 = (0, import_react27.useCallback)((id) => {
367563
- const process21 = globalProcesses.find((p) => p.id === id);
367564
- if (!process21 || process21.status !== "running") {
367698
+ const process22 = globalProcesses.find((p) => p.id === id);
367699
+ if (!process22 || process22.status !== "running") {
367565
367700
  return;
367566
367701
  }
367567
- const { pid } = process21;
367702
+ const { pid } = process22;
367568
367703
  const isWindows4 = global.process.platform === "win32";
367569
367704
  if (isWindows4) {
367570
367705
  exec4(`taskkill /PID ${pid} /T /F 2>NUL`, { windowsHide: true }, () => {
@@ -367620,18 +367755,18 @@ function useBackgroundProcesses() {
367620
367755
  };
367621
367756
  }
367622
367757
  function addBackgroundProcess(command, pid) {
367623
- const process21 = {
367758
+ const process22 = {
367624
367759
  id: `${pid}-${Date.now()}`,
367625
367760
  command,
367626
367761
  pid,
367627
367762
  status: "running",
367628
367763
  startedAt: /* @__PURE__ */ new Date()
367629
367764
  };
367630
- globalProcesses = [...globalProcesses, process21];
367765
+ globalProcesses = [...globalProcesses, process22];
367631
367766
  if (globalSetProcesses) {
367632
367767
  globalSetProcesses(globalProcesses);
367633
367768
  }
367634
- return process21.id;
367769
+ return process22.id;
367635
367770
  }
367636
367771
  function updateBackgroundProcessStatus(id, status, exitCode) {
367637
367772
  globalProcesses = globalProcesses.map((p) => p.id === id ? {
@@ -391105,8 +391240,8 @@ var init_Browser2 = __esm({
391105
391240
  init_TargetManager();
391106
391241
  CdpBrowser = class _CdpBrowser extends Browser {
391107
391242
  protocol = "cdp";
391108
- static async _create(connection, contextIds, acceptInsecureCerts, defaultViewport, downloadBehavior, process21, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets = true, networkEnabled = true, handleDevToolsAsPage = false) {
391109
- const browser = new _CdpBrowser(connection, contextIds, defaultViewport, process21, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets, networkEnabled, handleDevToolsAsPage);
391243
+ static async _create(connection, contextIds, acceptInsecureCerts, defaultViewport, downloadBehavior, process22, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets = true, networkEnabled = true, handleDevToolsAsPage = false) {
391244
+ const browser = new _CdpBrowser(connection, contextIds, defaultViewport, process22, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets, networkEnabled, handleDevToolsAsPage);
391110
391245
  if (acceptInsecureCerts) {
391111
391246
  await connection.send("Security.setIgnoreCertificateErrors", {
391112
391247
  ignore: true
@@ -391126,11 +391261,11 @@ var init_Browser2 = __esm({
391126
391261
  #networkEnabled = true;
391127
391262
  #targetManager;
391128
391263
  #handleDevToolsAsPage = false;
391129
- constructor(connection, contextIds, defaultViewport, process21, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets = true, networkEnabled = true, handleDevToolsAsPage = false) {
391264
+ constructor(connection, contextIds, defaultViewport, process22, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets = true, networkEnabled = true, handleDevToolsAsPage = false) {
391130
391265
  super();
391131
391266
  this.#networkEnabled = networkEnabled;
391132
391267
  this.#defaultViewport = defaultViewport;
391133
- this.#process = process21;
391268
+ this.#process = process22;
391134
391269
  this.#connection = connection;
391135
391270
  this.#closeCallback = closeCallback || (() => {
391136
391271
  });
@@ -404143,7 +404278,7 @@ var require_Buffer = __commonJS({
404143
404278
  "use strict";
404144
404279
  Object.defineProperty(exports2, "__esModule", { value: true });
404145
404280
  exports2.Buffer = void 0;
404146
- var Buffer3 = class {
404281
+ var Buffer4 = class {
404147
404282
  #capacity;
404148
404283
  #entries = [];
404149
404284
  #onItemRemoved;
@@ -404169,7 +404304,7 @@ var require_Buffer = __commonJS({
404169
404304
  }
404170
404305
  }
404171
404306
  };
404172
- exports2.Buffer = Buffer3;
404307
+ exports2.Buffer = Buffer4;
404173
404308
  }
404174
404309
  });
404175
404310
 
@@ -442610,7 +442745,7 @@ function findWindowsBrowserInWSL() {
442610
442745
  return null;
442611
442746
  }
442612
442747
  async function launchWindowsBrowserFromWSL(browserPath, debugPort = 9222) {
442613
- const userDataDir = "C:\\\\temp\\\\snow-browser-debug";
442748
+ const userDataDir = `C:\\temp\\snow-browser-debug-${debugPort}`;
442614
442749
  const windowsPath = browserPath.replace(/^\/mnt\/([a-z])\//, "$1:\\\\").replace(/\//g, "\\\\");
442615
442750
  const args2 = [
442616
442751
  "--headless=new",
@@ -443815,6 +443950,18 @@ var init_websearch2 = __esm({
443815
443950
  writable: true,
443816
443951
  value: void 0
443817
443952
  });
443953
+ Object.defineProperty(this, "browserLaunchPromise", {
443954
+ enumerable: true,
443955
+ configurable: true,
443956
+ writable: true,
443957
+ value: null
443958
+ });
443959
+ Object.defineProperty(this, "browserClosePromise", {
443960
+ enumerable: true,
443961
+ configurable: true,
443962
+ writable: true,
443963
+ value: null
443964
+ });
443818
443965
  this.maxResults = maxResults;
443819
443966
  this.isWSLMode = isWSL();
443820
443967
  if (process.platform === "win32" && !this.isWSLMode) {
@@ -443826,9 +443973,21 @@ var init_websearch2 = __esm({
443826
443973
  * In WSL mode, connects to Windows browser via WebSocket
443827
443974
  */
443828
443975
  async launchBrowser() {
443976
+ if (this.browserClosePromise) {
443977
+ await this.browserClosePromise;
443978
+ }
443829
443979
  if (this.browser && this.browser.connected) {
443830
443980
  return this.browser;
443831
443981
  }
443982
+ if (this.browserLaunchPromise) {
443983
+ return this.browserLaunchPromise;
443984
+ }
443985
+ this.browserLaunchPromise = this.createBrowser().finally(() => {
443986
+ this.browserLaunchPromise = null;
443987
+ });
443988
+ return this.browserLaunchPromise;
443989
+ }
443990
+ async createBrowser() {
443832
443991
  const proxyConfig = getProxyConfig();
443833
443992
  const debugPort = proxyConfig.browserDebugPort || 9222;
443834
443993
  if (this.isWSLMode) {
@@ -443906,21 +444065,48 @@ var init_websearch2 = __esm({
443906
444065
  * Close browser instance
443907
444066
  */
443908
444067
  async closeBrowser() {
443909
- if (this.browser) {
443910
- if (this.isWSLMode) {
443911
- try {
443912
- this.browser.disconnect();
443913
- } catch {
444068
+ if (this.browserClosePromise) {
444069
+ return this.browserClosePromise;
444070
+ }
444071
+ this.browserClosePromise = this.closeBrowserInternal().finally(() => {
444072
+ this.browserClosePromise = null;
444073
+ });
444074
+ return this.browserClosePromise;
444075
+ }
444076
+ async closeBrowserInternal() {
444077
+ const browser = this.browserLaunchPromise ? await this.browserLaunchPromise.catch(() => null) : this.browser;
444078
+ if (!browser) {
444079
+ this.browser = null;
444080
+ return;
444081
+ }
444082
+ if (this.isWSLMode) {
444083
+ try {
444084
+ if (browser.connected) {
444085
+ browser.disconnect();
443914
444086
  }
443915
- } else {
443916
- try {
443917
- await this.browser.close();
443918
- } catch {
444087
+ } catch {
444088
+ }
444089
+ } else {
444090
+ try {
444091
+ if (browser.connected) {
444092
+ await browser.close();
443919
444093
  }
444094
+ } catch {
443920
444095
  }
444096
+ }
444097
+ if (this.browser === browser) {
443921
444098
  this.browser = null;
443922
444099
  }
443923
444100
  }
444101
+ async closePage(page) {
444102
+ if (!page || page.isClosed()) {
444103
+ return;
444104
+ }
444105
+ try {
444106
+ await page.close();
444107
+ } catch {
444108
+ }
444109
+ }
443924
444110
  /**
443925
444111
  * Perform a web search using the engine selected in proxy config.
443926
444112
  * @param query - Search query string
@@ -443938,20 +444124,15 @@ var init_websearch2 = __esm({
443938
444124
  page = await browser.newPage();
443939
444125
  await page.setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");
443940
444126
  const cleanedResults = await engine.search(page, query, limit);
443941
- await page.close();
443942
444127
  return {
443943
444128
  query,
443944
444129
  results: cleanedResults,
443945
444130
  totalResults: cleanedResults.length
443946
444131
  };
443947
444132
  } catch (error40) {
443948
- if (page) {
443949
- try {
443950
- await page.close();
443951
- } catch {
443952
- }
443953
- }
443954
444133
  throw new Error(`Web search failed: ${error40.message}`);
444134
+ } finally {
444135
+ await this.closePage(page);
443955
444136
  }
443956
444137
  }
443957
444138
  /**
@@ -444029,7 +444210,8 @@ var init_websearch2 = __esm({
444029
444210
  cleanedContent = cleanedContent.slice(0, maxLength) + "\n\n[Content truncated...]";
444030
444211
  }
444031
444212
  const contentPreview = cleanedContent.slice(0, 500) + (cleanedContent.length > 500 ? "..." : "");
444032
- await page.close();
444213
+ await this.closePage(page);
444214
+ page = null;
444033
444215
  let finalContent = cleanedContent;
444034
444216
  if (userQuery && !isUserProvided && enableAiSummary) {
444035
444217
  try {
@@ -444049,13 +444231,9 @@ var init_websearch2 = __esm({
444049
444231
  contentPreview
444050
444232
  };
444051
444233
  } catch (error40) {
444052
- if (page) {
444053
- try {
444054
- await page.close();
444055
- } catch {
444056
- }
444057
- }
444058
444234
  throw new Error(`Failed to fetch page: ${error40.message}`);
444235
+ } finally {
444236
+ await this.closePage(page);
444059
444237
  }
444060
444238
  }
444061
444239
  };
@@ -451175,6 +451353,112 @@ var init_yoloPermissionChecker = __esm({
451175
451353
  }
451176
451354
  });
451177
451355
 
451356
+ // dist/utils/config/toolDisplayConfig.js
451357
+ var toolDisplayConfig_exports = {};
451358
+ __export(toolDisplayConfig_exports, {
451359
+ TWO_STEP_DISPLAY_TOOL_NAMES: () => TWO_STEP_DISPLAY_TOOL_NAMES,
451360
+ extractFilesystemEditDiffDataForPersistence: () => extractFilesystemEditDiffDataForPersistence,
451361
+ extractFilesystemEditDiffFromRawResult: () => extractFilesystemEditDiffFromRawResult,
451362
+ isToolNeedTwoStepDisplay: () => isToolNeedTwoStepDisplay,
451363
+ isToolOnlyShowCompleted: () => isToolOnlyShowCompleted
451364
+ });
451365
+ function isToolNeedTwoStepDisplay(toolName) {
451366
+ if (TWO_STEP_TOOLS.has(toolName)) {
451367
+ return true;
451368
+ }
451369
+ if (toolName.startsWith("subagent-")) {
451370
+ return true;
451371
+ }
451372
+ return false;
451373
+ }
451374
+ function isToolOnlyShowCompleted(toolName) {
451375
+ return !isToolNeedTwoStepDisplay(toolName);
451376
+ }
451377
+ function isFilesystemEditDiffData(value) {
451378
+ if (!value || typeof value !== "object") {
451379
+ return false;
451380
+ }
451381
+ const data = value;
451382
+ return typeof data["oldContent"] === "string" && typeof data["newContent"] === "string" || Array.isArray(data["batchResults"]);
451383
+ }
451384
+ function extractFilesystemEditDiffFromRawResult(toolName, toolResult) {
451385
+ if (toolName !== "filesystem-edit" && toolName !== "filesystem-replaceedit") {
451386
+ return void 0;
451387
+ }
451388
+ if (!toolResult || typeof toolResult !== "object") {
451389
+ return void 0;
451390
+ }
451391
+ const result2 = toolResult;
451392
+ const embeddedEditDiffData = result2["editDiffData"];
451393
+ if (isFilesystemEditDiffData(embeddedEditDiffData)) {
451394
+ return embeddedEditDiffData;
451395
+ }
451396
+ if ("__toolResultContent" in result2) {
451397
+ const fromWrappedContent = extractFilesystemEditDiffFromRawResult(toolName, result2["__toolResultContent"]);
451398
+ if (fromWrappedContent) {
451399
+ return fromWrappedContent;
451400
+ }
451401
+ }
451402
+ if (typeof result2["oldContent"] === "string" && typeof result2["newContent"] === "string") {
451403
+ return {
451404
+ oldContent: result2["oldContent"],
451405
+ newContent: result2["newContent"],
451406
+ filename: result2["filePath"] || result2["path"] || result2["filename"],
451407
+ completeOldContent: result2["completeOldContent"],
451408
+ completeNewContent: result2["completeNewContent"],
451409
+ contextStartLine: result2["contextStartLine"]
451410
+ };
451411
+ }
451412
+ if (Array.isArray(result2["results"]) && result2["results"].length > 0) {
451413
+ return {
451414
+ batchResults: result2["results"],
451415
+ isBatch: true
451416
+ };
451417
+ }
451418
+ if (Array.isArray(result2["batchResults"]) && result2["batchResults"].length > 0) {
451419
+ return {
451420
+ batchResults: result2["batchResults"],
451421
+ isBatch: true
451422
+ };
451423
+ }
451424
+ return void 0;
451425
+ }
451426
+ function extractFilesystemEditDiffDataForPersistence(toolName, content) {
451427
+ if (toolName !== "filesystem-edit" && toolName !== "filesystem-replaceedit" || content.startsWith("Error:")) {
451428
+ return void 0;
451429
+ }
451430
+ try {
451431
+ const resultData = JSON.parse(content);
451432
+ return extractFilesystemEditDiffFromRawResult(toolName, resultData);
451433
+ } catch {
451434
+ }
451435
+ return void 0;
451436
+ }
451437
+ var TWO_STEP_TOOLS, TWO_STEP_DISPLAY_TOOL_NAMES;
451438
+ var init_toolDisplayConfig = __esm({
451439
+ "dist/utils/config/toolDisplayConfig.js"() {
451440
+ "use strict";
451441
+ TWO_STEP_TOOLS = /* @__PURE__ */ new Set([
451442
+ // 文件编辑工具 - 耗时较长,需要显示进度
451443
+ "filesystem-edit",
451444
+ "filesystem-replaceedit",
451445
+ "filesystem-create",
451446
+ // 终端执行工具 - 执行时间不确定,需要显示进度
451447
+ "terminal-execute",
451448
+ // 代码库搜索工具 - 需要生成 embedding 和搜索,耗时较长
451449
+ "codebase-search",
451450
+ // 联网搜索工具 - 需要启动浏览器、网络请求、内容处理,耗时较长
451451
+ "websearch-search",
451452
+ "websearch-fetch",
451453
+ // 用户交互工具 - 需要等待用户输入,耗时不确定
451454
+ "askuser-ask_question"
451455
+ // 子代理工具 - 执行复杂任务,需要显示进度
451456
+ // 所有以 'subagent-' 开头的工具都需要两步显示
451457
+ ]);
451458
+ TWO_STEP_DISPLAY_TOOL_NAMES = Array.from(TWO_STEP_TOOLS);
451459
+ }
451460
+ });
451461
+
451178
451462
  // dist/utils/execution/subAgentToolApproval.js
451179
451463
  async function checkAndApproveTools(ctx, toolCalls) {
451180
451464
  const approvedToolCalls = [];
@@ -451327,23 +451611,42 @@ async function executeMcpTools(ctx, approvedToolCalls) {
451327
451611
  console.warn("Failed to execute beforeToolCall hook in sub-agent:", hookError);
451328
451612
  }
451329
451613
  const result2 = await executeMCPTool(toolCall.function.name, args2, ctx.abortSignal);
451330
- const resultContent = JSON.stringify(result2);
451614
+ let contentSource = result2;
451615
+ let editDiffData;
451616
+ if (result2 && typeof result2 === "object" && "editDiffData" in result2 && result2.editDiffData) {
451617
+ editDiffData = result2.editDiffData;
451618
+ if ("__toolResultContent" in result2) {
451619
+ contentSource = result2.__toolResultContent;
451620
+ }
451621
+ } else {
451622
+ editDiffData = extractFilesystemEditDiffFromRawResult(toolCall.function.name, result2);
451623
+ }
451624
+ if (editDiffData && !editDiffData["filename"] && typeof args2["filePath"] === "string") {
451625
+ editDiffData["filename"] = args2["filePath"];
451626
+ }
451627
+ const resultContent = JSON.stringify(contentSource);
451331
451628
  toolResults.push({
451332
451629
  role: "tool",
451333
451630
  tool_call_id: toolCall.id,
451334
- content: resultContent
451631
+ content: resultContent,
451632
+ ...editDiffData ? { editDiffData } : {}
451335
451633
  });
451336
451634
  emitSubAgentMessage(ctx, {
451337
451635
  type: "tool_result",
451338
451636
  tool_call_id: toolCall.id,
451339
451637
  tool_name: toolCall.function.name,
451340
- content: resultContent
451638
+ content: resultContent,
451639
+ ...editDiffData ? { editDiffData } : {}
451341
451640
  });
451342
451641
  try {
451343
451642
  const afterHookResult = await unifiedHooksExecutor.executeHooks("afterToolCall", {
451344
451643
  toolName: toolCall.function.name,
451345
451644
  args: args2,
451346
- result: { tool_call_id: toolCall.id, role: "tool", content: resultContent },
451645
+ result: {
451646
+ tool_call_id: toolCall.id,
451647
+ role: "tool",
451648
+ content: resultContent
451649
+ },
451347
451650
  error: null
451348
451651
  });
451349
451652
  const afterInterpreted = interpretHookResult("afterToolCall", afterHookResult);
@@ -451373,7 +451676,11 @@ async function executeMcpTools(ctx, approvedToolCalls) {
451373
451676
  await unifiedHooksExecutor.executeHooks("afterToolCall", {
451374
451677
  toolName: toolCall.function.name,
451375
451678
  args: args2,
451376
- result: { tool_call_id: toolCall.id, role: "tool", content: errorContent },
451679
+ result: {
451680
+ tool_call_id: toolCall.id,
451681
+ role: "tool",
451682
+ content: errorContent
451683
+ },
451377
451684
  error: error40 instanceof Error ? error40 : new Error(String(error40))
451378
451685
  });
451379
451686
  } catch (hookError) {
@@ -451392,6 +451699,7 @@ var init_subAgentToolApproval = __esm({
451392
451699
  init_hookResultInterpreter();
451393
451700
  init_yoloPermissionChecker();
451394
451701
  init_subAgentTypes();
451702
+ init_toolDisplayConfig();
451395
451703
  }
451396
451704
  });
451397
451705
 
@@ -453158,7 +453466,7 @@ ${role ? `Your role: ${role}` : ""}
453158
453466
  let totalUsage;
453159
453467
  let latestTotalTokens = 0;
453160
453468
  let planApproved = !requirePlanApproval;
453161
- const emitToolResultEvent = (toolCallId, toolName, content) => {
453469
+ const emitToolResultEvent = (toolCallId, toolName, content, editDiffData) => {
453162
453470
  if (!onMessage)
453163
453471
  return;
453164
453472
  onMessage({
@@ -453169,10 +453477,28 @@ ${role ? `Your role: ${role}` : ""}
453169
453477
  type: "tool_result",
453170
453478
  tool_call_id: toolCallId,
453171
453479
  tool_name: toolName,
453172
- content
453480
+ content,
453481
+ ...editDiffData ? { editDiffData } : {}
453173
453482
  }
453174
453483
  });
453175
453484
  };
453485
+ const normalizeToolResultPayload = (toolName, result2, args2) => {
453486
+ let contentSource = result2;
453487
+ let editDiffData;
453488
+ if (result2 && typeof result2 === "object" && "editDiffData" in result2 && result2.editDiffData) {
453489
+ editDiffData = result2.editDiffData;
453490
+ if ("__toolResultContent" in result2) {
453491
+ contentSource = result2.__toolResultContent;
453492
+ }
453493
+ } else {
453494
+ editDiffData = extractFilesystemEditDiffFromRawResult(toolName, result2);
453495
+ }
453496
+ if (editDiffData && !editDiffData["filename"] && args2 && typeof args2["filePath"] === "string") {
453497
+ editDiffData["filename"] = args2["filePath"];
453498
+ }
453499
+ const serializedContent = typeof contentSource === "string" ? contentSource : JSON.stringify(contentSource) ?? String(contentSource);
453500
+ return { resultContent: serializedContent, editDiffData };
453501
+ };
453176
453502
  while (true) {
453177
453503
  if (abortSignal == null ? void 0 : abortSignal.aborted) {
453178
453504
  return {
@@ -453596,7 +453922,8 @@ ${msgSummary}`;
453596
453922
  } catch {
453597
453923
  }
453598
453924
  const result2 = await executeMCPTool2(tc.function.name, toolArgs, abortSignal);
453599
- let resultContent = typeof result2 === "string" ? result2 : JSON.stringify(result2);
453925
+ const { resultContent: rawResultContent, editDiffData } = normalizeToolResultPayload(tc.function.name, result2, toolArgs);
453926
+ let resultContent = rawResultContent;
453600
453927
  try {
453601
453928
  const aHook = await unifiedHooksExecutor.executeHooks("afterToolCall", {
453602
453929
  toolName: tc.function.name,
@@ -453617,9 +453944,10 @@ ${msgSummary}`;
453617
453944
  messages.push({
453618
453945
  role: "tool",
453619
453946
  tool_call_id: tc.id,
453620
- content: resultContent
453947
+ content: resultContent,
453948
+ ...editDiffData ? { editDiffData } : {}
453621
453949
  });
453622
- emitToolResultEvent(tc.id, tc.function.name, resultContent);
453950
+ emitToolResultEvent(tc.id, tc.function.name, resultContent, editDiffData);
453623
453951
  } catch (e) {
453624
453952
  const errorContent = `Error: ${e.message}`;
453625
453953
  messages.push({
@@ -453705,7 +454033,8 @@ ${msgSummary}`;
453705
454033
  }
453706
454034
  try {
453707
454035
  const result2 = await executeMCPTool2(toolName, toolArgs, abortSignal);
453708
- let resultContent = typeof result2 === "string" ? result2 : JSON.stringify(result2);
454036
+ const { resultContent: rawResultContent, editDiffData } = normalizeToolResultPayload(toolName, result2, toolArgs);
454037
+ let resultContent = rawResultContent;
453709
454038
  try {
453710
454039
  const aHook = await unifiedHooksExecutor.executeHooks("afterToolCall", {
453711
454040
  toolName,
@@ -453726,9 +454055,10 @@ ${msgSummary}`;
453726
454055
  messages.push({
453727
454056
  role: "tool",
453728
454057
  tool_call_id: tc.id,
453729
- content: resultContent
454058
+ content: resultContent,
454059
+ ...editDiffData ? { editDiffData } : {}
453730
454060
  });
453731
- emitToolResultEvent(tc.id, toolName, resultContent);
454061
+ emitToolResultEvent(tc.id, toolName, resultContent, editDiffData);
453732
454062
  } catch (e) {
453733
454063
  const errorContent = `Error: ${e.message}`;
453734
454064
  messages.push({
@@ -453819,6 +454149,7 @@ var init_teamExecutor = __esm({
453819
454149
  init_unifiedHooksExecutor();
453820
454150
  init_hookResultInterpreter();
453821
454151
  init_compressionCoordinator();
454152
+ init_toolDisplayConfig();
453822
454153
  }
453823
454154
  });
453824
454155
 
@@ -454004,110 +454335,6 @@ var init_messageFormatter = __esm({
454004
454335
  }
454005
454336
  });
454006
454337
 
454007
- // dist/utils/config/toolDisplayConfig.js
454008
- var toolDisplayConfig_exports = {};
454009
- __export(toolDisplayConfig_exports, {
454010
- TWO_STEP_DISPLAY_TOOL_NAMES: () => TWO_STEP_DISPLAY_TOOL_NAMES,
454011
- extractFilesystemEditDiffDataForPersistence: () => extractFilesystemEditDiffDataForPersistence,
454012
- extractFilesystemEditDiffFromRawResult: () => extractFilesystemEditDiffFromRawResult,
454013
- isToolNeedTwoStepDisplay: () => isToolNeedTwoStepDisplay,
454014
- isToolOnlyShowCompleted: () => isToolOnlyShowCompleted
454015
- });
454016
- function isToolNeedTwoStepDisplay(toolName) {
454017
- if (TWO_STEP_TOOLS.has(toolName)) {
454018
- return true;
454019
- }
454020
- if (toolName.startsWith("subagent-")) {
454021
- return true;
454022
- }
454023
- return false;
454024
- }
454025
- function isToolOnlyShowCompleted(toolName) {
454026
- return !isToolNeedTwoStepDisplay(toolName);
454027
- }
454028
- function extractFilesystemEditDiffFromRawResult(toolName, toolResult) {
454029
- if (toolName !== "filesystem-edit" && toolName !== "filesystem-replaceedit") {
454030
- return void 0;
454031
- }
454032
- if (!toolResult || typeof toolResult !== "object") {
454033
- return void 0;
454034
- }
454035
- const result2 = toolResult;
454036
- if (result2["oldContent"] && result2["newContent"]) {
454037
- return {
454038
- oldContent: result2["oldContent"],
454039
- newContent: result2["newContent"],
454040
- filename: result2["filePath"] || result2["path"] || result2["filename"],
454041
- completeOldContent: result2["completeOldContent"],
454042
- completeNewContent: result2["completeNewContent"],
454043
- contextStartLine: result2["contextStartLine"]
454044
- };
454045
- }
454046
- if (Array.isArray(result2["results"]) && result2["results"].length > 0) {
454047
- return {
454048
- batchResults: result2["results"],
454049
- isBatch: true
454050
- };
454051
- }
454052
- return void 0;
454053
- }
454054
- function extractFilesystemEditDiffDataForPersistence(toolName, content) {
454055
- if (toolName !== "filesystem-edit" && toolName !== "filesystem-replaceedit" || content.startsWith("Error:")) {
454056
- return void 0;
454057
- }
454058
- try {
454059
- const resultData = JSON.parse(content);
454060
- if (resultData.oldContent && resultData.newContent) {
454061
- return {
454062
- oldContent: resultData.oldContent,
454063
- newContent: resultData.newContent,
454064
- filename: resultData.filePath || resultData.path || resultData.filename,
454065
- completeOldContent: resultData.completeOldContent,
454066
- completeNewContent: resultData.completeNewContent,
454067
- contextStartLine: resultData.contextStartLine
454068
- };
454069
- }
454070
- if (resultData.results && Array.isArray(resultData.results)) {
454071
- return {
454072
- batchResults: resultData.results,
454073
- isBatch: true
454074
- };
454075
- }
454076
- if (resultData.batchResults && Array.isArray(resultData.batchResults)) {
454077
- return {
454078
- batchResults: resultData.batchResults,
454079
- isBatch: true
454080
- };
454081
- }
454082
- } catch {
454083
- }
454084
- return void 0;
454085
- }
454086
- var TWO_STEP_TOOLS, TWO_STEP_DISPLAY_TOOL_NAMES;
454087
- var init_toolDisplayConfig = __esm({
454088
- "dist/utils/config/toolDisplayConfig.js"() {
454089
- "use strict";
454090
- TWO_STEP_TOOLS = /* @__PURE__ */ new Set([
454091
- // 文件编辑工具 - 耗时较长,需要显示进度
454092
- "filesystem-edit",
454093
- "filesystem-replaceedit",
454094
- "filesystem-create",
454095
- // 终端执行工具 - 执行时间不确定,需要显示进度
454096
- "terminal-execute",
454097
- // 代码库搜索工具 - 需要生成 embedding 和搜索,耗时较长
454098
- "codebase-search",
454099
- // 联网搜索工具 - 需要启动浏览器、网络请求、内容处理,耗时较长
454100
- "websearch-search",
454101
- "websearch-fetch",
454102
- // 用户交互工具 - 需要等待用户输入,耗时不确定
454103
- "askuser-ask_question"
454104
- // 子代理工具 - 执行复杂任务,需要显示进度
454105
- // 所有以 'subagent-' 开头的工具都需要两步显示
454106
- ]);
454107
- TWO_STEP_DISPLAY_TOOL_NAMES = Array.from(TWO_STEP_TOOLS);
454108
- }
454109
- });
454110
-
454111
454338
  // dist/hooks/conversation/core/subAgentMessageHandler.js
454112
454339
  var subAgentMessageHandler_exports = {};
454113
454340
  __export(subAgentMessageHandler_exports, {
@@ -454158,7 +454385,13 @@ function setTeammateStreamEntry(agentId, agentName, tokenCount, isReasoning, ctx
454158
454385
  const prev = _teammateStreamMap.get(agentId);
454159
454386
  if (prev && prev.tokenCount === tokenCount && prev.isReasoning === isReasoning && ((_a20 = prev.ctxUsage) == null ? void 0 : _a20.percentage) === (ctxUsage == null ? void 0 : ctxUsage.percentage))
454160
454387
  return;
454161
- _teammateStreamMap.set(agentId, { agentId, agentName, tokenCount, isReasoning, ctxUsage });
454388
+ _teammateStreamMap.set(agentId, {
454389
+ agentId,
454390
+ agentName,
454391
+ tokenCount,
454392
+ isReasoning,
454393
+ ctxUsage
454394
+ });
454162
454395
  rebuildTeammateSnapshot();
454163
454396
  }
454164
454397
  function removeTeammateStreamEntry(agentId) {
@@ -454954,7 +455187,8 @@ var init_subAgentMessageHandler = __esm({
454954
455187
  const isError2 = msg.content.startsWith("Error:");
454955
455188
  const isTimeConsuming = isToolNeedTwoStepDisplay(msg.tool_name);
454956
455189
  const rejectionReason = isError2 ? msg.rejection_reason || extractRejectionReason(msg.content) : void 0;
454957
- const editDiffData = extractFilesystemEditDiffDataForPersistence(msg.tool_name, msg.content);
455190
+ const editDiffData = !isError2 && msg.editDiffData ? msg.editDiffData : extractFilesystemEditDiffDataForPersistence(msg.tool_name, msg.content);
455191
+ const displayMsg = editDiffData && !msg.editDiffData ? { ...msg, editDiffData } : msg;
454958
455192
  const sessionMsg = {
454959
455193
  role: "tool",
454960
455194
  tool_call_id: msg.tool_call_id,
@@ -454965,7 +455199,7 @@ var init_subAgentMessageHandler = __esm({
454965
455199
  };
454966
455200
  this.saveMessage(sessionMsg).catch((err) => console.error("Failed to save sub-agent tool result:", err));
454967
455201
  if (isTimeConsuming) {
454968
- return this.handleTimeConsumingToolResult(prev, subAgentMessage, msg, isError2);
455202
+ return this.handleTimeConsumingToolResult(prev, subAgentMessage, displayMsg, isError2);
454969
455203
  }
454970
455204
  if (isError2) {
454971
455205
  const statusText = rejectionReason ? `
@@ -463386,9 +463620,9 @@ var require_main2 = __commonJS({
463386
463620
  var api_1 = require_api2();
463387
463621
  __exportStar2(require_api2(), exports2);
463388
463622
  var IPCMessageReader = class extends api_1.AbstractMessageReader {
463389
- constructor(process21) {
463623
+ constructor(process22) {
463390
463624
  super();
463391
- this.process = process21;
463625
+ this.process = process22;
463392
463626
  let eventEmitter = this.process;
463393
463627
  eventEmitter.on("error", (error40) => this.fireError(error40));
463394
463628
  eventEmitter.on("close", () => this.fireClose());
@@ -463400,9 +463634,9 @@ var require_main2 = __commonJS({
463400
463634
  };
463401
463635
  exports2.IPCMessageReader = IPCMessageReader;
463402
463636
  var IPCMessageWriter = class extends api_1.AbstractMessageWriter {
463403
- constructor(process21) {
463637
+ constructor(process22) {
463404
463638
  super();
463405
- this.process = process21;
463639
+ this.process = process22;
463406
463640
  this.errorCount = 0;
463407
463641
  const eventEmitter = this.process;
463408
463642
  eventEmitter.on("error", (error40) => this.fireError(error40));
@@ -467009,13 +467243,13 @@ var init_sessionManager = __esm({
467009
467243
  this.currentSession.messageCount = this.currentSession.messages.length;
467010
467244
  this.currentSession.updatedAt = Date.now();
467011
467245
  this.notifyMessageListeners(message);
467012
- this.notifyMessagesChanged();
467013
467246
  if (this.currentSession.messageCount === 1 && message.role === "user") {
467014
467247
  const title = message.content.slice(0, 50) + (message.content.length > 50 ? "..." : "");
467015
467248
  const summary = message.content.slice(0, 100) + (message.content.length > 100 ? "..." : "");
467016
467249
  this.currentSession.title = this.cleanTitle(title);
467017
467250
  this.currentSession.summary = this.cleanTitle(summary);
467018
467251
  }
467252
+ this.notifyMessagesChanged();
467019
467253
  if (this.currentSession.messageCount === 2 && message.role === "assistant") {
467020
467254
  this.generateAndUpdateSummary().catch((error40) => {
467021
467255
  logger.error("Failed to generate conversation summary:", error40);
@@ -467056,6 +467290,7 @@ var init_sessionManager = __esm({
467056
467290
  targetSession.title = result2.title;
467057
467291
  targetSession.summary = result2.summary;
467058
467292
  await this.saveSession(targetSession);
467293
+ this.notifyMessagesChanged();
467059
467294
  logger.info("Summary agent: Successfully updated session summary", {
467060
467295
  sessionId: targetSessionId,
467061
467296
  title: result2.title,
@@ -468314,8 +468549,10 @@ __export(custom_exports, {
468314
468549
  default: () => custom_default,
468315
468550
  deleteCustomCommand: () => deleteCustomCommand,
468316
468551
  getCustomCommands: () => getCustomCommands,
468552
+ importCustomCommandsForLocation: () => importCustomCommandsForLocation,
468317
468553
  isCommandNameConflict: () => isCommandNameConflict,
468318
468554
  loadCustomCommands: () => loadCustomCommands,
468555
+ loadCustomCommandsForLocation: () => loadCustomCommandsForLocation,
468319
468556
  registerCustomCommands: () => registerCustomCommands,
468320
468557
  saveCustomCommand: () => saveCustomCommand
468321
468558
  });
@@ -468323,6 +468560,9 @@ import { homedir as homedir15 } from "os";
468323
468560
  import { dirname as dirname11, join as join29 } from "path";
468324
468561
  import { readdir as readdir4, readFile as readFile2, writeFile, mkdir as mkdir3, unlink as unlink3 } from "fs/promises";
468325
468562
  import { existsSync as existsSync26 } from "fs";
468563
+ function isRecord2(value) {
468564
+ return typeof value === "object" && value !== null && !Array.isArray(value);
468565
+ }
468326
468566
  function isValidSlashCommandName(name) {
468327
468567
  const trimmed = name.trim();
468328
468568
  if (trimmed.length === 0)
@@ -468475,6 +468715,10 @@ async function loadCustomCommands(projectRoot) {
468475
468715
  }
468476
468716
  return commands;
468477
468717
  }
468718
+ async function loadCustomCommandsForLocation(location, projectRoot) {
468719
+ const dir = getCustomCommandsDir(location, projectRoot);
468720
+ return loadCommandsFromDir(dir, location);
468721
+ }
468478
468722
  function isCommandNameConflict(name) {
468479
468723
  const allCommands = getAvailableCommands();
468480
468724
  return allCommands.includes(name);
@@ -468502,6 +468746,50 @@ async function saveCustomCommand(name, command, type, description, location = "g
468502
468746
  function getCustomCommands() {
468503
468747
  return customCommandsCache;
468504
468748
  }
468749
+ function isBuiltInCommandNameConflict(name) {
468750
+ const existingCustomNames = new Set(customCommandsCache.map((cmd) => cmd.name));
468751
+ const allCommands = getAvailableCommands();
468752
+ return allCommands.includes(name) && !existingCustomNames.has(name);
468753
+ }
468754
+ function normalizeImportedCustomCommand(value, location) {
468755
+ if (!isRecord2(value)) {
468756
+ return null;
468757
+ }
468758
+ const { name, command, type, description } = value;
468759
+ if (typeof name !== "string" || typeof command !== "string" || type !== "execute" && type !== "prompt") {
468760
+ return null;
468761
+ }
468762
+ const trimmedName = name.trim();
468763
+ if (trimmedName.length === 0) {
468764
+ return null;
468765
+ }
468766
+ return {
468767
+ name: trimmedName,
468768
+ command,
468769
+ type,
468770
+ ...typeof description === "string" ? { description } : {},
468771
+ location
468772
+ };
468773
+ }
468774
+ async function importCustomCommandsForLocation(commands, location, projectRoot) {
468775
+ if (!Array.isArray(commands)) {
468776
+ throw new TypeError(`customCommands.${location} must be an array`);
468777
+ }
468778
+ await ensureCommandsDir(location, projectRoot);
468779
+ const dir = getCustomCommandsDir(location, projectRoot);
468780
+ for (const item of commands) {
468781
+ const command = normalizeImportedCustomCommand(item, location);
468782
+ if (!command) {
468783
+ continue;
468784
+ }
468785
+ if (isBuiltInCommandNameConflict(command.name)) {
468786
+ throw new Error(`Command name "${command.name}" conflicts with an existing built-in command`);
468787
+ }
468788
+ const filePath = getCommandJsonFilePath(dir, command.name);
468789
+ await mkdir3(dirname11(filePath), { recursive: true });
468790
+ await writeFile(filePath, JSON.stringify(command, null, 2), "utf-8");
468791
+ }
468792
+ }
468505
468793
  async function deleteCustomCommand(name, location = "global", projectRoot) {
468506
468794
  const dir = getCustomCommandsDir(location, projectRoot);
468507
468795
  const filePath = getCommandJsonFilePath(dir, name);
@@ -468867,6 +469155,29 @@ Begin now. Create a detailed research plan with 6-10 sub-questions, then execute
468867
469155
  }
468868
469156
  });
468869
469157
 
469158
+ // dist/utils/commands/delSession.js
469159
+ var delSession_exports = {};
469160
+ __export(delSession_exports, {
469161
+ default: () => delSession_default
469162
+ });
469163
+ var delSession_default;
469164
+ var init_delSession = __esm({
469165
+ "dist/utils/commands/delSession.js"() {
469166
+ "use strict";
469167
+ init_commandExecutor();
469168
+ registerCommand("del-session", {
469169
+ execute: () => {
469170
+ return {
469171
+ success: true,
469172
+ action: "deleteCurrentSession",
469173
+ message: "Deleting current session"
469174
+ };
469175
+ }
469176
+ });
469177
+ delSession_default = {};
469178
+ }
469179
+ });
469180
+
468870
469181
  // dist/utils/commands/diff.js
468871
469182
  var init_diff2 = __esm({
468872
469183
  "dist/utils/commands/diff.js"() {
@@ -469756,6 +470067,183 @@ var init_taskManager = __esm({
469756
470067
  }
469757
470068
  });
469758
470069
 
470070
+ // dist/utils/platform/notification.js
470071
+ import { Buffer as Buffer3 } from "node:buffer";
470072
+ import { spawn as spawn9 } from "node:child_process";
470073
+ import process20 from "node:process";
470074
+ function getAgentTurnCompletionChannels(platform6 = process20.platform) {
470075
+ return { toast: ["win32", "darwin", "linux"].includes(platform6) };
470076
+ }
470077
+ function truncate(value, maxLength) {
470078
+ if (maxLength <= 0) {
470079
+ return "";
470080
+ }
470081
+ if (value.length <= maxLength) {
470082
+ return value;
470083
+ }
470084
+ if (maxLength <= 3) {
470085
+ return ".".repeat(maxLength);
470086
+ }
470087
+ return `${value.slice(0, maxLength - 3)}...`;
470088
+ }
470089
+ function cleanNotificationText(value) {
470090
+ return value.replaceAll(notificationControlCharacters, " ").replaceAll(/\s+/g, " ").trim();
470091
+ }
470092
+ function escapePowerShellSingleQuotedString(value) {
470093
+ return cleanNotificationText(value).replaceAll("'", "''");
470094
+ }
470095
+ function escapeAppleScriptString(value) {
470096
+ return cleanNotificationText(value).replaceAll("\\", "\\\\").replaceAll('"', '\\"');
470097
+ }
470098
+ function formatTaskNotification({ taskTitle, status, errorMessage }) {
470099
+ const title = status === "completed" ? "Snow task completed" : "Snow task failed";
470100
+ const body = status === "completed" ? taskTitle : `${taskTitle}: ${errorMessage ?? "Unknown error"}`;
470101
+ return formatNotificationPayload(title, body);
470102
+ }
470103
+ function formatAgentTurnCompletionNotification({ projectName }) {
470104
+ return formatNotificationPayload("Snow agent waiting for input", projectName);
470105
+ }
470106
+ function shouldNotifyAgentTurnCompletion({ terminalFocused = true, wasUserInterrupted = false, willAutoContinue = false, pendingMessageCount = 0, hasOnStopHook = false }) {
470107
+ return !terminalFocused && !wasUserInterrupted && !willAutoContinue && pendingMessageCount === 0 && !hasOnStopHook;
470108
+ }
470109
+ function formatNotificationPayload(title, body) {
470110
+ return {
470111
+ title: truncate(cleanNotificationText(title), maxTitleLength),
470112
+ body: truncate(cleanNotificationText(body), maxBodyLength)
470113
+ };
470114
+ }
470115
+ function buildTerminalNotificationSequences(title, body) {
470116
+ const message = [cleanNotificationText(title), cleanNotificationText(body)].filter(Boolean).join(": ");
470117
+ return message ? [`\x1B]9;${message}\x07`, "\x07"] : ["\x07"];
470118
+ }
470119
+ function buildToastScript(title, body) {
470120
+ const safeTitle = escapePowerShellSingleQuotedString(title || appId);
470121
+ const safeBody = escapePowerShellSingleQuotedString(body || title || appId);
470122
+ return `
470123
+ try {
470124
+ Add-Type -AssemblyName System.Windows.Forms
470125
+ Add-Type -AssemblyName System.Drawing
470126
+
470127
+ $notification = New-Object System.Windows.Forms.NotifyIcon
470128
+ $notification.Icon = [System.Drawing.SystemIcons]::Information
470129
+ $notification.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Info
470130
+ $notification.BalloonTipTitle = '${safeTitle}'
470131
+ $notification.BalloonTipText = '${safeBody}'
470132
+ $notification.Visible = $true
470133
+ $notification.ShowBalloonTip(5000)
470134
+ Start-Sleep -Seconds 6
470135
+ $notification.Dispose()
470136
+ } catch {
470137
+ exit 0
470138
+ }
470139
+ `;
470140
+ }
470141
+ function buildMacOsNotificationArguments(title, body) {
470142
+ const safeTitle = escapeAppleScriptString(title);
470143
+ const safeBody = escapeAppleScriptString(body);
470144
+ return ["-e", `display notification "${safeBody}" with title "${safeTitle}"`];
470145
+ }
470146
+ function buildLinuxNotificationArguments(title, body) {
470147
+ const safeTitle = cleanNotificationText(title) || appId;
470148
+ const safeBody = cleanNotificationText(body);
470149
+ const baseArguments = [`--app-name=${appId}`, safeTitle];
470150
+ return safeBody ? [...baseArguments, safeBody] : baseArguments;
470151
+ }
470152
+ function writeTerminalNotification(title, body) {
470153
+ var _a20;
470154
+ if (!((_a20 = process20.stdout) == null ? void 0 : _a20.isTTY)) {
470155
+ return;
470156
+ }
470157
+ for (const sequence of buildTerminalNotificationSequences(title, body)) {
470158
+ try {
470159
+ process20.stdout.write(sequence);
470160
+ } catch {
470161
+ }
470162
+ }
470163
+ }
470164
+ function spawnDetachedBestEffort(command, args2) {
470165
+ try {
470166
+ const child = spawn9(command, args2, {
470167
+ detached: true,
470168
+ stdio: "ignore",
470169
+ windowsHide: true
470170
+ });
470171
+ child.on("error", () => void 0);
470172
+ child.unref();
470173
+ } catch {
470174
+ }
470175
+ }
470176
+ function showWindowsToastNotification({ title, body }) {
470177
+ const encodedCommand = Buffer3.from(buildToastScript(title, body), "utf16le").toString("base64");
470178
+ spawnDetachedBestEffort("cmd.exe", [
470179
+ "/d",
470180
+ "/s",
470181
+ "/c",
470182
+ "start",
470183
+ '""',
470184
+ "/min",
470185
+ "powershell",
470186
+ "-NoProfile",
470187
+ "-WindowStyle",
470188
+ "Hidden",
470189
+ "-ExecutionPolicy",
470190
+ "Bypass",
470191
+ "-EncodedCommand",
470192
+ encodedCommand
470193
+ ]);
470194
+ }
470195
+ function showMacOsNotification({ title, body }) {
470196
+ spawnDetachedBestEffort("osascript", buildMacOsNotificationArguments(title, body));
470197
+ }
470198
+ function showLinuxNotification({ title, body }) {
470199
+ spawnDetachedBestEffort("notify-send", buildLinuxNotificationArguments(title, body));
470200
+ }
470201
+ function showDesktopNotification(payload) {
470202
+ switch (process20.platform) {
470203
+ case "win32": {
470204
+ showWindowsToastNotification(payload);
470205
+ break;
470206
+ }
470207
+ case "darwin": {
470208
+ showMacOsNotification(payload);
470209
+ break;
470210
+ }
470211
+ case "linux": {
470212
+ showLinuxNotification(payload);
470213
+ break;
470214
+ }
470215
+ default: {
470216
+ break;
470217
+ }
470218
+ }
470219
+ }
470220
+ function showPlatformNotification({ title, body }, channels = {}) {
470221
+ const { terminal: terminal2 = true, toast = true } = channels;
470222
+ if (terminal2) {
470223
+ writeTerminalNotification(title, body);
470224
+ }
470225
+ if (toast) {
470226
+ showDesktopNotification({ title, body });
470227
+ }
470228
+ }
470229
+ function notifyTaskFinished(notification, channels = {}) {
470230
+ showPlatformNotification(formatTaskNotification(notification), channels);
470231
+ }
470232
+ function notifyAgentTurnComplete(notification, channels = agentTurnCompletionChannels) {
470233
+ showPlatformNotification(formatAgentTurnCompletionNotification(notification), channels);
470234
+ }
470235
+ var appId, maxTitleLength, maxBodyLength, notificationControlCharacters, agentTurnCompletionChannels;
470236
+ var init_notification = __esm({
470237
+ "dist/utils/platform/notification.js"() {
470238
+ "use strict";
470239
+ appId = "Snow CLI";
470240
+ maxTitleLength = 80;
470241
+ maxBodyLength = 240;
470242
+ notificationControlCharacters = /[\u0000-\u001F\u007F]/g;
470243
+ agentTurnCompletionChannels = getAgentTurnCompletionChannels();
470244
+ }
470245
+ });
470246
+
469759
470247
  // dist/utils/core/fileUtils.js
469760
470248
  var fileUtils_exports = {};
469761
470249
  __export(fileUtils_exports, {
@@ -470186,6 +470674,190 @@ var init_messageCleanup = __esm({
470186
470674
  }
470187
470675
  });
470188
470676
 
470677
+ // dist/agents/visionAgent.js
470678
+ function normalizeImageData(image2) {
470679
+ var _a20, _b14;
470680
+ const data = ((_a20 = image2.data) == null ? void 0 : _a20.trim()) || "";
470681
+ if (!data || /^https?:\/\//i.test(data) || /^data:/i.test(data)) {
470682
+ return image2;
470683
+ }
470684
+ const mimeType = ((_b14 = image2.mimeType) == null ? void 0 : _b14.trim()) || "image/png";
470685
+ return {
470686
+ ...image2,
470687
+ data: `data:${mimeType};base64,${data}`,
470688
+ mimeType
470689
+ };
470690
+ }
470691
+ function buildVisionConfigOverride(config3) {
470692
+ var _a20, _b14, _c6;
470693
+ const visionModel = (_a20 = config3.visionModel) == null ? void 0 : _a20.trim();
470694
+ if (!visionModel) {
470695
+ return null;
470696
+ }
470697
+ return {
470698
+ baseUrl: ((_b14 = config3.visionBaseUrl) == null ? void 0 : _b14.trim()) || config3.baseUrl,
470699
+ baseUrlMode: config3.visionBaseUrlMode || config3.baseUrlMode,
470700
+ apiKey: ((_c6 = config3.visionApiKey) == null ? void 0 : _c6.trim()) || config3.apiKey,
470701
+ requestMethod: config3.visionRequestMethod || config3.requestMethod,
470702
+ advancedModel: visionModel,
470703
+ basicModel: visionModel,
470704
+ supportsVision: true
470705
+ };
470706
+ }
470707
+ function getConfiguredRequestMethod(config3) {
470708
+ return config3.visionRequestMethod || config3.requestMethod;
470709
+ }
470710
+ function buildDescriptionPrompt(imageCount, source2) {
470711
+ const sourceLabel = source2 === "tool" ? "tool result" : "user message";
470712
+ return `The attached ${imageCount === 1 ? "image is" : "images are"} from a ${sourceLabel}. Describe each image accurately and concisely for another AI model that cannot see images.
470713
+
470714
+ Requirements:
470715
+ 1. If there are multiple images, number them as Image 1, Image 2, etc.
470716
+ 2. Include visible text, UI elements, diagrams, charts, code, errors, layout, objects, and any relevant details.
470717
+ 3. Do not invent details that are not visible.
470718
+ 4. Respond with plain text only.`;
470719
+ }
470720
+ function appendVisionText(content, addition) {
470721
+ const trimmedContent = (content == null ? void 0 : content.trimEnd()) || "";
470722
+ const trimmedAddition = addition.trim();
470723
+ if (!trimmedContent) {
470724
+ return trimmedAddition;
470725
+ }
470726
+ return `${trimmedContent}
470727
+
470728
+ ${trimmedAddition}`;
470729
+ }
470730
+ var IMAGE_UNAVAILABLE_NOTICE, VisionAgent, visionAgent;
470731
+ var init_visionAgent = __esm({
470732
+ "dist/agents/visionAgent.js"() {
470733
+ "use strict";
470734
+ init_apiConfig();
470735
+ init_logger();
470736
+ init_chat();
470737
+ init_responses();
470738
+ init_gemini();
470739
+ init_anthropic();
470740
+ IMAGE_UNAVAILABLE_NOTICE = "Visual processing hint: The current main model does not support image recognition, and the image field in this message has been removed by the system; due to the lack of a configured available visual model or failure in the visual model call, the image content cannot be provided. Please do not claim that you have seen these images.";
470741
+ VisionAgent = class {
470742
+ shouldProcessImages(config3 = getSnowConfig()) {
470743
+ return config3.supportsVision === false;
470744
+ }
470745
+ async callModel(messages, config3, configOverride, abortSignal) {
470746
+ var _a20, _b14;
470747
+ const requestMethod = getConfiguredRequestMethod(config3);
470748
+ const modelName = configOverride.advancedModel || config3.visionModel || "";
470749
+ let streamGenerator;
470750
+ switch (requestMethod) {
470751
+ case "anthropic":
470752
+ streamGenerator = createStreamingAnthropicCompletion({
470753
+ model: modelName,
470754
+ messages,
470755
+ max_tokens: 1200,
470756
+ includeBuiltinSystemPrompt: false,
470757
+ disableThinking: true,
470758
+ configOverride
470759
+ }, abortSignal);
470760
+ break;
470761
+ case "gemini":
470762
+ streamGenerator = createStreamingGeminiCompletion({
470763
+ model: modelName,
470764
+ messages,
470765
+ includeBuiltinSystemPrompt: false,
470766
+ disableThinking: true,
470767
+ configOverride
470768
+ }, abortSignal);
470769
+ break;
470770
+ case "responses":
470771
+ streamGenerator = createStreamingResponse({
470772
+ model: modelName,
470773
+ messages,
470774
+ stream: true,
470775
+ includeBuiltinSystemPrompt: false,
470776
+ disableThinking: true,
470777
+ configOverride
470778
+ }, abortSignal);
470779
+ break;
470780
+ case "chat":
470781
+ default:
470782
+ streamGenerator = createStreamingChatCompletion({
470783
+ model: modelName,
470784
+ messages,
470785
+ stream: true,
470786
+ includeBuiltinSystemPrompt: false,
470787
+ disableThinking: true,
470788
+ configOverride
470789
+ }, abortSignal);
470790
+ break;
470791
+ }
470792
+ let completeContent = "";
470793
+ for await (const chunk2 of streamGenerator) {
470794
+ if (abortSignal == null ? void 0 : abortSignal.aborted) {
470795
+ throw new Error("Request aborted");
470796
+ }
470797
+ if (requestMethod === "chat") {
470798
+ if (chunk2.choices && ((_b14 = (_a20 = chunk2.choices[0]) == null ? void 0 : _a20.delta) == null ? void 0 : _b14.content)) {
470799
+ completeContent += chunk2.choices[0].delta.content;
470800
+ }
470801
+ } else if (chunk2.type === "content" && chunk2.content) {
470802
+ completeContent += chunk2.content;
470803
+ }
470804
+ }
470805
+ return completeContent.trim();
470806
+ }
470807
+ async describeImages(images, source2, abortSignal) {
470808
+ const config3 = getSnowConfig();
470809
+ const configOverride = buildVisionConfigOverride(config3);
470810
+ if (!configOverride) {
470811
+ return null;
470812
+ }
470813
+ const normalizedImages = images.map(normalizeImageData);
470814
+ const messages = [
470815
+ {
470816
+ role: "user",
470817
+ content: buildDescriptionPrompt(normalizedImages.length, source2),
470818
+ images: normalizedImages
470819
+ }
470820
+ ];
470821
+ try {
470822
+ const description = await this.callModel(messages, config3, configOverride, abortSignal);
470823
+ return description || null;
470824
+ } catch (error40) {
470825
+ logger.warn("Vision agent: failed to describe images", error40);
470826
+ return null;
470827
+ }
470828
+ }
470829
+ async prepareContentForNonVisionModel(content, images, options3) {
470830
+ if (!images || images.length === 0) {
470831
+ return { content, images };
470832
+ }
470833
+ const config3 = getSnowConfig();
470834
+ if (!this.shouldProcessImages(config3)) {
470835
+ return { content, images };
470836
+ }
470837
+ const description = await this.describeImages(images, options3.source, options3.abortSignal);
470838
+ const replacementText = description ? `The current model does not support image recognition. The visual model has generated the following description for the image field\uFF1A
470839
+ ${description}` : IMAGE_UNAVAILABLE_NOTICE;
470840
+ return {
470841
+ content: appendVisionText(content, replacementText),
470842
+ images: void 0
470843
+ };
470844
+ }
470845
+ async prepareToolResultForNonVisionModel(result2, abortSignal) {
470846
+ if (!result2.images || result2.images.length === 0) {
470847
+ return result2;
470848
+ }
470849
+ const processed = await this.prepareContentForNonVisionModel(result2.content, result2.images, { source: "tool", abortSignal });
470850
+ return {
470851
+ ...result2,
470852
+ content: processed.content,
470853
+ images: processed.images
470854
+ };
470855
+ }
470856
+ };
470857
+ visionAgent = new VisionAgent();
470858
+ }
470859
+ });
470860
+
470189
470861
  // dist/utils/session/sessionConverter.js
470190
470862
  var sessionConverter_exports = {};
470191
470863
  __export(sessionConverter_exports, {
@@ -470621,18 +471293,19 @@ async function prepareConversationSetup(options3) {
470621
471293
  };
470622
471294
  }
470623
471295
  async function appendUserMessageAndSyncContext(options3) {
470624
- const { conversationMessages, userContent, editorContext, imageContents, saveMessage } = options3;
470625
- const finalUserContent = buildEditorContextContent(editorContext, userContent);
471296
+ const { conversationMessages, userContent, editorContext, imageContents, saveMessage, abortSignal } = options3;
471297
+ const processedVisionContent = await visionAgent.prepareContentForNonVisionModel(userContent, imageContents, { source: "user", abortSignal });
471298
+ const finalUserContent = buildEditorContextContent(editorContext, processedVisionContent.content);
470626
471299
  conversationMessages.push({
470627
471300
  role: "user",
470628
471301
  content: finalUserContent,
470629
- images: imageContents
471302
+ images: processedVisionContent.images
470630
471303
  });
470631
471304
  try {
470632
471305
  await saveMessage({
470633
471306
  role: "user",
470634
- content: userContent,
470635
- images: imageContents
471307
+ content: processedVisionContent.content,
471308
+ images: processedVisionContent.images
470636
471309
  });
470637
471310
  } catch (error40) {
470638
471311
  console.error("Failed to save user message:", error40);
@@ -470663,6 +471336,7 @@ var init_conversationSetup = __esm({
470663
471336
  init_sessionInitializer();
470664
471337
  init_editorContextBuilder();
470665
471338
  init_messageCleanup();
471339
+ init_visionAgent();
470666
471340
  }
470667
471341
  });
470668
471342
 
@@ -471859,7 +472533,7 @@ import * as os24 from "os";
471859
472533
  function escapePowerShellString(value) {
471860
472534
  return value.replace(/'/g, "''");
471861
472535
  }
471862
- function escapeAppleScriptString(value) {
472536
+ function escapeAppleScriptString2(value) {
471863
472537
  return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
471864
472538
  }
471865
472539
  function shellQuote(value) {
@@ -471926,8 +472600,8 @@ async function showSaveDialog(defaultFilename = "export.txt", title = "Save File
471926
472600
  if (platform6 === "darwin") {
471927
472601
  const defaultPath = path51.join(os24.homedir(), "Downloads", defaultFilename);
471928
472602
  const script = `
471929
- set defaultPath to POSIX file "${escapeAppleScriptString(defaultPath)}"
471930
- set saveFile to choose file name with prompt "${escapeAppleScriptString(title)}" default location (POSIX file "${escapeAppleScriptString(os24.homedir())}/Downloads") default name "${escapeAppleScriptString(defaultFilename)}"
472603
+ set defaultPath to POSIX file "${escapeAppleScriptString2(defaultPath)}"
472604
+ set saveFile to choose file name with prompt "${escapeAppleScriptString2(title)}" default location (POSIX file "${escapeAppleScriptString2(os24.homedir())}/Downloads") default name "${escapeAppleScriptString2(defaultFilename)}"
471931
472605
  return POSIX path of saveFile
471932
472606
  `;
471933
472607
  const { stdout } = await execAsync2(`osascript -e ${shellQuote(script)}`);
@@ -471958,7 +472632,7 @@ async function showOpenDialog(title = "Open File") {
471958
472632
  try {
471959
472633
  if (platform6 === "darwin") {
471960
472634
  const script = `
471961
- set selectedFile to choose file with prompt "${escapeAppleScriptString(title)}" of type {"yaml", "yml"}
472635
+ set selectedFile to choose file with prompt "${escapeAppleScriptString2(title)}" of type {"yaml", "yml"}
471962
472636
  return POSIX path of selectedFile
471963
472637
  `;
471964
472638
  const { stdout } = await execAsync2(`osascript -e ${shellQuote(script)}`);
@@ -471987,7 +472661,7 @@ async function showConfirmDialog(message, title = "Confirm") {
471987
472661
  const platform6 = os24.platform();
471988
472662
  try {
471989
472663
  if (platform6 === "darwin") {
471990
- const script = `display dialog "${escapeAppleScriptString(message)}" with title "${escapeAppleScriptString(title)}" buttons {"Cancel", "Continue"} default button "Continue" cancel button "Cancel" with icon caution`;
472664
+ const script = `display dialog "${escapeAppleScriptString2(message)}" with title "${escapeAppleScriptString2(title)}" buttons {"Cancel", "Continue"} default button "Continue" cancel button "Cancel" with icon caution`;
471991
472665
  await execAsync2(`osascript -e ${shellQuote(script)}`);
471992
472666
  return true;
471993
472667
  } else if (platform6 === "win32") {
@@ -472575,6 +473249,32 @@ import { readFile as readFile3, writeFile as writeFile3 } from "fs/promises";
472575
473249
  function isPlainObject3(value) {
472576
473250
  return typeof value === "object" && value !== null && !Array.isArray(value);
472577
473251
  }
473252
+ function normalizeRequestMethod3(method) {
473253
+ if (method === "chat" || method === "responses" || method === "gemini" || method === "anthropic") {
473254
+ return method;
473255
+ }
473256
+ return DEFAULT_CONFIG3.snowcfg.requestMethod;
473257
+ }
473258
+ function normalizeApiConfigForImport(value) {
473259
+ const raw = isPlainObject3(value) ? value : {};
473260
+ return {
473261
+ ...DEFAULT_CONFIG3.snowcfg,
473262
+ ...raw,
473263
+ baseUrlMode: normalizeBaseUrlMode(raw.baseUrlMode),
473264
+ visionBaseUrlMode: normalizeBaseUrlMode(raw.visionBaseUrlMode),
473265
+ requestMethod: normalizeRequestMethod3(raw.requestMethod),
473266
+ visionRequestMethod: normalizeRequestMethod3(raw.visionRequestMethod),
473267
+ supportsVision: raw.supportsVision !== false
473268
+ };
473269
+ }
473270
+ function normalizeAppConfigForImport(value) {
473271
+ const raw = isPlainObject3(value) ? value : {};
473272
+ return {
473273
+ ...DEFAULT_CONFIG3,
473274
+ ...raw,
473275
+ snowcfg: normalizeApiConfigForImport(raw.snowcfg)
473276
+ };
473277
+ }
472578
473278
  function toYamlValue(value) {
472579
473279
  if (value === void 0 || value === null) {
472580
473280
  return null;
@@ -472653,7 +473353,26 @@ function getHooksExportData() {
472653
473353
  }
472654
473354
  return result2;
472655
473355
  }
472656
- function getConfigManagerExportData() {
473356
+ function toCustomCommandsExportValue(commands) {
473357
+ return toYamlValue(commands.map((command) => ({
473358
+ name: command.name,
473359
+ command: command.command,
473360
+ type: command.type,
473361
+ ...command.description ? { description: command.description } : {},
473362
+ location: command.location
473363
+ })));
473364
+ }
473365
+ async function getCustomCommandsExportData(workingDirectory) {
473366
+ const [globalCommands, projectCommands] = await Promise.all([
473367
+ loadCustomCommandsForLocation("global"),
473368
+ loadCustomCommandsForLocation("project", workingDirectory)
473369
+ ]);
473370
+ return {
473371
+ global: toCustomCommandsExportValue(globalCommands),
473372
+ project: toCustomCommandsExportValue(projectCommands)
473373
+ };
473374
+ }
473375
+ async function getConfigManagerExportData() {
472657
473376
  const workingDirectory = process.cwd();
472658
473377
  return {
472659
473378
  formatVersion: 1,
@@ -472664,7 +473383,7 @@ function getConfigManagerExportData() {
472664
473383
  name: profile.name,
472665
473384
  displayName: profile.displayName,
472666
473385
  isActive: profile.isActive,
472667
- config: toYamlValue(profile.config)
473386
+ config: toYamlValue(normalizeAppConfigForImport(profile.config))
472668
473387
  })),
472669
473388
  systemPrompt: toYamlValue(getSystemPromptConfig() ?? null),
472670
473389
  customHeaders: toYamlValue(getCustomHeadersConfig() ?? null),
@@ -472685,17 +473404,18 @@ function getConfigManagerExportData() {
472685
473404
  sensitiveCommands: {
472686
473405
  all: toYamlValue(getAllSensitiveCommands())
472687
473406
  },
473407
+ customCommands: await getCustomCommandsExportData(workingDirectory),
472688
473408
  hooks: getHooksExportData(),
472689
473409
  language: toYamlValue(loadLanguageConfig()),
472690
473410
  theme: toYamlValue(loadThemeConfig())
472691
473411
  };
472692
473412
  }
472693
- function serializeConfigManagerExportToYaml() {
472694
- return `${serializeYamlValue(getConfigManagerExportData())}
473413
+ async function serializeConfigManagerExportToYaml() {
473414
+ return `${serializeYamlValue(await getConfigManagerExportData())}
472695
473415
  `;
472696
473416
  }
472697
473417
  async function exportConfigManagerToYamlFile(filePath) {
472698
- await writeFile3(filePath, serializeConfigManagerExportToYaml(), "utf8");
473418
+ await writeFile3(filePath, await serializeConfigManagerExportToYaml(), "utf8");
472699
473419
  }
472700
473420
  function hasOwn(data, key) {
472701
473421
  return Object.prototype.hasOwnProperty.call(data, key);
@@ -472723,7 +473443,7 @@ function importProfiles(value) {
472723
473443
  }
472724
473444
  const profile = item;
472725
473445
  if (typeof profile.name === "string" && isPlainObject3(profile.config)) {
472726
- saveProfile(profile.name, profile.config);
473446
+ saveProfile(profile.name, normalizeAppConfigForImport(profile.config));
472727
473447
  }
472728
473448
  }
472729
473449
  }
@@ -472771,15 +473491,37 @@ function importSensitiveCommands(value) {
472771
473491
  throw new TypeError("sensitiveCommands must be an object or array");
472772
473492
  }
472773
473493
  if (hasOwn(value, "global")) {
472774
- saveSensitiveCommandsForScope("global", { commands: value["global"] });
473494
+ saveSensitiveCommandsForScope("global", {
473495
+ commands: value["global"]
473496
+ });
472775
473497
  }
472776
473498
  if (hasOwn(value, "project")) {
472777
- saveSensitiveCommandsForScope("project", { commands: value["project"] });
473499
+ saveSensitiveCommandsForScope("project", {
473500
+ commands: value["project"]
473501
+ });
472778
473502
  }
472779
473503
  if (hasOwn(value, "all") && Array.isArray(value["all"])) {
472780
473504
  saveSensitiveCommands(stripSensitiveScope(value["all"]));
472781
473505
  }
472782
473506
  }
473507
+ async function importCustomCommandsConfig(value) {
473508
+ if (Array.isArray(value)) {
473509
+ await importCustomCommandsForLocation(value, "global");
473510
+ await registerCustomCommands(process.cwd());
473511
+ return;
473512
+ }
473513
+ if (!isPlainObject3(value)) {
473514
+ throw new TypeError("customCommands must be an object or array");
473515
+ }
473516
+ const scopes = ["global", "project"];
473517
+ for (const scope of scopes) {
473518
+ if (!hasOwn(value, scope)) {
473519
+ continue;
473520
+ }
473521
+ await importCustomCommandsForLocation(value[scope], scope, scope === "project" ? process.cwd() : void 0);
473522
+ }
473523
+ await registerCustomCommands(process.cwd());
473524
+ }
472783
473525
  function importHooks(value) {
472784
473526
  if (!isPlainObject3(value)) {
472785
473527
  throw new TypeError("hooks must be an object");
@@ -472838,6 +473580,10 @@ async function importConfigManagerFromYamlFile(filePath) {
472838
473580
  importSensitiveCommands(data["sensitiveCommands"]);
472839
473581
  importedKeys.push("sensitiveCommands");
472840
473582
  }
473583
+ if (hasOwn(data, "customCommands")) {
473584
+ await importCustomCommandsConfig(data["customCommands"]);
473585
+ importedKeys.push("customCommands");
473586
+ }
472841
473587
  if (hasOwn(data, "hooks")) {
472842
473588
  importHooks(data["hooks"]);
472843
473589
  importedKeys.push("hooks");
@@ -472866,6 +473612,7 @@ var init_configExporter = __esm({
472866
473612
  init_subAgentConfig();
472867
473613
  init_themeConfig();
472868
473614
  init_sensitiveCommandManager();
473615
+ init_custom();
472869
473616
  IMPORTABLE_KEYS = [
472870
473617
  "profiles",
472871
473618
  "activeProfile",
@@ -472876,6 +473623,7 @@ var init_configExporter = __esm({
472876
473623
  "codebase",
472877
473624
  "subAgents",
472878
473625
  "sensitiveCommands",
473626
+ "customCommands",
472879
473627
  "hooks",
472880
473628
  "language",
472881
473629
  "theme"
@@ -473151,6 +473899,7 @@ function buildGoalCompressionHint(goal) {
473151
473899
  ].join("\n");
473152
473900
  }
473153
473901
  async function executeContextCompression(sessionId, onStatusUpdate) {
473902
+ var _a20, _b14;
473154
473903
  try {
473155
473904
  if (!sessionId) {
473156
473905
  onStatusUpdate == null ? void 0 : onStatusUpdate({
@@ -473191,7 +473940,9 @@ async function executeContextCompression(sessionId, onStatusUpdate) {
473191
473940
  images: msg.images,
473192
473941
  reasoning: msg.reasoning,
473193
473942
  thinking: msg.thinking,
473194
- subAgentInternal: msg.subAgentInternal
473943
+ subAgentInternal: msg.subAgentInternal,
473944
+ messageStatus: msg.messageStatus,
473945
+ editDiffData: msg.editDiffData
473195
473946
  }));
473196
473947
  const activeGoalForCompression = await goalManager.loadGoalForSession(currentSession.id);
473197
473948
  if (activeGoalForCompression && activeGoalForCompression.status === "pursuing") {
@@ -473342,11 +474093,7 @@ ${first3.content || ""}`;
473342
474093
  sessionManager.setCurrentSession(compressedSession2);
473343
474094
  }
473344
474095
  onStatusUpdate == null ? void 0 : onStatusUpdate({ step: "completed", sessionId: compressedSession2.id });
473345
- const newUIMessages2 = newSessionMessages2.filter((msg) => msg.role !== "tool").map((msg) => ({
473346
- role: msg.role,
473347
- content: msg.content || "",
473348
- streaming: false
473349
- }));
474096
+ const newUIMessages2 = convertSessionMessagesToUI(((_a20 = sessionManager.getCurrentSession()) == null ? void 0 : _a20.messages) ?? newSessionMessages2);
473350
474097
  const apiUsage = hybridResult.compressionApiUsage;
473351
474098
  const afterEstimate = hybridResult.afterTokensEstimate || 0;
473352
474099
  return {
@@ -473387,43 +474134,21 @@ ${first3.content || ""}`;
473387
474134
  let finalContent = `${goalHeader}[Context Summary from Previous Conversation]
473388
474135
 
473389
474136
  ${compressionResult.summary}`;
473390
- if (compressionResult.preservedMessages && compressionResult.preservedMessages.length > 0) {
473391
- finalContent += "\n\n---\n\n[Last Interaction - Preserved for Continuity]\n\n";
473392
- for (const msg of compressionResult.preservedMessages) {
473393
- if (msg.role === "user") {
473394
- finalContent += `**User:**
473395
- ${msg.content}
473396
-
473397
- `;
473398
- } else if (msg.role === "assistant") {
473399
- finalContent += `**Assistant:**
473400
- ${msg.content}`;
473401
- if (msg.tool_calls && msg.tool_calls.length > 0) {
473402
- finalContent += "\n\n**[Tool Calls Initiated]:**\n```json\n";
473403
- finalContent += JSON.stringify(msg.tool_calls, null, 2);
473404
- finalContent += "\n```\n\n";
473405
- } else {
473406
- finalContent += "\n\n";
473407
- }
473408
- } else if (msg.role === "tool") {
473409
- finalContent += `**[Tool Result - ${msg.tool_call_id}]:**
473410
- `;
473411
- try {
473412
- const parsed = JSON.parse(msg.content);
473413
- finalContent += "```json\n" + JSON.stringify(parsed, null, 2) + "\n```\n\n";
473414
- } catch {
473415
- finalContent += `${msg.content}
473416
-
473417
- `;
473418
- }
473419
- }
473420
- }
474137
+ const preservedMessages = compressionResult.preservedMessages ?? [];
474138
+ if (preservedMessages.length > 0) {
474139
+ finalContent += "\n\n---\n\n[Last Interaction - Preserved Below for Continuity]";
473421
474140
  }
473422
474141
  newSessionMessages.push({
473423
474142
  role: "user",
473424
474143
  content: finalContent,
473425
474144
  timestamp: Date.now()
473426
474145
  });
474146
+ if (preservedMessages.length > 0) {
474147
+ newSessionMessages.push(...preservedMessages.map((msg) => ({
474148
+ ...msg,
474149
+ timestamp: Date.now()
474150
+ })));
474151
+ }
473427
474152
  const compressedSession = await sessionManager.createNewSession(false, true);
473428
474153
  compressedSession.messages = newSessionMessages;
473429
474154
  compressedSession.messageCount = newSessionMessages.length;
@@ -473482,24 +474207,7 @@ ${msg.content}`;
473482
474207
  sessionId: compressedSession.id
473483
474208
  });
473484
474209
  }
473485
- const newUIMessages = [];
473486
- for (const sessionMsg of newSessionMessages) {
473487
- if (sessionMsg.role === "tool") {
473488
- continue;
473489
- }
473490
- const uiMessage = {
473491
- role: sessionMsg.role,
473492
- content: sessionMsg.content,
473493
- streaming: false
473494
- };
473495
- if (sessionMsg.tool_calls && sessionMsg.tool_calls.length > 0) {
473496
- const toolSummary = sessionMsg.tool_calls.map((tc) => `[Tool: ${tc.function.name}]`).join(", ");
473497
- if (!uiMessage.content || uiMessage.content.length < 10) {
473498
- uiMessage.content = toolSummary;
473499
- }
473500
- }
473501
- newUIMessages.push(uiMessage);
473502
- }
474210
+ const newUIMessages = convertSessionMessagesToUI(((_b14 = sessionManager.getCurrentSession()) == null ? void 0 : _b14.messages) ?? newSessionMessages);
473503
474211
  return {
473504
474212
  uiMessages: newUIMessages,
473505
474213
  usage: {
@@ -473566,6 +474274,44 @@ function useCommandHandler(options3) {
473566
474274
  }
473567
474275
  return;
473568
474276
  }
474277
+ if (result2.success && result2.action === "deleteCurrentSession") {
474278
+ const currentSession = sessionManager.getCurrentSession();
474279
+ if (!currentSession) {
474280
+ const errorMessage = {
474281
+ role: "command",
474282
+ content: t.commandPanel.delSessionFeedback.noCurrentSession,
474283
+ commandName
474284
+ };
474285
+ options3.setMessages((prev) => [...prev, errorMessage]);
474286
+ return;
474287
+ }
474288
+ const deleted = await sessionManager.deleteSession(currentSession.id);
474289
+ if (!deleted) {
474290
+ const errorMessage = {
474291
+ role: "command",
474292
+ content: t.commandPanel.delSessionFeedback.deleteFailed,
474293
+ commandName
474294
+ };
474295
+ options3.setMessages((prev) => [...prev, errorMessage]);
474296
+ return;
474297
+ }
474298
+ resetTerminal(stdout);
474299
+ options3.clearSavedMessages();
474300
+ options3.setMessages([]);
474301
+ options3.setRemountKey((prev) => prev + 1);
474302
+ options3.setContextUsage(null);
474303
+ options3.setCurrentContextPercentage(0);
474304
+ options3.currentContextPercentageRef.current = 0;
474305
+ Promise.resolve().then(() => (init_globalCleanup(), globalCleanup_exports)).then(({ cleanupGlobalResources: cleanupGlobalResources2 }) => cleanupGlobalResources2()).catch(() => {
474306
+ });
474307
+ const commandMessage = {
474308
+ role: "command",
474309
+ content: "",
474310
+ commandName
474311
+ };
474312
+ options3.setMessages([commandMessage]);
474313
+ return;
474314
+ }
473569
474315
  if (result2.success && result2.action === "clear") {
473570
474316
  (async () => {
473571
474317
  try {
@@ -473913,11 +474659,11 @@ function useCommandHandler(options3) {
473913
474659
  output: [],
473914
474660
  exitCode: null
473915
474661
  });
473916
- const { spawn: spawn15 } = __require("child_process");
474662
+ const { spawn: spawn16 } = __require("child_process");
473917
474663
  const isWindows4 = process.platform === "win32";
473918
474664
  const shell = isWindows4 ? "cmd" : "sh";
473919
474665
  const shellArgs = isWindows4 ? ["/c", result2.prompt] : ["-c", result2.prompt];
473920
- const child = spawn15(shell, shellArgs, {
474666
+ const child = spawn16(shell, shellArgs, {
473921
474667
  timeout: 3e4
473922
474668
  });
473923
474669
  let outputLines = [];
@@ -474364,6 +475110,7 @@ var init_useCommandHandler = __esm({
474364
475110
  init_sessionManager();
474365
475111
  init_contextCompressor();
474366
475112
  init_subAgentContextCompressor();
475113
+ init_sessionConverter();
474367
475114
  init_apiConfig();
474368
475115
  init_projectSettings();
474369
475116
  init_mcpToolsManager();
@@ -474823,7 +475570,7 @@ async function handleToolCallRound(ctx) {
474823
475570
  return { type: "break" };
474824
475571
  }
474825
475572
  const subAgentHandler = new SubAgentUIHandler(encoder, saveMessage, options3.setIsReasoning ? (isReasoning) => options3.setIsReasoning(isReasoning) : void 0, streamingEnabled);
474826
- const toolResults = await executeToolCalls(approvedTools, controller.signal, setStreamTokenCount, async (subAgentMessage) => {
475573
+ const rawToolResults = await executeToolCalls(approvedTools, controller.signal, setStreamTokenCount, async (subAgentMessage) => {
474827
475574
  setMessages((prev) => subAgentHandler.handleMessage(prev, subAgentMessage));
474828
475575
  }, async (toolCall, batchToolNames, allTools) => {
474829
475576
  if (connectionManager.isConnected()) {
@@ -474843,6 +475590,7 @@ async function handleToolCallRound(ctx) {
474843
475590
  function: { name: "askuser", arguments: "{}" }
474844
475591
  }, multiSelect);
474845
475592
  });
475593
+ const toolResults = await Promise.all(rawToolResults.map((result2) => visionAgent.prepareToolResultForNonVisionModel(result2, controller.signal)));
474846
475594
  if (controller.signal.aborted) {
474847
475595
  for (const toolCall of receivedToolCalls) {
474848
475596
  const abortedResult = {
@@ -475032,6 +475780,7 @@ var init_toolCallRoundHandler = __esm({
475032
475780
  init_subAgentMessageHandler();
475033
475781
  await init_pendingMessagesHandler();
475034
475782
  init_ConnectionManager();
475783
+ init_visionAgent();
475035
475784
  }
475036
475785
  });
475037
475786
 
@@ -475100,7 +475849,8 @@ async function handleConversationWithTools(options3) {
475100
475849
  userContent,
475101
475850
  editorContext,
475102
475851
  imageContents,
475103
- saveMessage
475852
+ saveMessage,
475853
+ abortSignal: controller.signal
475104
475854
  });
475105
475855
  const encoderManager = new EncoderManager();
475106
475856
  const freeEncoder = () => {
@@ -475261,7 +476011,7 @@ __export(taskExecutor_exports, {
475261
476011
  executeTask: () => executeTask,
475262
476012
  executeTaskInBackground: () => executeTaskInBackground
475263
476013
  });
475264
- import { spawn as spawn9 } from "child_process";
476014
+ import { spawn as spawn10 } from "child_process";
475265
476015
  import { writeFileSync as writeFileSync16, appendFileSync, existsSync as existsSync28, mkdirSync as mkdirSync16 } from "fs";
475266
476016
  import { join as join32 } from "path";
475267
476017
  import { homedir as homedir18 } from "os";
@@ -475283,6 +476033,20 @@ function writeLog(taskId, message) {
475283
476033
  } catch (error40) {
475284
476034
  }
475285
476035
  }
476036
+ async function notifyTaskExitFromParent(taskId) {
476037
+ try {
476038
+ const task = await taskManager.loadTask(taskId);
476039
+ if (!task || task.status !== "completed" && task.status !== "failed") {
476040
+ return;
476041
+ }
476042
+ notifyTaskFinished({
476043
+ taskTitle: task.title,
476044
+ status: task.status,
476045
+ errorMessage: task.error
476046
+ }, { toast: false });
476047
+ } catch {
476048
+ }
476049
+ }
475286
476050
  async function executeTaskInBackground(taskId, prompt) {
475287
476051
  const cliPath = process.argv[1] || "";
475288
476052
  const logPath = getLogPath(taskId);
@@ -475292,7 +476056,7 @@ async function executeTaskInBackground(taskId, prompt) {
475292
476056
  writeLog(taskId, `Starting background task with prompt: ${prompt.slice(0, 100)}...`);
475293
476057
  writeLog(taskId, `CLI path: ${cliPath}`);
475294
476058
  writeLog(taskId, `Node: ${process.execPath}`);
475295
- const child = spawn9(process.execPath, [cliPath, "--task-execute", taskId, "--", prompt], {
476059
+ const child = spawn10(process.execPath, [cliPath, "--task-execute", taskId, "--", prompt], {
475296
476060
  detached: true,
475297
476061
  stdio: ["ignore", "pipe", "pipe"],
475298
476062
  env: {
@@ -475316,6 +476080,7 @@ async function executeTaskInBackground(taskId, prompt) {
475316
476080
  });
475317
476081
  child.on("exit", (code, signal) => {
475318
476082
  writeLog(taskId, `[EXIT] Process exited with code ${code}, signal ${signal}`);
476083
+ void notifyTaskExitFromParent(taskId);
475319
476084
  });
475320
476085
  if (child.pid) {
475321
476086
  try {
@@ -475529,6 +476294,10 @@ async function executeTask(taskId, prompt) {
475529
476294
  if (completedTask) {
475530
476295
  delete completedTask.pid;
475531
476296
  await taskManager.saveTask(completedTask);
476297
+ notifyTaskFinished({
476298
+ taskTitle: completedTask.title,
476299
+ status: "completed"
476300
+ });
475532
476301
  }
475533
476302
  log("Task execution finished successfully");
475534
476303
  const finalTask = await taskManager.loadTask(taskId);
@@ -475543,6 +476312,11 @@ async function executeTask(taskId, prompt) {
475543
476312
  if (failedTask) {
475544
476313
  delete failedTask.pid;
475545
476314
  await taskManager.saveTask(failedTask);
476315
+ notifyTaskFinished({
476316
+ taskTitle: failedTask.title,
476317
+ status: "failed",
476318
+ errorMessage
476319
+ });
475546
476320
  }
475547
476321
  }
475548
476322
  }
@@ -475550,6 +476324,7 @@ var TASK_LOG_DIR;
475550
476324
  var init_taskExecutor = __esm({
475551
476325
  "dist/utils/task/taskExecutor.js"() {
475552
476326
  "use strict";
476327
+ init_notification();
475553
476328
  init_taskManager();
475554
476329
  TASK_LOG_DIR = join32(homedir18(), ".snow", "task-logs");
475555
476330
  }
@@ -478128,6 +478903,7 @@ var init_utils2 = __esm({
478128
478903
  init_copyLast();
478129
478904
  init_custom();
478130
478905
  init_deepresearch();
478906
+ init_delSession();
478131
478907
  init_diff2();
478132
478908
  init_export();
478133
478909
  init_config();
@@ -478276,11 +479052,11 @@ var require_cjs2 = __commonJS({
478276
479052
  });
478277
479053
 
478278
479054
  // node_modules/is-unicode-supported/index.js
478279
- import process20 from "node:process";
479055
+ import process21 from "node:process";
478280
479056
  function isUnicodeSupported() {
478281
- const { env: env5 } = process20;
479057
+ const { env: env5 } = process21;
478282
479058
  const { TERM, TERM_PROGRAM } = env5;
478283
- if (process20.platform !== "win32") {
479059
+ if (process21.platform !== "win32") {
478284
479060
  return TERM !== "linux";
478285
479061
  }
478286
479062
  return Boolean(env5.WT_SESSION) || Boolean(env5.TERMINUS_SUBLIME) || env5.ConEmuTask === "{cmd::Cmder}" || TERM_PROGRAM === "Terminus-Sublime" || TERM_PROGRAM === "vscode" || TERM === "xterm-256color" || TERM === "alacritty" || TERM === "rxvt-unicode" || TERM === "rxvt-unicode-256color" || env5.TERMINAL_EMULATOR === "JetBrains-JediTerm";
@@ -484690,24 +485466,28 @@ var init_UpdateNotice = __esm({
484690
485466
  });
484691
485467
 
484692
485468
  // dist/hooks/ui/useTerminalTitle.js
485469
+ function cleanTerminalTitle(title) {
485470
+ return title.replaceAll(titleControlCharacters, " ").replaceAll(/\s+/g, " ").trim();
485471
+ }
484693
485472
  function useTerminalTitle(title) {
484694
485473
  const { stdout } = use_stdout_default();
484695
485474
  (0, import_react68.useEffect)(() => {
484696
485475
  if (!(stdout == null ? void 0 : stdout.isTTY))
484697
485476
  return;
485477
+ const safeTitle = cleanTerminalTitle(title);
484698
485478
  let previousProcessTitle;
484699
485479
  try {
484700
485480
  previousProcessTitle = process.title;
484701
485481
  } catch {
484702
485482
  }
484703
- if (title) {
485483
+ if (safeTitle) {
484704
485484
  try {
484705
- process.title = title;
485485
+ process.title = safeTitle;
484706
485486
  } catch {
484707
485487
  }
484708
485488
  }
484709
485489
  try {
484710
- stdout.write(`\x1B]0;${title}\x07`);
485490
+ stdout.write(`\x1B]0;${safeTitle}\x07`);
484711
485491
  } catch {
484712
485492
  }
484713
485493
  return () => {
@@ -484726,12 +485506,13 @@ function useTerminalTitle(title) {
484726
485506
  };
484727
485507
  }, [stdout, title]);
484728
485508
  }
484729
- var import_react68;
485509
+ var import_react68, titleControlCharacters;
484730
485510
  var init_useTerminalTitle = __esm({
484731
485511
  async "dist/hooks/ui/useTerminalTitle.js"() {
484732
485512
  "use strict";
484733
485513
  import_react68 = __toESM(require_react(), 1);
484734
485514
  await init_src();
485515
+ titleControlCharacters = /[\u0000-\u001F\u007F]/g;
484735
485516
  }
484736
485517
  });
484737
485518
 
@@ -484842,6 +485623,9 @@ var init_types5 = __esm({
484842
485623
  "customHeadersSchemeId",
484843
485624
  "advancedModel",
484844
485625
  "basicModel",
485626
+ "visionBaseUrlMode",
485627
+ "visionRequestMethod",
485628
+ "visionModel",
484845
485629
  "thinkingMode",
484846
485630
  "thinkingEffort",
484847
485631
  "geminiThinkingLevel",
@@ -485034,6 +485818,12 @@ function useConfigState(options3) {
485034
485818
  const [chatReasoningEffort, setChatReasoningEffort] = (0, import_react69.useState)("high");
485035
485819
  const [advancedModel, setAdvancedModel] = (0, import_react69.useState)("");
485036
485820
  const [basicModel, setBasicModel] = (0, import_react69.useState)("");
485821
+ const [supportsVision, setSupportsVision] = (0, import_react69.useState)(true);
485822
+ const [visionBaseUrl, setVisionBaseUrl] = (0, import_react69.useState)("");
485823
+ const [visionBaseUrlMode, setVisionBaseUrlMode] = (0, import_react69.useState)("auto");
485824
+ const [visionApiKey, setVisionApiKey] = (0, import_react69.useState)("");
485825
+ const [visionRequestMethod, setVisionRequestMethod] = (0, import_react69.useState)("chat");
485826
+ const [visionModel, setVisionModel] = (0, import_react69.useState)("");
485037
485827
  const [maxContextTokens, setMaxContextTokens] = (0, import_react69.useState)(4e3);
485038
485828
  const [maxTokens, setMaxTokens] = (0, import_react69.useState)(4096);
485039
485829
  const [toolResultTokenLimit, setToolResultTokenLimit] = (0, import_react69.useState)(30);
@@ -485047,6 +485837,7 @@ function useConfigState(options3) {
485047
485837
  const [searchTerm, setSearchTerm] = (0, import_react69.useState)("");
485048
485838
  const [manualInputMode, setManualInputMode] = (0, import_react69.useState)(false);
485049
485839
  const [manualInputValue, setManualInputValue] = (0, import_react69.useState)("");
485840
+ const [visionConfigMode, setVisionConfigMode] = (0, import_react69.useState)(false);
485050
485841
  const [, forceUpdate] = (0, import_react69.useState)(0);
485051
485842
  const supportsXHigh = requestMethod === "responses";
485052
485843
  const requestMethodOptions = [
@@ -485068,6 +485859,15 @@ function useConfigState(options3) {
485068
485859
  }
485069
485860
  ];
485070
485861
  const getAllFields = () => {
485862
+ if (visionConfigMode) {
485863
+ return [
485864
+ "visionBaseUrl",
485865
+ "visionBaseUrlMode",
485866
+ "visionApiKey",
485867
+ "visionRequestMethod",
485868
+ "visionModel"
485869
+ ];
485870
+ }
485071
485871
  return [
485072
485872
  // 仅在未指定 targetProfileName(即从主菜单常规进入 ConfigScreen)时才允许
485073
485873
  // 显示/操作 profile 切换项;从 ProfileEditPanel 进入时彻底隐藏,
@@ -485105,6 +485905,8 @@ function useConfigState(options3) {
485105
485905
  ] : [],
485106
485906
  "advancedModel",
485107
485907
  "basicModel",
485908
+ "supportsVision",
485909
+ ...supportsVision ? [] : ["visionConfig"],
485108
485910
  "maxContextTokens",
485109
485911
  "maxTokens",
485110
485912
  "streamIdleTimeoutSec",
@@ -485158,6 +485960,12 @@ function useConfigState(options3) {
485158
485960
  setCurrentField("showThinking");
485159
485961
  }
485160
485962
  }, [enableAutoCompress, currentField]);
485963
+ (0, import_react69.useEffect)(() => {
485964
+ if (supportsVision && (visionConfigMode || currentField === "visionConfig" || currentField === "visionBaseUrl" || currentField === "visionBaseUrlMode" || currentField === "visionApiKey" || currentField === "visionRequestMethod" || currentField === "visionModel")) {
485965
+ setVisionConfigMode(false);
485966
+ setCurrentField("supportsVision");
485967
+ }
485968
+ }, [supportsVision, visionConfigMode, currentField]);
485161
485969
  (0, import_react69.useEffect)(() => {
485162
485970
  if (responsesReasoningEffort === "xhigh" && !supportsXHigh) {
485163
485971
  setResponsesReasoningEffort("high");
@@ -485202,6 +486010,12 @@ function useConfigState(options3) {
485202
486010
  setChatReasoningEffort(((_k = config3.chatThinking) == null ? void 0 : _k.reasoning_effort) || "high");
485203
486011
  setAdvancedModel(config3.advancedModel || "");
485204
486012
  setBasicModel(config3.basicModel || "");
486013
+ setSupportsVision(config3.supportsVision !== false);
486014
+ setVisionBaseUrl(config3.visionBaseUrl || "");
486015
+ setVisionBaseUrlMode(config3.visionBaseUrlMode || "auto");
486016
+ setVisionApiKey(config3.visionApiKey || "");
486017
+ setVisionRequestMethod(config3.visionRequestMethod || "chat");
486018
+ setVisionModel(config3.visionModel || "");
485205
486019
  setMaxContextTokens(config3.maxContextTokens || 4e3);
485206
486020
  setMaxTokens(config3.maxTokens || 4096);
485207
486021
  setToolResultTokenLimit(config3.toolResultTokenLimit ?? 30);
@@ -485217,11 +486031,12 @@ function useConfigState(options3) {
485217
486031
  const loadModels = async () => {
485218
486032
  setLoading(true);
485219
486033
  setLoadError("");
486034
+ const isVisionModelField = currentField === "visionModel";
485220
486035
  const tempConfig = {
485221
- baseUrl,
485222
- baseUrlMode,
485223
- apiKey,
485224
- requestMethod,
486036
+ baseUrl: isVisionModelField ? visionBaseUrl : baseUrl,
486037
+ baseUrlMode: isVisionModelField ? visionBaseUrlMode : baseUrlMode,
486038
+ apiKey: isVisionModelField ? visionApiKey : apiKey,
486039
+ requestMethod: isVisionModelField ? visionRequestMethod : requestMethod,
485225
486040
  customHeadersSchemeId
485226
486041
  };
485227
486042
  try {
@@ -485265,6 +486080,16 @@ function useConfigState(options3) {
485265
486080
  return advancedModel;
485266
486081
  if (currentField === "basicModel")
485267
486082
  return basicModel;
486083
+ if (currentField === "visionBaseUrl")
486084
+ return visionBaseUrl;
486085
+ if (currentField === "visionBaseUrlMode")
486086
+ return visionBaseUrlMode;
486087
+ if (currentField === "visionApiKey")
486088
+ return visionApiKey;
486089
+ if (currentField === "visionRequestMethod")
486090
+ return visionRequestMethod;
486091
+ if (currentField === "visionModel")
486092
+ return visionModel;
485268
486093
  if (currentField === "maxContextTokens")
485269
486094
  return maxContextTokens.toString();
485270
486095
  if (currentField === "maxTokens")
@@ -485298,9 +486123,9 @@ function useConfigState(options3) {
485298
486123
  return ((_a20 = customHeaderSchemes.find((s) => s.id === id)) == null ? void 0 : _a20.name) || id;
485299
486124
  };
485300
486125
  const getNormalizedBaseUrl = (value) => value.trim().replace(/\/+$/, "");
485301
- const getResolvedBaseUrl = (method) => {
486126
+ const getResolvedBaseUrl = (method, baseUrlValue = baseUrl) => {
485302
486127
  const defaultOpenAiBaseUrl = "https://api.openai.com/v1";
485303
- const trimmedBaseUrl = getNormalizedBaseUrl(baseUrl || "");
486128
+ const trimmedBaseUrl = getNormalizedBaseUrl(baseUrlValue || "");
485304
486129
  const shouldUseCustomBaseUrl = trimmedBaseUrl.length > 0 && trimmedBaseUrl !== defaultOpenAiBaseUrl;
485305
486130
  if (method === "anthropic") {
485306
486131
  const anthropicBaseUrl = shouldUseCustomBaseUrl ? trimmedBaseUrl : "https://api.anthropic.com/v1";
@@ -485314,17 +486139,21 @@ function useConfigState(options3) {
485314
486139
  return getNormalizedBaseUrl(openAiBaseUrl);
485315
486140
  };
485316
486141
  const getRequestUrl = () => {
485317
- const resolvedBaseUrl = getResolvedBaseUrl(requestMethod);
485318
- if (requestMethod === "responses") {
485319
- return resolveApiEndpoint(resolvedBaseUrl, "responses", baseUrlMode);
486142
+ const isVisionField = visionConfigMode || currentField === "visionBaseUrl" || currentField === "visionBaseUrlMode" || currentField === "visionApiKey" || currentField === "visionRequestMethod" || currentField === "visionModel";
486143
+ const activeRequestMethod = isVisionField ? visionRequestMethod : requestMethod;
486144
+ const activeBaseUrlMode = isVisionField ? visionBaseUrlMode : baseUrlMode;
486145
+ const activeModel = isVisionField ? visionModel : advancedModel;
486146
+ const resolvedBaseUrl = getResolvedBaseUrl(activeRequestMethod, isVisionField ? visionBaseUrl : baseUrl);
486147
+ if (activeRequestMethod === "responses") {
486148
+ return resolveApiEndpoint(resolvedBaseUrl, "responses", activeBaseUrlMode);
485320
486149
  }
485321
- if (requestMethod === "anthropic") {
485322
- return resolveApiEndpoint(resolvedBaseUrl, "anthropicMessages", baseUrlMode, { anthropicBeta });
486150
+ if (activeRequestMethod === "anthropic") {
486151
+ return resolveApiEndpoint(resolvedBaseUrl, "anthropicMessages", activeBaseUrlMode, { anthropicBeta });
485323
486152
  }
485324
- if (requestMethod === "gemini") {
485325
- return resolveApiEndpoint(resolvedBaseUrl, "geminiStreamGenerateContent", baseUrlMode, { modelName: advancedModel || "model-id" });
486153
+ if (activeRequestMethod === "gemini") {
486154
+ return resolveApiEndpoint(resolvedBaseUrl, "geminiStreamGenerateContent", activeBaseUrlMode, { modelName: activeModel || "model-id" });
485326
486155
  }
485327
- return resolveApiEndpoint(resolvedBaseUrl, "chat", baseUrlMode);
486156
+ return resolveApiEndpoint(resolvedBaseUrl, "chat", activeBaseUrlMode);
485328
486157
  };
485329
486158
  const getSystemPromptSelectItems = () => {
485330
486159
  const activeNames = activeSystemPromptIds.map((id) => getSystemPromptNameById(id)).join(", ");
@@ -485413,6 +486242,12 @@ function useConfigState(options3) {
485413
486242
  chatThinking: chatThinkingEnabled ? { enabled: true, reasoning_effort: chatReasoningEffort } : void 0,
485414
486243
  advancedModel,
485415
486244
  basicModel,
486245
+ supportsVision,
486246
+ visionBaseUrl,
486247
+ visionBaseUrlMode,
486248
+ visionApiKey,
486249
+ visionRequestMethod,
486250
+ visionModel,
485416
486251
  maxContextTokens,
485417
486252
  maxTokens,
485418
486253
  streamIdleTimeoutSec,
@@ -485499,6 +486334,8 @@ function useConfigState(options3) {
485499
486334
  setAdvancedModel(value);
485500
486335
  } else if (currentField === "basicModel") {
485501
486336
  setBasicModel(value);
486337
+ } else if (currentField === "visionModel") {
486338
+ setVisionModel(value);
485502
486339
  }
485503
486340
  setIsEditing(false);
485504
486341
  setSearchTerm("");
@@ -485525,6 +486362,12 @@ function useConfigState(options3) {
485525
486362
  streamingDisplay,
485526
486363
  advancedModel,
485527
486364
  basicModel,
486365
+ supportsVision,
486366
+ visionBaseUrl,
486367
+ visionBaseUrlMode,
486368
+ visionApiKey,
486369
+ visionRequestMethod,
486370
+ visionModel,
485528
486371
  maxContextTokens,
485529
486372
  maxTokens,
485530
486373
  streamIdleTimeoutSec,
@@ -485592,6 +486435,12 @@ function useConfigState(options3) {
485592
486435
  chatThinking: chatThinkingEnabled ? { enabled: true, reasoning_effort: chatReasoningEffort } : void 0,
485593
486436
  advancedModel,
485594
486437
  basicModel,
486438
+ supportsVision,
486439
+ visionBaseUrl,
486440
+ visionBaseUrlMode,
486441
+ visionApiKey,
486442
+ visionRequestMethod,
486443
+ visionModel,
485595
486444
  maxContextTokens,
485596
486445
  maxTokens,
485597
486446
  streamIdleTimeoutSec,
@@ -485686,6 +486535,18 @@ function useConfigState(options3) {
485686
486535
  setAdvancedModel,
485687
486536
  basicModel,
485688
486537
  setBasicModel,
486538
+ supportsVision,
486539
+ setSupportsVision,
486540
+ visionBaseUrl,
486541
+ setVisionBaseUrl,
486542
+ visionBaseUrlMode,
486543
+ setVisionBaseUrlMode,
486544
+ visionApiKey,
486545
+ setVisionApiKey,
486546
+ visionRequestMethod,
486547
+ setVisionRequestMethod,
486548
+ visionModel,
486549
+ setVisionModel,
485689
486550
  maxContextTokens,
485690
486551
  setMaxContextTokens,
485691
486552
  maxTokens,
@@ -485711,6 +486572,8 @@ function useConfigState(options3) {
485711
486572
  setManualInputMode,
485712
486573
  manualInputValue,
485713
486574
  setManualInputValue,
486575
+ visionConfigMode,
486576
+ setVisionConfigMode,
485714
486577
  // Derived
485715
486578
  supportsXHigh,
485716
486579
  requestMethodOptions,
@@ -485761,7 +486624,7 @@ var init_useConfigState = __esm({
485761
486624
  // dist/ui/pages/configScreen/useConfigInput.js
485762
486625
  function useConfigInput(state, callbacks) {
485763
486626
  const { onBack, onSave } = callbacks;
485764
- const { t, profileMode, setProfileMode, setNewProfileName, setRenameProfileName, markedProfiles, activeProfile, setErrors, handleCreateProfile, handleBatchDeleteProfiles, handleRenameProfile, loading, setLoading, manualInputMode, setManualInputMode, manualInputValue, setManualInputValue, isEditing, setIsEditing, currentField, setCurrentField, setSearchTerm, setPendingPromptIds, triggerForceUpdate, saveConfiguration, loadModels, getCurrentValue, getAllFields, anthropicBeta, setAnthropicBeta, enableAutoCompress, setEnableAutoCompress, showThinking, setShowThinking, streamingDisplay, setStreamingDisplay, thinkingEnabled, setThinkingEnabled, geminiThinkingEnabled, setGeminiThinkingEnabled, responsesReasoningEnabled, setResponsesReasoningEnabled, responsesFastMode, setResponsesFastMode, maxContextTokens, setMaxContextTokens, maxTokens, setMaxTokens, streamIdleTimeoutSec, setStreamIdleTimeoutSec, toolResultTokenLimit, setToolResultTokenLimit, thinkingBudgetTokens, setThinkingBudgetTokens, autoCompressThreshold, setAutoCompressThreshold, setAdvancedModel, setBasicModel, systemPromptId } = state;
486627
+ const { t, profileMode, setProfileMode, setNewProfileName, setRenameProfileName, markedProfiles, activeProfile, setErrors, handleCreateProfile, handleBatchDeleteProfiles, handleRenameProfile, loading, setLoading, manualInputMode, setManualInputMode, manualInputValue, setManualInputValue, isEditing, setIsEditing, currentField, setCurrentField, setSearchTerm, setPendingPromptIds, triggerForceUpdate, saveConfiguration, loadModels, getCurrentValue, getAllFields, anthropicBeta, setAnthropicBeta, enableAutoCompress, setEnableAutoCompress, showThinking, setShowThinking, streamingDisplay, setStreamingDisplay, thinkingEnabled, setThinkingEnabled, geminiThinkingEnabled, setGeminiThinkingEnabled, responsesReasoningEnabled, setResponsesReasoningEnabled, responsesFastMode, setResponsesFastMode, maxContextTokens, setMaxContextTokens, maxTokens, setMaxTokens, streamIdleTimeoutSec, setStreamIdleTimeoutSec, toolResultTokenLimit, setToolResultTokenLimit, thinkingBudgetTokens, setThinkingBudgetTokens, autoCompressThreshold, setAutoCompressThreshold, setAdvancedModel, setBasicModel, supportsVision, setSupportsVision, setVisionModel, visionConfigMode, setVisionConfigMode, systemPromptId } = state;
485765
486628
  use_input_default((rawInput, key) => {
485766
486629
  const input2 = stripFocusArtifacts(rawInput);
485767
486630
  if (!input2 && isFocusEventInput(rawInput)) {
@@ -485846,6 +486709,8 @@ function useConfigInput(state, callbacks) {
485846
486709
  setAdvancedModel(cleaned);
485847
486710
  } else if (currentField === "basicModel") {
485848
486711
  setBasicModel(cleaned);
486712
+ } else if (currentField === "visionModel") {
486713
+ setVisionModel(cleaned);
485849
486714
  }
485850
486715
  }
485851
486716
  setManualInputMode(false);
@@ -485872,7 +486737,7 @@ function useConfigInput(state, callbacks) {
485872
486737
  return;
485873
486738
  }
485874
486739
  if (isEditing) {
485875
- if (currentField === "baseUrl" || currentField === "apiKey") {
486740
+ if (currentField === "baseUrl" || currentField === "apiKey" || currentField === "visionBaseUrl" || currentField === "visionApiKey") {
485876
486741
  if (key.return) {
485877
486742
  setIsEditing(false);
485878
486743
  }
@@ -485896,11 +486761,17 @@ function useConfigInput(state, callbacks) {
485896
486761
  }
485897
486762
  });
485898
486763
  } else if (key.escape) {
486764
+ if (visionConfigMode) {
486765
+ setVisionConfigMode(false);
486766
+ setCurrentField("visionConfig");
486767
+ setIsEditing(false);
486768
+ return;
486769
+ }
485899
486770
  saveConfiguration().then(() => onBack());
485900
486771
  } else if (key.return) {
485901
486772
  handleEnterKey();
485902
486773
  } else if (input2 === "m" && !isEditing) {
485903
- if (currentField === "advancedModel" || currentField === "basicModel") {
486774
+ if (currentField === "advancedModel" || currentField === "basicModel" || currentField === "visionModel") {
485904
486775
  setManualInputMode(true);
485905
486776
  setManualInputValue(getCurrentValue());
485906
486777
  }
@@ -486009,11 +486880,17 @@ function useConfigInput(state, callbacks) {
486009
486880
  state.setChatThinkingEnabled(next);
486010
486881
  if (!next)
486011
486882
  setShowThinking(false);
486883
+ } else if (currentField === "supportsVision") {
486884
+ setSupportsVision(!supportsVision);
486885
+ } else if (currentField === "visionConfig") {
486886
+ setVisionConfigMode(true);
486887
+ setCurrentField("visionBaseUrl");
486888
+ setIsEditing(false);
486012
486889
  } else if (currentField === "anthropicCacheTTL" || currentField === "anthropicSpeed" || currentField === "thinkingMode" || currentField === "thinkingEffort" || currentField === "geminiThinkingLevel" || currentField === "responsesReasoningEffort" || currentField === "responsesVerbosity" || currentField === "chatReasoningEffort") {
486013
486890
  setIsEditing(true);
486014
486891
  } else if (currentField === "maxContextTokens" || currentField === "maxTokens" || currentField === "streamIdleTimeoutSec" || currentField === "toolResultTokenLimit" || currentField === "thinkingBudgetTokens" || currentField === "autoCompressThreshold") {
486015
486892
  setIsEditing(true);
486016
- } else if (currentField === "advancedModel" || currentField === "basicModel") {
486893
+ } else if (currentField === "advancedModel" || currentField === "basicModel" || currentField === "visionModel") {
486017
486894
  loadModels().then(() => {
486018
486895
  setIsEditing(true);
486019
486896
  }).catch(() => {
@@ -486335,7 +487212,7 @@ var init_ScrollableSelectInput = __esm({
486335
487212
 
486336
487213
  // dist/ui/pages/configScreen/ConfigFieldRenderer.js
486337
487214
  function ConfigFieldRenderer({ field, state }) {
486338
- var _a20, _b14, _c6, _d4;
487215
+ var _a20, _b14, _c6, _d4, _e2;
486339
487216
  const {
486340
487217
  t,
486341
487218
  theme: theme14,
@@ -486384,6 +487261,14 @@ function ConfigFieldRenderer({ field, state }) {
486384
487261
  // Model settings
486385
487262
  advancedModel,
486386
487263
  basicModel,
487264
+ supportsVision,
487265
+ visionBaseUrl,
487266
+ setVisionBaseUrl,
487267
+ visionBaseUrlMode,
487268
+ visionApiKey,
487269
+ setVisionApiKey,
487270
+ visionRequestMethod,
487271
+ visionModel,
486387
487272
  maxContextTokens,
486388
487273
  maxTokens,
486389
487274
  streamIdleTimeoutSec,
@@ -487068,6 +487953,135 @@ function ConfigFieldRenderer({ field, state }) {
487068
487953
  import_react72.default.createElement(Text, { color: theme14.colors.menuSecondary }, basicModel || t.configScreen.notSet)
487069
487954
  )
487070
487955
  );
487956
+ case "supportsVision":
487957
+ return import_react72.default.createElement(
487958
+ Box_default,
487959
+ { key: field, flexDirection: "column" },
487960
+ import_react72.default.createElement(
487961
+ Text,
487962
+ { color: activeColor },
487963
+ activeIndicator,
487964
+ t.configScreen.supportsVision
487965
+ ),
487966
+ import_react72.default.createElement(
487967
+ Box_default,
487968
+ { marginLeft: 3 },
487969
+ import_react72.default.createElement(
487970
+ Text,
487971
+ { color: theme14.colors.menuSecondary },
487972
+ supportsVision ? t.configScreen.supportsVisionYes : t.configScreen.supportsVisionNo,
487973
+ " ",
487974
+ t.configScreen.toggleHint
487975
+ )
487976
+ )
487977
+ );
487978
+ case "visionConfig":
487979
+ return import_react72.default.createElement(
487980
+ Box_default,
487981
+ { key: field, flexDirection: "column" },
487982
+ import_react72.default.createElement(
487983
+ Text,
487984
+ { color: activeColor },
487985
+ activeIndicator,
487986
+ t.configScreen.visionConfig
487987
+ ),
487988
+ import_react72.default.createElement(
487989
+ Box_default,
487990
+ { marginLeft: 3, flexDirection: "column" },
487991
+ import_react72.default.createElement(Text, { color: theme14.colors.menuSecondary }, t.configScreen.visionConfigSubtitle),
487992
+ isActive && import_react72.default.createElement(Text, { color: theme14.colors.menuSecondary, dimColor: true }, t.configScreen.visionConfigOpenHint)
487993
+ )
487994
+ );
487995
+ case "visionBaseUrl":
487996
+ return import_react72.default.createElement(
487997
+ Box_default,
487998
+ { key: field, flexDirection: "column" },
487999
+ import_react72.default.createElement(
488000
+ Text,
488001
+ { color: activeColor },
488002
+ activeIndicator,
488003
+ t.configScreen.visionBaseUrl
488004
+ ),
488005
+ isCurrentlyEditing && import_react72.default.createElement(
488006
+ Box_default,
488007
+ { marginLeft: 3 },
488008
+ import_react72.default.createElement(build_default2, { value: visionBaseUrl, onChange: (value) => setVisionBaseUrl(stripFocusArtifacts(value)), placeholder: "https://api.openai.com/v1" })
488009
+ ),
488010
+ !isCurrentlyEditing && import_react72.default.createElement(
488011
+ Box_default,
488012
+ { marginLeft: 3 },
488013
+ import_react72.default.createElement(Text, { color: theme14.colors.menuSecondary }, visionBaseUrl || t.configScreen.notSet)
488014
+ )
488015
+ );
488016
+ case "visionBaseUrlMode":
488017
+ return import_react72.default.createElement(
488018
+ Box_default,
488019
+ { key: field, flexDirection: "column" },
488020
+ import_react72.default.createElement(
488021
+ Text,
488022
+ { color: activeColor },
488023
+ activeIndicator,
488024
+ t.configScreen.visionBaseUrlMode
488025
+ ),
488026
+ !isCurrentlyEditing && import_react72.default.createElement(
488027
+ Box_default,
488028
+ { marginLeft: 3 },
488029
+ import_react72.default.createElement(Text, { color: theme14.colors.menuSecondary }, visionBaseUrlMode === "base" ? t.configScreen.baseUrlModeBase : visionBaseUrlMode === "endpoint" ? t.configScreen.baseUrlModeEndpoint : t.configScreen.baseUrlModeAuto)
488030
+ )
488031
+ );
488032
+ case "visionApiKey":
488033
+ return import_react72.default.createElement(
488034
+ Box_default,
488035
+ { key: field, flexDirection: "column" },
488036
+ import_react72.default.createElement(
488037
+ Text,
488038
+ { color: activeColor },
488039
+ activeIndicator,
488040
+ t.configScreen.visionApiKey
488041
+ ),
488042
+ isCurrentlyEditing && import_react72.default.createElement(
488043
+ Box_default,
488044
+ { marginLeft: 3 },
488045
+ import_react72.default.createElement(build_default2, { value: visionApiKey, onChange: (value) => setVisionApiKey(stripFocusArtifacts(value)), placeholder: "sk-...", mask: "*" })
488046
+ ),
488047
+ !isCurrentlyEditing && import_react72.default.createElement(
488048
+ Box_default,
488049
+ { marginLeft: 3 },
488050
+ import_react72.default.createElement(Text, { color: theme14.colors.menuSecondary }, visionApiKey ? "*".repeat(Math.min(visionApiKey.length, 20)) : t.configScreen.notSet)
488051
+ )
488052
+ );
488053
+ case "visionRequestMethod":
488054
+ return import_react72.default.createElement(
488055
+ Box_default,
488056
+ { key: field, flexDirection: "column" },
488057
+ import_react72.default.createElement(
488058
+ Text,
488059
+ { color: activeColor },
488060
+ activeIndicator,
488061
+ t.configScreen.visionRequestMethod
488062
+ ),
488063
+ !isCurrentlyEditing && import_react72.default.createElement(
488064
+ Box_default,
488065
+ { marginLeft: 3 },
488066
+ import_react72.default.createElement(Text, { color: theme14.colors.menuSecondary }, ((_d4 = requestMethodOptions.find((opt) => opt.value === visionRequestMethod)) == null ? void 0 : _d4.label) || t.configScreen.notSet)
488067
+ )
488068
+ );
488069
+ case "visionModel":
488070
+ return import_react72.default.createElement(
488071
+ Box_default,
488072
+ { key: field, flexDirection: "column" },
488073
+ import_react72.default.createElement(
488074
+ Text,
488075
+ { color: activeColor },
488076
+ activeIndicator,
488077
+ t.configScreen.visionModel
488078
+ ),
488079
+ !isCurrentlyEditing && import_react72.default.createElement(
488080
+ Box_default,
488081
+ { marginLeft: 3 },
488082
+ import_react72.default.createElement(Text, { color: theme14.colors.menuSecondary }, visionModel || t.configScreen.notSet)
488083
+ )
488084
+ );
487071
488085
  case "maxContextTokens":
487072
488086
  return renderNumericField(field, t.configScreen.maxContextTokens, maxContextTokens);
487073
488087
  case "maxTokens":
@@ -487096,7 +488110,7 @@ function ConfigFieldRenderer({ field, state }) {
487096
488110
  toolResultTokenLimit,
487097
488111
  "%"
487098
488112
  ),
487099
- import_react72.default.createElement(Text, { color: theme14.colors.menuSecondary, dimColor: true }, (_d4 = t.configScreen.toolResultTokenLimitHint) == null ? void 0 : _d4.replace("{percentage}", toolResultTokenLimit.toString()).replace("{maxContext}", maxContextTokens.toString()).replace("{actualLimit}", actualLimit.toLocaleString()))
488113
+ import_react72.default.createElement(Text, { color: theme14.colors.menuSecondary, dimColor: true }, (_e2 = t.configScreen.toolResultTokenLimitHint) == null ? void 0 : _e2.replace("{percentage}", toolResultTokenLimit.toString()).replace("{maxContext}", maxContextTokens.toString()).replace("{actualLimit}", actualLimit.toLocaleString()))
487100
488114
  ),
487101
488115
  !isCurrentlyEditing && import_react72.default.createElement(
487102
488116
  Box_default,
@@ -487160,7 +488174,7 @@ var init_ConfigFieldRenderer = __esm({
487160
488174
 
487161
488175
  // dist/ui/pages/configScreen/ConfigSelectPanel.js
487162
488176
  function ConfigSelectPanel({ state }) {
487163
- const { t, theme: theme14, currentField, setIsEditing, baseUrlMode, setBaseUrlMode, requestMethod, setRequestMethod, requestMethodOptions, thinkingMode, setThinkingMode, thinkingEffort, setThinkingEffort, geminiThinkingLevel, setGeminiThinkingLevel, responsesVerbosity, setResponsesVerbosity, anthropicSpeed, setAnthropicSpeed, chatReasoningEffort, setChatReasoningEffort, getCustomHeadersSchemeSelectItems, getCustomHeadersSchemeSelectedValue, applyCustomHeadersSchemeSelectValue } = state;
488177
+ const { t, theme: theme14, currentField, setIsEditing, baseUrlMode, setBaseUrlMode, requestMethod, setRequestMethod, requestMethodOptions, visionBaseUrlMode, setVisionBaseUrlMode, visionRequestMethod, setVisionRequestMethod, thinkingMode, setThinkingMode, thinkingEffort, setThinkingEffort, geminiThinkingLevel, setGeminiThinkingLevel, responsesVerbosity, setResponsesVerbosity, anthropicSpeed, setAnthropicSpeed, chatReasoningEffort, setChatReasoningEffort, getCustomHeadersSchemeSelectItems, getCustomHeadersSchemeSelectedValue, applyCustomHeadersSchemeSelectValue } = state;
487164
488178
  const getFieldLabel = () => {
487165
488179
  switch (currentField) {
487166
488180
  case "profile":
@@ -487173,6 +488187,12 @@ function ConfigSelectPanel({ state }) {
487173
488187
  return t.configScreen.advancedModel.replace(":", "");
487174
488188
  case "basicModel":
487175
488189
  return t.configScreen.basicModel.replace(":", "");
488190
+ case "visionBaseUrlMode":
488191
+ return t.configScreen.visionBaseUrlMode.replace(":", "");
488192
+ case "visionRequestMethod":
488193
+ return t.configScreen.visionRequestMethod.replace(":", "");
488194
+ case "visionModel":
488195
+ return t.configScreen.visionModel.replace(":", "");
487176
488196
  case "thinkingMode":
487177
488197
  return t.configScreen.thinkingMode.replace(":", "");
487178
488198
  case "thinkingEffort":
@@ -487223,6 +488243,17 @@ function ConfigSelectPanel({ state }) {
487223
488243
  setBaseUrlMode(item.value);
487224
488244
  setIsEditing(false);
487225
488245
  } }),
488246
+ currentField === "visionBaseUrlMode" && import_react73.default.createElement(ScrollableSelectInput, { items: [
488247
+ { label: t.configScreen.baseUrlModeAuto, value: "auto" },
488248
+ { label: t.configScreen.baseUrlModeBase, value: "base" },
488249
+ {
488250
+ label: t.configScreen.baseUrlModeEndpoint,
488251
+ value: "endpoint"
488252
+ }
488253
+ ], initialIndex: Math.max(0, ["auto", "base", "endpoint"].indexOf(visionBaseUrlMode)), isFocused: true, onSelect: (item) => {
488254
+ setVisionBaseUrlMode(item.value);
488255
+ setIsEditing(false);
488256
+ } }),
487226
488257
  currentField === "systemPromptId" && import_react73.default.createElement(SystemPromptSelect, { state }),
487227
488258
  currentField === "customHeadersSchemeId" && (() => {
487228
488259
  const items = getCustomHeadersSchemeSelectItems();
@@ -487232,7 +488263,11 @@ function ConfigSelectPanel({ state }) {
487232
488263
  setIsEditing(false);
487233
488264
  } });
487234
488265
  })(),
487235
- (currentField === "advancedModel" || currentField === "basicModel") && import_react73.default.createElement(ModelSelect, { state }),
488266
+ (currentField === "advancedModel" || currentField === "basicModel" || currentField === "visionModel") && import_react73.default.createElement(ModelSelect, { state }),
488267
+ currentField === "visionRequestMethod" && import_react73.default.createElement(ScrollableSelectInput, { items: requestMethodOptions, initialIndex: Math.max(0, requestMethodOptions.findIndex((opt) => opt.value === visionRequestMethod)), isFocused: true, onSelect: (item) => {
488268
+ setVisionRequestMethod(item.value);
488269
+ setIsEditing(false);
488270
+ } }),
487236
488271
  currentField === "thinkingMode" && import_react73.default.createElement(ScrollableSelectInput, { items: [
487237
488272
  { label: t.configScreen.thinkingModeTokens, value: "tokens" },
487238
488273
  {
@@ -487650,7 +488685,8 @@ function ManualInputView({ state, inlineMode }) {
487650
488685
  Text,
487651
488686
  { color: theme14.colors.menuInfo },
487652
488687
  currentField === "advancedModel" && t.configScreen.advancedModel,
487653
- currentField === "basicModel" && t.configScreen.basicModel
488688
+ currentField === "basicModel" && t.configScreen.basicModel,
488689
+ currentField === "visionModel" && t.configScreen.visionModel
487654
488690
  ),
487655
488691
  import_react74.default.createElement(
487656
488692
  Box_default,
@@ -487691,7 +488727,7 @@ __export(ConfigScreen_exports, {
487691
488727
  function ConfigScreen({ onBack, onSave, inlineMode = false, targetProfileName }) {
487692
488728
  const state = useConfigState({ targetProfileName });
487693
488729
  useConfigInput(state, { onBack, onSave });
487694
- const { t, theme: theme14, profileMode, loading, manualInputMode, isEditing, currentField, activeProfile, errors, currentFieldIndex, totalFields, fieldsDisplayWindow, hiddenAboveFieldsCount, hiddenBelowFieldsCount, getRequestUrl } = state;
488730
+ const { t, theme: theme14, profileMode, loading, manualInputMode, visionConfigMode, isEditing, currentField, activeProfile, errors, currentFieldIndex, totalFields, fieldsDisplayWindow, hiddenAboveFieldsCount, hiddenBelowFieldsCount, getRequestUrl } = state;
487695
488731
  useTerminalTitle(`Snow CLI - ${t.configScreen.title}`);
487696
488732
  if (profileMode === "creating") {
487697
488733
  return import_react75.default.createElement(ProfileCreateView, { state, inlineMode });
@@ -487718,8 +488754,8 @@ function ConfigScreen({ onBack, onSave, inlineMode = false, targetProfileName })
487718
488754
  import_react75.default.createElement(
487719
488755
  Box_default,
487720
488756
  { flexDirection: "column" },
487721
- import_react75.default.createElement(dist_default5, { name: "rainbow" }, t.configScreen.title),
487722
- import_react75.default.createElement(Text, { color: theme14.colors.menuSecondary, dimColor: true }, t.configScreen.subtitle),
488757
+ import_react75.default.createElement(dist_default5, { name: "rainbow" }, visionConfigMode ? t.configScreen.visionConfigTitle : t.configScreen.title),
488758
+ import_react75.default.createElement(Text, { color: theme14.colors.menuSecondary, dimColor: true }, visionConfigMode ? t.configScreen.visionConfigSubtitle : t.configScreen.subtitle),
487723
488759
  activeProfile && import_react75.default.createElement(
487724
488760
  Text,
487725
488761
  { color: theme14.colors.menuInfo, dimColor: true },
@@ -487778,7 +488814,7 @@ function ConfigScreen({ onBack, onSave, inlineMode = false, targetProfileName })
487778
488814
  Box_default,
487779
488815
  { flexDirection: "column", marginTop: 1 },
487780
488816
  import_react75.default.createElement(Alert, { variant: "info" }, isEditing ? `${currentField === "maxContextTokens" || currentField === "maxTokens" ? t.configScreen.editingHintNumeric : t.configScreen.editingHintGeneral}
487781
- ${t.configScreen.requestUrlLabel}${getRequestUrl()}` : `${t.configScreen.navigationHint}
488817
+ ${t.configScreen.requestUrlLabel}${getRequestUrl()}` : `${visionConfigMode ? t.configScreen.visionConfigNavigationHint : t.configScreen.navigationHint}
487782
488818
  ${t.configScreen.requestUrlLabel}${getRequestUrl()}`)
487783
488819
  )
487784
488820
  );
@@ -490382,7 +491418,7 @@ var SystemPromptConfigScreen_exports = {};
490382
491418
  __export(SystemPromptConfigScreen_exports, {
490383
491419
  default: () => SystemPromptConfigScreen
490384
491420
  });
490385
- import { spawn as spawn10, execSync as execSync6 } from "child_process";
491421
+ import { spawn as spawn11, execSync as execSync6 } from "child_process";
490386
491422
  import { writeFileSync as writeFileSync17, readFileSync as readFileSync24, existsSync as existsSync32, unlinkSync as unlinkSync5 } from "fs";
490387
491423
  import { join as join35 } from "path";
490388
491424
  import { platform as platform4, tmpdir as tmpdir4 } from "os";
@@ -490522,7 +491558,7 @@ function SystemPromptConfigScreen({ onBack }) {
490522
491558
  if (process.stdin.isTTY) {
490523
491559
  process.stdin.pause();
490524
491560
  }
490525
- const child = spawn10(editor, [tempFile], {
491561
+ const child = spawn11(editor, [tempFile], {
490526
491562
  stdio: "inherit"
490527
491563
  });
490528
491564
  child.on("close", () => {
@@ -538481,7 +539517,7 @@ var require_utils8 = __commonJS({
538481
539517
  }
538482
539518
  return unwindState(state, ret2);
538483
539519
  }
538484
- function truncate2(str2, desiredLength, truncateChar) {
539520
+ function truncate3(str2, desiredLength, truncateChar) {
538485
539521
  truncateChar = truncateChar || "\u2026";
538486
539522
  let lengthOfStr = strlen(str2);
538487
539523
  if (lengthOfStr <= desiredLength) {
@@ -538615,7 +539651,7 @@ var require_utils8 = __commonJS({
538615
539651
  strlen,
538616
539652
  repeat,
538617
539653
  pad: pad2,
538618
- truncate: truncate2,
539654
+ truncate: truncate3,
538619
539655
  mergeOptions,
538620
539656
  wordWrap: multiLineWordWrap,
538621
539657
  colorizeLines,
@@ -567054,13 +568090,6 @@ function MarkdownRenderer({ content }) {
567054
568090
  }
567055
568091
  let lines = rendered.split("\n");
567056
568092
  lines = trimLines(lines);
567057
- if (lines.length > 500) {
567058
- logger_default.warn("[MarkdownRenderer] Rendered output has too many lines", {
567059
- totalLines: lines.length,
567060
- truncatedTo: 500
567061
- });
567062
- return import_react85.default.createElement(Box_default, { flexDirection: "column" }, lines.slice(0, 500).map((line, index) => import_react85.default.createElement(Text, { key: index }, line || " ")));
567063
- }
567064
568093
  return import_react85.default.createElement(Box_default, { flexDirection: "column" }, lines.map((line, index) => import_react85.default.createElement(Text, { key: index }, line || " ")));
567065
568094
  } catch (error40) {
567066
568095
  if ((_a20 = error40 == null ? void 0 : error40.message) == null ? void 0 : _a20.includes("Number must be >")) {
@@ -567745,13 +568774,13 @@ var init_ToolResultPreview = __esm({
567745
568774
  });
567746
568775
 
567747
568776
  // dist/ui/components/special/HookErrorDisplay.js
567748
- var import_react87, truncate, HookErrorDisplay;
568777
+ var import_react87, truncate2, HookErrorDisplay;
567749
568778
  var init_HookErrorDisplay = __esm({
567750
568779
  async "dist/ui/components/special/HookErrorDisplay.js"() {
567751
568780
  "use strict";
567752
568781
  import_react87 = __toESM(require_react(), 1);
567753
568782
  await init_src();
567754
- truncate = (text2, maxLength) => {
568783
+ truncate2 = (text2, maxLength) => {
567755
568784
  if (text2.length <= maxLength)
567756
568785
  return text2;
567757
568786
  return text2.slice(0, maxLength) + "...";
@@ -567759,8 +568788,8 @@ var init_HookErrorDisplay = __esm({
567759
568788
  HookErrorDisplay = ({ details }) => {
567760
568789
  const { type, exitCode, command, output: output2, error: error40 } = details;
567761
568790
  const combinedOutput = [output2, error40].filter(Boolean).join("\n\n") || "(no output)";
567762
- const truncatedCommand = truncate(command, 150);
567763
- const truncatedOutput = truncate(combinedOutput, 300);
568791
+ const truncatedCommand = truncate2(command, 150);
568792
+ const truncatedOutput = truncate2(combinedOutput, 300);
567764
568793
  const title = type === "warning" ? "Hook Command Warning" : `Hook Command Failed (Exit Code ${exitCode})`;
567765
568794
  return import_react87.default.createElement(
567766
568795
  Box_default,
@@ -567844,6 +568873,74 @@ var init_skillMask = __esm({
567844
568873
  }
567845
568874
  });
567846
568875
 
568876
+ // dist/utils/ui/compressionSummaryDisplay.js
568877
+ function getCompressionSummaryKind(content) {
568878
+ if (content.includes(AUTO_COMPRESSION_SUMMARY_MARKER)) {
568879
+ return "auto";
568880
+ }
568881
+ if (content.includes(MANUAL_COMPRESSION_SUMMARY_MARKER)) {
568882
+ return "manual";
568883
+ }
568884
+ return null;
568885
+ }
568886
+ function getCompressionSummaryDisplay(content, options3 = {}) {
568887
+ const kind = getCompressionSummaryKind(content);
568888
+ if (!kind) {
568889
+ return null;
568890
+ }
568891
+ const normalizedContent = content.replace(/\r\n/g, "\n");
568892
+ const lines = normalizedContent.split("\n");
568893
+ const summaryStartIndex = findSummaryStartIndex(lines, kind);
568894
+ const previewLines = lines.slice(summaryStartIndex).map(sanitizePreviewLine).filter((line) => shouldKeepPreviewLine(line)).slice(0, options3.maxPreviewLines ?? 3).map((line) => clipToVisualWidth(line, options3.maxPreviewWidth ?? 96));
568895
+ return {
568896
+ kind,
568897
+ lineCount: lines.length,
568898
+ charCount: toCodePoints(normalizedContent).length,
568899
+ previewLines
568900
+ };
568901
+ }
568902
+ function findSummaryStartIndex(lines, kind) {
568903
+ const marker = kind === "auto" ? AUTO_COMPRESSION_SUMMARY_MARKER : MANUAL_COMPRESSION_SUMMARY_MARKER;
568904
+ const markerIndex = lines.findIndex((line) => line.includes(marker));
568905
+ return markerIndex >= 0 ? markerIndex + 1 : 0;
568906
+ }
568907
+ function sanitizePreviewLine(line) {
568908
+ return line.replace(/^#{1,6}\s+/, "").replace(/^[-*]\s+/, "").replace(/^`{3,}\w*\s*$/, "").replace(/`/g, "").replace(/\s+/g, " ").trim();
568909
+ }
568910
+ function shouldKeepPreviewLine(line) {
568911
+ return line.length > 0 && line !== "---" && line !== AUTO_COMPRESSION_SUMMARY_MARKER && line !== MANUAL_COMPRESSION_SUMMARY_MARKER && line !== PRESERVED_INTERACTION_MARKER && !line.startsWith(AUTO_COMPRESSION_FOOTER_PREFIX);
568912
+ }
568913
+ function clipToVisualWidth(text2, maxWidth) {
568914
+ const safeWidth = Math.max(maxWidth, 8);
568915
+ if (visualWidth(text2) <= safeWidth) {
568916
+ return text2;
568917
+ }
568918
+ let currentWidth = 0;
568919
+ let clipped = "";
568920
+ const suffix = "...";
568921
+ const contentWidth = Math.max(safeWidth - visualWidth(suffix), 1);
568922
+ for (const char of toCodePoints(text2)) {
568923
+ const charWidth = Math.max(visualWidth(char), 1);
568924
+ if (currentWidth + charWidth > contentWidth) {
568925
+ break;
568926
+ }
568927
+ clipped += char;
568928
+ currentWidth += charWidth;
568929
+ }
568930
+ return `${clipped}${suffix}`;
568931
+ }
568932
+ var AUTO_COMPRESSION_SUMMARY_MARKER, MANUAL_COMPRESSION_SUMMARY_MARKER, AUTO_COMPRESSION_FOOTER_PREFIX, PRESERVED_INTERACTION_MARKER;
568933
+ var init_compressionSummaryDisplay = __esm({
568934
+ "dist/utils/ui/compressionSummaryDisplay.js"() {
568935
+ "use strict";
568936
+ init_textUtils();
568937
+ AUTO_COMPRESSION_SUMMARY_MARKER = "## Previous Context (Auto-Compressed Summary)";
568938
+ MANUAL_COMPRESSION_SUMMARY_MARKER = "[Context Summary from Previous Conversation]";
568939
+ AUTO_COMPRESSION_FOOTER_PREFIX = "*The above is a compressed summary of earlier conversation.";
568940
+ PRESERVED_INTERACTION_MARKER = "[Last Interaction - Preserved Below for Continuity]";
568941
+ }
568942
+ });
568943
+
567847
568944
  // dist/ui/components/chat/MessageRenderer.js
567848
568945
  function cleanThinkingContent5(content) {
567849
568946
  return content.replace(/\s*<\/?think(?:ing)?>\s*/gi, "").trim();
@@ -567906,6 +569003,32 @@ function MessageRenderer({ message, index, filteredMessages, terminalWidth, show
567906
569003
  const formatCommandResultLines = (content) => {
567907
569004
  return getDisplayContent(content).split("\n").map((line, index2) => `${index2 === 0 ? "\u2514\u2500 " : " "}${line || " "}`);
567908
569005
  };
569006
+ const formatCompactCount = (value) => {
569007
+ if (value >= 1e3) {
569008
+ return `${(value / 1e3).toFixed(1)}K`;
569009
+ }
569010
+ return String(value);
569011
+ };
569012
+ const formatCompressionSummaryBubbleLines = (content, totalWidth) => {
569013
+ const summaryDisplay = getCompressionSummaryDisplay(getDisplayContent(content), {
569014
+ maxPreviewWidth: Math.max(totalWidth - 6, 24)
569015
+ });
569016
+ if (!summaryDisplay) {
569017
+ return null;
569018
+ }
569019
+ const title = summaryDisplay.kind === "auto" ? t.chatScreen.compressionSummaryAutoTitle : t.chatScreen.compressionSummaryManualTitle;
569020
+ const stats = t.chatScreen.compressionSummaryStats.replace("{lines}", formatCompactCount(summaryDisplay.lineCount)).replace("{chars}", formatCompactCount(summaryDisplay.charCount));
569021
+ const previewLines = summaryDisplay.previewLines.length > 0 ? [
569022
+ `${t.chatScreen.compressionSummaryPreviewPrefix}: ${summaryDisplay.previewLines[0]}`,
569023
+ ...summaryDisplay.previewLines.slice(1).map((line) => ` ${line}`)
569024
+ ] : [];
569025
+ return formatUserBubbleLines([
569026
+ title,
569027
+ stats,
569028
+ ...previewLines,
569029
+ t.chatScreen.compressionSummaryOriginalSaved
569030
+ ].join("\n"), totalWidth);
569031
+ };
567909
569032
  const formatAiCompletionTime = (value) => {
567910
569033
  const date5 = value instanceof Date ? value : new Date(value);
567911
569034
  if (Number.isNaN(date5.getTime())) {
@@ -568055,7 +569178,7 @@ function MessageRenderer({ message, index, filteredMessages, terminalWidth, show
568055
569178
  { flexDirection: "column", marginBottom: message.content ? 1 : 0 },
568056
569179
  import_react88.default.createElement(Text, { color: theme14.colors.menuSecondary, dimColor: true, italic: true }, cleanThinkingContent5(message.thinking))
568057
569180
  ),
568058
- message.role === "user" ? import_react88.default.createElement(Box_default, { flexDirection: "column", width: contentColumnWidth }, formatUserBubbleLines(getDisplayContent(message.content), contentColumnWidth).map((line, lineIndex) => import_react88.default.createElement(Text, { key: lineIndex, color: theme14.colors.userMessageText, backgroundColor: theme14.colors.userMessageBackground }, line))) : message.content ? import_react88.default.createElement(MarkdownRenderer, { content: getDisplayContent(message.content) }) : null
569181
+ message.role === "user" ? import_react88.default.createElement(Box_default, { flexDirection: "column", width: contentColumnWidth }, (formatCompressionSummaryBubbleLines(message.content, contentColumnWidth) ?? formatUserBubbleLines(getDisplayContent(message.content), contentColumnWidth)).map((line, lineIndex) => import_react88.default.createElement(Text, { key: lineIndex, color: theme14.colors.userMessageText, backgroundColor: theme14.colors.userMessageBackground }, line))) : message.content ? import_react88.default.createElement(MarkdownRenderer, { content: getDisplayContent(message.content) }) : null
568059
569182
  );
568060
569183
  })(),
568061
569184
  message.subAgentUsage && (() => {
@@ -568147,6 +569270,7 @@ var init_MessageRenderer = __esm({
568147
569270
  await init_HookErrorDisplay();
568148
569271
  init_skillMask();
568149
569272
  init_textUtils();
569273
+ init_compressionSummaryDisplay();
568150
569274
  }
568151
569275
  });
568152
569276
 
@@ -569207,7 +570331,7 @@ var MCPConfigScreen_exports = {};
569207
570331
  __export(MCPConfigScreen_exports, {
569208
570332
  default: () => MCPConfigScreen
569209
570333
  });
569210
- import { spawn as spawn11, execSync as execSync7 } from "child_process";
570334
+ import { spawn as spawn12, execSync as execSync7 } from "child_process";
569211
570335
  import { writeFileSync as writeFileSync18, readFileSync as readFileSync25, existsSync as existsSync33, mkdirSync as mkdirSync17, unlinkSync as unlinkSync6 } from "fs";
569212
570336
  import { join as join36 } from "path";
569213
570337
  import { platform as platform5 } from "os";
@@ -569306,7 +570430,7 @@ function openEditorForScope(scope, onBack, i18nMessages) {
569306
570430
  if (process.stdin.isTTY) {
569307
570431
  process.stdin.pause();
569308
570432
  }
569309
- const child = spawn11(editor, [configFilePath], {
570433
+ const child = spawn12(editor, [configFilePath], {
569310
570434
  stdio: "inherit"
569311
570435
  });
569312
570436
  child.on("close", () => {
@@ -571491,12 +572615,53 @@ function findInlineCommandTrigger(text2, cursorPosition) {
571491
572615
  }
571492
572616
  return null;
571493
572617
  }
571494
- function isInlineInsertionCommand(command) {
571495
- return command.name === "gitline" || command.type === "prompt" && command.isCustom === true;
572618
+ function findInlineCommandInvocation(text2, cursorPosition) {
572619
+ const cursor4 = Math.max(0, Math.min(cursorPosition, text2.length));
572620
+ let slashIndex = text2.lastIndexOf("/", Math.max(0, cursor4 - 1));
572621
+ while (slashIndex >= 0) {
572622
+ if (hasValidSlashBoundary(text2, slashIndex)) {
572623
+ const invocation = text2.slice(slashIndex + 1, cursor4);
572624
+ const commandMatch = invocation.match(/^(\S+)(?:\s+([\s\S]+))?$/);
572625
+ if (commandMatch && commandMatch[1]) {
572626
+ return {
572627
+ slashIndex,
572628
+ endIndex: cursor4,
572629
+ query: commandMatch[1],
572630
+ isAtStart: slashIndex === 0,
572631
+ commandName: commandMatch[1],
572632
+ args: commandMatch[2]
572633
+ };
572634
+ }
572635
+ }
572636
+ slashIndex = slashIndex > 0 ? text2.lastIndexOf("/", slashIndex - 1) : -1;
572637
+ }
572638
+ return null;
572639
+ }
572640
+ function isNamedInlineCommand(command, names) {
572641
+ return names.includes(command.name);
572642
+ }
572643
+ function isInlinePickerCommand(command) {
572644
+ return isNamedInlineCommand(command, INLINE_PICKER_COMMAND_NAMES);
572645
+ }
572646
+ function isInlineExecutableCommand(command) {
572647
+ return isNamedInlineCommand(command, INLINE_EXECUTABLE_COMMAND_NAMES);
571496
572648
  }
572649
+ function isInlineTextInsertionCommand(command) {
572650
+ return command.type === "prompt" && command.isCustom === true;
572651
+ }
572652
+ function isInlineCommand(command) {
572653
+ return isInlinePickerCommand(command) || isInlineExecutableCommand(command) || isInlineTextInsertionCommand(command);
572654
+ }
572655
+ var INLINE_PICKER_COMMAND_NAMES, INLINE_EXECUTABLE_COMMAND_NAMES;
571497
572656
  var init_inlineCommandTrigger = __esm({
571498
572657
  "dist/hooks/input/keyboard/utils/inlineCommandTrigger.js"() {
571499
572658
  "use strict";
572659
+ INLINE_PICKER_COMMAND_NAMES = ["gitline"];
572660
+ INLINE_EXECUTABLE_COMMAND_NAMES = [
572661
+ "models",
572662
+ "auto-format",
572663
+ "simple"
572664
+ ];
571500
572665
  }
571501
572666
  });
571502
572667
 
@@ -571513,6 +572678,7 @@ function useCommandPanel(buffer, isProcessing = false) {
571513
572678
  },
571514
572679
  { name: "help", description: t.commandPanel.commands.help },
571515
572680
  { name: "clear", description: t.commandPanel.commands.clear },
572681
+ { name: "del-session", description: t.commandPanel.commands.delSession },
571516
572682
  {
571517
572683
  name: "copy-last",
571518
572684
  description: t.commandPanel.commands.copyLast || "Copy last AI message to clipboard"
@@ -571736,7 +572902,7 @@ function useCommandPanel(buffer, isProcessing = false) {
571736
572902
  return [];
571737
572903
  const query = trigger.query.toLowerCase();
571738
572904
  const allCommands = getAllCommands();
571739
- const availableCommands = isProcessing ? allCommands.filter((command) => command.type === "prompt" && !(command.mainFlowOnly && hasRunningAgentsOrTeam)) : trigger.isAtStart ? allCommands : allCommands.filter(isInlineInsertionCommand);
572905
+ const availableCommands = isProcessing ? allCommands.filter((command) => command.type === "prompt" && !(command.mainFlowOnly && hasRunningAgentsOrTeam)) : trigger.isAtStart ? allCommands : allCommands.filter(isInlineCommand);
571740
572906
  const filtered = availableCommands.filter((command) => command.name.toLowerCase().includes(query) || command.description.toLowerCase().includes(query)).map((command) => {
571741
572907
  const nameLower = command.name.toLowerCase();
571742
572908
  const descLower = command.description.toLowerCase();
@@ -571781,7 +572947,7 @@ function useCommandPanel(buffer, isProcessing = false) {
571781
572947
  return;
571782
572948
  }
571783
572949
  const allCommands = getAllCommands();
571784
- const availableCommands = trigger.isAtStart ? allCommands : allCommands.filter(isInlineInsertionCommand);
572950
+ const availableCommands = trigger.isAtStart ? allCommands : allCommands.filter(isInlineCommand);
571785
572951
  const query = trigger.query.toLowerCase();
571786
572952
  const hasMatch = availableCommands.some((command) => command.name.toLowerCase().includes(query) || command.description.toLowerCase().includes(query));
571787
572953
  setShowCommands(hasMatch);
@@ -571831,7 +572997,7 @@ var init_useCommandPanel = __esm({
571831
572997
  deepresearch: "<prompt>",
571832
572998
  connect: "[apiUrl]",
571833
572999
  export: "[txt|md|html|json]",
571834
- config: "[export|import]"
573000
+ config: "<export|import>"
571835
573001
  };
571836
573002
  COMMAND_ARGS_OPTIONS = {
571837
573003
  codebase: ["on", "off", "status"],
@@ -573276,7 +574442,7 @@ var init_historyMenu = __esm({
573276
574442
  });
573277
574443
 
573278
574444
  // dist/utils/ui/externalEditor.js
573279
- import { spawn as spawn12 } from "child_process";
574445
+ import { spawn as spawn13 } from "child_process";
573280
574446
  import { promises as fs49 } from "fs";
573281
574447
  import { tmpdir as tmpdir5 } from "os";
573282
574448
  import { join as join37 } from "path";
@@ -573303,7 +574469,7 @@ function addUtf8Bom(text2) {
573303
574469
  }
573304
574470
  async function spawnNotepad(filePath) {
573305
574471
  await new Promise((resolve13, reject2) => {
573306
- const child = spawn12("notepad.exe", [filePath], {
574472
+ const child = spawn13("notepad.exe", [filePath], {
573307
574473
  stdio: "inherit"
573308
574474
  });
573309
574475
  child.on("error", reject2);
@@ -573610,7 +574776,7 @@ function commandPanelHandler(ctx) {
573610
574776
  const selectedCommand = filteredCommands[commandSelectedIndex];
573611
574777
  if (selectedCommand) {
573612
574778
  if (inlineTrigger) {
573613
- const inlineInsertionText = !inlineTrigger.isAtStart && isInlineInsertionCommand(selectedCommand) ? selectedCommand.insertionText : void 0;
574779
+ const inlineInsertionText = !inlineTrigger.isAtStart && isInlineTextInsertionCommand(selectedCommand) ? selectedCommand.insertionText : void 0;
573614
574780
  buffer.replaceRange(inlineTrigger.slashIndex, inlineTrigger.endIndex, inlineInsertionText ?? "/" + selectedCommand.name);
573615
574781
  } else {
573616
574782
  buffer.setText("/" + selectedCommand.name);
@@ -573619,7 +574785,8 @@ function commandPanelHandler(ctx) {
573619
574785
  setShowCommands(false);
573620
574786
  setCommandSelectedIndex(0);
573621
574787
  const cmdArgsOptions = COMMAND_ARGS_OPTIONS[selectedCommand.name];
573622
- if (cmdArgsOptions && cmdArgsOptions.length > 0) {
574788
+ const shouldOpenArgsPicker = cmdArgsOptions && cmdArgsOptions.length > 0;
574789
+ if (shouldOpenArgsPicker) {
573623
574790
  setShowArgsPicker(true);
573624
574791
  setArgsSelectedIndex(0);
573625
574792
  }
@@ -573634,7 +574801,7 @@ function commandPanelHandler(ctx) {
573634
574801
  const selectedCommand = filteredCommands[commandSelectedIndex];
573635
574802
  if (selectedCommand) {
573636
574803
  if (isInlineTrigger) {
573637
- if (selectedCommand.name === "gitline" && inlineTrigger) {
574804
+ if (isInlinePickerCommand(selectedCommand) && inlineTrigger) {
573638
574805
  setShowCommands(false);
573639
574806
  setCommandSelectedIndex(0);
573640
574807
  openGitLinePicker({
@@ -573644,7 +574811,22 @@ function commandPanelHandler(ctx) {
573644
574811
  triggerUpdate();
573645
574812
  return true;
573646
574813
  }
573647
- if (isInlineInsertionCommand(selectedCommand) && inlineTrigger) {
574814
+ if (isInlineExecutableCommand(selectedCommand) && inlineTrigger) {
574815
+ buffer.replaceRange(inlineTrigger.slashIndex, inlineTrigger.endIndex, "");
574816
+ setShowCommands(false);
574817
+ setCommandSelectedIndex(0);
574818
+ executeCommand(selectedCommand.name).then((result2) => {
574819
+ commandUsageManager.recordUsage(selectedCommand.name);
574820
+ if (onCommand) {
574821
+ Promise.resolve(onCommand(selectedCommand.name, result2)).catch((error40) => {
574822
+ console.error("Command execution error:", error40);
574823
+ });
574824
+ }
574825
+ });
574826
+ triggerUpdate();
574827
+ return true;
574828
+ }
574829
+ if (isInlineTextInsertionCommand(selectedCommand) && inlineTrigger) {
573648
574830
  buffer.replaceRange(inlineTrigger.slashIndex, inlineTrigger.endIndex, selectedCommand.insertionText ?? "");
573649
574831
  setShowCommands(false);
573650
574832
  setCommandSelectedIndex(0);
@@ -573734,15 +574916,14 @@ function tabArgsPickerHandler(ctx) {
573734
574916
  const { showCommands, showFilePicker, showArgsPicker, setShowArgsPicker, setArgsSelectedIndex } = options3;
573735
574917
  if (key.tab && !showCommands && !showFilePicker && !showArgsPicker) {
573736
574918
  const text2 = buffer.text;
573737
- const cmdMatch = text2.match(/^\/([a-zA-Z0-9_-]+)\s*$/);
573738
- if (cmdMatch) {
573739
- const cmdName = cmdMatch[1] ?? "";
573740
- const cmdOpts = COMMAND_ARGS_OPTIONS[cmdName];
573741
- if (cmdOpts && cmdOpts.length > 0) {
573742
- setShowArgsPicker(true);
573743
- setArgsSelectedIndex(0);
573744
- return true;
573745
- }
574919
+ const rootMatch = text2.match(/^\/([a-zA-Z0-9_-]+)\s*$/);
574920
+ const inlineTrigger = findInlineCommandTrigger(text2, buffer.getCursorPosition());
574921
+ const cmdName = (rootMatch == null ? void 0 : rootMatch[1]) ?? (inlineTrigger == null ? void 0 : inlineTrigger.query) ?? "";
574922
+ const cmdOpts = COMMAND_ARGS_OPTIONS[cmdName];
574923
+ if (cmdOpts && cmdOpts.length > 0) {
574924
+ setShowArgsPicker(true);
574925
+ setArgsSelectedIndex(0);
574926
+ return true;
573746
574927
  }
573747
574928
  }
573748
574929
  return false;
@@ -573751,6 +574932,7 @@ var init_tabArgsPicker = __esm({
573751
574932
  "dist/hooks/input/keyboard/handlers/tabArgsPicker.js"() {
573752
574933
  "use strict";
573753
574934
  init_useCommandPanel();
574935
+ init_inlineCommandTrigger();
573754
574936
  }
573755
574937
  });
573756
574938
 
@@ -573784,6 +574966,32 @@ function submitHandler(ctx) {
573784
574966
  }
573785
574967
  const message = buffer.getFullText().trim();
573786
574968
  const markedMessage = buffer.hasTextPlaceholders() ? buffer.getFullTextWithPasteMarkers().trim() : message;
574969
+ const inlineInvocation = findInlineCommandInvocation(fullText, cursorPos);
574970
+ if (inlineInvocation && !inlineInvocation.isAtStart && getAllCommands) {
574971
+ const inlineCommand = getAllCommands().find((cmd) => cmd.name === inlineInvocation.commandName);
574972
+ if (inlineCommand && isInlineExecutableCommand(inlineCommand)) {
574973
+ if (isProcessing && inlineCommand.type !== "prompt") {
574974
+ buffer.replaceRange(inlineInvocation.slashIndex, inlineInvocation.endIndex, "");
574975
+ setShowCommands(false);
574976
+ setCommandSelectedIndex(0);
574977
+ triggerUpdate();
574978
+ return true;
574979
+ }
574980
+ executeCommand(inlineInvocation.commandName, inlineInvocation.args).then((result2) => {
574981
+ commandUsageManager.recordUsage(inlineInvocation.commandName);
574982
+ if (onCommand) {
574983
+ Promise.resolve(onCommand(inlineInvocation.commandName, result2)).catch((error40) => {
574984
+ console.error("Command execution error:", error40);
574985
+ });
574986
+ }
574987
+ });
574988
+ buffer.replaceRange(inlineInvocation.slashIndex, inlineInvocation.endIndex, "");
574989
+ setShowCommands(false);
574990
+ setCommandSelectedIndex(0);
574991
+ triggerUpdate();
574992
+ return true;
574993
+ }
574994
+ }
573787
574995
  if (message) {
573788
574996
  if (message.startsWith("/")) {
573789
574997
  const commandMatch = message.match(/^\/(\S+)(?:\s+([\s\S]+))?$/);
@@ -573874,6 +575082,7 @@ var init_submit = __esm({
573874
575082
  "use strict";
573875
575083
  init_commandExecutor();
573876
575084
  init_commandUsageManager();
575085
+ init_inlineCommandTrigger();
573877
575086
  }
573878
575087
  });
573879
575088
 
@@ -575276,7 +576485,7 @@ ${selfDestruct.suggestion}`,
575276
576485
  output: []
575277
576486
  }));
575278
576487
  return new Promise((resolve13) => {
575279
- const { spawn: spawn15 } = __require("child_process");
576488
+ const { spawn: spawn16 } = __require("child_process");
575280
576489
  const isWindows4 = process.platform === "win32";
575281
576490
  const shellCandidates = isWindows4 ? [
575282
576491
  {
@@ -575357,7 +576566,7 @@ ${selfDestruct.suggestion}`,
575357
576566
  });
575358
576567
  return;
575359
576568
  }
575360
- const child = spawn15(selected.shell, selected.args, {
576569
+ const child = spawn16(selected.shell, selected.args, {
575361
576570
  cwd: process.cwd(),
575362
576571
  env: {
575363
576572
  ...process.env,
@@ -577535,13 +578744,12 @@ function ChatInput({ onSubmit, onCommand, placeholder = "Type your message...",
577535
578744
  const [argsSelectedIndex, setArgsSelectedIndex] = import_react119.default.useState(0);
577536
578745
  const argsPickerContext = (0, import_react119.useMemo)(() => {
577537
578746
  const text2 = buffer.text;
577538
- const match = text2.match(/^\/([a-zA-Z0-9_-]+)\s*$/);
577539
- if (!match)
577540
- return { commandName: "", options: [] };
577541
- const cmd = match[1] ?? "";
578747
+ const rootMatch = text2.match(/^\/([a-zA-Z0-9_-]+)\s*$/);
578748
+ const inlineTrigger = findInlineCommandTrigger(text2, buffer.getCursorPosition());
578749
+ const cmd = (rootMatch == null ? void 0 : rootMatch[1]) ?? (inlineTrigger == null ? void 0 : inlineTrigger.query) ?? "";
577542
578750
  const options3 = COMMAND_ARGS_OPTIONS[cmd];
577543
578751
  return { commandName: cmd, options: options3 || [] };
577544
- }, [buffer.text]);
578752
+ }, [buffer, buffer.text]);
577545
578753
  const { showFilePicker, setShowFilePicker, fileSelectedIndex, setFileSelectedIndex, fileQuery, setFileQuery, atSymbolPosition, setAtSymbolPosition, filteredFileCount, searchMode, updateFilePickerState, handleFileSelect, handleMultipleFileSelect, handleFilteredCountChange, fileListRef } = useFilePicker(buffer, triggerUpdate);
577546
578754
  const { showHistoryMenu, setShowHistoryMenu, historySelectedIndex, setHistorySelectedIndex, escapeKeyCount, setEscapeKeyCount, escapeKeyTimer, getUserMessages, handleHistorySelect, currentHistoryIndex, navigateHistoryUp, navigateHistoryDown, resetHistoryNavigation, saveToHistory } = useHistoryNavigation(buffer, triggerUpdate, chatHistory, onHistorySelect);
577547
578755
  const { showAgentPicker, setShowAgentPicker, agentSelectedIndex, setAgentSelectedIndex, updateAgentPickerState, getFilteredAgents, handleAgentSelect } = useAgentPicker(buffer, triggerUpdate);
@@ -577870,7 +579078,7 @@ function ChatInput({ onSubmit, onCommand, placeholder = "Type your message...",
577870
579078
  const commandToken = ((_a20 = text2.slice(1).match(/^\S*/)) == null ? void 0 : _a20[0]) ?? "";
577871
579079
  if (!commandToken)
577872
579080
  return 0;
577873
- const availableCommands = inlineOnly ? allCommands.filter(isInlineInsertionCommand) : allCommands;
579081
+ const availableCommands = inlineOnly ? allCommands.filter(isInlineCommand) : allCommands;
577874
579082
  const exact = availableCommands.some((c) => c.name === commandToken);
577875
579083
  if (exact)
577876
579084
  return 1 + commandToken.length;
@@ -579412,11 +580620,11 @@ var init_BackgroundProcessPanel = __esm({
579412
580620
  const visibleProcesses = (0, import_react125.useMemo)(() => {
579413
580621
  return sortedProcesses.slice(scrollOffset, scrollOffset + maxVisibleItems);
579414
580622
  }, [sortedProcesses, scrollOffset, maxVisibleItems]);
579415
- const getStatusText = (0, import_react125.useCallback)((process21) => {
579416
- if (process21.status === "running") {
580623
+ const getStatusText = (0, import_react125.useCallback)((process22) => {
580624
+ if (process22.status === "running") {
579417
580625
  return t.backgroundProcesses.statusRunning;
579418
580626
  }
579419
- if (process21.status === "completed") {
580627
+ if (process22.status === "completed") {
579420
580628
  return t.backgroundProcesses.statusCompleted;
579421
580629
  }
579422
580630
  return t.backgroundProcesses.statusFailed;
@@ -579450,17 +580658,17 @@ var init_BackgroundProcessPanel = __esm({
579450
580658
  ) : import_react125.default.createElement(
579451
580659
  import_react125.default.Fragment,
579452
580660
  null,
579453
- visibleProcesses.map((process21, visibleIndex) => {
580661
+ visibleProcesses.map((process22, visibleIndex) => {
579454
580662
  const actualIndex = scrollOffset + visibleIndex;
579455
580663
  const isSelected = actualIndex === selectedIndex;
579456
580664
  return import_react125.default.createElement(
579457
580665
  Box_default,
579458
- { key: process21.id, flexDirection: "column", paddingY: 0 },
580666
+ { key: process22.id, flexDirection: "column", paddingY: 0 },
579459
580667
  import_react125.default.createElement(
579460
580668
  Box_default,
579461
580669
  { paddingX: 1 },
579462
580670
  import_react125.default.createElement(Text, { color: isSelected ? theme14.colors.warning : void 0, bold: isSelected }, isSelected ? "> " : " "),
579463
- import_react125.default.createElement(Text, { dimColor: !isSelected }, truncateCommand(process21.command, maxCommandWidth))
580671
+ import_react125.default.createElement(Text, { dimColor: !isSelected }, truncateCommand(process22.command, maxCommandWidth))
579464
580672
  ),
579465
580673
  import_react125.default.createElement(
579466
580674
  Box_default,
@@ -579470,13 +580678,13 @@ var init_BackgroundProcessPanel = __esm({
579470
580678
  { dimColor: true },
579471
580679
  " ",
579472
580680
  "PID: ",
579473
- process21.pid,
580681
+ process22.pid,
579474
580682
  " | ",
579475
580683
  t.backgroundProcesses.status,
579476
580684
  ":",
579477
580685
  " "
579478
580686
  ),
579479
- import_react125.default.createElement(Text, { color: getStatusColor(process21.status) }, getStatusText(process21)),
580687
+ import_react125.default.createElement(Text, { color: getStatusColor(process22.status) }, getStatusText(process22)),
579480
580688
  import_react125.default.createElement(
579481
580689
  Text,
579482
580690
  { dimColor: true },
@@ -579485,7 +580693,7 @@ var init_BackgroundProcessPanel = __esm({
579485
580693
  t.backgroundProcesses.duration,
579486
580694
  ":",
579487
580695
  " ",
579488
- formatDuration(process21.startedAt, process21.completedAt)
580696
+ formatDuration(process22.startedAt, process22.completedAt)
579489
580697
  )
579490
580698
  )
579491
580699
  );
@@ -581622,12 +582830,16 @@ function parseMessageTargets(message) {
581622
582830
  return { targets, cleanMessage };
581623
582831
  }
581624
582832
  function useMessageProcessing(props) {
581625
- const { messages, setMessages, setPendingMessages, streamingState, vscodeState, snapshotState, bashMode, yoloMode, planMode, vulnerabilityHuntingMode, teamMode, toolSearchDisabled, saveMessage, clearSavedMessages, setRemountKey, requestToolConfirmation, requestUserQuestion, isToolAutoApproved, addMultipleToAlwaysApproved, setRestoreInputContent, setIsCompressing, setCompressionError, currentContextPercentageRef, userInterruptedRef, pendingMessagesRef, setBashSensitiveCommand } = props;
582833
+ const { messages, setMessages, setPendingMessages, streamingState, vscodeState, snapshotState, bashMode, yoloMode, planMode, vulnerabilityHuntingMode, teamMode, toolSearchDisabled, saveMessage, clearSavedMessages, setRemountKey, requestToolConfirmation, requestUserQuestion, isToolAutoApproved, addMultipleToAlwaysApproved, setRestoreInputContent, setIsCompressing, setCompressionError, currentContextPercentageRef, userInterruptedRef, pendingMessagesRef, setBashSensitiveCommand, hasFocus } = props;
581626
582834
  const processMessageRef = (0, import_react135.useRef)(null);
581627
582835
  const yoloModeRef = (0, import_react135.useRef)(yoloMode);
582836
+ const hasFocusRef = (0, import_react135.useRef)(hasFocus ?? true);
581628
582837
  (0, import_react135.useEffect)(() => {
581629
582838
  yoloModeRef.current = yoloMode;
581630
582839
  }, [yoloMode]);
582840
+ (0, import_react135.useEffect)(() => {
582841
+ hasFocusRef.current = hasFocus ?? true;
582842
+ }, [hasFocus]);
581631
582843
  const appendAiCompletionTimeMessage2 = () => {
581632
582844
  setMessages((prev) => [
581633
582845
  ...prev,
@@ -581639,34 +582851,69 @@ function useMessageProcessing(props) {
581639
582851
  }
581640
582852
  ]);
581641
582853
  };
582854
+ const notifyAgentTurnWaitingForInput = () => {
582855
+ notifyAgentTurnComplete({
582856
+ projectName: getProjectName()
582857
+ });
582858
+ };
581642
582859
  const processMessage = async (message, images, useBasicModel, hideUserMessage) => {
582860
+ var _a20, _b14, _c6, _d4, _e2, _f, _g;
581643
582861
  const autoCompressConfig = getSnowConfig();
581644
582862
  if (autoCompressConfig.enableAutoCompress !== false && shouldAutoCompress(currentContextPercentageRef.current, autoCompressConfig.autoCompressThreshold ?? DEFAULT_AUTO_COMPRESS_THRESHOLD)) {
581645
582863
  setIsCompressing(true);
581646
582864
  streamingState.setIsAutoCompressing(true);
581647
582865
  setCompressionError(null);
582866
+ let sessionId = (_a20 = sessionManager.getCurrentSession()) == null ? void 0 : _a20.id;
582867
+ let lastCompressionStep = "saving";
582868
+ (_b14 = props.onCompressionStatus) == null ? void 0 : _b14.call(props, {
582869
+ step: "saving",
582870
+ message: "Auto-compressing context due to token limit...",
582871
+ sessionId
582872
+ });
581648
582873
  await compressionCoordinator.acquireLock("main");
581649
582874
  try {
581650
- const compressingMessage = {
581651
- role: "assistant",
581652
- content: "\u2735 Auto-compressing context due to token limit...",
581653
- streaming: false
581654
- };
581655
- setMessages((prev) => [...prev, compressingMessage]);
581656
- const session = sessionManager.getCurrentSession();
581657
- const compressionResult = await performAutoCompression(session == null ? void 0 : session.id);
582875
+ sessionId = (_c6 = sessionManager.getCurrentSession()) == null ? void 0 : _c6.id;
582876
+ const compressionResult = await performAutoCompression(sessionId, (status) => {
582877
+ var _a21;
582878
+ lastCompressionStep = (status == null ? void 0 : status.step) ?? null;
582879
+ (_a21 = props.onCompressionStatus) == null ? void 0 : _a21.call(props, status);
582880
+ });
582881
+ if (compressionResult && compressionResult.hookFailed) {
582882
+ const errorMsg = "Blocked by beforeCompress hook";
582883
+ setCompressionError(errorMsg);
582884
+ (_d4 = props.onCompressionStatus) == null ? void 0 : _d4.call(props, {
582885
+ step: "failed",
582886
+ message: errorMsg,
582887
+ sessionId
582888
+ });
582889
+ setTimeout(() => {
582890
+ var _a21;
582891
+ (_a21 = props.onCompressionStatus) == null ? void 0 : _a21.call(props, null);
582892
+ }, 5e3);
582893
+ return;
582894
+ }
581658
582895
  if (compressionResult) {
582896
+ (_e2 = props.onCompressionStatus) == null ? void 0 : _e2.call(props, null);
581659
582897
  clearSavedMessages();
581660
582898
  setMessages(compressionResult.uiMessages);
581661
582899
  setRemountKey((prev) => prev + 1);
581662
582900
  streamingState.setContextUsage(compressionResult.usage);
581663
582901
  snapshotState.setSnapshotFileCount(/* @__PURE__ */ new Map());
581664
- } else {
581665
- setMessages((prev) => prev.filter((m) => m !== compressingMessage));
582902
+ } else if (lastCompressionStep !== "failed") {
582903
+ (_f = props.onCompressionStatus) == null ? void 0 : _f.call(props, null);
581666
582904
  }
581667
582905
  } catch (error40) {
581668
582906
  const errorMsg = error40 instanceof Error ? error40.message : "Unknown error";
581669
582907
  setCompressionError(errorMsg);
582908
+ (_g = props.onCompressionStatus) == null ? void 0 : _g.call(props, {
582909
+ step: "failed",
582910
+ message: errorMsg,
582911
+ sessionId
582912
+ });
582913
+ setTimeout(() => {
582914
+ var _a21;
582915
+ (_a21 = props.onCompressionStatus) == null ? void 0 : _a21.call(props, null);
582916
+ }, 5e3);
581670
582917
  const errorMessage = {
581671
582918
  role: "assistant",
581672
582919
  content: `**Auto-compression Failed**`,
@@ -581871,13 +583118,13 @@ ${continuationPrompt}` : continuationPrompt;
581871
583118
  streamingState.setIsStreaming(false);
581872
583119
  streamingState.setAbortController(null);
581873
583120
  streamingState.setStreamTokenCount(0);
581874
- if (!wasUserInterrupted) {
581875
- void (async () => {
581876
- try {
583121
+ void (async () => {
583122
+ let willAutoContinue = false;
583123
+ try {
583124
+ if (!wasUserInterrupted) {
581877
583125
  const current = await goalManager.loadCurrentGoal();
581878
- if (!current)
581879
- return;
581880
- if (current.status === "pursuing") {
583126
+ if ((current == null ? void 0 : current.status) === "pursuing") {
583127
+ willAutoContinue = true;
581881
583128
  await goalManager.markPendingContinuation();
581882
583129
  setTimeout(() => {
581883
583130
  const ref = processMessageRef.current;
@@ -581887,7 +583134,8 @@ ${continuationPrompt}` : continuationPrompt;
581887
583134
  });
581888
583135
  }
581889
583136
  }, 0);
581890
- } else if (current.status === "budget-limited" && current.pendingContinuation) {
583137
+ } else if ((current == null ? void 0 : current.status) === "budget-limited" && current.pendingContinuation) {
583138
+ willAutoContinue = true;
581891
583139
  setTimeout(() => {
581892
583140
  const ref = processMessageRef.current;
581893
583141
  if (ref) {
@@ -581897,11 +583145,21 @@ ${continuationPrompt}` : continuationPrompt;
581897
583145
  }
581898
583146
  }, 0);
581899
583147
  }
581900
- } catch (err) {
581901
- console.error("[goal] continuation scheduling failed:", err);
581902
583148
  }
581903
- })();
581904
- }
583149
+ } catch (err) {
583150
+ console.error("[goal] continuation scheduling failed:", err);
583151
+ } finally {
583152
+ if (shouldNotifyAgentTurnCompletion({
583153
+ terminalFocused: hasFocusRef.current,
583154
+ wasUserInterrupted,
583155
+ willAutoContinue,
583156
+ pendingMessageCount: pendingMessagesRef.current.length,
583157
+ hasOnStopHook: hasEnabledHookActions("onStop")
583158
+ })) {
583159
+ notifyAgentTurnWaitingForInput();
583160
+ }
583161
+ }
583162
+ })();
581905
583163
  }
581906
583164
  };
581907
583165
  processMessageRef.current = processMessage;
@@ -582230,6 +583488,9 @@ var init_useMessageProcessing = __esm({
582230
583488
  init_teamTracker();
582231
583489
  init_compressionCoordinator();
582232
583490
  init_goalManager();
583491
+ init_projectUtils();
583492
+ init_notification();
583493
+ init_hooksConfig();
582233
583494
  }
582234
583495
  });
582235
583496
 
@@ -583895,6 +585156,56 @@ var init_usePanelState = __esm({
583895
585156
  }
583896
585157
  });
583897
585158
 
585159
+ // dist/utils/ui/terminal-title-formatter.js
585160
+ function cleanTitlePart(value, fallback, maxLength) {
585161
+ const cleaned = (value ?? "").replaceAll(controlCharacters, " ").replaceAll(/\s+/g, " ").trim();
585162
+ const safeValue = cleaned || fallback;
585163
+ return maxLength && safeValue.length > maxLength ? `${safeValue.slice(0, maxLength - 3)}...` : safeValue;
585164
+ }
585165
+ function getFrameIndex(animationFrame) {
585166
+ return Math.trunc(Math.abs(animationFrame)) % terminalTitleFrameCount;
585167
+ }
585168
+ function formatActionRequiredPrefix(animationFrame) {
585169
+ return getFrameIndex(animationFrame) % 2 === 0 ? "[ ! ] Action Required" : "[ . ] Action Required";
585170
+ }
585171
+ function formatBaseTitle(appTitle) {
585172
+ const safeAppTitle = cleanTitlePart(appTitle, "");
585173
+ return safeAppTitle ? `${appName} - ${safeAppTitle}` : appName;
585174
+ }
585175
+ function formatTerminalTitle({ appTitle, projectName, summary, actionRequired = false, animationFrame = 0 }) {
585176
+ const safeProjectName = cleanTitlePart(projectName, defaultProjectName, maxProjectNameLength);
585177
+ const safeSummary = cleanTitlePart(summary, "", maxSummaryLength);
585178
+ const title = `${formatBaseTitle(safeSummary || appTitle)} - ${safeProjectName}`;
585179
+ if (actionRequired) {
585180
+ return `${formatActionRequiredPrefix(animationFrame)} - ${title}`;
585181
+ }
585182
+ return title;
585183
+ }
585184
+ var appName, defaultProjectName, maxProjectNameLength, maxSummaryLength, controlCharacters, terminalTitleSpinnerFrames, terminalTitleFrameCount;
585185
+ var init_terminal_title_formatter = __esm({
585186
+ "dist/utils/ui/terminal-title-formatter.js"() {
585187
+ "use strict";
585188
+ appName = "Snow CLI";
585189
+ defaultProjectName = "Unknown Project";
585190
+ maxProjectNameLength = 24;
585191
+ maxSummaryLength = 80;
585192
+ controlCharacters = /[\u0000-\u001F\u007F]/g;
585193
+ terminalTitleSpinnerFrames = [
585194
+ "\u280B",
585195
+ "\u2819",
585196
+ "\u2839",
585197
+ "\u2838",
585198
+ "\u283C",
585199
+ "\u2834",
585200
+ "\u2826",
585201
+ "\u2827",
585202
+ "\u2807",
585203
+ "\u280F"
585204
+ ];
585205
+ terminalTitleFrameCount = terminalTitleSpinnerFrames.length;
585206
+ }
585207
+ });
585208
+
583898
585209
  // dist/ui/components/chat/PendingMessages.js
583899
585210
  function PendingMessages({ pendingMessages }) {
583900
585211
  const { theme: theme14 } = useTheme();
@@ -585057,7 +586368,7 @@ var init_AskUserQuestion = __esm({
585057
586368
  });
585058
586369
 
585059
586370
  // dist/ui/components/bash/BashCommandConfirmation.js
585060
- function sanitizePreviewLine(text2) {
586371
+ function sanitizePreviewLine2(text2) {
585061
586372
  return text2.replace(/\x1B\][^\x07]*(?:\x07|\x1B\\)/g, "").replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, "").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, "").replace(/\t/g, " ").replace(/[\s\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]+$/g, "").trim();
585062
586373
  }
585063
586374
  function truncateCommand2(text2, maxWidth = 100) {
@@ -585188,7 +586499,7 @@ function BashCommandExecutionStatus({ command, timeout: timeout2 = 3e4, terminal
585188
586499
  const lines = entry.split(/\r?\n/);
585189
586500
  for (const raw of lines) {
585190
586501
  const capped = raw.length > maxLineLength2 ? raw.slice(0, maxLineLength2) : raw;
585191
- const cleaned = sanitizePreviewLine(capped);
586502
+ const cleaned = sanitizePreviewLine2(capped);
585192
586503
  if (cleaned.length > 0) {
585193
586504
  pendingLinesRef.current.push(cleaned);
585194
586505
  }
@@ -585318,7 +586629,7 @@ var init_BashCommandConfirmation = __esm({
585318
586629
  });
585319
586630
 
585320
586631
  // dist/ui/components/bash/CustomCommandExecutionDisplay.js
585321
- function sanitizePreviewLine2(text2) {
586632
+ function sanitizePreviewLine3(text2) {
585322
586633
  return text2.replace(/\x1B\][^\x07]*(?:\x07|\x1B\\)/g, "").replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, "").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, "").replace(/\t/g, " ").replace(/[\s\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]+$/g, "").trim();
585323
586634
  }
585324
586635
  function truncateText5(text2, maxWidth = 80) {
@@ -585352,7 +586663,7 @@ function CustomCommandExecutionDisplay({ command, commandName, isRunning, output
585352
586663
  const lines = entry.split(/\r?\n/);
585353
586664
  for (const raw of lines) {
585354
586665
  const capped = raw.length > maxLineLength ? raw.slice(0, maxLineLength) : raw;
585355
- const cleaned = sanitizePreviewLine2(capped);
586666
+ const cleaned = sanitizePreviewLine3(capped);
585356
586667
  if (cleaned.length > 0) {
585357
586668
  pendingLinesRef.current.push(cleaned);
585358
586669
  }
@@ -593353,9 +594664,14 @@ var init_ModelsPanel = __esm({
593353
594664
  init_ThemeContext();
593354
594665
  init_i18n();
593355
594666
  init_configEvents();
594667
+ init_pickerState();
593356
594668
  ModelsPanel = ({ advancedModel, basicModel, visible, onClose }) => {
593357
594669
  const { theme: theme14 } = useTheme();
593358
594670
  const { t } = useI18n();
594671
+ const closePanel = (0, import_react177.useCallback)(() => {
594672
+ setPickerActive(false);
594673
+ onClose();
594674
+ }, [onClose]);
593359
594675
  const [activeTab, setActiveTab] = (0, import_react177.useState)("advanced");
593360
594676
  const isModelTab = activeTab === "advanced" || activeTab === "basic";
593361
594677
  const [localAdvancedModel, setLocalAdvancedModel] = (0, import_react177.useState)(advancedModel);
@@ -593837,7 +595153,7 @@ var init_ModelsPanel = __esm({
593837
595153
  setHasStartedLoading(false);
593838
595154
  return;
593839
595155
  }
593840
- onClose();
595156
+ closePanel();
593841
595157
  return;
593842
595158
  }
593843
595159
  if (thinkingInputMode) {
@@ -594642,6 +595958,7 @@ function useChatScreenCommands(workingDirectory) {
594642
595958
  let isMounted = true;
594643
595959
  Promise.all([
594644
595960
  Promise.resolve().then(() => (init_clear(), clear_exports)),
595961
+ Promise.resolve().then(() => (init_delSession(), delSession_exports)),
594645
595962
  Promise.resolve().then(() => (init_profiles(), profiles_exports)),
594646
595963
  Promise.resolve().then(() => (init_simple(), simple_exports)),
594647
595964
  Promise.resolve().then(() => (init_resume(), resume_exports)),
@@ -595228,10 +596545,10 @@ __export(ChatScreen_exports, {
595228
596545
  });
595229
596546
  function ChatScreen({ autoResume, resumeSessionId: resumeSessionId2, enableYolo, enablePlan }) {
595230
596547
  const { t } = useI18n();
595231
- useTerminalTitle(`Snow CLI - ${t.chatScreen.headerTitle}`);
596548
+ const workingDirectory = process.cwd();
596549
+ const projectName = getProjectName(workingDirectory);
595232
596550
  const { theme: theme14 } = useTheme();
595233
596551
  const { columns: terminalWidth, rows: terminalHeight } = useTerminalSize();
595234
- const workingDirectory = process.cwd();
595235
596552
  const { messages, setMessages, isSaving, pendingMessages, setPendingMessages, pendingMessagesRef, userInterruptedRef, remountKey, setRemountKey, setCurrentContextPercentage, currentContextPercentageRef, isExecutingTerminalCommand, setIsExecutingTerminalCommand, customCommandExecution, setCustomCommandExecution, isCompressing, setIsCompressing, compressionError, setCompressionError, showPermissionsPanel, setShowPermissionsPanel, showSubAgentDepthPanel, setShowSubAgentDepthPanel, restoreInputContent, setRestoreInputContent, inputDraftContent, setInputDraftContent, bashSensitiveCommand, setBashSensitiveCommand, suppressLoadingIndicator, setSuppressLoadingIndicator, hookError, setHookError, pendingUserQuestion, setPendingUserQuestion, requestUserQuestion, compressionStatus, setCompressionStatus, isResumingSession, setIsResumingSession, btwPrompt, setBtwPrompt } = useChatScreenLocalState();
595236
596553
  const { yoloMode, setYoloMode: setYoloMode2, planMode, setPlanMode: setPlanMode2, vulnerabilityHuntingMode, setVulnerabilityHuntingMode: setVulnerabilityHuntingMode2, toolSearchDisabled, setToolSearchDisabled, hybridCompressEnabled, setHybridCompressEnabled: setHybridCompressEnabled2, teamMode, setTeamMode: setTeamMode2, ultraTodoEnabled, setUltraTodoEnabled: setUltraTodoEnabled2, simpleMode, showThinking } = useChatScreenModes({ enableYolo, enablePlan });
595237
596554
  const streamingState = useStreamingState();
@@ -595330,6 +596647,43 @@ function ChatScreen({ autoResume, resumeSessionId: resumeSessionId2, enableYolo,
595330
596647
  });
595331
596648
  }
595332
596649
  const handleProfileSelect = panelState.handleProfileSelect;
596650
+ const [terminalTitleFrame, setTerminalTitleFrame] = (0, import_react185.useState)(0);
596651
+ const [terminalTitleSummary, setTerminalTitleSummary] = (0, import_react185.useState)("");
596652
+ (0, import_react185.useEffect)(() => {
596653
+ const syncTerminalTitleSummary = () => {
596654
+ const currentSession = sessionManager.getCurrentSession();
596655
+ setTerminalTitleSummary((currentSession == null ? void 0 : currentSession.summary) || "");
596656
+ };
596657
+ syncTerminalTitleSummary();
596658
+ return sessionManager.onMessagesChanged(syncTerminalTitleSummary);
596659
+ }, []);
596660
+ const foregroundTerminalCommand = terminalExecutionState.state.isExecuting && !terminalExecutionState.state.isBackgrounded && Boolean(terminalExecutionState.state.command);
596661
+ const backgroundTerminalCommand = terminalExecutionState.state.isExecuting && terminalExecutionState.state.isBackgrounded;
596662
+ const hasRunningBackgroundProcess = backgroundProcesses.processes.some((backgroundProcess) => backgroundProcess.status === "running");
596663
+ const hasPendingAction = Boolean(pendingToolConfirmation) || Boolean(pendingUserQuestion) || Boolean(bashSensitiveCommand) || terminalExecutionState.state.needsInput;
596664
+ const hasActiveProgress = streamingState.isStreaming || isSaving || isCompressing || isExecutingTerminalCommand || bashMode.state.isExecuting || foregroundTerminalCommand || backgroundTerminalCommand || ((customCommandExecution == null ? void 0 : customCommandExecution.isRunning) ?? false) || schedulerExecutionState.state.isRunning || hasRunningBackgroundProcess;
596665
+ const terminalTitleActive = hasPendingAction;
596666
+ (0, import_react185.useEffect)(() => {
596667
+ if (!terminalTitleActive) {
596668
+ setTerminalTitleFrame(0);
596669
+ return;
596670
+ }
596671
+ const intervalId = setInterval(() => {
596672
+ setTerminalTitleFrame((frame) => frame + 1);
596673
+ }, 500);
596674
+ return () => {
596675
+ clearInterval(intervalId);
596676
+ };
596677
+ }, [terminalTitleActive]);
596678
+ const terminalTitle = formatTerminalTitle({
596679
+ appTitle: t.chatScreen.headerTitle,
596680
+ projectName,
596681
+ summary: terminalTitleSummary,
596682
+ activity: hasActiveProgress,
596683
+ actionRequired: hasPendingAction,
596684
+ animationFrame: terminalTitleFrame
596685
+ });
596686
+ useTerminalTitle(terminalTitle);
595333
596687
  const handleGoalSessionPanelSelect = async (sessionId) => {
595334
596688
  panelState.setShowGoalSessionPanel(false);
595335
596689
  await handleSessionPanelSelect(sessionId);
@@ -595455,11 +596809,16 @@ function ChatScreen({ autoResume, resumeSessionId: resumeSessionId2, enableYolo,
595455
596809
  };
595456
596810
  const hasBlockingPanel = panelState.showSessionPanel || panelState.showGoalSessionPanel || panelState.showMcpPanel || panelState.showUsagePanel || panelState.showHelpPanel || panelState.showProfileEditPanel || panelState.showModelsPanel || panelState.showCustomCommandConfig || panelState.showSkillsCreation || panelState.showRoleCreation || panelState.showRoleDeletion || panelState.showRoleList || panelState.showRoleSubagentCreation || panelState.showRoleSubagentDeletion || panelState.showRoleSubagentList || panelState.showWorkingDirPanel || panelState.showBranchPanel || panelState.showConnectionPanel || panelState.showNewPromptPanel || panelState.showTodoListPanel || panelState.showPixelEditor || showPermissionsPanel || showSubAgentDepthPanel;
595457
596811
  const shouldShowFooter = !pendingToolConfirmation && !pendingUserQuestion && !bashSensitiveCommand && !terminalExecutionState.state.needsInput && !schedulerExecutionState.state.isRunning && !hasBlockingPanel && !snapshotState.pendingRollback;
596812
+ const shouldPreserveInputDraftWhileFooterHidden = panelState.showModelsPanel;
595458
596813
  (0, import_react185.useEffect)(() => {
595459
- if (!shouldShowFooter) {
596814
+ if (!shouldShowFooter && !shouldPreserveInputDraftWhileFooterHidden) {
595460
596815
  setInputDraftContent(null);
595461
596816
  }
595462
- }, [shouldShowFooter, setInputDraftContent]);
596817
+ }, [
596818
+ shouldShowFooter,
596819
+ shouldPreserveInputDraftWhileFooterHidden,
596820
+ setInputDraftContent
596821
+ ]);
595463
596822
  const remountKeyRef = (0, import_react185.useRef)(remountKey);
595464
596823
  (0, import_react185.useEffect)(() => {
595465
596824
  if (remountKey !== remountKeyRef.current) {
@@ -595638,6 +596997,8 @@ var init_ChatScreen = __esm({
595638
596997
  init_ConnectionManager();
595639
596998
  init_contextManager();
595640
596999
  init_sessionManager();
597000
+ init_projectUtils();
597001
+ init_terminal_title_formatter();
595641
597002
  await init_ChatScreenConversationView();
595642
597003
  await init_ChatScreenPanels();
595643
597004
  init_useBackgroundProcessSelection();
@@ -597081,7 +598442,7 @@ __export(sseDaemon_exports, {
597081
598442
  startDaemon: () => startDaemon,
597082
598443
  stopDaemon: () => stopDaemon
597083
598444
  });
597084
- import { spawn as spawn13, execSync as execSync9 } from "child_process";
598445
+ import { spawn as spawn14, execSync as execSync9 } from "child_process";
597085
598446
  import { existsSync as existsSync37, readFileSync as readFileSync28, writeFileSync as writeFileSync21, unlinkSync as unlinkSync8, readdirSync as readdirSync8, mkdirSync as mkdirSync20 } from "fs";
597086
598447
  import { join as join42 } from "path";
597087
598448
  import { homedir as homedir24 } from "os";
@@ -597153,7 +598514,7 @@ function startDaemon(port = 3e3, workDir, timeout2 = 3e5) {
597153
598514
  SSE_DAEMON_LOG_FILE: logFile
597154
598515
  // 传递日志文件路径给子进程
597155
598516
  };
597156
- const child = spawn13(command, commandArgs, {
598517
+ const child = spawn14(command, commandArgs, {
597157
598518
  detached: true,
597158
598519
  stdio: ["ignore", "ignore", "ignore"],
597159
598520
  // 忽略所有stdio,避免Ink UI字符污染
@@ -611987,7 +613348,7 @@ var require_package3 = __commonJS({
611987
613348
  "package.json"(exports2, module2) {
611988
613349
  module2.exports = {
611989
613350
  name: "snow-ai",
611990
- version: "0.7.34",
613351
+ version: "0.7.35",
611991
613352
  description: "Agentic coding in your terminal",
611992
613353
  license: "MIT",
611993
613354
  bin: {
@@ -613437,7 +614798,7 @@ ${help}
613437
614798
  var meow_default = meow;
613438
614799
 
613439
614800
  // dist/cli.js
613440
- import { spawn as spawn14 } from "child_process";
614801
+ import { spawn as spawn15 } from "child_process";
613441
614802
  import { readFileSync as readFileSync29 } from "fs";
613442
614803
  import { join as join44 } from "path";
613443
614804
  import { fileURLToPath as fileURLToPath6 } from "url";
@@ -613898,7 +615259,7 @@ Options
613898
615259
  if (cli.flags.update) {
613899
615260
  console.log("Updating snow-ai to latest version...");
613900
615261
  try {
613901
- const child = spawn14("npm i -g snow-ai", {
615262
+ const child = spawn15("npm i -g snow-ai", {
613902
615263
  stdio: "inherit",
613903
615264
  shell: true
613904
615265
  });