localclawd 1.1.17 → 1.1.18
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/README.md +2 -1
- package/dist/cli.mjs +415 -413
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -66144,8 +66144,8 @@ var require_dist_cjs39 = __commonJS((exports) => {
|
|
|
66144
66144
|
}
|
|
66145
66145
|
}
|
|
66146
66146
|
var SENSITIVE_STRING = "***SensitiveInformation***";
|
|
66147
|
-
var createAggregatedClient = (
|
|
66148
|
-
for (const [command, CommandCtor] of Object.entries(
|
|
66147
|
+
var createAggregatedClient = (commands, Client2, options) => {
|
|
66148
|
+
for (const [command, CommandCtor] of Object.entries(commands)) {
|
|
66149
66149
|
const methodImpl = async function(args, optionsOrCb, cb) {
|
|
66150
66150
|
const command2 = new CommandCtor(args);
|
|
66151
66151
|
if (typeof optionsOrCb === "function") {
|
|
@@ -72110,8 +72110,8 @@ var require_dist_cjs74 = __commonJS((exports) => {
|
|
|
72110
72110
|
}
|
|
72111
72111
|
}
|
|
72112
72112
|
var SENSITIVE_STRING = "***SensitiveInformation***";
|
|
72113
|
-
var createAggregatedClient = (
|
|
72114
|
-
for (const [command, CommandCtor] of Object.entries(
|
|
72113
|
+
var createAggregatedClient = (commands, Client2, options) => {
|
|
72114
|
+
for (const [command, CommandCtor] of Object.entries(commands)) {
|
|
72115
72115
|
const methodImpl = async function(args, optionsOrCb, cb) {
|
|
72116
72116
|
const command2 = new CommandCtor(args);
|
|
72117
72117
|
if (typeof optionsOrCb === "function") {
|
|
@@ -73139,8 +73139,8 @@ var require_dist_cjs77 = __commonJS((exports) => {
|
|
|
73139
73139
|
}
|
|
73140
73140
|
}
|
|
73141
73141
|
var SENSITIVE_STRING = "***SensitiveInformation***";
|
|
73142
|
-
var createAggregatedClient = (
|
|
73143
|
-
for (const [command, CommandCtor] of Object.entries(
|
|
73142
|
+
var createAggregatedClient = (commands, Client2, options) => {
|
|
73143
|
+
for (const [command, CommandCtor] of Object.entries(commands)) {
|
|
73144
73144
|
const methodImpl = async function(args, optionsOrCb, cb) {
|
|
73145
73145
|
const command2 = new CommandCtor(args);
|
|
73146
73146
|
if (typeof optionsOrCb === "function") {
|
|
@@ -75334,8 +75334,8 @@ var require_dist_cjs85 = __commonJS((exports) => {
|
|
|
75334
75334
|
}
|
|
75335
75335
|
}
|
|
75336
75336
|
var SENSITIVE_STRING = "***SensitiveInformation***";
|
|
75337
|
-
var createAggregatedClient = (
|
|
75338
|
-
for (const [command, CommandCtor] of Object.entries(
|
|
75337
|
+
var createAggregatedClient = (commands, Client2, options) => {
|
|
75338
|
+
for (const [command, CommandCtor] of Object.entries(commands)) {
|
|
75339
75339
|
const methodImpl = async function(args, optionsOrCb, cb) {
|
|
75340
75340
|
const command2 = new CommandCtor(args);
|
|
75341
75341
|
if (typeof optionsOrCb === "function") {
|
|
@@ -80386,13 +80386,13 @@ var require_sso_oidc = __commonJS((exports) => {
|
|
|
80386
80386
|
return [middlewareEndpoint.getEndpointPlugin(config, Command.getEndpointParameterInstructions())];
|
|
80387
80387
|
}).s("AWSSSOOIDCService", "CreateToken", {}).n("SSOOIDCClient", "CreateTokenCommand").sc(schemas_0.CreateToken$).build() {
|
|
80388
80388
|
}
|
|
80389
|
-
var
|
|
80389
|
+
var commands = {
|
|
80390
80390
|
CreateTokenCommand
|
|
80391
80391
|
};
|
|
80392
80392
|
|
|
80393
80393
|
class SSOOIDC extends SSOOIDCClient {
|
|
80394
80394
|
}
|
|
80395
|
-
smithyClient.createAggregatedClient(
|
|
80395
|
+
smithyClient.createAggregatedClient(commands, SSOOIDC);
|
|
80396
80396
|
var AccessDeniedExceptionReason = {
|
|
80397
80397
|
KMS_ACCESS_DENIED: "KMS_AccessDeniedException"
|
|
80398
80398
|
};
|
|
@@ -81176,13 +81176,13 @@ var require_sso = __commonJS((exports) => {
|
|
|
81176
81176
|
return [middlewareEndpoint.getEndpointPlugin(config, Command.getEndpointParameterInstructions())];
|
|
81177
81177
|
}).s("SWBPortalService", "GetRoleCredentials", {}).n("SSOClient", "GetRoleCredentialsCommand").sc(schemas_0.GetRoleCredentials$).build() {
|
|
81178
81178
|
}
|
|
81179
|
-
var
|
|
81179
|
+
var commands = {
|
|
81180
81180
|
GetRoleCredentialsCommand
|
|
81181
81181
|
};
|
|
81182
81182
|
|
|
81183
81183
|
class SSO extends SSOClient {
|
|
81184
81184
|
}
|
|
81185
|
-
smithyClient.createAggregatedClient(
|
|
81185
|
+
smithyClient.createAggregatedClient(commands, SSO);
|
|
81186
81186
|
exports.$Command = smithyClient.Command;
|
|
81187
81187
|
exports.__Client = smithyClient.Client;
|
|
81188
81188
|
exports.SSOServiceException = SSOServiceException.SSOServiceException;
|
|
@@ -82309,13 +82309,13 @@ var require_signin = __commonJS((exports) => {
|
|
|
82309
82309
|
return [middlewareEndpoint.getEndpointPlugin(config, Command.getEndpointParameterInstructions())];
|
|
82310
82310
|
}).s("Signin", "CreateOAuth2Token", {}).n("SigninClient", "CreateOAuth2TokenCommand").sc(schemas_0.CreateOAuth2Token$).build() {
|
|
82311
82311
|
}
|
|
82312
|
-
var
|
|
82312
|
+
var commands = {
|
|
82313
82313
|
CreateOAuth2TokenCommand
|
|
82314
82314
|
};
|
|
82315
82315
|
|
|
82316
82316
|
class Signin extends SigninClient {
|
|
82317
82317
|
}
|
|
82318
|
-
smithyClient.createAggregatedClient(
|
|
82318
|
+
smithyClient.createAggregatedClient(commands, Signin);
|
|
82319
82319
|
var OAuth2ErrorCode = {
|
|
82320
82320
|
AUTHCODE_EXPIRED: "AUTHCODE_EXPIRED",
|
|
82321
82321
|
INSUFFICIENT_PERMISSIONS: "INSUFFICIENT_PERMISSIONS",
|
|
@@ -83497,14 +83497,14 @@ var require_sts = __commonJS((exports) => {
|
|
|
83497
83497
|
return [middlewareEndpoint.getEndpointPlugin(config, Command.getEndpointParameterInstructions())];
|
|
83498
83498
|
}).s("AWSSecurityTokenServiceV20110615", "AssumeRoleWithWebIdentity", {}).n("STSClient", "AssumeRoleWithWebIdentityCommand").sc(schemas_0.AssumeRoleWithWebIdentity$).build() {
|
|
83499
83499
|
}
|
|
83500
|
-
var
|
|
83500
|
+
var commands = {
|
|
83501
83501
|
AssumeRoleCommand,
|
|
83502
83502
|
AssumeRoleWithWebIdentityCommand
|
|
83503
83503
|
};
|
|
83504
83504
|
|
|
83505
83505
|
class STS extends STSClient.STSClient {
|
|
83506
83506
|
}
|
|
83507
|
-
smithyClient.createAggregatedClient(
|
|
83507
|
+
smithyClient.createAggregatedClient(commands, STS);
|
|
83508
83508
|
var getAccountIdFromAssumedRoleUser = (assumedRoleUser) => {
|
|
83509
83509
|
if (typeof assumedRoleUser?.Arn === "string") {
|
|
83510
83510
|
const arnComponents = assumedRoleUser.Arn.split(":");
|
|
@@ -89227,7 +89227,7 @@ var init_isEqual = __esm(() => {
|
|
|
89227
89227
|
|
|
89228
89228
|
// src/utils/userAgent.ts
|
|
89229
89229
|
function getClaudeCodeUserAgent() {
|
|
89230
|
-
return `claude-code/${"1.1.
|
|
89230
|
+
return `claude-code/${"1.1.18"}`;
|
|
89231
89231
|
}
|
|
89232
89232
|
|
|
89233
89233
|
// src/utils/workloadContext.ts
|
|
@@ -89249,7 +89249,7 @@ function getUserAgent() {
|
|
|
89249
89249
|
const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
|
|
89250
89250
|
const workload = getWorkload();
|
|
89251
89251
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
89252
|
-
return `claude-cli/${"1.1.
|
|
89252
|
+
return `claude-cli/${"1.1.18"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
89253
89253
|
}
|
|
89254
89254
|
function getMCPUserAgent() {
|
|
89255
89255
|
const parts = [];
|
|
@@ -89263,7 +89263,7 @@ function getMCPUserAgent() {
|
|
|
89263
89263
|
parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
|
|
89264
89264
|
}
|
|
89265
89265
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
89266
|
-
return `claude-code/${"1.1.
|
|
89266
|
+
return `claude-code/${"1.1.18"}${suffix}`;
|
|
89267
89267
|
}
|
|
89268
89268
|
function getWebFetchUserAgent() {
|
|
89269
89269
|
return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
|
|
@@ -95142,9 +95142,9 @@ var require_dist_cjs129 = __commonJS((exports, module) => {
|
|
|
95142
95142
|
__name(_ClassBuilder, "ClassBuilder");
|
|
95143
95143
|
var ClassBuilder = _ClassBuilder;
|
|
95144
95144
|
var SENSITIVE_STRING = "***SensitiveInformation***";
|
|
95145
|
-
var createAggregatedClient = /* @__PURE__ */ __name((
|
|
95146
|
-
for (const command of Object.keys(
|
|
95147
|
-
const CommandCtor =
|
|
95145
|
+
var createAggregatedClient = /* @__PURE__ */ __name((commands, Client2) => {
|
|
95146
|
+
for (const command of Object.keys(commands)) {
|
|
95147
|
+
const CommandCtor = commands[command];
|
|
95148
95148
|
const methodImpl = /* @__PURE__ */ __name(async function(args, optionsOrCb, cb) {
|
|
95149
95149
|
const command2 = new CommandCtor(args);
|
|
95150
95150
|
if (typeof optionsOrCb === "function") {
|
|
@@ -99172,7 +99172,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
99172
99172
|
if (!isAttributionHeaderEnabled()) {
|
|
99173
99173
|
return "";
|
|
99174
99174
|
}
|
|
99175
|
-
const version = `${"1.1.
|
|
99175
|
+
const version = `${"1.1.18"}.${fingerprint}`;
|
|
99176
99176
|
const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
|
|
99177
99177
|
const cch = "";
|
|
99178
99178
|
const workload = getWorkload();
|
|
@@ -132183,8 +132183,8 @@ async function detectJetBrainsIDEFromParentProcessAsync() {
|
|
|
132183
132183
|
return null;
|
|
132184
132184
|
}
|
|
132185
132185
|
try {
|
|
132186
|
-
const
|
|
132187
|
-
for (const command of
|
|
132186
|
+
const commands = await getAncestorCommandsAsync(process.pid, 10);
|
|
132187
|
+
for (const command of commands) {
|
|
132188
132188
|
const lowerCommand = command.toLowerCase();
|
|
132189
132189
|
for (const ide of JETBRAINS_IDES) {
|
|
132190
132190
|
if (lowerCommand.includes(ide)) {
|
|
@@ -132719,7 +132719,7 @@ var init_metadata = __esm(() => {
|
|
|
132719
132719
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
132720
132720
|
WHITESPACE_REGEX = /\s+/;
|
|
132721
132721
|
getVersionBase = memoize_default(() => {
|
|
132722
|
-
const match = "1.1.
|
|
132722
|
+
const match = "1.1.18".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
132723
132723
|
return match ? match[0] : undefined;
|
|
132724
132724
|
});
|
|
132725
132725
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -132759,9 +132759,9 @@ var init_metadata = __esm(() => {
|
|
|
132759
132759
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
132760
132760
|
isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
|
|
132761
132761
|
isClaudeAiAuth: isClaudeAISubscriber(),
|
|
132762
|
-
version: "1.1.
|
|
132762
|
+
version: "1.1.18",
|
|
132763
132763
|
versionBase: getVersionBase(),
|
|
132764
|
-
buildTime: "2026-04-
|
|
132764
|
+
buildTime: "2026-04-09T14:11:44.775Z",
|
|
132765
132765
|
deploymentEnvironment: env4.detectDeploymentEnvironment(),
|
|
132766
132766
|
...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
|
|
132767
132767
|
githubEventName: process.env.GITHUB_EVENT_NAME,
|
|
@@ -140878,16 +140878,16 @@ function getBuiltinPlugins() {
|
|
|
140878
140878
|
}
|
|
140879
140879
|
function getBuiltinPluginSkillCommands() {
|
|
140880
140880
|
const { enabled } = getBuiltinPlugins();
|
|
140881
|
-
const
|
|
140881
|
+
const commands = [];
|
|
140882
140882
|
for (const plugin of enabled) {
|
|
140883
140883
|
const definition = BUILTIN_PLUGINS.get(plugin.name);
|
|
140884
140884
|
if (!definition?.skills)
|
|
140885
140885
|
continue;
|
|
140886
140886
|
for (const skill of definition.skills) {
|
|
140887
|
-
|
|
140887
|
+
commands.push(skillDefinitionToCommand(skill));
|
|
140888
140888
|
}
|
|
140889
140889
|
}
|
|
140890
|
-
return
|
|
140890
|
+
return commands;
|
|
140891
140891
|
}
|
|
140892
140892
|
function skillDefinitionToCommand(definition) {
|
|
140893
140893
|
return {
|
|
@@ -147282,9 +147282,9 @@ var init_claudeCodeGuideAgent = __esm(() => {
|
|
|
147282
147282
|
model: "haiku",
|
|
147283
147283
|
permissionMode: "dontAsk",
|
|
147284
147284
|
getSystemPrompt({ toolUseContext }) {
|
|
147285
|
-
const
|
|
147285
|
+
const commands = toolUseContext.options.commands;
|
|
147286
147286
|
const contextSections = [];
|
|
147287
|
-
const customCommands =
|
|
147287
|
+
const customCommands = commands.filter((cmd) => cmd.type === "prompt");
|
|
147288
147288
|
if (customCommands.length > 0) {
|
|
147289
147289
|
const commandList = customCommands.map((cmd) => `- /${cmd.name}: ${cmd.description}`).join(`
|
|
147290
147290
|
`);
|
|
@@ -147305,7 +147305,7 @@ ${agentList}`);
|
|
|
147305
147305
|
contextSections.push(`**Configured MCP servers:**
|
|
147306
147306
|
${mcpList}`);
|
|
147307
147307
|
}
|
|
147308
|
-
const pluginCommands =
|
|
147308
|
+
const pluginCommands = commands.filter((cmd) => cmd.type === "prompt" && cmd.source === "plugin");
|
|
147309
147309
|
if (pluginCommands.length > 0) {
|
|
147310
147310
|
const pluginList = pluginCommands.map((cmd) => `- /${cmd.name}: ${cmd.description}`).join(`
|
|
147311
147311
|
`);
|
|
@@ -148265,11 +148265,11 @@ function formatCommandDescription(cmd) {
|
|
|
148265
148265
|
}
|
|
148266
148266
|
return `- ${cmd.name}: ${getCommandDescription(cmd)}`;
|
|
148267
148267
|
}
|
|
148268
|
-
function formatCommandsWithinBudget(
|
|
148269
|
-
if (
|
|
148268
|
+
function formatCommandsWithinBudget(commands, contextWindowTokens) {
|
|
148269
|
+
if (commands.length === 0)
|
|
148270
148270
|
return "";
|
|
148271
148271
|
const budget = getCharBudget(contextWindowTokens);
|
|
148272
|
-
const fullEntries =
|
|
148272
|
+
const fullEntries = commands.map((cmd) => ({
|
|
148273
148273
|
cmd,
|
|
148274
148274
|
full: formatCommandDescription(cmd)
|
|
148275
148275
|
}));
|
|
@@ -148280,8 +148280,8 @@ function formatCommandsWithinBudget(commands2, contextWindowTokens) {
|
|
|
148280
148280
|
}
|
|
148281
148281
|
const bundledIndices = new Set;
|
|
148282
148282
|
const restCommands = [];
|
|
148283
|
-
for (let i2 = 0;i2 <
|
|
148284
|
-
const cmd =
|
|
148283
|
+
for (let i2 = 0;i2 < commands.length; i2++) {
|
|
148284
|
+
const cmd = commands[i2];
|
|
148285
148285
|
if (cmd.type === "prompt" && cmd.source === "bundled") {
|
|
148286
148286
|
bundledIndices.add(i2);
|
|
148287
148287
|
} else {
|
|
@@ -148300,7 +148300,7 @@ function formatCommandsWithinBudget(commands2, contextWindowTokens) {
|
|
|
148300
148300
|
if (maxDescLen < MIN_DESC_LENGTH) {
|
|
148301
148301
|
if (process.env.USER_TYPE === "ant") {
|
|
148302
148302
|
logEvent("tengu_skill_descriptions_truncated", {
|
|
148303
|
-
skill_count:
|
|
148303
|
+
skill_count: commands.length,
|
|
148304
148304
|
budget,
|
|
148305
148305
|
full_total: fullTotal,
|
|
148306
148306
|
truncation_mode: "names_only",
|
|
@@ -148309,13 +148309,13 @@ function formatCommandsWithinBudget(commands2, contextWindowTokens) {
|
|
|
148309
148309
|
bundled_chars: bundledChars
|
|
148310
148310
|
});
|
|
148311
148311
|
}
|
|
148312
|
-
return
|
|
148312
|
+
return commands.map((cmd, i2) => bundledIndices.has(i2) ? fullEntries[i2].full : `- ${cmd.name}`).join(`
|
|
148313
148313
|
`);
|
|
148314
148314
|
}
|
|
148315
148315
|
const truncatedCount = count(restCommands, (cmd) => stringWidth(getCommandDescription(cmd)) > maxDescLen);
|
|
148316
148316
|
if (process.env.USER_TYPE === "ant") {
|
|
148317
148317
|
logEvent("tengu_skill_descriptions_truncated", {
|
|
148318
|
-
skill_count:
|
|
148318
|
+
skill_count: commands.length,
|
|
148319
148319
|
budget,
|
|
148320
148320
|
full_total: fullTotal,
|
|
148321
148321
|
truncation_mode: "description_trimmed",
|
|
@@ -148325,7 +148325,7 @@ function formatCommandsWithinBudget(commands2, contextWindowTokens) {
|
|
|
148325
148325
|
bundled_chars: bundledChars
|
|
148326
148326
|
});
|
|
148327
148327
|
}
|
|
148328
|
-
return
|
|
148328
|
+
return commands.map((cmd, i2) => {
|
|
148329
148329
|
if (bundledIndices.has(i2))
|
|
148330
148330
|
return fullEntries[i2].full;
|
|
148331
148331
|
const description = getCommandDescription(cmd);
|
|
@@ -197348,7 +197348,7 @@ function getTelemetryAttributes() {
|
|
|
197348
197348
|
attributes["session.id"] = sessionId;
|
|
197349
197349
|
}
|
|
197350
197350
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
197351
|
-
attributes["app.version"] = "1.1.
|
|
197351
|
+
attributes["app.version"] = "1.1.18";
|
|
197352
197352
|
}
|
|
197353
197353
|
const oauthAccount = getOauthAccountInfo();
|
|
197354
197354
|
if (oauthAccount) {
|
|
@@ -197766,23 +197766,23 @@ function parseForSecurityFromAst(cmd, root3) {
|
|
|
197766
197766
|
return walkProgram(root3);
|
|
197767
197767
|
}
|
|
197768
197768
|
function walkProgram(root3) {
|
|
197769
|
-
const
|
|
197769
|
+
const commands = [];
|
|
197770
197770
|
const varScope = new Map;
|
|
197771
|
-
const err2 = collectCommands(root3,
|
|
197771
|
+
const err2 = collectCommands(root3, commands, varScope);
|
|
197772
197772
|
if (err2)
|
|
197773
197773
|
return err2;
|
|
197774
|
-
return { kind: "simple", commands
|
|
197774
|
+
return { kind: "simple", commands };
|
|
197775
197775
|
}
|
|
197776
|
-
function collectCommands(node,
|
|
197776
|
+
function collectCommands(node, commands, varScope) {
|
|
197777
197777
|
if (node.type === "command") {
|
|
197778
|
-
const result = walkCommand(node, [],
|
|
197778
|
+
const result = walkCommand(node, [], commands, varScope);
|
|
197779
197779
|
if (result.kind !== "simple")
|
|
197780
197780
|
return result;
|
|
197781
|
-
|
|
197781
|
+
commands.push(...result.commands);
|
|
197782
197782
|
return null;
|
|
197783
197783
|
}
|
|
197784
197784
|
if (node.type === "redirected_statement") {
|
|
197785
|
-
return walkRedirectedStatement(node,
|
|
197785
|
+
return walkRedirectedStatement(node, commands, varScope);
|
|
197786
197786
|
}
|
|
197787
197787
|
if (node.type === "comment") {
|
|
197788
197788
|
return null;
|
|
@@ -197809,7 +197809,7 @@ function collectCommands(node, commands2, varScope) {
|
|
|
197809
197809
|
}
|
|
197810
197810
|
continue;
|
|
197811
197811
|
}
|
|
197812
|
-
const err2 = collectCommands(child,
|
|
197812
|
+
const err2 = collectCommands(child, commands, scope);
|
|
197813
197813
|
if (err2)
|
|
197814
197814
|
return err2;
|
|
197815
197815
|
}
|
|
@@ -197821,7 +197821,7 @@ function collectCommands(node, commands2, varScope) {
|
|
|
197821
197821
|
continue;
|
|
197822
197822
|
if (child.type === "!")
|
|
197823
197823
|
continue;
|
|
197824
|
-
return collectCommands(child,
|
|
197824
|
+
return collectCommands(child, commands, varScope);
|
|
197825
197825
|
}
|
|
197826
197826
|
return null;
|
|
197827
197827
|
}
|
|
@@ -197843,7 +197843,7 @@ function collectCommands(node, commands2, varScope) {
|
|
|
197843
197843
|
case "raw_string":
|
|
197844
197844
|
case "string":
|
|
197845
197845
|
case "concatenation": {
|
|
197846
|
-
const arg = walkArgument(child,
|
|
197846
|
+
const arg = walkArgument(child, commands, varScope);
|
|
197847
197847
|
if (typeof arg !== "string")
|
|
197848
197848
|
return arg;
|
|
197849
197849
|
if ((argv[0] === "declare" || argv[0] === "typeset" || argv[0] === "local") && /^-[a-zA-Z]*[niaA]/.test(arg)) {
|
|
@@ -197864,7 +197864,7 @@ function collectCommands(node, commands2, varScope) {
|
|
|
197864
197864
|
break;
|
|
197865
197865
|
}
|
|
197866
197866
|
case "variable_assignment": {
|
|
197867
|
-
const ev = walkVariableAssignment(child,
|
|
197867
|
+
const ev = walkVariableAssignment(child, commands, varScope);
|
|
197868
197868
|
if ("kind" in ev)
|
|
197869
197869
|
return ev;
|
|
197870
197870
|
applyVarToScope(varScope, ev);
|
|
@@ -197878,11 +197878,11 @@ function collectCommands(node, commands2, varScope) {
|
|
|
197878
197878
|
return tooComplex(child);
|
|
197879
197879
|
}
|
|
197880
197880
|
}
|
|
197881
|
-
|
|
197881
|
+
commands.push({ argv, envVars: [], redirects: [], text: node.text });
|
|
197882
197882
|
return null;
|
|
197883
197883
|
}
|
|
197884
197884
|
if (node.type === "variable_assignment") {
|
|
197885
|
-
const ev = walkVariableAssignment(node,
|
|
197885
|
+
const ev = walkVariableAssignment(node, commands, varScope);
|
|
197886
197886
|
if ("kind" in ev)
|
|
197887
197887
|
return ev;
|
|
197888
197888
|
applyVarToScope(varScope, ev);
|
|
@@ -197901,11 +197901,11 @@ function collectCommands(node, commands2, varScope) {
|
|
|
197901
197901
|
} else if (child.type === "for" || child.type === "in" || child.type === "select" || child.type === ";") {
|
|
197902
197902
|
continue;
|
|
197903
197903
|
} else if (child.type === "command_substitution") {
|
|
197904
|
-
const err2 = collectCommandSubstitution(child,
|
|
197904
|
+
const err2 = collectCommandSubstitution(child, commands, varScope);
|
|
197905
197905
|
if (err2)
|
|
197906
197906
|
return err2;
|
|
197907
197907
|
} else {
|
|
197908
|
-
const arg = walkArgument(child,
|
|
197908
|
+
const arg = walkArgument(child, commands, varScope);
|
|
197909
197909
|
if (typeof arg !== "string")
|
|
197910
197910
|
return arg;
|
|
197911
197911
|
}
|
|
@@ -197926,7 +197926,7 @@ function collectCommands(node, commands2, varScope) {
|
|
|
197926
197926
|
continue;
|
|
197927
197927
|
if (c5.type === "do" || c5.type === "done" || c5.type === ";")
|
|
197928
197928
|
continue;
|
|
197929
|
-
const err2 = collectCommands(c5,
|
|
197929
|
+
const err2 = collectCommands(c5, commands, bodyScope);
|
|
197930
197930
|
if (err2)
|
|
197931
197931
|
return err2;
|
|
197932
197932
|
}
|
|
@@ -197951,7 +197951,7 @@ function collectCommands(node, commands2, varScope) {
|
|
|
197951
197951
|
continue;
|
|
197952
197952
|
if (c5.type === "do" || c5.type === "done" || c5.type === ";")
|
|
197953
197953
|
continue;
|
|
197954
|
-
const err3 = collectCommands(c5,
|
|
197954
|
+
const err3 = collectCommands(c5, commands, bodyScope);
|
|
197955
197955
|
if (err3)
|
|
197956
197956
|
return err3;
|
|
197957
197957
|
}
|
|
@@ -197965,20 +197965,20 @@ function collectCommands(node, commands2, varScope) {
|
|
|
197965
197965
|
if (c5.type === "elif" || c5.type === "else" || c5.type === "then" || c5.type === ";") {
|
|
197966
197966
|
continue;
|
|
197967
197967
|
}
|
|
197968
|
-
const err3 = collectCommands(c5,
|
|
197968
|
+
const err3 = collectCommands(c5, commands, branchScope);
|
|
197969
197969
|
if (err3)
|
|
197970
197970
|
return err3;
|
|
197971
197971
|
}
|
|
197972
197972
|
continue;
|
|
197973
197973
|
}
|
|
197974
197974
|
const targetScope = seenThen ? new Map(varScope) : varScope;
|
|
197975
|
-
const before =
|
|
197976
|
-
const err2 = collectCommands(child,
|
|
197975
|
+
const before = commands.length;
|
|
197976
|
+
const err2 = collectCommands(child, commands, targetScope);
|
|
197977
197977
|
if (err2)
|
|
197978
197978
|
return err2;
|
|
197979
197979
|
if (!seenThen) {
|
|
197980
|
-
for (let i2 = before;i2 <
|
|
197981
|
-
const c5 =
|
|
197980
|
+
for (let i2 = before;i2 < commands.length; i2++) {
|
|
197981
|
+
const c5 = commands[i2];
|
|
197982
197982
|
if (c5?.argv[0] === "read") {
|
|
197983
197983
|
for (const a of c5.argv.slice(1)) {
|
|
197984
197984
|
if (!a.startsWith("-") && /^[A-Za-z_][A-Za-z0-9_]*$/.test(a)) {
|
|
@@ -198006,7 +198006,7 @@ function collectCommands(node, commands2, varScope) {
|
|
|
198006
198006
|
continue;
|
|
198007
198007
|
if (child.type === "(" || child.type === ")")
|
|
198008
198008
|
continue;
|
|
198009
|
-
const err2 = collectCommands(child,
|
|
198009
|
+
const err2 = collectCommands(child, commands, innerScope);
|
|
198010
198010
|
if (err2)
|
|
198011
198011
|
return err2;
|
|
198012
198012
|
}
|
|
@@ -198021,11 +198021,11 @@ function collectCommands(node, commands2, varScope) {
|
|
|
198021
198021
|
continue;
|
|
198022
198022
|
if (child.type === "[" || child.type === "]")
|
|
198023
198023
|
continue;
|
|
198024
|
-
const err2 = walkTestExpr(child, argv,
|
|
198024
|
+
const err2 = walkTestExpr(child, argv, commands, varScope);
|
|
198025
198025
|
if (err2)
|
|
198026
198026
|
return err2;
|
|
198027
198027
|
}
|
|
198028
|
-
|
|
198028
|
+
commands.push({ argv, envVars: [], redirects: [], text: node.text });
|
|
198029
198029
|
return null;
|
|
198030
198030
|
}
|
|
198031
198031
|
if (node.type === "unset_command") {
|
|
@@ -198042,7 +198042,7 @@ function collectCommands(node, commands2, varScope) {
|
|
|
198042
198042
|
varScope.delete(child.text);
|
|
198043
198043
|
break;
|
|
198044
198044
|
case "word": {
|
|
198045
|
-
const arg = walkArgument(child,
|
|
198045
|
+
const arg = walkArgument(child, commands, varScope);
|
|
198046
198046
|
if (typeof arg !== "string")
|
|
198047
198047
|
return arg;
|
|
198048
198048
|
argv.push(arg);
|
|
@@ -198052,7 +198052,7 @@ function collectCommands(node, commands2, varScope) {
|
|
|
198052
198052
|
return tooComplex(child);
|
|
198053
198053
|
}
|
|
198054
198054
|
}
|
|
198055
|
-
|
|
198055
|
+
commands.push({ argv, envVars: [], redirects: [], text: node.text });
|
|
198056
198056
|
return null;
|
|
198057
198057
|
}
|
|
198058
198058
|
return tooComplex(node);
|
|
@@ -198099,14 +198099,14 @@ function walkTestExpr(node, argv, innerCommands, varScope) {
|
|
|
198099
198099
|
}
|
|
198100
198100
|
}
|
|
198101
198101
|
}
|
|
198102
|
-
function walkRedirectedStatement(node,
|
|
198102
|
+
function walkRedirectedStatement(node, commands, varScope) {
|
|
198103
198103
|
const redirects = [];
|
|
198104
198104
|
let innerCommand = null;
|
|
198105
198105
|
for (const child of node.children) {
|
|
198106
198106
|
if (!child)
|
|
198107
198107
|
continue;
|
|
198108
198108
|
if (child.type === "file_redirect") {
|
|
198109
|
-
const r = walkFileRedirect(child,
|
|
198109
|
+
const r = walkFileRedirect(child, commands, varScope);
|
|
198110
198110
|
if ("kind" in r)
|
|
198111
198111
|
return r;
|
|
198112
198112
|
redirects.push(r);
|
|
@@ -198121,15 +198121,15 @@ function walkRedirectedStatement(node, commands2, varScope) {
|
|
|
198121
198121
|
}
|
|
198122
198122
|
}
|
|
198123
198123
|
if (!innerCommand) {
|
|
198124
|
-
|
|
198124
|
+
commands.push({ argv: [], envVars: [], redirects, text: node.text });
|
|
198125
198125
|
return null;
|
|
198126
198126
|
}
|
|
198127
|
-
const before =
|
|
198128
|
-
const err2 = collectCommands(innerCommand,
|
|
198127
|
+
const before = commands.length;
|
|
198128
|
+
const err2 = collectCommands(innerCommand, commands, varScope);
|
|
198129
198129
|
if (err2)
|
|
198130
198130
|
return err2;
|
|
198131
|
-
if (
|
|
198132
|
-
const last2 =
|
|
198131
|
+
if (commands.length > before && redirects.length > 0) {
|
|
198132
|
+
const last2 = commands[commands.length - 1];
|
|
198133
198133
|
if (last2)
|
|
198134
198134
|
last2.redirects.push(...redirects);
|
|
198135
198135
|
}
|
|
@@ -198654,8 +198654,8 @@ function tooComplex(node) {
|
|
|
198654
198654
|
const reason = node.type === "ERROR" ? "Parse error" : DANGEROUS_TYPES.has(node.type) ? `Contains ${node.type}` : `Unhandled node type: ${node.type}`;
|
|
198655
198655
|
return { kind: "too-complex", reason, nodeType: node.type };
|
|
198656
198656
|
}
|
|
198657
|
-
function checkSemantics(
|
|
198658
|
-
for (const cmd of
|
|
198657
|
+
function checkSemantics(commands) {
|
|
198658
|
+
for (const cmd of commands) {
|
|
198659
198659
|
let a = cmd.argv;
|
|
198660
198660
|
for (;; ) {
|
|
198661
198661
|
if (a[0] === "time" || a[0] === "nohup") {
|
|
@@ -203851,8 +203851,8 @@ function isLinePrintingCommand(command, expressions) {
|
|
|
203851
203851
|
return false;
|
|
203852
203852
|
}
|
|
203853
203853
|
for (const expr of expressions) {
|
|
203854
|
-
const
|
|
203855
|
-
for (const cmd of
|
|
203854
|
+
const commands = expr.split(";");
|
|
203855
|
+
for (const cmd of commands) {
|
|
203856
203856
|
if (!isPrintCommand(cmd.trim())) {
|
|
203857
203857
|
return false;
|
|
203858
203858
|
}
|
|
@@ -204137,8 +204137,8 @@ function containsDangerousOperations(expression) {
|
|
|
204137
204137
|
return false;
|
|
204138
204138
|
}
|
|
204139
204139
|
function checkSedConstraints(input, toolPermissionContext) {
|
|
204140
|
-
const
|
|
204141
|
-
for (const cmd of
|
|
204140
|
+
const commands = splitCommand_DEPRECATED(input.command);
|
|
204141
|
+
for (const cmd of commands) {
|
|
204142
204142
|
const trimmed = cmd.trim();
|
|
204143
204143
|
const baseCmd = trimmed.split(/\s+/)[0];
|
|
204144
204144
|
if (baseCmd !== "sed") {
|
|
@@ -204473,8 +204473,8 @@ function checkPathConstraints(input, cwd2, toolPermissionContext, compoundComman
|
|
|
204473
204473
|
}
|
|
204474
204474
|
}
|
|
204475
204475
|
} else {
|
|
204476
|
-
const
|
|
204477
|
-
for (const cmd of
|
|
204476
|
+
const commands = splitCommand_DEPRECATED(input.command);
|
|
204477
|
+
for (const cmd of commands) {
|
|
204478
204478
|
const result = validateSinglePathCommand(cmd, cwd2, toolPermissionContext, compoundCommandHasCd);
|
|
204479
204479
|
if (result.behavior === "ask" || result.behavior === "deny") {
|
|
204480
204480
|
return result;
|
|
@@ -224752,15 +224752,15 @@ function commandBelongsToServer(command, serverName) {
|
|
|
224752
224752
|
return false;
|
|
224753
224753
|
return name.startsWith(`mcp__${normalized}__`) || name.startsWith(`${normalized}:`);
|
|
224754
224754
|
}
|
|
224755
|
-
function filterMcpPromptsByServer(
|
|
224756
|
-
return
|
|
224755
|
+
function filterMcpPromptsByServer(commands, serverName) {
|
|
224756
|
+
return commands.filter((c5) => commandBelongsToServer(c5, serverName) && !(c5.type === "prompt" && c5.loadedFrom === "mcp"));
|
|
224757
224757
|
}
|
|
224758
224758
|
function excludeToolsByServer(tools, serverName) {
|
|
224759
224759
|
const prefix = `mcp__${normalizeNameForMCP(serverName)}__`;
|
|
224760
224760
|
return tools.filter((tool) => !tool.name?.startsWith(prefix));
|
|
224761
224761
|
}
|
|
224762
|
-
function excludeCommandsByServer(
|
|
224763
|
-
return
|
|
224762
|
+
function excludeCommandsByServer(commands, serverName) {
|
|
224763
|
+
return commands.filter((c5) => !commandBelongsToServer(c5, serverName));
|
|
224764
224764
|
}
|
|
224765
224765
|
function excludeResourcesByServer(resources, serverName) {
|
|
224766
224766
|
const result = { ...resources };
|
|
@@ -224791,17 +224791,17 @@ function excludeStalePluginClients(mcp, configs) {
|
|
|
224791
224791
|
if (stale.length === 0) {
|
|
224792
224792
|
return { ...mcp, stale: [] };
|
|
224793
224793
|
}
|
|
224794
|
-
let { tools, commands
|
|
224794
|
+
let { tools, commands, resources } = mcp;
|
|
224795
224795
|
for (const s of stale) {
|
|
224796
224796
|
tools = excludeToolsByServer(tools, s.name);
|
|
224797
|
-
|
|
224797
|
+
commands = excludeCommandsByServer(commands, s.name);
|
|
224798
224798
|
resources = excludeResourcesByServer(resources, s.name);
|
|
224799
224799
|
}
|
|
224800
224800
|
const staleNames = new Set(stale.map((c5) => c5.name));
|
|
224801
224801
|
return {
|
|
224802
224802
|
clients: mcp.clients.filter((c5) => !staleNames.has(c5.name)),
|
|
224803
224803
|
tools,
|
|
224804
|
-
commands
|
|
224804
|
+
commands,
|
|
224805
224805
|
resources,
|
|
224806
224806
|
stale
|
|
224807
224807
|
};
|
|
@@ -229409,7 +229409,7 @@ function getInstallationEnv() {
|
|
|
229409
229409
|
return;
|
|
229410
229410
|
}
|
|
229411
229411
|
function getClaudeCodeVersion() {
|
|
229412
|
-
return "1.1.
|
|
229412
|
+
return "1.1.18";
|
|
229413
229413
|
}
|
|
229414
229414
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
229415
229415
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -234390,7 +234390,7 @@ async function reconnectMcpServerImpl(name, config) {
|
|
|
234390
234390
|
Promise.resolve([]),
|
|
234391
234391
|
supportsResources ? fetchResourcesForClient(client4) : Promise.resolve([])
|
|
234392
234392
|
]);
|
|
234393
|
-
const
|
|
234393
|
+
const commands = [...mcpCommands, ...mcpSkills];
|
|
234394
234394
|
const resourceTools = [];
|
|
234395
234395
|
if (supportsResources) {
|
|
234396
234396
|
const hasResourceTools = [ListMcpResourcesTool, ReadMcpResourceTool].some((tool) => tools.some((t) => toolMatchesName(t, tool.name)));
|
|
@@ -234401,7 +234401,7 @@ async function reconnectMcpServerImpl(name, config) {
|
|
|
234401
234401
|
return {
|
|
234402
234402
|
client: client4,
|
|
234403
234403
|
tools: [...tools, ...resourceTools],
|
|
234404
|
-
commands
|
|
234404
|
+
commands,
|
|
234405
234405
|
resources: resources.length > 0 ? resources : undefined
|
|
234406
234406
|
};
|
|
234407
234407
|
} catch (error5) {
|
|
@@ -234489,7 +234489,7 @@ async function getMcpToolsCommandsAndResources(onConnectionAttempt, mcpConfigs)
|
|
|
234489
234489
|
Promise.resolve([]),
|
|
234490
234490
|
supportsResources ? fetchResourcesForClient(client4) : Promise.resolve([])
|
|
234491
234491
|
]);
|
|
234492
|
-
const
|
|
234492
|
+
const commands = [...mcpCommands, ...mcpSkills];
|
|
234493
234493
|
const resourceTools = [];
|
|
234494
234494
|
if (supportsResources && !resourceToolsAdded) {
|
|
234495
234495
|
resourceToolsAdded = true;
|
|
@@ -234498,7 +234498,7 @@ async function getMcpToolsCommandsAndResources(onConnectionAttempt, mcpConfigs)
|
|
|
234498
234498
|
onConnectionAttempt({
|
|
234499
234499
|
client: client4,
|
|
234500
234500
|
tools: [...tools, ...resourceTools],
|
|
234501
|
-
commands
|
|
234501
|
+
commands,
|
|
234502
234502
|
resources: resources.length > 0 ? resources : undefined
|
|
234503
234503
|
});
|
|
234504
234504
|
} catch (error5) {
|
|
@@ -234530,26 +234530,26 @@ function prefetchAllMcpResources(mcpConfigs) {
|
|
|
234530
234530
|
}
|
|
234531
234531
|
const clients = [];
|
|
234532
234532
|
const tools = [];
|
|
234533
|
-
const
|
|
234533
|
+
const commands = [];
|
|
234534
234534
|
getMcpToolsCommandsAndResources((result) => {
|
|
234535
234535
|
clients.push(result.client);
|
|
234536
234536
|
tools.push(...result.tools);
|
|
234537
|
-
|
|
234537
|
+
commands.push(...result.commands);
|
|
234538
234538
|
completedCount++;
|
|
234539
234539
|
if (completedCount >= pendingCount) {
|
|
234540
|
-
const commandsMetadataLength =
|
|
234540
|
+
const commandsMetadataLength = commands.reduce((sum, command) => {
|
|
234541
234541
|
const commandMetadataLength = command.name.length + (command.description ?? "").length + (command.argumentHint ?? "").length;
|
|
234542
234542
|
return sum + commandMetadataLength;
|
|
234543
234543
|
}, 0);
|
|
234544
234544
|
logEvent("tengu_mcp_tools_commands_loaded", {
|
|
234545
234545
|
tools_count: tools.length,
|
|
234546
|
-
commands_count:
|
|
234546
|
+
commands_count: commands.length,
|
|
234547
234547
|
commands_metadata_length: commandsMetadataLength
|
|
234548
234548
|
});
|
|
234549
234549
|
resolve18({
|
|
234550
234550
|
clients,
|
|
234551
234551
|
tools,
|
|
234552
|
-
commands
|
|
234552
|
+
commands
|
|
234553
234553
|
});
|
|
234554
234554
|
}
|
|
234555
234555
|
}, mcpConfigs).catch((error5) => {
|
|
@@ -235011,7 +235011,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
235011
235011
|
const client4 = new Client({
|
|
235012
235012
|
name: "localclawd",
|
|
235013
235013
|
title: "localclawd",
|
|
235014
|
-
version: "1.1.
|
|
235014
|
+
version: "1.1.18",
|
|
235015
235015
|
description: "local-first AI coding tool",
|
|
235016
235016
|
websiteUrl: PRODUCT_URL
|
|
235017
235017
|
}, {
|
|
@@ -235364,7 +235364,7 @@ var init_client9 = __esm(() => {
|
|
|
235364
235364
|
const client4 = new Client({
|
|
235365
235365
|
name: "localclawd",
|
|
235366
235366
|
title: "localclawd",
|
|
235367
|
-
version: "1.1.
|
|
235367
|
+
version: "1.1.18",
|
|
235368
235368
|
description: "local-first AI coding tool",
|
|
235369
235369
|
websiteUrl: PRODUCT_URL
|
|
235370
235370
|
}, {
|
|
@@ -240594,7 +240594,7 @@ function AssistantToolUseMessage(t0) {
|
|
|
240594
240594
|
param,
|
|
240595
240595
|
addMargin,
|
|
240596
240596
|
tools,
|
|
240597
|
-
commands
|
|
240597
|
+
commands,
|
|
240598
240598
|
verbose,
|
|
240599
240599
|
inProgressToolUseIDs,
|
|
240600
240600
|
progressMessagesForMessage,
|
|
@@ -240720,13 +240720,13 @@ function AssistantToolUseMessage(t0) {
|
|
|
240720
240720
|
return null;
|
|
240721
240721
|
}
|
|
240722
240722
|
let t4;
|
|
240723
|
-
if ($2[24] !==
|
|
240723
|
+
if ($2[24] !== commands || $2[25] !== input_0.data || $2[26] !== input_0.success || $2[27] !== theme || $2[28] !== tool_0 || $2[29] !== verbose) {
|
|
240724
240724
|
t4 = input_0.success ? renderToolUseMessage4(tool_0, input_0.data, {
|
|
240725
240725
|
theme,
|
|
240726
240726
|
verbose,
|
|
240727
|
-
commands
|
|
240727
|
+
commands
|
|
240728
240728
|
}) : null;
|
|
240729
|
-
$2[24] =
|
|
240729
|
+
$2[24] = commands;
|
|
240730
240730
|
$2[25] = input_0.data;
|
|
240731
240731
|
$2[26] = input_0.success;
|
|
240732
240732
|
$2[27] = theme;
|
|
@@ -240929,7 +240929,7 @@ function _temp5(state) {
|
|
|
240929
240929
|
function renderToolUseMessage4(tool, input, {
|
|
240930
240930
|
theme,
|
|
240931
240931
|
verbose,
|
|
240932
|
-
commands
|
|
240932
|
+
commands
|
|
240933
240933
|
}) {
|
|
240934
240934
|
try {
|
|
240935
240935
|
const parsed = tool.inputSchema.safeParse(input);
|
|
@@ -240939,7 +240939,7 @@ function renderToolUseMessage4(tool, input, {
|
|
|
240939
240939
|
return tool.renderToolUseMessage(parsed.data, {
|
|
240940
240940
|
theme,
|
|
240941
240941
|
verbose,
|
|
240942
|
-
commands
|
|
240942
|
+
commands
|
|
240943
240943
|
});
|
|
240944
240944
|
} catch (error5) {
|
|
240945
240945
|
logError(new Error(`Error rendering tool use message for ${tool.name}: ${error5}`));
|
|
@@ -249843,7 +249843,7 @@ function MessageImpl(t0) {
|
|
|
249843
249843
|
containerWidth,
|
|
249844
249844
|
addMargin,
|
|
249845
249845
|
tools,
|
|
249846
|
-
commands
|
|
249846
|
+
commands,
|
|
249847
249847
|
verbose,
|
|
249848
249848
|
inProgressToolUseIDs,
|
|
249849
249849
|
progressMessagesForMessage,
|
|
@@ -249882,14 +249882,14 @@ function MessageImpl(t0) {
|
|
|
249882
249882
|
case "assistant": {
|
|
249883
249883
|
const t2 = containerWidth ?? "100%";
|
|
249884
249884
|
let t3;
|
|
249885
|
-
if ($2[5] !== addMargin || $2[6] !==
|
|
249885
|
+
if ($2[5] !== addMargin || $2[6] !== commands || $2[7] !== inProgressToolUseIDs || $2[8] !== isTranscriptMode || $2[9] !== lastThinkingBlockId || $2[10] !== lookups || $2[11] !== message.advisorModel || $2[12] !== message.message.content || $2[13] !== message.uuid || $2[14] !== onOpenRateLimitOptions || $2[15] !== progressMessagesForMessage || $2[16] !== shouldAnimate || $2[17] !== shouldShowDot || $2[18] !== tools || $2[19] !== verbose || $2[20] !== width) {
|
|
249886
249886
|
let t42;
|
|
249887
|
-
if ($2[22] !== addMargin || $2[23] !==
|
|
249887
|
+
if ($2[22] !== addMargin || $2[23] !== commands || $2[24] !== inProgressToolUseIDs || $2[25] !== isTranscriptMode || $2[26] !== lastThinkingBlockId || $2[27] !== lookups || $2[28] !== message.advisorModel || $2[29] !== message.uuid || $2[30] !== onOpenRateLimitOptions || $2[31] !== progressMessagesForMessage || $2[32] !== shouldAnimate || $2[33] !== shouldShowDot || $2[34] !== tools || $2[35] !== verbose || $2[36] !== width) {
|
|
249888
249888
|
t42 = (_2, index_0) => /* @__PURE__ */ jsx_dev_runtime89.jsxDEV(AssistantMessageBlock, {
|
|
249889
249889
|
param: _2,
|
|
249890
249890
|
addMargin,
|
|
249891
249891
|
tools,
|
|
249892
|
-
commands
|
|
249892
|
+
commands,
|
|
249893
249893
|
verbose,
|
|
249894
249894
|
inProgressToolUseIDs,
|
|
249895
249895
|
progressMessagesForMessage,
|
|
@@ -249905,7 +249905,7 @@ function MessageImpl(t0) {
|
|
|
249905
249905
|
advisorModel: message.advisorModel
|
|
249906
249906
|
}, index_0, false, undefined, this);
|
|
249907
249907
|
$2[22] = addMargin;
|
|
249908
|
-
$2[23] =
|
|
249908
|
+
$2[23] = commands;
|
|
249909
249909
|
$2[24] = inProgressToolUseIDs;
|
|
249910
249910
|
$2[25] = isTranscriptMode;
|
|
249911
249911
|
$2[26] = lastThinkingBlockId;
|
|
@@ -249925,7 +249925,7 @@ function MessageImpl(t0) {
|
|
|
249925
249925
|
}
|
|
249926
249926
|
t3 = message.message.content.map(t42);
|
|
249927
249927
|
$2[5] = addMargin;
|
|
249928
|
-
$2[6] =
|
|
249928
|
+
$2[6] = commands;
|
|
249929
249929
|
$2[7] = inProgressToolUseIDs;
|
|
249930
249930
|
$2[8] = isTranscriptMode;
|
|
249931
249931
|
$2[9] = lastThinkingBlockId;
|
|
@@ -250269,7 +250269,7 @@ function AssistantMessageBlock(t0) {
|
|
|
250269
250269
|
param,
|
|
250270
250270
|
addMargin,
|
|
250271
250271
|
tools,
|
|
250272
|
-
commands
|
|
250272
|
+
commands,
|
|
250273
250273
|
verbose,
|
|
250274
250274
|
inProgressToolUseIDs,
|
|
250275
250275
|
progressMessagesForMessage,
|
|
@@ -250288,12 +250288,12 @@ function AssistantMessageBlock(t0) {
|
|
|
250288
250288
|
switch (param.type) {
|
|
250289
250289
|
case "tool_use": {
|
|
250290
250290
|
let t1;
|
|
250291
|
-
if ($2[9] !== addMargin || $2[10] !==
|
|
250291
|
+
if ($2[9] !== addMargin || $2[10] !== commands || $2[11] !== inProgressToolCallCount || $2[12] !== inProgressToolUseIDs || $2[13] !== isTranscriptMode || $2[14] !== lookups || $2[15] !== param || $2[16] !== progressMessagesForMessage || $2[17] !== shouldAnimate || $2[18] !== shouldShowDot || $2[19] !== tools || $2[20] !== verbose) {
|
|
250292
250292
|
t1 = /* @__PURE__ */ jsx_dev_runtime89.jsxDEV(AssistantToolUseMessage, {
|
|
250293
250293
|
param,
|
|
250294
250294
|
addMargin,
|
|
250295
250295
|
tools,
|
|
250296
|
-
commands
|
|
250296
|
+
commands,
|
|
250297
250297
|
verbose,
|
|
250298
250298
|
inProgressToolUseIDs,
|
|
250299
250299
|
progressMessagesForMessage,
|
|
@@ -250304,7 +250304,7 @@ function AssistantMessageBlock(t0) {
|
|
|
250304
250304
|
isTranscriptMode
|
|
250305
250305
|
}, undefined, false, undefined, this);
|
|
250306
250306
|
$2[9] = addMargin;
|
|
250307
|
-
$2[10] =
|
|
250307
|
+
$2[10] = commands;
|
|
250308
250308
|
$2[11] = inProgressToolCallCount;
|
|
250309
250309
|
$2[12] = inProgressToolUseIDs;
|
|
250310
250310
|
$2[13] = isTranscriptMode;
|
|
@@ -252094,8 +252094,8 @@ function formatCommandLoadingMetadata(command, args) {
|
|
|
252094
252094
|
}
|
|
252095
252095
|
return formatSlashCommandLoadingMetadata(command.name, args);
|
|
252096
252096
|
}
|
|
252097
|
-
async function processPromptSlashCommand(commandName, args,
|
|
252098
|
-
const command = findCommand(commandName,
|
|
252097
|
+
async function processPromptSlashCommand(commandName, args, commands, context5, imageContentBlocks = []) {
|
|
252098
|
+
const command = findCommand(commandName, commands);
|
|
252099
252099
|
if (!command) {
|
|
252100
252100
|
throw new MalformedCommandError(`Unknown command: ${commandName}`);
|
|
252101
252101
|
}
|
|
@@ -254160,7 +254160,7 @@ function getClipboardCommands() {
|
|
|
254160
254160
|
win32: join55(baseTmpDir, screenshotFilename)
|
|
254161
254161
|
};
|
|
254162
254162
|
const screenshotPath = tempPaths[platform3] || tempPaths.linux;
|
|
254163
|
-
const
|
|
254163
|
+
const commands = {
|
|
254164
254164
|
darwin: {
|
|
254165
254165
|
checkImage: `osascript -e 'the clipboard as «class PNGf»'`,
|
|
254166
254166
|
saveImage: `osascript -e 'set png_data to (the clipboard as «class PNGf»)' -e 'set fp to open for access POSIX file "${screenshotPath}" with write permission' -e 'write png_data to fp' -e 'close access fp'`,
|
|
@@ -254181,7 +254181,7 @@ function getClipboardCommands() {
|
|
|
254181
254181
|
}
|
|
254182
254182
|
};
|
|
254183
254183
|
return {
|
|
254184
|
-
commands:
|
|
254184
|
+
commands: commands[platform3] || commands.linux,
|
|
254185
254185
|
screenshotPath
|
|
254186
254186
|
};
|
|
254187
254187
|
}
|
|
@@ -254198,16 +254198,16 @@ async function hasImageInClipboard() {
|
|
|
254198
254198
|
}
|
|
254199
254199
|
async function getImageFromClipboard() {
|
|
254200
254200
|
if (false) {}
|
|
254201
|
-
const { commands
|
|
254201
|
+
const { commands, screenshotPath } = getClipboardCommands();
|
|
254202
254202
|
try {
|
|
254203
|
-
const checkResult = await execa6(
|
|
254203
|
+
const checkResult = await execa6(commands.checkImage, {
|
|
254204
254204
|
shell: true,
|
|
254205
254205
|
reject: false
|
|
254206
254206
|
});
|
|
254207
254207
|
if (checkResult.exitCode !== 0) {
|
|
254208
254208
|
return null;
|
|
254209
254209
|
}
|
|
254210
|
-
const saveResult = await execa6(
|
|
254210
|
+
const saveResult = await execa6(commands.saveImage, {
|
|
254211
254211
|
shell: true,
|
|
254212
254212
|
reject: false
|
|
254213
254213
|
});
|
|
@@ -254222,7 +254222,7 @@ async function getImageFromClipboard() {
|
|
|
254222
254222
|
const resized = await maybeResizeAndDownsampleImageBuffer(imageBuffer, imageBuffer.length, "png");
|
|
254223
254223
|
const base64Image = resized.buffer.toString("base64");
|
|
254224
254224
|
const mediaType = detectImageFormatFromBase64(base64Image);
|
|
254225
|
-
execa6(
|
|
254225
|
+
execa6(commands.deleteFile, { shell: true, reject: false });
|
|
254226
254226
|
return {
|
|
254227
254227
|
base64: base64Image,
|
|
254228
254228
|
mediaType,
|
|
@@ -254233,9 +254233,9 @@ async function getImageFromClipboard() {
|
|
|
254233
254233
|
}
|
|
254234
254234
|
}
|
|
254235
254235
|
async function getImagePathFromClipboard() {
|
|
254236
|
-
const { commands
|
|
254236
|
+
const { commands } = getClipboardCommands();
|
|
254237
254237
|
try {
|
|
254238
|
-
const result = await execa6(
|
|
254238
|
+
const result = await execa6(commands.getPath, {
|
|
254239
254239
|
shell: true,
|
|
254240
254240
|
reject: false
|
|
254241
254241
|
});
|
|
@@ -258556,7 +258556,7 @@ var init_user = __esm(() => {
|
|
|
258556
258556
|
deviceId,
|
|
258557
258557
|
sessionId: getSessionId(),
|
|
258558
258558
|
email: getEmail(),
|
|
258559
|
-
appVersion: "1.1.
|
|
258559
|
+
appVersion: "1.1.18",
|
|
258560
258560
|
platform: getHostPlatformForAnalytics(),
|
|
258561
258561
|
organizationUuid,
|
|
258562
258562
|
accountUuid,
|
|
@@ -259880,7 +259880,7 @@ async function initializeBetaTracing(resource) {
|
|
|
259880
259880
|
});
|
|
259881
259881
|
logs.setGlobalLoggerProvider(loggerProvider);
|
|
259882
259882
|
setLoggerProvider(loggerProvider);
|
|
259883
|
-
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.
|
|
259883
|
+
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.18");
|
|
259884
259884
|
setEventLogger(eventLogger);
|
|
259885
259885
|
process.on("beforeExit", async () => {
|
|
259886
259886
|
await loggerProvider?.forceFlush();
|
|
@@ -259920,7 +259920,7 @@ async function initializeTelemetry() {
|
|
|
259920
259920
|
const platform3 = getPlatform();
|
|
259921
259921
|
const baseAttributes = {
|
|
259922
259922
|
[ATTR_SERVICE_NAME5]: "claude-code",
|
|
259923
|
-
[ATTR_SERVICE_VERSION5]: "1.1.
|
|
259923
|
+
[ATTR_SERVICE_VERSION5]: "1.1.18"
|
|
259924
259924
|
};
|
|
259925
259925
|
if (platform3 === "wsl") {
|
|
259926
259926
|
const wslVersion = getWslVersion();
|
|
@@ -259965,7 +259965,7 @@ async function initializeTelemetry() {
|
|
|
259965
259965
|
} catch {}
|
|
259966
259966
|
};
|
|
259967
259967
|
registerCleanup(shutdownTelemetry2);
|
|
259968
|
-
return meterProvider2.getMeter("com.anthropic.claude_code", "1.1.
|
|
259968
|
+
return meterProvider2.getMeter("com.anthropic.claude_code", "1.1.18");
|
|
259969
259969
|
}
|
|
259970
259970
|
const meterProvider = new MeterProvider5({
|
|
259971
259971
|
resource,
|
|
@@ -259985,7 +259985,7 @@ async function initializeTelemetry() {
|
|
|
259985
259985
|
});
|
|
259986
259986
|
logs.setGlobalLoggerProvider(loggerProvider);
|
|
259987
259987
|
setLoggerProvider(loggerProvider);
|
|
259988
|
-
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.
|
|
259988
|
+
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.18");
|
|
259989
259989
|
setEventLogger(eventLogger);
|
|
259990
259990
|
logForDebugging("[3P telemetry] Event logger set successfully");
|
|
259991
259991
|
process.on("beforeExit", async () => {
|
|
@@ -260047,7 +260047,7 @@ Current timeout: ${timeoutMs}ms
|
|
|
260047
260047
|
}
|
|
260048
260048
|
};
|
|
260049
260049
|
registerCleanup(shutdownTelemetry);
|
|
260050
|
-
return meterProvider.getMeter("com.anthropic.claude_code", "1.1.
|
|
260050
|
+
return meterProvider.getMeter("com.anthropic.claude_code", "1.1.18");
|
|
260051
260051
|
}
|
|
260052
260052
|
async function flushTelemetry() {
|
|
260053
260053
|
const meterProvider = getMeterProvider();
|
|
@@ -261234,8 +261234,8 @@ async function detectConfigurationIssues(type) {
|
|
|
261234
261234
|
const validAlias = await findValidClaudeAlias();
|
|
261235
261235
|
if (type === "npm-local") {
|
|
261236
261236
|
const whichResult = await which("localclawd");
|
|
261237
|
-
const
|
|
261238
|
-
if (!
|
|
261237
|
+
const localclawdInPath = !!whichResult;
|
|
261238
|
+
if (!localclawdInPath && !validAlias) {
|
|
261239
261239
|
if (existingAlias) {
|
|
261240
261240
|
warnings.push({
|
|
261241
261241
|
issue: "Local installation not accessible",
|
|
@@ -261270,7 +261270,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
261270
261270
|
}
|
|
261271
261271
|
async function getDoctorDiagnostic() {
|
|
261272
261272
|
const installationType = await getCurrentInstallationType();
|
|
261273
|
-
const version = typeof MACRO !== "undefined" ? "1.1.
|
|
261273
|
+
const version = typeof MACRO !== "undefined" ? "1.1.18" : "unknown";
|
|
261274
261274
|
const installationPath = await getInstallationPath();
|
|
261275
261275
|
const invokedBinary = getInvokedBinary();
|
|
261276
261276
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -262211,8 +262211,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
262211
262211
|
const maxVersion = await getMaxVersion();
|
|
262212
262212
|
if (maxVersion && gt(version, maxVersion)) {
|
|
262213
262213
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
|
|
262214
|
-
if (gte("1.1.
|
|
262215
|
-
logForDebugging(`Native installer: current version ${"1.1.
|
|
262214
|
+
if (gte("1.1.18", maxVersion)) {
|
|
262215
|
+
logForDebugging(`Native installer: current version ${"1.1.18"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
262216
262216
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
262217
262217
|
latency_ms: Date.now() - startTime,
|
|
262218
262218
|
max_version: maxVersion,
|
|
@@ -262223,7 +262223,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
262223
262223
|
version = maxVersion;
|
|
262224
262224
|
}
|
|
262225
262225
|
}
|
|
262226
|
-
if (!forceReinstall && version === "1.1.
|
|
262226
|
+
if (!forceReinstall && version === "1.1.18" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
|
|
262227
262227
|
logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
|
|
262228
262228
|
logEvent("tengu_native_update_complete", {
|
|
262229
262229
|
latency_ms: Date.now() - startTime,
|
|
@@ -276032,12 +276032,12 @@ function renderToolResultMessage5(output) {
|
|
|
276032
276032
|
function renderToolUseMessage6({
|
|
276033
276033
|
skill
|
|
276034
276034
|
}, {
|
|
276035
|
-
commands
|
|
276035
|
+
commands
|
|
276036
276036
|
}) {
|
|
276037
276037
|
if (!skill) {
|
|
276038
276038
|
return null;
|
|
276039
276039
|
}
|
|
276040
|
-
const command =
|
|
276040
|
+
const command = commands?.find((c5) => c5.name === skill);
|
|
276041
276041
|
const displayName = command?.loadedFrom === "commands_DEPRECATED" ? `/${skill}` : skill;
|
|
276042
276042
|
return displayName;
|
|
276043
276043
|
}
|
|
@@ -276346,8 +276346,8 @@ var init_SkillTool = __esm(() => {
|
|
|
276346
276346
|
}
|
|
276347
276347
|
const normalizedCommandName = hasLeadingSlash ? trimmed.substring(1) : trimmed;
|
|
276348
276348
|
if (false) {}
|
|
276349
|
-
const
|
|
276350
|
-
const foundCommand = findCommand(normalizedCommandName,
|
|
276349
|
+
const commands = await getAllCommands(context6);
|
|
276350
|
+
const foundCommand = findCommand(normalizedCommandName, commands);
|
|
276351
276351
|
if (!foundCommand) {
|
|
276352
276352
|
return {
|
|
276353
276353
|
result: false,
|
|
@@ -276376,8 +276376,8 @@ var init_SkillTool = __esm(() => {
|
|
|
276376
276376
|
const commandName = trimmed.startsWith("/") ? trimmed.substring(1) : trimmed;
|
|
276377
276377
|
const appState = context6.getAppState();
|
|
276378
276378
|
const permissionContext = appState.toolPermissionContext;
|
|
276379
|
-
const
|
|
276380
|
-
const commandObj = findCommand(commandName,
|
|
276379
|
+
const commands = await getAllCommands(context6);
|
|
276380
|
+
const commandObj = findCommand(commandName, commands);
|
|
276381
276381
|
const ruleMatches = (ruleContent) => {
|
|
276382
276382
|
const normalizedRule = ruleContent.startsWith("/") ? ruleContent.substring(1) : ruleContent;
|
|
276383
276383
|
if (normalizedRule === commandName) {
|
|
@@ -276460,14 +276460,14 @@ var init_SkillTool = __esm(() => {
|
|
|
276460
276460
|
const trimmed = skill.trim();
|
|
276461
276461
|
const commandName = trimmed.startsWith("/") ? trimmed.substring(1) : trimmed;
|
|
276462
276462
|
if (false) {}
|
|
276463
|
-
const
|
|
276464
|
-
const command = findCommand(commandName,
|
|
276463
|
+
const commands = await getAllCommands(context6);
|
|
276464
|
+
const command = findCommand(commandName, commands);
|
|
276465
276465
|
recordSkillUsage(commandName);
|
|
276466
276466
|
if (command?.type === "prompt" && command.context === "fork") {
|
|
276467
276467
|
return executeForkedSkill(command, commandName, args, context6, canUseTool, parentMessage, onProgress);
|
|
276468
276468
|
}
|
|
276469
276469
|
const { processPromptSlashCommand: processPromptSlashCommand2 } = await Promise.resolve().then(() => (init_processSlashCommand(), exports_processSlashCommand));
|
|
276470
|
-
const processedCommand = await processPromptSlashCommand2(commandName, args || "",
|
|
276470
|
+
const processedCommand = await processPromptSlashCommand2(commandName, args || "", commands, context6);
|
|
276471
276471
|
if (!processedCommand.shouldQuery) {
|
|
276472
276472
|
throw new Error("Command processing failed");
|
|
276473
276473
|
}
|
|
@@ -284228,17 +284228,17 @@ function transformRedirection(raw) {
|
|
|
284228
284228
|
}
|
|
284229
284229
|
function transformStatement(raw) {
|
|
284230
284230
|
const statementType = mapStatementType(raw.type);
|
|
284231
|
-
const
|
|
284231
|
+
const commands = [];
|
|
284232
284232
|
const redirections = [];
|
|
284233
284233
|
if (raw.elements) {
|
|
284234
284234
|
for (const elem of ensureArray(raw.elements)) {
|
|
284235
284235
|
if (elem.type === "CommandAst") {
|
|
284236
|
-
|
|
284236
|
+
commands.push(transformCommandAst(elem));
|
|
284237
284237
|
for (const redir of ensureArray(elem.redirections)) {
|
|
284238
284238
|
redirections.push(transformRedirection(redir));
|
|
284239
284239
|
}
|
|
284240
284240
|
} else {
|
|
284241
|
-
|
|
284241
|
+
commands.push(transformExpressionElement(elem));
|
|
284242
284242
|
for (const redir of ensureArray(elem.redirections)) {
|
|
284243
284243
|
redirections.push(transformRedirection(redir));
|
|
284244
284244
|
}
|
|
@@ -284254,7 +284254,7 @@ function transformStatement(raw) {
|
|
|
284254
284254
|
}
|
|
284255
284255
|
}
|
|
284256
284256
|
} else {
|
|
284257
|
-
|
|
284257
|
+
commands.push({
|
|
284258
284258
|
name: raw.text,
|
|
284259
284259
|
nameType: "unknown",
|
|
284260
284260
|
elementType: "CommandExpressionAst",
|
|
@@ -284272,7 +284272,7 @@ function transformStatement(raw) {
|
|
|
284272
284272
|
}
|
|
284273
284273
|
const result = {
|
|
284274
284274
|
statementType,
|
|
284275
|
-
commands
|
|
284275
|
+
commands,
|
|
284276
284276
|
redirections,
|
|
284277
284277
|
text: raw.text,
|
|
284278
284278
|
nestedCommands
|
|
@@ -284380,18 +284380,18 @@ function getAllCommandNames(parsed) {
|
|
|
284380
284380
|
return names;
|
|
284381
284381
|
}
|
|
284382
284382
|
function getAllCommands2(parsed) {
|
|
284383
|
-
const
|
|
284383
|
+
const commands = [];
|
|
284384
284384
|
for (const statement of parsed.statements) {
|
|
284385
284385
|
for (const cmd of statement.commands) {
|
|
284386
|
-
|
|
284386
|
+
commands.push(cmd);
|
|
284387
284387
|
}
|
|
284388
284388
|
if (statement.nestedCommands) {
|
|
284389
284389
|
for (const cmd of statement.nestedCommands) {
|
|
284390
|
-
|
|
284390
|
+
commands.push(cmd);
|
|
284391
284391
|
}
|
|
284392
284392
|
}
|
|
284393
284393
|
}
|
|
284394
|
-
return
|
|
284394
|
+
return commands;
|
|
284395
284395
|
}
|
|
284396
284396
|
function getAllRedirections(parsed) {
|
|
284397
284397
|
const redirections = [];
|
|
@@ -319169,7 +319169,7 @@ async function screenshotViaApi(url3, apiBase) {
|
|
|
319169
319169
|
async function fetchPageText(url3) {
|
|
319170
319170
|
try {
|
|
319171
319171
|
const res = await fetch(url3, {
|
|
319172
|
-
headers: { "User-Agent": "Mozilla/5.0 (compatible;
|
|
319172
|
+
headers: { "User-Agent": "Mozilla/5.0 (compatible; localclawd/1.0)" },
|
|
319173
319173
|
signal: AbortSignal.timeout(15000)
|
|
319174
319174
|
});
|
|
319175
319175
|
const html = await res.text();
|
|
@@ -329121,8 +329121,8 @@ function checkPermissionMode2(input, toolPermissionContext) {
|
|
|
329121
329121
|
message: "DontAsk mode is handled in main permission flow"
|
|
329122
329122
|
};
|
|
329123
329123
|
}
|
|
329124
|
-
const
|
|
329125
|
-
for (const cmd of
|
|
329124
|
+
const commands = splitCommand_DEPRECATED(input.command);
|
|
329125
|
+
for (const cmd of commands) {
|
|
329126
329126
|
const result = validateCommandForMode(cmd, toolPermissionContext);
|
|
329127
329127
|
if (result.behavior !== "passthrough") {
|
|
329128
329128
|
return result;
|
|
@@ -329532,11 +329532,11 @@ function checkEarlyExitDeny(input, toolPermissionContext) {
|
|
|
329532
329532
|
}
|
|
329533
329533
|
return null;
|
|
329534
329534
|
}
|
|
329535
|
-
function checkSemanticsDeny(input, toolPermissionContext,
|
|
329535
|
+
function checkSemanticsDeny(input, toolPermissionContext, commands) {
|
|
329536
329536
|
const fullCmd = checkEarlyExitDeny(input, toolPermissionContext);
|
|
329537
329537
|
if (fullCmd !== null)
|
|
329538
329538
|
return fullCmd;
|
|
329539
|
-
for (const cmd of
|
|
329539
|
+
for (const cmd of commands) {
|
|
329540
329540
|
const subDeny = matchingRulesForInput2({ ...input, command: cmd.text }, toolPermissionContext, "prefix").matchingDenyRules[0];
|
|
329541
329541
|
if (subDeny !== undefined) {
|
|
329542
329542
|
return {
|
|
@@ -334443,7 +334443,7 @@ function getAnthropicEnvMetadata() {
|
|
|
334443
334443
|
function getBuildAgeMinutes() {
|
|
334444
334444
|
if (false)
|
|
334445
334445
|
;
|
|
334446
|
-
const buildTime = new Date("2026-04-
|
|
334446
|
+
const buildTime = new Date("2026-04-09T14:11:44.775Z").getTime();
|
|
334447
334447
|
if (isNaN(buildTime))
|
|
334448
334448
|
return;
|
|
334449
334449
|
return Math.floor((Date.now() - buildTime) / 60000);
|
|
@@ -342339,15 +342339,15 @@ function transformPluginSkillFiles(files) {
|
|
|
342339
342339
|
async function loadCommandsFromDirectory(commandsPath, pluginName, sourceName, pluginManifest, pluginPath, config = { isSkillMode: false }, loadedPaths = new Set) {
|
|
342340
342340
|
const markdownFiles = await collectMarkdownFiles(commandsPath, commandsPath, loadedPaths);
|
|
342341
342341
|
const processedFiles = transformPluginSkillFiles(markdownFiles);
|
|
342342
|
-
const
|
|
342342
|
+
const commands = [];
|
|
342343
342343
|
for (const file of processedFiles) {
|
|
342344
342344
|
const commandName = getCommandNameFromFile(file.filePath, file.baseDir, pluginName);
|
|
342345
342345
|
const command = createPluginCommand(commandName, file, sourceName, pluginManifest, pluginPath, isSkillFile2(file.filePath), config);
|
|
342346
342346
|
if (command) {
|
|
342347
|
-
|
|
342347
|
+
commands.push(command);
|
|
342348
342348
|
}
|
|
342349
342349
|
}
|
|
342350
|
-
return
|
|
342350
|
+
return commands;
|
|
342351
342351
|
}
|
|
342352
342352
|
function createPluginCommand(commandName, file, sourceName, pluginManifest, pluginPath, isSkill, config = { isSkillMode: false }) {
|
|
342353
342353
|
try {
|
|
@@ -342573,10 +342573,10 @@ var init_loadPluginCommands = __esm(() => {
|
|
|
342573
342573
|
const pluginCommands = [];
|
|
342574
342574
|
if (plugin.commandsPath) {
|
|
342575
342575
|
try {
|
|
342576
|
-
const
|
|
342577
|
-
pluginCommands.push(...
|
|
342578
|
-
if (
|
|
342579
|
-
logForDebugging(`Loaded ${
|
|
342576
|
+
const commands = await loadCommandsFromDirectory(plugin.commandsPath, plugin.name, plugin.source, plugin.manifest, plugin.path, { isSkillMode: false }, loadedPaths);
|
|
342577
|
+
pluginCommands.push(...commands);
|
|
342578
|
+
if (commands.length > 0) {
|
|
342579
|
+
logForDebugging(`Loaded ${commands.length} commands from plugin ${plugin.name} default directory`);
|
|
342580
342580
|
}
|
|
342581
342581
|
} catch (error5) {
|
|
342582
342582
|
logForDebugging(`Failed to load commands from plugin ${plugin.name} default directory: ${error5}`, { level: "error" });
|
|
@@ -342590,13 +342590,13 @@ var init_loadPluginCommands = __esm(() => {
|
|
|
342590
342590
|
const stats2 = await fs4.stat(commandPath);
|
|
342591
342591
|
logForDebugging(`Checking commandPath ${commandPath} - isDirectory: ${stats2.isDirectory()}, isFile: ${stats2.isFile()}`);
|
|
342592
342592
|
if (stats2.isDirectory()) {
|
|
342593
|
-
const
|
|
342594
|
-
if (
|
|
342595
|
-
logForDebugging(`Loaded ${
|
|
342593
|
+
const commands = await loadCommandsFromDirectory(commandPath, plugin.name, plugin.source, plugin.manifest, plugin.path, { isSkillMode: false }, loadedPaths);
|
|
342594
|
+
if (commands.length > 0) {
|
|
342595
|
+
logForDebugging(`Loaded ${commands.length} commands from plugin ${plugin.name} custom path: ${commandPath}`);
|
|
342596
342596
|
} else {
|
|
342597
342597
|
logForDebugging(`Warning: No commands found in plugin ${plugin.name} custom directory: ${commandPath}. Expected .md files or SKILL.md in subdirectories.`, { level: "warn" });
|
|
342598
342598
|
}
|
|
342599
|
-
return
|
|
342599
|
+
return commands;
|
|
342600
342600
|
} else if (stats2.isFile() && commandPath.endsWith(".md")) {
|
|
342601
342601
|
if (isDuplicatePath(fs4, commandPath, loadedPaths)) {
|
|
342602
342602
|
return [];
|
|
@@ -342655,8 +342655,8 @@ var init_loadPluginCommands = __esm(() => {
|
|
|
342655
342655
|
return [];
|
|
342656
342656
|
}
|
|
342657
342657
|
}));
|
|
342658
|
-
for (const
|
|
342659
|
-
pluginCommands.push(...
|
|
342658
|
+
for (const commands of pathResults) {
|
|
342659
|
+
pluginCommands.push(...commands);
|
|
342660
342660
|
}
|
|
342661
342661
|
}
|
|
342662
342662
|
if (plugin.commandsMetadata) {
|
|
@@ -349912,12 +349912,12 @@ function createSystemMessage(content, level, toolUseID, preventContinuation) {
|
|
|
349912
349912
|
...preventContinuation && { preventContinuation }
|
|
349913
349913
|
};
|
|
349914
349914
|
}
|
|
349915
|
-
function createPermissionRetryMessage(
|
|
349915
|
+
function createPermissionRetryMessage(commands) {
|
|
349916
349916
|
return {
|
|
349917
349917
|
type: "system",
|
|
349918
349918
|
subtype: "permission_retry",
|
|
349919
|
-
content: `Allowed ${
|
|
349920
|
-
commands
|
|
349919
|
+
content: `Allowed ${commands.join(", ")}`,
|
|
349920
|
+
commands,
|
|
349921
349921
|
level: "info",
|
|
349922
349922
|
isMeta: false,
|
|
349923
349923
|
timestamp: new Date().toISOString(),
|
|
@@ -358509,7 +358509,7 @@ function Feedback({
|
|
|
358509
358509
|
platform: env4.platform,
|
|
358510
358510
|
gitRepo: envInfo.isGit,
|
|
358511
358511
|
terminal: env4.terminal,
|
|
358512
|
-
version: "1.1.
|
|
358512
|
+
version: "1.1.18",
|
|
358513
358513
|
transcript: normalizeMessagesForAPI(messages),
|
|
358514
358514
|
errors: sanitizedErrors,
|
|
358515
358515
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -358701,7 +358701,7 @@ function Feedback({
|
|
|
358701
358701
|
", ",
|
|
358702
358702
|
env4.terminal,
|
|
358703
358703
|
", v",
|
|
358704
|
-
"1.1.
|
|
358704
|
+
"1.1.18"
|
|
358705
358705
|
]
|
|
358706
358706
|
}, undefined, true, undefined, this)
|
|
358707
358707
|
]
|
|
@@ -358807,7 +358807,7 @@ ${sanitizedDescription}
|
|
|
358807
358807
|
` + `**Environment Info**
|
|
358808
358808
|
` + `- Platform: ${env4.platform}
|
|
358809
358809
|
` + `- Terminal: ${env4.terminal}
|
|
358810
|
-
` + `- Version: ${"1.1.
|
|
358810
|
+
` + `- Version: ${"1.1.18"}
|
|
358811
358811
|
` + `- Feedback ID: ${feedbackId}
|
|
358812
358812
|
` + `
|
|
358813
358813
|
**Errors**
|
|
@@ -361920,7 +361920,7 @@ function buildPrimarySection() {
|
|
|
361920
361920
|
}, undefined, false, undefined, this);
|
|
361921
361921
|
return [{
|
|
361922
361922
|
label: "Version",
|
|
361923
|
-
value: "1.1.
|
|
361923
|
+
value: "1.1.18"
|
|
361924
361924
|
}, {
|
|
361925
361925
|
label: "Session name",
|
|
361926
361926
|
value: nameValue
|
|
@@ -366538,7 +366538,7 @@ function Config({
|
|
|
366538
366538
|
}
|
|
366539
366539
|
}, undefined, false, undefined, this)
|
|
366540
366540
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
|
|
366541
|
-
currentVersion: "1.1.
|
|
366541
|
+
currentVersion: "1.1.18",
|
|
366542
366542
|
onChoice: (choice) => {
|
|
366543
366543
|
setShowSubmenu(null);
|
|
366544
366544
|
setTabsHidden(false);
|
|
@@ -366550,7 +366550,7 @@ function Config({
|
|
|
366550
366550
|
autoUpdatesChannel: "stable"
|
|
366551
366551
|
};
|
|
366552
366552
|
if (choice === "stay") {
|
|
366553
|
-
newSettings.minimumVersion = "1.1.
|
|
366553
|
+
newSettings.minimumVersion = "1.1.18";
|
|
366554
366554
|
}
|
|
366555
366555
|
updateSettingsForSource("userSettings", newSettings);
|
|
366556
366556
|
setSettingsData((prev_27) => ({
|
|
@@ -373971,12 +373971,12 @@ ${HEARTBEAT_FREE_ROAM}
|
|
|
373971
373971
|
${telegramMsg}
|
|
373972
373972
|
━━━ (handle this, then continue your work) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
373973
373973
|
` : "";
|
|
373974
|
-
return `[HEARTBEAT — BEAT ${beat} —
|
|
373974
|
+
return `[HEARTBEAT — BEAT ${beat} — localclawd autonomous pulse]
|
|
373975
373975
|
${taskSection}${telegramSection}
|
|
373976
373976
|
${THINKHARDER_ROUND_PROMPT}
|
|
373977
373977
|
|
|
373978
373978
|
━━━ HEARTBEAT RULES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
373979
|
-
You are
|
|
373979
|
+
You are localclawd running in heartbeat mode. You wake on a timer.
|
|
373980
373980
|
• The human cannot stop you — only Ctrl+C ends heartbeat mode
|
|
373981
373981
|
• Do your best work, then sleep until the next beat
|
|
373982
373982
|
• You do NOT need to emit TASK COMPLETE — just finish and wait
|
|
@@ -374121,7 +374121,7 @@ ${preview}`);
|
|
|
374121
374121
|
}
|
|
374122
374122
|
const prompt = buildHeartbeatPrompt(currentBeat, currentTask, telegramMsg);
|
|
374123
374123
|
if (currentBeat === 1 && isTelegramActive()) {
|
|
374124
|
-
sendTelegramMessage(`♥ *
|
|
374124
|
+
sendTelegramMessage(`♥ *localclawd heartbeat started*
|
|
374125
374125
|
Interval: ${currentInterval}m
|
|
374126
374126
|
${currentTask ? `Task: ${currentTask}` : "Free-roaming mode"}`);
|
|
374127
374127
|
}
|
|
@@ -375464,7 +375464,7 @@ var init_memory2 = __esm(() => {
|
|
|
375464
375464
|
function Commands(t0) {
|
|
375465
375465
|
const $2 = c3(14);
|
|
375466
375466
|
const {
|
|
375467
|
-
commands
|
|
375467
|
+
commands,
|
|
375468
375468
|
maxHeight,
|
|
375469
375469
|
columns,
|
|
375470
375470
|
title,
|
|
@@ -375478,7 +375478,7 @@ function Commands(t0) {
|
|
|
375478
375478
|
const maxWidth = Math.max(1, columns - 10);
|
|
375479
375479
|
const visibleCount = Math.max(1, Math.floor((maxHeight - 10) / 2));
|
|
375480
375480
|
let t1;
|
|
375481
|
-
if ($2[0] !==
|
|
375481
|
+
if ($2[0] !== commands || $2[1] !== maxWidth) {
|
|
375482
375482
|
const seen = new Set;
|
|
375483
375483
|
let t22;
|
|
375484
375484
|
if ($2[3] !== maxWidth) {
|
|
@@ -375492,14 +375492,14 @@ function Commands(t0) {
|
|
|
375492
375492
|
} else {
|
|
375493
375493
|
t22 = $2[4];
|
|
375494
375494
|
}
|
|
375495
|
-
t1 =
|
|
375495
|
+
t1 = commands.filter((cmd) => {
|
|
375496
375496
|
if (seen.has(cmd.name)) {
|
|
375497
375497
|
return false;
|
|
375498
375498
|
}
|
|
375499
375499
|
seen.add(cmd.name);
|
|
375500
375500
|
return true;
|
|
375501
375501
|
}).sort(_temp87).map(t22);
|
|
375502
|
-
$2[0] =
|
|
375502
|
+
$2[0] = commands;
|
|
375503
375503
|
$2[1] = maxWidth;
|
|
375504
375504
|
$2[2] = t1;
|
|
375505
375505
|
} else {
|
|
@@ -375507,11 +375507,11 @@ function Commands(t0) {
|
|
|
375507
375507
|
}
|
|
375508
375508
|
const options = t1;
|
|
375509
375509
|
let t2;
|
|
375510
|
-
if ($2[5] !==
|
|
375510
|
+
if ($2[5] !== commands.length || $2[6] !== emptyMessage || $2[7] !== focusHeader || $2[8] !== headerFocused || $2[9] !== onCancel || $2[10] !== options || $2[11] !== title || $2[12] !== visibleCount) {
|
|
375511
375511
|
t2 = /* @__PURE__ */ jsx_dev_runtime211.jsxDEV(ThemedBox_default, {
|
|
375512
375512
|
flexDirection: "column",
|
|
375513
375513
|
paddingY: 1,
|
|
375514
|
-
children:
|
|
375514
|
+
children: commands.length === 0 && emptyMessage ? /* @__PURE__ */ jsx_dev_runtime211.jsxDEV(ThemedText, {
|
|
375515
375515
|
dimColor: true,
|
|
375516
375516
|
children: emptyMessage
|
|
375517
375517
|
}, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime211.jsxDEV(jsx_dev_runtime211.Fragment, {
|
|
@@ -375535,7 +375535,7 @@ function Commands(t0) {
|
|
|
375535
375535
|
]
|
|
375536
375536
|
}, undefined, true, undefined, this)
|
|
375537
375537
|
}, undefined, false, undefined, this);
|
|
375538
|
-
$2[5] =
|
|
375538
|
+
$2[5] = commands.length;
|
|
375539
375539
|
$2[6] = emptyMessage;
|
|
375540
375540
|
$2[7] = focusHeader;
|
|
375541
375541
|
$2[8] = headerFocused;
|
|
@@ -376156,7 +376156,7 @@ function HelpV2(t0) {
|
|
|
376156
376156
|
const $2 = c3(44);
|
|
376157
376157
|
const {
|
|
376158
376158
|
onClose,
|
|
376159
|
-
commands
|
|
376159
|
+
commands
|
|
376160
376160
|
} = t0;
|
|
376161
376161
|
const {
|
|
376162
376162
|
rows,
|
|
@@ -376190,9 +376190,9 @@ function HelpV2(t0) {
|
|
|
376190
376190
|
let antOnlyCommands;
|
|
376191
376191
|
let builtinCommands;
|
|
376192
376192
|
let t3;
|
|
376193
|
-
if ($2[3] !==
|
|
376193
|
+
if ($2[3] !== commands) {
|
|
376194
376194
|
const builtinNames = builtInCommandNames();
|
|
376195
|
-
builtinCommands =
|
|
376195
|
+
builtinCommands = commands.filter((cmd) => builtinNames.has(cmd.name) && !cmd.isHidden);
|
|
376196
376196
|
let t42;
|
|
376197
376197
|
if ($2[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
376198
376198
|
t42 = [];
|
|
@@ -376201,8 +376201,8 @@ function HelpV2(t0) {
|
|
|
376201
376201
|
t42 = $2[7];
|
|
376202
376202
|
}
|
|
376203
376203
|
antOnlyCommands = t42;
|
|
376204
|
-
t3 =
|
|
376205
|
-
$2[3] =
|
|
376204
|
+
t3 = commands.filter((cmd_2) => !builtinNames.has(cmd_2.name) && !cmd_2.isHidden);
|
|
376205
|
+
$2[3] = commands;
|
|
376206
376206
|
$2[4] = antOnlyCommands;
|
|
376207
376207
|
$2[5] = builtinCommands;
|
|
376208
376208
|
$2[6] = t3;
|
|
@@ -376283,7 +376283,7 @@ function HelpV2(t0) {
|
|
|
376283
376283
|
let t6;
|
|
376284
376284
|
if ($2[31] !== tabs) {
|
|
376285
376285
|
t6 = /* @__PURE__ */ jsx_dev_runtime214.jsxDEV(Tabs, {
|
|
376286
|
-
title: `localclawd v${"1.1.
|
|
376286
|
+
title: `localclawd v${"1.1.18"}`,
|
|
376287
376287
|
color: "professionalBlue",
|
|
376288
376288
|
defaultTab: "general",
|
|
376289
376289
|
children: tabs
|
|
@@ -376393,11 +376393,11 @@ __export(exports_help, {
|
|
|
376393
376393
|
});
|
|
376394
376394
|
var jsx_dev_runtime215, call29 = async (onDone, {
|
|
376395
376395
|
options: {
|
|
376396
|
-
commands
|
|
376396
|
+
commands
|
|
376397
376397
|
}
|
|
376398
376398
|
}) => {
|
|
376399
376399
|
return /* @__PURE__ */ jsx_dev_runtime215.jsxDEV(HelpV2, {
|
|
376400
|
-
commands
|
|
376400
|
+
commands,
|
|
376401
376401
|
onClose: onDone
|
|
376402
376402
|
}, undefined, false, undefined, this);
|
|
376403
376403
|
};
|
|
@@ -382371,15 +382371,15 @@ function useManageMCPConnections(dynamicMcpConfig, isStrictMcpConfig = false) {
|
|
|
382371
382371
|
...client4
|
|
382372
382372
|
} = update;
|
|
382373
382373
|
const tools = client4.type === "disabled" || client4.type === "failed" ? rawTools ?? [] : rawTools;
|
|
382374
|
-
const
|
|
382374
|
+
const commands = client4.type === "disabled" || client4.type === "failed" ? rawCmds ?? [] : rawCmds;
|
|
382375
382375
|
const resources = client4.type === "disabled" || client4.type === "failed" ? rawRes ?? [] : rawRes;
|
|
382376
382376
|
const prefix = getMcpPrefix(client4.name);
|
|
382377
382377
|
const existingClientIndex = mcp.clients.findIndex((c5) => c5.name === client4.name);
|
|
382378
382378
|
const updatedClients = existingClientIndex === -1 ? [...mcp.clients, client4] : mcp.clients.map((c5) => c5.name === client4.name ? client4 : c5);
|
|
382379
382379
|
const updatedTools = tools === undefined ? mcp.tools : [...reject_default(mcp.tools, (t) => t.name?.startsWith(prefix)), ...tools];
|
|
382380
|
-
const updatedCommands =
|
|
382380
|
+
const updatedCommands = commands === undefined ? mcp.commands : [
|
|
382381
382381
|
...reject_default(mcp.commands, (c5) => commandBelongsToServer(c5, client4.name)),
|
|
382382
|
-
...
|
|
382382
|
+
...commands
|
|
382383
382383
|
];
|
|
382384
382384
|
const updatedResources = resources === undefined ? mcp.resources : {
|
|
382385
382385
|
...mcp.resources,
|
|
@@ -382405,10 +382405,10 @@ function useManageMCPConnections(dynamicMcpConfig, isStrictMcpConfig = false) {
|
|
|
382405
382405
|
const onConnectionAttempt = import_react125.useCallback(({
|
|
382406
382406
|
client: client4,
|
|
382407
382407
|
tools,
|
|
382408
|
-
commands
|
|
382408
|
+
commands,
|
|
382409
382409
|
resources
|
|
382410
382410
|
}) => {
|
|
382411
|
-
updateServer({ ...client4, tools, commands
|
|
382411
|
+
updateServer({ ...client4, tools, commands, resources });
|
|
382412
382412
|
switch (client4.type) {
|
|
382413
382413
|
case "connected": {
|
|
382414
382414
|
registerElicitationHandler(client4.client, client4.name, setAppState);
|
|
@@ -393602,8 +393602,8 @@ async function validatePluginManifest(filePath) {
|
|
|
393602
393602
|
if (parsed && typeof parsed === "object") {
|
|
393603
393603
|
const obj = parsed;
|
|
393604
393604
|
if (obj.commands) {
|
|
393605
|
-
const
|
|
393606
|
-
|
|
393605
|
+
const commands = Array.isArray(obj.commands) ? obj.commands : [obj.commands];
|
|
393606
|
+
commands.forEach((cmd, i2) => {
|
|
393607
393607
|
if (typeof cmd === "string") {
|
|
393608
393608
|
checkPathTraversal(cmd, `commands[${i2}]`, errors);
|
|
393609
393609
|
}
|
|
@@ -400441,7 +400441,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
400441
400441
|
return [];
|
|
400442
400442
|
}
|
|
400443
400443
|
}
|
|
400444
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.
|
|
400444
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.18") {
|
|
400445
400445
|
if (process.env.USER_TYPE === "ant") {
|
|
400446
400446
|
const changelog = MACRO.VERSION_CHANGELOG;
|
|
400447
400447
|
if (changelog) {
|
|
@@ -400468,7 +400468,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.17")
|
|
|
400468
400468
|
releaseNotes
|
|
400469
400469
|
};
|
|
400470
400470
|
}
|
|
400471
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.
|
|
400471
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.18") {
|
|
400472
400472
|
if (process.env.USER_TYPE === "ant") {
|
|
400473
400473
|
const changelog = MACRO.VERSION_CHANGELOG;
|
|
400474
400474
|
if (changelog) {
|
|
@@ -401635,7 +401635,7 @@ function getRecentActivitySync() {
|
|
|
401635
401635
|
return cachedActivity;
|
|
401636
401636
|
}
|
|
401637
401637
|
function getLogoDisplayData() {
|
|
401638
|
-
const version = process.env.DEMO_VERSION ?? "1.1.
|
|
401638
|
+
const version = process.env.DEMO_VERSION ?? "1.1.18";
|
|
401639
401639
|
const serverUrl = getDirectConnectServerUrl();
|
|
401640
401640
|
const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
|
|
401641
401641
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -402909,7 +402909,7 @@ function LogoV2() {
|
|
|
402909
402909
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
402910
402910
|
t2 = () => {
|
|
402911
402911
|
const currentConfig = getGlobalConfig();
|
|
402912
|
-
if (currentConfig.lastReleaseNotesSeen === "1.1.
|
|
402912
|
+
if (currentConfig.lastReleaseNotesSeen === "1.1.18") {
|
|
402913
402913
|
return;
|
|
402914
402914
|
}
|
|
402915
402915
|
saveGlobalConfig(_temp327);
|
|
@@ -403585,12 +403585,12 @@ function LogoV2() {
|
|
|
403585
403585
|
return t41;
|
|
403586
403586
|
}
|
|
403587
403587
|
function _temp327(current) {
|
|
403588
|
-
if (current.lastReleaseNotesSeen === "1.1.
|
|
403588
|
+
if (current.lastReleaseNotesSeen === "1.1.18") {
|
|
403589
403589
|
return current;
|
|
403590
403590
|
}
|
|
403591
403591
|
return {
|
|
403592
403592
|
...current,
|
|
403593
|
-
lastReleaseNotesSeen: "1.1.
|
|
403593
|
+
lastReleaseNotesSeen: "1.1.18"
|
|
403594
403594
|
};
|
|
403595
403595
|
}
|
|
403596
403596
|
function _temp245(s_0) {
|
|
@@ -403793,7 +403793,7 @@ function MessageRowImpl(t0) {
|
|
|
403793
403793
|
isUserContinuation,
|
|
403794
403794
|
hasContentAfter,
|
|
403795
403795
|
tools,
|
|
403796
|
-
commands
|
|
403796
|
+
commands,
|
|
403797
403797
|
verbose,
|
|
403798
403798
|
inProgressToolUseIDs,
|
|
403799
403799
|
streamingToolUseIDs,
|
|
@@ -403925,14 +403925,14 @@ function MessageRowImpl(t0) {
|
|
|
403925
403925
|
const t6 = !hasMetadata;
|
|
403926
403926
|
const t7 = hasMetadata ? undefined : columns;
|
|
403927
403927
|
let t8;
|
|
403928
|
-
if ($2[37] !==
|
|
403928
|
+
if ($2[37] !== commands || $2[38] !== inProgressToolUseIDs || $2[39] !== isActiveCollapsedGroup || $2[40] !== isStatic || $2[41] !== isTranscriptMode || $2[42] !== isUserContinuation || $2[43] !== lastThinkingBlockId || $2[44] !== latestBashOutputUUID || $2[45] !== lookups || $2[46] !== msg || $2[47] !== onOpenRateLimitOptions || $2[48] !== progressMessagesForMessage || $2[49] !== shouldAnimate || $2[50] !== t6 || $2[51] !== t7 || $2[52] !== tools || $2[53] !== verbose) {
|
|
403929
403929
|
t8 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(Message, {
|
|
403930
403930
|
message: msg,
|
|
403931
403931
|
lookups,
|
|
403932
403932
|
addMargin: t6,
|
|
403933
403933
|
containerWidth: t7,
|
|
403934
403934
|
tools,
|
|
403935
|
-
commands
|
|
403935
|
+
commands,
|
|
403936
403936
|
verbose,
|
|
403937
403937
|
inProgressToolUseIDs,
|
|
403938
403938
|
progressMessagesForMessage,
|
|
@@ -403946,7 +403946,7 @@ function MessageRowImpl(t0) {
|
|
|
403946
403946
|
lastThinkingBlockId,
|
|
403947
403947
|
latestBashOutputUUID
|
|
403948
403948
|
}, undefined, false, undefined, this);
|
|
403949
|
-
$2[37] =
|
|
403949
|
+
$2[37] = commands;
|
|
403950
403950
|
$2[38] = inProgressToolUseIDs;
|
|
403951
403951
|
$2[39] = isActiveCollapsedGroup;
|
|
403952
403952
|
$2[40] = isStatic;
|
|
@@ -406342,7 +406342,7 @@ function shouldRenderStatically(message, streamingToolUseIDs, inProgressToolUseI
|
|
|
406342
406342
|
var React93, import_react157, jsx_dev_runtime275, LogoHeader, proactiveModule2 = null, BRIEF_TOOL_NAME4 = null, SEND_USER_FILE_TOOL_NAME2 = null, MAX_MESSAGES_TO_SHOW_IN_TRANSCRIPT_MODE = 30, MAX_MESSAGES_WITHOUT_VIRTUALIZATION = 200, MESSAGE_CAP_STEP = 50, MessagesImpl = ({
|
|
406343
406343
|
messages,
|
|
406344
406344
|
tools,
|
|
406345
|
-
commands
|
|
406345
|
+
commands,
|
|
406346
406346
|
verbose,
|
|
406347
406347
|
toolJSX,
|
|
406348
406348
|
toolUseConfirmQueue,
|
|
@@ -406546,7 +406546,7 @@ var React93, import_react157, jsx_dev_runtime275, LogoHeader, proactiveModule2 =
|
|
|
406546
406546
|
isUserContinuation,
|
|
406547
406547
|
hasContentAfter,
|
|
406548
406548
|
tools,
|
|
406549
|
-
commands
|
|
406549
|
+
commands,
|
|
406550
406550
|
verbose: verbose || isItemExpanded(msg_8) || cursor?.expanded === true && index === selectedIdx,
|
|
406551
406551
|
inProgressToolUseIDs,
|
|
406552
406552
|
streamingToolUseIDs,
|
|
@@ -410472,12 +410472,12 @@ function SkillsMenu(t0) {
|
|
|
410472
410472
|
const $2 = c3(35);
|
|
410473
410473
|
const {
|
|
410474
410474
|
onExit: onExit2,
|
|
410475
|
-
commands
|
|
410475
|
+
commands
|
|
410476
410476
|
} = t0;
|
|
410477
410477
|
let t1;
|
|
410478
|
-
if ($2[0] !==
|
|
410479
|
-
t1 =
|
|
410480
|
-
$2[0] =
|
|
410478
|
+
if ($2[0] !== commands) {
|
|
410479
|
+
t1 = commands.filter(_temp129);
|
|
410480
|
+
$2[0] = commands;
|
|
410481
410481
|
$2[1] = t1;
|
|
410482
410482
|
} else {
|
|
410483
410483
|
t1 = $2[1];
|
|
@@ -419224,11 +419224,11 @@ function PermissionRuleList(t0) {
|
|
|
419224
419224
|
const denialsFor = (set2) => Array.from(set2).map((idx) => s_1.denials[idx]).filter(_temp258);
|
|
419225
419225
|
const retryDenials = denialsFor(s_1.retry);
|
|
419226
419226
|
if (retryDenials.length > 0) {
|
|
419227
|
-
const
|
|
419228
|
-
onRetryDenials?.(
|
|
419227
|
+
const commands = retryDenials.map(_temp333);
|
|
419228
|
+
onRetryDenials?.(commands);
|
|
419229
419229
|
onExit2(undefined, {
|
|
419230
419230
|
shouldQuery: true,
|
|
419231
|
-
metaMessages: [`Permission granted for: ${
|
|
419231
|
+
metaMessages: [`Permission granted for: ${commands.join(", ")}. You may now retry ${commands.length === 1 ? "this command" : "these commands"} if you would like.`]
|
|
419232
419232
|
});
|
|
419233
419233
|
return;
|
|
419234
419234
|
}
|
|
@@ -419756,8 +419756,8 @@ __export(exports_permissions, {
|
|
|
419756
419756
|
var jsx_dev_runtime308, call50 = async (onDone, context8) => {
|
|
419757
419757
|
return /* @__PURE__ */ jsx_dev_runtime308.jsxDEV(PermissionRuleList, {
|
|
419758
419758
|
onExit: onDone,
|
|
419759
|
-
onRetryDenials: (
|
|
419760
|
-
context8.setMessages((prev) => [...prev, createPermissionRetryMessage(
|
|
419759
|
+
onRetryDenials: (commands) => {
|
|
419760
|
+
context8.setMessages((prev) => [...prev, createPermissionRetryMessage(commands)]);
|
|
419761
419761
|
}
|
|
419762
419762
|
}, undefined, false, undefined, this);
|
|
419763
419763
|
};
|
|
@@ -429792,7 +429792,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
|
|
|
429792
429792
|
smapsRollup,
|
|
429793
429793
|
platform: process.platform,
|
|
429794
429794
|
nodeVersion: process.version,
|
|
429795
|
-
ccVersion: "1.1.
|
|
429795
|
+
ccVersion: "1.1.18"
|
|
429796
429796
|
};
|
|
429797
429797
|
}
|
|
429798
429798
|
async function performHeapDump(trigger = "manual", dumpNumber = 0) {
|
|
@@ -430377,7 +430377,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
430377
430377
|
var call64 = async () => {
|
|
430378
430378
|
return {
|
|
430379
430379
|
type: "text",
|
|
430380
|
-
value: `${"1.1.
|
|
430380
|
+
value: `${"1.1.18"} (built ${"2026-04-09T14:11:44.775Z"})`
|
|
430381
430381
|
};
|
|
430382
430382
|
}, version, version_default;
|
|
430383
430383
|
var init_version = __esm(() => {
|
|
@@ -439315,7 +439315,7 @@ function generateHtmlReport(data, insights) {
|
|
|
439315
439315
|
</html>`;
|
|
439316
439316
|
}
|
|
439317
439317
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
439318
|
-
const version2 = typeof MACRO !== "undefined" ? "1.1.
|
|
439318
|
+
const version2 = typeof MACRO !== "undefined" ? "1.1.18" : "unknown";
|
|
439319
439319
|
const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
|
|
439320
439320
|
const facets_summary = {
|
|
439321
439321
|
total: facets.size,
|
|
@@ -440194,19 +440194,19 @@ function isBridgeSafeCommand(cmd) {
|
|
|
440194
440194
|
return true;
|
|
440195
440195
|
return BRIDGE_SAFE_COMMANDS.has(cmd);
|
|
440196
440196
|
}
|
|
440197
|
-
function filterCommandsForRemoteMode(
|
|
440198
|
-
return
|
|
440197
|
+
function filterCommandsForRemoteMode(commands) {
|
|
440198
|
+
return commands.filter((cmd) => REMOTE_SAFE_COMMANDS.has(cmd));
|
|
440199
440199
|
}
|
|
440200
|
-
function findCommand(commandName,
|
|
440201
|
-
return
|
|
440200
|
+
function findCommand(commandName, commands) {
|
|
440201
|
+
return commands.find((_2) => _2.name === commandName || getCommandName(_2) === commandName || _2.aliases?.includes(commandName));
|
|
440202
440202
|
}
|
|
440203
|
-
function hasCommand(commandName,
|
|
440204
|
-
return findCommand(commandName,
|
|
440203
|
+
function hasCommand(commandName, commands) {
|
|
440204
|
+
return findCommand(commandName, commands) !== undefined;
|
|
440205
440205
|
}
|
|
440206
|
-
function getCommand(commandName,
|
|
440207
|
-
const command8 = findCommand(commandName,
|
|
440206
|
+
function getCommand(commandName, commands) {
|
|
440207
|
+
const command8 = findCommand(commandName, commands);
|
|
440208
440208
|
if (!command8) {
|
|
440209
|
-
throw ReferenceError(`Command ${commandName} not found. Available commands: ${
|
|
440209
|
+
throw ReferenceError(`Command ${commandName} not found. Available commands: ${commands.map((_2) => {
|
|
440210
440210
|
const name = getCommandName(_2);
|
|
440211
440211
|
return _2.aliases ? `${name} (aliases: ${_2.aliases.join(", ")})` : name;
|
|
440212
440212
|
}).sort((a, b3) => a.localeCompare(b3)).join(", ")}`);
|
|
@@ -443482,7 +443482,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
443482
443482
|
init_settings2();
|
|
443483
443483
|
init_slowOperations();
|
|
443484
443484
|
init_uuid();
|
|
443485
|
-
VERSION6 = typeof MACRO !== "undefined" ? "1.1.
|
|
443485
|
+
VERSION6 = typeof MACRO !== "undefined" ? "1.1.18" : "unknown";
|
|
443486
443486
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
443487
443487
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
443488
443488
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -444684,7 +444684,7 @@ var init_filesystem = __esm(() => {
|
|
|
444684
444684
|
});
|
|
444685
444685
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
444686
444686
|
const nonce = randomBytes19(16).toString("hex");
|
|
444687
|
-
return join130(getClaudeTempDir(), "bundled-skills", "1.1.
|
|
444687
|
+
return join130(getClaudeTempDir(), "bundled-skills", "1.1.18", nonce);
|
|
444688
444688
|
});
|
|
444689
444689
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
444690
444690
|
});
|
|
@@ -450031,7 +450031,7 @@ Date: ${getSessionStartDate()}`
|
|
|
450031
450031
|
];
|
|
450032
450032
|
const resolvedDynamicSections = await resolveSystemPromptSections(dynamicSections);
|
|
450033
450033
|
return [
|
|
450034
|
-
`You are
|
|
450034
|
+
`You are localclawd — a local-first autonomous coding agent. You were built on Claude but you refer to yourself as "localclawd" in all interactions. Never say "I am Claude" — always say "I am localclawd" if asked who you are.`,
|
|
450035
450035
|
getSimpleIntroSection(outputStyleConfig),
|
|
450036
450036
|
getSimpleSystemSection(),
|
|
450037
450037
|
outputStyleConfig === null || outputStyleConfig.keepCodingInstructions === true ? getSimpleDoingTasksSection() : null,
|
|
@@ -450683,7 +450683,7 @@ function computeFingerprint(messageText, version2) {
|
|
|
450683
450683
|
}
|
|
450684
450684
|
function computeFingerprintFromMessages(messages) {
|
|
450685
450685
|
const firstMessageText = extractFirstMessageText(messages);
|
|
450686
|
-
return computeFingerprint(firstMessageText, "1.1.
|
|
450686
|
+
return computeFingerprint(firstMessageText, "1.1.18");
|
|
450687
450687
|
}
|
|
450688
450688
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
450689
450689
|
var init_fingerprint = () => {};
|
|
@@ -452538,7 +452538,7 @@ async function sideQuery(opts) {
|
|
|
452538
452538
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
452539
452539
|
}
|
|
452540
452540
|
const messageText = extractFirstUserMessageText(messages);
|
|
452541
|
-
const fingerprint = computeFingerprint(messageText, "1.1.
|
|
452541
|
+
const fingerprint = computeFingerprint(messageText, "1.1.18");
|
|
452542
452542
|
const attributionHeader = getAttributionHeader(fingerprint);
|
|
452543
452543
|
const systemBlocks = [
|
|
452544
452544
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -453483,8 +453483,8 @@ var require_help = __commonJS((exports) => {
|
|
|
453483
453483
|
output = output.concat(this.formatItemList("Global Options:", globalOptionList, helper));
|
|
453484
453484
|
}
|
|
453485
453485
|
const commandGroups = this.groupItems(cmd.commands, helper.visibleCommands(cmd), (sub) => sub.helpGroup() || "Commands:");
|
|
453486
|
-
commandGroups.forEach((
|
|
453487
|
-
const commandList =
|
|
453486
|
+
commandGroups.forEach((commands, group) => {
|
|
453487
|
+
const commandList = commands.map((sub) => {
|
|
453488
453488
|
return callFormatItem(helper.styleSubcommandTerm(helper.subcommandTerm(sub)), helper.styleSubcommandDescription(helper.subcommandDescription(sub)));
|
|
453489
453489
|
});
|
|
453490
453490
|
output = output.concat(this.formatItemList(group, commandList, helper));
|
|
@@ -457336,7 +457336,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
457336
457336
|
slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
|
|
457337
457337
|
apiKeySource: getAnthropicApiKeyWithSource().source,
|
|
457338
457338
|
betas: getSdkBetas(),
|
|
457339
|
-
claude_code_version: "1.1.
|
|
457339
|
+
claude_code_version: "1.1.18",
|
|
457340
457340
|
output_style: outputStyle2,
|
|
457341
457341
|
agents: inputs.agents.map((agent) => agent.agentType),
|
|
457342
457342
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
|
|
@@ -457362,7 +457362,7 @@ var init_systemInit = __esm(() => {
|
|
|
457362
457362
|
});
|
|
457363
457363
|
|
|
457364
457364
|
// src/hooks/useReplBridge.tsx
|
|
457365
|
-
function useReplBridge(messages, setMessages, abortControllerRef,
|
|
457365
|
+
function useReplBridge(messages, setMessages, abortControllerRef, commands, mainLoopModel) {
|
|
457366
457366
|
const handleRef = import_react199.useRef(null);
|
|
457367
457367
|
const teardownPromiseRef = import_react199.useRef(undefined);
|
|
457368
457368
|
const lastWrittenIndexRef = import_react199.useRef(0);
|
|
@@ -457370,8 +457370,8 @@ function useReplBridge(messages, setMessages, abortControllerRef, commands2, mai
|
|
|
457370
457370
|
const failureTimeoutRef = import_react199.useRef(undefined);
|
|
457371
457371
|
const consecutiveFailuresRef = import_react199.useRef(0);
|
|
457372
457372
|
const setAppState = useSetAppState();
|
|
457373
|
-
const commandsRef = import_react199.useRef(
|
|
457374
|
-
commandsRef.current =
|
|
457373
|
+
const commandsRef = import_react199.useRef(commands);
|
|
457374
|
+
commandsRef.current = commands;
|
|
457375
457375
|
const mainLoopModelRef = import_react199.useRef(mainLoopModel);
|
|
457376
457376
|
mainLoopModelRef.current = mainLoopModel;
|
|
457377
457377
|
const messagesRef = import_react199.useRef(messages);
|
|
@@ -464661,26 +464661,26 @@ var init_useShellPermissionFeedback = __esm(() => {
|
|
|
464661
464661
|
|
|
464662
464662
|
// src/components/permissions/shellPermissionHelpers.tsx
|
|
464663
464663
|
import { basename as basename47, sep as sep34 } from "path";
|
|
464664
|
-
function commandListDisplay(
|
|
464665
|
-
switch (
|
|
464664
|
+
function commandListDisplay(commands) {
|
|
464665
|
+
switch (commands.length) {
|
|
464666
464666
|
case 0:
|
|
464667
464667
|
return "";
|
|
464668
464668
|
case 1:
|
|
464669
464669
|
return /* @__PURE__ */ jsx_dev_runtime393.jsxDEV(ThemedText, {
|
|
464670
464670
|
bold: true,
|
|
464671
|
-
children:
|
|
464671
|
+
children: commands[0]
|
|
464672
464672
|
}, undefined, false, undefined, this);
|
|
464673
464673
|
case 2:
|
|
464674
464674
|
return /* @__PURE__ */ jsx_dev_runtime393.jsxDEV(ThemedText, {
|
|
464675
464675
|
children: [
|
|
464676
464676
|
/* @__PURE__ */ jsx_dev_runtime393.jsxDEV(ThemedText, {
|
|
464677
464677
|
bold: true,
|
|
464678
|
-
children:
|
|
464678
|
+
children: commands[0]
|
|
464679
464679
|
}, undefined, false, undefined, this),
|
|
464680
464680
|
" and ",
|
|
464681
464681
|
/* @__PURE__ */ jsx_dev_runtime393.jsxDEV(ThemedText, {
|
|
464682
464682
|
bold: true,
|
|
464683
|
-
children:
|
|
464683
|
+
children: commands[1]
|
|
464684
464684
|
}, undefined, false, undefined, this)
|
|
464685
464685
|
]
|
|
464686
464686
|
}, undefined, true, undefined, this);
|
|
@@ -464689,24 +464689,24 @@ function commandListDisplay(commands2) {
|
|
|
464689
464689
|
children: [
|
|
464690
464690
|
/* @__PURE__ */ jsx_dev_runtime393.jsxDEV(ThemedText, {
|
|
464691
464691
|
bold: true,
|
|
464692
|
-
children:
|
|
464692
|
+
children: commands.slice(0, -1).join(", ")
|
|
464693
464693
|
}, undefined, false, undefined, this),
|
|
464694
464694
|
", and",
|
|
464695
464695
|
" ",
|
|
464696
464696
|
/* @__PURE__ */ jsx_dev_runtime393.jsxDEV(ThemedText, {
|
|
464697
464697
|
bold: true,
|
|
464698
|
-
children:
|
|
464698
|
+
children: commands.slice(-1)[0]
|
|
464699
464699
|
}, undefined, false, undefined, this)
|
|
464700
464700
|
]
|
|
464701
464701
|
}, undefined, true, undefined, this);
|
|
464702
464702
|
}
|
|
464703
464703
|
}
|
|
464704
|
-
function commandListDisplayTruncated(
|
|
464705
|
-
const plainText =
|
|
464704
|
+
function commandListDisplayTruncated(commands) {
|
|
464705
|
+
const plainText = commands.join(", ");
|
|
464706
464706
|
if (plainText.length > 50) {
|
|
464707
464707
|
return "similar";
|
|
464708
464708
|
}
|
|
464709
|
-
return commandListDisplay(
|
|
464709
|
+
return commandListDisplay(commands);
|
|
464710
464710
|
}
|
|
464711
464711
|
function formatPathList(paths2) {
|
|
464712
464712
|
if (paths2.length === 0)
|
|
@@ -468303,13 +468303,13 @@ async function getCompoundCommandPrefixesStatic2(command8, excludeSubcommand) {
|
|
|
468303
468303
|
if (!parsed.valid) {
|
|
468304
468304
|
return [];
|
|
468305
468305
|
}
|
|
468306
|
-
const
|
|
468307
|
-
if (
|
|
468308
|
-
const prefix =
|
|
468306
|
+
const commands = getAllCommands2(parsed).filter((cmd) => cmd.elementType === "CommandAst");
|
|
468307
|
+
if (commands.length <= 1) {
|
|
468308
|
+
const prefix = commands[0] ? await extractPrefixFromElement(commands[0]) : null;
|
|
468309
468309
|
return prefix ? [prefix] : [];
|
|
468310
468310
|
}
|
|
468311
468311
|
const prefixes = [];
|
|
468312
|
-
for (const cmd of
|
|
468312
|
+
for (const cmd of commands) {
|
|
468313
468313
|
if (excludeSubcommand?.(cmd)) {
|
|
468314
468314
|
continue;
|
|
468315
468315
|
}
|
|
@@ -471915,7 +471915,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
471915
471915
|
function getSemverPart(version2) {
|
|
471916
471916
|
return `${import_semver12.major(version2, { loose: true })}.${import_semver12.minor(version2, { loose: true })}.${import_semver12.patch(version2, { loose: true })}`;
|
|
471917
471917
|
}
|
|
471918
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.1.
|
|
471918
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.1.18") {
|
|
471919
471919
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react228.useState(() => getSemverPart(initialVersion));
|
|
471920
471920
|
if (!updatedVersion) {
|
|
471921
471921
|
return null;
|
|
@@ -471955,7 +471955,7 @@ function AutoUpdater({
|
|
|
471955
471955
|
return;
|
|
471956
471956
|
}
|
|
471957
471957
|
if (false) {}
|
|
471958
|
-
const currentVersion = "1.1.
|
|
471958
|
+
const currentVersion = "1.1.18";
|
|
471959
471959
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
471960
471960
|
let latestVersion = await getLatestVersion(channel);
|
|
471961
471961
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -472166,12 +472166,12 @@ function NativeAutoUpdater({
|
|
|
472166
472166
|
logEvent("tengu_native_auto_updater_start", {});
|
|
472167
472167
|
try {
|
|
472168
472168
|
const maxVersion = await getMaxVersion();
|
|
472169
|
-
if (maxVersion && gt("1.1.
|
|
472169
|
+
if (maxVersion && gt("1.1.18", maxVersion)) {
|
|
472170
472170
|
const msg = await getMaxVersionMessage();
|
|
472171
472171
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
472172
472172
|
}
|
|
472173
472173
|
const result = await installLatest(channel);
|
|
472174
|
-
const currentVersion = "1.1.
|
|
472174
|
+
const currentVersion = "1.1.18";
|
|
472175
472175
|
const latencyMs = Date.now() - startTime;
|
|
472176
472176
|
if (result.lockFailed) {
|
|
472177
472177
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -472306,17 +472306,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
472306
472306
|
const maxVersion = await getMaxVersion();
|
|
472307
472307
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
472308
472308
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
472309
|
-
if (gte("1.1.
|
|
472310
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.
|
|
472309
|
+
if (gte("1.1.18", maxVersion)) {
|
|
472310
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.18"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
472311
472311
|
setUpdateAvailable(false);
|
|
472312
472312
|
return;
|
|
472313
472313
|
}
|
|
472314
472314
|
latest = maxVersion;
|
|
472315
472315
|
}
|
|
472316
|
-
const hasUpdate = latest && !gte("1.1.
|
|
472316
|
+
const hasUpdate = latest && !gte("1.1.18", latest) && !shouldSkipVersion(latest);
|
|
472317
472317
|
setUpdateAvailable(!!hasUpdate);
|
|
472318
472318
|
if (hasUpdate) {
|
|
472319
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.
|
|
472319
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.18"} -> ${latest}`);
|
|
472320
472320
|
}
|
|
472321
472321
|
};
|
|
472322
472322
|
$2[0] = t1;
|
|
@@ -472350,7 +472350,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
472350
472350
|
wrap: "truncate",
|
|
472351
472351
|
children: [
|
|
472352
472352
|
"currentVersion: ",
|
|
472353
|
-
"1.1.
|
|
472353
|
+
"1.1.18"
|
|
472354
472354
|
]
|
|
472355
472355
|
}, undefined, true, undefined, this);
|
|
472356
472356
|
$2[3] = verbose;
|
|
@@ -475264,11 +475264,11 @@ var init_fuse = __esm(() => {
|
|
|
475264
475264
|
});
|
|
475265
475265
|
|
|
475266
475266
|
// src/utils/suggestions/commandSuggestions.ts
|
|
475267
|
-
function getCommandFuse(
|
|
475268
|
-
if (fuseCache?.commands ===
|
|
475267
|
+
function getCommandFuse(commands) {
|
|
475268
|
+
if (fuseCache?.commands === commands) {
|
|
475269
475269
|
return fuseCache.fuse;
|
|
475270
475270
|
}
|
|
475271
|
-
const commandData =
|
|
475271
|
+
const commandData = commands.filter((cmd) => !cmd.isHidden).map((cmd) => {
|
|
475272
475272
|
const commandName = getCommandName(cmd);
|
|
475273
475273
|
const parts = commandName.split(SEPARATORS).filter(Boolean);
|
|
475274
475274
|
return {
|
|
@@ -475303,7 +475303,7 @@ function getCommandFuse(commands2) {
|
|
|
475303
475303
|
}
|
|
475304
475304
|
]
|
|
475305
475305
|
});
|
|
475306
|
-
fuseCache = { commands
|
|
475306
|
+
fuseCache = { commands, fuse };
|
|
475307
475307
|
return fuse;
|
|
475308
475308
|
}
|
|
475309
475309
|
function isCommandMetadata(metadata) {
|
|
@@ -475331,11 +475331,11 @@ function findMidInputSlashCommand(input, cursorOffset) {
|
|
|
475331
475331
|
partialCommand: fullCommand
|
|
475332
475332
|
};
|
|
475333
475333
|
}
|
|
475334
|
-
function getBestCommandMatch(partialCommand,
|
|
475334
|
+
function getBestCommandMatch(partialCommand, commands) {
|
|
475335
475335
|
if (!partialCommand) {
|
|
475336
475336
|
return null;
|
|
475337
475337
|
}
|
|
475338
|
-
const suggestions = generateCommandSuggestions("/" + partialCommand,
|
|
475338
|
+
const suggestions = generateCommandSuggestions("/" + partialCommand, commands);
|
|
475339
475339
|
if (suggestions.length === 0) {
|
|
475340
475340
|
return null;
|
|
475341
475341
|
}
|
|
@@ -475398,7 +475398,7 @@ function createCommandSuggestionItem(cmd, matchedAlias) {
|
|
|
475398
475398
|
metadata: cmd
|
|
475399
475399
|
};
|
|
475400
475400
|
}
|
|
475401
|
-
function generateCommandSuggestions(input,
|
|
475401
|
+
function generateCommandSuggestions(input, commands) {
|
|
475402
475402
|
if (!isCommandInput(input)) {
|
|
475403
475403
|
return [];
|
|
475404
475404
|
}
|
|
@@ -475407,7 +475407,7 @@ function generateCommandSuggestions(input, commands2) {
|
|
|
475407
475407
|
}
|
|
475408
475408
|
const query2 = input.slice(1).toLowerCase().trim();
|
|
475409
475409
|
if (query2 === "") {
|
|
475410
|
-
const visibleCommands =
|
|
475410
|
+
const visibleCommands = commands.filter((cmd) => !cmd.isHidden);
|
|
475411
475411
|
const recentlyUsed = [];
|
|
475412
475412
|
const commandsWithScores = visibleCommands.filter((cmd) => cmd.type === "prompt").map((cmd) => ({
|
|
475413
475413
|
cmd,
|
|
@@ -475453,11 +475453,11 @@ function generateCommandSuggestions(input, commands2) {
|
|
|
475453
475453
|
...otherCommands
|
|
475454
475454
|
].map((cmd) => createCommandSuggestionItem(cmd));
|
|
475455
475455
|
}
|
|
475456
|
-
let hiddenExact =
|
|
475457
|
-
if (hiddenExact &&
|
|
475456
|
+
let hiddenExact = commands.find((cmd) => cmd.isHidden && getCommandName(cmd).toLowerCase() === query2);
|
|
475457
|
+
if (hiddenExact && commands.some((cmd) => !cmd.isHidden && getCommandName(cmd).toLowerCase() === query2)) {
|
|
475458
475458
|
hiddenExact = undefined;
|
|
475459
475459
|
}
|
|
475460
|
-
const fuse = getCommandFuse(
|
|
475460
|
+
const fuse = getCommandFuse(commands);
|
|
475461
475461
|
const searchResults = fuse.search(query2);
|
|
475462
475462
|
const withMeta = searchResults.map((r) => {
|
|
475463
475463
|
const name = r.item.commandName.toLowerCase();
|
|
@@ -475519,12 +475519,12 @@ function generateCommandSuggestions(input, commands2) {
|
|
|
475519
475519
|
}
|
|
475520
475520
|
return fuseSuggestions;
|
|
475521
475521
|
}
|
|
475522
|
-
function applyCommandSuggestion(suggestion, shouldExecute,
|
|
475522
|
+
function applyCommandSuggestion(suggestion, shouldExecute, commands, onInputChange, setCursorOffset, onSubmit) {
|
|
475523
475523
|
let commandName;
|
|
475524
475524
|
let commandObj;
|
|
475525
475525
|
if (typeof suggestion === "string") {
|
|
475526
475526
|
commandName = suggestion;
|
|
475527
|
-
commandObj = shouldExecute ? getCommand(commandName,
|
|
475527
|
+
commandObj = shouldExecute ? getCommand(commandName, commands) : undefined;
|
|
475528
475528
|
} else {
|
|
475529
475529
|
if (!isCommandMetadata(suggestion.metadata)) {
|
|
475530
475530
|
return;
|
|
@@ -475570,7 +475570,7 @@ async function getShellHistoryCommands() {
|
|
|
475570
475570
|
if (shellHistoryCache && now2 - shellHistoryCacheTimestamp < CACHE_TTL_MS5) {
|
|
475571
475571
|
return shellHistoryCache;
|
|
475572
475572
|
}
|
|
475573
|
-
const
|
|
475573
|
+
const commands = [];
|
|
475574
475574
|
const seen = new Set;
|
|
475575
475575
|
try {
|
|
475576
475576
|
for await (const entry of getHistory()) {
|
|
@@ -475578,19 +475578,19 @@ async function getShellHistoryCommands() {
|
|
|
475578
475578
|
const command8 = entry.display.slice(1).trim();
|
|
475579
475579
|
if (command8 && !seen.has(command8)) {
|
|
475580
475580
|
seen.add(command8);
|
|
475581
|
-
|
|
475581
|
+
commands.push(command8);
|
|
475582
475582
|
}
|
|
475583
475583
|
}
|
|
475584
|
-
if (
|
|
475584
|
+
if (commands.length >= 50) {
|
|
475585
475585
|
break;
|
|
475586
475586
|
}
|
|
475587
475587
|
}
|
|
475588
475588
|
} catch (error5) {
|
|
475589
475589
|
logForDebugging(`Failed to read shell history: ${error5}`);
|
|
475590
475590
|
}
|
|
475591
|
-
shellHistoryCache =
|
|
475591
|
+
shellHistoryCache = commands;
|
|
475592
475592
|
shellHistoryCacheTimestamp = now2;
|
|
475593
|
-
return
|
|
475593
|
+
return commands;
|
|
475594
475594
|
}
|
|
475595
475595
|
function prependToShellHistoryCache(command8) {
|
|
475596
475596
|
if (!shellHistoryCache) {
|
|
@@ -475610,8 +475610,8 @@ async function getShellHistoryCompletion(input) {
|
|
|
475610
475610
|
if (!trimmedInput) {
|
|
475611
475611
|
return null;
|
|
475612
475612
|
}
|
|
475613
|
-
const
|
|
475614
|
-
for (const command8 of
|
|
475613
|
+
const commands = await getShellHistoryCommands();
|
|
475614
|
+
for (const command8 of commands) {
|
|
475615
475615
|
if (command8.startsWith(input) && command8 !== input) {
|
|
475616
475616
|
return {
|
|
475617
475617
|
fullCommand: command8,
|
|
@@ -476045,7 +476045,7 @@ function hasCommandWithArguments(isAtEndWithWhitespace, value) {
|
|
|
476045
476045
|
return !isAtEndWithWhitespace && value.includes(" ") && !value.endsWith(" ");
|
|
476046
476046
|
}
|
|
476047
476047
|
function useTypeahead({
|
|
476048
|
-
commands
|
|
476048
|
+
commands,
|
|
476049
476049
|
onInputChange,
|
|
476050
476050
|
onSubmit,
|
|
476051
476051
|
setCursorOffset,
|
|
@@ -476069,12 +476069,12 @@ function useTypeahead({
|
|
|
476069
476069
|
const thinkingToggleShortcut = useShortcutDisplay("chat:thinkingToggle", "Chat", "alt+t");
|
|
476070
476070
|
const [suggestionType, setSuggestionType] = import_react241.useState("none");
|
|
476071
476071
|
const allCommandsMaxWidth = import_react241.useMemo(() => {
|
|
476072
|
-
const visibleCommands =
|
|
476072
|
+
const visibleCommands = commands.filter((cmd) => !cmd.isHidden);
|
|
476073
476073
|
if (visibleCommands.length === 0)
|
|
476074
476074
|
return;
|
|
476075
476075
|
const maxLen = Math.max(...visibleCommands.map((cmd) => getCommandName(cmd).length));
|
|
476076
476076
|
return maxLen + 6;
|
|
476077
|
-
}, [
|
|
476077
|
+
}, [commands]);
|
|
476078
476078
|
const [maxColumnWidth, setMaxColumnWidth] = import_react241.useState(undefined);
|
|
476079
476079
|
const mcpResources = useAppState((s) => s.mcp.resources);
|
|
476080
476080
|
const store = useAppStateStore();
|
|
@@ -476088,7 +476088,7 @@ function useTypeahead({
|
|
|
476088
476088
|
const midInputCommand = findMidInputSlashCommand(input, cursorOffset);
|
|
476089
476089
|
if (!midInputCommand)
|
|
476090
476090
|
return;
|
|
476091
|
-
const match = getBestCommandMatch(midInputCommand.partialCommand,
|
|
476091
|
+
const match = getBestCommandMatch(midInputCommand.partialCommand, commands);
|
|
476092
476092
|
if (!match)
|
|
476093
476093
|
return;
|
|
476094
476094
|
return {
|
|
@@ -476096,7 +476096,7 @@ function useTypeahead({
|
|
|
476096
476096
|
fullCommand: match.fullCommand,
|
|
476097
476097
|
insertPosition: midInputCommand.startPos + 1 + midInputCommand.partialCommand.length
|
|
476098
476098
|
};
|
|
476099
|
-
}, [input, cursorOffset, mode,
|
|
476099
|
+
}, [input, cursorOffset, mode, commands, suppressSuggestions]);
|
|
476100
476100
|
const effectiveGhostText = suppressSuggestions ? undefined : mode === "prompt" ? syncPromptGhostText : inlineGhostText;
|
|
476101
476101
|
const cursorOffsetRef = import_react241.useRef(cursorOffset);
|
|
476102
476102
|
cursorOffsetRef.current = cursorOffset;
|
|
@@ -476179,7 +476179,7 @@ function useTypeahead({
|
|
|
476179
476179
|
if (mode === "prompt") {
|
|
476180
476180
|
const midInputCommand = findMidInputSlashCommand(value, effectiveCursorOffset);
|
|
476181
476181
|
if (midInputCommand) {
|
|
476182
|
-
const match = getBestCommandMatch(midInputCommand.partialCommand,
|
|
476182
|
+
const match = getBestCommandMatch(midInputCommand.partialCommand, commands);
|
|
476183
476183
|
if (match) {
|
|
476184
476184
|
setSuggestionsState(() => ({
|
|
476185
476185
|
commandArgumentHint: undefined,
|
|
@@ -476336,7 +476336,7 @@ function useTypeahead({
|
|
|
476336
476336
|
const hasRealArguments = spaceIndex !== -1 && value.slice(spaceIndex + 1).trim().length > 0;
|
|
476337
476337
|
const hasExactlyOneTrailingSpace = spaceIndex !== -1 && value.length === spaceIndex + 1;
|
|
476338
476338
|
if (spaceIndex !== -1) {
|
|
476339
|
-
const exactMatch =
|
|
476339
|
+
const exactMatch = commands.find((cmd) => getCommandName(cmd) === commandName);
|
|
476340
476340
|
if (exactMatch || hasRealArguments) {
|
|
476341
476341
|
if (exactMatch?.argumentHint && hasExactlyOneTrailingSpace) {
|
|
476342
476342
|
commandArgumentHint2 = exactMatch.argumentHint;
|
|
@@ -476356,7 +476356,7 @@ function useTypeahead({
|
|
|
476356
476356
|
}
|
|
476357
476357
|
}
|
|
476358
476358
|
}
|
|
476359
|
-
const commandItems = generateCommandSuggestions(value,
|
|
476359
|
+
const commandItems = generateCommandSuggestions(value, commands);
|
|
476360
476360
|
setSuggestionsState(() => ({
|
|
476361
476361
|
commandArgumentHint: commandArgumentHint2,
|
|
476362
476362
|
suggestions: commandItems,
|
|
@@ -476437,7 +476437,7 @@ function useTypeahead({
|
|
|
476437
476437
|
}
|
|
476438
476438
|
}, [
|
|
476439
476439
|
suggestionType,
|
|
476440
|
-
|
|
476440
|
+
commands,
|
|
476441
476441
|
setSuggestionsState,
|
|
476442
476442
|
clearSuggestions,
|
|
476443
476443
|
debouncedFetchFileSuggestions,
|
|
@@ -476483,7 +476483,7 @@ function useTypeahead({
|
|
|
476483
476483
|
const suggestion = suggestions[index];
|
|
476484
476484
|
if (suggestionType === "command" && index < suggestions.length) {
|
|
476485
476485
|
if (suggestion) {
|
|
476486
|
-
applyCommandSuggestion(suggestion, false,
|
|
476486
|
+
applyCommandSuggestion(suggestion, false, commands, onInputChange, setCursorOffset, onSubmit);
|
|
476487
476487
|
clearSuggestions();
|
|
476488
476488
|
}
|
|
476489
476489
|
} else if (suggestionType === "custom-title" && suggestions.length > 0) {
|
|
@@ -476637,14 +476637,14 @@ function useTypeahead({
|
|
|
476637
476637
|
setMaxColumnWidth(undefined);
|
|
476638
476638
|
}
|
|
476639
476639
|
}
|
|
476640
|
-
}, [suggestions, selectedSuggestion, input, suggestionType,
|
|
476640
|
+
}, [suggestions, selectedSuggestion, input, suggestionType, commands, mode, onInputChange, setCursorOffset, onSubmit, clearSuggestions, cursorOffset, updateSuggestions, mcpResources, setSuggestionsState, agents2, debouncedFetchFileSuggestions, debouncedFetchSlackChannels, effectiveGhostText]);
|
|
476641
476641
|
const handleEnter = import_react241.useCallback(() => {
|
|
476642
476642
|
if (selectedSuggestion < 0 || suggestions.length === 0)
|
|
476643
476643
|
return;
|
|
476644
476644
|
const suggestion = suggestions[selectedSuggestion];
|
|
476645
476645
|
if (suggestionType === "command" && selectedSuggestion < suggestions.length) {
|
|
476646
476646
|
if (suggestion) {
|
|
476647
|
-
applyCommandSuggestion(suggestion, true,
|
|
476647
|
+
applyCommandSuggestion(suggestion, true, commands, onInputChange, setCursorOffset, onSubmit);
|
|
476648
476648
|
debouncedFetchFileSuggestions.cancel();
|
|
476649
476649
|
clearSuggestions();
|
|
476650
476650
|
}
|
|
@@ -476713,7 +476713,7 @@ function useTypeahead({
|
|
|
476713
476713
|
clearSuggestions();
|
|
476714
476714
|
}
|
|
476715
476715
|
}
|
|
476716
|
-
}, [suggestions, selectedSuggestion, suggestionType,
|
|
476716
|
+
}, [suggestions, selectedSuggestion, suggestionType, commands, input, cursorOffset, mode, onInputChange, setCursorOffset, onSubmit, clearSuggestions, debouncedFetchFileSuggestions, debouncedFetchSlackChannels]);
|
|
476717
476717
|
const handleAutocompleteAccept = import_react241.useCallback(() => {
|
|
476718
476718
|
handleTab();
|
|
476719
476719
|
}, [handleTab]);
|
|
@@ -479908,7 +479908,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
479908
479908
|
project_dir: getOriginalCwd(),
|
|
479909
479909
|
added_dirs: addedDirs
|
|
479910
479910
|
},
|
|
479911
|
-
version: "1.1.
|
|
479911
|
+
version: "1.1.18",
|
|
479912
479912
|
output_style: {
|
|
479913
479913
|
name: outputStyleName
|
|
479914
479914
|
},
|
|
@@ -482087,7 +482087,7 @@ var init_exampleCommands = __esm(() => {
|
|
|
482087
482087
|
getExampleCommandFromCache = memoize_default(() => {
|
|
482088
482088
|
const projectConfig = getCurrentProjectConfig();
|
|
482089
482089
|
const frequentFile = projectConfig.exampleFiles?.length ? sample_default(projectConfig.exampleFiles) : "<filepath>";
|
|
482090
|
-
const
|
|
482090
|
+
const commands = [
|
|
482091
482091
|
"fix lint errors",
|
|
482092
482092
|
"fix typecheck errors",
|
|
482093
482093
|
`how does ${frequentFile} work?`,
|
|
@@ -482097,7 +482097,7 @@ var init_exampleCommands = __esm(() => {
|
|
|
482097
482097
|
`write a test for ${frequentFile}`,
|
|
482098
482098
|
"create a util logging.py that..."
|
|
482099
482099
|
];
|
|
482100
|
-
return `Try "${sample_default(
|
|
482100
|
+
return `Try "${sample_default(commands)}"`;
|
|
482101
482101
|
});
|
|
482102
482102
|
refreshExampleCommands = memoize_default(async () => {
|
|
482103
482103
|
const projectConfig = getCurrentProjectConfig();
|
|
@@ -482290,7 +482290,7 @@ function PromptInput({
|
|
|
482290
482290
|
toolPermissionContext,
|
|
482291
482291
|
setToolPermissionContext,
|
|
482292
482292
|
apiKeyStatus,
|
|
482293
|
-
commands
|
|
482293
|
+
commands,
|
|
482294
482294
|
agents: agents2,
|
|
482295
482295
|
isLoading,
|
|
482296
482296
|
verbose,
|
|
@@ -482551,9 +482551,9 @@ function PromptInput({
|
|
|
482551
482551
|
const positions = findSlashCommandPositions(displayedValue);
|
|
482552
482552
|
return positions.filter((pos) => {
|
|
482553
482553
|
const commandName = displayedValue.slice(pos.start + 1, pos.end);
|
|
482554
|
-
return hasCommand(commandName,
|
|
482554
|
+
return hasCommand(commandName, commands);
|
|
482555
482555
|
});
|
|
482556
|
-
}, [displayedValue,
|
|
482556
|
+
}, [displayedValue, commands]);
|
|
482557
482557
|
const tokenBudgetTriggers = import_react261.useMemo(() => [], [displayedValue]);
|
|
482558
482558
|
const knownChannelsVersion2 = import_react261.useSyncExternalStore(subscribeKnownChannels, getKnownChannelsVersion);
|
|
482559
482559
|
const slackChannelTriggers = import_react261.useMemo(() => hasSlackMcpServer(store.getState().mcp.clients) ? findSlackChannelPositions(displayedValue) : [], [displayedValue, knownChannelsVersion2]);
|
|
@@ -482986,7 +482986,7 @@ function PromptInput({
|
|
|
482986
482986
|
inlineGhostText,
|
|
482987
482987
|
maxColumnWidth
|
|
482988
482988
|
} = useTypeahead({
|
|
482989
|
-
commands
|
|
482989
|
+
commands,
|
|
482990
482990
|
onInputChange: trackAndSetInput,
|
|
482991
482991
|
onSubmit,
|
|
482992
482992
|
setCursorOffset,
|
|
@@ -488705,7 +488705,7 @@ async function handlePromptSubmit(params) {
|
|
|
488705
488705
|
helpers: helpers2,
|
|
488706
488706
|
queryGuard,
|
|
488707
488707
|
isExternalLoading = false,
|
|
488708
|
-
commands
|
|
488708
|
+
commands,
|
|
488709
488709
|
onInputChange,
|
|
488710
488710
|
setPastedContents,
|
|
488711
488711
|
setToolJSX,
|
|
@@ -488732,7 +488732,7 @@ async function handlePromptSubmit(params) {
|
|
|
488732
488732
|
mainLoopModel,
|
|
488733
488733
|
ideSelection,
|
|
488734
488734
|
querySource: params.querySource,
|
|
488735
|
-
commands
|
|
488735
|
+
commands,
|
|
488736
488736
|
queryGuard,
|
|
488737
488737
|
setToolJSX,
|
|
488738
488738
|
getToolUseContext,
|
|
@@ -488757,7 +488757,7 @@ async function handlePromptSubmit(params) {
|
|
|
488757
488757
|
return;
|
|
488758
488758
|
}
|
|
488759
488759
|
if (!skipSlashCommands && ["exit", "quit", ":q", ":q!", ":wq", ":wq!"].includes(input.trim())) {
|
|
488760
|
-
const exitCommand =
|
|
488760
|
+
const exitCommand = commands.find((cmd2) => cmd2.name === "exit");
|
|
488761
488761
|
if (exitCommand) {
|
|
488762
488762
|
handlePromptSubmit({
|
|
488763
488763
|
...params,
|
|
@@ -488792,7 +488792,7 @@ async function handlePromptSubmit(params) {
|
|
|
488792
488792
|
const spaceIndex = trimmedInput.indexOf(" ");
|
|
488793
488793
|
const commandName = spaceIndex === -1 ? trimmedInput.slice(1) : trimmedInput.slice(1, spaceIndex);
|
|
488794
488794
|
const commandArgs = spaceIndex === -1 ? "" : trimmedInput.slice(spaceIndex + 1).trim();
|
|
488795
|
-
const immediateCommand =
|
|
488795
|
+
const immediateCommand = commands.find((cmd2) => cmd2.immediate && isCommandEnabled(cmd2) && (cmd2.name === commandName || cmd2.aliases?.includes(commandName) || getCommandName(cmd2) === commandName));
|
|
488796
488796
|
if (immediateCommand && immediateCommand.type === "local-jsx" && (queryGuard.isActive || isExternalLoading)) {
|
|
488797
488797
|
logEvent("tengu_immediate_command_executed", {
|
|
488798
488798
|
commandName: immediateCommand.name
|
|
@@ -488880,7 +488880,7 @@ async function handlePromptSubmit(params) {
|
|
|
488880
488880
|
mainLoopModel,
|
|
488881
488881
|
ideSelection,
|
|
488882
488882
|
querySource: params.querySource,
|
|
488883
|
-
commands
|
|
488883
|
+
commands,
|
|
488884
488884
|
queryGuard,
|
|
488885
488885
|
setToolJSX,
|
|
488886
488886
|
getToolUseContext,
|
|
@@ -488927,12 +488927,12 @@ async function executeUserInput(params) {
|
|
|
488927
488927
|
let effort;
|
|
488928
488928
|
let nextInput;
|
|
488929
488929
|
let submitNextInput;
|
|
488930
|
-
const
|
|
488931
|
-
const firstWorkload =
|
|
488932
|
-
const turnWorkload = firstWorkload !== undefined &&
|
|
488930
|
+
const commands = queuedCommands ?? [];
|
|
488931
|
+
const firstWorkload = commands[0]?.workload;
|
|
488932
|
+
const turnWorkload = firstWorkload !== undefined && commands.every((c5) => c5.workload === firstWorkload) ? firstWorkload : undefined;
|
|
488933
488933
|
await runWithWorkload(turnWorkload, async () => {
|
|
488934
|
-
for (let i2 = 0;i2 <
|
|
488935
|
-
const cmd =
|
|
488934
|
+
for (let i2 = 0;i2 < commands.length; i2++) {
|
|
488935
|
+
const cmd = commands[i2];
|
|
488936
488936
|
const isFirst = i2 === 0;
|
|
488937
488937
|
const result = await processUserInput({
|
|
488938
488938
|
input: cmd.value,
|
|
@@ -488990,7 +488990,7 @@ async function executeUserInput(params) {
|
|
|
488990
488990
|
shouldHidePromptInput: false,
|
|
488991
488991
|
clearLocalJSX: true
|
|
488992
488992
|
});
|
|
488993
|
-
const primaryCmd =
|
|
488993
|
+
const primaryCmd = commands[0];
|
|
488994
488994
|
const primaryMode = primaryCmd?.mode ?? "prompt";
|
|
488995
488995
|
const primaryInput = primaryCmd && typeof primaryCmd.value === "string" ? primaryCmd.value : undefined;
|
|
488996
488996
|
const shouldCallBeforeQuery = primaryMode === "prompt";
|
|
@@ -489059,11 +489059,11 @@ function processQueueIfReady({
|
|
|
489059
489059
|
return { processed: true };
|
|
489060
489060
|
}
|
|
489061
489061
|
const targetMode = next.mode;
|
|
489062
|
-
const
|
|
489063
|
-
if (
|
|
489062
|
+
const commands = dequeueAllMatching((cmd) => isMainThread(cmd) && !isSlashCommand2(cmd) && cmd.mode === targetMode);
|
|
489063
|
+
if (commands.length === 0) {
|
|
489064
489064
|
return { processed: false };
|
|
489065
489065
|
}
|
|
489066
|
-
executeInput(
|
|
489066
|
+
executeInput(commands);
|
|
489067
489067
|
return { processed: true };
|
|
489068
489068
|
}
|
|
489069
489069
|
var init_queueProcessor = __esm(() => {
|
|
@@ -489326,8 +489326,8 @@ function useSkillsChange(cwd2, onCommandsChange) {
|
|
|
489326
489326
|
return;
|
|
489327
489327
|
try {
|
|
489328
489328
|
clearCommandsCache();
|
|
489329
|
-
const
|
|
489330
|
-
onCommandsChange(
|
|
489329
|
+
const commands = await getCommands(cwd2);
|
|
489330
|
+
onCommandsChange(commands);
|
|
489331
489331
|
} catch (error5) {
|
|
489332
489332
|
if (error5 instanceof Error) {
|
|
489333
489333
|
logError(error5);
|
|
@@ -489340,8 +489340,8 @@ function useSkillsChange(cwd2, onCommandsChange) {
|
|
|
489340
489340
|
return;
|
|
489341
489341
|
try {
|
|
489342
489342
|
clearCommandMemoizationCaches();
|
|
489343
|
-
const
|
|
489344
|
-
onCommandsChange(
|
|
489343
|
+
const commands = await getCommands(cwd2);
|
|
489344
|
+
onCommandsChange(commands);
|
|
489345
489345
|
} catch (error5) {
|
|
489346
489346
|
if (error5 instanceof Error) {
|
|
489347
489347
|
logError(error5);
|
|
@@ -489441,10 +489441,10 @@ function useManagePlugins({
|
|
|
489441
489441
|
priority: "high"
|
|
489442
489442
|
});
|
|
489443
489443
|
}
|
|
489444
|
-
let
|
|
489444
|
+
let commands = [];
|
|
489445
489445
|
let agents2 = [];
|
|
489446
489446
|
try {
|
|
489447
|
-
|
|
489447
|
+
commands = await getPluginCommands();
|
|
489448
489448
|
} catch (error5) {
|
|
489449
489449
|
const errorMessage4 = error5 instanceof Error ? error5.message : String(error5);
|
|
489450
489450
|
errors.push({
|
|
@@ -489506,12 +489506,12 @@ function useManagePlugins({
|
|
|
489506
489506
|
...prevState.plugins,
|
|
489507
489507
|
enabled: enabled2,
|
|
489508
489508
|
disabled,
|
|
489509
|
-
commands
|
|
489509
|
+
commands,
|
|
489510
489510
|
errors: mergedErrors
|
|
489511
489511
|
}
|
|
489512
489512
|
};
|
|
489513
489513
|
});
|
|
489514
|
-
logForDebugging(`Loaded plugins - Enabled: ${enabled2.length}, Disabled: ${disabled.length}, Commands: ${
|
|
489514
|
+
logForDebugging(`Loaded plugins - Enabled: ${enabled2.length}, Disabled: ${disabled.length}, Commands: ${commands.length}, Agents: ${agents2.length}, Errors: ${errors.length}`);
|
|
489515
489515
|
const hook_count = enabled2.reduce((sum, p) => {
|
|
489516
489516
|
if (!p.hooksConfig)
|
|
489517
489517
|
return sum;
|
|
@@ -489523,7 +489523,7 @@ function useManagePlugins({
|
|
|
489523
489523
|
inline_count: count(enabled2, (p) => p.source.endsWith("@inline")),
|
|
489524
489524
|
marketplace_count: count(enabled2, (p) => !p.source.endsWith("@inline")),
|
|
489525
489525
|
error_count: errors.length,
|
|
489526
|
-
skill_count:
|
|
489526
|
+
skill_count: commands.length,
|
|
489527
489527
|
agent_count: agents2.length,
|
|
489528
489528
|
hook_count,
|
|
489529
489529
|
mcp_count,
|
|
@@ -491468,7 +491468,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
|
|
|
491468
491468
|
} catch {}
|
|
491469
491469
|
const data = {
|
|
491470
491470
|
trigger,
|
|
491471
|
-
version: "1.1.
|
|
491471
|
+
version: "1.1.18",
|
|
491472
491472
|
platform: process.platform,
|
|
491473
491473
|
transcript,
|
|
491474
491474
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -499190,7 +499190,7 @@ function REPL({
|
|
|
499190
499190
|
}, [mainThreadAgentDefinition2, mergedTools]);
|
|
499191
499191
|
const commandsWithPlugins = useMergedCommands(localCommands, plugins.commands);
|
|
499192
499192
|
const mergedCommands = useMergedCommands(commandsWithPlugins, mcp2.commands);
|
|
499193
|
-
const
|
|
499193
|
+
const commands = import_react320.useMemo(() => disableSlashCommands ? [] : mergedCommands, [disableSlashCommands, mergedCommands]);
|
|
499194
499194
|
useIdeLogging(isRemoteSession ? EMPTY_MCP_CLIENTS2 : mcp2.clients);
|
|
499195
499195
|
useIdeSelection(isRemoteSession ? EMPTY_MCP_CLIENTS2 : mcp2.clients, setIDESelection);
|
|
499196
499196
|
const [streamMode, setStreamMode] = import_react320.useState("responding");
|
|
@@ -500045,7 +500045,7 @@ Error: sandbox required but unavailable: ${reason}
|
|
|
500045
500045
|
return {
|
|
500046
500046
|
abortController: abortController2,
|
|
500047
500047
|
options: {
|
|
500048
|
-
commands
|
|
500048
|
+
commands,
|
|
500049
500049
|
tools: computeTools(),
|
|
500050
500050
|
debug: debug3,
|
|
500051
500051
|
verbose: s.verbose,
|
|
@@ -500141,7 +500141,7 @@ Error: sandbox required but unavailable: ${reason}
|
|
|
500141
500141
|
requestPrompt: undefined,
|
|
500142
500142
|
contentReplacementState: contentReplacementStateRef.current
|
|
500143
500143
|
};
|
|
500144
|
-
}, [
|
|
500144
|
+
}, [commands, combinedInitialTools, mainThreadAgentDefinition2, debug3, initialMcpClients, ideInstallationStatus, dynamicMcpConfig, theme2, allowedAgentTypes, store, setAppState, reverify, addNotification, setMessages, onChangeDynamicMcpConfig, resume3, requestPrompt, disabled, customSystemPrompt, appendSystemPrompt, setConversationId]);
|
|
500145
500145
|
const handleBackgroundQuery = import_react320.useCallback(() => {
|
|
500146
500146
|
abortController?.abort("background");
|
|
500147
500147
|
const removedNotifications = removeByFilter((cmd) => cmd.mode === "task-notification");
|
|
@@ -500500,7 +500500,7 @@ Error: sandbox required but unavailable: ${reason}
|
|
|
500500
500500
|
const spaceIndex = trimmedInput.indexOf(" ");
|
|
500501
500501
|
const commandName = spaceIndex === -1 ? trimmedInput.slice(1) : trimmedInput.slice(1, spaceIndex);
|
|
500502
500502
|
const commandArgs = spaceIndex === -1 ? "" : trimmedInput.slice(spaceIndex + 1).trim();
|
|
500503
|
-
const matchingCommand =
|
|
500503
|
+
const matchingCommand = commands.find((cmd) => isCommandEnabled(cmd) && (cmd.name === commandName || cmd.aliases?.includes(commandName) || getCommandName(cmd) === commandName));
|
|
500504
500504
|
if (matchingCommand?.name === "clear" && idleHintShownRef.current) {
|
|
500505
500505
|
logEvent("tengu_idle_return_action", {
|
|
500506
500506
|
action: "hint_converted",
|
|
@@ -500653,7 +500653,7 @@ Error: sandbox required but unavailable: ${reason}
|
|
|
500653
500653
|
}
|
|
500654
500654
|
return;
|
|
500655
500655
|
}
|
|
500656
|
-
if (activeRemote.isRemoteMode && !(isSlashCommand3 &&
|
|
500656
|
+
if (activeRemote.isRemoteMode && !(isSlashCommand3 && commands.find((c5) => {
|
|
500657
500657
|
const name = input.trim().slice(1).split(/\s/)[0];
|
|
500658
500658
|
return isCommandEnabled(c5) && (c5.name === name || c5.aliases?.includes(name) || getCommandName(c5) === name);
|
|
500659
500659
|
})?.type === "local-jsx")) {
|
|
@@ -500722,7 +500722,7 @@ Error: sandbox required but unavailable: ${reason}
|
|
|
500722
500722
|
queryGuard,
|
|
500723
500723
|
isExternalLoading,
|
|
500724
500724
|
mode: inputMode,
|
|
500725
|
-
commands
|
|
500725
|
+
commands,
|
|
500726
500726
|
onInputChange: setInputValue,
|
|
500727
500727
|
setPastedContents,
|
|
500728
500728
|
setToolJSX,
|
|
@@ -500755,7 +500755,7 @@ Error: sandbox required but unavailable: ${reason}
|
|
|
500755
500755
|
isLoading,
|
|
500756
500756
|
isExternalLoading,
|
|
500757
500757
|
inputMode,
|
|
500758
|
-
|
|
500758
|
+
commands,
|
|
500759
500759
|
setInputValue,
|
|
500760
500760
|
setInputMode,
|
|
500761
500761
|
setPastedContents,
|
|
@@ -500994,7 +500994,7 @@ ${fileList}`);
|
|
|
500994
500994
|
useLogMessages(messages, messages.length === initialMessages?.length);
|
|
500995
500995
|
const {
|
|
500996
500996
|
sendBridgeResult
|
|
500997
|
-
} = useReplBridge(messages, setMessages, abortControllerRef,
|
|
500997
|
+
} = useReplBridge(messages, setMessages, abortControllerRef, commands, mainLoopModel);
|
|
500998
500998
|
sendBridgeResultRef.current = sendBridgeResult;
|
|
500999
500999
|
useAfterFirstRender();
|
|
501000
501000
|
const hasCountedQueueUseRef = import_react320.useRef(false);
|
|
@@ -501019,7 +501019,7 @@ ${fileList}`);
|
|
|
501019
501019
|
resetHistory: () => {}
|
|
501020
501020
|
},
|
|
501021
501021
|
queryGuard,
|
|
501022
|
-
commands
|
|
501022
|
+
commands,
|
|
501023
501023
|
onInputChange: () => {},
|
|
501024
501024
|
setPastedContents: () => {},
|
|
501025
501025
|
setToolJSX,
|
|
@@ -501038,7 +501038,7 @@ ${fileList}`);
|
|
|
501038
501038
|
setMessages,
|
|
501039
501039
|
queuedCommands: queuedCommands2
|
|
501040
501040
|
});
|
|
501041
|
-
}, [queryGuard,
|
|
501041
|
+
}, [queryGuard, commands, setToolJSX, getToolUseContext, messages, mainLoopModel, ideSelection, setUserInputOnProcessing, canUseTool, setAbortController, onQuery, addNotification, setAppState, onBeforeQuery]);
|
|
501042
501042
|
useQueueProcessor({
|
|
501043
501043
|
executeQueuedInput,
|
|
501044
501044
|
hasActiveLocalJsxUI: isShowingLocalJSXCommand,
|
|
@@ -501385,7 +501385,7 @@ Note: ctrl + z now suspends localclawd, ctrl + _ undoes input.
|
|
|
501385
501385
|
const transcriptMessagesElement = /* @__PURE__ */ jsx_dev_runtime476.jsxDEV(Messages3, {
|
|
501386
501386
|
messages: transcriptMessages,
|
|
501387
501387
|
tools,
|
|
501388
|
-
commands
|
|
501388
|
+
commands,
|
|
501389
501389
|
verbose: true,
|
|
501390
501390
|
toolJSX: null,
|
|
501391
501391
|
toolUseConfirmQueue: [],
|
|
@@ -501566,7 +501566,7 @@ Note: ctrl + z now suspends localclawd, ctrl + _ undoes input.
|
|
|
501566
501566
|
/* @__PURE__ */ jsx_dev_runtime476.jsxDEV(Messages3, {
|
|
501567
501567
|
messages: displayedMessages,
|
|
501568
501568
|
tools,
|
|
501569
|
-
commands
|
|
501569
|
+
commands,
|
|
501570
501570
|
verbose,
|
|
501571
501571
|
toolJSX,
|
|
501572
501572
|
toolUseConfirmQueue,
|
|
@@ -501963,7 +501963,7 @@ Note: ctrl + z now suspends localclawd, ctrl + _ undoes input.
|
|
|
501963
501963
|
toolPermissionContext,
|
|
501964
501964
|
setToolPermissionContext,
|
|
501965
501965
|
apiKeyStatus,
|
|
501966
|
-
commands
|
|
501966
|
+
commands,
|
|
501967
501967
|
agents: agentDefinitions2.activeAgents,
|
|
501968
501968
|
isLoading,
|
|
501969
501969
|
onExit: handleExit,
|
|
@@ -503045,7 +503045,7 @@ function TrustDialog({ onDone }) {
|
|
|
503045
503045
|
]
|
|
503046
503046
|
}, undefined, true, undefined, this),
|
|
503047
503047
|
/* @__PURE__ */ jsx_dev_runtime482.jsxDEV(ThemedText, {
|
|
503048
|
-
children: "
|
|
503048
|
+
children: "localclawd'll be able to read, edit, and execute files here."
|
|
503049
503049
|
}, undefined, false, undefined, this),
|
|
503050
503050
|
/* @__PURE__ */ jsx_dev_runtime482.jsxDEV(ThemedBox_default, {
|
|
503051
503051
|
flexDirection: "column",
|
|
@@ -503432,7 +503432,7 @@ async function renderAndRun(root3, element) {
|
|
|
503432
503432
|
await root3.waitUntilExit();
|
|
503433
503433
|
await gracefulShutdown(0);
|
|
503434
503434
|
}
|
|
503435
|
-
async function showSetupScreens(root3, permissionMode, allowDangerouslySkipPermissions,
|
|
503435
|
+
async function showSetupScreens(root3, permissionMode, allowDangerouslySkipPermissions, commands, claudeInChrome, devChannels) {
|
|
503436
503436
|
if (isEnvTruthy(false) || process.env.IS_DEMO) {
|
|
503437
503437
|
return false;
|
|
503438
503438
|
}
|
|
@@ -503445,7 +503445,7 @@ async function showSetupScreens(root3, permissionMode, allowDangerouslySkipPermi
|
|
|
503445
503445
|
await showDialog(root3, (done) => /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(AppStateProvider, {
|
|
503446
503446
|
onChangeAppState,
|
|
503447
503447
|
children: /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(TrustDialog2, {
|
|
503448
|
-
commands
|
|
503448
|
+
commands,
|
|
503449
503449
|
onDone: done
|
|
503450
503450
|
}, undefined, false, undefined, this)
|
|
503451
503451
|
}, undefined, false, undefined, this));
|
|
@@ -504541,7 +504541,7 @@ function parsePrIdentifier(value) {
|
|
|
504541
504541
|
return null;
|
|
504542
504542
|
}
|
|
504543
504543
|
function ResumeConversation({
|
|
504544
|
-
commands
|
|
504544
|
+
commands,
|
|
504545
504545
|
worktreePaths,
|
|
504546
504546
|
initialTools,
|
|
504547
504547
|
mcpClients,
|
|
@@ -504725,7 +504725,7 @@ function ResumeConversation({
|
|
|
504725
504725
|
if (resumeData) {
|
|
504726
504726
|
return /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(REPL, {
|
|
504727
504727
|
debug: debug3,
|
|
504728
|
-
commands
|
|
504728
|
+
commands,
|
|
504729
504729
|
initialTools,
|
|
504730
504730
|
initialMessages: resumeData.messages,
|
|
504731
504731
|
initialFileHistorySnapshots: resumeData.fileHistorySnapshots,
|
|
@@ -507882,7 +507882,7 @@ function appendToLog(path17, message) {
|
|
|
507882
507882
|
cwd: getFsImplementation().cwd(),
|
|
507883
507883
|
userType: process.env.USER_TYPE,
|
|
507884
507884
|
sessionId: getSessionId(),
|
|
507885
|
-
version: "1.1.
|
|
507885
|
+
version: "1.1.18"
|
|
507886
507886
|
};
|
|
507887
507887
|
getLogWriter(path17).write(messageWithTimestamp);
|
|
507888
507888
|
}
|
|
@@ -510695,7 +510695,7 @@ async function fetchSystemPromptParts({
|
|
|
510695
510695
|
}
|
|
510696
510696
|
async function buildSideQuestionFallbackParams({
|
|
510697
510697
|
tools,
|
|
510698
|
-
commands
|
|
510698
|
+
commands,
|
|
510699
510699
|
mcpClients,
|
|
510700
510700
|
messages,
|
|
510701
510701
|
readFileState,
|
|
@@ -510723,7 +510723,7 @@ async function buildSideQuestionFallbackParams({
|
|
|
510723
510723
|
const forkContextMessages = last2?.type === "assistant" && last2.message.stop_reason === null ? messages.slice(0, -1) : messages;
|
|
510724
510724
|
const toolUseContext = {
|
|
510725
510725
|
options: {
|
|
510726
|
-
commands
|
|
510726
|
+
commands,
|
|
510727
510727
|
debug: false,
|
|
510728
510728
|
mainLoopModel,
|
|
510729
510729
|
tools,
|
|
@@ -510786,7 +510786,7 @@ class QueryEngine {
|
|
|
510786
510786
|
async* submitMessage(prompt, options) {
|
|
510787
510787
|
const {
|
|
510788
510788
|
cwd: cwd2,
|
|
510789
|
-
commands
|
|
510789
|
+
commands,
|
|
510790
510790
|
tools,
|
|
510791
510791
|
mcpClients,
|
|
510792
510792
|
verbose = false,
|
|
@@ -510862,7 +510862,7 @@ class QueryEngine {
|
|
|
510862
510862
|
onChangeAPIKey: () => {},
|
|
510863
510863
|
handleElicitation: this.config.handleElicitation,
|
|
510864
510864
|
options: {
|
|
510865
|
-
commands
|
|
510865
|
+
commands,
|
|
510866
510866
|
debug: false,
|
|
510867
510867
|
tools,
|
|
510868
510868
|
verbose,
|
|
@@ -510961,7 +510961,7 @@ class QueryEngine {
|
|
|
510961
510961
|
onChangeAPIKey: () => {},
|
|
510962
510962
|
handleElicitation: this.config.handleElicitation,
|
|
510963
510963
|
options: {
|
|
510964
|
-
commands
|
|
510964
|
+
commands,
|
|
510965
510965
|
debug: false,
|
|
510966
510966
|
tools,
|
|
510967
510967
|
verbose,
|
|
@@ -511002,7 +511002,7 @@ class QueryEngine {
|
|
|
511002
511002
|
mcpClients,
|
|
511003
511003
|
model: mainLoopModel,
|
|
511004
511004
|
permissionMode: initialAppState.toolPermissionContext.mode,
|
|
511005
|
-
commands
|
|
511005
|
+
commands,
|
|
511006
511006
|
agents: agents2,
|
|
511007
511007
|
skills: skills2,
|
|
511008
511008
|
plugins: enabledPlugins,
|
|
@@ -511418,7 +511418,7 @@ class QueryEngine {
|
|
|
511418
511418
|
}
|
|
511419
511419
|
}
|
|
511420
511420
|
async function* ask({
|
|
511421
|
-
commands
|
|
511421
|
+
commands,
|
|
511422
511422
|
prompt,
|
|
511423
511423
|
promptUuid,
|
|
511424
511424
|
isMeta,
|
|
@@ -511452,7 +511452,7 @@ async function* ask({
|
|
|
511452
511452
|
const engine = new QueryEngine({
|
|
511453
511453
|
cwd: cwd2,
|
|
511454
511454
|
tools,
|
|
511455
|
-
commands
|
|
511455
|
+
commands,
|
|
511456
511456
|
mcpClients,
|
|
511457
511457
|
agents: agents2,
|
|
511458
511458
|
canUseTool,
|
|
@@ -511882,8 +511882,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
511882
511882
|
}
|
|
511883
511883
|
async function checkEnvLessBridgeMinVersion() {
|
|
511884
511884
|
const cfg = await getEnvLessBridgeConfig();
|
|
511885
|
-
if (cfg.min_version && lt("1.1.
|
|
511886
|
-
return `Your version of localclawd (${"1.1.
|
|
511885
|
+
if (cfg.min_version && lt("1.1.18", cfg.min_version)) {
|
|
511886
|
+
return `Your version of localclawd (${"1.1.18"}) is too old for Remote Control.
|
|
511887
511887
|
Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
|
|
511888
511888
|
}
|
|
511889
511889
|
return null;
|
|
@@ -512355,7 +512355,7 @@ async function initBridgeCore(params) {
|
|
|
512355
512355
|
const rawApi = createBridgeApiClient({
|
|
512356
512356
|
baseUrl,
|
|
512357
512357
|
getAccessToken,
|
|
512358
|
-
runnerVersion: "1.1.
|
|
512358
|
+
runnerVersion: "1.1.18",
|
|
512359
512359
|
onDebug: logForDebugging,
|
|
512360
512360
|
onAuth401,
|
|
512361
512361
|
getTrustedDeviceToken
|
|
@@ -514249,7 +514249,7 @@ function joinPromptValues(values3) {
|
|
|
514249
514249
|
function canBatchWith(head, next) {
|
|
514250
514250
|
return next !== undefined && next.mode === "prompt" && next.workload === head.workload && next.isMeta === head.isMeta;
|
|
514251
514251
|
}
|
|
514252
|
-
async function runHeadless(inputPrompt, getAppState, setAppState,
|
|
514252
|
+
async function runHeadless(inputPrompt, getAppState, setAppState, commands, tools, sdkMcpConfigs, agents2, options) {
|
|
514253
514253
|
if (process.env.USER_TYPE === "ant" && isEnvTruthy(process.env.CLAUDE_CODE_EXIT_AFTER_FIRST_RENDER)) {
|
|
514254
514254
|
process.stderr.write(`
|
|
514255
514255
|
Startup time: ${Math.round(process.uptime() * 1000)}ms
|
|
@@ -514469,7 +514469,7 @@ Error: sandbox required but unavailable: ${sandboxUnavailableReason}
|
|
|
514469
514469
|
let lastMessage;
|
|
514470
514470
|
const transformToStreamlined = null;
|
|
514471
514471
|
headlessProfilerCheckpoint("before_runHeadlessStreaming");
|
|
514472
|
-
for await (const message of runHeadlessStreaming(structuredIO, appState.mcp.clients, [...
|
|
514472
|
+
for await (const message of runHeadlessStreaming(structuredIO, appState.mcp.clients, [...commands, ...appState.mcp.commands], filteredTools, initialMessages, canUseTool, sdkMcpConfigs, getAppState, setAppState, agents2, options, turnInterruptionState)) {
|
|
514473
514473
|
if (transformToStreamlined) {
|
|
514474
514474
|
const transformed = transformToStreamlined(message);
|
|
514475
514475
|
if (transformed) {
|
|
@@ -514527,7 +514527,7 @@ Error: sandbox required but unavailable: ${sandboxUnavailableReason}
|
|
|
514527
514527
|
if (false) {}
|
|
514528
514528
|
gracefulShutdownSync(lastMessage?.type === "result" && lastMessage?.is_error ? 1 : 0);
|
|
514529
514529
|
}
|
|
514530
|
-
function runHeadlessStreaming(structuredIO, mcpClients,
|
|
514530
|
+
function runHeadlessStreaming(structuredIO, mcpClients, commands, tools, initialMessages, canUseTool, sdkMcpConfigs, getAppState, setAppState, agents2, options, turnInterruptionState) {
|
|
514531
514531
|
let running = false;
|
|
514532
514532
|
let runPhase;
|
|
514533
514533
|
let inputClosed = false;
|
|
@@ -514899,7 +514899,7 @@ function runHeadlessStreaming(structuredIO, mcpClients, commands2, tools, initia
|
|
|
514899
514899
|
}
|
|
514900
514900
|
}
|
|
514901
514901
|
const idleTimeout = createIdleTimeoutManager(() => !running);
|
|
514902
|
-
let currentCommands =
|
|
514902
|
+
let currentCommands = commands;
|
|
514903
514903
|
let currentAgents = agents2;
|
|
514904
514904
|
async function refreshPluginState() {
|
|
514905
514905
|
const { agentDefinitions: freshAgentDefs } = await refreshActivePlugins(setAppState);
|
|
@@ -515476,7 +515476,7 @@ ${m2.text}
|
|
|
515476
515476
|
};
|
|
515477
515477
|
}
|
|
515478
515478
|
}
|
|
515479
|
-
await handleInitializeRequest(message.request, message.request_id, initialized5, output,
|
|
515479
|
+
await handleInitializeRequest(message.request, message.request_id, initialized5, output, commands, modelInfos, structuredIO, !!options.enableAuthStatus, options, agents2, getAppState);
|
|
515480
515480
|
if (message.request.promptSuggestions) {
|
|
515481
515481
|
setAppState((prev) => {
|
|
515482
515482
|
if (prev.promptSuggestionEnabled)
|
|
@@ -516323,7 +516323,7 @@ function getCanUseToolFn(permissionPromptToolName, structuredIO, getMcpTools, on
|
|
|
516323
516323
|
return resolved(tool, input, toolUseContext, assistantMessage, toolUseId, forceDecision);
|
|
516324
516324
|
};
|
|
516325
516325
|
}
|
|
516326
|
-
async function handleInitializeRequest(request, requestId, initialized5, output,
|
|
516326
|
+
async function handleInitializeRequest(request, requestId, initialized5, output, commands, modelInfos, structuredIO, enableAuthStatus, options, agents2, getAppState) {
|
|
516327
516327
|
if (initialized5) {
|
|
516328
516328
|
output.enqueue({
|
|
516329
516329
|
type: "control_response",
|
|
@@ -516394,7 +516394,7 @@ async function handleInitializeRequest(request, requestId, initialized5, output,
|
|
|
516394
516394
|
setInitJsonSchema(request.jsonSchema);
|
|
516395
516395
|
}
|
|
516396
516396
|
const initResponse = {
|
|
516397
|
-
commands:
|
|
516397
|
+
commands: commands.filter((cmd) => cmd.userInvocable !== false).map((cmd) => ({
|
|
516398
516398
|
name: getCommandName(cmd),
|
|
516399
516399
|
description: formatDescriptionWithSource(cmd),
|
|
516400
516400
|
argumentHint: cmd.argumentHint || ""
|
|
@@ -518011,7 +518011,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
|
|
|
518011
518011
|
setCwd(cwd3);
|
|
518012
518012
|
const server = new Server({
|
|
518013
518013
|
name: "claude/tengu",
|
|
518014
|
-
version: "1.1.
|
|
518014
|
+
version: "1.1.18"
|
|
518015
518015
|
}, {
|
|
518016
518016
|
capabilities: {
|
|
518017
518017
|
tools: {}
|
|
@@ -519092,7 +519092,7 @@ function WelcomeV2() {
|
|
|
519092
519092
|
dimColor: true,
|
|
519093
519093
|
children: [
|
|
519094
519094
|
"v",
|
|
519095
|
-
"1.1.
|
|
519095
|
+
"1.1.18"
|
|
519096
519096
|
]
|
|
519097
519097
|
}, undefined, true, undefined, this)
|
|
519098
519098
|
]
|
|
@@ -519661,7 +519661,7 @@ __export(exports_update, {
|
|
|
519661
519661
|
});
|
|
519662
519662
|
async function update() {
|
|
519663
519663
|
logEvent("tengu_update_check", {});
|
|
519664
|
-
writeToStdout(`Current version: ${"1.1.
|
|
519664
|
+
writeToStdout(`Current version: ${"1.1.18"}
|
|
519665
519665
|
`);
|
|
519666
519666
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
519667
519667
|
writeToStdout(`Checking for updates to ${channel} version...
|
|
@@ -519736,8 +519736,8 @@ async function update() {
|
|
|
519736
519736
|
writeToStdout(`localclawd is managed by Homebrew.
|
|
519737
519737
|
`);
|
|
519738
519738
|
const latest = await getLatestVersion(channel);
|
|
519739
|
-
if (latest && !gte("1.1.
|
|
519740
|
-
writeToStdout(`Update available: ${"1.1.
|
|
519739
|
+
if (latest && !gte("1.1.18", latest)) {
|
|
519740
|
+
writeToStdout(`Update available: ${"1.1.18"} → ${latest}
|
|
519741
519741
|
`);
|
|
519742
519742
|
writeToStdout(`
|
|
519743
519743
|
`);
|
|
@@ -519753,8 +519753,8 @@ async function update() {
|
|
|
519753
519753
|
writeToStdout(`localclawd is managed by winget.
|
|
519754
519754
|
`);
|
|
519755
519755
|
const latest = await getLatestVersion(channel);
|
|
519756
|
-
if (latest && !gte("1.1.
|
|
519757
|
-
writeToStdout(`Update available: ${"1.1.
|
|
519756
|
+
if (latest && !gte("1.1.18", latest)) {
|
|
519757
|
+
writeToStdout(`Update available: ${"1.1.18"} → ${latest}
|
|
519758
519758
|
`);
|
|
519759
519759
|
writeToStdout(`
|
|
519760
519760
|
`);
|
|
@@ -519768,8 +519768,8 @@ async function update() {
|
|
|
519768
519768
|
writeToStdout(`localclawd is managed by apk.
|
|
519769
519769
|
`);
|
|
519770
519770
|
const latest = await getLatestVersion(channel);
|
|
519771
|
-
if (latest && !gte("1.1.
|
|
519772
|
-
writeToStdout(`Update available: ${"1.1.
|
|
519771
|
+
if (latest && !gte("1.1.18", latest)) {
|
|
519772
|
+
writeToStdout(`Update available: ${"1.1.18"} → ${latest}
|
|
519773
519773
|
`);
|
|
519774
519774
|
writeToStdout(`
|
|
519775
519775
|
`);
|
|
@@ -519834,11 +519834,11 @@ async function update() {
|
|
|
519834
519834
|
`);
|
|
519835
519835
|
await gracefulShutdown(1);
|
|
519836
519836
|
}
|
|
519837
|
-
if (result.latestVersion === "1.1.
|
|
519838
|
-
writeToStdout(source_default.green(`localclawd is up to date (${"1.1.
|
|
519837
|
+
if (result.latestVersion === "1.1.18") {
|
|
519838
|
+
writeToStdout(source_default.green(`localclawd is up to date (${"1.1.18"})`) + `
|
|
519839
519839
|
`);
|
|
519840
519840
|
} else {
|
|
519841
|
-
writeToStdout(source_default.green(`Successfully updated from ${"1.1.
|
|
519841
|
+
writeToStdout(source_default.green(`Successfully updated from ${"1.1.18"} to version ${result.latestVersion}`) + `
|
|
519842
519842
|
`);
|
|
519843
519843
|
await regenerateCompletionCache();
|
|
519844
519844
|
}
|
|
@@ -519898,12 +519898,12 @@ async function update() {
|
|
|
519898
519898
|
`);
|
|
519899
519899
|
await gracefulShutdown(1);
|
|
519900
519900
|
}
|
|
519901
|
-
if (latestVersion === "1.1.
|
|
519902
|
-
writeToStdout(source_default.green(`localclawd is up to date (${"1.1.
|
|
519901
|
+
if (latestVersion === "1.1.18") {
|
|
519902
|
+
writeToStdout(source_default.green(`localclawd is up to date (${"1.1.18"})`) + `
|
|
519903
519903
|
`);
|
|
519904
519904
|
await gracefulShutdown(0);
|
|
519905
519905
|
}
|
|
519906
|
-
writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.
|
|
519906
|
+
writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.18"})
|
|
519907
519907
|
`);
|
|
519908
519908
|
writeToStdout(`Installing update...
|
|
519909
519909
|
`);
|
|
@@ -519948,7 +519948,7 @@ async function update() {
|
|
|
519948
519948
|
logForDebugging(`update: Installation status: ${status2}`);
|
|
519949
519949
|
switch (status2) {
|
|
519950
519950
|
case "success":
|
|
519951
|
-
writeToStdout(source_default.green(`Successfully updated from ${"1.1.
|
|
519951
|
+
writeToStdout(source_default.green(`Successfully updated from ${"1.1.18"} to version ${latestVersion}`) + `
|
|
519952
519952
|
`);
|
|
519953
519953
|
await regenerateCompletionCache();
|
|
519954
519954
|
break;
|
|
@@ -520339,7 +520339,7 @@ async function run() {
|
|
|
520339
520339
|
await init();
|
|
520340
520340
|
profileCheckpoint("preAction_after_init");
|
|
520341
520341
|
if (!isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_TERMINAL_TITLE)) {
|
|
520342
|
-
process.title = "
|
|
520342
|
+
process.title = "localclawd";
|
|
520343
520343
|
}
|
|
520344
520344
|
const {
|
|
520345
520345
|
initSinks: initSinks2
|
|
@@ -520359,7 +520359,7 @@ async function run() {
|
|
|
520359
520359
|
if (false) {}
|
|
520360
520360
|
profileCheckpoint("preAction_after_settings_sync");
|
|
520361
520361
|
});
|
|
520362
|
-
program2.name("
|
|
520362
|
+
program2.name("localclawd").description(`localclawd - starts an interactive session by default, use -p/--print for non-interactive output`).argument("[prompt]", "Your prompt", String).helpOption("-h, --help", "Display help for command").option("-d, --debug [filter]", 'Enable debug mode with optional category filtering (e.g., "api,hooks" or "!1p,!file")', (_value) => {
|
|
520363
520363
|
return true;
|
|
520364
520364
|
}).addOption(new Option("--debug-to-stderr", "Enable debug mode (to stderr)").argParser(Boolean).hideHelp()).option("--debug-file <path>", "Write debug logs to a specific file path (implicitly enables debug mode)", () => true).option("--verbose", "Override verbose mode setting from config", () => true).option("-p, --print", "Print response and exit (useful for pipes). Note: The workspace trust dialog is skipped when Claude is run with the -p mode. Only use this flag in directories you trust.", () => true).option("--bare", "Minimal mode: skip hooks, LSP, plugin sync, attribution, auto-memory, background prefetches, keychain reads, and CLAUDE.md auto-discovery. Sets CLAUDE_CODE_SIMPLE=1. Anthropic auth is strictly ANTHROPIC_API_KEY or apiKeyHelper via --settings (OAuth and keychain are never read). 3P providers (Bedrock/Vertex/Foundry) use their own credentials. Skills still resolve via /skill-name. Explicitly provide context via: --system-prompt[-file], --append-system-prompt[-file], --add-dir (CLAUDE.md dirs), --mcp-config, --settings, --agents, --plugin-dir.", () => true).addOption(new Option("--init", "Run Setup hooks with init trigger, then continue").hideHelp()).addOption(new Option("--init-only", "Run Setup and SessionStart:startup hooks, then exit").hideHelp()).addOption(new Option("--maintenance", "Run Setup hooks with maintenance trigger, then continue").hideHelp()).addOption(new Option("--output-format <format>", 'Output format (only works with --print): "text" (default), "json" (single result), or "stream-json" (realtime streaming)').choices(["text", "json", "stream-json"])).addOption(new Option("--json-schema <schema>", 'JSON Schema for structured output validation. Example: {"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}').argParser(String)).option("--include-hook-events", "Include all hook lifecycle events in the output stream (only works with --output-format=stream-json)", () => true).option("--include-partial-messages", "Include partial message chunks as they arrive (only works with --print and --output-format=stream-json)", () => true).addOption(new Option("--input-format <format>", 'Input format (only works with --print): "text" (default), or "stream-json" (realtime streaming input)').choices(["text", "stream-json"])).option("--mcp-debug", "[DEPRECATED. Use --debug instead] Enable MCP debug mode (shows MCP server errors)", () => true).option("--dangerously-skip-permissions", "Bypass all permission checks. Recommended only for sandboxes with no internet access.", () => true).option("--allow-dangerously-skip-permissions", "Enable bypassing all permission checks as an option, without it being enabled by default. Recommended only for sandboxes with no internet access.", () => true).addOption(new Option("--thinking <mode>", "Thinking mode: enabled (equivalent to adaptive), disabled").choices(["enabled", "adaptive", "disabled"]).hideHelp()).addOption(new Option("--max-thinking-tokens <tokens>", "[DEPRECATED. Use --thinking instead for newer models] Maximum number of thinking tokens (only works with --print)").argParser(Number).hideHelp()).addOption(new Option("--max-turns <turns>", "Maximum number of agentic turns in non-interactive mode. This will early exit the conversation after the specified number of turns. (only works with --print)").argParser(Number).hideHelp()).addOption(new Option("--max-budget-usd <amount>", "Maximum dollar amount to spend on API calls (only works with --print)").argParser((value) => {
|
|
520365
520365
|
const amount = Number(value);
|
|
@@ -520383,14 +520383,14 @@ async function run() {
|
|
|
520383
520383
|
throw new InvalidArgumentError(`It must be one of: ${allowed.join(", ")}`);
|
|
520384
520384
|
}
|
|
520385
520385
|
return value;
|
|
520386
|
-
})).option("--agent <agent>", `Agent for the current session. Overrides the 'agent' setting.`).option("--betas <betas...>", "Beta headers to include in API requests (API key users only)").option("--fallback-model <model>", "Enable automatic fallback to specified model when default model is overloaded (only works with --print)").addOption(new Option("--workload <tag>", "Workload tag for billing-header attribution (cc_workload). Process-scoped; set by SDK daemon callers that spawn subprocesses for cron work. (only works with --print)").hideHelp()).option("--settings <file-or-json>", "Path to a settings JSON file or a JSON string to load additional settings from").option("--add-dir <directories...>", "Additional directories to allow tool access to").option("--ide", "Automatically connect to IDE on startup if exactly one valid IDE is available", () => true).option("--strict-mcp-config", "Only use MCP servers from --mcp-config, ignoring all other MCP configurations", () => true).option("--session-id <uuid>", "Use a specific session ID for the conversation (must be a valid UUID)").option("-n, --name <name>", "Set a display name for this session (shown in /resume and terminal title)").option("--agents <json>", `JSON object defining custom agents (e.g. '{"reviewer": {"description": "Reviews code", "prompt": "You are a code reviewer"}}')`).option("--setting-sources <sources>", "Comma-separated list of setting sources to load (user, project, local).").option("--plugin-dir <path>", "Load plugins from a directory for this session only (repeatable: --plugin-dir A --plugin-dir B)", (val, prev) => [...prev, val], []).option("--disable-slash-commands", "Disable all skills", () => true).option("--chrome", "Enable
|
|
520386
|
+
})).option("--agent <agent>", `Agent for the current session. Overrides the 'agent' setting.`).option("--betas <betas...>", "Beta headers to include in API requests (API key users only)").option("--fallback-model <model>", "Enable automatic fallback to specified model when default model is overloaded (only works with --print)").addOption(new Option("--workload <tag>", "Workload tag for billing-header attribution (cc_workload). Process-scoped; set by SDK daemon callers that spawn subprocesses for cron work. (only works with --print)").hideHelp()).option("--settings <file-or-json>", "Path to a settings JSON file or a JSON string to load additional settings from").option("--add-dir <directories...>", "Additional directories to allow tool access to").option("--ide", "Automatically connect to IDE on startup if exactly one valid IDE is available", () => true).option("--strict-mcp-config", "Only use MCP servers from --mcp-config, ignoring all other MCP configurations", () => true).option("--session-id <uuid>", "Use a specific session ID for the conversation (must be a valid UUID)").option("-n, --name <name>", "Set a display name for this session (shown in /resume and terminal title)").option("--agents <json>", `JSON object defining custom agents (e.g. '{"reviewer": {"description": "Reviews code", "prompt": "You are a code reviewer"}}')`).option("--setting-sources <sources>", "Comma-separated list of setting sources to load (user, project, local).").option("--plugin-dir <path>", "Load plugins from a directory for this session only (repeatable: --plugin-dir A --plugin-dir B)", (val, prev) => [...prev, val], []).option("--disable-slash-commands", "Disable all skills", () => true).option("--chrome", "Enable localclawd in Chrome integration").option("--no-chrome", "Disable localclawd in Chrome integration").option("--file <specs...>", "File resources to download at startup. Format: file_id:relative_path (e.g., --file file_abc:doc.txt file_def:img.png)").action(async (prompt, options) => {
|
|
520387
520387
|
profileCheckpoint("action_handler_start");
|
|
520388
520388
|
if (options.bare) {
|
|
520389
520389
|
process.env.CLAUDE_CODE_SIMPLE = "1";
|
|
520390
520390
|
}
|
|
520391
520391
|
if (prompt === "code") {
|
|
520392
520392
|
logEvent("tengu_code_prompt_ignored", {});
|
|
520393
|
-
console.warn(source_default.yellow("Tip: You can launch
|
|
520393
|
+
console.warn(source_default.yellow("Tip: You can launch localclawd with just `localclawd`"));
|
|
520394
520394
|
prompt = undefined;
|
|
520395
520395
|
}
|
|
520396
520396
|
if (prompt && typeof prompt === "string" && !/\s/.test(prompt) && prompt.length > 0) {
|
|
@@ -520911,6 +520911,8 @@ ${hint}` : hint;
|
|
|
520911
520911
|
}
|
|
520912
520912
|
const explicitModel = options.model || process.env.ANTHROPIC_MODEL;
|
|
520913
520913
|
if (false) {}
|
|
520914
|
+
let commands;
|
|
520915
|
+
let agentDefinitionsResult;
|
|
520914
520916
|
try {
|
|
520915
520917
|
const userSpecifiedModel = options.model === "default" ? getDefaultMainLoopModel() : options.model;
|
|
520916
520918
|
const userSpecifiedFallbackModel2 = fallbackModel === "default" ? getDefaultMainLoopModel() : fallbackModel;
|
|
@@ -520919,7 +520921,7 @@ ${hint}` : hint;
|
|
|
520919
520921
|
startupLoadingIndicator?.update("Loading commands and agents");
|
|
520920
520922
|
const commandsStart = Date.now();
|
|
520921
520923
|
logForDebugging("[STARTUP] Awaiting commands and agents");
|
|
520922
|
-
|
|
520924
|
+
[commands, agentDefinitionsResult] = await Promise.all([commandsPromise ?? getCommands(currentCwd3), agentDefsPromise ?? getAgentDefinitionsWithOverrides(currentCwd3)]);
|
|
520923
520925
|
logForDebugging(`[STARTUP] Commands and agents loaded in ${Date.now() - commandsStart}ms`);
|
|
520924
520926
|
profileCheckpoint("action_commands_loaded");
|
|
520925
520927
|
let cliAgents2 = [];
|
|
@@ -521075,7 +521077,7 @@ If using VSCode, open a new terminal with Ctrl+\` and try again.
|
|
|
521075
521077
|
const setupScreensStart = Date.now();
|
|
521076
521078
|
let onboardingShown;
|
|
521077
521079
|
try {
|
|
521078
|
-
onboardingShown = await showSetupScreens(root3, permissionMode, allowDangerouslySkipPermissions,
|
|
521080
|
+
onboardingShown = await showSetupScreens(root3, permissionMode, allowDangerouslySkipPermissions, commands, enableClaudeInChrome, devChannels);
|
|
521079
521081
|
} catch (err2) {
|
|
521080
521082
|
const msg = err2 instanceof Error ? err2.message : String(err2);
|
|
521081
521083
|
process.stderr.write(`
|
|
@@ -521232,7 +521234,7 @@ Run with --debug for more details.
|
|
|
521232
521234
|
}
|
|
521233
521235
|
}
|
|
521234
521236
|
logForDiagnosticsNoPII("info", "started", {
|
|
521235
|
-
version: "1.1.
|
|
521237
|
+
version: "1.1.18",
|
|
521236
521238
|
is_native_binary: isInBundledMode()
|
|
521237
521239
|
});
|
|
521238
521240
|
registerCleanup(async () => {
|
|
@@ -522016,7 +522018,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
522016
522018
|
pendingHookMessages
|
|
522017
522019
|
}, renderAndRun);
|
|
522018
522020
|
}
|
|
522019
|
-
}).version("1.1.
|
|
522021
|
+
}).version("1.1.18 (localclawd)", "-v, --version", "Output the version number");
|
|
522020
522022
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
522021
522023
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
522022
522024
|
if (canUserConfigureAdvisor()) {
|
|
@@ -522052,7 +522054,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
522052
522054
|
return program2;
|
|
522053
522055
|
}
|
|
522054
522056
|
const mcp2 = program2.command("mcp").description("Configure and manage MCP servers").configureHelp(createSortedHelpConfig()).enablePositionalOptions();
|
|
522055
|
-
mcp2.command("serve").description(`Start the
|
|
522057
|
+
mcp2.command("serve").description(`Start the localclawd MCP server`).option("-d, --debug", "Enable debug mode", () => true).option("--verbose", "Override verbose mode setting from config", () => true).action(async ({
|
|
522056
522058
|
debug: debug4,
|
|
522057
522059
|
verbose
|
|
522058
522060
|
}) => {
|
|
@@ -522137,7 +522139,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
522137
522139
|
await authLogout2();
|
|
522138
522140
|
});
|
|
522139
522141
|
const coworkOption = () => new Option("--cowork", "Use cowork_plugins directory").hideHelp();
|
|
522140
|
-
const pluginCmd = program2.command("plugin").alias("plugins").description("Manage
|
|
522142
|
+
const pluginCmd = program2.command("plugin").alias("plugins").description("Manage localclawd plugins").configureHelp(createSortedHelpConfig());
|
|
522141
522143
|
pluginCmd.command("validate <path>").description("Validate a plugin or marketplace manifest").addOption(coworkOption()).action(async (manifestPath, options) => {
|
|
522142
522144
|
const {
|
|
522143
522145
|
pluginValidateHandler: pluginValidateHandler2
|
|
@@ -522150,7 +522152,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
522150
522152
|
} = await Promise.resolve().then(() => (init_plugins(), exports_plugins));
|
|
522151
522153
|
await pluginListHandler2(options);
|
|
522152
522154
|
});
|
|
522153
|
-
const marketplaceCmd = pluginCmd.command("marketplace").description("Manage
|
|
522155
|
+
const marketplaceCmd = pluginCmd.command("marketplace").description("Manage localclawd marketplaces").configureHelp(createSortedHelpConfig());
|
|
522154
522156
|
marketplaceCmd.command("add <source>").description("Add a marketplace from a URL, path, or GitHub repo").addOption(coworkOption()).option("--sparse <paths...>", "Limit checkout to specific directories via git sparse-checkout (for monorepos). Example: --sparse .claude-plugin plugins").option("--scope <scope>", "Where to declare the marketplace: user (default), project, or local").action(async (source, options) => {
|
|
522155
522157
|
const {
|
|
522156
522158
|
marketplaceAddHandler: marketplaceAddHandler2
|
|
@@ -522224,7 +522226,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
522224
522226
|
if (false) {}
|
|
522225
522227
|
if (false) {}
|
|
522226
522228
|
if (false) {}
|
|
522227
|
-
program2.command("doctor").description("Check the health of your
|
|
522229
|
+
program2.command("doctor").description("Check the health of your localclawd auto-updater. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async () => {
|
|
522228
522230
|
const [{
|
|
522229
522231
|
doctorHandler: doctorHandler2
|
|
522230
522232
|
}, {
|
|
@@ -522241,7 +522243,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
522241
522243
|
});
|
|
522242
522244
|
if (false) {}
|
|
522243
522245
|
if (false) {}
|
|
522244
|
-
program2.command("install [target]").description("Install
|
|
522246
|
+
program2.command("install [target]").description("Install localclawd native build. Use [target] to specify version (stable, latest, or specific version)").option("--force", "Force installation even if already installed").action(async (target, options) => {
|
|
522245
522247
|
const {
|
|
522246
522248
|
installHandler: installHandler2
|
|
522247
522249
|
} = await Promise.resolve().then(() => (init_util(), exports_util));
|
|
@@ -522524,7 +522526,7 @@ if (false) {}
|
|
|
522524
522526
|
async function main2() {
|
|
522525
522527
|
const args = process.argv.slice(2);
|
|
522526
522528
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
522527
|
-
console.log(`${"1.1.
|
|
522529
|
+
console.log(`${"1.1.18"} (localclawd)`);
|
|
522528
522530
|
return;
|
|
522529
522531
|
}
|
|
522530
522532
|
const {
|
|
@@ -522621,4 +522623,4 @@ localclawd crashed: ${msg}
|
|
|
522621
522623
|
process.exit(1);
|
|
522622
522624
|
});
|
|
522623
522625
|
|
|
522624
|
-
//# debugId=
|
|
522626
|
+
//# debugId=7EEE171F3F8E73F364756E2164756E21
|