@oxbit/cli 0.11.0 → 0.11.1
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/agent/dist/index.js +135 -97
- package/package.json +1 -1
- package/runtime/dist/index.js +2 -2
- package/runtime/package.json +1 -1
- package/web/dist/assets/{index-TC7_qqA1.css → index-CHlNlHrU.css} +1 -1
- package/web/dist/assets/{index-W9bbEyD_.js → index-X52PEMpo.js} +152 -152
- package/web/dist/assets/{typescript-DTI4y3t9.js → typescript-DLb7ioGk.js} +2 -2
- package/web/dist/index.html +2 -2
- package/web/dist/schemas/settings.v1.schema.json +3 -2
- package/web/dist/sdk/index.js +5 -2
package/agent/dist/index.js
CHANGED
|
@@ -7,33 +7,6 @@ import { randomBytes, createHash, randomUUID } from "node:crypto";
|
|
|
7
7
|
import { homedir } from "node:os";
|
|
8
8
|
import { spawn } from "node:child_process";
|
|
9
9
|
import { createServer } from "node:http";
|
|
10
|
-
const count = (...values) => values.find((value2) => Number.isSafeInteger(value2) && value2 > 0);
|
|
11
|
-
async function readText$1(models2, request, signal) {
|
|
12
|
-
let text = "";
|
|
13
|
-
for await (const chunk of models2.stream(request, signal)) text += chunk;
|
|
14
|
-
return text;
|
|
15
|
-
}
|
|
16
|
-
async function listModels(models2, endpoint, signal) {
|
|
17
|
-
const body = JSON.parse(await readText$1(models2, { ...endpoint, method: "GET", path: "/v1/models" }, signal));
|
|
18
|
-
if (!Array.isArray(body?.data)) throw new Error("The model list has no data array");
|
|
19
|
-
return body.data.filter((item) => typeof item?.id === "string" && item.id).slice(0, 1e3).map((item) => ({
|
|
20
|
-
id: item.id,
|
|
21
|
-
name: typeof item.display_name === "string" ? item.display_name : typeof item.name === "string" ? item.name : item.id,
|
|
22
|
-
contextWindow: count(item.max_input_tokens, item.context_length),
|
|
23
|
-
maxOutput: count(item.max_tokens, item.top_provider?.max_completion_tokens)
|
|
24
|
-
}));
|
|
25
|
-
}
|
|
26
|
-
function modelError(error) {
|
|
27
|
-
const { status: status2, body } = error ?? {};
|
|
28
|
-
if (typeof status2 !== "number") return error instanceof Error ? error : new Error(String(error));
|
|
29
|
-
let detail = typeof body === "string" ? body.trim().slice(0, 1e3) : "";
|
|
30
|
-
try {
|
|
31
|
-
const parsed = JSON.parse(detail);
|
|
32
|
-
detail = parsed?.error?.message ?? parsed?.message ?? detail;
|
|
33
|
-
} catch {
|
|
34
|
-
}
|
|
35
|
-
return new Error(`Model API error ${status2}${detail ? `: ${detail}` : ""}`);
|
|
36
|
-
}
|
|
37
10
|
async function* lines(chunks) {
|
|
38
11
|
let buffer = "";
|
|
39
12
|
for await (const chunk of chunks) {
|
|
@@ -76,6 +49,137 @@ async function* jsonEvents(chunks) {
|
|
|
76
49
|
if (value2 && typeof value2 === "object") yield { ...event && !value2.type ? { type: event } : {}, ...value2 };
|
|
77
50
|
}
|
|
78
51
|
}
|
|
52
|
+
function replayable(items) {
|
|
53
|
+
const kept = items.filter((item) => item.type !== "reasoning" || item.encrypted_content);
|
|
54
|
+
return kept.length === items.length ? items : kept.map((item) => item.type === "reasoning" ? item : Object.fromEntries(Object.entries(item).filter(([key]) => key !== "id")));
|
|
55
|
+
}
|
|
56
|
+
function responsesBody({ model, system, turns, tools, effort }, replay2) {
|
|
57
|
+
const input2 = [];
|
|
58
|
+
for (const turn of turns) {
|
|
59
|
+
if (turn.role === "user") input2.push({ type: "message", role: "user", content: [{ type: "input_text", text: turn.text }] });
|
|
60
|
+
else if (turn.role === "tool")
|
|
61
|
+
for (const result of turn.results) input2.push({ type: "function_call_output", call_id: result.id, output: result.output });
|
|
62
|
+
else if (turn.native && replay2.includes(turn.native.api)) input2.push(...replayable(turn.native.items));
|
|
63
|
+
else {
|
|
64
|
+
if (turn.text) input2.push({ type: "message", role: "assistant", content: turn.text });
|
|
65
|
+
for (const call of turn.calls) input2.push({ type: "function_call", call_id: call.id, name: call.name, arguments: call.arguments });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
model,
|
|
70
|
+
instructions: system,
|
|
71
|
+
input: input2,
|
|
72
|
+
stream: true,
|
|
73
|
+
store: false,
|
|
74
|
+
...tools.length ? { tools: tools.map((tool) => ({ type: "function", ...tool, strict: false })) } : {},
|
|
75
|
+
...effort ? { reasoning: { effort, summary: "auto" } } : {}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const openaiResponses = {
|
|
79
|
+
request: (input2) => ({ method: "POST", path: "/v1/responses", body: responsesBody(input2, ["openai"]) }),
|
|
80
|
+
async *events(chunks) {
|
|
81
|
+
const items = [];
|
|
82
|
+
for await (const event of jsonEvents(chunks)) {
|
|
83
|
+
switch (event.type) {
|
|
84
|
+
case "response.output_text.delta":
|
|
85
|
+
if (event.delta) yield { type: "text", text: event.delta };
|
|
86
|
+
break;
|
|
87
|
+
case "response.reasoning_summary_text.delta":
|
|
88
|
+
case "response.reasoning_text.delta":
|
|
89
|
+
if (event.delta) yield { type: "reasoning", text: event.delta };
|
|
90
|
+
break;
|
|
91
|
+
case "response.reasoning_summary_part.added":
|
|
92
|
+
if (event.summary_index > 0) yield { type: "reasoning", text: "\n\n" };
|
|
93
|
+
break;
|
|
94
|
+
case "response.output_item.done":
|
|
95
|
+
items[event.output_index ?? items.length] = event.item;
|
|
96
|
+
if (event.item?.type === "function_call")
|
|
97
|
+
yield { type: "tool_call", call: { id: event.item.call_id, name: event.item.name, arguments: event.item.arguments ?? "" } };
|
|
98
|
+
break;
|
|
99
|
+
case "response.completed":
|
|
100
|
+
case "response.incomplete": {
|
|
101
|
+
const { usage, incomplete_details: incomplete } = event.response ?? {};
|
|
102
|
+
if (usage) yield { type: "usage", input: usage.input_tokens ?? 0, output: usage.output_tokens ?? 0 };
|
|
103
|
+
const native = items.filter(Boolean);
|
|
104
|
+
const reason = native.some((item) => item.type === "function_call") ? "tool_use" : event.type === "response.completed" ? "end_turn" : incomplete?.reason === "content_filter" ? "refusal" : "max_tokens";
|
|
105
|
+
yield { type: "stop", reason, native };
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
case "response.failed":
|
|
109
|
+
throw new Error(event.response?.error?.message ?? "The model response failed");
|
|
110
|
+
case "error":
|
|
111
|
+
throw new Error(event.message ?? "The model stream failed");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const CHATGPT_CLIENT_VERSION = "0.162.1";
|
|
117
|
+
const CHATGPT_MODELS_PATH = `/codex/models?client_version=${CHATGPT_CLIENT_VERSION}`;
|
|
118
|
+
const WINDOW = { contextWindow: 272e3 };
|
|
119
|
+
const CHATGPT_MODELS = [
|
|
120
|
+
{ id: "gpt-6.1-sol", name: "GPT-6.1-Sol", ...WINDOW },
|
|
121
|
+
{ id: "gpt-6-astra", name: "GPT-6-Astra", ...WINDOW },
|
|
122
|
+
{ id: "gpt-6-sol", name: "GPT-6-Sol", ...WINDOW },
|
|
123
|
+
{ id: "gpt-6-luna", name: "GPT-6-Luna", ...WINDOW },
|
|
124
|
+
{ id: "gpt-5.6-sol", name: "GPT-5.6-Sol", ...WINDOW },
|
|
125
|
+
{ id: "gpt-5.6-terra", name: "GPT-5.6-Terra", ...WINDOW },
|
|
126
|
+
{ id: "gpt-5.6-luna", name: "GPT-5.6-Luna", ...WINDOW },
|
|
127
|
+
{ id: "gpt-5.5", name: "GPT-5.5", ...WINDOW }
|
|
128
|
+
];
|
|
129
|
+
const chatgptResponses = {
|
|
130
|
+
request: (input2) => ({
|
|
131
|
+
method: "POST",
|
|
132
|
+
path: "/codex/responses",
|
|
133
|
+
body: {
|
|
134
|
+
...responsesBody({ ...input2, system: input2.system || "You are a helpful assistant." }, ["openai", "chatgpt"]),
|
|
135
|
+
include: ["reasoning.encrypted_content"],
|
|
136
|
+
tool_choice: "auto"
|
|
137
|
+
}
|
|
138
|
+
}),
|
|
139
|
+
events: openaiResponses.events
|
|
140
|
+
};
|
|
141
|
+
const count = (...values) => values.find((value2) => Number.isSafeInteger(value2) && value2 > 0);
|
|
142
|
+
async function readText$1(models2, request, signal) {
|
|
143
|
+
let text = "";
|
|
144
|
+
for await (const chunk of models2.stream(request, signal)) text += chunk;
|
|
145
|
+
return text;
|
|
146
|
+
}
|
|
147
|
+
async function listModels(models2, endpoint, signal) {
|
|
148
|
+
if (endpoint.api === "chatgpt") return listChatGPTModels(models2, signal);
|
|
149
|
+
const body = JSON.parse(await readText$1(models2, { ...endpoint, method: "GET", path: "/v1/models" }, signal));
|
|
150
|
+
if (!Array.isArray(body?.data)) throw new Error("The model list has no data array");
|
|
151
|
+
return body.data.filter((item) => typeof item?.id === "string" && item.id).slice(0, 1e3).map((item) => ({
|
|
152
|
+
id: item.id,
|
|
153
|
+
name: typeof item.display_name === "string" ? item.display_name : typeof item.name === "string" ? item.name : item.id,
|
|
154
|
+
contextWindow: count(item.max_input_tokens, item.context_length),
|
|
155
|
+
maxOutput: count(item.max_tokens, item.top_provider?.max_completion_tokens)
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
async function listChatGPTModels(models2, signal) {
|
|
159
|
+
try {
|
|
160
|
+
const body = JSON.parse(await readText$1(models2, { api: "chatgpt", method: "GET", path: CHATGPT_MODELS_PATH }, signal));
|
|
161
|
+
const listed = (Array.isArray(body?.models) ? body.models : []).filter((item) => typeof item?.slug === "string" && item.slug && item.visibility === "list").sort((a, b) => (Number(a.priority) || 0) - (Number(b.priority) || 0)).map((item) => ({
|
|
162
|
+
id: item.slug,
|
|
163
|
+
name: typeof item.display_name === "string" && item.display_name ? item.display_name : item.slug,
|
|
164
|
+
contextWindow: count(item.context_window)
|
|
165
|
+
}));
|
|
166
|
+
if (listed.length) return listed;
|
|
167
|
+
} catch (error) {
|
|
168
|
+
if (signal?.aborted) throw error;
|
|
169
|
+
}
|
|
170
|
+
return CHATGPT_MODELS.map((model) => ({ ...model }));
|
|
171
|
+
}
|
|
172
|
+
function modelError(error) {
|
|
173
|
+
const { status: status2, body } = error ?? {};
|
|
174
|
+
if (typeof status2 !== "number") return error instanceof Error ? error : new Error(String(error));
|
|
175
|
+
let detail = typeof body === "string" ? body.trim().slice(0, 1e3) : "";
|
|
176
|
+
try {
|
|
177
|
+
const parsed = JSON.parse(detail);
|
|
178
|
+
detail = parsed?.error?.message ?? parsed?.message ?? detail;
|
|
179
|
+
} catch {
|
|
180
|
+
}
|
|
181
|
+
return new Error(`Model API error ${status2}${detail ? `: ${detail}` : ""}`);
|
|
182
|
+
}
|
|
79
183
|
const OUTPUT_LIMIT$1 = 1e5;
|
|
80
184
|
const BASH_TIMEOUT = 12e4;
|
|
81
185
|
const BASH_MAX_TIMEOUT = 6e5;
|
|
@@ -486,73 +590,6 @@ async function streamStep({ adapter, models: models2, endpoint, input: input2, s
|
|
|
486
590
|
}
|
|
487
591
|
return result;
|
|
488
592
|
}
|
|
489
|
-
function replayable(items) {
|
|
490
|
-
const kept = items.filter((item) => item.type !== "reasoning" || item.encrypted_content);
|
|
491
|
-
return kept.length === items.length ? items : kept.map((item) => item.type === "reasoning" ? item : Object.fromEntries(Object.entries(item).filter(([key]) => key !== "id")));
|
|
492
|
-
}
|
|
493
|
-
const openaiResponses = {
|
|
494
|
-
request({ model, system, turns, tools, effort }) {
|
|
495
|
-
const input2 = [];
|
|
496
|
-
for (const turn of turns) {
|
|
497
|
-
if (turn.role === "user") input2.push({ type: "message", role: "user", content: [{ type: "input_text", text: turn.text }] });
|
|
498
|
-
else if (turn.role === "tool")
|
|
499
|
-
for (const result of turn.results) input2.push({ type: "function_call_output", call_id: result.id, output: result.output });
|
|
500
|
-
else if (turn.native?.api === "openai") input2.push(...replayable(turn.native.items));
|
|
501
|
-
else {
|
|
502
|
-
if (turn.text) input2.push({ type: "message", role: "assistant", content: turn.text });
|
|
503
|
-
for (const call of turn.calls) input2.push({ type: "function_call", call_id: call.id, name: call.name, arguments: call.arguments });
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
return {
|
|
507
|
-
method: "POST",
|
|
508
|
-
path: "/v1/responses",
|
|
509
|
-
body: {
|
|
510
|
-
model,
|
|
511
|
-
instructions: system,
|
|
512
|
-
input: input2,
|
|
513
|
-
stream: true,
|
|
514
|
-
store: false,
|
|
515
|
-
...tools.length ? { tools: tools.map((tool) => ({ type: "function", ...tool, strict: false })) } : {},
|
|
516
|
-
...effort ? { reasoning: { effort, summary: "auto" } } : {}
|
|
517
|
-
}
|
|
518
|
-
};
|
|
519
|
-
},
|
|
520
|
-
async *events(chunks) {
|
|
521
|
-
const items = [];
|
|
522
|
-
for await (const event of jsonEvents(chunks)) {
|
|
523
|
-
switch (event.type) {
|
|
524
|
-
case "response.output_text.delta":
|
|
525
|
-
if (event.delta) yield { type: "text", text: event.delta };
|
|
526
|
-
break;
|
|
527
|
-
case "response.reasoning_summary_text.delta":
|
|
528
|
-
case "response.reasoning_text.delta":
|
|
529
|
-
if (event.delta) yield { type: "reasoning", text: event.delta };
|
|
530
|
-
break;
|
|
531
|
-
case "response.reasoning_summary_part.added":
|
|
532
|
-
if (event.summary_index > 0) yield { type: "reasoning", text: "\n\n" };
|
|
533
|
-
break;
|
|
534
|
-
case "response.output_item.done":
|
|
535
|
-
items[event.output_index ?? items.length] = event.item;
|
|
536
|
-
if (event.item?.type === "function_call")
|
|
537
|
-
yield { type: "tool_call", call: { id: event.item.call_id, name: event.item.name, arguments: event.item.arguments ?? "" } };
|
|
538
|
-
break;
|
|
539
|
-
case "response.completed":
|
|
540
|
-
case "response.incomplete": {
|
|
541
|
-
const { usage, incomplete_details: incomplete } = event.response ?? {};
|
|
542
|
-
if (usage) yield { type: "usage", input: usage.input_tokens ?? 0, output: usage.output_tokens ?? 0 };
|
|
543
|
-
const native = items.filter(Boolean);
|
|
544
|
-
const reason = native.some((item) => item.type === "function_call") ? "tool_use" : event.type === "response.completed" ? "end_turn" : incomplete?.reason === "content_filter" ? "refusal" : "max_tokens";
|
|
545
|
-
yield { type: "stop", reason, native };
|
|
546
|
-
return;
|
|
547
|
-
}
|
|
548
|
-
case "response.failed":
|
|
549
|
-
throw new Error(event.response?.error?.message ?? "The model response failed");
|
|
550
|
-
case "error":
|
|
551
|
-
throw new Error(event.message ?? "The model stream failed");
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
};
|
|
556
593
|
const STOP$1 = { stop: "end_turn", tool_calls: "tool_use", function_call: "tool_use", length: "max_tokens", content_filter: "refusal" };
|
|
557
594
|
function mergeDetails(details, fragments) {
|
|
558
595
|
if (!Array.isArray(fragments)) return;
|
|
@@ -937,7 +974,8 @@ Additional focus: ${focus}` : "");
|
|
|
937
974
|
const ADAPTERS = {
|
|
938
975
|
openai: openaiResponses,
|
|
939
976
|
"openai-compatible": chatCompletions,
|
|
940
|
-
anthropic: anthropicMessages
|
|
977
|
+
anthropic: anthropicMessages,
|
|
978
|
+
chatgpt: chatgptResponses
|
|
941
979
|
};
|
|
942
980
|
const MAX_STEPS = 64;
|
|
943
981
|
const CONTEXT_LIMIT$1 = 1e4;
|
|
@@ -1392,7 +1430,7 @@ class Agent {
|
|
|
1392
1430
|
if (cwd !== normalize(this.host.root) && !this.host.filesystemFor) throw new Error(`This agent serves ${this.host.root} only`);
|
|
1393
1431
|
return cwd;
|
|
1394
1432
|
}
|
|
1395
|
-
/** The host catalog or `
|
|
1433
|
+
/** The host catalog or `listModels`, with `model` first when the list lacks it. */
|
|
1396
1434
|
async models(model) {
|
|
1397
1435
|
const listed = this.host.catalog ? Promise.resolve().then(() => this.host.catalog()) : this.catalog ??= listModels(this.service(), this.host.endpoint());
|
|
1398
1436
|
const catalog = await listed.catch(() => {
|
|
@@ -4373,7 +4411,7 @@ class FileCatalogCache {
|
|
|
4373
4411
|
}
|
|
4374
4412
|
}
|
|
4375
4413
|
function agentVersion() {
|
|
4376
|
-
return "0.11.
|
|
4414
|
+
return "0.11.1";
|
|
4377
4415
|
}
|
|
4378
4416
|
const clone = (message2) => JSON.parse(JSON.stringify(message2));
|
|
4379
4417
|
class MemoryConnection {
|
package/package.json
CHANGED
package/runtime/dist/index.js
CHANGED
|
@@ -933,7 +933,7 @@ const $id$1 = "https://oxbit.dev/schemas/settings.v1.schema.json";
|
|
|
933
933
|
const title$2 = "Oxbit Settings";
|
|
934
934
|
const description$2 = "User, private workspace and repository settings. Literal dotted IDs; objects merge recursively, arrays and scalar values replace. Unrecognized extension settings are preserved. Null is a value, not a reset, and must be valid for its setting.";
|
|
935
935
|
const type$2 = "object";
|
|
936
|
-
const properties$2 = /* @__PURE__ */ JSON.parse(`{"$schema":{"type":"string","description":"JSON Schema URI. Ignored when merging effective preferences."},"agentACP.provider":{"title":"Default agent","description":"A built-in agent ID, an ACP Registry agent ID, or custom.","type":"string","default":"codex"},"agentACP.useModifierToSend":{"title":"Send with Ctrl/Cmd+Enter only","description":"Enter inserts a new line and Ctrl/Cmd+Enter sends the message.","type":"boolean","default":false},"agentACP.notifications":{"title":"Agent desktop notifications","description":"Show a system notification when the agent needs input or finishes while Oxbit is in the background.","type":"string","default":"whenHidden","enum":["whenHidden","never"]},"agentACP.autoApplyEdits":{"title":"Auto-apply agent edits","description":"New conversations save agent file changes without review. Undo stays available, and permission prompts still ask.","type":"boolean","default":false},"agentACP.generateTitles":{"title":"Generate conversation titles","description":"When an agent does not name a conversation, ask the Oxbit Agent model for a short title after the first reply.","type":"boolean","default":true},"agentACP.oxbit-cli.command":{"title":"Oxbit Agent CLI executable","type":"string","default":"oxbit-agent"},"agentACP.oxbit-cli.args":{"title":"Oxbit Agent CLI arguments (JSON array)","type":"string","default":"[\\"acp\\"]"},"agentACP.codex.command":{"title":"Codex ACP executable","type":"string","default":"npx"},"agentACP.codex.args":{"title":"Codex ACP arguments (JSON array)","type":"string","default":"[\\"-y\\",\\"@agentclientprotocol/codex-acp@2.2.2\\"]"},"agentACP.claude.command":{"title":"Claude Agent executable","type":"string","default":"npx"},"agentACP.claude.args":{"title":"Claude Agent arguments (JSON array)","type":"string","default":"[\\"-y\\",\\"@agentclientprotocol/claude-agent-acp@0.89.1\\"]"},"agentACP.gemini.command":{"title":"Gemini CLI executable","type":"string","default":"npx"},"agentACP.gemini.args":{"title":"Gemini CLI arguments (JSON array)","type":"string","default":"[\\"-y\\",\\"@google/gemini-cli@0.63.0\\",\\"--acp\\"]"},"agentACP.copilot.command":{"title":"GitHub Copilot executable","type":"string","default":"npx"},"agentACP.copilot.args":{"title":"GitHub Copilot arguments (JSON array)","type":"string","default":"[\\"-y\\",\\"@github/copilot@1.0.95\\",\\"--acp\\"]"},"agentACP.cursor.command":{"title":"Cursor ACP executable","type":"string","default":"agent"},"agentACP.cursor.args":{"title":"Cursor ACP arguments (JSON array)","type":"string","default":"[\\"acp\\"]"},"agentACP.amp.command":{"title":"Amp Agent ACP executable","type":"string","default":"npx"},"agentACP.amp.args":{"title":"Amp Agent ACP arguments (JSON array)","type":"string","default":"[\\"-y\\",\\"amp-acp@0.10.0\\"]"},"agentACP.custom.name":{"title":"Custom agent name","type":"string","default":""},"agentACP.custom.command":{"title":"Custom agent executable","type":"string","default":""},"agentACP.custom.args":{"title":"Custom agent arguments (JSON array)","type":"string","default":"[]"},"agentACP.oxbit.api":{"title":"Oxbit Agent API","description":"openai uses the Responses API, anthropic the Messages API, and openai-compatible Chat Completions at the base URL.","type":"string","default":"openai","enum":["openai","anthropic","openai-compatible"]},"agentACP.oxbit.baseUrl":{"title":"Oxbit Agent base URL","description":"Origin and path prefix for openai-compatible, for example https://openrouter.ai/api.","type":"string","default":""},"agentACP.oxbit.model":{"title":"Oxbit Agent model","description":"Model ID for new conversations.","type":"string","default":""},"workbench.keymap":{"title":"Keymap","description":"Keyboard layout applied on top of the Oxbit defaults. User keybindings always win.","type":"string","default":"default","enum":["default","vscode","jetbrains","macos","sublime","atom","visual-studio","emacs"]},"runtime.keepAlive":{"title":"Keep Runtime Alive","description":"How long a runtime Oxbit started keeps running after the last client disconnects or its connection heartbeats stop. Terminals and tasks continue while it runs.","type":"string","default":"75s","enum":["75s","15m","1h","8h","untilStopped"]},"runtime.autoReconnect":{"title":"Reconnect Automatically","description":"Reconnect to the runtime after the connection drops, including when the iOS app returns to the foreground.","type":"boolean","default":true},"workbench.tooltipDelay":{"title":"Tooltip Delay","description":"Delay in milliseconds before showing a tooltip on hover. Keyboard focus shows tooltips immediately.","type":"number","default":400,"minimum":0,"maximum":5000},"workbench.colorTheme":{"title":"Color Theme","description":"Specifies the color theme used in the workbench.","type":"string","default":"Graphite (dark)"},"workbench.density":{"title":"Layout Density","description":"Controls row heights, padding and label sizes across the workbench.","type":"string","default":"compact","enum":["compact","comfortable"]},"workbench.sidebarLocation":{"title":"Sidebar Location","description":"Where the primary sidebar is docked.","type":"string","default":"left","enum":["left","right"]},"editor.fontFamily":{"title":"Font Family","description":"Controls the font family of the editor.","type":"string","default":"'JetBrains Mono', ui-monospace, monospace"},"editor.fontSize":{"title":"Font Size","description":"Font size in pixels.","type":"number","default":13,"minimum":8,"maximum":32},"editor.lineHeight":{"title":"Line Height","description":"Line height in pixels. 0 uses 1.55 × font size.","type":"number","default":20,"minimum":0,"maximum":60},"editor.fontLigatures":{"title":"Font Ligatures","description":"Enables font ligatures when the font supports them.","type":"boolean","default":false},"editor.tabSize":{"title":"Tab Size","description":"The number of spaces a tab is equal to.","type":"number","default":2,"minimum":1,"maximum":8},"editor.insertSpaces":{"title":"Insert Spaces","description":"Insert spaces when pressing Tab.","type":"boolean","default":true},"editor.detectIndentation":{"title":"Detect Indentation","description":"Detect Tab Size and Insert Spaces from file contents on open.","type":"boolean","default":true},"editor.renderIndentGuides":{"title":"Indentation Guides","description":"Render vertical guides for each indent level.","type":"boolean","default":true},"editor.wordWrap":{"title":"Word Wrap","description":"Controls how lines should wrap.","type":"string","default":"off","enum":["off","on","bounded"]},"editor.renderWhitespace":{"title":"Render Whitespace","description":"Controls how the editor renders whitespace characters.","type":"string","default":"selection","enum":["none","boundary","selection","all"]},"editor.cursorBlinking":{"title":"Cursor Blinking","description":"Cursor animation style.","type":"string","default":"blink","enum":["blink","smooth","phase","solid"]},"editor.minimap":{"title":"Minimap","description":"Show a minimap of the document.","type":"boolean","default":false},"files.autoSave":{"title":"Auto Save","description":"Controls auto save of editors that have unsaved changes.","type":"string","default":"off","enum":["off","afterDelay","onFocusChange","onWindowChange"]},"files.autoSaveDelay":{"title":"Auto Save Delay","description":"Delay in milliseconds after which an editor is saved automatically. Applies when Auto Save is afterDelay.","type":"number","default":1000,"minimum":100,"maximum":60000},"files.trimTrailingWhitespace":{"title":"Trim Trailing Whitespace","description":"Remove trailing whitespace when saving.","type":"boolean","default":true},"editor.formatOnSave":{"title":"Format On Save","description":"Format a file on save. A formatter must be available.","type":"boolean","default":false},"editor.defaultFormatter":{"title":"Default Formatter","description":"Formatter used when several are available.","type":"string","default":"oxbit.prettier","anyOf":[{"enum":["oxbit.prettier","oxbit.builtin-ts"]},{"type":"string"}]},"terminal.fontSize":{"title":"Terminal Font Size","description":"Font size in pixels for the terminal.","type":"number","default":12,"minimum":8,"maximum":32},"terminal.scrollback":{"title":"Scrollback","description":"Maximum number of lines kept in the terminal buffer.","type":"number","default":5000,"minimum":100,"maximum":100000},"terminal.confirmOnKill":{"title":"Confirm On Kill","description":"Ask before killing a terminal with a running process.","type":"boolean","default":true},"scm.autoFetch":{"title":"Auto Fetch","description":"Periodically fetch from the default remote.","type":"boolean","default":true},"scm.diffLayout":{"title":"Diff Layout","description":"Default layout for diff editors.","type":"string","default":"side-by-side","enum":["side-by-side","inline"]},"files.associations":{"title":"File Associations","description":"Map filename or workspace-relative glob patterns to language IDs. Explicit associations take precedence over built-in detection.","type":"object","default":{},"propertyNames":{"minLength":1,"maxLength":1024},"additionalProperties":{"type":"string","pattern":"^[\\\\w+-]+$"}},"languageServers":{"title":"Language Servers","description":"Configure enabled state, selectors, rootMarkers, executable, args, env, initializationOptions, settings, and priority by server ID. Servers install on first use in a trusted runtime. License keys belong in the runtime-local credential file.","type":"object","default":{},"propertyNames":{"pattern":"^[a-zA-Z0-9._-]+$"},"additionalProperties":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable this language server."},"selectors":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string"},"pattern":{"type":"string"},"scheme":{"const":"file"}},"additionalProperties":false,"minProperties":1}},"rootMarkers":{"type":"array","items":{"type":"string","pattern":"^(?!/)(?!.*\\\\\\\\)(?!.*(?:^|/)\\\\.\\\\.(?:/|$))[^\\\\u0000]+$","minLength":1}},"executable":{"type":"string","pattern":"^[^\\\\u0000]*$","minLength":1},"args":{"type":"array","items":{"type":"string","pattern":"^[^\\\\u0000]*$"}},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","pattern":"^[^\\\\u0000]*$"}},"initializationOptions":{"type":"object","additionalProperties":true,"description":"Server-specific initialization options. Store license credentials in the runtime credential file."},"settings":{"type":"object","additionalProperties":true,"description":"Server-specific configuration; nested objects merge across files."},"priority":{"type":"number"}},"additionalProperties":false}},"ui.fontFamily":{"title":"UI Font Family","description":"Overrides theme typography. Reset restores the theme value.","type":"string","default":""},"ui.fontSize":{"title":"UI Font Size","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":12,"minimum":8,"maximum":72},"ui.fontWeight":{"title":"UI Font Weight","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":400,"minimum":100,"maximum":900},"ui.fontStyle":{"title":"UI Font Style","description":"Overrides theme typography. Reset restores the theme value.","type":"string","default":"normal","enum":["normal","italic","oblique"]},"ui.lineHeight":{"title":"UI Line Height","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":1.4,"minimum":1,"maximum":3},"ui.letterSpacing":{"title":"UI Letter Spacing","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":0,"minimum":-3,"maximum":10},"ui.fontLigatures":{"title":"UI Font Ligatures","description":"Overrides theme typography. Reset restores the theme value.","type":"boolean","default":false},"terminal.fontFamily":{"title":"Terminal Font Family","description":"Overrides theme typography. Reset restores the theme value.","type":"string","default":""},"terminal.fontWeight":{"title":"Terminal Font Weight","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":400,"minimum":100,"maximum":900},"terminal.fontStyle":{"title":"Terminal Font Style","description":"Overrides theme typography. Reset restores the theme value.","type":"string","default":"normal","enum":["normal","italic","oblique"]},"terminal.lineHeight":{"title":"Terminal Line Height","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":1,"minimum":1,"maximum":3},"terminal.letterSpacing":{"title":"Terminal Letter Spacing","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":0,"minimum":-3,"maximum":10},"terminal.fontLigatures":{"title":"Terminal Font Ligatures","description":"Overrides theme typography. Reset restores the theme value.","type":"boolean","default":false},"workbench.iconTheme":{"title":"File Icon Theme","description":"Select a locally installed icon theme. Unavailable selections use Oxbit defaults until restored.","type":"string","default":"oxbit.default"},"workbench.productIconTheme":{"title":"Product Icon Theme","description":"Select a locally installed icon theme. Unavailable selections use Oxbit defaults until restored.","type":"string","default":"oxbit.default"},"editor.semanticHighlighting":{"title":"Semantic Highlighting","description":"Color symbols using language server information.","type":"boolean","default":true},"editor.inlayHints.types":{"title":"Type Inlay Hints","description":"Show supported type hints in the visible editor.","type":"boolean","default":true},"editor.inlayHints.parameters":{"title":"Parameter Inlay Hints","description":"Show supported parameter hints in the visible editor.","type":"boolean","default":true},"editor.largeFileIntelligence":{"title":"Large File Intelligence","description":"Allow full semantic highlighting and inlay hints for files larger than 1 MiB.","type":"boolean","default":false},"workbench.locale":{"title":"Display Language","type":"string","default":"en","enum":["en","de","es","ja","zh"]},"workbench.reducedMotion":{"title":"Reduced Motion","type":"boolean","default":false},"desktop.projects.openBehavior":{"title":"Open projects","type":"string","default":"currentWindow","enum":["currentWindow","newWindow"]},"desktop.tools.gitPath":{"title":"git executable path","type":"string","default":""},"desktop.tools.ghPath":{"title":"gh executable path","type":"string","default":""},"project.intelligence":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Index project dependencies, imports and related files."},"exclude":{"type":"array","items":{"type":"string","maxLength":1024},"default":[]},"maxFiles":{"type":"integer","minimum":1,"maximum":100000,"default":20000},"maxFileBytes":{"type":"integer","minimum":1,"maximum":5242880,"default":1048576}},"additionalProperties":false,"title":"Project Intelligence","description":"Partial overrides of project.json intelligence. Objects merge across files."},"project.schemas":{"type":"object","properties":{"catalog":{"type":"boolean","default":true,"description":"Discover file schemas through SchemaStore. Bundled Oxbit settings support remains available."},"download":{"type":"boolean","default":true,"description":"Allow remote schema downloads; cached and bundled schemas work offline."},"associations":{"type":"array","maxItems":1000,"default":[],"items":{"type":"object","properties":{"url":{"type":"string","minLength":1,"description":"Schema URL or workspace file URI."},"fileMatch":{"type":"array","items":{"type":"string","maxLength":1024}},"schema":{"type":["object","boolean"],"description":"An inline JSON Schema."}},"additionalProperties":false,"anyOf":[{"required":["url"]},{"required":["schema"]}]}}},"additionalProperties":false,"title":"JSON Schemas","description":"Partial overrides of project.json schemas. Association arrays replace lower arrays."}}`);
|
|
936
|
+
const properties$2 = /* @__PURE__ */ JSON.parse(`{"$schema":{"type":"string","description":"JSON Schema URI. Ignored when merging effective preferences."},"agentACP.provider":{"title":"Default agent","description":"A built-in agent ID, an ACP Registry agent ID, or custom.","type":"string","default":"codex"},"agentACP.useModifierToSend":{"title":"Send with Ctrl/Cmd+Enter only","description":"Enter inserts a new line and Ctrl/Cmd+Enter sends the message.","type":"boolean","default":false},"agentACP.notifications":{"title":"Agent desktop notifications","description":"Show a system notification when the agent needs input or finishes while Oxbit is in the background.","type":"string","default":"whenHidden","enum":["whenHidden","never"]},"agentACP.autoApplyEdits":{"title":"Auto-apply agent edits","description":"New conversations save agent file changes without review. Undo stays available, and permission prompts still ask.","type":"boolean","default":false},"agentACP.generateTitles":{"title":"Generate conversation titles","description":"When an agent does not name a conversation, ask the Oxbit Agent model for a short title after the first reply.","type":"boolean","default":true},"agentACP.oxbit-cli.command":{"title":"Oxbit Agent CLI executable","type":"string","default":"oxbit-agent"},"agentACP.oxbit-cli.args":{"title":"Oxbit Agent CLI arguments (JSON array)","type":"string","default":"[\\"acp\\"]"},"agentACP.codex.command":{"title":"Codex ACP executable","type":"string","default":"npx"},"agentACP.codex.args":{"title":"Codex ACP arguments (JSON array)","type":"string","default":"[\\"-y\\",\\"@agentclientprotocol/codex-acp@2.2.2\\"]"},"agentACP.claude.command":{"title":"Claude Agent executable","type":"string","default":"npx"},"agentACP.claude.args":{"title":"Claude Agent arguments (JSON array)","type":"string","default":"[\\"-y\\",\\"@agentclientprotocol/claude-agent-acp@0.89.1\\"]"},"agentACP.gemini.command":{"title":"Gemini CLI executable","type":"string","default":"npx"},"agentACP.gemini.args":{"title":"Gemini CLI arguments (JSON array)","type":"string","default":"[\\"-y\\",\\"@google/gemini-cli@0.63.0\\",\\"--acp\\"]"},"agentACP.copilot.command":{"title":"GitHub Copilot executable","type":"string","default":"npx"},"agentACP.copilot.args":{"title":"GitHub Copilot arguments (JSON array)","type":"string","default":"[\\"-y\\",\\"@github/copilot@1.0.95\\",\\"--acp\\"]"},"agentACP.cursor.command":{"title":"Cursor ACP executable","type":"string","default":"agent"},"agentACP.cursor.args":{"title":"Cursor ACP arguments (JSON array)","type":"string","default":"[\\"acp\\"]"},"agentACP.amp.command":{"title":"Amp Agent ACP executable","type":"string","default":"npx"},"agentACP.amp.args":{"title":"Amp Agent ACP arguments (JSON array)","type":"string","default":"[\\"-y\\",\\"amp-acp@0.10.0\\"]"},"agentACP.custom.name":{"title":"Custom agent name","type":"string","default":""},"agentACP.custom.command":{"title":"Custom agent executable","type":"string","default":""},"agentACP.custom.args":{"title":"Custom agent arguments (JSON array)","type":"string","default":"[]"},"agentACP.oxbit.api":{"title":"Oxbit Agent API","description":"openai uses the Responses API, anthropic the Messages API, openai-compatible Chat Completions at the base URL, and chatgpt the ChatGPT plan's Codex models after a ChatGPT sign-in.","type":"string","default":"openai","enum":["openai","anthropic","openai-compatible","chatgpt"]},"agentACP.oxbit.baseUrl":{"title":"Oxbit Agent base URL","description":"Origin and path prefix for openai-compatible, for example https://openrouter.ai/api.","type":"string","default":""},"agentACP.oxbit.model":{"title":"Oxbit Agent model","description":"Model ID for new conversations.","type":"string","default":""},"workbench.keymap":{"title":"Keymap","description":"Keyboard layout applied on top of the Oxbit defaults. User keybindings always win.","type":"string","default":"default","enum":["default","vscode","jetbrains","macos","sublime","atom","visual-studio","emacs"]},"runtime.keepAlive":{"title":"Keep Runtime Alive","description":"How long a runtime Oxbit started keeps running after the last client disconnects or its connection heartbeats stop. Terminals and tasks continue while it runs.","type":"string","default":"75s","enum":["75s","15m","1h","8h","untilStopped"]},"runtime.autoReconnect":{"title":"Reconnect Automatically","description":"Reconnect to the runtime after the connection drops, including when the iOS app returns to the foreground.","type":"boolean","default":true},"workbench.tooltipDelay":{"title":"Tooltip Delay","description":"Delay in milliseconds before showing a tooltip on hover. Keyboard focus shows tooltips immediately.","type":"number","default":400,"minimum":0,"maximum":5000},"workbench.colorTheme":{"title":"Color Theme","description":"Specifies the color theme used in the workbench.","type":"string","default":"Graphite (dark)"},"workbench.density":{"title":"Layout Density","description":"Controls row heights, padding and label sizes across the workbench.","type":"string","default":"compact","enum":["compact","comfortable"]},"workbench.sidebarLocation":{"title":"Sidebar Location","description":"Where the primary sidebar is docked.","type":"string","default":"left","enum":["left","right"]},"editor.fontFamily":{"title":"Font Family","description":"Controls the font family of the editor.","type":"string","default":"'JetBrains Mono', ui-monospace, monospace"},"editor.fontSize":{"title":"Font Size","description":"Font size in pixels.","type":"number","default":13,"minimum":8,"maximum":32},"editor.lineHeight":{"title":"Line Height","description":"Line height in pixels. 0 uses 1.55 × font size.","type":"number","default":20,"minimum":0,"maximum":60},"editor.fontLigatures":{"title":"Font Ligatures","description":"Enables font ligatures when the font supports them.","type":"boolean","default":false},"editor.tabSize":{"title":"Tab Size","description":"The number of spaces a tab is equal to.","type":"number","default":2,"minimum":1,"maximum":8},"editor.insertSpaces":{"title":"Insert Spaces","description":"Insert spaces when pressing Tab.","type":"boolean","default":true},"editor.detectIndentation":{"title":"Detect Indentation","description":"Detect Tab Size and Insert Spaces from file contents on open.","type":"boolean","default":true},"editor.renderIndentGuides":{"title":"Indentation Guides","description":"Render vertical guides for each indent level.","type":"boolean","default":true},"editor.wordWrap":{"title":"Word Wrap","description":"Controls how lines should wrap.","type":"string","default":"off","enum":["off","on","bounded"]},"editor.renderWhitespace":{"title":"Render Whitespace","description":"Controls how the editor renders whitespace characters.","type":"string","default":"selection","enum":["none","boundary","selection","all"]},"editor.cursorBlinking":{"title":"Cursor Blinking","description":"Cursor animation style.","type":"string","default":"blink","enum":["blink","smooth","phase","solid"]},"editor.minimap":{"title":"Minimap","description":"Show a minimap of the document.","type":"boolean","default":false},"files.autoSave":{"title":"Auto Save","description":"Controls auto save of editors that have unsaved changes.","type":"string","default":"off","enum":["off","afterDelay","onFocusChange","onWindowChange"]},"files.autoSaveDelay":{"title":"Auto Save Delay","description":"Delay in milliseconds after which an editor is saved automatically. Applies when Auto Save is afterDelay.","type":"number","default":1000,"minimum":100,"maximum":60000},"files.trimTrailingWhitespace":{"title":"Trim Trailing Whitespace","description":"Remove trailing whitespace when saving.","type":"boolean","default":true},"editor.formatOnSave":{"title":"Format On Save","description":"Format a file on save. A formatter must be available.","type":"boolean","default":false},"editor.defaultFormatter":{"title":"Default Formatter","description":"Formatter used when several are available.","type":"string","default":"oxbit.prettier","anyOf":[{"enum":["oxbit.prettier","oxbit.builtin-ts"]},{"type":"string"}]},"terminal.fontSize":{"title":"Terminal Font Size","description":"Font size in pixels for the terminal.","type":"number","default":12,"minimum":8,"maximum":32},"terminal.scrollback":{"title":"Scrollback","description":"Maximum number of lines kept in the terminal buffer.","type":"number","default":5000,"minimum":100,"maximum":100000},"terminal.confirmOnKill":{"title":"Confirm On Kill","description":"Ask before killing a terminal with a running process.","type":"boolean","default":true},"scm.autoFetch":{"title":"Auto Fetch","description":"Periodically fetch from the default remote.","type":"boolean","default":true},"scm.diffLayout":{"title":"Diff Layout","description":"Default layout for diff editors.","type":"string","default":"side-by-side","enum":["side-by-side","inline"]},"files.associations":{"title":"File Associations","description":"Map filename or workspace-relative glob patterns to language IDs. Explicit associations take precedence over built-in detection.","type":"object","default":{},"propertyNames":{"minLength":1,"maxLength":1024},"additionalProperties":{"type":"string","pattern":"^[\\\\w+-]+$"}},"languageServers":{"title":"Language Servers","description":"Configure enabled state, selectors, rootMarkers, executable, args, env, initializationOptions, settings, and priority by server ID. Servers install on first use in a trusted runtime. License keys belong in the runtime-local credential file.","type":"object","default":{},"propertyNames":{"pattern":"^[a-zA-Z0-9._-]+$"},"additionalProperties":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable this language server."},"selectors":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string"},"pattern":{"type":"string"},"scheme":{"const":"file"}},"additionalProperties":false,"minProperties":1}},"rootMarkers":{"type":"array","items":{"type":"string","pattern":"^(?!/)(?!.*\\\\\\\\)(?!.*(?:^|/)\\\\.\\\\.(?:/|$))[^\\\\u0000]+$","minLength":1}},"executable":{"type":"string","pattern":"^[^\\\\u0000]*$","minLength":1},"args":{"type":"array","items":{"type":"string","pattern":"^[^\\\\u0000]*$"}},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","pattern":"^[^\\\\u0000]*$"}},"initializationOptions":{"type":"object","additionalProperties":true,"description":"Server-specific initialization options. Store license credentials in the runtime credential file."},"settings":{"type":"object","additionalProperties":true,"description":"Server-specific configuration; nested objects merge across files."},"priority":{"type":"number"}},"additionalProperties":false}},"ui.fontFamily":{"title":"UI Font Family","description":"Overrides theme typography. Reset restores the theme value.","type":"string","default":""},"ui.fontSize":{"title":"UI Font Size","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":12,"minimum":8,"maximum":72},"ui.fontWeight":{"title":"UI Font Weight","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":400,"minimum":100,"maximum":900},"ui.fontStyle":{"title":"UI Font Style","description":"Overrides theme typography. Reset restores the theme value.","type":"string","default":"normal","enum":["normal","italic","oblique"]},"ui.lineHeight":{"title":"UI Line Height","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":1.4,"minimum":1,"maximum":3},"ui.letterSpacing":{"title":"UI Letter Spacing","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":0,"minimum":-3,"maximum":10},"ui.fontLigatures":{"title":"UI Font Ligatures","description":"Overrides theme typography. Reset restores the theme value.","type":"boolean","default":false},"terminal.fontFamily":{"title":"Terminal Font Family","description":"Overrides theme typography. Reset restores the theme value.","type":"string","default":""},"terminal.fontWeight":{"title":"Terminal Font Weight","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":400,"minimum":100,"maximum":900},"terminal.fontStyle":{"title":"Terminal Font Style","description":"Overrides theme typography. Reset restores the theme value.","type":"string","default":"normal","enum":["normal","italic","oblique"]},"terminal.lineHeight":{"title":"Terminal Line Height","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":1,"minimum":1,"maximum":3},"terminal.letterSpacing":{"title":"Terminal Letter Spacing","description":"Overrides theme typography. Reset restores the theme value.","type":"number","default":0,"minimum":-3,"maximum":10},"terminal.fontLigatures":{"title":"Terminal Font Ligatures","description":"Overrides theme typography. Reset restores the theme value.","type":"boolean","default":false},"workbench.iconTheme":{"title":"File Icon Theme","description":"Select a locally installed icon theme. Unavailable selections use Oxbit defaults until restored.","type":"string","default":"oxbit.default"},"workbench.productIconTheme":{"title":"Product Icon Theme","description":"Select a locally installed icon theme. Unavailable selections use Oxbit defaults until restored.","type":"string","default":"oxbit.default"},"editor.semanticHighlighting":{"title":"Semantic Highlighting","description":"Color symbols using language server information.","type":"boolean","default":true},"editor.inlayHints.types":{"title":"Type Inlay Hints","description":"Show supported type hints in the visible editor.","type":"boolean","default":true},"editor.inlayHints.parameters":{"title":"Parameter Inlay Hints","description":"Show supported parameter hints in the visible editor.","type":"boolean","default":true},"editor.largeFileIntelligence":{"title":"Large File Intelligence","description":"Allow full semantic highlighting and inlay hints for files larger than 1 MiB.","type":"boolean","default":false},"workbench.locale":{"title":"Display Language","type":"string","default":"en","enum":["en","de","es","ja","zh"]},"workbench.reducedMotion":{"title":"Reduced Motion","type":"boolean","default":false},"desktop.projects.openBehavior":{"title":"Open projects","type":"string","default":"currentWindow","enum":["currentWindow","newWindow"]},"desktop.tools.gitPath":{"title":"git executable path","type":"string","default":""},"desktop.tools.ghPath":{"title":"gh executable path","type":"string","default":""},"project.intelligence":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Index project dependencies, imports and related files."},"exclude":{"type":"array","items":{"type":"string","maxLength":1024},"default":[]},"maxFiles":{"type":"integer","minimum":1,"maximum":100000,"default":20000},"maxFileBytes":{"type":"integer","minimum":1,"maximum":5242880,"default":1048576}},"additionalProperties":false,"title":"Project Intelligence","description":"Partial overrides of project.json intelligence. Objects merge across files."},"project.schemas":{"type":"object","properties":{"catalog":{"type":"boolean","default":true,"description":"Discover file schemas through SchemaStore. Bundled Oxbit settings support remains available."},"download":{"type":"boolean","default":true,"description":"Allow remote schema downloads; cached and bundled schemas work offline."},"associations":{"type":"array","maxItems":1000,"default":[],"items":{"type":"object","properties":{"url":{"type":"string","minLength":1,"description":"Schema URL or workspace file URI."},"fileMatch":{"type":"array","items":{"type":"string","maxLength":1024}},"schema":{"type":["object","boolean"],"description":"An inline JSON Schema."}},"additionalProperties":false,"anyOf":[{"required":["url"]},{"required":["schema"]}]}}},"additionalProperties":false,"title":"JSON Schemas","description":"Partial overrides of project.json schemas. Association arrays replace lower arrays."}}`);
|
|
937
937
|
const propertyNames = { "anyOf": [{ "not": { "pattern": "^\\[.*\\]$" } }, { "pattern": "^\\[[^\\[\\]]+\\]$" }] };
|
|
938
938
|
const patternProperties = { "^\\[[^\\[\\]]+\\]$": { "$ref": "#/definitions/languageOverrides" } };
|
|
939
939
|
const additionalProperties$1 = true;
|
|
@@ -7535,7 +7535,7 @@ class SubagentRegistry {
|
|
|
7535
7535
|
let cached;
|
|
7536
7536
|
function runtimeVersion() {
|
|
7537
7537
|
if (cached) return cached;
|
|
7538
|
-
return cached = "0.11.
|
|
7538
|
+
return cached = "0.11.1";
|
|
7539
7539
|
}
|
|
7540
7540
|
const MAX_REQUEST_BYTES = 1024 * 1024;
|
|
7541
7541
|
const MAX_CONCURRENT_REQUESTS = 16;
|