@swifty.js/swifty 0.0.28 → 0.0.29
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 +39 -37
- package/dist/{agent-3NON2EXE.js → agent-YR6YK26C.js} +1 -1
- package/dist/anthropic-5GRR5JCT.js +4 -0
- package/dist/chunk-LIMEBKCY.js +408 -0
- package/dist/{chunk-LZBOXJX2.js → chunk-POHIQUFP.js} +25 -25
- package/dist/{chunk-JGSIQXEN.js → chunk-QFSCPD63.js} +1 -1
- package/dist/chunk-TMEX7RFA.js +4 -0
- package/dist/glob.wasm +0 -0
- package/dist/lib/{agent-XYO2MXXK.js → agent-5WEKVRTD.js} +3 -3
- package/dist/lib/{anthropic-TGJGAP5R.js → anthropic-KWO3KLNV.js} +3 -3
- package/dist/lib/{chunk-P4F46PEF.js → chunk-3FBS5NB7.js} +30 -6
- package/dist/lib/{chunk-DV6RV5WU.js → chunk-GCY44T7S.js} +7 -6
- package/dist/lib/{chunk-ALJAVRRX.js → chunk-KZSBR4FO.js} +22 -9
- package/dist/lib/{chunk-IB5IQK2S.js → chunk-PIL7M52F.js} +2 -11
- package/dist/lib/{chunk-FBSPZQGC.js → chunk-Z4CYHTII.js} +69 -69
- package/dist/lib/glob.wasm +0 -0
- package/dist/lib/index.d.ts +84 -11
- package/dist/lib/index.js +273 -143
- package/dist/lib/{openai-5UCIIDPO.js → openai-PBF7EWNJ.js} +2 -2
- package/dist/main.js +163 -163
- package/dist/{openai-YLS2LUAI.js → openai-QQ2K7GPF.js} +14 -14
- package/dist/{server-GX72MJQF.js → server-G23HCFLI.js} +16 -16
- package/package.json +2 -2
- package/dist/anthropic-BJ5GN2VT.js +0 -4
- package/dist/chunk-R63ASIIW.js +0 -407
- package/dist/chunk-WX3B64R4.js +0 -4
package/dist/lib/index.js
CHANGED
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
toDisplayPreview,
|
|
39
39
|
toolResultsToRecords,
|
|
40
40
|
toolUsesToRecords
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-GCY44T7S.js";
|
|
42
42
|
import {
|
|
43
43
|
AnthropicClient,
|
|
44
44
|
CHARS_PER_TOKEN,
|
|
@@ -55,25 +55,25 @@ import {
|
|
|
55
55
|
markToolsForCache,
|
|
56
56
|
measureSchemaChars,
|
|
57
57
|
needsToolSearchBeta
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-KZSBR4FO.js";
|
|
59
59
|
import {
|
|
60
60
|
SKIP_DIRS,
|
|
61
61
|
isToolResultContentBlock,
|
|
62
62
|
normalizeToolResultContentBlock
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-PIL7M52F.js";
|
|
64
64
|
import {
|
|
65
65
|
OpenAIClient,
|
|
66
66
|
OpenAICompatClient,
|
|
67
67
|
buildChatCompletionMessages,
|
|
68
68
|
buildOpenAIInput
|
|
69
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-3FBS5NB7.js";
|
|
70
70
|
import {
|
|
71
71
|
AuthenticationError,
|
|
72
72
|
ConfigError,
|
|
73
73
|
ContextTooLongError,
|
|
74
74
|
DEFAULT_CONTEXT_WINDOW,
|
|
75
75
|
DEFAULT_MAX_OUTPUT_TOKENS,
|
|
76
|
-
|
|
76
|
+
DEFAULT_THINKING_LEVEL,
|
|
77
77
|
HookConfigSchema,
|
|
78
78
|
INTERRUPTED_TOOL_RESULT,
|
|
79
79
|
LLMError,
|
|
@@ -81,15 +81,22 @@ import {
|
|
|
81
81
|
ProviderConfigSchema,
|
|
82
82
|
REJECTED_TOOL_RESULT,
|
|
83
83
|
RateLimitError,
|
|
84
|
+
THINKING_BUDGETS,
|
|
85
|
+
THINKING_LEVELS,
|
|
86
|
+
defaultThinkingLevelFor,
|
|
84
87
|
ensureToolPairing,
|
|
85
88
|
forkEnabled,
|
|
86
89
|
getContextWindow,
|
|
87
90
|
getMaxOutputTokens,
|
|
91
|
+
getThinkingLevel,
|
|
92
|
+
globalConfigPath,
|
|
93
|
+
isValidThinkingLevel,
|
|
88
94
|
loadConfig,
|
|
89
|
-
mergeConfig,
|
|
90
95
|
resolveAPIKey,
|
|
96
|
+
thinkingBudgetForLevel,
|
|
97
|
+
toReasoningEffort,
|
|
91
98
|
withProviderDefaults
|
|
92
|
-
} from "./chunk-
|
|
99
|
+
} from "./chunk-Z4CYHTII.js";
|
|
93
100
|
import {
|
|
94
101
|
PathSandbox,
|
|
95
102
|
PermissionChecker,
|
|
@@ -1400,6 +1407,37 @@ Focus on: ${ctx.args}` : "")
|
|
|
1400
1407
|
description: "Toggle OS sandbox mode for command execution",
|
|
1401
1408
|
handler: () => "sandbox"
|
|
1402
1409
|
});
|
|
1410
|
+
registry.register({
|
|
1411
|
+
name: "thinking",
|
|
1412
|
+
aliases: ["think"],
|
|
1413
|
+
type: "local",
|
|
1414
|
+
description: "Show or set the thinking level (off, minimal, low, medium, high, xhigh, max)",
|
|
1415
|
+
handler: (ctx) => {
|
|
1416
|
+
const arg = ctx.args.trim().toLowerCase();
|
|
1417
|
+
if (!arg) {
|
|
1418
|
+
const current = ctx.thinkingLevel ? ctx.thinkingLevel() : "unknown";
|
|
1419
|
+
return `Thinking level: ${current}
|
|
1420
|
+
Usage: /thinking <${THINKING_LEVELS.join(" | ")}>`;
|
|
1421
|
+
}
|
|
1422
|
+
if (!isValidThinkingLevel(arg)) {
|
|
1423
|
+
return `Unknown thinking level "${arg}". Valid levels: ${THINKING_LEVELS.join(", ")}`;
|
|
1424
|
+
}
|
|
1425
|
+
if (!ctx.setThinkingLevel) {
|
|
1426
|
+
return "Thinking level control is not available in this context.";
|
|
1427
|
+
}
|
|
1428
|
+
ctx.setThinkingLevel(arg);
|
|
1429
|
+
if (ctx.persistThinkingLevel) {
|
|
1430
|
+
try {
|
|
1431
|
+
ctx.persistThinkingLevel(arg);
|
|
1432
|
+
return `Thinking level set to ${arg} and saved.`;
|
|
1433
|
+
} catch (err) {
|
|
1434
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
1435
|
+
return `Thinking level set to ${arg} for this session, but saving failed: ${message}`;
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
return `Thinking level set to ${arg}.`;
|
|
1439
|
+
}
|
|
1440
|
+
});
|
|
1403
1441
|
return registry;
|
|
1404
1442
|
}
|
|
1405
1443
|
|
|
@@ -2591,15 +2629,15 @@ async function saveClipboardImage(workDir, sessionId) {
|
|
|
2591
2629
|
async function createClient(config, systemPrompt) {
|
|
2592
2630
|
switch (config.protocol) {
|
|
2593
2631
|
case "anthropic": {
|
|
2594
|
-
const { AnthropicClient: AnthropicClient2 } = await import("./anthropic-
|
|
2632
|
+
const { AnthropicClient: AnthropicClient2 } = await import("./anthropic-KWO3KLNV.js");
|
|
2595
2633
|
return new AnthropicClient2(config, systemPrompt);
|
|
2596
2634
|
}
|
|
2597
2635
|
case "openai": {
|
|
2598
|
-
const { OpenAIClient: OpenAIClient2 } = await import("./openai-
|
|
2636
|
+
const { OpenAIClient: OpenAIClient2 } = await import("./openai-PBF7EWNJ.js");
|
|
2599
2637
|
return new OpenAIClient2(config, systemPrompt);
|
|
2600
2638
|
}
|
|
2601
2639
|
case "openai-compat": {
|
|
2602
|
-
const { OpenAICompatClient: OpenAICompatClient2 } = await import("./openai-
|
|
2640
|
+
const { OpenAICompatClient: OpenAICompatClient2 } = await import("./openai-PBF7EWNJ.js");
|
|
2603
2641
|
return new OpenAICompatClient2(config, systemPrompt);
|
|
2604
2642
|
}
|
|
2605
2643
|
default:
|
|
@@ -2609,9 +2647,9 @@ async function createClient(config, systemPrompt) {
|
|
|
2609
2647
|
|
|
2610
2648
|
// src/llm/model-resolver.ts
|
|
2611
2649
|
var MODEL_ALIASES = {
|
|
2612
|
-
haiku: "claude-haiku-4-
|
|
2613
|
-
sonnet: "claude-sonnet-4-6
|
|
2614
|
-
opus: "claude-opus-4-6
|
|
2650
|
+
haiku: "claude-haiku-4-6",
|
|
2651
|
+
sonnet: "claude-sonnet-4-6",
|
|
2652
|
+
opus: "claude-opus-4-6"
|
|
2615
2653
|
};
|
|
2616
2654
|
function resolveModelId(shortName) {
|
|
2617
2655
|
return MODEL_ALIASES[shortName] ?? shortName;
|
|
@@ -2648,7 +2686,7 @@ var PackageJsonSchema = z5.object({
|
|
|
2648
2686
|
});
|
|
2649
2687
|
function resolveVersion() {
|
|
2650
2688
|
if (true) {
|
|
2651
|
-
return "0.0.
|
|
2689
|
+
return "0.0.29";
|
|
2652
2690
|
}
|
|
2653
2691
|
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
2654
2692
|
for (const levels of ["..", "../.."]) {
|
|
@@ -3541,7 +3579,7 @@ function loadWasm() {
|
|
|
3541
3579
|
return wasm;
|
|
3542
3580
|
}
|
|
3543
3581
|
}
|
|
3544
|
-
const embedded = true ? "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" : "";
|
|
3582
|
+
const embedded = true ? "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" : "";
|
|
3545
3583
|
if (embedded.length > 0) {
|
|
3546
3584
|
wasm = instantiate(new Uint8Array(Buffer.from(embedded, "base64")));
|
|
3547
3585
|
return wasm;
|
|
@@ -3581,7 +3619,8 @@ var Glob = class {
|
|
|
3581
3619
|
}
|
|
3582
3620
|
match(text) {
|
|
3583
3621
|
const exports = this.ensureCompiled();
|
|
3584
|
-
|
|
3622
|
+
const dotFlag = this.dot ? 1 : 0;
|
|
3623
|
+
return withString(exports, text, (ptr) => exports.match(this.id, ptr, dotFlag)) !== 0;
|
|
3585
3624
|
}
|
|
3586
3625
|
scan(options) {
|
|
3587
3626
|
const exports = this.ensureCompiled();
|
|
@@ -3606,12 +3645,14 @@ var Glob = class {
|
|
|
3606
3645
|
}
|
|
3607
3646
|
const excludeDirs = new Set(options?.exclude ?? []);
|
|
3608
3647
|
const includeDot = options?.dot ?? this.dot;
|
|
3648
|
+
const dotFlag = includeDot ? 1 : 0;
|
|
3609
3649
|
const hasSlash = exports.hasSlash(this.id) !== 0;
|
|
3610
3650
|
let bangs = 0;
|
|
3611
3651
|
while (bangs < this.pattern.length && this.pattern.charCodeAt(bangs) === 33) {
|
|
3612
3652
|
bangs++;
|
|
3613
3653
|
}
|
|
3614
|
-
const
|
|
3654
|
+
const negated = bangs % 2 === 1;
|
|
3655
|
+
const canPrune = hasSlash && !negated;
|
|
3615
3656
|
const results = [];
|
|
3616
3657
|
const scanDir = (dirAbs, relPrefix) => {
|
|
3617
3658
|
if (results.length >= maxResults) {
|
|
@@ -3625,7 +3666,7 @@ var Glob = class {
|
|
|
3625
3666
|
}
|
|
3626
3667
|
const entries = [];
|
|
3627
3668
|
for (const name of names) {
|
|
3628
|
-
if (!includeDot &&
|
|
3669
|
+
if (!includeDot && negated && name.charAt(0) === ".") {
|
|
3629
3670
|
continue;
|
|
3630
3671
|
}
|
|
3631
3672
|
let type;
|
|
@@ -3656,21 +3697,23 @@ var Glob = class {
|
|
|
3656
3697
|
}
|
|
3657
3698
|
if (canPrune) {
|
|
3658
3699
|
const dirPath = relPrefix + entry.name;
|
|
3659
|
-
const descend = withString(exports, dirPath, (ptr) => exports.canDescend(this.id, ptr));
|
|
3700
|
+
const descend = withString(exports, dirPath, (ptr) => exports.canDescend(this.id, ptr, dotFlag));
|
|
3660
3701
|
if (!descend) {
|
|
3661
3702
|
continue;
|
|
3662
3703
|
}
|
|
3704
|
+
} else if (!includeDot && entry.name.charAt(0) === ".") {
|
|
3705
|
+
continue;
|
|
3663
3706
|
}
|
|
3664
3707
|
scanDir(`${dirAbs}/${entry.name}`, relPrefix + entry.name + "/");
|
|
3665
3708
|
} else {
|
|
3666
3709
|
if (hasSlash) {
|
|
3667
3710
|
const relativePath = relPrefix + entry.name;
|
|
3668
|
-
const matched = withString(exports, relativePath, (ptr) => exports.match(this.id, ptr));
|
|
3711
|
+
const matched = withString(exports, relativePath, (ptr) => exports.match(this.id, ptr, dotFlag));
|
|
3669
3712
|
if (matched) {
|
|
3670
3713
|
results.push(relativePath);
|
|
3671
3714
|
}
|
|
3672
3715
|
} else {
|
|
3673
|
-
const matched = withString(exports, entry.name, (ptr) => exports.match(this.id, ptr));
|
|
3716
|
+
const matched = withString(exports, entry.name, (ptr) => exports.match(this.id, ptr, dotFlag));
|
|
3674
3717
|
if (matched) {
|
|
3675
3718
|
results.push(relPrefix + entry.name);
|
|
3676
3719
|
}
|
|
@@ -4869,7 +4912,7 @@ Check this list before writing \u2014 update an existing file rather than creati
|
|
|
4869
4912
|
`- Code patterns, architecture, file paths \u2014 derivable from reading the project`,
|
|
4870
4913
|
`- Git history \u2014 use git log/blame`,
|
|
4871
4914
|
`- Debugging solutions \u2014 the fix is in the code`,
|
|
4872
|
-
`- Anything in
|
|
4915
|
+
`- Anything in AGENTS.md files`,
|
|
4873
4916
|
`- Ephemeral task details, current conversation context`,
|
|
4874
4917
|
``,
|
|
4875
4918
|
`## How to save memories`,
|
|
@@ -5076,18 +5119,15 @@ function discoverInstructions(workDir) {
|
|
|
5076
5119
|
const seen = /* @__PURE__ */ new Set();
|
|
5077
5120
|
try {
|
|
5078
5121
|
const home = homedir6();
|
|
5079
|
-
addSource(sources, seen, join15(home, ".swifty", "SWIFTY.md"));
|
|
5080
5122
|
addSource(sources, seen, join15(home, ".swifty", "AGENTS.md"));
|
|
5081
5123
|
} catch (err) {
|
|
5082
5124
|
log21.error({ err }, "memory operation failed");
|
|
5083
5125
|
}
|
|
5084
5126
|
const dirs = projectInstructionDirs(workDir);
|
|
5085
5127
|
for (const dir of dirs) {
|
|
5086
|
-
addSource(sources, seen, join15(dir, "SWIFTY.md"));
|
|
5087
5128
|
addSource(sources, seen, join15(dir, "AGENTS.md"));
|
|
5088
|
-
addSource(sources, seen, join15(dir, ".swifty", "
|
|
5129
|
+
addSource(sources, seen, join15(dir, ".swifty", "AGENTS.md"));
|
|
5089
5130
|
}
|
|
5090
|
-
addSource(sources, seen, join15(workDir, "SWIFTY.local.md"));
|
|
5091
5131
|
return sources;
|
|
5092
5132
|
}
|
|
5093
5133
|
function addSource(out, seen, filePath) {
|
|
@@ -6370,8 +6410,6 @@ async function performPostCreationSetup(repoRoot, wtPath) {
|
|
|
6370
6410
|
await copyWorktreeIncludeFiles(repoRoot, wtPath);
|
|
6371
6411
|
}
|
|
6372
6412
|
var SHARED_SWIFTY_ENTRIES = [
|
|
6373
|
-
"config.yaml",
|
|
6374
|
-
"config.local.yaml",
|
|
6375
6413
|
"permissions.yaml",
|
|
6376
6414
|
"permissions.local.yaml",
|
|
6377
6415
|
"agents",
|
|
@@ -9269,20 +9307,99 @@ var AgentEventLogger = class {
|
|
|
9269
9307
|
};
|
|
9270
9308
|
|
|
9271
9309
|
// src/remote/server.ts
|
|
9272
|
-
import { readFileSync as
|
|
9310
|
+
import { readFileSync as readFileSync24, existsSync as existsSync21, statSync as statSync12 } from "fs";
|
|
9273
9311
|
import { createServer } from "http";
|
|
9274
|
-
import { join as
|
|
9312
|
+
import { join as join26, extname as extname3, normalize } from "path";
|
|
9275
9313
|
import { cwd } from "process";
|
|
9276
9314
|
import Koa from "koa";
|
|
9277
9315
|
import { WebSocketServer, WebSocket } from "ws";
|
|
9278
|
-
import
|
|
9316
|
+
import z18 from "zod";
|
|
9279
9317
|
|
|
9280
|
-
// src/
|
|
9281
|
-
import {
|
|
9282
|
-
import {
|
|
9283
|
-
|
|
9318
|
+
// src/config/provider-login.ts
|
|
9319
|
+
import { randomUUID } from "crypto";
|
|
9320
|
+
import {
|
|
9321
|
+
existsSync as existsSync18,
|
|
9322
|
+
mkdirSync as mkdirSync15,
|
|
9323
|
+
readFileSync as readFileSync21,
|
|
9324
|
+
renameSync,
|
|
9325
|
+
unlinkSync as unlinkSync5,
|
|
9326
|
+
writeFileSync as writeFileSync13
|
|
9327
|
+
} from "fs";
|
|
9328
|
+
import { dirname as dirname8, join as join23 } from "path";
|
|
9284
9329
|
import yaml5 from "js-yaml";
|
|
9285
9330
|
import { z as z13 } from "zod";
|
|
9331
|
+
var tokenLimit = (fallback, min, max) => z13.preprocess(
|
|
9332
|
+
(value) => value === void 0 || typeof value === "string" && !value.trim() ? fallback : value,
|
|
9333
|
+
z13.union([
|
|
9334
|
+
z13.number(),
|
|
9335
|
+
z13.string().trim().regex(/^\d+$/, "Enter a whole number").transform(Number)
|
|
9336
|
+
]).pipe(z13.number().int().min(min).max(max))
|
|
9337
|
+
);
|
|
9338
|
+
var ProviderLoginSchema = ProviderConfigSchema.extend({
|
|
9339
|
+
name: z13.string().trim().min(1, "Name is required"),
|
|
9340
|
+
base_url: z13.string().trim().url("Enter a valid HTTP(S) URL").refine((url) => /^https?:\/\//i.test(url), "Use an HTTP(S) URL"),
|
|
9341
|
+
api_key: z13.string().trim().min(1, "API key is required"),
|
|
9342
|
+
model: z13.string().trim().min(1, "Model is required"),
|
|
9343
|
+
thinking: z13.enum(THINKING_LEVELS).optional(),
|
|
9344
|
+
context_window: tokenLimit(DEFAULT_CONTEXT_WINDOW, 1e3, 1e7),
|
|
9345
|
+
max_output_tokens: tokenLimit(DEFAULT_MAX_OUTPUT_TOKENS, 1, 1e6)
|
|
9346
|
+
}).refine((provider) => provider.max_output_tokens <= provider.context_window, {
|
|
9347
|
+
path: ["max_output_tokens"],
|
|
9348
|
+
message: "Max output tokens must not exceed the context window"
|
|
9349
|
+
}).transform((provider) => ({
|
|
9350
|
+
...provider,
|
|
9351
|
+
thinking: provider.thinking ?? defaultThinkingLevelFor(provider.protocol)
|
|
9352
|
+
}));
|
|
9353
|
+
function readConfigRaw(path2) {
|
|
9354
|
+
if (!existsSync18(path2)) {
|
|
9355
|
+
return {};
|
|
9356
|
+
}
|
|
9357
|
+
let raw;
|
|
9358
|
+
try {
|
|
9359
|
+
raw = yaml5.load(readFileSync21(path2, "utf-8"));
|
|
9360
|
+
} catch {
|
|
9361
|
+
throw new Error(`Unable to read existing ${path2}; it has not been changed.`);
|
|
9362
|
+
}
|
|
9363
|
+
return z13.record(z13.string(), z13.unknown()).parse(raw ?? {});
|
|
9364
|
+
}
|
|
9365
|
+
function writeConfigAtomic(path2, raw) {
|
|
9366
|
+
const directory = dirname8(path2);
|
|
9367
|
+
mkdirSync15(directory, { recursive: true });
|
|
9368
|
+
const temporary = join23(directory, `.config-${randomUUID()}.tmp`);
|
|
9369
|
+
try {
|
|
9370
|
+
writeFileSync13(temporary, yaml5.dump(raw, { lineWidth: -1, noRefs: true }), {
|
|
9371
|
+
encoding: "utf-8",
|
|
9372
|
+
mode: 384,
|
|
9373
|
+
flag: "wx"
|
|
9374
|
+
});
|
|
9375
|
+
renameSync(temporary, path2);
|
|
9376
|
+
} finally {
|
|
9377
|
+
if (existsSync18(temporary)) {
|
|
9378
|
+
unlinkSync5(temporary);
|
|
9379
|
+
}
|
|
9380
|
+
}
|
|
9381
|
+
}
|
|
9382
|
+
function persistThinkingLevel(providerName, level) {
|
|
9383
|
+
const path2 = globalConfigPath();
|
|
9384
|
+
const config = readConfigRaw(path2);
|
|
9385
|
+
const providers = z13.array(z13.record(z13.string(), z13.unknown())).parse(config.providers ?? []);
|
|
9386
|
+
const target = providers.find((entry) => entry.name === providerName);
|
|
9387
|
+
if (!target) {
|
|
9388
|
+
throw new Error(`Provider "${providerName}" not found in ${path2}.`);
|
|
9389
|
+
}
|
|
9390
|
+
if (target.thinking === level) {
|
|
9391
|
+
return;
|
|
9392
|
+
}
|
|
9393
|
+
target.thinking = level;
|
|
9394
|
+
writeConfigAtomic(path2, { ...config, providers });
|
|
9395
|
+
}
|
|
9396
|
+
|
|
9397
|
+
// src/skills/catalog.ts
|
|
9398
|
+
import { readdirSync as readdirSync6, readFileSync as readFileSync22, existsSync as existsSync19, statSync as statSync11 } from "fs";
|
|
9399
|
+
import { homedir as homedir9 } from "os";
|
|
9400
|
+
import { join as join24 } from "path";
|
|
9401
|
+
import yaml6 from "js-yaml";
|
|
9402
|
+
import { z as z14 } from "zod";
|
|
9286
9403
|
var log30 = createChildLogger({ module: "skills" });
|
|
9287
9404
|
var SkillCatalog = class {
|
|
9288
9405
|
entries = /* @__PURE__ */ new Map();
|
|
@@ -9293,7 +9410,7 @@ var SkillCatalog = class {
|
|
|
9293
9410
|
this.entries.clear();
|
|
9294
9411
|
this.dirModTimes.clear();
|
|
9295
9412
|
for (const dir of this.skillDirPaths()) {
|
|
9296
|
-
if (!
|
|
9413
|
+
if (!existsSync19(dir)) {
|
|
9297
9414
|
continue;
|
|
9298
9415
|
}
|
|
9299
9416
|
this.scanDirectory(dir);
|
|
@@ -9333,7 +9450,7 @@ var SkillCatalog = class {
|
|
|
9333
9450
|
}
|
|
9334
9451
|
skillDirPaths() {
|
|
9335
9452
|
return [homedir9(), ...this.workDir ? [this.workDir] : []].flatMap(
|
|
9336
|
-
(root) => [".
|
|
9453
|
+
(root) => [".agents", ".swifty"].map((ecosystem) => join24(root, ecosystem, "skills"))
|
|
9337
9454
|
);
|
|
9338
9455
|
}
|
|
9339
9456
|
scanDirectory(dir) {
|
|
@@ -9345,13 +9462,13 @@ var SkillCatalog = class {
|
|
|
9345
9462
|
return;
|
|
9346
9463
|
}
|
|
9347
9464
|
for (const entry of dirEntries) {
|
|
9348
|
-
const fullPath =
|
|
9465
|
+
const fullPath = join24(dir, entry);
|
|
9349
9466
|
try {
|
|
9350
9467
|
const stat3 = statSync11(fullPath);
|
|
9351
9468
|
if (stat3.isDirectory()) {
|
|
9352
9469
|
this.dirModTimes.set(fullPath, stat3.mtimeMs);
|
|
9353
|
-
const skillFile =
|
|
9354
|
-
if (
|
|
9470
|
+
const skillFile = join24(fullPath, "SKILL.md");
|
|
9471
|
+
if (existsSync19(skillFile)) {
|
|
9355
9472
|
this.loadSkill(skillFile, fullPath, true);
|
|
9356
9473
|
}
|
|
9357
9474
|
}
|
|
@@ -9362,7 +9479,7 @@ var SkillCatalog = class {
|
|
|
9362
9479
|
}
|
|
9363
9480
|
loadSkill(filePath, sourceDir, isDirectory) {
|
|
9364
9481
|
try {
|
|
9365
|
-
const raw =
|
|
9482
|
+
const raw = readFileSync22(filePath, "utf-8");
|
|
9366
9483
|
const parsed = parseSkillFile(raw);
|
|
9367
9484
|
if (!parsed) {
|
|
9368
9485
|
return;
|
|
@@ -9405,7 +9522,7 @@ var SkillCatalog = class {
|
|
|
9405
9522
|
try {
|
|
9406
9523
|
const currentMtime = statSync11(entry.filePath).mtimeMs;
|
|
9407
9524
|
if (currentMtime !== entry.loadedMtimeMs) {
|
|
9408
|
-
const raw =
|
|
9525
|
+
const raw = readFileSync22(entry.filePath, "utf-8");
|
|
9409
9526
|
const parsed = parseSkillFile(raw);
|
|
9410
9527
|
if (parsed) {
|
|
9411
9528
|
if (parsed.meta.name !== name) {
|
|
@@ -9438,12 +9555,12 @@ function resolveMode(raw) {
|
|
|
9438
9555
|
}
|
|
9439
9556
|
return strArg(asRecord(raw), "context") === "fork" ? "fork" : "inline";
|
|
9440
9557
|
}
|
|
9441
|
-
var YamlFrontmatterSchema3 =
|
|
9442
|
-
name:
|
|
9443
|
-
description:
|
|
9444
|
-
mode:
|
|
9445
|
-
model:
|
|
9446
|
-
fork_context:
|
|
9558
|
+
var YamlFrontmatterSchema3 = z14.looseObject({
|
|
9559
|
+
name: z14.string().trim().min(1),
|
|
9560
|
+
description: z14.string().optional(),
|
|
9561
|
+
mode: z14.enum(["inline", "fork"]).optional(),
|
|
9562
|
+
model: z14.string().optional(),
|
|
9563
|
+
fork_context: z14.enum(["full", "none", "recent"]).optional()
|
|
9447
9564
|
});
|
|
9448
9565
|
function parseSkillFile(content) {
|
|
9449
9566
|
const normalized = content.replace(/^\uFEFF/, "");
|
|
@@ -9453,7 +9570,7 @@ function parseSkillFile(content) {
|
|
|
9453
9570
|
}
|
|
9454
9571
|
const body = normalized.slice(match[0].length).trim();
|
|
9455
9572
|
try {
|
|
9456
|
-
const raw =
|
|
9573
|
+
const raw = yaml6.load(match[1]);
|
|
9457
9574
|
const data = YamlFrontmatterSchema3.parse(raw);
|
|
9458
9575
|
return {
|
|
9459
9576
|
meta: {
|
|
@@ -9476,7 +9593,7 @@ function buildSkillSection(catalog, workDir) {
|
|
|
9476
9593
|
if (metas.length === 0) {
|
|
9477
9594
|
return "";
|
|
9478
9595
|
}
|
|
9479
|
-
const skillsDir =
|
|
9596
|
+
const skillsDir = join24(workDir, ".swifty", "skills");
|
|
9480
9597
|
const lines = [
|
|
9481
9598
|
"## Available Skills\n",
|
|
9482
9599
|
`Skills are installed at: ${skillsDir}`,
|
|
@@ -9591,36 +9708,36 @@ ${body}`,
|
|
|
9591
9708
|
};
|
|
9592
9709
|
|
|
9593
9710
|
// src/todo/store.ts
|
|
9594
|
-
import { readFileSync as
|
|
9595
|
-
import { join as
|
|
9596
|
-
import
|
|
9711
|
+
import { readFileSync as readFileSync23, writeFileSync as writeFileSync14, mkdirSync as mkdirSync16, existsSync as existsSync20 } from "fs";
|
|
9712
|
+
import { join as join25, dirname as dirname9 } from "path";
|
|
9713
|
+
import z15, { parse as parse8 } from "zod";
|
|
9597
9714
|
var log31 = createChildLogger({ module: "todo" });
|
|
9598
|
-
var TaskStatusSchema =
|
|
9599
|
-
var TaskSchema =
|
|
9600
|
-
id:
|
|
9601
|
-
subject:
|
|
9602
|
-
description:
|
|
9715
|
+
var TaskStatusSchema = z15.enum(["pending", "in_progress", "completed"]);
|
|
9716
|
+
var TaskSchema = z15.object({
|
|
9717
|
+
id: z15.string(),
|
|
9718
|
+
subject: z15.string(),
|
|
9719
|
+
description: z15.string(),
|
|
9603
9720
|
status: TaskStatusSchema,
|
|
9604
|
-
owner:
|
|
9605
|
-
activeForm:
|
|
9606
|
-
blocks:
|
|
9607
|
-
blockedBy:
|
|
9608
|
-
metadata:
|
|
9721
|
+
owner: z15.string().optional(),
|
|
9722
|
+
activeForm: z15.string().optional(),
|
|
9723
|
+
blocks: z15.array(z15.string()),
|
|
9724
|
+
blockedBy: z15.array(z15.string()),
|
|
9725
|
+
metadata: z15.record(z15.string(), z15.unknown())
|
|
9609
9726
|
});
|
|
9610
9727
|
var TaskStore = class {
|
|
9611
9728
|
filePath;
|
|
9612
9729
|
// Session-scoped store: .swifty/tasks/<listId>.json.
|
|
9613
9730
|
constructor(workDir, listId) {
|
|
9614
|
-
this.filePath =
|
|
9731
|
+
this.filePath = join25(workDir, ".swifty", "tasks", `${listId}.json`);
|
|
9615
9732
|
}
|
|
9616
9733
|
load() {
|
|
9617
|
-
if (!
|
|
9734
|
+
if (!existsSync20(this.filePath)) {
|
|
9618
9735
|
return [];
|
|
9619
9736
|
}
|
|
9620
9737
|
try {
|
|
9621
|
-
const data =
|
|
9738
|
+
const data = readFileSync23(this.filePath, "utf-8");
|
|
9622
9739
|
const raw = JSON.parse(data);
|
|
9623
|
-
const parsed = parse8(
|
|
9740
|
+
const parsed = parse8(z15.array(TaskSchema), raw);
|
|
9624
9741
|
return parsed;
|
|
9625
9742
|
} catch (err) {
|
|
9626
9743
|
log31.error({ err }, "todo operation failed");
|
|
@@ -9628,8 +9745,8 @@ var TaskStore = class {
|
|
|
9628
9745
|
}
|
|
9629
9746
|
}
|
|
9630
9747
|
save(tasks) {
|
|
9631
|
-
|
|
9632
|
-
|
|
9748
|
+
mkdirSync16(dirname9(this.filePath), { recursive: true });
|
|
9749
|
+
writeFileSync14(this.filePath, JSON.stringify(tasks, null, 2), "utf-8");
|
|
9633
9750
|
}
|
|
9634
9751
|
};
|
|
9635
9752
|
|
|
@@ -9739,7 +9856,7 @@ var TaskList = class {
|
|
|
9739
9856
|
|
|
9740
9857
|
// src/todo/tools.ts
|
|
9741
9858
|
import { safeParseAsync } from "@modelcontextprotocol/sdk/server/zod-compat.js";
|
|
9742
|
-
import
|
|
9859
|
+
import z16 from "zod";
|
|
9743
9860
|
var TaskCreateTool2 = class {
|
|
9744
9861
|
name = "TaskCreate";
|
|
9745
9862
|
description = "Create a new task to track work.";
|
|
@@ -9926,27 +10043,27 @@ var TaskUpdateTool2 = class {
|
|
|
9926
10043
|
return { output: `Updated task #${taskId} status`, isError: false };
|
|
9927
10044
|
}
|
|
9928
10045
|
};
|
|
9929
|
-
var TaskUpdateArgsSchema =
|
|
9930
|
-
taskId:
|
|
9931
|
-
subject:
|
|
9932
|
-
description:
|
|
9933
|
-
status:
|
|
9934
|
-
owner:
|
|
9935
|
-
addBlocks:
|
|
9936
|
-
addBlockedBy:
|
|
10046
|
+
var TaskUpdateArgsSchema = z16.object({
|
|
10047
|
+
taskId: z16.string(),
|
|
10048
|
+
subject: z16.string().optional(),
|
|
10049
|
+
description: z16.string().optional(),
|
|
10050
|
+
status: z16.enum(["pending", "in_progress", "completed", "deleted"]).optional(),
|
|
10051
|
+
owner: z16.string().optional(),
|
|
10052
|
+
addBlocks: z16.array(z16.string()).optional(),
|
|
10053
|
+
addBlockedBy: z16.array(z16.string()).optional()
|
|
9937
10054
|
});
|
|
9938
10055
|
|
|
9939
10056
|
// src/tools/ask-user.ts
|
|
9940
|
-
import { safeParseAsync as safeParseAsync2, z as
|
|
9941
|
-
var QuestionOptionSchema =
|
|
9942
|
-
label:
|
|
9943
|
-
description:
|
|
10057
|
+
import { safeParseAsync as safeParseAsync2, z as z17 } from "zod";
|
|
10058
|
+
var QuestionOptionSchema = z17.object({
|
|
10059
|
+
label: z17.string(),
|
|
10060
|
+
description: z17.string().optional()
|
|
9944
10061
|
});
|
|
9945
|
-
var QuestionSchema =
|
|
9946
|
-
question:
|
|
9947
|
-
header:
|
|
9948
|
-
options:
|
|
9949
|
-
multiSelect:
|
|
10062
|
+
var QuestionSchema = z17.object({
|
|
10063
|
+
question: z17.string(),
|
|
10064
|
+
header: z17.string(),
|
|
10065
|
+
options: z17.array(QuestionOptionSchema),
|
|
10066
|
+
multiSelect: z17.boolean()
|
|
9950
10067
|
});
|
|
9951
10068
|
var AskUserQuestionTool = class {
|
|
9952
10069
|
constructor(ask) {
|
|
@@ -10028,7 +10145,7 @@ var AskUserQuestionTool = class {
|
|
|
10028
10145
|
success,
|
|
10029
10146
|
data: argsData,
|
|
10030
10147
|
error
|
|
10031
|
-
} = await safeParseAsync2(
|
|
10148
|
+
} = await safeParseAsync2(z17.object({ questions: z17.array(QuestionSchema) }), args);
|
|
10032
10149
|
if (!success) {
|
|
10033
10150
|
return {
|
|
10034
10151
|
output: error.message,
|
|
@@ -10277,22 +10394,22 @@ function restoreRemoteSession(state, sessionId, saved) {
|
|
|
10277
10394
|
|
|
10278
10395
|
// src/remote/server.ts
|
|
10279
10396
|
var log34 = createChildLogger({ module: "remote" });
|
|
10280
|
-
var WsInboundSchema =
|
|
10281
|
-
type:
|
|
10282
|
-
data:
|
|
10397
|
+
var WsInboundSchema = z18.object({
|
|
10398
|
+
type: z18.string(),
|
|
10399
|
+
data: z18.unknown()
|
|
10283
10400
|
});
|
|
10284
|
-
var UserMessageSchema =
|
|
10285
|
-
content:
|
|
10401
|
+
var UserMessageSchema = z18.object({
|
|
10402
|
+
content: z18.string()
|
|
10286
10403
|
});
|
|
10287
|
-
var PermissionResponseSchema =
|
|
10288
|
-
id:
|
|
10289
|
-
response:
|
|
10404
|
+
var PermissionResponseSchema = z18.object({
|
|
10405
|
+
id: z18.string(),
|
|
10406
|
+
response: z18.enum(["allow", "deny", "allowAlways"])
|
|
10290
10407
|
});
|
|
10291
|
-
var AskUserResponseSchema =
|
|
10292
|
-
id:
|
|
10293
|
-
answers:
|
|
10408
|
+
var AskUserResponseSchema = z18.object({
|
|
10409
|
+
id: z18.string(),
|
|
10410
|
+
answers: z18.record(z18.string(), z18.string())
|
|
10294
10411
|
});
|
|
10295
|
-
var FE_DIST =
|
|
10412
|
+
var FE_DIST = join26(import.meta.dirname, "fe", "dist");
|
|
10296
10413
|
var MIME_TYPES = {
|
|
10297
10414
|
".html": "text/html; charset=utf-8",
|
|
10298
10415
|
".js": "application/javascript; charset=utf-8",
|
|
@@ -10305,14 +10422,14 @@ var MIME_TYPES = {
|
|
|
10305
10422
|
};
|
|
10306
10423
|
function serveStatic(path2) {
|
|
10307
10424
|
const cleanPath = normalize(path2).replace(/^(\.\.[/\\])+/, "");
|
|
10308
|
-
const fullPath =
|
|
10425
|
+
const fullPath = join26(FE_DIST, cleanPath);
|
|
10309
10426
|
if (!fullPath.startsWith(FE_DIST)) {
|
|
10310
10427
|
return null;
|
|
10311
10428
|
}
|
|
10312
|
-
if (!
|
|
10429
|
+
if (!existsSync21(fullPath) || !statSync12(fullPath).isFile()) {
|
|
10313
10430
|
return null;
|
|
10314
10431
|
}
|
|
10315
|
-
const body =
|
|
10432
|
+
const body = readFileSync24(fullPath);
|
|
10316
10433
|
const mime = MIME_TYPES[extname3(fullPath)] ?? "application/octet-stream";
|
|
10317
10434
|
return { body, mime };
|
|
10318
10435
|
}
|
|
@@ -10480,7 +10597,7 @@ async function createRemoteAgent(opts) {
|
|
|
10480
10597
|
throw new Error("no llm client (provider not initialized)");
|
|
10481
10598
|
}
|
|
10482
10599
|
const { PermissionChecker: PC } = await import("./checker-AXHPKVBY.js");
|
|
10483
|
-
const { Agent: AgentClass } = await import("./agent-
|
|
10600
|
+
const { Agent: AgentClass } = await import("./agent-5WEKVRTD.js");
|
|
10484
10601
|
const subConv = new ConversationManager();
|
|
10485
10602
|
subConv.addUserMessage(prompt);
|
|
10486
10603
|
const subAgent = new AgentClass({
|
|
@@ -11204,7 +11321,13 @@ ${lines.join("\n")}`
|
|
|
11204
11321
|
tokenCount: () => [0, 0],
|
|
11205
11322
|
toolCount: () => handle.registry.listTools().length,
|
|
11206
11323
|
memoryList: () => handle.memoryManager.getMemories().map((m) => m.name),
|
|
11207
|
-
model: handle.provider.model
|
|
11324
|
+
model: handle.provider.model,
|
|
11325
|
+
thinkingLevel: () => handle.client.getThinkingLevel?.() ?? defaultThinkingLevelFor(handle.provider.protocol),
|
|
11326
|
+
setThinkingLevel: (level) => handle.client.setThinkingLevel?.(level),
|
|
11327
|
+
persistThinkingLevel: (level) => {
|
|
11328
|
+
persistThinkingLevel(handle.provider.name, level);
|
|
11329
|
+
handle.provider.thinking = level;
|
|
11330
|
+
}
|
|
11208
11331
|
};
|
|
11209
11332
|
}
|
|
11210
11333
|
/** Handles /compact command: force context compaction. */
|
|
@@ -11494,23 +11617,23 @@ Explore the codebase and design your approach.`
|
|
|
11494
11617
|
};
|
|
11495
11618
|
|
|
11496
11619
|
// src/teammate.ts
|
|
11497
|
-
import { basename as basename6, dirname as
|
|
11620
|
+
import { basename as basename6, dirname as dirname10, join as join28 } from "path";
|
|
11498
11621
|
|
|
11499
11622
|
// src/skills/install-tool.ts
|
|
11500
|
-
import { randomUUID } from "crypto";
|
|
11623
|
+
import { randomUUID as randomUUID2 } from "crypto";
|
|
11501
11624
|
import {
|
|
11502
|
-
mkdirSync as
|
|
11503
|
-
writeFileSync as
|
|
11504
|
-
readFileSync as
|
|
11625
|
+
mkdirSync as mkdirSync17,
|
|
11626
|
+
writeFileSync as writeFileSync15,
|
|
11627
|
+
readFileSync as readFileSync25,
|
|
11505
11628
|
lstatSync as lstatSync2,
|
|
11506
11629
|
realpathSync,
|
|
11507
11630
|
openSync as openSync2,
|
|
11508
11631
|
closeSync as closeSync2,
|
|
11509
|
-
renameSync,
|
|
11632
|
+
renameSync as renameSync2,
|
|
11510
11633
|
rmSync as rmSync2
|
|
11511
11634
|
} from "fs";
|
|
11512
|
-
import { join as
|
|
11513
|
-
import
|
|
11635
|
+
import { join as join27, resolve as resolve10 } from "path";
|
|
11636
|
+
import yaml7 from "js-yaml";
|
|
11514
11637
|
var log35 = createChildLogger({ module: "skills" });
|
|
11515
11638
|
var InstallSkillTool = class {
|
|
11516
11639
|
constructor(workDir, catalog, onInstalled) {
|
|
@@ -11572,7 +11695,7 @@ var InstallSkillTool = class {
|
|
|
11572
11695
|
clearTimeout(timer);
|
|
11573
11696
|
}
|
|
11574
11697
|
} else {
|
|
11575
|
-
content =
|
|
11698
|
+
content = readFileSync25(resolve10(this.workDir, source), "utf-8");
|
|
11576
11699
|
}
|
|
11577
11700
|
const parsed = parseSkillFile(content);
|
|
11578
11701
|
if (!parsed) {
|
|
@@ -11590,7 +11713,7 @@ var InstallSkillTool = class {
|
|
|
11590
11713
|
}
|
|
11591
11714
|
if (name !== parsed.meta.name) {
|
|
11592
11715
|
content = `---
|
|
11593
|
-
${
|
|
11716
|
+
${yaml7.dump({ ...parsed.frontmatter, name })}---
|
|
11594
11717
|
|
|
11595
11718
|
${parsed.body}
|
|
11596
11719
|
`;
|
|
@@ -11598,30 +11721,30 @@ ${parsed.body}
|
|
|
11598
11721
|
ctx.abortSignal?.throwIfAborted();
|
|
11599
11722
|
let dir = realpathSync(this.workDir);
|
|
11600
11723
|
for (const segment of [".swifty", "skills", name]) {
|
|
11601
|
-
dir =
|
|
11724
|
+
dir = join27(dir, segment);
|
|
11602
11725
|
const stat4 = lstatSync2(dir, { throwIfNoEntry: false });
|
|
11603
11726
|
if (stat4) {
|
|
11604
11727
|
if (stat4.isSymbolicLink() || !stat4.isDirectory()) {
|
|
11605
11728
|
throw new Error(`Installation directory must be a real directory: ${dir}`);
|
|
11606
11729
|
}
|
|
11607
11730
|
} else {
|
|
11608
|
-
|
|
11731
|
+
mkdirSync17(dir);
|
|
11609
11732
|
}
|
|
11610
11733
|
}
|
|
11611
|
-
const destination =
|
|
11734
|
+
const destination = join27(dir, "SKILL.md");
|
|
11612
11735
|
const stat3 = lstatSync2(destination, { throwIfNoEntry: false });
|
|
11613
11736
|
if (stat3 && (stat3.isSymbolicLink() || !stat3.isFile())) {
|
|
11614
11737
|
throw new Error(`Installation target must be a regular file: ${destination}`);
|
|
11615
11738
|
}
|
|
11616
|
-
const temporary =
|
|
11739
|
+
const temporary = join27(dir, `.SKILL-${randomUUID2()}.tmp`);
|
|
11617
11740
|
const fd = openSync2(temporary, "wx", stat3?.mode ?? 438);
|
|
11618
11741
|
try {
|
|
11619
11742
|
try {
|
|
11620
|
-
|
|
11743
|
+
writeFileSync15(fd, content, "utf-8");
|
|
11621
11744
|
} finally {
|
|
11622
11745
|
closeSync2(fd);
|
|
11623
11746
|
}
|
|
11624
|
-
|
|
11747
|
+
renameSync2(temporary, destination);
|
|
11625
11748
|
} finally {
|
|
11626
11749
|
rmSync2(temporary, { force: true });
|
|
11627
11750
|
}
|
|
@@ -11667,7 +11790,7 @@ function parseTeammateFlags(args) {
|
|
|
11667
11790
|
}
|
|
11668
11791
|
if (!teamName) {
|
|
11669
11792
|
const leaf = basename6(teamDir2);
|
|
11670
|
-
teamName = leaf === "inboxes" ? basename6(
|
|
11793
|
+
teamName = leaf === "inboxes" ? basename6(dirname10(teamDir2)) : leaf;
|
|
11671
11794
|
}
|
|
11672
11795
|
return { teamDir: teamDir2, teamName, memberName, initialTask, providerName };
|
|
11673
11796
|
}
|
|
@@ -11734,7 +11857,7 @@ async function runTeammate(args) {
|
|
|
11734
11857
|
initLogger({
|
|
11735
11858
|
sessionId: `teammate-${safeMemberName}-${Date.now().toString(36)}`,
|
|
11736
11859
|
mode: "teammate",
|
|
11737
|
-
logDir:
|
|
11860
|
+
logDir: join28(dirname10(args.teamDir), "logs"),
|
|
11738
11861
|
skipCleanup: true
|
|
11739
11862
|
});
|
|
11740
11863
|
process.on("exit", closeLogger);
|
|
@@ -11908,24 +12031,24 @@ function isDiffTool(toolName) {
|
|
|
11908
12031
|
|
|
11909
12032
|
// src/vscode/ide-client.ts
|
|
11910
12033
|
import { Client as Client2 } from "@modelcontextprotocol/sdk/client/index.js";
|
|
11911
|
-
import { z as
|
|
12034
|
+
import { z as z20 } from "zod";
|
|
11912
12035
|
|
|
11913
12036
|
// src/vscode/lockfile.ts
|
|
11914
12037
|
import { readdir as readdir2, readFile as readFile5 } from "fs/promises";
|
|
11915
12038
|
import { homedir as homedir10 } from "os";
|
|
11916
|
-
import { join as
|
|
11917
|
-
import { z as
|
|
12039
|
+
import { join as join29, resolve as resolve11, sep as sep2 } from "path";
|
|
12040
|
+
import { z as z19 } from "zod";
|
|
11918
12041
|
var log37 = createChildLogger({ module: "vscode" });
|
|
11919
|
-
var LockfileSchema =
|
|
11920
|
-
workspaceFolders:
|
|
11921
|
-
pid:
|
|
11922
|
-
ideName:
|
|
11923
|
-
transport:
|
|
11924
|
-
authToken:
|
|
12042
|
+
var LockfileSchema = z19.object({
|
|
12043
|
+
workspaceFolders: z19.array(z19.string()).optional(),
|
|
12044
|
+
pid: z19.number().optional(),
|
|
12045
|
+
ideName: z19.string().optional(),
|
|
12046
|
+
transport: z19.enum(["ws", "sse"]).optional(),
|
|
12047
|
+
authToken: z19.string().optional()
|
|
11925
12048
|
});
|
|
11926
12049
|
function ideLockDir() {
|
|
11927
|
-
const configDir = process.env.CLAUDE_CONFIG_DIR ??
|
|
11928
|
-
return
|
|
12050
|
+
const configDir = process.env.CLAUDE_CONFIG_DIR ?? join29(homedir10(), ".claude");
|
|
12051
|
+
return join29(configDir, "ide");
|
|
11929
12052
|
}
|
|
11930
12053
|
function cwdInWorkspace(cwd2, workspaceFolders) {
|
|
11931
12054
|
const normalizedCwd = cwd2.normalize("NFC");
|
|
@@ -11943,7 +12066,7 @@ async function readLockfile(dir, filename) {
|
|
|
11943
12066
|
return null;
|
|
11944
12067
|
}
|
|
11945
12068
|
try {
|
|
11946
|
-
const content = await readFile5(
|
|
12069
|
+
const content = await readFile5(join29(dir, filename), "utf-8");
|
|
11947
12070
|
const parsed = LockfileSchema.parse(JSON.parse(content));
|
|
11948
12071
|
if (parsed.transport !== "ws") {
|
|
11949
12072
|
return null;
|
|
@@ -12074,12 +12197,12 @@ var WebSocketTransport = class {
|
|
|
12074
12197
|
|
|
12075
12198
|
// src/vscode/ide-client.ts
|
|
12076
12199
|
var log38 = createChildLogger({ module: "vscode" });
|
|
12077
|
-
var AtMentionedSchema =
|
|
12078
|
-
method:
|
|
12079
|
-
params:
|
|
12080
|
-
filePath:
|
|
12081
|
-
lineStart:
|
|
12082
|
-
lineEnd:
|
|
12200
|
+
var AtMentionedSchema = z20.object({
|
|
12201
|
+
method: z20.literal("at_mentioned"),
|
|
12202
|
+
params: z20.object({
|
|
12203
|
+
filePath: z20.string(),
|
|
12204
|
+
lineStart: z20.number().optional(),
|
|
12205
|
+
lineEnd: z20.number().optional()
|
|
12083
12206
|
})
|
|
12084
12207
|
});
|
|
12085
12208
|
function inIdeTerminal() {
|
|
@@ -12170,7 +12293,7 @@ export {
|
|
|
12170
12293
|
DEFAULT_CONTEXT_WINDOW,
|
|
12171
12294
|
DEFAULT_EAGER_THRESHOLD_PERCENT,
|
|
12172
12295
|
DEFAULT_MAX_OUTPUT_TOKENS,
|
|
12173
|
-
|
|
12296
|
+
DEFAULT_THINKING_LEVEL,
|
|
12174
12297
|
EDIT_FILE_DESCRIPTION,
|
|
12175
12298
|
EditFileTool,
|
|
12176
12299
|
EnterWorktreeTool,
|
|
@@ -12241,6 +12364,8 @@ export {
|
|
|
12241
12364
|
StreamingExecutor,
|
|
12242
12365
|
SyntheticOutputTool,
|
|
12243
12366
|
TEAMMATE_DISALLOWED_TOOLS,
|
|
12367
|
+
THINKING_BUDGETS,
|
|
12368
|
+
THINKING_LEVELS,
|
|
12244
12369
|
TOOL_RESULT_PREVIEW_CHARS,
|
|
12245
12370
|
TOOL_SEARCH_TOOL_NAME,
|
|
12246
12371
|
TaskCreateTool2 as TaskCreateTool,
|
|
@@ -12314,6 +12439,7 @@ export {
|
|
|
12314
12439
|
currentContextTokens,
|
|
12315
12440
|
decideAndApply,
|
|
12316
12441
|
decideMode,
|
|
12442
|
+
defaultThinkingLevelFor,
|
|
12317
12443
|
detectBackend,
|
|
12318
12444
|
detectBackendFromEnv,
|
|
12319
12445
|
detectEnvironment,
|
|
@@ -12344,6 +12470,8 @@ export {
|
|
|
12344
12470
|
getNameRegistry,
|
|
12345
12471
|
getOrCreatePlanPath,
|
|
12346
12472
|
getSessionFilePath,
|
|
12473
|
+
getThinkingLevel,
|
|
12474
|
+
globalConfigPath,
|
|
12347
12475
|
handleCodeReviewCommand,
|
|
12348
12476
|
hasWorktreeChanges,
|
|
12349
12477
|
identitySection,
|
|
@@ -12362,6 +12490,7 @@ export {
|
|
|
12362
12490
|
isShutdownRequest,
|
|
12363
12491
|
isSpillReadback,
|
|
12364
12492
|
isToolResultContentBlock,
|
|
12493
|
+
isValidThinkingLevel,
|
|
12365
12494
|
listSessions,
|
|
12366
12495
|
load,
|
|
12367
12496
|
loadAgentDefinitions,
|
|
@@ -12384,7 +12513,6 @@ export {
|
|
|
12384
12513
|
memoryAge,
|
|
12385
12514
|
memoryAgeDays,
|
|
12386
12515
|
memoryFreshnessText,
|
|
12387
|
-
mergeConfig,
|
|
12388
12516
|
needsToolSearchBeta,
|
|
12389
12517
|
newRequestId,
|
|
12390
12518
|
newSessionId,
|
|
@@ -12443,7 +12571,9 @@ export {
|
|
|
12443
12571
|
teamConfigPath,
|
|
12444
12572
|
teamDir,
|
|
12445
12573
|
teamsBaseDir,
|
|
12574
|
+
thinkingBudgetForLevel,
|
|
12446
12575
|
toDisplayPreview,
|
|
12576
|
+
toReasoningEffort,
|
|
12447
12577
|
toTry,
|
|
12448
12578
|
toneStyleSection,
|
|
12449
12579
|
toolResultsToRecords,
|