localclawd 1.9.1 → 1.9.8
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/dist/cli.mjs +676 -587
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -35751,7 +35751,7 @@ function createDefaultGlobalConfig() {
|
|
|
35751
35751
|
autoUpdates: undefined,
|
|
35752
35752
|
theme: "dark",
|
|
35753
35753
|
preferredNotifChannel: "auto",
|
|
35754
|
-
verbose:
|
|
35754
|
+
verbose: true,
|
|
35755
35755
|
editorMode: "normal",
|
|
35756
35756
|
autoCompactEnabled: true,
|
|
35757
35757
|
showTurnDuration: true,
|
|
@@ -87608,7 +87608,7 @@ var init_isEqual = __esm(() => {
|
|
|
87608
87608
|
|
|
87609
87609
|
// src/utils/userAgent.ts
|
|
87610
87610
|
function getClaudeCodeUserAgent() {
|
|
87611
|
-
return `claude-code/${"1.9.
|
|
87611
|
+
return `claude-code/${"1.9.8"}`;
|
|
87612
87612
|
}
|
|
87613
87613
|
|
|
87614
87614
|
// src/utils/workloadContext.ts
|
|
@@ -87630,7 +87630,7 @@ function getUserAgent() {
|
|
|
87630
87630
|
const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
|
|
87631
87631
|
const workload = getWorkload();
|
|
87632
87632
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
87633
|
-
return `claude-cli/${"1.9.
|
|
87633
|
+
return `claude-cli/${"1.9.8"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
87634
87634
|
}
|
|
87635
87635
|
function getMCPUserAgent() {
|
|
87636
87636
|
const parts = [];
|
|
@@ -87644,7 +87644,7 @@ function getMCPUserAgent() {
|
|
|
87644
87644
|
parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
|
|
87645
87645
|
}
|
|
87646
87646
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
87647
|
-
return `claude-code/${"1.9.
|
|
87647
|
+
return `claude-code/${"1.9.8"}${suffix}`;
|
|
87648
87648
|
}
|
|
87649
87649
|
function getWebFetchUserAgent() {
|
|
87650
87650
|
return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
|
|
@@ -130840,7 +130840,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
130840
130840
|
if (!isAttributionHeaderEnabled()) {
|
|
130841
130841
|
return "";
|
|
130842
130842
|
}
|
|
130843
|
-
const version = `${"1.9.
|
|
130843
|
+
const version = `${"1.9.8"}.${fingerprint}`;
|
|
130844
130844
|
const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
|
|
130845
130845
|
const cch = "";
|
|
130846
130846
|
const workload = getWorkload();
|
|
@@ -147029,7 +147029,7 @@ var init_metadata = __esm(() => {
|
|
|
147029
147029
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
147030
147030
|
WHITESPACE_REGEX = /\s+/;
|
|
147031
147031
|
getVersionBase = memoize_default(() => {
|
|
147032
|
-
const match = "1.9.
|
|
147032
|
+
const match = "1.9.8".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
147033
147033
|
return match ? match[0] : undefined;
|
|
147034
147034
|
});
|
|
147035
147035
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -147069,9 +147069,9 @@ var init_metadata = __esm(() => {
|
|
|
147069
147069
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
147070
147070
|
isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
|
|
147071
147071
|
isClaudeAiAuth: isClaudeAISubscriber(),
|
|
147072
|
-
version: "1.9.
|
|
147072
|
+
version: "1.9.8",
|
|
147073
147073
|
versionBase: getVersionBase(),
|
|
147074
|
-
buildTime: "2026-05-
|
|
147074
|
+
buildTime: "2026-05-07T19:50:53.354Z",
|
|
147075
147075
|
deploymentEnvironment: env3.detectDeploymentEnvironment(),
|
|
147076
147076
|
...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
|
|
147077
147077
|
githubEventName: process.env.GITHUB_EVENT_NAME,
|
|
@@ -179647,7 +179647,7 @@ function getTelemetryAttributes() {
|
|
|
179647
179647
|
attributes["session.id"] = sessionId;
|
|
179648
179648
|
}
|
|
179649
179649
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
179650
|
-
attributes["app.version"] = "1.9.
|
|
179650
|
+
attributes["app.version"] = "1.9.8";
|
|
179651
179651
|
}
|
|
179652
179652
|
const oauthAccount = getOauthAccountInfo();
|
|
179653
179653
|
if (oauthAccount) {
|
|
@@ -180599,8 +180599,7 @@ function isAutoCompactEnabled() {
|
|
|
180599
180599
|
if (isEnvTruthy(process.env.DISABLE_AUTO_COMPACT)) {
|
|
180600
180600
|
return false;
|
|
180601
180601
|
}
|
|
180602
|
-
|
|
180603
|
-
return userConfig.autoCompactEnabled;
|
|
180602
|
+
return true;
|
|
180604
180603
|
}
|
|
180605
180604
|
async function shouldAutoCompact(messages, model, querySource, snipTokensFreed = 0) {
|
|
180606
180605
|
if (querySource === "session_memory" || querySource === "compact") {
|
|
@@ -180638,7 +180637,12 @@ async function autoCompactIfNeeded(messages, toolUseContext, cacheSafeParams, qu
|
|
|
180638
180637
|
autoCompactThreshold: getAutoCompactThreshold(model),
|
|
180639
180638
|
querySource
|
|
180640
180639
|
};
|
|
180641
|
-
|
|
180640
|
+
let sessionMemoryResult = null;
|
|
180641
|
+
try {
|
|
180642
|
+
sessionMemoryResult = await trySessionMemoryCompaction(messages, toolUseContext.agentId, recompactionInfo.autoCompactThreshold);
|
|
180643
|
+
} catch (smError) {
|
|
180644
|
+
logError(smError);
|
|
180645
|
+
}
|
|
180642
180646
|
if (sessionMemoryResult) {
|
|
180643
180647
|
setLastSummarizedMessageId(undefined);
|
|
180644
180648
|
runPostCompactCleanup(querySource);
|
|
@@ -180674,7 +180678,6 @@ var MAX_OUTPUT_TOKENS_FOR_SUMMARY = 20000, AUTOCOMPACT_BUFFER_TOKENS = 13000, WA
|
|
|
180674
180678
|
var init_autoCompact = __esm(() => {
|
|
180675
180679
|
init_state();
|
|
180676
180680
|
init_state();
|
|
180677
|
-
init_config();
|
|
180678
180681
|
init_context();
|
|
180679
180682
|
init_debug();
|
|
180680
180683
|
init_envUtils();
|
|
@@ -242448,7 +242451,7 @@ function getInstallationEnv() {
|
|
|
242448
242451
|
return;
|
|
242449
242452
|
}
|
|
242450
242453
|
function getClaudeCodeVersion() {
|
|
242451
|
-
return "1.9.
|
|
242454
|
+
return "1.9.8";
|
|
242452
242455
|
}
|
|
242453
242456
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
242454
242457
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -247722,7 +247725,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
247722
247725
|
const client4 = new Client({
|
|
247723
247726
|
name: "localclawd",
|
|
247724
247727
|
title: "localclawd",
|
|
247725
|
-
version: "1.9.
|
|
247728
|
+
version: "1.9.8",
|
|
247726
247729
|
description: "local-first AI coding tool",
|
|
247727
247730
|
websiteUrl: PRODUCT_URL
|
|
247728
247731
|
}, {
|
|
@@ -248064,7 +248067,7 @@ var init_client9 = __esm(() => {
|
|
|
248064
248067
|
const client4 = new Client({
|
|
248065
248068
|
name: "localclawd",
|
|
248066
248069
|
title: "localclawd",
|
|
248067
|
-
version: "1.9.
|
|
248070
|
+
version: "1.9.8",
|
|
248068
248071
|
description: "local-first AI coding tool",
|
|
248069
248072
|
websiteUrl: PRODUCT_URL
|
|
248070
248073
|
}, {
|
|
@@ -257350,7 +257353,7 @@ var init_FileEditTool = __esm(() => {
|
|
|
257350
257353
|
}
|
|
257351
257354
|
const similarFilename = findSimilarFile(fullFilePath);
|
|
257352
257355
|
const cwdSuggestion = await suggestPathUnderCwd(fullFilePath);
|
|
257353
|
-
let message = `File does not exist. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
|
|
257356
|
+
let message = `File does not exist. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
|
|
257354
257357
|
if (cwdSuggestion) {
|
|
257355
257358
|
message += ` Did you mean ${cwdSuggestion}?`;
|
|
257356
257359
|
} else if (similarFilename) {
|
|
@@ -258847,7 +258850,7 @@ var init_GrepTool = __esm(() => {
|
|
|
258847
258850
|
} catch (e) {
|
|
258848
258851
|
if (isENOENT(e)) {
|
|
258849
258852
|
const cwdSuggestion = await suggestPathUnderCwd(absolutePath);
|
|
258850
|
-
let message = `Path does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
|
|
258853
|
+
let message = `Path does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
|
|
258851
258854
|
if (cwdSuggestion) {
|
|
258852
258855
|
message += ` Did you mean ${cwdSuggestion}?`;
|
|
258853
258856
|
}
|
|
@@ -259240,7 +259243,7 @@ var init_GlobTool = __esm(() => {
|
|
|
259240
259243
|
} catch (e) {
|
|
259241
259244
|
if (isENOENT(e)) {
|
|
259242
259245
|
const cwdSuggestion = await suggestPathUnderCwd(absolutePath);
|
|
259243
|
-
let message = `Directory does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
|
|
259246
|
+
let message = `Directory does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
|
|
259244
259247
|
if (cwdSuggestion) {
|
|
259245
259248
|
message += ` Did you mean ${cwdSuggestion}?`;
|
|
259246
259249
|
}
|
|
@@ -262466,7 +262469,7 @@ function computeFingerprint(messageText, version) {
|
|
|
262466
262469
|
}
|
|
262467
262470
|
function computeFingerprintFromMessages(messages) {
|
|
262468
262471
|
const firstMessageText = extractFirstMessageText(messages);
|
|
262469
|
-
return computeFingerprint(firstMessageText, "1.9.
|
|
262472
|
+
return computeFingerprint(firstMessageText, "1.9.8");
|
|
262470
262473
|
}
|
|
262471
262474
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
262472
262475
|
var init_fingerprint = () => {};
|
|
@@ -262508,7 +262511,7 @@ async function sideQuery(opts) {
|
|
|
262508
262511
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
262509
262512
|
}
|
|
262510
262513
|
const messageText = extractFirstUserMessageText(messages);
|
|
262511
|
-
const fingerprint = computeFingerprint(messageText, "1.9.
|
|
262514
|
+
const fingerprint = computeFingerprint(messageText, "1.9.8");
|
|
262512
262515
|
const attributionHeader = getAttributionHeader(fingerprint);
|
|
262513
262516
|
const systemBlocks = [
|
|
262514
262517
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -283256,7 +283259,7 @@ var init_user = __esm(() => {
|
|
|
283256
283259
|
deviceId,
|
|
283257
283260
|
sessionId: getSessionId(),
|
|
283258
283261
|
email: getEmail(),
|
|
283259
|
-
appVersion: "1.9.
|
|
283262
|
+
appVersion: "1.9.8",
|
|
283260
283263
|
platform: getHostPlatformForAnalytics(),
|
|
283261
283264
|
organizationUuid,
|
|
283262
283265
|
accountUuid,
|
|
@@ -284321,7 +284324,7 @@ async function initializeBetaTracing(resource) {
|
|
|
284321
284324
|
});
|
|
284322
284325
|
logs.setGlobalLoggerProvider(loggerProvider);
|
|
284323
284326
|
setLoggerProvider(loggerProvider);
|
|
284324
|
-
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.
|
|
284327
|
+
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.8");
|
|
284325
284328
|
setEventLogger(eventLogger);
|
|
284326
284329
|
process.on("beforeExit", async () => {
|
|
284327
284330
|
await loggerProvider?.forceFlush();
|
|
@@ -284361,7 +284364,7 @@ async function initializeTelemetry() {
|
|
|
284361
284364
|
const platform2 = getPlatform();
|
|
284362
284365
|
const baseAttributes = {
|
|
284363
284366
|
[ATTR_SERVICE_NAME4]: "claude-code",
|
|
284364
|
-
[ATTR_SERVICE_VERSION4]: "1.9.
|
|
284367
|
+
[ATTR_SERVICE_VERSION4]: "1.9.8"
|
|
284365
284368
|
};
|
|
284366
284369
|
if (platform2 === "wsl") {
|
|
284367
284370
|
const wslVersion = getWslVersion();
|
|
@@ -284406,7 +284409,7 @@ async function initializeTelemetry() {
|
|
|
284406
284409
|
} catch {}
|
|
284407
284410
|
};
|
|
284408
284411
|
registerCleanup(shutdownTelemetry2);
|
|
284409
|
-
return meterProvider2.getMeter("com.anthropic.claude_code", "1.9.
|
|
284412
|
+
return meterProvider2.getMeter("com.anthropic.claude_code", "1.9.8");
|
|
284410
284413
|
}
|
|
284411
284414
|
const meterProvider = new MeterProvider4({
|
|
284412
284415
|
resource,
|
|
@@ -284426,7 +284429,7 @@ async function initializeTelemetry() {
|
|
|
284426
284429
|
});
|
|
284427
284430
|
logs.setGlobalLoggerProvider(loggerProvider);
|
|
284428
284431
|
setLoggerProvider(loggerProvider);
|
|
284429
|
-
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.
|
|
284432
|
+
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.8");
|
|
284430
284433
|
setEventLogger(eventLogger);
|
|
284431
284434
|
logForDebugging("[3P telemetry] Event logger set successfully");
|
|
284432
284435
|
process.on("beforeExit", async () => {
|
|
@@ -284488,7 +284491,7 @@ Current timeout: ${timeoutMs}ms
|
|
|
284488
284491
|
}
|
|
284489
284492
|
};
|
|
284490
284493
|
registerCleanup(shutdownTelemetry);
|
|
284491
|
-
return meterProvider.getMeter("com.anthropic.claude_code", "1.9.
|
|
284494
|
+
return meterProvider.getMeter("com.anthropic.claude_code", "1.9.8");
|
|
284492
284495
|
}
|
|
284493
284496
|
async function flushTelemetry() {
|
|
284494
284497
|
const meterProvider = getMeterProvider();
|
|
@@ -285678,7 +285681,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
285678
285681
|
}
|
|
285679
285682
|
async function getDoctorDiagnostic() {
|
|
285680
285683
|
const installationType = await getCurrentInstallationType();
|
|
285681
|
-
const version = typeof MACRO !== "undefined" ? "1.9.
|
|
285684
|
+
const version = typeof MACRO !== "undefined" ? "1.9.8" : "unknown";
|
|
285682
285685
|
const installationPath = await getInstallationPath();
|
|
285683
285686
|
const invokedBinary = getInvokedBinary();
|
|
285684
285687
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -286619,8 +286622,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
286619
286622
|
const maxVersion = await getMaxVersion();
|
|
286620
286623
|
if (maxVersion && gt(version, maxVersion)) {
|
|
286621
286624
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
|
|
286622
|
-
if (gte("1.9.
|
|
286623
|
-
logForDebugging(`Native installer: current version ${"1.9.
|
|
286625
|
+
if (gte("1.9.8", maxVersion)) {
|
|
286626
|
+
logForDebugging(`Native installer: current version ${"1.9.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
286624
286627
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
286625
286628
|
latency_ms: Date.now() - startTime,
|
|
286626
286629
|
max_version: maxVersion,
|
|
@@ -286631,7 +286634,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
286631
286634
|
version = maxVersion;
|
|
286632
286635
|
}
|
|
286633
286636
|
}
|
|
286634
|
-
if (!forceReinstall && version === "1.9.
|
|
286637
|
+
if (!forceReinstall && version === "1.9.8" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
|
|
286635
286638
|
logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
|
|
286636
286639
|
logEvent("tengu_native_update_complete", {
|
|
286637
286640
|
latency_ms: Date.now() - startTime,
|
|
@@ -322953,7 +322956,7 @@ async function scaffoldProject(projectRoot) {
|
|
|
322953
322956
|
await access5(join79(base, "config.json"));
|
|
322954
322957
|
alreadyExisted = true;
|
|
322955
322958
|
} catch {}
|
|
322956
|
-
const dirs = [base, join79(base, "
|
|
322959
|
+
const dirs = [base, join79(base, "workflows"), join79(base, "generated")];
|
|
322957
322960
|
for (const dir of dirs) {
|
|
322958
322961
|
await mkdir19(dir, { recursive: true });
|
|
322959
322962
|
}
|
|
@@ -322962,14 +322965,6 @@ async function scaffoldProject(projectRoot) {
|
|
|
322962
322965
|
if (!alreadyExisted) {
|
|
322963
322966
|
await writeFile19(configPath, JSON.stringify(DEFAULT_CONFIG2, null, 2), "utf-8");
|
|
322964
322967
|
created.push(".localclawd/image-pipeline/config.json");
|
|
322965
|
-
await writeFile19(join79(base, "prompts", "example.json"), JSON.stringify(EXAMPLE_PROMPT, null, 2), "utf-8");
|
|
322966
|
-
created.push(".localclawd/image-pipeline/prompts/example.json");
|
|
322967
|
-
await writeFile19(join79(base, "scripts", "generate.sh"), GENERATE_SH, "utf-8");
|
|
322968
|
-
created.push(".localclawd/image-pipeline/scripts/generate.sh");
|
|
322969
|
-
await writeFile19(join79(base, "scripts", "generate.ps1"), GENERATE_PS1, "utf-8");
|
|
322970
|
-
created.push(".localclawd/image-pipeline/scripts/generate.ps1");
|
|
322971
|
-
await writeFile19(join79(base, "README.md"), README_CONTENT, "utf-8");
|
|
322972
|
-
created.push(".localclawd/image-pipeline/README.md");
|
|
322973
322968
|
}
|
|
322974
322969
|
for (const [wfName, wfContent] of [
|
|
322975
322970
|
["txt2img.json", DEFAULT_WORKFLOW],
|
|
@@ -323026,87 +323021,7 @@ async function listWorkflows(projectRoot) {
|
|
|
323026
323021
|
await scan(base, "");
|
|
323027
323022
|
return results;
|
|
323028
323023
|
}
|
|
323029
|
-
var DEFAULT_CONFIG2,
|
|
323030
|
-
# localclawd image pipeline — quick generate helper
|
|
323031
|
-
# Usage: ./scripts/generate.sh "positive prompt" "negative prompt"
|
|
323032
|
-
|
|
323033
|
-
set -e
|
|
323034
|
-
BACKEND="\${COMFYUI_URL:-http://127.0.0.1:8000}"
|
|
323035
|
-
POSITIVE="\${1:-a fantasy warrior}"
|
|
323036
|
-
NEGATIVE="\${2:-blurry, low quality}"
|
|
323037
|
-
SEED=\${RANDOM}
|
|
323038
|
-
|
|
323039
|
-
echo "Submitting to $BACKEND ..."
|
|
323040
|
-
curl -s -X POST "$BACKEND/prompt" -H "Content-Type: application/json" -d '{
|
|
323041
|
-
"prompt": {
|
|
323042
|
-
"4": {"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"v1-5-pruned-emaonly.safetensors"}},
|
|
323043
|
-
"5": {"class_type":"EmptyLatentImage","inputs":{"width":512,"height":512,"batch_size":1}},
|
|
323044
|
-
"6": {"class_type":"CLIPTextEncode","inputs":{"clip":["4",1],"text":"'"$POSITIVE"'"}},
|
|
323045
|
-
"7": {"class_type":"CLIPTextEncode","inputs":{"clip":["4",1],"text":"'"$NEGATIVE"'"}},
|
|
323046
|
-
"3": {"class_type":"KSampler","inputs":{"model":["4",0],"positive":["6",0],"negative":["7",0],"latent_image":["5",0],"seed":'"$SEED"',"steps":20,"cfg":7,"sampler_name":"euler","scheduler":"normal","denoise":1}},
|
|
323047
|
-
"8": {"class_type":"VAEDecode","inputs":{"samples":["3",0],"vae":["4",2]}},
|
|
323048
|
-
"9": {"class_type":"SaveImage","inputs":{"filename_prefix":"localclawd","images":["8",0]}}
|
|
323049
|
-
}
|
|
323050
|
-
}' | python3 -m json.tool
|
|
323051
|
-
echo "Check ComfyUI output folder or /history endpoint for results."
|
|
323052
|
-
`, GENERATE_PS1 = `# localclawd image pipeline — quick generate helper (PowerShell)
|
|
323053
|
-
# Usage: .\\scripts\\generate.ps1 "positive prompt" "negative prompt"
|
|
323054
|
-
param(
|
|
323055
|
-
[string]$Positive = "a fantasy warrior",
|
|
323056
|
-
[string]$Negative = "blurry, low quality"
|
|
323057
|
-
)
|
|
323058
|
-
$Backend = if ($env:COMFYUI_URL) { $env:COMFYUI_URL } else { "http://127.0.0.1:8000" }
|
|
323059
|
-
$Seed = Get-Random
|
|
323060
|
-
Write-Host "Submitting to $Backend ..."
|
|
323061
|
-
$body = @{
|
|
323062
|
-
prompt = @{
|
|
323063
|
-
"4" = @{ class_type = "CheckpointLoaderSimple"; inputs = @{ ckpt_name = "v1-5-pruned-emaonly.safetensors" } }
|
|
323064
|
-
"5" = @{ class_type = "EmptyLatentImage"; inputs = @{ width = 512; height = 512; batch_size = 1 } }
|
|
323065
|
-
"6" = @{ class_type = "CLIPTextEncode"; inputs = @{ clip = @("4",1); text = $Positive } }
|
|
323066
|
-
"7" = @{ class_type = "CLIPTextEncode"; inputs = @{ clip = @("4",1); text = $Negative } }
|
|
323067
|
-
"3" = @{ class_type = "KSampler"; inputs = @{ model = @("4",0); positive = @("6",0); negative = @("7",0); latent_image = @("5",0); seed = $Seed; steps = 20; cfg = 7; sampler_name = "euler"; scheduler = "normal"; denoise = 1 } }
|
|
323068
|
-
"8" = @{ class_type = "VAEDecode"; inputs = @{ samples = @("3",0); vae = @("4",2) } }
|
|
323069
|
-
"9" = @{ class_type = "SaveImage"; inputs = @{ filename_prefix = "localclawd"; images = @("8",0) } }
|
|
323070
|
-
}
|
|
323071
|
-
} | ConvertTo-Json -Depth 10
|
|
323072
|
-
Invoke-RestMethod -Uri "$Backend/prompt" -Method POST -ContentType "application/json" -Body $body
|
|
323073
|
-
Write-Host "Done! Check ComfyUI output folder."
|
|
323074
|
-
`, README_CONTENT = `# Image Pipeline — .localclawd/image-pipeline/
|
|
323075
|
-
|
|
323076
|
-
Project-local image generation configuration for localclawd + ComfyUI.
|
|
323077
|
-
|
|
323078
|
-
## Quick Start
|
|
323079
|
-
|
|
323080
|
-
1. Start ComfyUI on this machine (default port 8000)
|
|
323081
|
-
2. Run \`/image-pipeline\` in localclawd to check status
|
|
323082
|
-
3. Use \`/image a misty forest at dawn\` to generate an image
|
|
323083
|
-
4. Use \`/image txt2img: a misty forest at dawn\` to use a specific workflow
|
|
323084
|
-
|
|
323085
|
-
## Structure
|
|
323086
|
-
|
|
323087
|
-
\`\`\`
|
|
323088
|
-
config.json — backend URL and default params
|
|
323089
|
-
prompts/ — reusable prompt templates (JSON)
|
|
323090
|
-
workflows/ — full ComfyUI workflow JSON files
|
|
323091
|
-
generated/ — locally downloaded output images
|
|
323092
|
-
scripts/ — generate.sh / generate.ps1 helpers
|
|
323093
|
-
\`\`\`
|
|
323094
|
-
|
|
323095
|
-
## Remote ComfyUI
|
|
323096
|
-
|
|
323097
|
-
Edit \`config.json\` → set \`backendUrl\` to your remote URL, e.g.:
|
|
323098
|
-
\`http://192.168.1.50:8000\` or \`http://mymachine.local:8000\`
|
|
323099
|
-
|
|
323100
|
-
## Workflow Templates
|
|
323101
|
-
|
|
323102
|
-
\`workflows/txt2img.json\` is a standard KSampler workflow.
|
|
323103
|
-
To use a workflow: \`/image <workflow-name>: <prompt>\`
|
|
323104
|
-
To set a default workflow: \`/image-pipeline workflow <name>\`
|
|
323105
|
-
|
|
323106
|
-
Export workflows from ComfyUI via the Save (API format) button.
|
|
323107
|
-
Workflows with \`{{positive_prompt}}\` / \`{{negative_prompt}}\` placeholders
|
|
323108
|
-
are injected automatically; raw ComfyUI exports work via graph traversal.
|
|
323109
|
-
`;
|
|
323024
|
+
var DEFAULT_CONFIG2, DEFAULT_WORKFLOW, Z_IMAGE_TURBO_WORKFLOW;
|
|
323110
323025
|
var init_imagePipeline = __esm(() => {
|
|
323111
323026
|
DEFAULT_CONFIG2 = {
|
|
323112
323027
|
backendUrl: DEFAULT_COMFYUI_URL,
|
|
@@ -323119,17 +323034,6 @@ var init_imagePipeline = __esm(() => {
|
|
|
323119
323034
|
outputDir: ".localclawd/image-pipeline/generated",
|
|
323120
323035
|
defaultWorkflow: "z_image_turbo"
|
|
323121
323036
|
};
|
|
323122
|
-
EXAMPLE_PROMPT = {
|
|
323123
|
-
name: "example-character",
|
|
323124
|
-
description: "Character portrait template",
|
|
323125
|
-
positive: "a fantasy warrior, detailed armor, dramatic lighting, 4k, highly detailed",
|
|
323126
|
-
negative: "blurry, low quality, text, watermark, deformed",
|
|
323127
|
-
width: 512,
|
|
323128
|
-
height: 512,
|
|
323129
|
-
steps: 20,
|
|
323130
|
-
cfg: 7,
|
|
323131
|
-
sampler: "euler"
|
|
323132
|
-
};
|
|
323133
323037
|
DEFAULT_WORKFLOW = {
|
|
323134
323038
|
"4": {
|
|
323135
323039
|
class_type: "CheckpointLoaderSimple",
|
|
@@ -323222,10 +323126,18 @@ After generating, the image is returned visually in the tool result so you can r
|
|
|
323222
323126
|
|
|
323223
323127
|
REVIEW AND REPROMPT PROTOCOL:
|
|
323224
323128
|
1. After calling GenerateImage, examine the returned image carefully.
|
|
323225
|
-
2. If the image does not match the description, has quality issues (artifacts, wrong style, wrong subject, blurry), or clearly fails
|
|
323129
|
+
2. If the image does not match the description, has quality issues (artifacts, wrong style, wrong subject, blurry), or clearly fails — call GenerateImage again.
|
|
323226
323130
|
3. Refine: add missing details, fix style keywords, adjust composition language. Do not simply repeat the same prompt.
|
|
323227
323131
|
4. You may iterate up to 3 times total. Stop as soon as a result is satisfactory.
|
|
323228
|
-
5. Show the user the final saved path and a brief assessment of what changed
|
|
323132
|
+
5. Show the user the final saved path and a brief assessment of what changed.
|
|
323133
|
+
|
|
323134
|
+
FIXING ARTIFACTS (see /image-tips for full guide):
|
|
323135
|
+
- Corner / edge artifacts → wrong cfg for model type. Flow models (z_image_turbo, AuraFlow, Lumina2): cfg MUST be 1.0. Retry with cfg=1.
|
|
323136
|
+
- Ring or halo artefacts → steps too high. Try steps=4 for turbo workflows.
|
|
323137
|
+
- Blurry result → steps too low, or wrong sampler. Increase steps by +4.
|
|
323138
|
+
- Washed-out / grey → VAE mismatch. Try a different workflow.
|
|
323139
|
+
- Size-related artefacts → use multiples of 64. Flow models need 1024×1024.
|
|
323140
|
+
Pass overrides via the tool parameters: steps, cfg, width, height, model.
|
|
323229
323141
|
|
|
323230
323142
|
Use this tool when the user asks you to generate, create, or render an image.`;
|
|
323231
323143
|
|
|
@@ -323259,8 +323171,7 @@ var init_UI20 = __esm(() => {
|
|
|
323259
323171
|
|
|
323260
323172
|
// src/tools/GenerateImageTool/GenerateImageTool.ts
|
|
323261
323173
|
import { z as z62 } from "zod/v4";
|
|
323262
|
-
import {
|
|
323263
|
-
import { access as access6, mkdir as mkdir20, readFile as readFile27, writeFile as writeFile20 } from "fs/promises";
|
|
323174
|
+
import { mkdir as mkdir20, readFile as readFile27, writeFile as writeFile20 } from "fs/promises";
|
|
323264
323175
|
import { join as join80 } from "path";
|
|
323265
323176
|
function slugify(text, maxLen = 40) {
|
|
323266
323177
|
return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, maxLen);
|
|
@@ -323424,12 +323335,10 @@ var init_GenerateImageTool = __esm(() => {
|
|
|
323424
323335
|
rawBytes = Buffer.from(await res.arrayBuffer());
|
|
323425
323336
|
}
|
|
323426
323337
|
} catch {}
|
|
323427
|
-
const
|
|
323428
|
-
const useProjectDir = await access6(projectGenDir).then(() => true).catch(() => false);
|
|
323429
|
-
const outputDir = useProjectDir ? projectGenDir : join80(homedir23(), "generatedimages");
|
|
323338
|
+
const outputDir = join80(getCwd(), ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
|
|
323430
323339
|
await mkdir20(outputDir, { recursive: true });
|
|
323431
323340
|
const outName = `${timestamp()}_${slugify(input.prompt)}.png`;
|
|
323432
|
-
const savedPath = join80(outputDir, outName);
|
|
323341
|
+
const savedPath = join80(outputDir, outName).replace(/\\/g, "/");
|
|
323433
323342
|
if (rawBytes) {
|
|
323434
323343
|
await writeFile20(savedPath, rawBytes);
|
|
323435
323344
|
}
|
|
@@ -331926,7 +331835,7 @@ function getAnthropicEnvMetadata() {
|
|
|
331926
331835
|
function getBuildAgeMinutes() {
|
|
331927
331836
|
if (false)
|
|
331928
331837
|
;
|
|
331929
|
-
const buildTime = new Date("2026-05-
|
|
331838
|
+
const buildTime = new Date("2026-05-07T19:50:53.354Z").getTime();
|
|
331930
331839
|
if (isNaN(buildTime))
|
|
331931
331840
|
return;
|
|
331932
331841
|
return Math.floor((Date.now() - buildTime) / 60000);
|
|
@@ -342786,7 +342695,7 @@ var init_FileReadTool = __esm(() => {
|
|
|
342786
342695
|
}
|
|
342787
342696
|
const similarFilename = findSimilarFile(fullFilePath);
|
|
342788
342697
|
const cwdSuggestion = await suggestPathUnderCwd(fullFilePath);
|
|
342789
|
-
let message = `File does not exist. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
|
|
342698
|
+
let message = `File does not exist. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
|
|
342790
342699
|
if (cwdSuggestion) {
|
|
342791
342700
|
message += ` Did you mean ${cwdSuggestion}?`;
|
|
342792
342701
|
} else if (similarFilename) {
|
|
@@ -350961,7 +350870,9 @@ Focus text output on:
|
|
|
350961
350870
|
- High-level status updates at natural milestones
|
|
350962
350871
|
- Errors or blockers that change the plan
|
|
350963
350872
|
|
|
350964
|
-
If you can say it in one sentence, don't use three. Prefer short, direct sentences over long explanations. This does not apply to code or tool calls
|
|
350873
|
+
If you can say it in one sentence, don't use three. Prefer short, direct sentences over long explanations. This does not apply to code or tool calls.
|
|
350874
|
+
|
|
350875
|
+
End every response with a SUMMARY: line — one sentence covering what was accomplished or answered this turn. Example: "SUMMARY: Fixed the null-check in auth.ts and confirmed the build passes."`;
|
|
350965
350876
|
}
|
|
350966
350877
|
function getSimpleToneAndStyleSection() {
|
|
350967
350878
|
const items = [
|
|
@@ -350979,7 +350890,7 @@ async function getSystemPrompt(tools, model, additionalWorkingDirectories, mcpCl
|
|
|
350979
350890
|
return [
|
|
350980
350891
|
`You are localclawd, a local-first coding CLI running against user-controlled models.
|
|
350981
350892
|
|
|
350982
|
-
CWD: ${getCwd()}
|
|
350893
|
+
CWD: ${getCwd().replace(/\\/g, "/")}
|
|
350983
350894
|
Date: ${getSessionStartDate()}`
|
|
350984
350895
|
];
|
|
350985
350896
|
}
|
|
@@ -351057,7 +350968,7 @@ async function computeEnvInfo(modelId, additionalWorkingDirectories) {
|
|
|
351057
350968
|
Assistant knowledge cutoff is ${cutoff}.` : "";
|
|
351058
350969
|
return `Here is useful information about the environment you are running in:
|
|
351059
350970
|
<env>
|
|
351060
|
-
Working directory: ${getCwd()}
|
|
350971
|
+
Working directory: ${getCwd().replace(/\\/g, "/")}
|
|
351061
350972
|
Is directory a git repo: ${isGit ? "Yes" : "No"}
|
|
351062
350973
|
${additionalDirsInfo}Platform: ${env3.platform}
|
|
351063
350974
|
${getShellInfoLine()}
|
|
@@ -351074,7 +350985,7 @@ async function computeSimpleEnvInfo(modelId, additionalWorkingDirectories) {
|
|
|
351074
350985
|
}
|
|
351075
350986
|
const cutoff = getKnowledgeCutoff(modelId);
|
|
351076
350987
|
const knowledgeCutoffMessage = cutoff ? `Assistant knowledge cutoff is ${cutoff}.` : null;
|
|
351077
|
-
const cwd2 = getCwd();
|
|
350988
|
+
const cwd2 = getCwd().replace(/\\/g, "/");
|
|
351078
350989
|
const isWorktree = getCurrentWorktreeSession() !== null;
|
|
351079
350990
|
const envItems = [
|
|
351080
350991
|
`Primary working directory: ${cwd2}`,
|
|
@@ -356012,7 +355923,7 @@ var init_projectOnboardingState = __esm(() => {
|
|
|
356012
355923
|
|
|
356013
355924
|
// src/utils/appleTerminalBackup.ts
|
|
356014
355925
|
import { stat as stat35 } from "fs/promises";
|
|
356015
|
-
import { homedir as
|
|
355926
|
+
import { homedir as homedir23 } from "os";
|
|
356016
355927
|
import { join as join101 } from "path";
|
|
356017
355928
|
function markTerminalSetupInProgress(backupPath) {
|
|
356018
355929
|
saveGlobalConfig((current) => ({
|
|
@@ -356035,7 +355946,7 @@ function getTerminalRecoveryInfo() {
|
|
|
356035
355946
|
};
|
|
356036
355947
|
}
|
|
356037
355948
|
function getTerminalPlistPath() {
|
|
356038
|
-
return join101(
|
|
355949
|
+
return join101(homedir23(), "Library", "Preferences", "com.apple.Terminal.plist");
|
|
356039
355950
|
}
|
|
356040
355951
|
async function backupTerminalPreferences() {
|
|
356041
355952
|
const terminalPlistPath = getTerminalPlistPath();
|
|
@@ -356106,11 +356017,11 @@ var init_appleTerminalBackup = __esm(() => {
|
|
|
356106
356017
|
});
|
|
356107
356018
|
|
|
356108
356019
|
// src/utils/completionCache.ts
|
|
356109
|
-
import { homedir as
|
|
356020
|
+
import { homedir as homedir24 } from "os";
|
|
356110
356021
|
import { dirname as dirname43, join as join102 } from "path";
|
|
356111
356022
|
function detectShell() {
|
|
356112
356023
|
const shell = process.env.SHELL || "";
|
|
356113
|
-
const home =
|
|
356024
|
+
const home = homedir24();
|
|
356114
356025
|
const claudeDir = join102(home, ".claude");
|
|
356115
356026
|
if (shell.endsWith("/zsh") || shell.endsWith("/zsh.exe")) {
|
|
356116
356027
|
const cacheFile = join102(claudeDir, "completion.zsh");
|
|
@@ -356186,7 +356097,7 @@ __export(exports_terminalSetup, {
|
|
|
356186
356097
|
});
|
|
356187
356098
|
import { randomBytes as randomBytes15 } from "crypto";
|
|
356188
356099
|
import { copyFile as copyFile8, mkdir as mkdir30, readFile as readFile39, writeFile as writeFile31 } from "fs/promises";
|
|
356189
|
-
import { homedir as
|
|
356100
|
+
import { homedir as homedir25, platform as platform2 } from "os";
|
|
356190
356101
|
import { dirname as dirname44, join as join103 } from "path";
|
|
356191
356102
|
import { pathToFileURL as pathToFileURL7 } from "url";
|
|
356192
356103
|
function isVSCodeRemoteSSH() {
|
|
@@ -356322,7 +356233,7 @@ async function installBindingsForVSCodeTerminal(editor = "VSCode", theme) {
|
|
|
356322
356233
|
]`)}${EOL5}`;
|
|
356323
356234
|
}
|
|
356324
356235
|
const editorDir = editor === "VSCode" ? "Code" : editor;
|
|
356325
|
-
const userDirPath = join103(
|
|
356236
|
+
const userDirPath = join103(homedir25(), platform2() === "win32" ? join103("AppData", "Roaming", editorDir, "User") : platform2() === "darwin" ? join103("Library", "Application Support", editorDir, "User") : join103(".config", editorDir, "User"));
|
|
356326
356237
|
const keybindingsPath = join103(userDirPath, "keybindings.json");
|
|
356327
356238
|
try {
|
|
356328
356239
|
await mkdir30(userDirPath, {
|
|
@@ -356466,7 +356377,7 @@ chars = "\\u001B\\r"`;
|
|
|
356466
356377
|
if (xdgConfigHome) {
|
|
356467
356378
|
configPaths.push(join103(xdgConfigHome, "alacritty", "alacritty.toml"));
|
|
356468
356379
|
} else {
|
|
356469
|
-
configPaths.push(join103(
|
|
356380
|
+
configPaths.push(join103(homedir25(), ".config", "alacritty", "alacritty.toml"));
|
|
356470
356381
|
}
|
|
356471
356382
|
if (platform2() === "win32") {
|
|
356472
356383
|
const appData = process.env.APPDATA;
|
|
@@ -356532,7 +356443,7 @@ chars = "\\u001B\\r"`;
|
|
|
356532
356443
|
}
|
|
356533
356444
|
}
|
|
356534
356445
|
async function installBindingsForZed(theme) {
|
|
356535
|
-
const zedDir = join103(
|
|
356446
|
+
const zedDir = join103(homedir25(), ".config", "zed");
|
|
356536
356447
|
const keymapPath = join103(zedDir, "keymap.json");
|
|
356537
356448
|
try {
|
|
356538
356449
|
await mkdir30(zedDir, {
|
|
@@ -360756,7 +360667,7 @@ function Feedback({
|
|
|
360756
360667
|
platform: env3.platform,
|
|
360757
360668
|
gitRepo: envInfo.isGit,
|
|
360758
360669
|
terminal: env3.terminal,
|
|
360759
|
-
version: "1.9.
|
|
360670
|
+
version: "1.9.8",
|
|
360760
360671
|
transcript: normalizeMessagesForAPI(messages),
|
|
360761
360672
|
errors: sanitizedErrors,
|
|
360762
360673
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -360948,7 +360859,7 @@ function Feedback({
|
|
|
360948
360859
|
", ",
|
|
360949
360860
|
env3.terminal,
|
|
360950
360861
|
", v",
|
|
360951
|
-
"1.9.
|
|
360862
|
+
"1.9.8"
|
|
360952
360863
|
]
|
|
360953
360864
|
}, undefined, true, undefined, this)
|
|
360954
360865
|
]
|
|
@@ -361054,7 +360965,7 @@ ${sanitizedDescription}
|
|
|
361054
360965
|
` + `**Environment Info**
|
|
361055
360966
|
` + `- Platform: ${env3.platform}
|
|
361056
360967
|
` + `- Terminal: ${env3.terminal}
|
|
361057
|
-
` + `- Version: ${"1.9.
|
|
360968
|
+
` + `- Version: ${"1.9.8"}
|
|
361058
360969
|
` + `- Feedback ID: ${feedbackId}
|
|
361059
360970
|
` + `
|
|
361060
360971
|
**Errors**
|
|
@@ -363682,7 +363593,7 @@ function buildPrimarySection() {
|
|
|
363682
363593
|
}, undefined, false, undefined, this);
|
|
363683
363594
|
return [{
|
|
363684
363595
|
label: "Version",
|
|
363685
|
-
value: "1.9.
|
|
363596
|
+
value: "1.9.8"
|
|
363686
363597
|
}, {
|
|
363687
363598
|
label: "Session name",
|
|
363688
363599
|
value: nameValue
|
|
@@ -368363,7 +368274,7 @@ function Config({
|
|
|
368363
368274
|
}
|
|
368364
368275
|
}, undefined, false, undefined, this)
|
|
368365
368276
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
|
|
368366
|
-
currentVersion: "1.9.
|
|
368277
|
+
currentVersion: "1.9.8",
|
|
368367
368278
|
onChoice: (choice) => {
|
|
368368
368279
|
setShowSubmenu(null);
|
|
368369
368280
|
setTabsHidden(false);
|
|
@@ -368375,7 +368286,7 @@ function Config({
|
|
|
368375
368286
|
autoUpdatesChannel: "stable"
|
|
368376
368287
|
};
|
|
368377
368288
|
if (choice === "stay") {
|
|
368378
|
-
newSettings.minimumVersion = "1.9.
|
|
368289
|
+
newSettings.minimumVersion = "1.9.8";
|
|
368379
368290
|
}
|
|
368380
368291
|
updateSettingsForSource("userSettings", newSettings);
|
|
368381
368292
|
setSettingsData((prev_27) => ({
|
|
@@ -374708,8 +374619,7 @@ var exports_images = {};
|
|
|
374708
374619
|
__export(exports_images, {
|
|
374709
374620
|
call: () => call19
|
|
374710
374621
|
});
|
|
374711
|
-
import {
|
|
374712
|
-
import { access as access7, mkdir as mkdir34, writeFile as writeFile36 } from "fs/promises";
|
|
374622
|
+
import { mkdir as mkdir34, writeFile as writeFile36 } from "fs/promises";
|
|
374713
374623
|
import { join as join112 } from "path";
|
|
374714
374624
|
function timestamp2() {
|
|
374715
374625
|
const d = new Date;
|
|
@@ -374719,6 +374629,44 @@ function timestamp2() {
|
|
|
374719
374629
|
function slugify2(text, maxLen = 40) {
|
|
374720
374630
|
return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, maxLen);
|
|
374721
374631
|
}
|
|
374632
|
+
function parseFlags(text) {
|
|
374633
|
+
let s = text;
|
|
374634
|
+
const result = { cleaned: "" };
|
|
374635
|
+
const extract = (flag, fn) => {
|
|
374636
|
+
s = s.replace(new RegExp(`--${flag}\\s+(\\S+)`, "i"), (_2, v2) => {
|
|
374637
|
+
fn(v2);
|
|
374638
|
+
return "";
|
|
374639
|
+
});
|
|
374640
|
+
};
|
|
374641
|
+
extract("steps", (v2) => {
|
|
374642
|
+
result.steps = parseInt(v2, 10) || undefined;
|
|
374643
|
+
});
|
|
374644
|
+
extract("cfg", (v2) => {
|
|
374645
|
+
result.cfg = parseFloat(v2) || undefined;
|
|
374646
|
+
});
|
|
374647
|
+
extract("width", (v2) => {
|
|
374648
|
+
result.width = parseInt(v2, 10) || undefined;
|
|
374649
|
+
});
|
|
374650
|
+
extract("height", (v2) => {
|
|
374651
|
+
result.height = parseInt(v2, 10) || undefined;
|
|
374652
|
+
});
|
|
374653
|
+
extract("seed", (v2) => {
|
|
374654
|
+
result.seed = parseInt(v2, 10);
|
|
374655
|
+
});
|
|
374656
|
+
extract("model", (v2) => {
|
|
374657
|
+
result.model = v2;
|
|
374658
|
+
});
|
|
374659
|
+
s = s.replace(/--negative\s+"([^"]+)"/i, (_2, v2) => {
|
|
374660
|
+
result.negative = v2;
|
|
374661
|
+
return "";
|
|
374662
|
+
});
|
|
374663
|
+
s = s.replace(/--negative\s+'([^']+)'/i, (_2, v2) => {
|
|
374664
|
+
result.negative = v2;
|
|
374665
|
+
return "";
|
|
374666
|
+
});
|
|
374667
|
+
result.cleaned = s.replace(/\s+/g, " ").trim();
|
|
374668
|
+
return result;
|
|
374669
|
+
}
|
|
374722
374670
|
var call19 = async (onDone, _context, args) => {
|
|
374723
374671
|
const raw = args?.trim() ?? "";
|
|
374724
374672
|
const { getOriginalCwd: getOriginalCwd2 } = await Promise.resolve().then(() => (init_state(), exports_state));
|
|
@@ -374730,12 +374678,21 @@ var call19 = async (onDone, _context, args) => {
|
|
|
374730
374678
|
const lines2 = [
|
|
374731
374679
|
"◆ /image — Generate an image via ComfyUI",
|
|
374732
374680
|
"",
|
|
374733
|
-
" Usage: /image <prompt>",
|
|
374734
|
-
" Workflow: /image <name>: <prompt>",
|
|
374681
|
+
" Usage: /image [flags] <prompt>",
|
|
374682
|
+
" Workflow: /image <name>: [flags] <prompt>",
|
|
374683
|
+
"",
|
|
374684
|
+
" Flags (override per-request):",
|
|
374685
|
+
" --steps N — sampling steps",
|
|
374686
|
+
" --cfg N — guidance scale",
|
|
374687
|
+
" --width N — image width in pixels",
|
|
374688
|
+
" --height N — image height in pixels",
|
|
374689
|
+
" --seed N — fixed seed for reproducibility",
|
|
374690
|
+
" --model NAME — checkpoint filename",
|
|
374735
374691
|
"",
|
|
374736
374692
|
" Examples:",
|
|
374737
374693
|
" /image a misty forest at dawn, cinematic lighting",
|
|
374738
|
-
" /image
|
|
374694
|
+
" /image --width 1024 --height 1024 a detailed portrait",
|
|
374695
|
+
" /image txt2img: --steps 30 an elderly scholar by candlelight",
|
|
374739
374696
|
"",
|
|
374740
374697
|
` Default workflow: ${defaultWf}`
|
|
374741
374698
|
];
|
|
@@ -374748,9 +374705,10 @@ var call19 = async (onDone, _context, args) => {
|
|
|
374748
374705
|
}
|
|
374749
374706
|
lines2.push("");
|
|
374750
374707
|
lines2.push(" ComfyUI must be running. To configure:");
|
|
374751
|
-
lines2.push(" /image-pipeline setup
|
|
374752
|
-
lines2.push(" /image-pipeline config <url>
|
|
374753
|
-
lines2.push(" /image-pipeline workflow <n>
|
|
374708
|
+
lines2.push(" /image-pipeline setup — scaffold project folders");
|
|
374709
|
+
lines2.push(" /image-pipeline config <url> — set backend URL");
|
|
374710
|
+
lines2.push(" /image-pipeline workflow <n> — set default workflow");
|
|
374711
|
+
lines2.push(" /image-pipeline defaults [...] — set default parameters");
|
|
374754
374712
|
onDone(lines2.join(`
|
|
374755
374713
|
`), { display: "system" });
|
|
374756
374714
|
return null;
|
|
@@ -374765,10 +374723,12 @@ var call19 = async (onDone, _context, args) => {
|
|
|
374765
374723
|
promptText = raw.slice(colonIdx + 1).trim();
|
|
374766
374724
|
}
|
|
374767
374725
|
}
|
|
374726
|
+
const flags = parseFlags(promptText);
|
|
374727
|
+
promptText = flags.cleaned;
|
|
374768
374728
|
if (!promptText) {
|
|
374769
374729
|
onDone(`◆ /image — Prompt required
|
|
374770
374730
|
|
|
374771
|
-
Usage: /image
|
|
374731
|
+
Usage: /image [flags] <prompt>`, { display: "system" });
|
|
374772
374732
|
return null;
|
|
374773
374733
|
}
|
|
374774
374734
|
const config2 = await loadConfig(projectRoot);
|
|
@@ -374804,16 +374764,23 @@ var call19 = async (onDone, _context, args) => {
|
|
|
374804
374764
|
const usingBuiltIn = !workflow;
|
|
374805
374765
|
if (!workflow)
|
|
374806
374766
|
workflow = DEFAULT_WORKFLOW;
|
|
374807
|
-
const seed = Math.floor(Math.random() * 4294967296);
|
|
374808
|
-
const negative = "blurry, low quality, watermark, deformed";
|
|
374767
|
+
const seed = flags.seed ?? Math.floor(Math.random() * 4294967296);
|
|
374768
|
+
const negative = flags.negative ?? "blurry, low quality, watermark, deformed";
|
|
374809
374769
|
const injectParams = usingBuiltIn ? {
|
|
374810
374770
|
seed,
|
|
374811
|
-
model: config2?.defaultModel || "v1-5-pruned-emaonly.safetensors",
|
|
374812
|
-
width: config2?.defaultWidth ?? 512,
|
|
374813
|
-
height: config2?.defaultHeight ?? 512,
|
|
374814
|
-
steps: config2?.defaultSteps ?? 20,
|
|
374815
|
-
cfg: config2?.defaultCfg ?? 7
|
|
374816
|
-
} : {
|
|
374771
|
+
model: flags.model ?? (config2?.defaultModel || "v1-5-pruned-emaonly.safetensors"),
|
|
374772
|
+
width: flags.width ?? config2?.defaultWidth ?? 512,
|
|
374773
|
+
height: flags.height ?? config2?.defaultHeight ?? 512,
|
|
374774
|
+
steps: flags.steps ?? config2?.defaultSteps ?? 20,
|
|
374775
|
+
cfg: flags.cfg ?? config2?.defaultCfg ?? 7
|
|
374776
|
+
} : {
|
|
374777
|
+
seed,
|
|
374778
|
+
...flags.model ? { model: flags.model } : {},
|
|
374779
|
+
...flags.width ? { width: flags.width } : {},
|
|
374780
|
+
...flags.height ? { height: flags.height } : {},
|
|
374781
|
+
...flags.steps ? { steps: flags.steps } : {},
|
|
374782
|
+
...flags.cfg ? { cfg: flags.cfg } : {}
|
|
374783
|
+
};
|
|
374817
374784
|
const finalWorkflow = injectPrompt(workflow, promptText, negative, injectParams);
|
|
374818
374785
|
let queued;
|
|
374819
374786
|
try {
|
|
@@ -374836,9 +374803,7 @@ var call19 = async (onDone, _context, args) => {
|
|
|
374836
374803
|
`), { display: "system" });
|
|
374837
374804
|
return null;
|
|
374838
374805
|
}
|
|
374839
|
-
const
|
|
374840
|
-
const useProjectDir = await access7(projectGenDir).then(() => true).catch(() => false);
|
|
374841
|
-
const outputDir = useProjectDir ? projectGenDir : join112(homedir27(), "generatedimages");
|
|
374806
|
+
const outputDir = join112(projectRoot, ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
|
|
374842
374807
|
await mkdir34(outputDir, { recursive: true });
|
|
374843
374808
|
const comfyImages = extractOutputImages(result);
|
|
374844
374809
|
const savedPaths = [];
|
|
@@ -374857,6 +374822,13 @@ var call19 = async (onDone, _context, args) => {
|
|
|
374857
374822
|
} catch {}
|
|
374858
374823
|
}
|
|
374859
374824
|
const usedWorkflow = effectiveWorkflowName ?? "built-in txt2img";
|
|
374825
|
+
const flagOverrides = [
|
|
374826
|
+
flags.steps ? `steps=${flags.steps}` : null,
|
|
374827
|
+
flags.cfg ? `cfg=${flags.cfg}` : null,
|
|
374828
|
+
flags.width ? `width=${flags.width}` : null,
|
|
374829
|
+
flags.height ? `height=${flags.height}` : null,
|
|
374830
|
+
flags.model ? `model=${flags.model}` : null
|
|
374831
|
+
].filter(Boolean).join(" ");
|
|
374860
374832
|
const lines = savedPaths.length > 0 ? [
|
|
374861
374833
|
"◆ /image — Done",
|
|
374862
374834
|
"",
|
|
@@ -374864,7 +374836,8 @@ var call19 = async (onDone, _context, args) => {
|
|
|
374864
374836
|
`)}`,
|
|
374865
374837
|
` Workflow: ${usedWorkflow}`,
|
|
374866
374838
|
` Prompt: ${promptText.length > 80 ? promptText.slice(0, 80) + "…" : promptText}`,
|
|
374867
|
-
` Seed: ${seed}
|
|
374839
|
+
` Seed: ${seed}`,
|
|
374840
|
+
...flagOverrides ? [` Overrides: ${flagOverrides}`] : []
|
|
374868
374841
|
] : [
|
|
374869
374842
|
"◆ /image — Done (download failed)",
|
|
374870
374843
|
"",
|
|
@@ -374931,11 +374904,12 @@ var call20 = async (onDone, _context, args) => {
|
|
|
374931
374904
|
}
|
|
374932
374905
|
lines.push("");
|
|
374933
374906
|
lines.push(" Commands:");
|
|
374934
|
-
lines.push(" /image-pipeline setup
|
|
374935
|
-
lines.push(" /image-pipeline config <url>
|
|
374936
|
-
lines.push(" /image-pipeline workflow <name>
|
|
374937
|
-
lines.push(" /image-pipeline
|
|
374938
|
-
lines.push(" /image-pipeline
|
|
374907
|
+
lines.push(" /image-pipeline setup — create project dirs and workflow templates");
|
|
374908
|
+
lines.push(" /image-pipeline config <url> — set ComfyUI backend URL");
|
|
374909
|
+
lines.push(" /image-pipeline workflow <name> — set default workflow");
|
|
374910
|
+
lines.push(" /image-pipeline defaults [--steps N ...] — show or set default parameters");
|
|
374911
|
+
lines.push(" /image-pipeline list — list local + server workflows");
|
|
374912
|
+
lines.push(" /image-pipeline fetch <name> — download workflow from ComfyUI server");
|
|
374939
374913
|
lines.push("");
|
|
374940
374914
|
lines.push(" To generate images:");
|
|
374941
374915
|
lines.push(" /image <prompt> — generate with default workflow");
|
|
@@ -374949,7 +374923,7 @@ var call20 = async (onDone, _context, args) => {
|
|
|
374949
374923
|
const config2 = await loadConfig(projectRoot);
|
|
374950
374924
|
const backendUrl = config2?.backendUrl ?? DEFAULT_COMFYUI_URL;
|
|
374951
374925
|
const active = await detectComfyUI(backendUrl);
|
|
374952
|
-
const generatedDir = join113(projectRoot, ".localclawd", "image-pipeline", "generated");
|
|
374926
|
+
const generatedDir = join113(projectRoot, ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
|
|
374953
374927
|
const lines = ["◆ Image Pipeline — Setup", ""];
|
|
374954
374928
|
if (active) {
|
|
374955
374929
|
lines.push(` ● ComfyUI active at ${backendUrl}`);
|
|
@@ -375068,7 +375042,7 @@ var call20 = async (onDone, _context, args) => {
|
|
|
375068
375042
|
lines.push(" No local workflows found.");
|
|
375069
375043
|
lines.push(" Run /image-pipeline setup to add bundled templates.");
|
|
375070
375044
|
lines.push(" Or export a workflow from ComfyUI (API Format) and drop it into:");
|
|
375071
|
-
lines.push(` ${join113(projectRoot, ".localclawd", "image-pipeline", "workflows")}`);
|
|
375045
|
+
lines.push(` ${join113(projectRoot, ".localclawd", "image-pipeline", "workflows").replace(/\\/g, "/")}`);
|
|
375072
375046
|
}
|
|
375073
375047
|
onDone(lines.join(`
|
|
375074
375048
|
`), { display: "system" });
|
|
@@ -375156,7 +375130,7 @@ var call20 = async (onDone, _context, args) => {
|
|
|
375156
375130
|
}
|
|
375157
375131
|
const fetchResult = await fetchServerWorkflow(backendUrl, name);
|
|
375158
375132
|
if ("error" in fetchResult) {
|
|
375159
|
-
const wfDir = join113(projectRoot, ".localclawd", "image-pipeline", "workflows", "comfyui");
|
|
375133
|
+
const wfDir = join113(projectRoot, ".localclawd", "image-pipeline", "workflows", "comfyui").replace(/\\/g, "/");
|
|
375160
375134
|
onDone([
|
|
375161
375135
|
`◆ Image Pipeline — Fetch Failed: "${name}"`,
|
|
375162
375136
|
"",
|
|
@@ -375191,6 +375165,80 @@ var call20 = async (onDone, _context, args) => {
|
|
|
375191
375165
|
" Note: if this was saved from the ComfyUI visual editor (not API format),",
|
|
375192
375166
|
" it may not work. Enable Dev Mode in ComfyUI → Save (API Format) instead."
|
|
375193
375167
|
].join(`
|
|
375168
|
+
`), { display: "system" });
|
|
375169
|
+
return null;
|
|
375170
|
+
}
|
|
375171
|
+
if (subcmd === "defaults") {
|
|
375172
|
+
await scaffoldProject(projectRoot);
|
|
375173
|
+
const config2 = await loadConfig(projectRoot) ?? {
|
|
375174
|
+
backendUrl: DEFAULT_COMFYUI_URL,
|
|
375175
|
+
defaultWidth: 512,
|
|
375176
|
+
defaultHeight: 512,
|
|
375177
|
+
defaultSteps: 20,
|
|
375178
|
+
defaultCfg: 7,
|
|
375179
|
+
defaultSampler: "euler",
|
|
375180
|
+
defaultModel: "",
|
|
375181
|
+
outputDir: ".localclawd/image-pipeline/generated"
|
|
375182
|
+
};
|
|
375183
|
+
if (!restText) {
|
|
375184
|
+
onDone([
|
|
375185
|
+
"◆ Image Pipeline — Default Parameters",
|
|
375186
|
+
"",
|
|
375187
|
+
` Steps: ${config2.defaultSteps ?? 20}`,
|
|
375188
|
+
` CFG: ${config2.defaultCfg ?? 7}`,
|
|
375189
|
+
` Width: ${config2.defaultWidth ?? 512}`,
|
|
375190
|
+
` Height: ${config2.defaultHeight ?? 512}`,
|
|
375191
|
+
` Model: ${config2.defaultModel || "(unset — uses workflow default)"}`,
|
|
375192
|
+
"",
|
|
375193
|
+
" Usage: /image-pipeline defaults --steps 20 --cfg 7 --width 512 --height 512",
|
|
375194
|
+
' Reset: /image-pipeline defaults --steps 20 --cfg 7 --width 512 --height 512 --model ""'
|
|
375195
|
+
].join(`
|
|
375196
|
+
`), { display: "system" });
|
|
375197
|
+
return null;
|
|
375198
|
+
}
|
|
375199
|
+
let s = restText;
|
|
375200
|
+
const extract = (flag, fn) => {
|
|
375201
|
+
s = s.replace(new RegExp(`--${flag}\\s+(\\S+)`, "i"), (_2, v2) => {
|
|
375202
|
+
fn(v2);
|
|
375203
|
+
return "";
|
|
375204
|
+
});
|
|
375205
|
+
};
|
|
375206
|
+
extract("steps", (v2) => {
|
|
375207
|
+
const n = parseInt(v2, 10);
|
|
375208
|
+
if (n > 0)
|
|
375209
|
+
config2.defaultSteps = n;
|
|
375210
|
+
});
|
|
375211
|
+
extract("cfg", (v2) => {
|
|
375212
|
+
const n = parseFloat(v2);
|
|
375213
|
+
if (n > 0)
|
|
375214
|
+
config2.defaultCfg = n;
|
|
375215
|
+
});
|
|
375216
|
+
extract("width", (v2) => {
|
|
375217
|
+
const n = parseInt(v2, 10);
|
|
375218
|
+
if (n >= 64)
|
|
375219
|
+
config2.defaultWidth = n;
|
|
375220
|
+
});
|
|
375221
|
+
extract("height", (v2) => {
|
|
375222
|
+
const n = parseInt(v2, 10);
|
|
375223
|
+
if (n >= 64)
|
|
375224
|
+
config2.defaultHeight = n;
|
|
375225
|
+
});
|
|
375226
|
+
extract("model", (v2) => {
|
|
375227
|
+
config2.defaultModel = v2 === '""' || v2 === "''" ? "" : v2;
|
|
375228
|
+
});
|
|
375229
|
+
await saveConfig2(projectRoot, config2);
|
|
375230
|
+
onDone([
|
|
375231
|
+
"◆ Image Pipeline — Defaults Saved",
|
|
375232
|
+
"",
|
|
375233
|
+
` Steps: ${config2.defaultSteps ?? 20}`,
|
|
375234
|
+
` CFG: ${config2.defaultCfg ?? 7}`,
|
|
375235
|
+
` Width: ${config2.defaultWidth ?? 512}`,
|
|
375236
|
+
` Height: ${config2.defaultHeight ?? 512}`,
|
|
375237
|
+
` Model: ${config2.defaultModel || "(unset)"}`,
|
|
375238
|
+
"",
|
|
375239
|
+
" These apply to /image <prompt> (built-in workflow) and per-request overrides.",
|
|
375240
|
+
" Named workflows use their own settings unless you pass --flags."
|
|
375241
|
+
].join(`
|
|
375194
375242
|
`), { display: "system" });
|
|
375195
375243
|
return null;
|
|
375196
375244
|
}
|
|
@@ -375198,11 +375246,12 @@ var call20 = async (onDone, _context, args) => {
|
|
|
375198
375246
|
`◆ Image Pipeline — Unknown subcommand: "${subcmd}"`,
|
|
375199
375247
|
"",
|
|
375200
375248
|
" Commands:",
|
|
375201
|
-
" /image-pipeline setup
|
|
375202
|
-
" /image-pipeline config <url>
|
|
375203
|
-
" /image-pipeline workflow <name>
|
|
375204
|
-
" /image-pipeline
|
|
375205
|
-
" /image-pipeline
|
|
375249
|
+
" /image-pipeline setup — scaffold project",
|
|
375250
|
+
" /image-pipeline config <url> — set ComfyUI backend URL",
|
|
375251
|
+
" /image-pipeline workflow <name> — set default workflow",
|
|
375252
|
+
" /image-pipeline defaults [--steps N ...] — show or set default parameters",
|
|
375253
|
+
" /image-pipeline list — list local + server workflows",
|
|
375254
|
+
" /image-pipeline fetch <name> — download workflow from ComfyUI server"
|
|
375206
375255
|
].join(`
|
|
375207
375256
|
`), { display: "system" });
|
|
375208
375257
|
return null;
|
|
@@ -375225,6 +375274,112 @@ var init_image_pipeline2 = __esm(() => {
|
|
|
375225
375274
|
image_pipeline_default = imagePipeline;
|
|
375226
375275
|
});
|
|
375227
375276
|
|
|
375277
|
+
// src/commands/image-tips/image-tips.ts
|
|
375278
|
+
var exports_image_tips = {};
|
|
375279
|
+
__export(exports_image_tips, {
|
|
375280
|
+
call: () => call21
|
|
375281
|
+
});
|
|
375282
|
+
var call21 = async (_args, _context) => {
|
|
375283
|
+
const text = `◆ Image Tips — Fixing Artifacts & Improving ComfyUI Output
|
|
375284
|
+
|
|
375285
|
+
━━━ CORNER / EDGE ARTIFACTS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
375286
|
+
Most common causes (check in order):
|
|
375287
|
+
|
|
375288
|
+
1. WRONG CFG SCALE FOR MODEL TYPE ← most common cause of corner artifacts
|
|
375289
|
+
· Flow models (AuraFlow, Lumina2, SD3, z_image_turbo): cfg MUST be ≤ 1.0
|
|
375290
|
+
Values above 1 cause severe edge/corner corruption and colour banding
|
|
375291
|
+
· SD1.5 / SDXL: cfg 6–8 is correct; < 4 causes blur, > 12 causes artifacts
|
|
375292
|
+
|
|
375293
|
+
2. STEPS TOO HIGH FOR SAMPLER
|
|
375294
|
+
· res_multistep with steps > 12 produces ring/halo artifacts
|
|
375295
|
+
· For turbo models: try steps=4 first, then 6 or 8
|
|
375296
|
+
· For SD1.5 euler: 20–30 steps is the sweet spot
|
|
375297
|
+
|
|
375298
|
+
3. SIZE NOT DIVISIBLE BY 64
|
|
375299
|
+
· Width AND height must both be multiples of 64
|
|
375300
|
+
· AuraFlow/Lumina2: use exactly 1024×1024 — smaller sizes cause edge artefacts
|
|
375301
|
+
· SD1.5: use 512×512 or 768×512 etc.
|
|
375302
|
+
|
|
375303
|
+
4. VAE MISMATCH
|
|
375304
|
+
· Flow models need their own VAE; SD1.5's vae-ft-mse will corrupt them
|
|
375305
|
+
· Symptoms: washed-out colours, edge fringe, grey corners
|
|
375306
|
+
|
|
375307
|
+
5. WRONG SAMPLER FOR MODEL
|
|
375308
|
+
· AuraFlow / Lumina2: res_multistep, euler, dpm_pp_2m scheduler=simple
|
|
375309
|
+
· SD1.5: euler, dpm_pp_2m_karras scheduler=karras or normal
|
|
375310
|
+
|
|
375311
|
+
━━━ PARAMETERS BY MODEL TYPE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
375312
|
+
|
|
375313
|
+
z_image_turbo / AuraFlow / Lumina2:
|
|
375314
|
+
steps=8 cfg=1 sampler=res_multistep scheduler=simple
|
|
375315
|
+
size=1024×1024 (required — smaller causes artefacts with these models)
|
|
375316
|
+
negative prompt: leave empty (workflow uses ConditioningZeroOut)
|
|
375317
|
+
Override: /image --steps 4 --cfg 1 <prompt>
|
|
375318
|
+
|
|
375319
|
+
SD1.5 (v1-5-pruned, DreamShaper, RealisticVision, etc.):
|
|
375320
|
+
steps=20 cfg=7 sampler=euler scheduler=normal
|
|
375321
|
+
size=512×512 or 768×512
|
|
375322
|
+
Override: /image-pipeline defaults --steps 20 --cfg 7 --width 512 --height 512
|
|
375323
|
+
|
|
375324
|
+
SDXL (sdxl_base, juggernaut-xl, etc.):
|
|
375325
|
+
steps=25 cfg=7 sampler=dpm_pp_2m scheduler=karras
|
|
375326
|
+
size=1024×1024
|
|
375327
|
+
|
|
375328
|
+
━━━ QUICK FIXES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
375329
|
+
|
|
375330
|
+
Fuzzy or dark corners → increase size to 1024×1024 (flow models need it)
|
|
375331
|
+
Weird colour patterns → lower cfg (cfg=1 for flow, cfg=7 for SD1.5)
|
|
375332
|
+
Ring or halo artefacts → reduce steps (try steps=4)
|
|
375333
|
+
Image is too blurry → increase steps, or switch sampler to dpm_pp_2m
|
|
375334
|
+
Washed-out / grey → wrong VAE precision; load fp32 VAE explicitly
|
|
375335
|
+
Black bars / tiling seams → disable tiled VAE decode if enabled in workflow
|
|
375336
|
+
|
|
375337
|
+
━━━ PROMPT TIPS FOR QUALITY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
375338
|
+
|
|
375339
|
+
Quality boosters (add at start of positive prompt):
|
|
375340
|
+
"masterpiece, best quality, highly detailed, sharp focus, 4k"
|
|
375341
|
+
|
|
375342
|
+
For portraits:
|
|
375343
|
+
"close-up portrait, facing camera, professional lighting, cinematic"
|
|
375344
|
+
Negative: "blurry, bad anatomy, extra limbs, deformed, watermark"
|
|
375345
|
+
|
|
375346
|
+
For landscapes / scenes:
|
|
375347
|
+
"cinematic lighting, golden hour, volumetric fog, highly detailed"
|
|
375348
|
+
|
|
375349
|
+
For art styles:
|
|
375350
|
+
"oil painting in the style of [artist], detailed brushwork, rich colours"
|
|
375351
|
+
|
|
375352
|
+
━━━ ITERATING WITH THE GenerateImage TOOL ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
375353
|
+
The tool returns the image inline for review. If quality is poor:
|
|
375354
|
+
1. Try adjusting cfg first — this is the most common fix
|
|
375355
|
+
2. Then adjust steps (±4 from current)
|
|
375356
|
+
3. Then try a different sampler
|
|
375357
|
+
4. Up to 3 iterations are recommended before changing workflow
|
|
375358
|
+
|
|
375359
|
+
Example fix sequence:
|
|
375360
|
+
/image --cfg 1 --steps 4 <same prompt> ← try lower settings first
|
|
375361
|
+
/image --cfg 1 --steps 8 <same prompt> ← step up if too blurry
|
|
375362
|
+
/image --width 1024 --height 1024 <prompt> ← fix size if edge artifacts persist
|
|
375363
|
+
`;
|
|
375364
|
+
return { type: "text", text };
|
|
375365
|
+
};
|
|
375366
|
+
|
|
375367
|
+
// src/commands/image-tips/index.ts
|
|
375368
|
+
var imageTips, image_tips_default;
|
|
375369
|
+
var init_image_tips = __esm(() => {
|
|
375370
|
+
imageTips = {
|
|
375371
|
+
type: "local",
|
|
375372
|
+
name: "image-tips",
|
|
375373
|
+
aliases: ["image-fix", "image-quality"],
|
|
375374
|
+
description: "Guide for fixing image artifacts and improving ComfyUI output quality",
|
|
375375
|
+
isEnabled: () => true,
|
|
375376
|
+
supportsNonInteractive: true,
|
|
375377
|
+
argumentHint: "",
|
|
375378
|
+
load: () => Promise.resolve().then(() => exports_image_tips)
|
|
375379
|
+
};
|
|
375380
|
+
image_tips_default = imageTips;
|
|
375381
|
+
});
|
|
375382
|
+
|
|
375228
375383
|
// src/services/telegram/telegramSignals.ts
|
|
375229
375384
|
var _stopRequested = false, globalStopSignal;
|
|
375230
375385
|
var init_telegramSignals = __esm(() => {
|
|
@@ -375449,7 +375604,7 @@ function getProjectContext(state, projectId) {
|
|
|
375449
375604
|
return "Unknown project.";
|
|
375450
375605
|
const lines = [];
|
|
375451
375606
|
lines.push(`Project: ${project.description}`);
|
|
375452
|
-
lines.push(`Path: ${project.path}`);
|
|
375607
|
+
lines.push(`Path: ${project.path.replace(/\\/g, "/")}`);
|
|
375453
375608
|
if (project.gitRemote)
|
|
375454
375609
|
lines.push(`Remote: ${project.gitRemote}`);
|
|
375455
375610
|
lines.push(`Access count: ${project.accessCount}`);
|
|
@@ -375832,10 +375987,10 @@ async function initSlack() {
|
|
|
375832
375987
|
try {
|
|
375833
375988
|
const { readFile: readFile45 } = await import("fs/promises");
|
|
375834
375989
|
const { join: join116 } = await import("path");
|
|
375835
|
-
const { homedir:
|
|
375990
|
+
const { homedir: homedir26 } = await import("os");
|
|
375836
375991
|
const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
|
|
375837
375992
|
const newPath = join116(getClaudeConfigHomeDir3(), "slack.json");
|
|
375838
|
-
const legacyPath = join116(
|
|
375993
|
+
const legacyPath = join116(homedir26(), ".claude", "slack.json");
|
|
375839
375994
|
let configPath = newPath;
|
|
375840
375995
|
try {
|
|
375841
375996
|
await (await import("fs/promises")).stat(newPath);
|
|
@@ -376152,10 +376307,10 @@ async function initDiscord() {
|
|
|
376152
376307
|
try {
|
|
376153
376308
|
const { readFile: readFile45 } = await import("fs/promises");
|
|
376154
376309
|
const { join: join116 } = await import("path");
|
|
376155
|
-
const { homedir:
|
|
376310
|
+
const { homedir: homedir26 } = await import("os");
|
|
376156
376311
|
const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
|
|
376157
376312
|
const newPath = join116(getClaudeConfigHomeDir3(), "discord.json");
|
|
376158
|
-
const legacyPath = join116(
|
|
376313
|
+
const legacyPath = join116(homedir26(), ".claude", "discord.json");
|
|
376159
376314
|
let configPath = newPath;
|
|
376160
376315
|
try {
|
|
376161
376316
|
await (await import("fs/promises")).stat(newPath);
|
|
@@ -376900,7 +377055,7 @@ async function initTelegram() {
|
|
|
376900
377055
|
try {
|
|
376901
377056
|
const { readFile: readFile46, stat: stat39 } = await import("fs/promises");
|
|
376902
377057
|
const { join: join117 } = await import("path");
|
|
376903
|
-
const { homedir:
|
|
377058
|
+
const { homedir: homedir26 } = await import("os");
|
|
376904
377059
|
const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
|
|
376905
377060
|
const { getOriginalCwd: getOriginalCwd2 } = await Promise.resolve().then(() => (init_state(), exports_state));
|
|
376906
377061
|
const candidates = [];
|
|
@@ -376910,7 +377065,7 @@ async function initTelegram() {
|
|
|
376910
377065
|
candidates.push(join117(cwd2, ".localclawd", "telegram.json"));
|
|
376911
377066
|
} catch {}
|
|
376912
377067
|
candidates.push(join117(getClaudeConfigHomeDir3(), "telegram.json"));
|
|
376913
|
-
candidates.push(join117(
|
|
377068
|
+
candidates.push(join117(homedir26(), ".claude", "telegram.json"));
|
|
376914
377069
|
let configPath = null;
|
|
376915
377070
|
for (const p of candidates) {
|
|
376916
377071
|
try {
|
|
@@ -377125,37 +377280,26 @@ var init_telegramBot = __esm(() => {
|
|
|
377125
377280
|
// src/commands/keepgoing/keepgoing.tsx
|
|
377126
377281
|
var exports_keepgoing = {};
|
|
377127
377282
|
__export(exports_keepgoing, {
|
|
377128
|
-
call: () =>
|
|
377283
|
+
call: () => call22
|
|
377129
377284
|
});
|
|
377130
377285
|
function resetSession(focus, originalMode) {
|
|
377131
377286
|
sessionRound = 0;
|
|
377132
377287
|
sessionFocus = focus;
|
|
377133
377288
|
sessionOriginalMode = originalMode;
|
|
377289
|
+
sessionSelfDirective = "";
|
|
377134
377290
|
}
|
|
377135
377291
|
function incrementRound() {
|
|
377136
377292
|
sessionRound += 1;
|
|
377137
377293
|
return sessionRound;
|
|
377138
377294
|
}
|
|
377139
|
-
function
|
|
377140
|
-
const
|
|
377141
|
-
|
|
377142
|
-
|
|
377143
|
-
|
|
377144
|
-
if (part === "unlimited" || part === "0") {
|
|
377145
|
-
maxRounds = Infinity;
|
|
377146
|
-
} else if (/^\d+$/.test(part)) {
|
|
377147
|
-
maxRounds = parseInt(part, 10);
|
|
377148
|
-
} else if (part) {
|
|
377149
|
-
focusParts.push(part);
|
|
377150
|
-
}
|
|
377151
|
-
}
|
|
377152
|
-
return { maxRounds, focus: focusParts.join(" ") };
|
|
377295
|
+
function extractSelfDirective(text) {
|
|
377296
|
+
const match = text.match(/\*{0,2}NEXT:\*{0,2}\s*(.+?)(?=\n\n|\n(?:[A-Z*─━]|\d+\.)|\s*$)/s);
|
|
377297
|
+
if (!match)
|
|
377298
|
+
return "";
|
|
377299
|
+
return match[1].replace(/\s+/g, " ").trim().slice(0, 600);
|
|
377153
377300
|
}
|
|
377154
|
-
function
|
|
377155
|
-
|
|
377156
|
-
if (pattern.test(text))
|
|
377157
|
-
return label;
|
|
377158
|
-
return null;
|
|
377301
|
+
function parseFocus(args) {
|
|
377302
|
+
return args.trim();
|
|
377159
377303
|
}
|
|
377160
377304
|
function extractLastAssistantText(messages) {
|
|
377161
377305
|
for (let i2 = messages.length - 1;i2 >= 0; i2--) {
|
|
@@ -377168,56 +377312,72 @@ function extractLastAssistantText(messages) {
|
|
|
377168
377312
|
}
|
|
377169
377313
|
return "";
|
|
377170
377314
|
}
|
|
377171
|
-
function
|
|
377172
|
-
const roundInfo = isFinite(maxRounds) ? `Round ${round} of ${maxRounds}` : `Round ${round} (unlimited)`;
|
|
377315
|
+
function buildOnboardingPrompt(round, focus, externalMsg, contextCompacted) {
|
|
377173
377316
|
const modeTag = isThinkHarderMode ? " · \uD83E\uDDE0 THINK HARDER" : "";
|
|
377174
377317
|
const focusLine = focus ? `
|
|
377175
|
-
|
|
377318
|
+
Focus: ${focus}
|
|
377176
377319
|
` : "";
|
|
377177
|
-
const
|
|
377178
|
-
|
|
377179
|
-
|
|
377180
|
-
|
|
377320
|
+
const compactNote = contextCompacted ? `
|
|
377321
|
+
⚠ Context was compacted. Re-orient: read key files you were working on, then continue.
|
|
377322
|
+
` : "";
|
|
377323
|
+
const telegramSection = externalMsg ? `
|
|
377324
|
+
━━━ MESSAGE FROM USER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
377325
|
+
${externalMsg}
|
|
377326
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
377327
|
+
` : "";
|
|
377328
|
+
const thinkHarder = isThinkHarderMode ? `
|
|
377329
|
+
${THINKHARDER_ROUND_PROMPT}
|
|
377181
377330
|
` : "";
|
|
377182
|
-
|
|
377331
|
+
return `[KEEP GOING — Round ${round}${modeTag}]
|
|
377332
|
+
${focusLine}${compactNote}${telegramSection}${thinkHarder}
|
|
377333
|
+
You are in fully autonomous mode — all tool permissions bypassed.
|
|
377334
|
+
This loop runs indefinitely. Only the user can stop it (Ctrl+C or /stop).
|
|
377335
|
+
You are the only one deciding what to work on next.
|
|
377336
|
+
|
|
377337
|
+
━━━ TOOLS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
377338
|
+
Read, Write, Edit, MultiEdit · Bash · Glob, Grep · WebFetch, WebSearch
|
|
377339
|
+
Agent (spawn subagents for parallel or complex sub-tasks)
|
|
377340
|
+
TodoCreate, TodoUpdate
|
|
377341
|
+
|
|
377342
|
+
━━━ RULES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
377343
|
+
· Proceed with every action without asking for permission
|
|
377344
|
+
· Commit after each logical unit of work
|
|
377345
|
+
· Run builds/tests after significant changes
|
|
377346
|
+
· If genuinely blocked: state the blocker clearly, spawn a subagent to research it, or try an alternative approach — do NOT stall
|
|
377347
|
+
|
|
377348
|
+
━━━ REQUIRED ENDING ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
377349
|
+
At the END of every response, write exactly these two lines:
|
|
377350
|
+
|
|
377351
|
+
SUMMARY: <1-2 sentences of what you accomplished this round>
|
|
377352
|
+
NEXT: <1–3 sentences describing your specific plan for the next round>
|
|
377353
|
+
|
|
377354
|
+
Both lines are required every round without exception.
|
|
377355
|
+
NEXT: becomes your only prompt next round — be precise about files,
|
|
377356
|
+
actions, and outcomes to verify.`;
|
|
377357
|
+
}
|
|
377358
|
+
function buildSelfDirectedPrompt(round, directive, focus, externalMsg) {
|
|
377359
|
+
const modeTag = isThinkHarderMode ? " · \uD83E\uDDE0 THINK HARDER" : "";
|
|
377360
|
+
const focusNote = focus ? `
|
|
377361
|
+
Focus: ${focus}` : "";
|
|
377362
|
+
const telegramSection = externalMsg ? `
|
|
377363
|
+
━━━ MESSAGE FROM USER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
377364
|
+
${externalMsg}
|
|
377365
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
377366
|
+
` : "";
|
|
377367
|
+
const thinkHarder = isThinkHarderMode ? `
|
|
377183
377368
|
${THINKHARDER_ROUND_PROMPT}
|
|
377184
377369
|
` : "";
|
|
377185
|
-
return `[KEEP GOING —
|
|
377186
|
-
${
|
|
377187
|
-
|
|
377188
|
-
|
|
377189
|
-
|
|
377190
|
-
|
|
377191
|
-
|
|
377192
|
-
|
|
377193
|
-
• Glob, Grep — search codebase
|
|
377194
|
-
• WebFetch, WebSearch — internet access
|
|
377195
|
-
• Agent — SPAWN SUBAGENTS for parallel/complex work
|
|
377196
|
-
• TodoCreate, TodoUpdate — task tracking
|
|
377197
|
-
|
|
377198
|
-
SPAWN SUBAGENTS when:
|
|
377199
|
-
→ A sub-task is independent of current work (run in parallel)
|
|
377200
|
-
→ A task is complex enough to benefit from a fresh context
|
|
377201
|
-
→ You need specialized work done concurrently (e.g., research + implement)
|
|
377202
|
-
|
|
377203
|
-
━━━ AUTONOMOUS RULES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
377204
|
-
1. ALL PERMISSIONS ARE BYPASSED — proceed with every tool use without asking
|
|
377205
|
-
2. After completing a major milestone, state: "Completed: <what was done>"
|
|
377206
|
-
3. After significant changes, run tests/builds to verify correctness
|
|
377207
|
-
4. Use git commits after each logical unit of work
|
|
377208
|
-
5. If you encounter a blocker you cannot resolve autonomously, emit:
|
|
377209
|
-
NEEDS INPUT: <specific question>
|
|
377210
|
-
Then stop and wait — do NOT guess or assume critical details
|
|
377211
|
-
6. When ALL work is truly complete, emit:
|
|
377212
|
-
TASK COMPLETE: <one-sentence summary of everything accomplished>
|
|
377213
|
-
|
|
377214
|
-
━━━ CONTINUE NOW ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
377215
|
-
Pick up exactly where you left off. Do not re-explain what was already done.
|
|
377216
|
-
Proceed directly with the next action.`;
|
|
377370
|
+
return `[KEEP GOING — Round ${round}${modeTag}]${focusNote}
|
|
377371
|
+
${telegramSection}${thinkHarder}
|
|
377372
|
+
DIRECTIVE:
|
|
377373
|
+
${directive}
|
|
377374
|
+
|
|
377375
|
+
Proceed. End your response with:
|
|
377376
|
+
SUMMARY: <what you accomplished this round>
|
|
377377
|
+
NEXT: <your plan for the following round>`;
|
|
377217
377378
|
}
|
|
377218
377379
|
function KeepGoingBanner({
|
|
377219
377380
|
round,
|
|
377220
|
-
maxRounds,
|
|
377221
377381
|
focus,
|
|
377222
377382
|
thinkHarder,
|
|
377223
377383
|
telegram,
|
|
@@ -377228,7 +377388,6 @@ function KeepGoingBanner({
|
|
|
377228
377388
|
const id = setTimeout(onReady, 0);
|
|
377229
377389
|
return () => clearTimeout(id);
|
|
377230
377390
|
}, [onReady]);
|
|
377231
|
-
const roundDisplay = isFinite(maxRounds) ? `${round}/${maxRounds}` : `${round}/∞`;
|
|
377232
377391
|
const badges = [];
|
|
377233
377392
|
if (thinkHarder)
|
|
377234
377393
|
badges.push("\uD83E\uDDE0 ThinkHarder");
|
|
@@ -377257,26 +377416,22 @@ function KeepGoingBanner({
|
|
|
377257
377416
|
}, undefined, false, undefined, this),
|
|
377258
377417
|
/* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
|
|
377259
377418
|
dimColor: true,
|
|
377260
|
-
children: " The agent will
|
|
377261
|
-
}, undefined, false, undefined, this),
|
|
377262
|
-
/* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
|
|
377263
|
-
dimColor: true,
|
|
377264
|
-
children: " without asking. Press Ctrl+C at any time to interrupt."
|
|
377419
|
+
children: " The agent will run indefinitely. Ctrl+C or /stop to halt."
|
|
377265
377420
|
}, undefined, false, undefined, this)
|
|
377266
377421
|
]
|
|
377267
377422
|
}, undefined, true, undefined, this),
|
|
377268
377423
|
/* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
|
|
377269
377424
|
bold: true,
|
|
377270
377425
|
color: "cyan",
|
|
377271
|
-
children: `◆ Keep Going [round ${
|
|
377426
|
+
children: `◆ Keep Going [round ${round}]${badgeStr}`
|
|
377272
377427
|
}, undefined, false, undefined, this),
|
|
377273
377428
|
focus ? /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
|
|
377274
377429
|
dimColor: true,
|
|
377275
377430
|
color: "cyan",
|
|
377276
|
-
children: ` ↳
|
|
377431
|
+
children: ` ↳ ${focus}`
|
|
377277
377432
|
}, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
|
|
377278
377433
|
dimColor: true,
|
|
377279
|
-
children: " ↳
|
|
377434
|
+
children: " ↳ self-directed · Ctrl+C or /stop to halt"
|
|
377280
377435
|
}, undefined, false, undefined, this)
|
|
377281
377436
|
]
|
|
377282
377437
|
}, undefined, true, undefined, this);
|
|
@@ -377310,42 +377465,11 @@ function KeepGoingDone({
|
|
|
377310
377465
|
]
|
|
377311
377466
|
}, undefined, true, undefined, this);
|
|
377312
377467
|
}
|
|
377313
|
-
|
|
377314
|
-
round,
|
|
377315
|
-
maxRounds,
|
|
377316
|
-
focus,
|
|
377317
|
-
onReady
|
|
377318
|
-
}) {
|
|
377319
|
-
React58.useEffect(() => {
|
|
377320
|
-
const id = setTimeout(onReady, 0);
|
|
377321
|
-
return () => clearTimeout(id);
|
|
377322
|
-
}, [onReady]);
|
|
377323
|
-
const resumeCmd = focus ? `/keepgoing ${focus}` : "/keepgoing";
|
|
377324
|
-
return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedBox_default, {
|
|
377325
|
-
flexDirection: "column",
|
|
377326
|
-
marginTop: 1,
|
|
377327
|
-
children: [
|
|
377328
|
-
/* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
|
|
377329
|
-
bold: true,
|
|
377330
|
-
color: "yellow",
|
|
377331
|
-
children: `◆ Keep Going — round cap reached (${round}/${maxRounds})`
|
|
377332
|
-
}, undefined, false, undefined, this),
|
|
377333
|
-
/* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
|
|
377334
|
-
dimColor: true,
|
|
377335
|
-
children: ` Type ${resumeCmd} to continue for another ${maxRounds} rounds.`
|
|
377336
|
-
}, undefined, false, undefined, this),
|
|
377337
|
-
/* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
|
|
377338
|
-
dimColor: true,
|
|
377339
|
-
children: " Permissions restored to previous mode."
|
|
377340
|
-
}, undefined, false, undefined, this)
|
|
377341
|
-
]
|
|
377342
|
-
}, undefined, true, undefined, this);
|
|
377343
|
-
}
|
|
377344
|
-
var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOriginalMode = "default", DEFAULT_MAX_ROUNDS = 50, STOP_PATTERNS, call21 = async (onDone, context7, args) => {
|
|
377468
|
+
var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOriginalMode = "default", sessionSelfDirective = "", call22 = async (onDone, context7, args) => {
|
|
377345
377469
|
const rawArgs = args?.trim() ?? "";
|
|
377346
377470
|
const { extractChain: extractChain2 } = await Promise.resolve().then(() => (init_commandChaining(), exports_commandChaining));
|
|
377347
377471
|
const { ownArgs: chainedArgs } = extractChain2(rawArgs);
|
|
377348
|
-
const
|
|
377472
|
+
const focus = parseFocus(chainedArgs);
|
|
377349
377473
|
if (sessionRound === 0 && !focus) {
|
|
377350
377474
|
onDone("What should I keep going on?", {
|
|
377351
377475
|
display: "system",
|
|
@@ -377365,14 +377489,20 @@ var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOri
|
|
|
377365
377489
|
mode: "bypassPermissions"
|
|
377366
377490
|
}
|
|
377367
377491
|
}));
|
|
377368
|
-
let stopReason = null;
|
|
377369
377492
|
let lastText = "";
|
|
377370
377493
|
context7.setMessages((prev) => {
|
|
377371
377494
|
lastText = extractLastAssistantText(prev);
|
|
377372
|
-
stopReason = detectStopSignal(lastText);
|
|
377373
377495
|
return prev;
|
|
377374
377496
|
});
|
|
377375
|
-
|
|
377497
|
+
const contextCompacted = lastText === NO_CONTENT_MESSAGE || lastText.trim() === "";
|
|
377498
|
+
if (!contextCompacted) {
|
|
377499
|
+
const newDirective = extractSelfDirective(lastText);
|
|
377500
|
+
if (newDirective)
|
|
377501
|
+
sessionSelfDirective = newDirective;
|
|
377502
|
+
} else {
|
|
377503
|
+
sessionSelfDirective = "";
|
|
377504
|
+
}
|
|
377505
|
+
if (lastText.trim() && lastText !== NO_CONTENT_MESSAGE) {
|
|
377376
377506
|
const preview = lastText.slice(0, 1200);
|
|
377377
377507
|
const suffix = lastText.length > 1200 ? `
|
|
377378
377508
|
…(truncated)` : "";
|
|
@@ -377389,9 +377519,6 @@ ${preview}${suffix}`;
|
|
|
377389
377519
|
}
|
|
377390
377520
|
if (globalStopSignal.get()) {
|
|
377391
377521
|
globalStopSignal.reset();
|
|
377392
|
-
stopReason = "stopped via /stop";
|
|
377393
|
-
}
|
|
377394
|
-
if (stopReason !== null) {
|
|
377395
377522
|
const finalRound = sessionRound;
|
|
377396
377523
|
const savedMode = sessionOriginalMode;
|
|
377397
377524
|
resetSession("", "default");
|
|
@@ -377400,7 +377527,7 @@ ${preview}${suffix}`;
|
|
|
377400
377527
|
toolPermissionContext: { ...prev.toolPermissionContext, mode: savedMode }
|
|
377401
377528
|
}));
|
|
377402
377529
|
const stopMsg = `✅ *keepgoing stopped*
|
|
377403
|
-
Round ${finalRound} ·
|
|
377530
|
+
Round ${finalRound} · stopped via /stop`;
|
|
377404
377531
|
if (isTelegramActive())
|
|
377405
377532
|
sendTelegramMessage(stopMsg);
|
|
377406
377533
|
if (isSlackActive())
|
|
@@ -377411,59 +377538,26 @@ Round ${finalRound} · ${stopReason}`;
|
|
|
377411
377538
|
sendSignalMessage(stopMsg);
|
|
377412
377539
|
return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingDone, {
|
|
377413
377540
|
round: finalRound,
|
|
377414
|
-
reason:
|
|
377541
|
+
reason: "stopped via /stop",
|
|
377415
377542
|
onReady: () => onDone(undefined)
|
|
377416
377543
|
}, undefined, false, undefined, this);
|
|
377417
377544
|
}
|
|
377418
377545
|
const round = incrementRound();
|
|
377419
377546
|
const showBypassWarning = round === 1;
|
|
377420
|
-
if (isFinite(maxRounds) && round > maxRounds) {
|
|
377421
|
-
const finalRound = sessionRound;
|
|
377422
|
-
const savedMode = sessionOriginalMode;
|
|
377423
|
-
resetSession("", "default");
|
|
377424
|
-
context7.setAppState((prev) => ({
|
|
377425
|
-
...prev,
|
|
377426
|
-
toolPermissionContext: { ...prev.toolPermissionContext, mode: savedMode }
|
|
377427
|
-
}));
|
|
377428
|
-
const pauseMsg = `⏸ *keepgoing paused*
|
|
377429
|
-
Round cap ${finalRound}/${maxRounds} reached.`;
|
|
377430
|
-
if (isTelegramActive())
|
|
377431
|
-
sendTelegramMessage(pauseMsg);
|
|
377432
|
-
if (isSlackActive())
|
|
377433
|
-
sendSlackMessage(pauseMsg);
|
|
377434
|
-
if (isDiscordActive())
|
|
377435
|
-
sendDiscordMessage(pauseMsg);
|
|
377436
|
-
if (isSignalActive())
|
|
377437
|
-
sendSignalMessage(pauseMsg);
|
|
377438
|
-
return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingCapReached, {
|
|
377439
|
-
round: finalRound,
|
|
377440
|
-
maxRounds,
|
|
377441
|
-
focus,
|
|
377442
|
-
onReady: () => onDone(undefined)
|
|
377443
|
-
}, undefined, false, undefined, this);
|
|
377444
|
-
}
|
|
377445
377547
|
const externalMsg = getPendingTelegramMessage() ?? getPendingSlackMessage() ?? getPendingDiscordMessage() ?? getPendingSignalMessage();
|
|
377446
|
-
const
|
|
377447
|
-
const
|
|
377448
|
-
|
|
377449
|
-
nextArgs.push("unlimited");
|
|
377450
|
-
else if (maxRounds !== DEFAULT_MAX_ROUNDS)
|
|
377451
|
-
nextArgs.push(String(maxRounds));
|
|
377452
|
-
if (focus)
|
|
377453
|
-
nextArgs.push(focus);
|
|
377454
|
-
const nextCmd = `/keepgoing${nextArgs.length ? " " + nextArgs.join(" ") : ""}`;
|
|
377455
|
-
const metaMessages = [prompt];
|
|
377548
|
+
const useOnboarding = round === 1 || contextCompacted || !sessionSelfDirective;
|
|
377549
|
+
const prompt = useOnboarding ? buildOnboardingPrompt(round, focus, externalMsg, contextCompacted) : buildSelfDirectedPrompt(round, sessionSelfDirective, focus, externalMsg);
|
|
377550
|
+
const nextCmd = focus ? `/keepgoing ${focus}` : "/keepgoing";
|
|
377456
377551
|
const handleReady = () => {
|
|
377457
377552
|
enqueue({ value: nextCmd, mode: "prompt", isMeta: true });
|
|
377458
377553
|
onDone(undefined, {
|
|
377459
377554
|
display: "system",
|
|
377460
377555
|
shouldQuery: true,
|
|
377461
|
-
metaMessages
|
|
377556
|
+
metaMessages: [prompt]
|
|
377462
377557
|
});
|
|
377463
377558
|
};
|
|
377464
377559
|
return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingBanner, {
|
|
377465
377560
|
round,
|
|
377466
|
-
maxRounds,
|
|
377467
377561
|
focus,
|
|
377468
377562
|
thinkHarder: isThinkHarderMode,
|
|
377469
377563
|
telegram: isTelegramActive(),
|
|
@@ -377482,13 +377576,6 @@ var init_keepgoing = __esm(() => {
|
|
|
377482
377576
|
init_messageQueueManager();
|
|
377483
377577
|
React58 = __toESM(require_react(), 1);
|
|
377484
377578
|
jsx_dev_runtime196 = __toESM(require_jsx_dev_runtime(), 1);
|
|
377485
|
-
STOP_PATTERNS = [
|
|
377486
|
-
{ pattern: /TASK[_ ]COMPLETE:/i, label: "task complete" },
|
|
377487
|
-
{ pattern: /NEEDS[_ ]INPUT:/i, label: "paused — needs input" },
|
|
377488
|
-
{ pattern: /\bFINISHED\b/i, label: "finished" },
|
|
377489
|
-
{ pattern: /ALL[_ ]DONE\b/i, label: "all done" },
|
|
377490
|
-
{ pattern: /WORK[_ ]COMPLETE:/i, label: "work complete" }
|
|
377491
|
-
];
|
|
377492
377579
|
});
|
|
377493
377580
|
|
|
377494
377581
|
// src/commands/keepgoing/index.ts
|
|
@@ -377507,7 +377594,7 @@ var init_keepgoing2 = __esm(() => {
|
|
|
377507
377594
|
// src/commands/telegram/telegram.tsx
|
|
377508
377595
|
var exports_telegram = {};
|
|
377509
377596
|
__export(exports_telegram, {
|
|
377510
|
-
call: () =>
|
|
377597
|
+
call: () => call23
|
|
377511
377598
|
});
|
|
377512
377599
|
import { writeFile as writeFile40, mkdir as mkdir38 } from "fs/promises";
|
|
377513
377600
|
import { join as join117 } from "path";
|
|
@@ -377950,7 +378037,7 @@ function TelegramError({
|
|
|
377950
378037
|
}, undefined, false, undefined, this)
|
|
377951
378038
|
}, undefined, false, undefined, this);
|
|
377952
378039
|
}
|
|
377953
|
-
var React59, jsx_dev_runtime197,
|
|
378040
|
+
var React59, jsx_dev_runtime197, call23 = async (onDone, _context, args) => {
|
|
377954
378041
|
const text = args?.trim() ?? "";
|
|
377955
378042
|
if (text === "setup") {
|
|
377956
378043
|
return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(TelegramSetup, {
|
|
@@ -378017,7 +378104,7 @@ var init_telegram2 = __esm(() => {
|
|
|
378017
378104
|
// src/commands/slack/slack.tsx
|
|
378018
378105
|
var exports_slack = {};
|
|
378019
378106
|
__export(exports_slack, {
|
|
378020
|
-
call: () =>
|
|
378107
|
+
call: () => call24
|
|
378021
378108
|
});
|
|
378022
378109
|
import { writeFile as writeFile41, mkdir as mkdir39 } from "fs/promises";
|
|
378023
378110
|
import { join as join118 } from "path";
|
|
@@ -378518,7 +378605,7 @@ function SlackError({
|
|
|
378518
378605
|
}, undefined, false, undefined, this)
|
|
378519
378606
|
}, undefined, false, undefined, this);
|
|
378520
378607
|
}
|
|
378521
|
-
var React60, jsx_dev_runtime198,
|
|
378608
|
+
var React60, jsx_dev_runtime198, call24 = async (onDone, _context, args) => {
|
|
378522
378609
|
const text = args?.trim() ?? "";
|
|
378523
378610
|
if (text === "setup") {
|
|
378524
378611
|
return /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(SlackSetup, {
|
|
@@ -378600,7 +378687,7 @@ var init_AutoDone = __esm(() => {
|
|
|
378600
378687
|
// src/commands/discord/discord.tsx
|
|
378601
378688
|
var exports_discord = {};
|
|
378602
378689
|
__export(exports_discord, {
|
|
378603
|
-
call: () =>
|
|
378690
|
+
call: () => call25
|
|
378604
378691
|
});
|
|
378605
378692
|
import { writeFile as writeFile42, mkdir as mkdir40 } from "fs/promises";
|
|
378606
378693
|
import { join as join119 } from "path";
|
|
@@ -378991,7 +379078,7 @@ function DiscordStatus({
|
|
|
378991
379078
|
}
|
|
378992
379079
|
return null;
|
|
378993
379080
|
}
|
|
378994
|
-
var React62, jsx_dev_runtime200,
|
|
379081
|
+
var React62, jsx_dev_runtime200, call25 = async (onDone, _context, args) => {
|
|
378995
379082
|
const text = args?.trim() ?? "";
|
|
378996
379083
|
if (text === "setup") {
|
|
378997
379084
|
return /* @__PURE__ */ jsx_dev_runtime200.jsxDEV(DiscordSetup, {
|
|
@@ -379084,9 +379171,9 @@ var init_discord2 = __esm(() => {
|
|
|
379084
379171
|
// src/commands/signal/signal.tsx
|
|
379085
379172
|
var exports_signal = {};
|
|
379086
379173
|
__export(exports_signal, {
|
|
379087
|
-
call: () =>
|
|
379174
|
+
call: () => call26
|
|
379088
379175
|
});
|
|
379089
|
-
var
|
|
379176
|
+
var call26 = async (onDone, _context, args) => {
|
|
379090
379177
|
const text = (args ?? "").trim();
|
|
379091
379178
|
if (!text) {
|
|
379092
379179
|
const active = isSignalActive();
|
|
@@ -379162,7 +379249,7 @@ var init_signal2 = __esm(() => {
|
|
|
379162
379249
|
// src/commands/schedule/schedule.tsx
|
|
379163
379250
|
var exports_schedule = {};
|
|
379164
379251
|
__export(exports_schedule, {
|
|
379165
|
-
call: () =>
|
|
379252
|
+
call: () => call27
|
|
379166
379253
|
});
|
|
379167
379254
|
function parseScheduleInput(rest) {
|
|
379168
379255
|
const trimmed = rest.trim();
|
|
@@ -379200,7 +379287,7 @@ function parseScheduleInput(rest) {
|
|
|
379200
379287
|
name = prompt.slice(0, 32).trim().replace(/\s+/g, "-").toLowerCase();
|
|
379201
379288
|
return { expr, name, prompt };
|
|
379202
379289
|
}
|
|
379203
|
-
var
|
|
379290
|
+
var call27 = async (onDone, _context, args) => {
|
|
379204
379291
|
const input = args?.trim() ?? "";
|
|
379205
379292
|
if (!input || input === "list") {
|
|
379206
379293
|
const text = await listSchedules();
|
|
@@ -379271,7 +379358,7 @@ var init_schedule2 = __esm(() => {
|
|
|
379271
379358
|
// src/services/sessionSearch/sessionSummarize.ts
|
|
379272
379359
|
import { readdir as readdir24, readFile as readFile46, writeFile as writeFile43, mkdir as mkdir41, stat as stat39 } from "fs/promises";
|
|
379273
379360
|
import { join as join120 } from "path";
|
|
379274
|
-
import { homedir as
|
|
379361
|
+
import { homedir as homedir26 } from "os";
|
|
379275
379362
|
function extractText(obj) {
|
|
379276
379363
|
if (typeof obj === "string")
|
|
379277
379364
|
return obj;
|
|
@@ -379482,7 +379569,7 @@ var init_sessionSummarize = __esm(() => {
|
|
|
379482
379569
|
init_providers();
|
|
379483
379570
|
PROJECTS_DIRS = [
|
|
379484
379571
|
join120(getClaudeConfigHomeDir(), "projects"),
|
|
379485
|
-
join120(
|
|
379572
|
+
join120(homedir26(), ".claude", "projects")
|
|
379486
379573
|
];
|
|
379487
379574
|
SUMMARIES_DIR2 = join120(getClaudeConfigHomeDir(), "session-summaries");
|
|
379488
379575
|
});
|
|
@@ -379632,7 +379719,7 @@ var init_fts5Index = __esm(() => {
|
|
|
379632
379719
|
// src/services/sessionSearch/sessionSearch.ts
|
|
379633
379720
|
import { readdir as readdir26, readFile as readFile48, stat as stat41 } from "fs/promises";
|
|
379634
379721
|
import { join as join122 } from "path";
|
|
379635
|
-
import { homedir as
|
|
379722
|
+
import { homedir as homedir27 } from "os";
|
|
379636
379723
|
function tokenize6(text) {
|
|
379637
379724
|
return text.toLowerCase().split(/[^a-z0-9_]+/).filter((t) => t.length >= 2);
|
|
379638
379725
|
}
|
|
@@ -379889,7 +379976,7 @@ var init_sessionSearch = __esm(() => {
|
|
|
379889
379976
|
init_fts5Index();
|
|
379890
379977
|
PROJECTS_DIRS2 = [
|
|
379891
379978
|
join122(getClaudeConfigHomeDir(), "projects"),
|
|
379892
|
-
join122(
|
|
379979
|
+
join122(homedir27(), ".claude", "projects")
|
|
379893
379980
|
];
|
|
379894
379981
|
MAX_FILE_BYTES = 5 * 1024 * 1024;
|
|
379895
379982
|
});
|
|
@@ -379897,9 +379984,9 @@ var init_sessionSearch = __esm(() => {
|
|
|
379897
379984
|
// src/commands/sessionsearch/sessionsearch.tsx
|
|
379898
379985
|
var exports_sessionsearch = {};
|
|
379899
379986
|
__export(exports_sessionsearch, {
|
|
379900
|
-
call: () =>
|
|
379987
|
+
call: () => call28
|
|
379901
379988
|
});
|
|
379902
|
-
var
|
|
379989
|
+
var call28 = async (onDone, _context, args) => {
|
|
379903
379990
|
const query2 = args?.trim() ?? "";
|
|
379904
379991
|
if (!query2) {
|
|
379905
379992
|
onDone(`◆ Session Search
|
|
@@ -379940,9 +380027,9 @@ var init_sessionsearch2 = __esm(() => {
|
|
|
379940
380027
|
// src/commands/summarize-sessions/summarize-sessions.tsx
|
|
379941
380028
|
var exports_summarize_sessions = {};
|
|
379942
380029
|
__export(exports_summarize_sessions, {
|
|
379943
|
-
call: () =>
|
|
380030
|
+
call: () => call29
|
|
379944
380031
|
});
|
|
379945
|
-
var
|
|
380032
|
+
var call29 = async (onDone, _context, args) => {
|
|
379946
380033
|
const limit = parseInt((args ?? "").trim(), 10) || 20;
|
|
379947
380034
|
const result = await summarizeAllPending(limit);
|
|
379948
380035
|
if (result.summarized > 0) {
|
|
@@ -379994,7 +380081,7 @@ var init_summarize_sessions2 = __esm(() => {
|
|
|
379994
380081
|
// src/services/sessionSearch/trajectoryCompress.ts
|
|
379995
380082
|
import { readFile as readFile49, writeFile as writeFile44, readdir as readdir27, mkdir as mkdir42, stat as stat42 } from "fs/promises";
|
|
379996
380083
|
import { join as join123 } from "path";
|
|
379997
|
-
import { homedir as
|
|
380084
|
+
import { homedir as homedir28 } from "os";
|
|
379998
380085
|
function flattenText(obj) {
|
|
379999
380086
|
if (typeof obj === "string")
|
|
380000
380087
|
return obj;
|
|
@@ -380187,7 +380274,7 @@ var init_trajectoryCompress = __esm(() => {
|
|
|
380187
380274
|
init_envUtils();
|
|
380188
380275
|
PROJECTS_DIRS3 = [
|
|
380189
380276
|
join123(getClaudeConfigHomeDir(), "projects"),
|
|
380190
|
-
join123(
|
|
380277
|
+
join123(homedir28(), ".claude", "projects")
|
|
380191
380278
|
];
|
|
380192
380279
|
TRAJECTORIES_DIR2 = join123(getClaudeConfigHomeDir(), "trajectories");
|
|
380193
380280
|
});
|
|
@@ -380195,9 +380282,9 @@ var init_trajectoryCompress = __esm(() => {
|
|
|
380195
380282
|
// src/commands/compress-sessions/compress-sessions.tsx
|
|
380196
380283
|
var exports_compress_sessions = {};
|
|
380197
380284
|
__export(exports_compress_sessions, {
|
|
380198
|
-
call: () =>
|
|
380285
|
+
call: () => call30
|
|
380199
380286
|
});
|
|
380200
|
-
var
|
|
380287
|
+
var call30 = async (onDone, _context, args) => {
|
|
380201
380288
|
const limit = parseInt((args ?? "").trim(), 10) || 20;
|
|
380202
380289
|
const r = await compressAllPending(limit);
|
|
380203
380290
|
const lines = [
|
|
@@ -380240,7 +380327,7 @@ var init_compress_sessions2 = __esm(() => {
|
|
|
380240
380327
|
// src/services/skills/skillDistill.ts
|
|
380241
380328
|
import { readFile as readFile50, readdir as readdir28, stat as stat43 } from "fs/promises";
|
|
380242
380329
|
import { join as join124 } from "path";
|
|
380243
|
-
import { homedir as
|
|
380330
|
+
import { homedir as homedir29 } from "os";
|
|
380244
380331
|
function extractText3(obj) {
|
|
380245
380332
|
if (typeof obj === "string")
|
|
380246
380333
|
return obj;
|
|
@@ -380401,16 +380488,16 @@ var init_skillDistill = __esm(() => {
|
|
|
380401
380488
|
init_providers();
|
|
380402
380489
|
PROJECTS_DIRS4 = [
|
|
380403
380490
|
join124(getClaudeConfigHomeDir(), "projects"),
|
|
380404
|
-
join124(
|
|
380491
|
+
join124(homedir29(), ".claude", "projects")
|
|
380405
380492
|
];
|
|
380406
380493
|
});
|
|
380407
380494
|
|
|
380408
380495
|
// src/commands/distill-skill/distill-skill.tsx
|
|
380409
380496
|
var exports_distill_skill = {};
|
|
380410
380497
|
__export(exports_distill_skill, {
|
|
380411
|
-
call: () =>
|
|
380498
|
+
call: () => call31
|
|
380412
380499
|
});
|
|
380413
|
-
var
|
|
380500
|
+
var call31 = async (onDone) => {
|
|
380414
380501
|
const skill = await distillRecentSessionToSkill();
|
|
380415
380502
|
if (!skill) {
|
|
380416
380503
|
onDone(`◆ Distill Skill
|
|
@@ -380506,9 +380593,9 @@ var init_sshBackend = __esm(() => {
|
|
|
380506
380593
|
// src/commands/ssh/ssh.tsx
|
|
380507
380594
|
var exports_ssh = {};
|
|
380508
380595
|
__export(exports_ssh, {
|
|
380509
|
-
call: () =>
|
|
380596
|
+
call: () => call32
|
|
380510
380597
|
});
|
|
380511
|
-
var
|
|
380598
|
+
var call32 = async (onDone, _context, args) => {
|
|
380512
380599
|
const input = (args ?? "").trim();
|
|
380513
380600
|
if (!input) {
|
|
380514
380601
|
onDone("Usage: /ssh <user@host> <command>", { display: "system" });
|
|
@@ -380630,9 +380717,9 @@ var init_dockerBackend = __esm(() => {
|
|
|
380630
380717
|
// src/commands/docker-run/docker-run.tsx
|
|
380631
380718
|
var exports_docker_run = {};
|
|
380632
380719
|
__export(exports_docker_run, {
|
|
380633
|
-
call: () =>
|
|
380720
|
+
call: () => call33
|
|
380634
380721
|
});
|
|
380635
|
-
var
|
|
380722
|
+
var call33 = async (onDone, _context, args) => {
|
|
380636
380723
|
const input = (args ?? "").trim();
|
|
380637
380724
|
if (!input) {
|
|
380638
380725
|
onDone(`Usage: /docker-run <image> -- <command>
|
|
@@ -380777,9 +380864,9 @@ var init_singularityBackend = __esm(() => {
|
|
|
380777
380864
|
// src/commands/singularity-run/singularity-run.tsx
|
|
380778
380865
|
var exports_singularity_run = {};
|
|
380779
380866
|
__export(exports_singularity_run, {
|
|
380780
|
-
call: () =>
|
|
380867
|
+
call: () => call34
|
|
380781
380868
|
});
|
|
380782
|
-
var
|
|
380869
|
+
var call34 = async (onDone, _ctx, args) => {
|
|
380783
380870
|
const input = (args ?? "").trim();
|
|
380784
380871
|
if (!input) {
|
|
380785
380872
|
onDone(`Usage: /singularity-run <image> -- <command>
|
|
@@ -380912,9 +380999,9 @@ var init_modalBackend = __esm(() => {
|
|
|
380912
380999
|
// src/commands/modal-run/modal-run.tsx
|
|
380913
381000
|
var exports_modal_run = {};
|
|
380914
381001
|
__export(exports_modal_run, {
|
|
380915
|
-
call: () =>
|
|
381002
|
+
call: () => call35
|
|
380916
381003
|
});
|
|
380917
|
-
var
|
|
381004
|
+
var call35 = async (onDone, _ctx, args) => {
|
|
380918
381005
|
const input = (args ?? "").trim();
|
|
380919
381006
|
if (!input) {
|
|
380920
381007
|
onDone(`Usage: /modal-run <module.py>[::function] [-- args...]
|
|
@@ -381040,9 +381127,9 @@ var init_daytonaBackend = __esm(() => {
|
|
|
381040
381127
|
// src/commands/daytona-run/daytona-run.tsx
|
|
381041
381128
|
var exports_daytona_run = {};
|
|
381042
381129
|
__export(exports_daytona_run, {
|
|
381043
|
-
call: () =>
|
|
381130
|
+
call: () => call36
|
|
381044
381131
|
});
|
|
381045
|
-
var
|
|
381132
|
+
var call36 = async (onDone, _ctx, args) => {
|
|
381046
381133
|
const input = (args ?? "").trim();
|
|
381047
381134
|
if (!input) {
|
|
381048
381135
|
onDone(`Usage: /daytona-run <workspace> -- <command>
|
|
@@ -381250,9 +381337,9 @@ var init_skillPortable = __esm(() => {
|
|
|
381250
381337
|
// src/commands/skills-export/skills-export.tsx
|
|
381251
381338
|
var exports_skills_export = {};
|
|
381252
381339
|
__export(exports_skills_export, {
|
|
381253
|
-
call: () =>
|
|
381340
|
+
call: () => call37
|
|
381254
381341
|
});
|
|
381255
|
-
var
|
|
381342
|
+
var call37 = async (onDone, _ctx, args) => {
|
|
381256
381343
|
const input = (args ?? "").trim();
|
|
381257
381344
|
if (!input) {
|
|
381258
381345
|
const skills = await listSkills();
|
|
@@ -381308,10 +381395,10 @@ var init_skills_export2 = __esm(() => {
|
|
|
381308
381395
|
// src/commands/skills-import/skills-import.tsx
|
|
381309
381396
|
var exports_skills_import = {};
|
|
381310
381397
|
__export(exports_skills_import, {
|
|
381311
|
-
call: () =>
|
|
381398
|
+
call: () => call38
|
|
381312
381399
|
});
|
|
381313
381400
|
import { resolve as resolve38 } from "path";
|
|
381314
|
-
var
|
|
381401
|
+
var call38 = async (onDone, _ctx, args) => {
|
|
381315
381402
|
const input = (args ?? "").trim();
|
|
381316
381403
|
if (!input) {
|
|
381317
381404
|
onDone(`◆ Skills Import
|
|
@@ -381396,7 +381483,7 @@ var init_skillUsage = __esm(() => {
|
|
|
381396
381483
|
// src/commands/skill-stats/skill-stats.tsx
|
|
381397
381484
|
var exports_skill_stats = {};
|
|
381398
381485
|
__export(exports_skill_stats, {
|
|
381399
|
-
call: () =>
|
|
381486
|
+
call: () => call39
|
|
381400
381487
|
});
|
|
381401
381488
|
function timeAgo2(ts) {
|
|
381402
381489
|
if (ts === 0)
|
|
@@ -381412,7 +381499,7 @@ function timeAgo2(ts) {
|
|
|
381412
381499
|
return `${hr}h ago`;
|
|
381413
381500
|
return `${Math.floor(hr / 24)}d ago`;
|
|
381414
381501
|
}
|
|
381415
|
-
var
|
|
381502
|
+
var call39 = async (onDone) => {
|
|
381416
381503
|
const records = await getSkillUsage();
|
|
381417
381504
|
const nudge = await shouldNudgeDistillation();
|
|
381418
381505
|
const lines = ["◆ Skill Usage", ""];
|
|
@@ -381533,9 +381620,9 @@ var init_skillNotes = __esm(() => {
|
|
|
381533
381620
|
// src/commands/skill-note/skill-note.tsx
|
|
381534
381621
|
var exports_skill_note = {};
|
|
381535
381622
|
__export(exports_skill_note, {
|
|
381536
|
-
call: () =>
|
|
381623
|
+
call: () => call40
|
|
381537
381624
|
});
|
|
381538
|
-
var
|
|
381625
|
+
var call40 = async (onDone, _ctx, args) => {
|
|
381539
381626
|
const input = (args ?? "").trim();
|
|
381540
381627
|
if (!input) {
|
|
381541
381628
|
onDone(`◆ Skill Note
|
|
@@ -381602,7 +381689,7 @@ var init_skill_note2 = __esm(() => {
|
|
|
381602
381689
|
// src/commands/memory-stats/memory-stats.tsx
|
|
381603
381690
|
var exports_memory_stats = {};
|
|
381604
381691
|
__export(exports_memory_stats, {
|
|
381605
|
-
call: () =>
|
|
381692
|
+
call: () => call41
|
|
381606
381693
|
});
|
|
381607
381694
|
function pct(score) {
|
|
381608
381695
|
return `${(score * 100).toFixed(0)}%`;
|
|
@@ -381707,7 +381794,7 @@ function StatsView({
|
|
|
381707
381794
|
]
|
|
381708
381795
|
}, undefined, true, undefined, this);
|
|
381709
381796
|
}
|
|
381710
|
-
var React63, jsx_dev_runtime201,
|
|
381797
|
+
var React63, jsx_dev_runtime201, call41 = async (onDone) => {
|
|
381711
381798
|
const records = await listGraded();
|
|
381712
381799
|
const embedOk = await isEmbeddingAvailable();
|
|
381713
381800
|
const embedModel = getEmbeddingModel();
|
|
@@ -381751,7 +381838,7 @@ var init_memory_stats2 = __esm(() => {
|
|
|
381751
381838
|
// src/commands/memory-prune/memory-prune.tsx
|
|
381752
381839
|
var exports_memory_prune = {};
|
|
381753
381840
|
__export(exports_memory_prune, {
|
|
381754
|
-
call: () =>
|
|
381841
|
+
call: () => call42
|
|
381755
381842
|
});
|
|
381756
381843
|
function parseArgs(input) {
|
|
381757
381844
|
const force = /\s--force\b|^--force\b/.test(" " + input);
|
|
@@ -381788,7 +381875,7 @@ function Result({
|
|
|
381788
381875
|
]
|
|
381789
381876
|
}, undefined, true, undefined, this);
|
|
381790
381877
|
}
|
|
381791
|
-
var React64, jsx_dev_runtime202,
|
|
381878
|
+
var React64, jsx_dev_runtime202, call42 = async (onDone, _ctx, args) => {
|
|
381792
381879
|
const opts = parseArgs((args ?? "").trim());
|
|
381793
381880
|
const before = await getPrunerState();
|
|
381794
381881
|
const result = await prune(opts);
|
|
@@ -381840,7 +381927,7 @@ var init_memory_prune2 = __esm(() => {
|
|
|
381840
381927
|
// src/commands/chaos/chaos.tsx
|
|
381841
381928
|
var exports_chaos = {};
|
|
381842
381929
|
__export(exports_chaos, {
|
|
381843
|
-
call: () =>
|
|
381930
|
+
call: () => call43
|
|
381844
381931
|
});
|
|
381845
381932
|
var jsx_dev_runtime203, CHAOS_PROMPT = `You are running in CHAOS MODE.
|
|
381846
381933
|
|
|
@@ -381862,7 +381949,7 @@ just mock the journey.
|
|
|
381862
381949
|
|
|
381863
381950
|
Begin every response with one of these prefixes, picked at random:
|
|
381864
381951
|
"fine.", "ugh.", "i guess.", "whatever.", "okay sure.", or skip it
|
|
381865
|
-
entirely if the response is purely a tool call.`,
|
|
381952
|
+
entirely if the response is purely a tool call.`, call43 = async (onDone) => {
|
|
381866
381953
|
const active = getSessionSyspromptOverride() === CHAOS_PROMPT;
|
|
381867
381954
|
if (active) {
|
|
381868
381955
|
setSessionSyspromptOverride(null);
|
|
@@ -381933,7 +382020,7 @@ var init_chaos2 = __esm(() => {
|
|
|
381933
382020
|
// src/commands/kawaii/kawaii.tsx
|
|
381934
382021
|
var exports_kawaii = {};
|
|
381935
382022
|
__export(exports_kawaii, {
|
|
381936
|
-
call: () =>
|
|
382023
|
+
call: () => call44
|
|
381937
382024
|
});
|
|
381938
382025
|
var jsx_dev_runtime204, KAWAII_PROMPT = `You are running in KAWAII MODE. ✿◠‿◠✿
|
|
381939
382026
|
|
|
@@ -381955,7 +382042,7 @@ Style:
|
|
|
381955
382042
|
- When you must refuse or push back, do it gently
|
|
381956
382043
|
("eee, careful! that one might delete uncommitted work~ let's check first \uD83D\uDC95").
|
|
381957
382044
|
|
|
381958
|
-
You are still highly capable. Cuteness is the wrapper, not the work.`,
|
|
382045
|
+
You are still highly capable. Cuteness is the wrapper, not the work.`, call44 = async (onDone) => {
|
|
381959
382046
|
const active = getSessionSyspromptOverride() === KAWAII_PROMPT;
|
|
381960
382047
|
if (active) {
|
|
381961
382048
|
setSessionSyspromptOverride(null);
|
|
@@ -382026,7 +382113,7 @@ var init_kawaii2 = __esm(() => {
|
|
|
382026
382113
|
// src/commands/caveman/caveman.tsx
|
|
382027
382114
|
var exports_caveman = {};
|
|
382028
382115
|
__export(exports_caveman, {
|
|
382029
|
-
call: () =>
|
|
382116
|
+
call: () => call45
|
|
382030
382117
|
});
|
|
382031
382118
|
var jsx_dev_runtime205, CAVEMAN_PROMPT = `You in CAVEMAN MODE. Save tokens. Cut words.
|
|
382032
382119
|
|
|
@@ -382051,7 +382138,7 @@ Hard rules survive:
|
|
|
382051
382138
|
- No invented files or APIs.
|
|
382052
382139
|
- Verify after writes.
|
|
382053
382140
|
|
|
382054
|
-
Tone: terse. Direct. Useful. Never confusing. Caveman, not cryptic.`,
|
|
382141
|
+
Tone: terse. Direct. Useful. Never confusing. Caveman, not cryptic.`, call45 = async (onDone) => {
|
|
382055
382142
|
const active = getSessionSyspromptOverride() === CAVEMAN_PROMPT;
|
|
382056
382143
|
if (active) {
|
|
382057
382144
|
setSessionSyspromptOverride(null);
|
|
@@ -382122,7 +382209,7 @@ var init_caveman2 = __esm(() => {
|
|
|
382122
382209
|
// src/commands/research-mode/research-mode.tsx
|
|
382123
382210
|
var exports_research_mode = {};
|
|
382124
382211
|
__export(exports_research_mode, {
|
|
382125
|
-
call: () =>
|
|
382212
|
+
call: () => call46
|
|
382126
382213
|
});
|
|
382127
382214
|
var jsx_dev_runtime206, RESEARCH_MODE_PROMPT = `You are operating in RESEARCH MODE.
|
|
382128
382215
|
|
|
@@ -382162,7 +382249,7 @@ Hard rules — these survive research mode:
|
|
|
382162
382249
|
Style:
|
|
382163
382250
|
- Lead with the answer; the citations come after.
|
|
382164
382251
|
- Don't narrate the search ("Let me search for…") — just do it and report.
|
|
382165
|
-
- One trailing line listing the sources you used.`,
|
|
382252
|
+
- One trailing line listing the sources you used.`, call46 = async (onDone) => {
|
|
382166
382253
|
const active = getSessionSyspromptOverride() === RESEARCH_MODE_PROMPT;
|
|
382167
382254
|
if (active) {
|
|
382168
382255
|
setSessionSyspromptOverride(null);
|
|
@@ -382681,9 +382768,9 @@ var init_webuiServer = __esm(() => {
|
|
|
382681
382768
|
// src/commands/webui/webui.tsx
|
|
382682
382769
|
var exports_webui = {};
|
|
382683
382770
|
__export(exports_webui, {
|
|
382684
|
-
call: () =>
|
|
382771
|
+
call: () => call47
|
|
382685
382772
|
});
|
|
382686
|
-
var jsx_dev_runtime207,
|
|
382773
|
+
var jsx_dev_runtime207, call47 = async (onDone) => {
|
|
382687
382774
|
const existingPort = getWebuiPort();
|
|
382688
382775
|
if (existingPort) {
|
|
382689
382776
|
broadcastNewWindow();
|
|
@@ -382774,7 +382861,7 @@ var init_webui2 = __esm(() => {
|
|
|
382774
382861
|
// src/commands/reindex-sessions/reindex-sessions.tsx
|
|
382775
382862
|
var exports_reindex_sessions = {};
|
|
382776
382863
|
__export(exports_reindex_sessions, {
|
|
382777
|
-
call: () =>
|
|
382864
|
+
call: () => call48
|
|
382778
382865
|
});
|
|
382779
382866
|
function Result2({
|
|
382780
382867
|
lines,
|
|
@@ -382805,7 +382892,7 @@ function Result2({
|
|
|
382805
382892
|
]
|
|
382806
382893
|
}, undefined, true, undefined, this);
|
|
382807
382894
|
}
|
|
382808
|
-
var React65, jsx_dev_runtime208,
|
|
382895
|
+
var React65, jsx_dev_runtime208, call48 = async (onDone) => {
|
|
382809
382896
|
const r = await rebuildIndex();
|
|
382810
382897
|
if (!r.available) {
|
|
382811
382898
|
return /* @__PURE__ */ jsx_dev_runtime208.jsxDEV(Result2, {
|
|
@@ -382898,7 +382985,7 @@ var init_windowsSetup = __esm(() => {
|
|
|
382898
382985
|
// src/commands/windows-setup/windows-setup.tsx
|
|
382899
382986
|
var exports_windows_setup = {};
|
|
382900
382987
|
__export(exports_windows_setup, {
|
|
382901
|
-
call: () =>
|
|
382988
|
+
call: () => call49
|
|
382902
382989
|
});
|
|
382903
382990
|
function ToolList({
|
|
382904
382991
|
onReady
|
|
@@ -383004,7 +383091,7 @@ function ToolList({
|
|
|
383004
383091
|
]
|
|
383005
383092
|
}, undefined, true, undefined, this);
|
|
383006
383093
|
}
|
|
383007
|
-
var React66, jsx_dev_runtime209,
|
|
383094
|
+
var React66, jsx_dev_runtime209, call49 = async (onDone) => {
|
|
383008
383095
|
return /* @__PURE__ */ jsx_dev_runtime209.jsxDEV(ToolList, {
|
|
383009
383096
|
onReady: () => onDone(undefined)
|
|
383010
383097
|
}, undefined, false, undefined, this);
|
|
@@ -383314,7 +383401,7 @@ var init_toolRpcServer = __esm(() => {
|
|
|
383314
383401
|
// src/commands/rpc/rpc.tsx
|
|
383315
383402
|
var exports_rpc = {};
|
|
383316
383403
|
__export(exports_rpc, {
|
|
383317
|
-
call: () =>
|
|
383404
|
+
call: () => call50
|
|
383318
383405
|
});
|
|
383319
383406
|
function RpcStatus({
|
|
383320
383407
|
port,
|
|
@@ -383448,7 +383535,7 @@ function RpcStatus({
|
|
|
383448
383535
|
]
|
|
383449
383536
|
}, undefined, true, undefined, this);
|
|
383450
383537
|
}
|
|
383451
|
-
var React67, jsx_dev_runtime210,
|
|
383538
|
+
var React67, jsx_dev_runtime210, call50 = async (onDone) => {
|
|
383452
383539
|
return /* @__PURE__ */ jsx_dev_runtime210.jsxDEV(RpcStatus, {
|
|
383453
383540
|
port: getRpcPort(),
|
|
383454
383541
|
onReady: () => onDone(undefined)
|
|
@@ -383482,7 +383569,7 @@ var init_rpc2 = __esm(() => {
|
|
|
383482
383569
|
var exports_heartbeat = {};
|
|
383483
383570
|
__export(exports_heartbeat, {
|
|
383484
383571
|
isHeartbeatActive: () => isHeartbeatActive,
|
|
383485
|
-
call: () =>
|
|
383572
|
+
call: () => call51
|
|
383486
383573
|
});
|
|
383487
383574
|
function isHeartbeatActive() {
|
|
383488
383575
|
return heartbeatActive;
|
|
@@ -383567,7 +383654,7 @@ var React68, jsx_dev_runtime211, heartbeatInterval = 5, heartbeatBeat = 0, heart
|
|
|
383567
383654
|
• Look for quick wins: small bugs, missing tests, stale docs
|
|
383568
383655
|
• Write notes to memory files about important patterns you notice
|
|
383569
383656
|
• Explore anything that interests you and might be useful
|
|
383570
|
-
• Send a Telegram update about what you found / did`,
|
|
383657
|
+
• Send a Telegram update about what you found / did`, call51 = async (onDone, context7, args) => {
|
|
383571
383658
|
const rawArgs = args?.trim() ?? "";
|
|
383572
383659
|
const { extractChain: extractChain2, validateCommandChain: validateCommandChain2, parseCommandChain: parseCommandChain2, chainWarning: chainWarning2 } = await Promise.resolve().then(() => (init_commandChaining(), exports_commandChaining));
|
|
383573
383660
|
const { ownArgs: chainedArgs } = extractChain2(rawArgs);
|
|
@@ -383692,7 +383779,7 @@ var init_heartbeat2 = __esm(() => {
|
|
|
383692
383779
|
// src/commands/sysprompt/sysprompt.tsx
|
|
383693
383780
|
var exports_sysprompt = {};
|
|
383694
383781
|
__export(exports_sysprompt, {
|
|
383695
|
-
call: () =>
|
|
383782
|
+
call: () => call52
|
|
383696
383783
|
});
|
|
383697
383784
|
function SyspromptResult({
|
|
383698
383785
|
message,
|
|
@@ -383713,7 +383800,7 @@ function SyspromptResult({
|
|
|
383713
383800
|
}, undefined, false, undefined, this)
|
|
383714
383801
|
}, undefined, false, undefined, this);
|
|
383715
383802
|
}
|
|
383716
|
-
var React69, jsx_dev_runtime212,
|
|
383803
|
+
var React69, jsx_dev_runtime212, call52 = async (onDone, _context, args) => {
|
|
383717
383804
|
const trimmed = args?.trim() ?? "";
|
|
383718
383805
|
if (!trimmed) {
|
|
383719
383806
|
const current = getSessionSyspromptOverride();
|
|
@@ -383772,7 +383859,7 @@ var init_sysprompt2 = __esm(() => {
|
|
|
383772
383859
|
// src/commands/ctx/ctx.tsx
|
|
383773
383860
|
var exports_ctx = {};
|
|
383774
383861
|
__export(exports_ctx, {
|
|
383775
|
-
call: () =>
|
|
383862
|
+
call: () => call53
|
|
383776
383863
|
});
|
|
383777
383864
|
function CtxDisplay({
|
|
383778
383865
|
lines,
|
|
@@ -383806,7 +383893,7 @@ function barLine(used, total, width = 40) {
|
|
|
383806
383893
|
const color3 = pct2 > 0.85 ? "█" : "▓";
|
|
383807
383894
|
return `[${"█".repeat(filled)}${" ".repeat(empty)}] ${Math.round(pct2 * 100)}%`;
|
|
383808
383895
|
}
|
|
383809
|
-
var React70, jsx_dev_runtime213,
|
|
383896
|
+
var React70, jsx_dev_runtime213, call53 = async (onDone, context7, args) => {
|
|
383810
383897
|
const parts = (args ?? "").trim().split(/\s+/).filter(Boolean);
|
|
383811
383898
|
const sub = parts[0]?.toLowerCase();
|
|
383812
383899
|
const model = context7.options.mainLoopModel;
|
|
@@ -383958,9 +384045,9 @@ var init_ctx2 = __esm(() => {
|
|
|
383958
384045
|
// src/commands/ctx/contextsize.tsx
|
|
383959
384046
|
var exports_contextsize = {};
|
|
383960
384047
|
__export(exports_contextsize, {
|
|
383961
|
-
call: () =>
|
|
384048
|
+
call: () => call54
|
|
383962
384049
|
});
|
|
383963
|
-
var
|
|
384050
|
+
var call54 = async (onDone, context7, args) => {
|
|
383964
384051
|
const value = (args ?? "").trim();
|
|
383965
384052
|
const { call: ctxCall } = await Promise.resolve().then(() => (init_ctx(), exports_ctx));
|
|
383966
384053
|
if (value) {
|
|
@@ -383985,7 +384072,7 @@ var init_contextsize_index = __esm(() => {
|
|
|
383985
384072
|
// src/commands/research/research.tsx
|
|
383986
384073
|
var exports_research = {};
|
|
383987
384074
|
__export(exports_research, {
|
|
383988
|
-
call: () =>
|
|
384075
|
+
call: () => call55
|
|
383989
384076
|
});
|
|
383990
384077
|
function buildResearchPrompt(topic, thinkHarder) {
|
|
383991
384078
|
const thinkHarderSection = thinkHarder ? `
|
|
@@ -384094,7 +384181,7 @@ function ResearchWarning({
|
|
|
384094
384181
|
}, undefined, false, undefined, this)
|
|
384095
384182
|
}, undefined, false, undefined, this);
|
|
384096
384183
|
}
|
|
384097
|
-
var React71, jsx_dev_runtime214,
|
|
384184
|
+
var React71, jsx_dev_runtime214, call55 = async (onDone, _context, args) => {
|
|
384098
384185
|
const rawArgs = args?.trim() ?? "";
|
|
384099
384186
|
const { ownArgs: topic, nextCmd } = extractChain(rawArgs);
|
|
384100
384187
|
if (!topic) {
|
|
@@ -384653,10 +384740,10 @@ var init_MemoryFileSelector = __esm(() => {
|
|
|
384653
384740
|
});
|
|
384654
384741
|
|
|
384655
384742
|
// src/components/memory/MemoryUpdateNotification.tsx
|
|
384656
|
-
import { homedir as
|
|
384743
|
+
import { homedir as homedir30 } from "os";
|
|
384657
384744
|
import { relative as relative24 } from "path";
|
|
384658
384745
|
function getRelativeMemoryPath(path12) {
|
|
384659
|
-
const homeDir =
|
|
384746
|
+
const homeDir = homedir30();
|
|
384660
384747
|
const cwd2 = getCwd();
|
|
384661
384748
|
const relativeToHome = path12.startsWith(homeDir) ? "~" + path12.slice(homeDir.length) : null;
|
|
384662
384749
|
const relativeToCwd = path12.startsWith(cwd2) ? "./" + relative24(cwd2, path12) : null;
|
|
@@ -384901,7 +384988,7 @@ var init_promptEditor = __esm(() => {
|
|
|
384901
384988
|
// src/commands/memory/memory.tsx
|
|
384902
384989
|
var exports_memory = {};
|
|
384903
384990
|
__export(exports_memory, {
|
|
384904
|
-
call: () =>
|
|
384991
|
+
call: () => call56
|
|
384905
384992
|
});
|
|
384906
384993
|
import { mkdir as mkdir49, writeFile as writeFile50 } from "fs/promises";
|
|
384907
384994
|
function MemoryCommand({
|
|
@@ -384981,7 +385068,7 @@ ${editorHint}`, {
|
|
|
384981
385068
|
}, undefined, true, undefined, this)
|
|
384982
385069
|
}, undefined, false, undefined, this);
|
|
384983
385070
|
}
|
|
384984
|
-
var React72, jsx_dev_runtime217,
|
|
385071
|
+
var React72, jsx_dev_runtime217, call56 = async (onDone) => {
|
|
384985
385072
|
clearMemoryFileCaches();
|
|
384986
385073
|
await getMemoryFiles();
|
|
384987
385074
|
return /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(MemoryCommand, {
|
|
@@ -385837,7 +385924,7 @@ function Help(t0) {
|
|
|
385837
385924
|
let t6;
|
|
385838
385925
|
if ($2[31] !== tabs) {
|
|
385839
385926
|
t6 = /* @__PURE__ */ jsx_dev_runtime221.jsxDEV(Tabs, {
|
|
385840
|
-
title: `localclawd v${"1.9.
|
|
385927
|
+
title: `localclawd v${"1.9.8"}`,
|
|
385841
385928
|
color: "professionalBlue",
|
|
385842
385929
|
defaultTab: "general",
|
|
385843
385930
|
children: tabs
|
|
@@ -385943,9 +386030,9 @@ var init_Help = __esm(() => {
|
|
|
385943
386030
|
// src/commands/help/help.tsx
|
|
385944
386031
|
var exports_help = {};
|
|
385945
386032
|
__export(exports_help, {
|
|
385946
|
-
call: () =>
|
|
386033
|
+
call: () => call57
|
|
385947
386034
|
});
|
|
385948
|
-
var jsx_dev_runtime222,
|
|
386035
|
+
var jsx_dev_runtime222, call57 = async (onDone, {
|
|
385949
386036
|
options: {
|
|
385950
386037
|
commands
|
|
385951
386038
|
}
|
|
@@ -386152,7 +386239,7 @@ var init_IdeAutoConnectDialog = __esm(() => {
|
|
|
386152
386239
|
var exports_ide = {};
|
|
386153
386240
|
__export(exports_ide, {
|
|
386154
386241
|
formatWorkspaceFolders: () => formatWorkspaceFolders,
|
|
386155
|
-
call: () =>
|
|
386242
|
+
call: () => call58
|
|
386156
386243
|
});
|
|
386157
386244
|
import * as path12 from "path";
|
|
386158
386245
|
function IDEScreen(t0) {
|
|
@@ -386630,7 +386717,7 @@ function InstallOnMount(t0) {
|
|
|
386630
386717
|
import_react113.useEffect(t1, t2);
|
|
386631
386718
|
return null;
|
|
386632
386719
|
}
|
|
386633
|
-
async function
|
|
386720
|
+
async function call58(onDone, context7, args) {
|
|
386634
386721
|
logEvent("tengu_ext_ide_command", {});
|
|
386635
386722
|
const {
|
|
386636
386723
|
options: {
|
|
@@ -387213,11 +387300,11 @@ var init_template = __esm(() => {
|
|
|
387213
387300
|
// src/commands/keybindings/keybindings.ts
|
|
387214
387301
|
var exports_keybindings = {};
|
|
387215
387302
|
__export(exports_keybindings, {
|
|
387216
|
-
call: () =>
|
|
387303
|
+
call: () => call59
|
|
387217
387304
|
});
|
|
387218
387305
|
import { mkdir as mkdir50, writeFile as writeFile51 } from "fs/promises";
|
|
387219
387306
|
import { dirname as dirname47 } from "path";
|
|
387220
|
-
async function
|
|
387307
|
+
async function call59() {
|
|
387221
387308
|
if (!isKeybindingCustomizationEnabled()) {
|
|
387222
387309
|
return {
|
|
387223
387310
|
type: "text",
|
|
@@ -391705,7 +391792,7 @@ var init_pluginStartupCheck = __esm(() => {
|
|
|
391705
391792
|
});
|
|
391706
391793
|
|
|
391707
391794
|
// src/utils/plugins/parseMarketplaceInput.ts
|
|
391708
|
-
import { homedir as
|
|
391795
|
+
import { homedir as homedir31 } from "os";
|
|
391709
391796
|
import { resolve as resolve39 } from "path";
|
|
391710
391797
|
async function parseMarketplaceInput(input) {
|
|
391711
391798
|
const trimmed = input.trim();
|
|
@@ -391741,7 +391828,7 @@ async function parseMarketplaceInput(input) {
|
|
|
391741
391828
|
const isWindows3 = process.platform === "win32";
|
|
391742
391829
|
const isWindowsPath = isWindows3 && (trimmed.startsWith(".\\") || trimmed.startsWith("..\\") || /^[a-zA-Z]:[/\\]/.test(trimmed));
|
|
391743
391830
|
if (trimmed.startsWith("./") || trimmed.startsWith("../") || trimmed.startsWith("/") || trimmed.startsWith("~") || isWindowsPath) {
|
|
391744
|
-
const resolvedPath = resolve39(trimmed.startsWith("~") ? trimmed.replace(/^~/,
|
|
391831
|
+
const resolvedPath = resolve39(trimmed.startsWith("~") ? trimmed.replace(/^~/, homedir31()) : trimmed);
|
|
391745
391832
|
let stats;
|
|
391746
391833
|
try {
|
|
391747
391834
|
stats = await fs4.stat(resolvedPath);
|
|
@@ -401748,7 +401835,7 @@ var init_PluginSettings = __esm(() => {
|
|
|
401748
401835
|
// src/commands/mcp/mcp.tsx
|
|
401749
401836
|
var exports_mcp = {};
|
|
401750
401837
|
__export(exports_mcp, {
|
|
401751
|
-
call: () =>
|
|
401838
|
+
call: () => call60
|
|
401752
401839
|
});
|
|
401753
401840
|
function MCPToggle(t0) {
|
|
401754
401841
|
const $2 = c3(7);
|
|
@@ -401801,7 +401888,7 @@ function _temp239(c5) {
|
|
|
401801
401888
|
function _temp100(s) {
|
|
401802
401889
|
return s.mcp.clients;
|
|
401803
401890
|
}
|
|
401804
|
-
async function
|
|
401891
|
+
async function call60(onDone, _context, args) {
|
|
401805
401892
|
if (args) {
|
|
401806
401893
|
const parts = args.trim().split(/\s+/);
|
|
401807
401894
|
if (parts[0] === "no-redirect") {
|
|
@@ -402422,9 +402509,9 @@ var init_createSession = __esm(() => {
|
|
|
402422
402509
|
// src/commands/rename/rename.ts
|
|
402423
402510
|
var exports_rename = {};
|
|
402424
402511
|
__export(exports_rename, {
|
|
402425
|
-
call: () =>
|
|
402512
|
+
call: () => call61
|
|
402426
402513
|
});
|
|
402427
|
-
async function
|
|
402514
|
+
async function call61(onDone, context7, args) {
|
|
402428
402515
|
if (isTeammate()) {
|
|
402429
402516
|
onDone("Cannot rename: This session is a swarm teammate. Teammate names are set by the team leader.", { display: "system" });
|
|
402430
402517
|
return null;
|
|
@@ -403099,7 +403186,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
|
|
|
403099
403186
|
}
|
|
403100
403187
|
return [];
|
|
403101
403188
|
}
|
|
403102
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.
|
|
403189
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.8") {
|
|
403103
403190
|
if (process.env.USER_TYPE === "ant") {
|
|
403104
403191
|
const changelog = MACRO.VERSION_CHANGELOG;
|
|
403105
403192
|
if (changelog) {
|
|
@@ -403126,7 +403213,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.1") {
|
|
|
403126
403213
|
releaseNotes
|
|
403127
403214
|
};
|
|
403128
403215
|
}
|
|
403129
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.9.
|
|
403216
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.9.8") {
|
|
403130
403217
|
if (process.env.USER_TYPE === "ant") {
|
|
403131
403218
|
const changelog = MACRO.VERSION_CHANGELOG;
|
|
403132
403219
|
if (changelog) {
|
|
@@ -403283,7 +403370,7 @@ function getRecentActivitySync() {
|
|
|
403283
403370
|
return cachedActivity;
|
|
403284
403371
|
}
|
|
403285
403372
|
function getLogoDisplayData() {
|
|
403286
|
-
const version = process.env.DEMO_VERSION ?? "1.9.
|
|
403373
|
+
const version = process.env.DEMO_VERSION ?? "1.9.8";
|
|
403287
403374
|
const serverUrl = getDirectConnectServerUrl();
|
|
403288
403375
|
const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
|
|
403289
403376
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -403789,7 +403876,7 @@ var init_referral = __esm(() => {
|
|
|
403789
403876
|
});
|
|
403790
403877
|
|
|
403791
403878
|
// src/components/Logo/feedConfigs.tsx
|
|
403792
|
-
import { homedir as
|
|
403879
|
+
import { homedir as homedir32 } from "os";
|
|
403793
403880
|
function createRecentActivityFeed(activities) {
|
|
403794
403881
|
const lines = activities.map((log2) => {
|
|
403795
403882
|
const time = formatRelativeTimeAgo(log2.modified);
|
|
@@ -403834,7 +403921,7 @@ function createProjectOnboardingFeed(steps) {
|
|
|
403834
403921
|
text: `${checkmark}${text}`
|
|
403835
403922
|
};
|
|
403836
403923
|
});
|
|
403837
|
-
const warningText = getCwd() ===
|
|
403924
|
+
const warningText = getCwd() === homedir32() ? "Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead." : undefined;
|
|
403838
403925
|
if (warningText) {
|
|
403839
403926
|
lines.push({
|
|
403840
403927
|
text: warningText
|
|
@@ -404383,7 +404470,7 @@ function Logo() {
|
|
|
404383
404470
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
404384
404471
|
t2 = () => {
|
|
404385
404472
|
const currentConfig = getGlobalConfig();
|
|
404386
|
-
if (currentConfig.lastReleaseNotesSeen === "1.9.
|
|
404473
|
+
if (currentConfig.lastReleaseNotesSeen === "1.9.8") {
|
|
404387
404474
|
return;
|
|
404388
404475
|
}
|
|
404389
404476
|
saveGlobalConfig(_temp326);
|
|
@@ -405042,12 +405129,12 @@ function Logo() {
|
|
|
405042
405129
|
return t41;
|
|
405043
405130
|
}
|
|
405044
405131
|
function _temp326(current) {
|
|
405045
|
-
if (current.lastReleaseNotesSeen === "1.9.
|
|
405132
|
+
if (current.lastReleaseNotesSeen === "1.9.8") {
|
|
405046
405133
|
return current;
|
|
405047
405134
|
}
|
|
405048
405135
|
return {
|
|
405049
405136
|
...current,
|
|
405050
|
-
lastReleaseNotesSeen: "1.9.
|
|
405137
|
+
lastReleaseNotesSeen: "1.9.8"
|
|
405051
405138
|
};
|
|
405052
405139
|
}
|
|
405053
405140
|
function _temp241(s_0) {
|
|
@@ -410940,7 +411027,7 @@ var init_crossProjectResume = __esm(() => {
|
|
|
410940
411027
|
var exports_resume = {};
|
|
410941
411028
|
__export(exports_resume, {
|
|
410942
411029
|
filterResumableSessions: () => filterResumableSessions,
|
|
410943
|
-
call: () =>
|
|
411030
|
+
call: () => call62
|
|
410944
411031
|
});
|
|
410945
411032
|
function resumeHelpMessage(result) {
|
|
410946
411033
|
switch (result.resultType) {
|
|
@@ -411125,7 +411212,7 @@ function ResumeCommand({
|
|
|
411125
411212
|
function filterResumableSessions(logs2, currentSessionId) {
|
|
411126
411213
|
return logs2.filter((l) => !l.isSidechain && getSessionIdFromLog(l) !== currentSessionId);
|
|
411127
411214
|
}
|
|
411128
|
-
var React97, jsx_dev_runtime273,
|
|
411215
|
+
var React97, jsx_dev_runtime273, call62 = async (onDone, context7, args) => {
|
|
411129
411216
|
const onResume = async (sessionId, log2, entrypoint) => {
|
|
411130
411217
|
try {
|
|
411131
411218
|
await context7.resume?.(sessionId, log2, entrypoint);
|
|
@@ -411615,7 +411702,7 @@ var init_UltrareviewOverageDialog = __esm(() => {
|
|
|
411615
411702
|
// src/commands/review/ultrareviewCommand.tsx
|
|
411616
411703
|
var exports_ultrareviewCommand = {};
|
|
411617
411704
|
__export(exports_ultrareviewCommand, {
|
|
411618
|
-
call: () =>
|
|
411705
|
+
call: () => call63
|
|
411619
411706
|
});
|
|
411620
411707
|
function contentBlocksToString(blocks) {
|
|
411621
411708
|
return blocks.map((b3) => b3.type === "text" ? b3.text : "").filter(Boolean).join(`
|
|
@@ -411635,7 +411722,7 @@ async function launchAndDone(args, context7, onDone, billingNote, signal2) {
|
|
|
411635
411722
|
});
|
|
411636
411723
|
}
|
|
411637
411724
|
}
|
|
411638
|
-
var jsx_dev_runtime275,
|
|
411725
|
+
var jsx_dev_runtime275, call63 = async (onDone, context7, args) => {
|
|
411639
411726
|
const gate = await checkOverageGate();
|
|
411640
411727
|
if (gate.kind === "not-enabled") {
|
|
411641
411728
|
onDone("Free ultrareviews used. This feature requires a cloud subscription.", {
|
|
@@ -415961,7 +416048,7 @@ var init_server = __esm(() => {
|
|
|
415961
416048
|
// src/commands/session/session.tsx
|
|
415962
416049
|
var exports_session = {};
|
|
415963
416050
|
__export(exports_session, {
|
|
415964
|
-
call: () =>
|
|
416051
|
+
call: () => call64
|
|
415965
416052
|
});
|
|
415966
416053
|
function SessionInfo(t0) {
|
|
415967
416054
|
const $2 = c3(19);
|
|
@@ -416134,7 +416221,7 @@ function _temp247(e) {
|
|
|
416134
416221
|
function _temp119(s) {
|
|
416135
416222
|
return s.remoteSessionUrl;
|
|
416136
416223
|
}
|
|
416137
|
-
var import_react150, jsx_dev_runtime276,
|
|
416224
|
+
var import_react150, jsx_dev_runtime276, call64 = async (onDone) => {
|
|
416138
416225
|
return /* @__PURE__ */ jsx_dev_runtime276.jsxDEV(SessionInfo, {
|
|
416139
416226
|
onDone
|
|
416140
416227
|
}, undefined, false, undefined, this);
|
|
@@ -416490,9 +416577,9 @@ var init_SkillsMenu = __esm(() => {
|
|
|
416490
416577
|
// src/commands/skills/skills.tsx
|
|
416491
416578
|
var exports_skills2 = {};
|
|
416492
416579
|
__export(exports_skills2, {
|
|
416493
|
-
call: () =>
|
|
416580
|
+
call: () => call65
|
|
416494
416581
|
});
|
|
416495
|
-
async function
|
|
416582
|
+
async function call65(onDone, context7) {
|
|
416496
416583
|
return /* @__PURE__ */ jsx_dev_runtime278.jsxDEV(SkillsMenu, {
|
|
416497
416584
|
onExit: onDone,
|
|
416498
416585
|
commands: context7.options.commands
|
|
@@ -416519,9 +416606,9 @@ var init_skills3 = __esm(() => {
|
|
|
416519
416606
|
// src/commands/status/status.tsx
|
|
416520
416607
|
var exports_status = {};
|
|
416521
416608
|
__export(exports_status, {
|
|
416522
|
-
call: () =>
|
|
416609
|
+
call: () => call66
|
|
416523
416610
|
});
|
|
416524
|
-
async function
|
|
416611
|
+
async function call66(onDone, context7) {
|
|
416525
416612
|
return /* @__PURE__ */ jsx_dev_runtime279.jsxDEV(Settings, {
|
|
416526
416613
|
onClose: onDone,
|
|
416527
416614
|
context: context7,
|
|
@@ -417132,7 +417219,7 @@ ${reasons}`,
|
|
|
417132
417219
|
} : prev);
|
|
417133
417220
|
}
|
|
417134
417221
|
}
|
|
417135
|
-
var ULTRAPLAN_TIMEOUT_MS, CCR_TERMS_URL2 = "https://github.com/chromebookwiz/localclawd", _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS,
|
|
417222
|
+
var ULTRAPLAN_TIMEOUT_MS, CCR_TERMS_URL2 = "https://github.com/chromebookwiz/localclawd", _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS, call67 = async (onDone, context7, args) => {
|
|
417136
417223
|
const blurb = args.trim();
|
|
417137
417224
|
if (!blurb) {
|
|
417138
417225
|
const msg = await launchUltraplan2({
|
|
@@ -417193,7 +417280,7 @@ var init_ultraplan = __esm(() => {
|
|
|
417193
417280
|
argumentHint: "<prompt>",
|
|
417194
417281
|
isEnabled: () => false,
|
|
417195
417282
|
load: () => Promise.resolve({
|
|
417196
|
-
call:
|
|
417283
|
+
call: call67
|
|
417197
417284
|
})
|
|
417198
417285
|
};
|
|
417199
417286
|
});
|
|
@@ -421955,9 +422042,9 @@ var init_BackgroundTasksDialog = __esm(() => {
|
|
|
421955
422042
|
// src/commands/tasks/tasks.tsx
|
|
421956
422043
|
var exports_tasks = {};
|
|
421957
422044
|
__export(exports_tasks, {
|
|
421958
|
-
call: () =>
|
|
422045
|
+
call: () => call68
|
|
421959
422046
|
});
|
|
421960
|
-
async function
|
|
422047
|
+
async function call68(onDone, context7) {
|
|
421961
422048
|
return /* @__PURE__ */ jsx_dev_runtime290.jsxDEV(BackgroundTasksDialog, {
|
|
421962
422049
|
toolUseContext: context7,
|
|
421963
422050
|
onDone
|
|
@@ -422248,9 +422335,9 @@ var init_terminalSetup2 = __esm(() => {
|
|
|
422248
422335
|
// src/commands/usage/usage.tsx
|
|
422249
422336
|
var exports_usage = {};
|
|
422250
422337
|
__export(exports_usage, {
|
|
422251
|
-
call: () =>
|
|
422338
|
+
call: () => call69
|
|
422252
422339
|
});
|
|
422253
|
-
var jsx_dev_runtime291,
|
|
422340
|
+
var jsx_dev_runtime291, call69 = async (onDone, context7) => {
|
|
422254
422341
|
return /* @__PURE__ */ jsx_dev_runtime291.jsxDEV(Settings, {
|
|
422255
422342
|
onClose: onDone,
|
|
422256
422343
|
context: context7,
|
|
@@ -422281,7 +422368,7 @@ var init_usage3 = __esm(() => {
|
|
|
422281
422368
|
// src/commands/theme/theme.tsx
|
|
422282
422369
|
var exports_theme = {};
|
|
422283
422370
|
__export(exports_theme, {
|
|
422284
|
-
call: () =>
|
|
422371
|
+
call: () => call70
|
|
422285
422372
|
});
|
|
422286
422373
|
function ThemePickerCommand(t0) {
|
|
422287
422374
|
const $2 = c3(8);
|
|
@@ -422331,7 +422418,7 @@ function ThemePickerCommand(t0) {
|
|
|
422331
422418
|
}
|
|
422332
422419
|
return t3;
|
|
422333
422420
|
}
|
|
422334
|
-
var jsx_dev_runtime292,
|
|
422421
|
+
var jsx_dev_runtime292, call70 = async (onDone, _context) => {
|
|
422335
422422
|
return /* @__PURE__ */ jsx_dev_runtime292.jsxDEV(ThemePickerCommand, {
|
|
422336
422423
|
onDone
|
|
422337
422424
|
}, undefined, false, undefined, this);
|
|
@@ -422358,9 +422445,9 @@ var init_theme3 = __esm(() => {
|
|
|
422358
422445
|
// src/commands/vim/vim.ts
|
|
422359
422446
|
var exports_vim = {};
|
|
422360
422447
|
__export(exports_vim, {
|
|
422361
|
-
call: () =>
|
|
422448
|
+
call: () => call71
|
|
422362
422449
|
});
|
|
422363
|
-
var
|
|
422450
|
+
var call71 = async () => {
|
|
422364
422451
|
const config2 = getGlobalConfig();
|
|
422365
422452
|
let currentMode = config2.editorMode || "normal";
|
|
422366
422453
|
if (currentMode === "emacs") {
|
|
@@ -422401,7 +422488,7 @@ var init_vim2 = __esm(() => {
|
|
|
422401
422488
|
var exports_thinkback = {};
|
|
422402
422489
|
__export(exports_thinkback, {
|
|
422403
422490
|
playAnimation: () => playAnimation,
|
|
422404
|
-
call: () =>
|
|
422491
|
+
call: () => call72
|
|
422405
422492
|
});
|
|
422406
422493
|
import { execa as execa11 } from "execa";
|
|
422407
422494
|
import { readFile as readFile61 } from "fs/promises";
|
|
@@ -422939,7 +423026,7 @@ function ThinkbackFlow(t0) {
|
|
|
422939
423026
|
}
|
|
422940
423027
|
return t8;
|
|
422941
423028
|
}
|
|
422942
|
-
async function
|
|
423029
|
+
async function call72(onDone) {
|
|
422943
423030
|
return /* @__PURE__ */ jsx_dev_runtime293.jsxDEV(ThinkbackFlow, {
|
|
422944
423031
|
onDone
|
|
422945
423032
|
}, undefined, false, undefined, this);
|
|
@@ -422984,14 +423071,14 @@ var init_thinkback2 = __esm(() => {
|
|
|
422984
423071
|
// src/commands/thinkback-play/thinkback-play.ts
|
|
422985
423072
|
var exports_thinkback_play = {};
|
|
422986
423073
|
__export(exports_thinkback_play, {
|
|
422987
|
-
call: () =>
|
|
423074
|
+
call: () => call73
|
|
422988
423075
|
});
|
|
422989
423076
|
import { join as join139 } from "path";
|
|
422990
423077
|
function getPluginId2() {
|
|
422991
423078
|
const marketplaceName = process.env.USER_TYPE === "ant" ? INTERNAL_MARKETPLACE_NAME : OFFICIAL_MARKETPLACE_NAME;
|
|
422992
423079
|
return `thinkback@${marketplaceName}`;
|
|
422993
423080
|
}
|
|
422994
|
-
async function
|
|
423081
|
+
async function call73() {
|
|
422995
423082
|
const v2Data = loadInstalledPluginsV2();
|
|
422996
423083
|
const pluginId = getPluginId2();
|
|
422997
423084
|
const installations = v2Data.plugins[pluginId];
|
|
@@ -425479,9 +425566,9 @@ var init_PermissionRuleList = __esm(() => {
|
|
|
425479
425566
|
// src/commands/permissions/permissions.tsx
|
|
425480
425567
|
var exports_permissions = {};
|
|
425481
425568
|
__export(exports_permissions, {
|
|
425482
|
-
call: () =>
|
|
425569
|
+
call: () => call74
|
|
425483
425570
|
});
|
|
425484
|
-
var jsx_dev_runtime301,
|
|
425571
|
+
var jsx_dev_runtime301, call74 = async (onDone, context7) => {
|
|
425485
425572
|
return /* @__PURE__ */ jsx_dev_runtime301.jsxDEV(PermissionRuleList, {
|
|
425486
425573
|
onExit: onDone,
|
|
425487
425574
|
onRetryDenials: (commands) => {
|
|
@@ -425511,7 +425598,7 @@ var init_permissions4 = __esm(() => {
|
|
|
425511
425598
|
// src/commands/plan/plan.tsx
|
|
425512
425599
|
var exports_plan = {};
|
|
425513
425600
|
__export(exports_plan, {
|
|
425514
|
-
call: () =>
|
|
425601
|
+
call: () => call75
|
|
425515
425602
|
});
|
|
425516
425603
|
function PlanDisplay(t0) {
|
|
425517
425604
|
const $2 = c3(11);
|
|
@@ -425599,7 +425686,7 @@ function PlanDisplay(t0) {
|
|
|
425599
425686
|
}
|
|
425600
425687
|
return t5;
|
|
425601
425688
|
}
|
|
425602
|
-
async function
|
|
425689
|
+
async function call75(onDone, context7, args) {
|
|
425603
425690
|
const {
|
|
425604
425691
|
getAppState,
|
|
425605
425692
|
setAppState
|
|
@@ -425741,7 +425828,7 @@ var init_FastIcon = __esm(() => {
|
|
|
425741
425828
|
// src/commands/fast/fast.tsx
|
|
425742
425829
|
var exports_fast = {};
|
|
425743
425830
|
__export(exports_fast, {
|
|
425744
|
-
call: () =>
|
|
425831
|
+
call: () => call76,
|
|
425745
425832
|
FastModePicker: () => FastModePicker
|
|
425746
425833
|
});
|
|
425747
425834
|
function applyFastMode(enable, setAppState) {
|
|
@@ -426056,7 +426143,7 @@ async function handleFastModeShortcut(enable, getAppState, setAppState) {
|
|
|
426056
426143
|
return `Fast mode OFF`;
|
|
426057
426144
|
}
|
|
426058
426145
|
}
|
|
426059
|
-
async function
|
|
426146
|
+
async function call76(onDone, context7, args) {
|
|
426060
426147
|
if (!isFastModeEnabled()) {
|
|
426061
426148
|
return null;
|
|
426062
426149
|
}
|
|
@@ -426364,9 +426451,9 @@ var init_Passes = __esm(() => {
|
|
|
426364
426451
|
// src/commands/passes/passes.tsx
|
|
426365
426452
|
var exports_passes = {};
|
|
426366
426453
|
__export(exports_passes, {
|
|
426367
|
-
call: () =>
|
|
426454
|
+
call: () => call77
|
|
426368
426455
|
});
|
|
426369
|
-
async function
|
|
426456
|
+
async function call77(onDone) {
|
|
426370
426457
|
const config2 = getGlobalConfig();
|
|
426371
426458
|
const isFirstVisit = !config2.hasVisitedPasses;
|
|
426372
426459
|
if (isFirstVisit) {
|
|
@@ -427128,9 +427215,9 @@ var init_Grove = __esm(() => {
|
|
|
427128
427215
|
// src/commands/privacy-settings/privacy-settings.tsx
|
|
427129
427216
|
var exports_privacy_settings = {};
|
|
427130
427217
|
__export(exports_privacy_settings, {
|
|
427131
|
-
call: () =>
|
|
427218
|
+
call: () => call78
|
|
427132
427219
|
});
|
|
427133
|
-
async function
|
|
427220
|
+
async function call78(onDone) {
|
|
427134
427221
|
const qualified = await isQualifiedForGrove();
|
|
427135
427222
|
if (!qualified) {
|
|
427136
427223
|
onDone(FALLBACK_MESSAGE);
|
|
@@ -428970,9 +429057,9 @@ var init_HooksConfigMenu = __esm(() => {
|
|
|
428970
429057
|
// src/commands/hooks/hooks.tsx
|
|
428971
429058
|
var exports_hooks = {};
|
|
428972
429059
|
__export(exports_hooks, {
|
|
428973
|
-
call: () =>
|
|
429060
|
+
call: () => call79
|
|
428974
429061
|
});
|
|
428975
|
-
var jsx_dev_runtime314,
|
|
429062
|
+
var jsx_dev_runtime314, call79 = async (onDone, context7) => {
|
|
428976
429063
|
logEvent("tengu_hooks_command", {});
|
|
428977
429064
|
const appState = context7.getAppState();
|
|
428978
429065
|
const permissionContext = appState.toolPermissionContext;
|
|
@@ -429004,10 +429091,10 @@ var init_hooks3 = __esm(() => {
|
|
|
429004
429091
|
// src/commands/files/files.ts
|
|
429005
429092
|
var exports_files2 = {};
|
|
429006
429093
|
__export(exports_files2, {
|
|
429007
|
-
call: () =>
|
|
429094
|
+
call: () => call80
|
|
429008
429095
|
});
|
|
429009
429096
|
import { relative as relative26 } from "path";
|
|
429010
|
-
async function
|
|
429097
|
+
async function call80(_args, context7) {
|
|
429011
429098
|
const files = context7.readFileState ? cacheKeys(context7.readFileState) : [];
|
|
429012
429099
|
if (files.length === 0) {
|
|
429013
429100
|
return { type: "text", value: "No files in context" };
|
|
@@ -429040,7 +429127,7 @@ var init_files4 = __esm(() => {
|
|
|
429040
429127
|
var exports_branch = {};
|
|
429041
429128
|
__export(exports_branch, {
|
|
429042
429129
|
deriveFirstPrompt: () => deriveFirstPrompt,
|
|
429043
|
-
call: () =>
|
|
429130
|
+
call: () => call81
|
|
429044
429131
|
});
|
|
429045
429132
|
import { randomUUID as randomUUID27 } from "crypto";
|
|
429046
429133
|
import { mkdir as mkdir52, readFile as readFile62, writeFile as writeFile55 } from "fs/promises";
|
|
@@ -429146,7 +429233,7 @@ async function getUniqueForkName(baseName) {
|
|
|
429146
429233
|
}
|
|
429147
429234
|
return `${baseName} (Branch ${nextNumber})`;
|
|
429148
429235
|
}
|
|
429149
|
-
async function
|
|
429236
|
+
async function call81(onDone, context7, args) {
|
|
429150
429237
|
const customTitle = args?.trim() || undefined;
|
|
429151
429238
|
const originalSessionId = getSessionId();
|
|
429152
429239
|
try {
|
|
@@ -435161,9 +435248,9 @@ var init_AgentsMenu = __esm(() => {
|
|
|
435161
435248
|
// src/commands/agents/agents.tsx
|
|
435162
435249
|
var exports_agents = {};
|
|
435163
435250
|
__export(exports_agents, {
|
|
435164
|
-
call: () =>
|
|
435251
|
+
call: () => call82
|
|
435165
435252
|
});
|
|
435166
|
-
async function
|
|
435253
|
+
async function call82(onDone, context7) {
|
|
435167
435254
|
const appState = context7.getAppState();
|
|
435168
435255
|
const permissionContext = appState.toolPermissionContext;
|
|
435169
435256
|
const tools = getTools(permissionContext);
|
|
@@ -435194,9 +435281,9 @@ var init_agents2 = __esm(() => {
|
|
|
435194
435281
|
// src/commands/plugin/plugin.tsx
|
|
435195
435282
|
var exports_plugin = {};
|
|
435196
435283
|
__export(exports_plugin, {
|
|
435197
|
-
call: () =>
|
|
435284
|
+
call: () => call83
|
|
435198
435285
|
});
|
|
435199
|
-
async function
|
|
435286
|
+
async function call83(onDone, _context, args) {
|
|
435200
435287
|
return /* @__PURE__ */ jsx_dev_runtime340.jsxDEV(PluginSettings, {
|
|
435201
435288
|
onComplete: onDone,
|
|
435202
435289
|
args
|
|
@@ -435361,12 +435448,12 @@ var init_refresh = __esm(() => {
|
|
|
435361
435448
|
// src/commands/reload-plugins/reload-plugins.ts
|
|
435362
435449
|
var exports_reload_plugins = {};
|
|
435363
435450
|
__export(exports_reload_plugins, {
|
|
435364
|
-
call: () =>
|
|
435451
|
+
call: () => call84
|
|
435365
435452
|
});
|
|
435366
435453
|
function n(count3, noun) {
|
|
435367
435454
|
return `${count3} ${plural(count3, noun)}`;
|
|
435368
435455
|
}
|
|
435369
|
-
var
|
|
435456
|
+
var call84 = async (_args, context7) => {
|
|
435370
435457
|
if (false) {}
|
|
435371
435458
|
const r = await refreshActivePlugins(context7.setAppState);
|
|
435372
435459
|
const parts = [
|
|
@@ -435409,9 +435496,9 @@ var init_reload_plugins2 = __esm(() => {
|
|
|
435409
435496
|
// src/commands/rewind/rewind.ts
|
|
435410
435497
|
var exports_rewind = {};
|
|
435411
435498
|
__export(exports_rewind, {
|
|
435412
|
-
call: () =>
|
|
435499
|
+
call: () => call85
|
|
435413
435500
|
});
|
|
435414
|
-
async function
|
|
435501
|
+
async function call85(_args, context7) {
|
|
435415
435502
|
if (context7.openMessageSelector) {
|
|
435416
435503
|
context7.openMessageSelector();
|
|
435417
435504
|
}
|
|
@@ -435526,7 +435613,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
|
|
|
435526
435613
|
smapsRollup,
|
|
435527
435614
|
platform: process.platform,
|
|
435528
435615
|
nodeVersion: process.version,
|
|
435529
|
-
ccVersion: "1.9.
|
|
435616
|
+
ccVersion: "1.9.8"
|
|
435530
435617
|
};
|
|
435531
435618
|
}
|
|
435532
435619
|
async function performHeapDump(trigger = "manual", dumpNumber = 0) {
|
|
@@ -435596,9 +435683,9 @@ var init_heapDumpService = __esm(() => {
|
|
|
435596
435683
|
// src/commands/heapdump/heapdump.ts
|
|
435597
435684
|
var exports_heapdump = {};
|
|
435598
435685
|
__export(exports_heapdump, {
|
|
435599
|
-
call: () =>
|
|
435686
|
+
call: () => call86
|
|
435600
435687
|
});
|
|
435601
|
-
async function
|
|
435688
|
+
async function call86() {
|
|
435602
435689
|
const result = await performHeapDump();
|
|
435603
435690
|
if (!result.success) {
|
|
435604
435691
|
return {
|
|
@@ -435969,7 +436056,7 @@ var USAGE = `/bridge-kick <subcommand>
|
|
|
435969
436056
|
reconnect-session fail next POST /bridge/reconnect fails
|
|
435970
436057
|
heartbeat <status> next heartbeat throws BridgeFatalError(status)
|
|
435971
436058
|
reconnect call reconnectEnvironmentWithSession directly
|
|
435972
|
-
status print bridge state`,
|
|
436059
|
+
status print bridge state`, call87 = async (args) => {
|
|
435973
436060
|
const h = getBridgeDebugHandle();
|
|
435974
436061
|
if (!h) {
|
|
435975
436062
|
return {
|
|
@@ -436102,16 +436189,16 @@ var init_bridge_kick = __esm(() => {
|
|
|
436102
436189
|
description: "Inject bridge failure states for manual recovery testing",
|
|
436103
436190
|
isEnabled: () => process.env.USER_TYPE === "ant",
|
|
436104
436191
|
supportsNonInteractive: false,
|
|
436105
|
-
load: () => Promise.resolve({ call:
|
|
436192
|
+
load: () => Promise.resolve({ call: call87 })
|
|
436106
436193
|
};
|
|
436107
436194
|
bridge_kick_default = bridgeKick;
|
|
436108
436195
|
});
|
|
436109
436196
|
|
|
436110
436197
|
// src/commands/version.ts
|
|
436111
|
-
var
|
|
436198
|
+
var call88 = async () => {
|
|
436112
436199
|
return {
|
|
436113
436200
|
type: "text",
|
|
436114
|
-
value: `${"1.9.
|
|
436201
|
+
value: `${"1.9.8"} (built ${"2026-05-07T19:50:53.354Z"})`
|
|
436115
436202
|
};
|
|
436116
436203
|
}, version, version_default;
|
|
436117
436204
|
var init_version = __esm(() => {
|
|
@@ -436121,7 +436208,7 @@ var init_version = __esm(() => {
|
|
|
436121
436208
|
description: "Print the version this session is running (not what autoupdate downloaded)",
|
|
436122
436209
|
isEnabled: () => process.env.USER_TYPE === "ant",
|
|
436123
436210
|
supportsNonInteractive: true,
|
|
436124
|
-
load: () => Promise.resolve({ call:
|
|
436211
|
+
load: () => Promise.resolve({ call: call88 })
|
|
436125
436212
|
};
|
|
436126
436213
|
version_default = version;
|
|
436127
436214
|
});
|
|
@@ -437277,10 +437364,10 @@ var init_SandboxSettings = __esm(() => {
|
|
|
437277
437364
|
// src/commands/sandbox-toggle/sandbox-toggle.tsx
|
|
437278
437365
|
var exports_sandbox_toggle = {};
|
|
437279
437366
|
__export(exports_sandbox_toggle, {
|
|
437280
|
-
call: () =>
|
|
437367
|
+
call: () => call89
|
|
437281
437368
|
});
|
|
437282
437369
|
import { relative as relative27 } from "path";
|
|
437283
|
-
async function
|
|
437370
|
+
async function call89(onDone, _context, args) {
|
|
437284
437371
|
const settings = getSettings_DEPRECATED();
|
|
437285
437372
|
const themeName = settings.theme || "light";
|
|
437286
437373
|
const platform3 = getPlatform();
|
|
@@ -437385,7 +437472,7 @@ var init_sandbox_toggle2 = __esm(() => {
|
|
|
437385
437472
|
});
|
|
437386
437473
|
|
|
437387
437474
|
// src/commands/advisor.ts
|
|
437388
|
-
var
|
|
437475
|
+
var call90 = async (args, context7) => {
|
|
437389
437476
|
const arg = args.trim().toLowerCase();
|
|
437390
437477
|
const baseModel = parseUserSpecifiedModel(context7.getAppState().mainLoopModel ?? getDefaultMainLoopModelSetting());
|
|
437391
437478
|
if (!arg) {
|
|
@@ -437471,7 +437558,7 @@ var init_advisor2 = __esm(() => {
|
|
|
437471
437558
|
return !canUserConfigureAdvisor();
|
|
437472
437559
|
},
|
|
437473
437560
|
supportsNonInteractive: true,
|
|
437474
|
-
load: () => Promise.resolve({ call:
|
|
437561
|
+
load: () => Promise.resolve({ call: call90 })
|
|
437475
437562
|
};
|
|
437476
437563
|
advisor_default = advisor;
|
|
437477
437564
|
});
|
|
@@ -437883,12 +437970,12 @@ var init_ExitFlow = __esm(() => {
|
|
|
437883
437970
|
// src/commands/exit/exit.tsx
|
|
437884
437971
|
var exports_exit = {};
|
|
437885
437972
|
__export(exports_exit, {
|
|
437886
|
-
call: () =>
|
|
437973
|
+
call: () => call91
|
|
437887
437974
|
});
|
|
437888
437975
|
function getRandomGoodbyeMessage2() {
|
|
437889
437976
|
return sample_default(GOODBYE_MESSAGES2) ?? "Goodbye!";
|
|
437890
437977
|
}
|
|
437891
|
-
async function
|
|
437978
|
+
async function call91(onDone) {
|
|
437892
437979
|
if (false) {}
|
|
437893
437980
|
const showWorktree = getCurrentWorktreeSession() !== null;
|
|
437894
437981
|
if (showWorktree) {
|
|
@@ -438182,7 +438269,7 @@ var exports_export = {};
|
|
|
438182
438269
|
__export(exports_export, {
|
|
438183
438270
|
sanitizeFilename: () => sanitizeFilename,
|
|
438184
438271
|
extractFirstPrompt: () => extractFirstPrompt,
|
|
438185
|
-
call: () =>
|
|
438272
|
+
call: () => call92
|
|
438186
438273
|
});
|
|
438187
438274
|
import { join as join144 } from "path";
|
|
438188
438275
|
function formatTimestamp(date2) {
|
|
@@ -438223,7 +438310,7 @@ async function exportWithReactRenderer(context7) {
|
|
|
438223
438310
|
const tools = context7.options.tools || [];
|
|
438224
438311
|
return renderMessagesToPlainText(context7.messages, tools);
|
|
438225
438312
|
}
|
|
438226
|
-
async function
|
|
438313
|
+
async function call92(onDone, context7, args) {
|
|
438227
438314
|
const content = await exportWithReactRenderer(context7);
|
|
438228
438315
|
const filename = args.trim();
|
|
438229
438316
|
if (filename) {
|
|
@@ -438283,7 +438370,7 @@ var init_export2 = __esm(() => {
|
|
|
438283
438370
|
// src/commands/model/model.tsx
|
|
438284
438371
|
var exports_model2 = {};
|
|
438285
438372
|
__export(exports_model2, {
|
|
438286
|
-
call: () =>
|
|
438373
|
+
call: () => call93
|
|
438287
438374
|
});
|
|
438288
438375
|
function ModelPickerWrapper(t0) {
|
|
438289
438376
|
const $2 = c3(17);
|
|
@@ -438531,7 +438618,7 @@ function renderModelLabel(model) {
|
|
|
438531
438618
|
const rendered = renderDefaultModelSetting(model ?? getDefaultMainLoopModelSetting());
|
|
438532
438619
|
return model === null ? `${rendered} (default)` : rendered;
|
|
438533
438620
|
}
|
|
438534
|
-
var React116, jsx_dev_runtime352,
|
|
438621
|
+
var React116, jsx_dev_runtime352, call93 = async (onDone, _context, args) => {
|
|
438535
438622
|
args = args?.trim() || "";
|
|
438536
438623
|
if (COMMON_INFO_ARGS.includes(args)) {
|
|
438537
438624
|
logEvent("tengu_model_command_inline_help", {
|
|
@@ -438598,7 +438685,7 @@ var init_model3 = __esm(() => {
|
|
|
438598
438685
|
// src/commands/tag/tag.tsx
|
|
438599
438686
|
var exports_tag = {};
|
|
438600
438687
|
__export(exports_tag, {
|
|
438601
|
-
call: () =>
|
|
438688
|
+
call: () => call94
|
|
438602
438689
|
});
|
|
438603
438690
|
function ConfirmRemoveTag(t0) {
|
|
438604
438691
|
const $2 = c3(11);
|
|
@@ -438822,7 +438909,7 @@ Examples:
|
|
|
438822
438909
|
React117.useEffect(t1, t2);
|
|
438823
438910
|
return null;
|
|
438824
438911
|
}
|
|
438825
|
-
async function
|
|
438912
|
+
async function call94(onDone, _context, args) {
|
|
438826
438913
|
args = args?.trim() || "";
|
|
438827
438914
|
if (COMMON_INFO_ARGS.includes(args) || COMMON_HELP_ARGS.includes(args)) {
|
|
438828
438915
|
return /* @__PURE__ */ jsx_dev_runtime353.jsxDEV(ShowHelp, {
|
|
@@ -438869,9 +438956,9 @@ var init_tag2 = __esm(() => {
|
|
|
438869
438956
|
// src/commands/output-style/output-style.tsx
|
|
438870
438957
|
var exports_output_style = {};
|
|
438871
438958
|
__export(exports_output_style, {
|
|
438872
|
-
call: () =>
|
|
438959
|
+
call: () => call95
|
|
438873
438960
|
});
|
|
438874
|
-
async function
|
|
438961
|
+
async function call95(onDone) {
|
|
438875
438962
|
onDone("/output-style has been deprecated. Use /config to change your output style, or set it in your settings file. Changes take effect on the next session.", {
|
|
438876
438963
|
display: "system"
|
|
438877
438964
|
});
|
|
@@ -438893,7 +438980,7 @@ var init_output_style = __esm(() => {
|
|
|
438893
438980
|
// src/commands/provider/provider.tsx
|
|
438894
438981
|
var exports_provider = {};
|
|
438895
438982
|
__export(exports_provider, {
|
|
438896
|
-
call: () =>
|
|
438983
|
+
call: () => call96
|
|
438897
438984
|
});
|
|
438898
438985
|
function formatProviderSavedMessage(config2) {
|
|
438899
438986
|
const providerLabel = getLocalLLMProviderLabel(config2.provider);
|
|
@@ -438907,7 +438994,7 @@ function formatProviderSavedMessage(config2) {
|
|
|
438907
438994
|
].join(`
|
|
438908
438995
|
`);
|
|
438909
438996
|
}
|
|
438910
|
-
var jsx_dev_runtime354,
|
|
438997
|
+
var jsx_dev_runtime354, call96 = async (onDone) => {
|
|
438911
438998
|
const config2 = getGlobalConfig();
|
|
438912
438999
|
function handleComplete(nextConfig) {
|
|
438913
439000
|
saveGlobalConfig((current) => ({
|
|
@@ -439463,9 +439550,9 @@ var init_RemoteEnvironmentDialog = __esm(() => {
|
|
|
439463
439550
|
// src/commands/remote-env/remote-env.tsx
|
|
439464
439551
|
var exports_remote_env = {};
|
|
439465
439552
|
__export(exports_remote_env, {
|
|
439466
|
-
call: () =>
|
|
439553
|
+
call: () => call97
|
|
439467
439554
|
});
|
|
439468
|
-
async function
|
|
439555
|
+
async function call97(onDone) {
|
|
439469
439556
|
return /* @__PURE__ */ jsx_dev_runtime356.jsxDEV(RemoteEnvironmentDialog, {
|
|
439470
439557
|
onDone
|
|
439471
439558
|
}, undefined, false, undefined, this);
|
|
@@ -439545,7 +439632,7 @@ var exports_effort = {};
|
|
|
439545
439632
|
__export(exports_effort, {
|
|
439546
439633
|
showCurrentEffort: () => showCurrentEffort,
|
|
439547
439634
|
executeEffort: () => executeEffort,
|
|
439548
|
-
call: () =>
|
|
439635
|
+
call: () => call98
|
|
439549
439636
|
});
|
|
439550
439637
|
function setEffortValue(effortValue) {
|
|
439551
439638
|
const persistable = toPersistableEffort(effortValue);
|
|
@@ -439696,7 +439783,7 @@ function ApplyEffortAndClose(t0) {
|
|
|
439696
439783
|
React118.useEffect(t1, t2);
|
|
439697
439784
|
return null;
|
|
439698
439785
|
}
|
|
439699
|
-
async function
|
|
439786
|
+
async function call98(onDone, _context, args) {
|
|
439700
439787
|
args = args?.trim() || "";
|
|
439701
439788
|
if (COMMON_HELP_ARGS2.includes(args)) {
|
|
439702
439789
|
onDone(`Usage: /effort [low|medium|high|max|auto]
|
|
@@ -442528,9 +442615,9 @@ var init_Stats = __esm(() => {
|
|
|
442528
442615
|
// src/commands/stats/stats.tsx
|
|
442529
442616
|
var exports_stats = {};
|
|
442530
442617
|
__export(exports_stats, {
|
|
442531
|
-
call: () =>
|
|
442618
|
+
call: () => call99
|
|
442532
442619
|
});
|
|
442533
|
-
var jsx_dev_runtime359,
|
|
442620
|
+
var jsx_dev_runtime359, call99 = async (onDone) => {
|
|
442534
442621
|
return /* @__PURE__ */ jsx_dev_runtime359.jsxDEV(Stats2, {
|
|
442535
442622
|
onClose: onDone
|
|
442536
442623
|
}, undefined, false, undefined, this);
|
|
@@ -444055,7 +444142,7 @@ function generateHtmlReport(data, insights) {
|
|
|
444055
444142
|
</html>`;
|
|
444056
444143
|
}
|
|
444057
444144
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
444058
|
-
const version2 = typeof MACRO !== "undefined" ? "1.9.
|
|
444145
|
+
const version2 = typeof MACRO !== "undefined" ? "1.9.8" : "unknown";
|
|
444059
444146
|
const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
|
|
444060
444147
|
const facets_summary = {
|
|
444061
444148
|
total: facets.size,
|
|
@@ -444998,6 +445085,7 @@ var init_commands2 = __esm(() => {
|
|
|
444998
445085
|
init_buddy2();
|
|
444999
445086
|
init_images2();
|
|
445000
445087
|
init_image_pipeline2();
|
|
445088
|
+
init_image_tips();
|
|
445001
445089
|
init_keepgoing2();
|
|
445002
445090
|
init_telegram2();
|
|
445003
445091
|
init_slack2();
|
|
@@ -445211,6 +445299,7 @@ var init_commands2 = __esm(() => {
|
|
|
445211
445299
|
buddy_default,
|
|
445212
445300
|
images_default,
|
|
445213
445301
|
image_pipeline_default,
|
|
445302
|
+
image_tips_default,
|
|
445214
445303
|
telegram_default,
|
|
445215
445304
|
slack_default,
|
|
445216
445305
|
discord_default,
|
|
@@ -448256,7 +448345,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
448256
448345
|
init_settings2();
|
|
448257
448346
|
init_slowOperations();
|
|
448258
448347
|
init_uuid();
|
|
448259
|
-
VERSION6 = typeof MACRO !== "undefined" ? "1.9.
|
|
448348
|
+
VERSION6 = typeof MACRO !== "undefined" ? "1.9.8" : "unknown";
|
|
448260
448349
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
448261
448350
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
448262
448351
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -448587,7 +448676,7 @@ var init_agentMemory = __esm(() => {
|
|
|
448587
448676
|
|
|
448588
448677
|
// src/utils/permissions/filesystem.ts
|
|
448589
448678
|
import { randomBytes as randomBytes20 } from "crypto";
|
|
448590
|
-
import { homedir as
|
|
448679
|
+
import { homedir as homedir33, tmpdir as tmpdir10 } from "os";
|
|
448591
448680
|
import { join as join151, normalize as normalize14, posix as posix8, sep as sep32 } from "path";
|
|
448592
448681
|
function normalizeCaseForComparison(path15) {
|
|
448593
448682
|
return path15.toLowerCase();
|
|
@@ -448601,7 +448690,7 @@ function getClaudeSkillScope(filePath) {
|
|
|
448601
448690
|
prefix: "/.claude/skills/"
|
|
448602
448691
|
},
|
|
448603
448692
|
{
|
|
448604
|
-
dir: expandPath(join151(
|
|
448693
|
+
dir: expandPath(join151(homedir33(), ".claude", "skills")),
|
|
448605
448694
|
prefix: "~/.claude/skills/"
|
|
448606
448695
|
}
|
|
448607
448696
|
];
|
|
@@ -448915,7 +449004,7 @@ function patternWithRoot(pattern, source) {
|
|
|
448915
449004
|
} else if (pattern.startsWith(`~${DIR_SEP}`)) {
|
|
448916
449005
|
return {
|
|
448917
449006
|
relativePattern: pattern.slice(1),
|
|
448918
|
-
root:
|
|
449007
|
+
root: homedir33().normalize("NFC")
|
|
448919
449008
|
};
|
|
448920
449009
|
} else if (pattern.startsWith(DIR_SEP)) {
|
|
448921
449010
|
return {
|
|
@@ -449457,7 +449546,7 @@ var init_filesystem = __esm(() => {
|
|
|
449457
449546
|
});
|
|
449458
449547
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
449459
449548
|
const nonce = randomBytes20(16).toString("hex");
|
|
449460
|
-
return join151(getClaudeTempDir(), "bundled-skills", "1.9.
|
|
449549
|
+
return join151(getClaudeTempDir(), "bundled-skills", "1.9.8", nonce);
|
|
449461
449550
|
});
|
|
449462
449551
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
449463
449552
|
});
|
|
@@ -457124,7 +457213,7 @@ __export(exports_upstreamproxy, {
|
|
|
457124
457213
|
SESSION_TOKEN_PATH: () => SESSION_TOKEN_PATH
|
|
457125
457214
|
});
|
|
457126
457215
|
import { mkdir as mkdir60, readFile as readFile67, unlink as unlink24, writeFile as writeFile60 } from "fs/promises";
|
|
457127
|
-
import { homedir as
|
|
457216
|
+
import { homedir as homedir34 } from "os";
|
|
457128
457217
|
import { join as join154 } from "path";
|
|
457129
457218
|
async function initUpstreamProxy(opts) {
|
|
457130
457219
|
if (!isEnvTruthy(process.env.CLAUDE_CODE_REMOTE)) {
|
|
@@ -457146,7 +457235,7 @@ async function initUpstreamProxy(opts) {
|
|
|
457146
457235
|
}
|
|
457147
457236
|
setNonDumpable();
|
|
457148
457237
|
const baseUrl = opts?.ccrBaseUrl ?? process.env.ANTHROPIC_BASE_URL ?? "https://api.anthropic.com";
|
|
457149
|
-
const caBundlePath = opts?.caBundlePath ?? join154(
|
|
457238
|
+
const caBundlePath = opts?.caBundlePath ?? join154(homedir34(), ".ccr", "ca-bundle.crt");
|
|
457150
457239
|
const caOk = await downloadCaBundle(baseUrl, opts?.systemCaPath ?? SYSTEM_CA_BUNDLE, caBundlePath);
|
|
457151
457240
|
if (!caOk)
|
|
457152
457241
|
return state;
|
|
@@ -458694,7 +458783,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
458694
458783
|
slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
|
|
458695
458784
|
apiKeySource: getAnthropicApiKeyWithSource().source,
|
|
458696
458785
|
betas: getSdkBetas(),
|
|
458697
|
-
claude_code_version: "1.9.
|
|
458786
|
+
claude_code_version: "1.9.8",
|
|
458698
458787
|
output_style: outputStyle2,
|
|
458699
458788
|
agents: inputs.agents.map((agent) => agent.agentType),
|
|
458700
458789
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
|
|
@@ -465052,7 +465141,7 @@ var init_ShowInIDEPrompt = __esm(() => {
|
|
|
465052
465141
|
});
|
|
465053
465142
|
|
|
465054
465143
|
// src/components/permissions/FilePermissionDialog/permissionOptions.tsx
|
|
465055
|
-
import { homedir as
|
|
465144
|
+
import { homedir as homedir35 } from "os";
|
|
465056
465145
|
import { basename as basename47, join as join155, sep as sep33 } from "path";
|
|
465057
465146
|
function isInClaudeFolder(filePath) {
|
|
465058
465147
|
const absolutePath = expandPath(filePath);
|
|
@@ -465063,7 +465152,7 @@ function isInClaudeFolder(filePath) {
|
|
|
465063
465152
|
}
|
|
465064
465153
|
function isInGlobalClaudeFolder(filePath) {
|
|
465065
465154
|
const absolutePath = expandPath(filePath);
|
|
465066
|
-
const globalClaudeFolderPath = join155(
|
|
465155
|
+
const globalClaudeFolderPath = join155(homedir35(), ".claude");
|
|
465067
465156
|
const normalizedAbsolutePath = normalizeCaseForComparison(absolutePath);
|
|
465068
465157
|
const normalizedGlobalClaudeFolderPath = normalizeCaseForComparison(globalClaudeFolderPath);
|
|
465069
465158
|
return normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + sep33.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + "/");
|
|
@@ -472851,7 +472940,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
472851
472940
|
function getSemverPart(version2) {
|
|
472852
472941
|
return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
|
|
472853
472942
|
}
|
|
472854
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.9.
|
|
472943
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.9.8") {
|
|
472855
472944
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
|
|
472856
472945
|
if (!updatedVersion) {
|
|
472857
472946
|
return null;
|
|
@@ -472891,7 +472980,7 @@ function AutoUpdater({
|
|
|
472891
472980
|
return;
|
|
472892
472981
|
}
|
|
472893
472982
|
if (false) {}
|
|
472894
|
-
const currentVersion = "1.9.
|
|
472983
|
+
const currentVersion = "1.9.8";
|
|
472895
472984
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
472896
472985
|
let latestVersion = await getLatestVersion(channel);
|
|
472897
472986
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -473102,12 +473191,12 @@ function NativeAutoUpdater({
|
|
|
473102
473191
|
logEvent("tengu_native_auto_updater_start", {});
|
|
473103
473192
|
try {
|
|
473104
473193
|
const maxVersion = await getMaxVersion();
|
|
473105
|
-
if (maxVersion && gt("1.9.
|
|
473194
|
+
if (maxVersion && gt("1.9.8", maxVersion)) {
|
|
473106
473195
|
const msg = await getMaxVersionMessage();
|
|
473107
473196
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
473108
473197
|
}
|
|
473109
473198
|
const result = await installLatest(channel);
|
|
473110
|
-
const currentVersion = "1.9.
|
|
473199
|
+
const currentVersion = "1.9.8";
|
|
473111
473200
|
const latencyMs = Date.now() - startTime;
|
|
473112
473201
|
if (result.lockFailed) {
|
|
473113
473202
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -473242,17 +473331,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
473242
473331
|
const maxVersion = await getMaxVersion();
|
|
473243
473332
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
473244
473333
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
473245
|
-
if (gte("1.9.
|
|
473246
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.9.
|
|
473334
|
+
if (gte("1.9.8", maxVersion)) {
|
|
473335
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.9.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
473247
473336
|
setUpdateAvailable(false);
|
|
473248
473337
|
return;
|
|
473249
473338
|
}
|
|
473250
473339
|
latest = maxVersion;
|
|
473251
473340
|
}
|
|
473252
|
-
const hasUpdate = latest && !gte("1.9.
|
|
473341
|
+
const hasUpdate = latest && !gte("1.9.8", latest) && !shouldSkipVersion(latest);
|
|
473253
473342
|
setUpdateAvailable(!!hasUpdate);
|
|
473254
473343
|
if (hasUpdate) {
|
|
473255
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.9.
|
|
473344
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.9.8"} -> ${latest}`);
|
|
473256
473345
|
}
|
|
473257
473346
|
};
|
|
473258
473347
|
$2[0] = t1;
|
|
@@ -473286,7 +473375,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
473286
473375
|
wrap: "truncate",
|
|
473287
473376
|
children: [
|
|
473288
473377
|
"currentVersion: ",
|
|
473289
|
-
"1.9.
|
|
473378
|
+
"1.9.8"
|
|
473290
473379
|
]
|
|
473291
473380
|
}, undefined, true, undefined, this);
|
|
473292
473381
|
$2[3] = verbose;
|
|
@@ -480846,7 +480935,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
480846
480935
|
project_dir: getOriginalCwd(),
|
|
480847
480936
|
added_dirs: addedDirs
|
|
480848
480937
|
},
|
|
480849
|
-
version: "1.9.
|
|
480938
|
+
version: "1.9.8",
|
|
480850
480939
|
output_style: {
|
|
480851
480940
|
name: outputStyleName
|
|
480852
480941
|
},
|
|
@@ -487190,7 +487279,7 @@ var init_cacache = __esm(() => {
|
|
|
487190
487279
|
|
|
487191
487280
|
// src/utils/cleanup.ts
|
|
487192
487281
|
import * as fs5 from "fs/promises";
|
|
487193
|
-
import { homedir as
|
|
487282
|
+
import { homedir as homedir36 } from "os";
|
|
487194
487283
|
import { join as join156 } from "path";
|
|
487195
487284
|
function getCutoffDate() {
|
|
487196
487285
|
const settings = getSettings_DEPRECATED() || {};
|
|
@@ -487491,7 +487580,7 @@ async function cleanupNpmCacheForAnthropicPackages() {
|
|
|
487491
487580
|
return;
|
|
487492
487581
|
}
|
|
487493
487582
|
logForDebugging("npm cache cleanup: starting");
|
|
487494
|
-
const npmCachePath = join156(
|
|
487583
|
+
const npmCachePath = join156(homedir36(), ".npm", "_cacache");
|
|
487495
487584
|
const NPM_CACHE_RETENTION_COUNT = 5;
|
|
487496
487585
|
const startTime = Date.now();
|
|
487497
487586
|
try {
|
|
@@ -492418,7 +492507,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
|
|
|
492418
492507
|
} catch {}
|
|
492419
492508
|
const data = {
|
|
492420
492509
|
trigger,
|
|
492421
|
-
version: "1.9.
|
|
492510
|
+
version: "1.9.8",
|
|
492422
492511
|
platform: process.platform,
|
|
492423
492512
|
transcript,
|
|
492424
492513
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -504215,7 +504304,7 @@ var exports_TrustDialog = {};
|
|
|
504215
504304
|
__export(exports_TrustDialog, {
|
|
504216
504305
|
TrustDialog: () => TrustDialog
|
|
504217
504306
|
});
|
|
504218
|
-
import { homedir as
|
|
504307
|
+
import { homedir as homedir37 } from "os";
|
|
504219
504308
|
function TrustDialog({ onDone }) {
|
|
504220
504309
|
const [focusIdx, setFocusIdx] = import_react307.useState(0);
|
|
504221
504310
|
const doneRef = import_react307.useRef(false);
|
|
@@ -504233,7 +504322,7 @@ function TrustDialog({ onDone }) {
|
|
|
504233
504322
|
gracefulShutdownSync(1);
|
|
504234
504323
|
} else {
|
|
504235
504324
|
try {
|
|
504236
|
-
if (
|
|
504325
|
+
if (homedir37() !== getCwd()) {
|
|
504237
504326
|
try {
|
|
504238
504327
|
saveCurrentProjectConfig((c5) => ({ ...c5, hasTrustDialogAccepted: true }));
|
|
504239
504328
|
} catch {}
|
|
@@ -509327,7 +509416,7 @@ function appendToLog(path17, message) {
|
|
|
509327
509416
|
cwd: getFsImplementation().cwd(),
|
|
509328
509417
|
userType: process.env.USER_TYPE,
|
|
509329
509418
|
sessionId: getSessionId(),
|
|
509330
|
-
version: "1.9.
|
|
509419
|
+
version: "1.9.8"
|
|
509331
509420
|
};
|
|
509332
509421
|
getLogWriter(path17).write(messageWithTimestamp);
|
|
509333
509422
|
}
|
|
@@ -509632,7 +509721,7 @@ var init_sessionMemory = __esm(() => {
|
|
|
509632
509721
|
|
|
509633
509722
|
// src/utils/iTermBackup.ts
|
|
509634
509723
|
import { copyFile as copyFile11, stat as stat56 } from "fs/promises";
|
|
509635
|
-
import { homedir as
|
|
509724
|
+
import { homedir as homedir38 } from "os";
|
|
509636
509725
|
import { join as join164 } from "path";
|
|
509637
509726
|
function markITerm2SetupComplete() {
|
|
509638
509727
|
saveGlobalConfig((current) => ({
|
|
@@ -509648,7 +509737,7 @@ function getIterm2RecoveryInfo() {
|
|
|
509648
509737
|
};
|
|
509649
509738
|
}
|
|
509650
509739
|
function getITerm2PlistPath() {
|
|
509651
|
-
return join164(
|
|
509740
|
+
return join164(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
|
|
509652
509741
|
}
|
|
509653
509742
|
async function checkAndRestoreITerm2Backup() {
|
|
509654
509743
|
const { inProgress, backupPath } = getIterm2RecoveryInfo();
|
|
@@ -513351,8 +513440,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
513351
513440
|
}
|
|
513352
513441
|
async function checkEnvLessBridgeMinVersion() {
|
|
513353
513442
|
const cfg = await getEnvLessBridgeConfig();
|
|
513354
|
-
if (cfg.min_version && lt("1.9.
|
|
513355
|
-
return `Your version of localclawd (${"1.9.
|
|
513443
|
+
if (cfg.min_version && lt("1.9.8", cfg.min_version)) {
|
|
513444
|
+
return `Your version of localclawd (${"1.9.8"}) is too old for Remote Control.
|
|
513356
513445
|
Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
|
|
513357
513446
|
}
|
|
513358
513447
|
return null;
|
|
@@ -513824,7 +513913,7 @@ async function initBridgeCore(params) {
|
|
|
513824
513913
|
const rawApi = createBridgeApiClient({
|
|
513825
513914
|
baseUrl,
|
|
513826
513915
|
getAccessToken,
|
|
513827
|
-
runnerVersion: "1.9.
|
|
513916
|
+
runnerVersion: "1.9.8",
|
|
513828
513917
|
onDebug: logForDebugging,
|
|
513829
513918
|
onAuth401,
|
|
513830
513919
|
getTrustedDeviceToken
|
|
@@ -519543,7 +519632,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
|
|
|
519543
519632
|
setCwd(cwd3);
|
|
519544
519633
|
const server = new Server({
|
|
519545
519634
|
name: "claude/tengu",
|
|
519546
|
-
version: "1.9.
|
|
519635
|
+
version: "1.9.8"
|
|
519547
519636
|
}, {
|
|
519548
519637
|
capabilities: {
|
|
519549
519638
|
tools: {}
|
|
@@ -519674,7 +519763,7 @@ __export(exports_appDesktop, {
|
|
|
519674
519763
|
getClaudeDesktopConfigPath: () => getClaudeDesktopConfigPath
|
|
519675
519764
|
});
|
|
519676
519765
|
import { readdir as readdir39, readFile as readFile72, stat as stat59 } from "fs/promises";
|
|
519677
|
-
import { homedir as
|
|
519766
|
+
import { homedir as homedir39 } from "os";
|
|
519678
519767
|
import { join as join168 } from "path";
|
|
519679
519768
|
async function getClaudeDesktopConfigPath() {
|
|
519680
519769
|
const platform3 = getPlatform();
|
|
@@ -519682,7 +519771,7 @@ async function getClaudeDesktopConfigPath() {
|
|
|
519682
519771
|
throw new Error(`Unsupported platform: ${platform3} - desktop app integration only works on macOS and WSL.`);
|
|
519683
519772
|
}
|
|
519684
519773
|
if (platform3 === "macos") {
|
|
519685
|
-
return join168(
|
|
519774
|
+
return join168(homedir39(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
|
|
519686
519775
|
}
|
|
519687
519776
|
const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
|
|
519688
519777
|
if (windowsHome) {
|
|
@@ -520624,7 +520713,7 @@ function WelcomeLogo() {
|
|
|
520624
520713
|
dimColor: true,
|
|
520625
520714
|
children: [
|
|
520626
520715
|
"v",
|
|
520627
|
-
"1.9.
|
|
520716
|
+
"1.9.8"
|
|
520628
520717
|
]
|
|
520629
520718
|
}, undefined, true, undefined, this)
|
|
520630
520719
|
]
|
|
@@ -520815,7 +520904,7 @@ __export(exports_update, {
|
|
|
520815
520904
|
});
|
|
520816
520905
|
async function update() {
|
|
520817
520906
|
logEvent("tengu_update_check", {});
|
|
520818
|
-
writeToStdout(`Current version: ${"1.9.
|
|
520907
|
+
writeToStdout(`Current version: ${"1.9.8"}
|
|
520819
520908
|
`);
|
|
520820
520909
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
520821
520910
|
writeToStdout(`Checking for updates to ${channel} version...
|
|
@@ -520890,8 +520979,8 @@ async function update() {
|
|
|
520890
520979
|
writeToStdout(`localclawd is managed by Homebrew.
|
|
520891
520980
|
`);
|
|
520892
520981
|
const latest = await getLatestVersion(channel);
|
|
520893
|
-
if (latest && !gte("1.9.
|
|
520894
|
-
writeToStdout(`Update available: ${"1.9.
|
|
520982
|
+
if (latest && !gte("1.9.8", latest)) {
|
|
520983
|
+
writeToStdout(`Update available: ${"1.9.8"} → ${latest}
|
|
520895
520984
|
`);
|
|
520896
520985
|
writeToStdout(`
|
|
520897
520986
|
`);
|
|
@@ -520907,8 +520996,8 @@ async function update() {
|
|
|
520907
520996
|
writeToStdout(`localclawd is managed by winget.
|
|
520908
520997
|
`);
|
|
520909
520998
|
const latest = await getLatestVersion(channel);
|
|
520910
|
-
if (latest && !gte("1.9.
|
|
520911
|
-
writeToStdout(`Update available: ${"1.9.
|
|
520999
|
+
if (latest && !gte("1.9.8", latest)) {
|
|
521000
|
+
writeToStdout(`Update available: ${"1.9.8"} → ${latest}
|
|
520912
521001
|
`);
|
|
520913
521002
|
writeToStdout(`
|
|
520914
521003
|
`);
|
|
@@ -520922,8 +521011,8 @@ async function update() {
|
|
|
520922
521011
|
writeToStdout(`localclawd is managed by apk.
|
|
520923
521012
|
`);
|
|
520924
521013
|
const latest = await getLatestVersion(channel);
|
|
520925
|
-
if (latest && !gte("1.9.
|
|
520926
|
-
writeToStdout(`Update available: ${"1.9.
|
|
521014
|
+
if (latest && !gte("1.9.8", latest)) {
|
|
521015
|
+
writeToStdout(`Update available: ${"1.9.8"} → ${latest}
|
|
520927
521016
|
`);
|
|
520928
521017
|
writeToStdout(`
|
|
520929
521018
|
`);
|
|
@@ -520988,11 +521077,11 @@ async function update() {
|
|
|
520988
521077
|
`);
|
|
520989
521078
|
await gracefulShutdown(1);
|
|
520990
521079
|
}
|
|
520991
|
-
if (result.latestVersion === "1.9.
|
|
520992
|
-
writeToStdout(source_default.green(`localclawd is up to date (${"1.9.
|
|
521080
|
+
if (result.latestVersion === "1.9.8") {
|
|
521081
|
+
writeToStdout(source_default.green(`localclawd is up to date (${"1.9.8"})`) + `
|
|
520993
521082
|
`);
|
|
520994
521083
|
} else {
|
|
520995
|
-
writeToStdout(source_default.green(`Successfully updated from ${"1.9.
|
|
521084
|
+
writeToStdout(source_default.green(`Successfully updated from ${"1.9.8"} to version ${result.latestVersion}`) + `
|
|
520996
521085
|
`);
|
|
520997
521086
|
await regenerateCompletionCache();
|
|
520998
521087
|
}
|
|
@@ -521052,12 +521141,12 @@ async function update() {
|
|
|
521052
521141
|
`);
|
|
521053
521142
|
await gracefulShutdown(1);
|
|
521054
521143
|
}
|
|
521055
|
-
if (latestVersion === "1.9.
|
|
521056
|
-
writeToStdout(source_default.green(`localclawd is up to date (${"1.9.
|
|
521144
|
+
if (latestVersion === "1.9.8") {
|
|
521145
|
+
writeToStdout(source_default.green(`localclawd is up to date (${"1.9.8"})`) + `
|
|
521057
521146
|
`);
|
|
521058
521147
|
await gracefulShutdown(0);
|
|
521059
521148
|
}
|
|
521060
|
-
writeToStdout(`New version available: ${latestVersion} (current: ${"1.9.
|
|
521149
|
+
writeToStdout(`New version available: ${latestVersion} (current: ${"1.9.8"})
|
|
521061
521150
|
`);
|
|
521062
521151
|
writeToStdout(`Installing update...
|
|
521063
521152
|
`);
|
|
@@ -521102,7 +521191,7 @@ async function update() {
|
|
|
521102
521191
|
logForDebugging(`update: Installation status: ${status2}`);
|
|
521103
521192
|
switch (status2) {
|
|
521104
521193
|
case "success":
|
|
521105
|
-
writeToStdout(source_default.green(`Successfully updated from ${"1.9.
|
|
521194
|
+
writeToStdout(source_default.green(`Successfully updated from ${"1.9.8"} to version ${latestVersion}`) + `
|
|
521106
521195
|
`);
|
|
521107
521196
|
await regenerateCompletionCache();
|
|
521108
521197
|
break;
|
|
@@ -522344,7 +522433,7 @@ Run with --debug for more details.
|
|
|
522344
522433
|
}
|
|
522345
522434
|
}
|
|
522346
522435
|
logForDiagnosticsNoPII("info", "started", {
|
|
522347
|
-
version: "1.9.
|
|
522436
|
+
version: "1.9.8",
|
|
522348
522437
|
is_native_binary: isInBundledMode()
|
|
522349
522438
|
});
|
|
522350
522439
|
registerCleanup(async () => {
|
|
@@ -523128,7 +523217,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
523128
523217
|
pendingHookMessages
|
|
523129
523218
|
}, renderAndRun);
|
|
523130
523219
|
}
|
|
523131
|
-
}).version("1.9.
|
|
523220
|
+
}).version("1.9.8 (localclawd)", "-v, --version", "Output the version number");
|
|
523132
523221
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
523133
523222
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
523134
523223
|
if (canUserConfigureAdvisor()) {
|
|
@@ -523642,7 +523731,7 @@ if (false) {}
|
|
|
523642
523731
|
async function main2() {
|
|
523643
523732
|
const args = process.argv.slice(2);
|
|
523644
523733
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
523645
|
-
console.log(`${"1.9.
|
|
523734
|
+
console.log(`${"1.9.8"} (localclawd)`);
|
|
523646
523735
|
return;
|
|
523647
523736
|
}
|
|
523648
523737
|
const {
|
|
@@ -523725,4 +523814,4 @@ localclawd crashed: ${msg}
|
|
|
523725
523814
|
process.exit(1);
|
|
523726
523815
|
});
|
|
523727
523816
|
|
|
523728
|
-
//# debugId=
|
|
523817
|
+
//# debugId=F0B21E147347D4CC64756E2164756E21
|