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 +1859 -498
- package/bundle/package.json +1 -1
- package/package.json +1 -1
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
|
|
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 =
|
|
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 = (
|
|
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(
|
|
2899
|
+
constructor(process22) {
|
|
2900
2900
|
super();
|
|
2901
|
-
this.#process =
|
|
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 =
|
|
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
|
-
|
|
2916
|
+
process22.kill(process22.pid, s);
|
|
2917
2917
|
}
|
|
2918
2918
|
};
|
|
2919
2919
|
}
|
|
2920
|
-
this.#originalProcessReallyExit =
|
|
2921
|
-
this.#originalProcessEmit =
|
|
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.
|
|
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(
|
|
59610
|
+
applyTerminalTitle(summary) {
|
|
59584
59611
|
var _a20;
|
|
59585
|
-
if (!
|
|
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 - ${
|
|
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(
|
|
60043
|
+
register(process22) {
|
|
59990
60044
|
if (this.isShuttingDown) {
|
|
59991
|
-
this.killProcess(
|
|
60045
|
+
this.killProcess(process22);
|
|
59992
60046
|
return;
|
|
59993
60047
|
}
|
|
59994
|
-
this.processes.add(
|
|
60048
|
+
this.processes.add(process22);
|
|
59995
60049
|
const cleanup = () => {
|
|
59996
|
-
this.processes.delete(
|
|
60050
|
+
this.processes.delete(process22);
|
|
59997
60051
|
};
|
|
59998
|
-
|
|
59999
|
-
|
|
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(
|
|
60006
|
-
const pid =
|
|
60007
|
-
if (!pid ||
|
|
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
|
-
|
|
60069
|
+
process22.kill("SIGTERM");
|
|
60016
60070
|
setTimeout(() => {
|
|
60017
60071
|
try {
|
|
60018
|
-
if (!
|
|
60019
|
-
|
|
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
|
|
60035
|
-
this.killProcess(
|
|
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
|
-
|
|
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
|
|
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
|
-
...
|
|
60717
|
-
|
|
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:
|
|
64245
|
+
var { Buffer: Buffer4 } = __require("node:buffer");
|
|
64184
64246
|
var wasmBase64 = "AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAg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ogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASECDKACCwJAAkACQCABLQAAQQprDgQBAgIAAgsgAUEBaiEBDAILIAFBAWohAQwBCyADLQAuQcAAcUUNAQtBACEAAkAgAygCOCICRQ0AIAIoAjwiAkUNACADIAIRAAAhAAsgAEUNoAEgAEEVRgRAIANB2QA2AhwgAyABNgIUIANBtxo2AhAgA0EVNgIMQQAhAgyfAgsgA0EANgIcIAMgATYCFCADQYANNgIQIANBGzYCDEEAIQIMngILIANBADYCHCADIAE2AhQgA0HcKDYCECADQQI2AgxBACECDJ0CCyABIARHBEAgA0EMNgIIIAMgATYCBEG/ASECDIQCC0HYASECDJwCCyABIARGBEBB1wEhAgycAgsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBwQBrDhUAAQIDWgQFBlpaWgcICQoLDA0ODxBaCyABQQFqIQFB+wAhAgySAgsgAUEBaiEBQfwAIQIMkQILIAFBAWohAUGBASECDJACCyABQQFqIQFBhQEhAgyPAgsgAUEBaiEBQYYBIQIMjgILIAFBAWohAUGJASECDI0CCyABQQFqIQFBigEhAgyMAgsgAUEBaiEBQY0BIQIMiwILIAFBAWohAUGWASECDIoCCyABQQFqIQFBlwEhAgyJAgsgAUEBaiEBQZgBIQIMiAILIAFBAWohAUGlASECDIcCCyABQQFqIQFBpgEhAgyGAgsgAUEBaiEBQawBIQIMhQILIAFBAWohAUG0ASECDIQCCyABQQFqIQFBtwEhAgyDAgsgAUEBaiEBQb4BIQIMggILIAEgBEYEQEHWASECDJsCCyABLQAAQc4ARw1IIAFBAWohAUG9ASECDIECCyABIARGBEBB1QEhAgyaAgsCQAJAAkAgAS0AAEHCAGsOEgBKSkpKSkpKSkoBSkpKSkpKAkoLIAFBAWohAUG4ASECDIICCyABQQFqIQFBuwEhAgyBAgsgAUEBaiEBQbwBIQIMgAILQdQBIQIgASAERg2YAiADKAIAIgAgBCABa2ohBSABIABrQQdqIQYCQANAIAEtAAAgAEGo1QBqLQAARw1FIABBB0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAgsgA0EANgIAIAZBAWohAUEbDEULIAEgBEYEQEHTASECDJgCCwJAAkAgAS0AAEHJAGsOBwBHR0dHRwFHCyABQQFqIQFBuQEhAgz/AQsgAUEBaiEBQboBIQIM/gELQdIBIQIgASAERg2WAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw1DIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyXAgsgA0EANgIAIAZBAWohAUEPDEMLQdEBIQIgASAERg2VAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw1CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyWAgsgA0EANgIAIAZBAWohAUEgDEILQdABIQIgASAERg2UAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw1BIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyVAgsgA0EANgIAIAZBAWohAUESDEELIAEgBEYEQEHPASECDJQCCwJAAkAgAS0AAEHFAGsODgBDQ0NDQ0NDQ0NDQ0MBQwsgAUEBaiEBQbUBIQIM+wELIAFBAWohAUG2ASECDPoBC0HOASECIAEgBEYNkgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBntUAai0AAEcNPyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMkwILIANBADYCACAGQQFqIQFBBww/C0HNASECIAEgBEYNkQIgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBmNUAai0AAEcNPiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMkgILIANBADYCACAGQQFqIQFBKAw+CyABIARGBEBBzAEhAgyRAgsCQAJAAkAgAS0AAEHFAGsOEQBBQUFBQUFBQUEBQUFBQUECQQsgAUEBaiEBQbEBIQIM+QELIAFBAWohAUGyASECDPgBCyABQQFqIQFBswEhAgz3AQtBywEhAiABIARGDY8CIAMoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQZHVAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJACCyADQQA2AgAgBkEBaiEBQRoMPAtBygEhAiABIARGDY4CIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQY3VAGotAABHDTsgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADI8CCyADQQA2AgAgBkEBaiEBQSEMOwsgASAERgRAQckBIQIMjgILAkACQCABLQAAQcEAaw4UAD09PT09PT09PT09PT09PT09PQE9CyABQQFqIQFBrQEhAgz1AQsgAUEBaiEBQbABIQIM9AELIAEgBEYEQEHIASECDI0CCwJAAkAgAS0AAEHVAGsOCwA8PDw8PDw8PDwBPAsgAUEBaiEBQa4BIQIM9AELIAFBAWohAUGvASECDPMBC0HHASECIAEgBEYNiwIgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNOCAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjAILIANBADYCACAGQQFqIQFBKgw4CyABIARGBEBBxgEhAgyLAgsgAS0AAEHQAEcNOCABQQFqIQFBJQw3C0HFASECIAEgBEYNiQIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBgdUAai0AAEcNNiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMigILIANBADYCACAGQQFqIQFBDgw2CyABIARGBEBBxAEhAgyJAgsgAS0AAEHFAEcNNiABQQFqIQFBqwEhAgzvAQsgASAERgRAQcMBIQIMiAILAkACQAJAAkAgAS0AAEHCAGsODwABAjk5OTk5OTk5OTk5AzkLIAFBAWohAUGnASECDPEBCyABQQFqIQFBqAEhAgzwAQsgAUEBaiEBQakBIQIM7wELIAFBAWohAUGqASECDO4BC0HCASECIAEgBEYNhgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB/tQAai0AAEcNMyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhwILIANBADYCACAGQQFqIQFBFAwzC0HBASECIAEgBEYNhQIgAygCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABB+dQAai0AAEcNMiAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhgILIANBADYCACAGQQFqIQFBKwwyC0HAASECIAEgBEYNhAIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB9tQAai0AAEcNMSAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhQILIANBADYCACAGQQFqIQFBLAwxC0G/ASECIAEgBEYNgwIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBodUAai0AAEcNMCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhAILIANBADYCACAGQQFqIQFBEQwwC0G+ASECIAEgBEYNggIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABB8tQAai0AAEcNLyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMgwILIANBADYCACAGQQFqIQFBLgwvCyABIARGBEBBvQEhAgyCAgsCQAJAAkACQAJAIAEtAABBwQBrDhUANDQ0NDQ0NDQ0NAE0NAI0NAM0NAQ0CyABQQFqIQFBmwEhAgzsAQsgAUEBaiEBQZwBIQIM6wELIAFBAWohAUGdASECDOoBCyABQQFqIQFBogEhAgzpAQsgAUEBaiEBQaQBIQIM6AELIAEgBEYEQEG8ASECDIECCwJAAkAgAS0AAEHSAGsOAwAwATALIAFBAWohAUGjASECDOgBCyABQQFqIQFBBAwtC0G7ASECIAEgBEYN/wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8NQAai0AAEcNLCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMgAILIANBADYCACAGQQFqIQFBHQwsCyABIARGBEBBugEhAgz/AQsCQAJAIAEtAABByQBrDgcBLi4uLi4ALgsgAUEBaiEBQaEBIQIM5gELIAFBAWohAUEiDCsLIAEgBEYEQEG5ASECDP4BCyABLQAAQdAARw0rIAFBAWohAUGgASECDOQBCyABIARGBEBBuAEhAgz9AQsCQAJAIAEtAABBxgBrDgsALCwsLCwsLCwsASwLIAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASECDMYBC0GIASECDMUBCyADQQA2AhwgAyABNgIUIANB2yA2AhAgA0EHNgIMQQAhAgzEAQsgASAERgRAQYkBIQIMxAELAkACQAJAIAEtAABBoNIAai0AAEEBaw4DRgIAAQtB8gAhAgysAQsgA0EANgIcIAMgATYCFCADQbQSNgIQIANBBzYCDEEAIQIMxAELQeoAIQIMqgELIAEgBEcEQCABQQFqIQFB7wAhAgyqAQtBhwEhAgzCAQsgBCABIgBGBEBBhgEhAgzCAQsgAC0AACIBQS9GBEAgAEEBaiEBQe4AIQIMqQELIAFBCWsiAkEXSw0BIAAhAUEBIAJ0QZuAgARxDUEMAQsgBCABIgBGBEBBhQEhAgzBAQsgAC0AAEEvRw0AIABBAWohAQwDC0EAIQIgA0EANgIcIAMgADYCFCADQdsgNgIQIANBBzYCDAy/AQsCQAJAAkACQAJAA0AgAS0AAEGgzgBqLQAAIgBBBUcEQAJAAkAgAEEBaw4IRwUGBwgABAEIC0HrACECDK0BCyABQQFqIQFB7QAhAgysAQsgBCABQQFqIgFHDQALQYQBIQIMwwELIAFBAWoMFAsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDR4gA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgzBAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDR4gA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgzAAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDR4gA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgy/AQsgA0EANgIcIAMgATYCFCADQfkPNgIQIANBBzYCDEEAIQIMvgELIAEgBEYEQEGDASECDL4BCwJAIAEtAABBoM4Aai0AAEEBaw4IPgQFBgAIAgMHCyABQQFqIQELQQMhAgyjAQsgAUEBagwNC0EAIQIgA0EANgIcIANB0RI2AhAgA0EHNgIMIAMgAUEBajYCFAy6AQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDRYgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgy5AQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDRYgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgy4AQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDRYgA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgy3AQsgA0EANgIcIAMgATYCFCADQfkPNgIQIANBBzYCDEEAIQIMtgELQewAIQIMnAELIAEgBEYEQEGCASECDLUBCyABQQFqDAILIAEgBEYEQEGBASECDLQBCyABQQFqDAELIAEgBEYNASABQQFqCyEBQQQhAgyYAQtBgAEhAgywAQsDQCABLQAAQaDMAGotAAAiAEECRwRAIABBAUcEQEHpACECDJkBCwwxCyAEIAFBAWoiAUcNAAtB/wAhAgyvAQsgASAERgRAQf4AIQIMrwELAkAgAS0AAEEJaw43LwMGLwQGBgYGBgYGBgYGBgYGBgYGBgYFBgYCBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAAYLIAFBAWoLIQFBBSECDJQBCyABQQFqDAYLIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0IIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMqwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0IIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMqgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0IIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMqQELIANBADYCHCADIAE2AhQgA0GNFDYCECADQQc2AgxBACECDKgBCwJAAkACQAJAA0AgAS0AAEGgygBqLQAAIgBBBUcEQAJAIABBAWsOBi4DBAUGAAYLQegAIQIMlAELIAQgAUEBaiIBRw0AC0H9ACECDKsBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNByADQdsANgIcIAMgATYCFCADIAA2AgxBACECDKoBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNByADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDKkBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNByADQfoANgIcIAMgATYCFCADIAA2AgxBACECDKgBCyADQQA2AhwgAyABNgIUIANB5Ag2AhAgA0EHNgIMQQAhAgynAQsgASAERg0BIAFBAWoLIQFBBiECDIwBC0H8ACECDKQBCwJAAkACQAJAA0AgAS0AAEGgyABqLQAAIgBBBUcEQCAAQQFrDgQpAgMEBQsgBCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+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 =
|
|
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:
|
|
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 =
|
|
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
|
|
90432
|
+
var spawn16 = new PromiseSpawn$(
|
|
90371
90433
|
void 0,
|
|
90372
90434
|
void 0,
|
|
90373
90435
|
yieldHandler,
|
|
90374
90436
|
stack
|
|
90375
90437
|
);
|
|
90376
|
-
var ret2 =
|
|
90377
|
-
|
|
90378
|
-
|
|
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
|
|
90394
|
-
var ret2 =
|
|
90395
|
-
|
|
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
|
|
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 (
|
|
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
|
|
92549
|
+
return Buffer4(arg, encodingOrOffset, length);
|
|
92488
92550
|
}
|
|
92489
|
-
copyProps(
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
92700
|
-
var ret2 =
|
|
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
|
|
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
|
|
92886
|
+
return Buffer4.from(chunk2);
|
|
92825
92887
|
}
|
|
92826
92888
|
function _isUint8Array(obj2) {
|
|
92827
|
-
return
|
|
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 && !
|
|
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 =
|
|
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
|
|
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
|
|
93394
|
+
return Buffer4.from(chunk2);
|
|
93333
93395
|
}
|
|
93334
93396
|
function _isUint8Array(obj2) {
|
|
93335
|
-
return
|
|
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 =
|
|
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) !==
|
|
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 =
|
|
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
|
|
153819
|
+
var process22 = globalThis2.process;
|
|
153758
153820
|
var Deno2 = globalThis2.Deno;
|
|
153759
|
-
var versions =
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
203354
|
-
module2.exports.spawn =
|
|
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
|
|
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
|
|
360745
|
-
if (!
|
|
360879
|
+
for (key in Buffer4) {
|
|
360880
|
+
if (!Buffer4.hasOwnProperty(key)) continue;
|
|
360746
360881
|
if (key === "allocUnsafe" || key === "allocUnsafeSlow") continue;
|
|
360747
|
-
Safer[key] =
|
|
360882
|
+
Safer[key] = Buffer4[key];
|
|
360748
360883
|
}
|
|
360749
|
-
safer.Buffer.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
|
|
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 =
|
|
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
|
|
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 (
|
|
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 (!
|
|
360902
|
-
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
|
|
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
|
|
361060
|
+
return Buffer4.from(str2, "base64");
|
|
360926
361061
|
};
|
|
360927
361062
|
InternalEncoderBase64.prototype.end = function() {
|
|
360928
|
-
return
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
361064
|
-
var dst =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
361654
|
-
var encodeBuf =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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,
|
|
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 (!
|
|
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
|
|
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 ?
|
|
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 =
|
|
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
|
|
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,
|
|
367680
|
+
globalProcesses = [...globalProcesses, process22];
|
|
367546
367681
|
if (globalSetProcesses) {
|
|
367547
367682
|
globalSetProcesses(globalProcesses);
|
|
367548
367683
|
}
|
|
367549
|
-
return
|
|
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
|
|
367564
|
-
if (!
|
|
367698
|
+
const process22 = globalProcesses.find((p) => p.id === id);
|
|
367699
|
+
if (!process22 || process22.status !== "running") {
|
|
367565
367700
|
return;
|
|
367566
367701
|
}
|
|
367567
|
-
const { pid } =
|
|
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
|
|
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,
|
|
367765
|
+
globalProcesses = [...globalProcesses, process22];
|
|
367631
367766
|
if (globalSetProcesses) {
|
|
367632
367767
|
globalSetProcesses(globalProcesses);
|
|
367633
367768
|
}
|
|
367634
|
-
return
|
|
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,
|
|
391109
|
-
const browser = new _CdpBrowser(connection, contextIds, defaultViewport,
|
|
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,
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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.
|
|
443910
|
-
|
|
443911
|
-
|
|
443912
|
-
|
|
443913
|
-
|
|
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
|
-
}
|
|
443916
|
-
|
|
443917
|
-
|
|
443918
|
-
|
|
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
|
|
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
|
-
|
|
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: {
|
|
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: {
|
|
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
|
-
|
|
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
|
-
|
|
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, {
|
|
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,
|
|
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(
|
|
463623
|
+
constructor(process22) {
|
|
463390
463624
|
super();
|
|
463391
|
-
this.process =
|
|
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(
|
|
463637
|
+
constructor(process22) {
|
|
463404
463638
|
super();
|
|
463405
|
-
this.process =
|
|
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
|
|
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:
|
|
471302
|
+
images: processedVisionContent.images
|
|
470630
471303
|
});
|
|
470631
471304
|
try {
|
|
470632
471305
|
await saveMessage({
|
|
470633
471306
|
role: "user",
|
|
470634
|
-
content:
|
|
470635
|
-
images:
|
|
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
|
|
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 "${
|
|
471930
|
-
set saveFile to choose file name with prompt "${
|
|
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 "${
|
|
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 "${
|
|
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
|
|
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", {
|
|
473494
|
+
saveSensitiveCommandsForScope("global", {
|
|
473495
|
+
commands: value["global"]
|
|
473496
|
+
});
|
|
472775
473497
|
}
|
|
472776
473498
|
if (hasOwn(value, "project")) {
|
|
472777
|
-
saveSensitiveCommandsForScope("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 =
|
|
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
|
-
|
|
473391
|
-
|
|
473392
|
-
|
|
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:
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
479055
|
+
import process21 from "node:process";
|
|
478280
479056
|
function isUnicodeSupported() {
|
|
478281
|
-
const { env: env5 } =
|
|
479057
|
+
const { env: env5 } = process21;
|
|
478282
479058
|
const { TERM, TERM_PROGRAM } = env5;
|
|
478283
|
-
if (
|
|
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 (
|
|
485483
|
+
if (safeTitle) {
|
|
484704
485484
|
try {
|
|
484705
|
-
process.title =
|
|
485485
|
+
process.title = safeTitle;
|
|
484706
485486
|
} catch {
|
|
484707
485487
|
}
|
|
484708
485488
|
}
|
|
484709
485489
|
try {
|
|
484710
|
-
stdout.write(`\x1B]0;${
|
|
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(
|
|
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
|
|
485318
|
-
|
|
485319
|
-
|
|
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 (
|
|
485322
|
-
return resolveApiEndpoint(resolvedBaseUrl, "anthropicMessages",
|
|
486150
|
+
if (activeRequestMethod === "anthropic") {
|
|
486151
|
+
return resolveApiEndpoint(resolvedBaseUrl, "anthropicMessages", activeBaseUrlMode, { anthropicBeta });
|
|
485323
486152
|
}
|
|
485324
|
-
if (
|
|
485325
|
-
return resolveApiEndpoint(resolvedBaseUrl, "geminiStreamGenerateContent",
|
|
486153
|
+
if (activeRequestMethod === "gemini") {
|
|
486154
|
+
return resolveApiEndpoint(resolvedBaseUrl, "geminiStreamGenerateContent", activeBaseUrlMode, { modelName: activeModel || "model-id" });
|
|
485326
486155
|
}
|
|
485327
|
-
return resolveApiEndpoint(resolvedBaseUrl, "chat",
|
|
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 }, (
|
|
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
|
|
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 =
|
|
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
|
|
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:
|
|
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,
|
|
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
|
-
|
|
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 =
|
|
567763
|
-
const truncatedOutput =
|
|
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
|
|
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 =
|
|
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
|
|
571495
|
-
|
|
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(
|
|
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(
|
|
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: "
|
|
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
|
|
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 =
|
|
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 &&
|
|
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
|
-
|
|
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
|
|
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 (
|
|
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
|
|
573738
|
-
|
|
573739
|
-
|
|
573740
|
-
|
|
573741
|
-
|
|
573742
|
-
|
|
573743
|
-
|
|
573744
|
-
|
|
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:
|
|
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 =
|
|
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
|
|
577539
|
-
|
|
577540
|
-
|
|
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(
|
|
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)((
|
|
579416
|
-
if (
|
|
580623
|
+
const getStatusText = (0, import_react125.useCallback)((process22) => {
|
|
580624
|
+
if (process22.status === "running") {
|
|
579417
580625
|
return t.backgroundProcesses.statusRunning;
|
|
579418
580626
|
}
|
|
579419
|
-
if (
|
|
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((
|
|
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:
|
|
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(
|
|
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
|
-
|
|
580681
|
+
process22.pid,
|
|
579474
580682
|
" | ",
|
|
579475
580683
|
t.backgroundProcesses.status,
|
|
579476
580684
|
":",
|
|
579477
580685
|
" "
|
|
579478
580686
|
),
|
|
579479
|
-
import_react125.default.createElement(Text, { color: getStatusColor(
|
|
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(
|
|
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
|
-
|
|
581651
|
-
|
|
581652
|
-
|
|
581653
|
-
|
|
581654
|
-
|
|
581655
|
-
|
|
581656
|
-
|
|
581657
|
-
|
|
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
|
-
|
|
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
|
-
|
|
581875
|
-
|
|
581876
|
-
|
|
583121
|
+
void (async () => {
|
|
583122
|
+
let willAutoContinue = false;
|
|
583123
|
+
try {
|
|
583124
|
+
if (!wasUserInterrupted) {
|
|
581877
583125
|
const current = await goalManager.loadCurrentGoal();
|
|
581878
|
-
if (
|
|
581879
|
-
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
}, [
|
|
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
|
|
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 =
|
|
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.
|
|
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
|
|
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 =
|
|
615262
|
+
const child = spawn15("npm i -g snow-ai", {
|
|
613902
615263
|
stdio: "inherit",
|
|
613903
615264
|
shell: true
|
|
613904
615265
|
});
|