@openchambery/web 1.19.15-beta.4 → 1.19.15

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.
Files changed (52) hide show
  1. package/dist/assets/{AssistantView-bxT9mr97.js → AssistantView-xdL1EvpR.js} +2 -2
  2. package/dist/assets/{DiagramView-DJPrdklU.js → DiagramView-DPgkYU-_.js} +1 -1
  3. package/dist/assets/MarkdownRenderer-CP7UVZdr.js +2 -0
  4. package/dist/assets/{MarkdownRendererImpl-CBdwjEMH.js → MarkdownRendererImpl-BB1Q1RWk.js} +1 -1
  5. package/dist/assets/{MarkstreamRendererImpl-CHwYXkzv.js → MarkstreamRendererImpl-BjQrUIcq.js} +1 -1
  6. package/dist/assets/{MobileDetailNavigation-DLmATOi0.js → MobileDetailNavigation-Cyzs6cuR.js} +1 -1
  7. package/dist/assets/{MobileShareBridge-BbvoAeXg.js → MobileShareBridge-A-Z6jMUn.js} +1 -1
  8. package/dist/assets/MobileSurface-DjDa20gx.js +2 -0
  9. package/dist/assets/{MultiRunWindow-B7XPMkdc.js → MultiRunWindow-Cg5x-kJV.js} +1 -1
  10. package/dist/assets/{SettingsView-DABJm3u8.js → SettingsView-CYrTHDdp.js} +1 -1
  11. package/dist/assets/{SettingsWindow-D7n0m-52.js → SettingsWindow-CF-0Zgxr.js} +1 -1
  12. package/dist/assets/{TerminalView-DERnAkUi.js → TerminalView-CShou18D.js} +1 -1
  13. package/dist/assets/{ToolOutputDialog-Bx3plCCc.js → ToolOutputDialog-BvmxlNOa.js} +1 -1
  14. package/dist/assets/{appThemeRegistry-BdHiNL-J.js → appThemeRegistry-iqSTUpPj.js} +1 -1
  15. package/dist/assets/{fileMentionTouchSelection-B3sIMQCF.js → fileMentionTouchSelection-CddGH2aH.js} +1 -1
  16. package/dist/assets/{gitApi-CDc5ynsh.js → gitApi-BwuaHHRQ.js} +1 -1
  17. package/dist/assets/{insertionBoundaries-3yNePddt.js → insertionBoundaries-og6NBgdn.js} +1 -1
  18. package/dist/assets/{main-5GGJlyEB.js → main-31g3JiQx.js} +4 -4
  19. package/dist/assets/{main-C_21O0IU.js → main-VD-QBM47.js} +2 -2
  20. package/dist/assets/{miniChat-Ti_tFK96.js → miniChat-DwCMTamY.js} +2 -2
  21. package/dist/assets/{mobile-BUYP8DBL.js → mobile-C7q1yowe.js} +2 -2
  22. package/dist/assets/{multirun-CXazK6qX.js → multirun-DcN5T0lN.js} +1 -1
  23. package/dist/assets/{projectMeta-sXx-r5jn.js → projectMeta-moNJYCK4.js} +1 -1
  24. package/dist/assets/{renderElectronMiniChatApp-CLx8jNP4.js → renderElectronMiniChatApp-DVkgKA6A.js} +2 -2
  25. package/dist/assets/{renderMobileApp-BGKxwMFU.js → renderMobileApp-BgEXZhCO.js} +4 -4
  26. package/dist/assets/{runtimeConfig-YCy1Bcb2.js → runtimeConfig-B49cxtgI.js} +1 -1
  27. package/dist/assets/{runtimeEndpointReset-Dh3YvmRM.js → runtimeEndpointReset-9K_Dj1qR.js} +1 -1
  28. package/dist/assets/{sessionLookup-BzkA2pF0.js → sessionLookup-m3h8c4xR.js} +1 -1
  29. package/dist/assets/{useAppFontEffects-BLw4Av7h.js → useAppFontEffects-DRFi4TCE.js} +5 -5
  30. package/dist/assets/{useDesktopWindowControlsLayout-DNDIYvwP.js → useDesktopWindowControlsLayout-BdNR3zMN.js} +1 -1
  31. package/dist/assets/{useEffectiveDirectory-B_3sINMx.js → useEffectiveDirectory-COoPja_2.js} +1 -1
  32. package/dist/assets/{useMobileNavigationStore-BBVnSn9p.js → useMobileNavigationStore-Cn0-ozUB.js} +1 -1
  33. package/dist/assets/{useSessionAutoCleanup-SsGxsSRB.js → useSessionAutoCleanup-XwgyzsEd.js} +1 -1
  34. package/dist/assets/{useWorkerHighlightedLines-WCuVI6O_.js → useWorkerHighlightedLines-GgcqEoKY.js} +1 -1
  35. package/dist/index.html +2 -2
  36. package/dist/mini-chat.html +2 -2
  37. package/dist/mobile.html +2 -2
  38. package/package.json +1 -1
  39. package/server/lib/assistants/DOCUMENTATION.md +31 -6
  40. package/server/lib/assistants/contact-tools.js +1 -16
  41. package/server/lib/assistants/contact-tools.test.js +0 -27
  42. package/server/lib/assistants/harness.js +140 -133
  43. package/server/lib/assistants/harness.test.js +207 -43
  44. package/server/lib/assistants/service.js +10 -33
  45. package/server/lib/assistants/service.test.js +75 -3
  46. package/server/lib/llm/DOCUMENTATION.md +8 -1
  47. package/server/lib/llm/completions.js +5 -0
  48. package/server/lib/llm/completions.test.js +19 -0
  49. package/server/lib/llm/generate.js +5 -1
  50. package/server/lib/llm/generate.test.js +23 -0
  51. package/dist/assets/MarkdownRenderer-4gjE7aM5.js +0 -2
  52. package/dist/assets/MobileSurface-BBOx43VU.js +0 -2
@@ -75,6 +75,28 @@ const settleSend = async (service, assistantID, body) => {
75
75
  const assistantInput = { name: 'A', providerID: 'p', modelID: 'm' };
76
76
 
77
77
  describe('assistants service', () => {
78
+ it('rehydrates the saved thinking variant into contact turns and preserves it on a rejected write', async () => {
79
+ const directory = root();
80
+ const runContactTurn = vi.fn(async () => ({ text: 'done', bubbles: ['done'] }));
81
+ let service = setup(directory, {}, { runContactTurn });
82
+ try {
83
+ const assistant = service.createAssistant({ ...assistantInput, variant: 'high' });
84
+ service.close();
85
+ service = setup(directory, {}, { runContactTurn });
86
+ await settleSend(service, assistant.id, { messageID: 'variant-restored', parts: [{ type: 'text', text: 'hello' }] });
87
+ expect(runContactTurn.mock.calls[0][0].assistant.variant).toBe('high');
88
+ await expect(service.updateAssistant(assistant.id, { expectedRevision: 999, variant: 'low' })).rejects.toBeDefined();
89
+ await settleSend(service, assistant.id, { messageID: 'variant-after-conflict', parts: [{ type: 'text', text: 'hello' }] });
90
+ expect(runContactTurn.mock.calls[1][0].assistant.variant).toBe('high');
91
+ await service.updateAssistant(assistant.id, { expectedRevision: 1, variant: null });
92
+ await settleSend(service, assistant.id, { messageID: 'variant-default', parts: [{ type: 'text', text: 'hello' }] });
93
+ expect(runContactTurn.mock.calls[2][0].assistant.variant).toBeNull();
94
+ } finally {
95
+ service.close();
96
+ fs.rmSync(directory, { recursive: true, force: true });
97
+ }
98
+ });
99
+
78
100
  it.each(['steer', 'archive', 'delete'])('%s_session performs the real scoped SDK operation', async (operation) => {
79
101
  const directory = root();
80
102
  const mutate = vi.fn(async () => ({ data: true }));
@@ -3670,11 +3692,11 @@ describe('assistants service', () => {
3670
3692
  service.close();
3671
3693
  });
3672
3694
 
3673
- it('notifies like a contact SMS when a contact turn completes', async () => {
3695
+ it('notifies with the latest model message without replaying progress at completion', async () => {
3674
3696
  const onContactTurnComplete = vi.fn();
3675
3697
  const service = setup(root(), {}, {
3676
3698
  onContactTurnComplete,
3677
- runContactTurn: async () => ({ text: '我去找一下', bubbles: ['我去找一下', 'Opened a coding session.'] }),
3699
+ runContactTurn: async () => ({ text: '任务已安排。', bubbles: ['我去找一下', '任务已安排。'] }),
3678
3700
  });
3679
3701
  const assistant = service.createAssistant({ ...assistantInput, name: '大小白' });
3680
3702
  await settleSend(service, assistant.id, {
@@ -3686,7 +3708,7 @@ describe('assistants service', () => {
3686
3708
  name: '大小白',
3687
3709
  turnID: 'notify_1',
3688
3710
  status: 'complete',
3689
- body: '我去找一下\nOpened a coding session.',
3711
+ body: '任务已安排。',
3690
3712
  });
3691
3713
  service.close();
3692
3714
  });
@@ -4341,6 +4363,56 @@ describe('read_session referenced conversation', () => {
4341
4363
  service.close();
4342
4364
  });
4343
4365
 
4366
+ it('persists public model messages before generation and tool completion, with no final replay', async () => {
4367
+ const directory = root();
4368
+ const events = [];
4369
+ let releaseGeneration;
4370
+ let releaseTool;
4371
+ const generationGate = new Promise((resolve) => { releaseGeneration = resolve; });
4372
+ const toolGate = new Promise((resolve) => { releaseTool = resolve; });
4373
+ const prefix = '```openchamber-message\n{"text":"我先读一下会话,确认目前的进展。"}\n```\n';
4374
+ const tool = '```openchamber-tool\n{"name":"read_session","arguments":{"sessionID":"ses_progress"}}\n```';
4375
+ let calls = 0;
4376
+ const read = vi.fn(async () => {
4377
+ await toolGate;
4378
+ return { data: [] };
4379
+ });
4380
+ const service = setup(directory, {
4381
+ get: async () => ({ data: { id: 'ses_progress', directory } }), messages: read,
4382
+ }, {
4383
+ onContactTurnEvent: (event) => events.push(event),
4384
+ runContactTurn: realRunContactTurn,
4385
+ createChatCompletion: async ({ onTextDelta }) => {
4386
+ if (++calls === 1) {
4387
+ onTextDelta(prefix);
4388
+ await generationGate;
4389
+ onTextDelta(tool);
4390
+ return { text: prefix + tool };
4391
+ }
4392
+ return { text: '```openchamber-final\n{"status":"complete","text":"这个会话目前为空。"}\n```' };
4393
+ },
4394
+ });
4395
+ const assistant = service.createAssistant(assistantInput);
4396
+ try {
4397
+ await service.send(assistant.id, { messageID: 'live_public', parts: [{ type: 'text', text: '读一下会话' }] });
4398
+ await vi.waitFor(() => expect(service.contactMessages(assistant.id).messages.some((m) => m.text === '我先读一下会话,确认目前的进展。')).toBe(true));
4399
+ expect(read).not.toHaveBeenCalled();
4400
+ expect(service.snapshot().assistants.find((a) => a.id === assistant.id).working).toBe(true);
4401
+ expect(events.some((e) => e.type === 'openchamber:contact-turn-end')).toBe(false);
4402
+ releaseGeneration();
4403
+ await vi.waitFor(() => expect(read).toHaveBeenCalledTimes(1));
4404
+ // A fresh snapshot/history read while the actual tool is pending restores the same message.
4405
+ expect(service.contactMessages(assistant.id).messages.filter((m) => m.role === 'assistant').map((m) => m.text)).toEqual(['我先读一下会话,确认目前的进展。']);
4406
+ releaseTool();
4407
+ await service.whenContactTurnSettled('live_public');
4408
+ expect(service.contactMessages(assistant.id).messages.filter((m) => m.role === 'assistant').map((m) => m.text)).toEqual(['我先读一下会话,确认目前的进展。', '这个会话目前为空。']);
4409
+ const deltas = events.filter((e) => e.type === 'openchamber:contact-bubble-delta' && e.properties.done);
4410
+ expect(deltas.map((e) => e.properties.bubbleIndex)).toEqual([0, 1]);
4411
+ } finally {
4412
+ releaseGeneration(); releaseTool(); service.close();
4413
+ }
4414
+ });
4415
+
4344
4416
  it('real harness duplicate preambles keep both lines in SSE and SQLite', async () => {
4345
4417
  const directory = root();
4346
4418
  const events = [];
@@ -9,7 +9,7 @@ only model path the Assistant harness (`pi-agent-core` `streamFn`) talks to.
9
9
  from OpenCode `GET /provider` (`connected`) plus `GET /config/providers`.
10
10
  Plugin adapter formats stay inside OpenCode; this route does not parse them.
11
11
  - `POST /api/openchamber/llm/chat/completions` — `{ model, messages, stream?,
12
- providerID?, modelID? }` → OpenAI `chat.completion` JSON.
12
+ providerID?, modelID?, variant? }` → OpenAI `chat.completion` JSON.
13
13
  This **public** gateway is **non-streaming**. Bundled OpenCode 1.18.4 generate
14
14
  (`POST /generate` when present, otherwise throwaway `session.promptAsync`
15
15
  plus idle wait) returns a full assistant turn. `stream: true` is rejected with
@@ -19,6 +19,13 @@ only model path the Assistant harness (`pi-agent-core` `streamFn`) talks to.
19
19
 
20
20
  `model` may be `providerID/modelID` or a bare `modelID` paired with `providerID`.
21
21
 
22
+ `variant` is an optional OpenCode model variant string. Null, omitted, or empty
23
+ values preserve the provider default. Other types fail validation before a model
24
+ call. A selected variant is forwarded unchanged to sessionless generate and to
25
+ the throwaway `session.promptAsync` body. OpenCode owns provider-specific variant
26
+ semantics. Variant selection changes inference configuration only; completion
27
+ output continues to include text parts and keeps reasoning parts private.
28
+
22
29
  ## Internals (verified on bundled `@opencode-ai/sdk` 1.18.4)
23
30
 
24
31
  The 1.18.4 client exposes `GET /provider`, `GET /config/providers`, and
@@ -96,6 +96,10 @@ export async function createChatCompletion({
96
96
  const resolved = parseModelRef(body.model, body.providerID, body.modelID);
97
97
  if (!resolved) throw new LlmError('validation_error', 400, 'model or providerID/modelID is required');
98
98
  const messages = normalizeMessages(body.messages);
99
+ if (body.variant != null && typeof body.variant !== 'string') {
100
+ throw new LlmError('validation_error', 400, 'variant must be a string or null');
101
+ }
102
+ const variant = body.variant?.trim() || undefined;
99
103
 
100
104
  const client = clientFactory?.() ?? null;
101
105
  const catalog = await loadCatalog(client ?? {
@@ -118,6 +122,7 @@ export async function createChatCompletion({
118
122
  getOpenCodeAuthHeaders,
119
123
  providerID: resolved.providerID,
120
124
  modelID: resolved.modelID,
125
+ ...(variant ? { variant } : {}),
121
126
  messages,
122
127
  fetchImpl,
123
128
  clientFactory,
@@ -2,6 +2,25 @@ import { describe, expect, it, vi } from 'vitest'
2
2
  import { LlmError, createChatCompletion } from './completions.js'
3
3
 
4
4
  describe('createChatCompletion', () => {
5
+ it.each(['high', 'medium', null, ''])('forwards variant %s with default compatibility', async (variant) => {
6
+ const generateText = vi.fn(async () => ({ text: 'done' }));
7
+ await createChatCompletion({
8
+ generateText,
9
+ loadCatalog: async () => ({ models: [{ providerID: 'p', modelID: 'm' }] }),
10
+ body: { model: 'p/m', variant, messages: [{ role: 'user', content: 'hi' }] },
11
+ });
12
+ expect(generateText.mock.calls[0][0].variant).toBe(variant || undefined);
13
+ });
14
+
15
+ it('rejects malformed variants before a model call', async () => {
16
+ const generateText = vi.fn();
17
+ await expect(createChatCompletion({
18
+ generateText,
19
+ body: { model: 'p/m', variant: { high: true }, messages: [{ role: 'user', content: 'hi' }] },
20
+ })).rejects.toMatchObject({ code: 'validation_error', statusCode: 400 });
21
+ expect(generateText).not.toHaveBeenCalled();
22
+ });
23
+
5
24
  it('rejects when the requested model is not connected', async () => {
6
25
  const generateText = vi.fn()
7
26
  await expect(createChatCompletion({
@@ -350,12 +350,13 @@ const filesForPrompt = (files, forwardImageParts) => {
350
350
  return files.filter((part) => !String(part?.mime || '').startsWith('image/'));
351
351
  };
352
352
 
353
- async function generateViaSessionless({ fetchImpl, url, headers, providerID, modelID, messages, signal }) {
353
+ async function generateViaSessionless({ fetchImpl, url, headers, providerID, modelID, variant, messages, signal }) {
354
354
  const response = await fetchImpl(url, {
355
355
  method: 'POST',
356
356
  headers: { 'Content-Type': 'application/json', Accept: 'application/json', ...headers },
357
357
  body: JSON.stringify({
358
358
  model: { providerID, modelID },
359
+ ...(variant ? { variant } : {}),
359
360
  messages,
360
361
  }),
361
362
  signal,
@@ -451,6 +452,7 @@ export async function generateOpenCodeText({
451
452
  providerID,
452
453
  modelID,
453
454
  messages,
455
+ variant,
454
456
  fetchImpl = globalThis.fetch.bind(globalThis),
455
457
  clientFactory,
456
458
  ensureTempDirectory,
@@ -508,6 +510,7 @@ export async function generateOpenCodeText({
508
510
  headers,
509
511
  providerID,
510
512
  modelID,
513
+ variant,
511
514
  messages: forwardImageParts
512
515
  ? messages
513
516
  : messages.map((message) => {
@@ -586,6 +589,7 @@ export async function generateOpenCodeText({
586
589
  directory: workingDirectory,
587
590
  agent: LLM_AGENT_NAME,
588
591
  model: { providerID, modelID },
592
+ ...(variant ? { variant } : {}),
589
593
  ...(flattened.system ? { system: flattened.system } : {}),
590
594
  tools,
591
595
  parts: [
@@ -113,6 +113,29 @@ describe('detectSessionlessGenerate', () => {
113
113
  })
114
114
 
115
115
  describe('generateOpenCodeText', () => {
116
+ it.each(['high', undefined])('passes variant %s to the upstream prompt and returns only text parts', async (variant) => {
117
+ const client = throwawayClient({
118
+ status: async () => ({ data: {} }),
119
+ messages: async () => ({ data: [{
120
+ ...completedAssistant('public reply'),
121
+ parts: [{ type: 'reasoning', text: 'private reasoning' }, { type: 'text', text: 'public reply' }],
122
+ }] }),
123
+ });
124
+ client.session.promptAsync = vi.fn(async () => ({ response: { status: 204 } }));
125
+ const result = await throwawayGenerate(client, { variant });
126
+ expect(client.session.promptAsync.mock.calls[0][0].variant).toBe(variant);
127
+ expect(result.text).toBe('public reply');
128
+ });
129
+
130
+ it('passes variant to sessionless generation', async () => {
131
+ const fetchImpl = vi.fn(async () => new Response(JSON.stringify({ text: 'reply' })));
132
+ await throwawayGenerate({}, {
133
+ variant: 'high', fetchImpl,
134
+ detect: async () => ({ available: true, mode: 'http', url: 'http://localhost:1/generate' }),
135
+ });
136
+ expect(JSON.parse(fetchImpl.mock.calls[0][1].body).variant).toBe('high');
137
+ });
138
+
116
139
  it('uses promptAsync with model+parts, waits for idle messages, and never calls v2 session.prompt', async () => {
117
140
  const create = vi.fn(async () => ({ data: { id: 'ses_tmp' } }))
118
141
  const update = vi.fn(async () => ({ data: { id: 'ses_tmp' } }))
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarkstreamRendererImpl-CHwYXkzv.js","assets/rolldown-runtime-C0FnF6B9.js","assets/vendor-base-ui-CnHfUmDN.js","assets/vendor-react-DLPElpoQ.js","assets/vendor-markstream-react-DX55XLGO.js","assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js","assets/vendor-markstream-core-Cm34iPLL.js","assets/vendor-floating-ui-dom-BHhLtF5l.js","assets/vendor-floating-ui-core-Co1I1lFV.js","assets/vendor-reactuses-core-BnW6GxJt.js","assets/vendor-lodash-es-DfLbG5Af.js","assets/vendor-js-cookie-hSOiFTtX.js","assets/useMobileNavigationStore-BBVnSn9p.js","assets/runtime-auth-D66yq6ie.js","assets/runtime-switch-LvWDU-SL.js","assets/runtime-fetch-zIalUnbb.js","assets/persistence-DwRBC4zl.js","assets/vendor-zustand-B4dlGEM2.js","assets/useUIStore-CxOoCv7B.js","assets/vendor-pathe-vBmvQE8f.js","assets/vendor-tanstack-query-core-BWz0ose6.js","assets/platform-DQ5_LNKO.js","assets/vendor-opencode-sdk-C07HQypa.js","assets/vendor-tanstack-react-query-D7pys_c9.js","assets/vendor-sonner-DVzioF3d.js","assets/clipboard-GUUNlWIv.js","assets/store-ClnJdJSj.js","assets/useAssistantUIStore-CLPCNoj_.js","assets/vendor-fuse.js-DB5wDJbI.js","assets/utils-2ZK8yboQ.js","assets/vendor-class-variance-authority-BLUaYARZ.js","assets/vendor-tailwind-merge-BicNWLTg.js","assets/useThemeSystem-DMzWVJaW.js","assets/useRuntimeAPIs-DSLXJybW.js","assets/url-CMQwHq4k.js","assets/useEffectiveDirectory-B_3sINMx.js","assets/markdownHeightCache-BL8CUQ0M.js","assets/dualLimitLru-D8Sphgua.js","assets/MarkdownRendererImpl-CBdwjEMH.js","assets/vendor-katex--B5dHUyk.js","assets/markdownTheme-DOfGg-A7.js","assets/vendor-pierre-diffs-DX7XTPG3.js","assets/vendor-hast-util-to-html-B0p1k5Xa.js","assets/vendor-character-entities-legacy-Wut6vMuj.js","assets/vendor-character-entities-html4-DlN_yAFd.js","assets/vendor-ccount-CyGsA0u7.js","assets/vendor-comma-separated-tokens-B9ouxNNS.js","assets/vendor-oniguruma-to-es-CrHzjjSU.js","assets/vendor-oniguruma-parser-D2DIvhSP.js","assets/vendor-diff-Dq7CZNim.js","assets/vendor-lru_map-DpDied8H.js","assets/markdown-worker-CptoICmq.js","assets/FadeInOnReveal-UGwClbL_.js","assets/imageSource-BlAJJUEI.js","assets/relay-image-stream-DM7atqJs.js","assets/vendor-morphdom-BbKiNDAu.js","assets/vendor-beautiful-mermaid-DykqIK5D.js","assets/vendor-dompurify-CeJNOzik.js","assets/vendor-marked-WVekxjAN.js","assets/vendor-remend-C3cXc-tf.js","assets/MarkstreamRendererImpl-DKhVy3nF.css"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{a as t}from"./vendor-zustand-B4dlGEM2.js";import{nt as n,rt as r}from"./vendor-base-ui-CnHfUmDN.js";import{o as i}from"./vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js";import{n as a}from"./vendor-react-DLPElpoQ.js";import{t as o}from"./utils-2ZK8yboQ.js";import{i as s,n as c,t as l}from"./markdownHeightCache-BL8CUQ0M.js";var u=a(),d=e(r(),1),f=`openchamber:chunk-import-reload`,p=250,m=3e4,h=[/Importing a module script failed/i,/Failed to fetch dynamically imported module/i,/error loading dynamically imported module/i,/Loading chunk \S+ failed/i,/ChunkLoadError/i];function g(e){if(e instanceof Error)return`${e.name}\n${e.message}\n${e.stack??``}`;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function _(e){let t=g(e);return h.some(e=>e.test(t))}function v(e){return`1.19.15-beta.4:${g(e).slice(0,500)}`}function y(e){if(typeof window>`u`)return;let t=Date.now(),n=v(e),r=null;try{let e=window.sessionStorage.getItem(f);if(e)try{r=JSON.parse(e)}catch{r=null}}catch{return}let i=typeof r?.timestamp==`number`?r.timestamp:0;if(!(r?.signature===n&&t-i<m)){try{window.sessionStorage.setItem(f,JSON.stringify({signature:n,timestamp:t}))}catch{return}console.error(`[refresh-debug] chunk-import-reload`,{error:g(e).slice(0,1e3)}),window.setTimeout(()=>{window.location.reload()},0)}}async function b(e,t={}){let n=t.retries??1,r;for(let t=0;t<=n;t+=1)try{return await e()}catch(e){if(r=e,!_(e)||t>=n)break;await new Promise(e=>setTimeout(e,p*(t+1)))}throw _(r)&&y(r),r}var x=e=>(0,d.lazy)(()=>b(e)),S=(e,t)=>{try{let n=t??(typeof localStorage>`u`?null:localStorage);return n?n.getItem(e)===`1`:!1}catch{return!1}},C=(e,t)=>{try{let n=t??(typeof localStorage>`u`?null:localStorage);return!n||n.getItem(e)!==`0`}catch{return!0}},w=(e,t)=>{try{typeof localStorage<`u`&&localStorage.setItem(e,t?`1`:`0`)}catch{}},T=`oc:legend-timeline`,E=e=>S(T,e),D=`oc:markstream-react`,O=e=>C(D,e),k=t(e=>({legendTimelineEnabled:E(),setLegendTimelineEnabled:t=>{w(T,t),e({legendTimelineEnabled:t})},markstreamReactEnabled:O(),setMarkstreamReactEnabled:t=>{w(D,t),e({markstreamReactEnabled:t})}})),A=null,j=()=>(A??=i(()=>import(`./MarkstreamRendererImpl-CHwYXkzv.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60])).catch(e=>{throw A=null,e}),A),M=()=>{j().catch(()=>void 0)},N=null,P=()=>(N??=i(()=>import(`./MarkdownRendererImpl-CBdwjEMH.js`).then(e=>e.n),__vite__mapDeps([38,1,14,13,15,16,17,2,18,19,3,20,21,22,5,39,9,10,11,25,26,12,23,24,27,28,29,30,31,32,40,41,42,43,44,45,46,47,48,49,50,33,34,51,37,35,52,53,54,36,55,56,57,58,59])).catch(e=>{throw N=null,e}),N),F=()=>{P().catch(()=>void 0),O()&&M()},I=class extends d.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.warn(`[markstream-react] falling back to the current Markdown renderer`,e)}render(){return this.state.hasError?this.props.fallback:this.props.children}},L=d.createContext(!0),R=()=>d.useContext(L),z=n(),B=x(()=>P().then(e=>({default:e.MarkdownRenderer}))),V=x(()=>j().then(e=>({default:e.MarkstreamRenderer}))),H=x(()=>P().then(e=>({default:e.SimpleMarkdownRenderer}))),U=e=>e===`tool`?`markdown-content markdown-tool`:e===`reasoning`?`markdown-content markdown-reasoning`:`markdown-content leading-relaxed`,W=e=>{let t=(0,u.c)(15),n=k(q),r=typeof e.content==`string`?e.content:``,i=typeof e.variant==`string`?e.variant:`assistant`,a;t[0]!==r||t[1]!==n||t[2]!==e.reserveMeasuredHeight||t[3]!==i?(a=e.reserveMeasuredHeight?c(l(r,n?`markstream:${i}`:i)):void 0,t[0]=r,t[1]=n,t[2]=e.reserveMeasuredHeight,t[3]=i,t[4]=a):a=t[4];let d=a,f;t[5]!==e.className||t[6]!==e.variant?(f=o(`relative break-words w-full min-w-0`,U(e.variant),typeof e.className==`string`?e.className:void 0),t[5]=e.className,t[6]=e.variant,t[7]=f):f=t[7];let p;t[8]!==r||t[9]!==e.animated||t[10]!==d?(p=(0,z.jsx)(s,{animated:e.animated,content:r,reservedHeight:d}),t[8]=r,t[9]=e.animated,t[10]=d,t[11]=p):p=t[11];let m;return t[12]!==f||t[13]!==p?(m=(0,z.jsx)(`div`,{className:f,"aria-busy":`true`,"data-markdown-hydration":`deferred`,"data-markdown-ready":`false`,children:p}),t[12]=f,t[13]=p,t[14]=m):m=t[14],m},G=e=>{let t=(0,u.c)(9),n=R(),r=k(J);if(!n&&e.isStreaming!==!0){let n;return t[0]===e?n=t[1]:(n=(0,z.jsx)(W,{...e,animated:!1,reserveMeasuredHeight:!0}),t[0]=e,t[1]=n),n}let i;t[2]===e?i=t[3]:(i=(0,z.jsx)(d.Suspense,{fallback:(0,z.jsx)(W,{...e,reserveMeasuredHeight:!0}),children:(0,z.jsx)(B,{...e})}),t[2]=e,t[3]=i);let a=i;if(!r)return a;let o;t[4]===e?o=t[5]:(o=(0,z.jsx)(d.Suspense,{fallback:(0,z.jsx)(W,{...e,reserveMeasuredHeight:!0}),children:(0,z.jsx)(V,{...e})}),t[4]=e,t[5]=o);let s;return t[6]!==a||t[7]!==o?(s=(0,z.jsx)(I,{fallback:a,children:o}),t[6]=a,t[7]=o,t[8]=s):s=t[8],s},K=e=>{let t=(0,u.c)(4);if(!R()){let n;return t[0]===e?n=t[1]:(n=(0,z.jsx)(W,{...e,animated:!1}),t[0]=e,t[1]=n),n}let n;return t[2]===e?n=t[3]:(n=(0,z.jsx)(d.Suspense,{fallback:(0,z.jsx)(W,{...e}),children:(0,z.jsx)(H,{...e})}),t[2]=e,t[3]=n),n};function q(e){return e.markstreamReactEnabled}function J(e){return e.markstreamReactEnabled}export{k as a,F as i,K as n,x as o,L as r,G as t};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-capacitor-app-PzT84wSx.js","assets/rolldown-runtime-C0FnF6B9.js","assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{c as t,i as n,o as r}from"./runtime-switch-LvWDU-SL.js";import{n as i}from"./runtime-fetch-zIalUnbb.js";import{$t as a,Cn as o,Qt as s,Rt as c,Zt as l,d as u,in as d,nn as f,nt as p,p as m,pn as h,r as g,rn as _,s as v,tn as y,tt as b,u as x,zt as S}from"./persistence-DwRBC4zl.js";import{a as C,i as w,r as T}from"./vendor-zustand-B4dlGEM2.js";import{nt as E,rt as D,tt as O}from"./vendor-base-ui-CnHfUmDN.js";import{Ct as k,Nt as A,n as j,t as M}from"./platform-DQ5_LNKO.js";import{t as N,y as P}from"./useUIStore-CxOoCv7B.js";import{o as F}from"./vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js";import{n as ee}from"./vendor-react-DLPElpoQ.js";import{s as I}from"./vendor-tanstack-react-query-D7pys_c9.js";import{t as L}from"./types-BuiqMmh_.js";import{A as te,G as ne,H as R,K as re,L as ie,P as z,Q as ae,T as oe,V as B,W as V,X as se,Z as ce,a as le,g as ue,ht as de,lt as fe,mt as pe,pt as H,q as me,st as U,tt as he}from"./vendor-codemirror-autocomplete-DHomsvW7.js";import{n as ge}from"./vendor-reactuses-core-BnW6GxJt.js";import{n as W,r as _e,t as ve}from"./clipboard-GUUNlWIv.js";import{Bn as ye,In as be,Kr as xe,Ln as Se,Ma as Ce,Pn as we,Rn as Te,Vn as Ee,Zr as De,c as Oe,cr as ke,dr as Ae,go as je,hr as G,mn as Me,nr as Ne}from"./useMobileNavigationStore-BBVnSn9p.js";import{a as Pe,n as Fe,o as Ie,r as Le,t as Re}from"./dialog-DhMGbF_B.js";import{r as ze,t as K}from"./utils-2ZK8yboQ.js";import{n as q}from"./Icon-D1BcR8Tz.js";import{n as Be,t as J}from"./button-9R-WgVMl.js";import{L as Ve,_ as He,b as Ue,c as We,n as Ge,s as Ke,u as qe}from"./gitApi-CDc5ynsh.js";import{Z as Je,_ as Ye,a as Xe,b as Ze,c as Qe,h as $e,m as et,n as tt,r as nt,t as rt,x as it}from"./projectMeta-sXx-r5jn.js";import{t as at}from"./input-Cd_1HyQv.js";import{i as ot,n as st,t as ct}from"./tooltip-DSjr26A_.js";import{B as lt,Bt as ut,C as dt,E as ft,F as pt,Gt as mt,Ht as ht,I as gt,L as _t,Lt as vt,Rt as yt,T as bt,Vt as xt,X as St,Xt as Ct,Y as wt,b as Tt,l as Et,nt as Dt,r as Ot,z as kt,zt as At}from"./useSessionAutoCleanup-SsGxsSRB.js";import{n as jt}from"./useThemeSystem-DMzWVJaW.js";import{i as Mt,n as Nt}from"./OverlayScrollbar-Bahg_P3r.js";import{n as Pt}from"./MarkdownRenderer-4gjE7aM5.js";import{n as Ft,t as It}from"./textarea-B9CmN13Z.js";import{a as Lt}from"./url-CMQwHq4k.js";import{r as Rt}from"./markdown-worker-CptoICmq.js";import{n as zt,r as Bt,t as Vt}from"./collapsible-Bbz9KiJf.js";import{a as Ht,d as Ut,o as Wt,s as Gt}from"./vendor-codemirror-commands-C9DCaJ0C.js";import{a as Kt,c as qt,i as Jt,o as Yt,r as Xt,s as Zt}from"./vendor-codemirror-search-D2SOgzph.js";import{n as Qt,t as $t}from"./vendor-replit-codemirror-vim-CEibx3EP.js";import{i as en,n as tn,r as nn,t as rn}from"./projectActions-CWvNGKfA.js";var an=[{id:`claude`,name:`Claude`},{id:`codex`,name:`Codex`},{id:`cursor`,name:`Cursor`},{id:`github-copilot`,name:`GitHub Copilot`},{id:`google`,name:`Google`},{id:`kimi-for-coding`,name:`Kimi for Coding`},{id:`nano-gpt`,name:`NanoGPT`},{id:`openrouter`,name:`OpenRouter`},{id:`zai-coding-plan`,name:`z.ai`},{id:`zhipuai-coding-plan`,name:`Zhipu AI Coding Plan`},{id:`minimax-cn-coding-plan`,name:`MiniMax Coding Plan (minimaxi.com)`},{id:`minimax-coding-plan`,name:`MiniMax Coding Plan (minimax.io)`},{id:`ollama-cloud`,name:`Ollama Cloud`},{id:`wafer`,name:`Wafer.ai`},{id:`opencode-go`,name:`OpenCode Go`},{id:`xai`,name:`Grok`}],Y=ee(),X=E();function on(e){let t=(0,Y.c)(4),n,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,X.jsx)(`path`,{d:`M15.688 2.343a2.588 2.588 0 00-3.61 0l-9.626 9.44a.863.863 0 01-1.203 0 .823.823 0 010-1.18l9.626-9.44a4.313 4.313 0 016.016 0 4.116 4.116 0 011.204 3.54 4.3 4.3 0 013.609 1.18l.05.05a4.115 4.115 0 010 5.9l-8.706 8.537a.274.274 0 000 .393l1.788 1.754a.823.823 0 010 1.18.863.863 0 01-1.203 0l-1.788-1.753a1.92 1.92 0 010-2.754l8.706-8.538a2.47 2.47 0 000-3.54l-.05-.049a2.588 2.588 0 00-3.607-.003l-7.172 7.034-.002.002-.098.097a.863.863 0 01-1.204 0 .823.823 0 010-1.18l7.273-7.133a2.47 2.47 0 00-.003-3.537z`}),r=(0,X.jsx)(`path`,{d:`M14.485 4.703a.823.823 0 000-1.18.863.863 0 00-1.204 0l-7.119 6.982a4.115 4.115 0 000 5.9 4.314 4.314 0 006.016 0l7.12-6.982a.823.823 0 000-1.18.863.863 0 00-1.204 0l-7.119 6.982a2.588 2.588 0 01-3.61 0 2.47 2.47 0 010-3.54l7.12-6.982z`}),t[0]=n,t[1]=r):(n=t[0],r=t[1]);let i;return t[2]===e?i=t[3]:(i=(0,X.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`1em`,height:`1em`,fill:`currentColor`,stroke:`currentColor`,strokeWidth:`0.5`,fillRule:`evenodd`,viewBox:`-0.5 -0.5 25 25`,...e,children:[n,r]}),t[2]=e,t[3]=i),i}var Z=e=>{if(typeof e!=`string`)return null;let t=e.trim();if(!t)return null;let n=t.replace(/\\/g,`/`);return n.length>1?n.replace(/\/+$/,``):n},sn=()=>{let e=je.getState().getActiveProject?.();return Z(e?.path)??Z(A.getDirectory())},cn=(e,t=n())=>u.mcp.configs(e,t),ln=(e,t=n())=>u.mcp.status(e,t),un=e=>e?A.getScopedApiClient(e):A.getApiClient(),dn=(e=sn(),t=n())=>{let r=Z(e);return{queryKey:cn(r,t),queryFn:async({signal:e})=>{let t=r?`?directory=${encodeURIComponent(r)}`:``,n=await i(`/api/config/mcp${t}`,{headers:r?{"x-opencode-directory":r}:void 0,signal:e});if(!n.ok)throw Error(`Failed to load MCP configs`);let a=await n.json();if(!Array.isArray(a))throw Error(`Invalid MCP configs response`);return a},staleTime:5e3,retry:2}},fn=(e,t=n())=>{let r=Z(e);return{queryKey:ln(r,t),queryFn:async()=>(await un(r).mcp.status({},{throwOnError:!0})).data,staleTime:2e3,retry:1}},pn=(e,t)=>{let n=(0,Y.c)(9),r;n[0]===t?r=n[1]:(r=t===void 0?{}:t,n[0]=t,n[1]=r);let i=r,a=je(yn),o,s;if(n[2]!==a||n[3]!==e){let t=e===void 0?Z(a)??Z(A.getDirectory()):Z(e);s=I,o=dn(t),n[2]=a,n[3]=e,n[4]=o,n[5]=s}else o=n[4],s=n[5];let c;return n[6]!==i.enabled||n[7]!==o?(c={...o,enabled:i.enabled},n[6]=i.enabled,n[7]=o,n[8]=c):c=n[8],s(c)},mn=(e,t)=>{let n=(0,Y.c)(7),r;n[0]===t?r=n[1]:(r=t===void 0?{}:t,n[0]=t,n[1]=r);let i=r,a=k(bn),o=e===void 0?a:e,s;n[2]===o?s=n[3]:(s=fn(Z(o)),n[2]=o,n[3]=s);let c;return n[4]!==i.enabled||n[5]!==s?(c={...s,enabled:i.enabled},n[4]=i.enabled,n[5]=s,n[6]=c):c=n[6],I(c)},hn=(e=x,t=sn(),r=n())=>e.getQueryData(cn(Z(t),r))??[],gn=(e=x,t,r=n())=>e.getQueryData(ln(Z(t),r))??{},_n=async(e,t,r)=>{let i=Z(t);return n()===r?e.fetchQuery({...dn(i,r),staleTime:0}):hn(e,i,r)},vn=async(e,t,r)=>{let i=Z(t);return n()===r?e.fetchQuery({...fn(i,r),staleTime:0}):gn(e,i,r)};function yn(e){return e.getActiveProject?.()?.path??null}function bn(e){return e.currentDirectory}var xn={},Sn=(e,t=n())=>JSON.stringify([t,Z(e)]),Cn=(e,t,n)=>{if(!e[t]?.[n])return e;let r={...e[t]};return delete r[n],{...e,[t]:r}},wn=e=>{let t=Z(e);return t?A.getScopedApiClient(t):A.getApiClient()},Tn=e=>Z(e===void 0?k.getState().currentDirectory:e),En=C()(T((e,t)=>({diagnosticsByDirectory:{},getDiagnosticForDirectory:e=>{let n=Sn(Tn(e));return t().diagnosticsByDirectory[n]??xn},clearDiagnostic:(t,n,r)=>{let i=Sn(Tn(n),r);e(e=>({diagnosticsByDirectory:Cn(e.diagnosticsByDirectory,i,t)}))},connect:async(t,r)=>{let i=Tn(r),a=n(),o=Sn(i,a),s=wn(i);try{await s.mcp.connect({name:t},{throwOnError:!0})}catch(n){let r=n instanceof Error?n.message:`Connection failed`;throw e(e=>({diagnosticsByDirectory:{...e.diagnosticsByDirectory,[o]:{...e.diagnosticsByDirectory[o]??{},[t]:{status:`failed`,error:r}}}})),n}await vn(x,i,a),e(e=>({diagnosticsByDirectory:Cn(e.diagnosticsByDirectory,o,t)}))},disconnect:async(t,r)=>{let i=Tn(r),a=n(),o=Sn(i,a);await wn(i).mcp.disconnect({name:t},{throwOnError:!0}),await vn(x,i,a),e(e=>({diagnosticsByDirectory:Cn(e.diagnosticsByDirectory,o,t)}))},startAuth:async(e,t)=>{let n=(await wn(Tn(t)).mcp.auth.start({name:e},{throwOnError:!0})).data?.authorizationUrl;if(!n)throw Error(`Authorization URL was not returned`);return n},completeAuth:async(t,r,i)=>{let a=Tn(i),o=n(),s=Sn(a,o);await wn(a).mcp.auth.callback({name:t,code:r},{throwOnError:!0}),await vn(x,a,o),e(e=>({diagnosticsByDirectory:Cn(e.diagnosticsByDirectory,s,t)}))},clearAuth:async(t,r)=>{let i=Tn(r),a=n(),o=Sn(i,a);await wn(i).mcp.auth.remove({name:t},{throwOnError:!0}),await vn(x,i,a),e(e=>({diagnosticsByDirectory:Cn(e.diagnosticsByDirectory,o,t)}))},testConnection:async(t,r)=>{let i=Tn(r),a=n(),o=Sn(i,a),s=wn(i),c=gn(x,i,a)[t]?.status===`connected`,l,u;try{await s.mcp.connect({name:t},{throwOnError:!0})}catch(n){l=n instanceof Error?n.message:`Connection failed`,e(e=>({diagnosticsByDirectory:{...e.diagnosticsByDirectory,[o]:{...e.diagnosticsByDirectory[o]??{},[t]:{status:`failed`,error:l??`Connection failed`}}}}))}let d=(await vn(x,i,a))[t],f=d;if(!c&&d?.status===`connected`){try{await s.mcp.disconnect({name:t},{throwOnError:!0})}catch(e){u=`Connection test succeeded, but cleanup disconnect failed: ${e instanceof Error?e.message:`Disconnect failed`}`}await vn(x,i,a)}return l||e(e=>({diagnosticsByDirectory:Cn(e.diagnosticsByDirectory,o,t)})),{status:f??gn(x,i,a)[t],error:l,warning:u}}}))),Q=e(D(),1),Dn=e=>typeof e==`string`&&e.trim().length>0?e.trim():null,On=()=>Dn(`1.19.15-beta.4`),kn=(e,t)=>Dn(t)||Dn(e),An=(e,t)=>{let n=Dn(e);return n?typeof t!=`number`||!Number.isFinite(t)?n:`${n} (${t})`:null},jn=async()=>{let e=On();if(!j())return e;try{let{App:t}=await F(async()=>{let{App:e}=await import(`./vendor-capacitor-app-PzT84wSx.js`).then(e=>e.t);return{App:e}},__vite__mapDeps([0,1,2]));return kn((await t.getInfo()).version,e)}catch{return e}},Mn=async()=>{if(!j())return null;try{let{App:e}=await F(async()=>{let{App:e}=await import(`./vendor-capacitor-app-PzT84wSx.js`).then(e=>e.t);return{App:e}},__vite__mapDeps([0,1,2])),t=await e.getInfo(),n=typeof t.build==`string`?t.build.trim():``;if(n.length===0)return null;let r=Number.parseInt(n,10);return Number.isFinite(r)?r:null}catch{return null}},Nn=`https://openchamber.xiaobe.top/v1/update/check`,Pn=`https://openchamber-update.vercel.app/v1/update/check`,Fn=`https://github.com/yee94/openchamber/releases/latest`,In=`https://github.com/yee94/openchamber/releases`,Ln=`https://testflight.apple.com/join/ZCENBHtm`,Rn=1e4;function zn(e){let t=String(e||``).replace(/^v/,``).split(`+`)[0]??``,n=t.indexOf(`-`);return{parts:(n>=0?t.slice(0,n):t).split(`.`).map(e=>{let t=Number.parseInt(e||`0`,10);return Number.isFinite(t)?t:0}),prerelease:n>=0}}function Bn(e,t){let n=zn(e),r=zn(t),i=Math.max(n.parts.length,r.parts.length);for(let e=0;e<i;e+=1){let t=(n.parts[e]||0)-(r.parts[e]||0);if(t!==0)return t}return n.prerelease===r.prerelease?0:n.prerelease?-1:1}function Vn(){return[Nn,Pn]}function Hn(e,t,n=Date.now){let r=e-n();return r<=0||t<=0?null:Math.max(1,Math.ceil(r/t))}function Un(e){return{appType:`mobile-capacitor`,deviceClass:e.deviceClass||`mobile`,platform:e.platform===`ios`||e.platform===`android`?e.platform:`android`,arch:e.arch||`unknown`,channel:`stable`,currentVersion:e.currentVersion,instanceMode:`remote`,reportUsage:e.reportUsage===!0}}async function Wn(e,t,n,r){try{if(j())try{let{CapacitorHttp:r}=await F(async()=>{let{CapacitorHttp:e}=await import(`./vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js`).then(e=>e.i);return{CapacitorHttp:e}},__vite__mapDeps([2,1])),i=Object.fromEntries(new Headers(t.headers).entries()),a;if(typeof t.body==`string`)try{a=JSON.parse(t.body)}catch{a=t.body}let o=await Promise.race([r.request({url:e,method:t.method||`GET`,headers:i,data:a,connectTimeout:n,readTimeout:n}),new Promise(e=>{window.setTimeout(()=>e(null),n)})]);return o?{ok:o.status>=200&&o.status<300,status:o.status,url:typeof o.url==`string`?o.url:e,json:async()=>{if(typeof o.data==`string`)try{return JSON.parse(o.data)}catch{return o.data}return o.data}}:null}catch{}let i=await r(e,{...t,signal:AbortSignal.timeout(n)});return{ok:i.ok,status:i.status,url:i.url,json:()=>i.json()}}catch{return null}}function Gn(e,t){return e===`ios`?Ln:`${In}/download/v${t}/app-release.apk`}function Kn(e,t,n){if(typeof e.latestVersion!=`string`||e.latestVersion.trim().length===0)return null;let r=e.latestVersion.trim(),i=Bn(r,t);if(i<0)return null;let a=typeof e.releaseNotesUrl==`string`&&e.releaseNotesUrl.trim().length>0?e.releaseNotesUrl.trim():`${In}/tag/v${r}`,o=typeof e.downloadUrl==`string`&&e.downloadUrl.trim().length>0?e.downloadUrl.trim():typeof e.download?.url==`string`&&e.download.url.trim().length>0?e.download.url.trim():Gn(n,r);return{available:!!e.updateAvailable&&i>0,version:r,currentVersion:t,body:typeof e.releaseNotes==`string`?e.releaseNotes:void 0,releaseUrl:a,downloadUrl:o,nextSuggestedCheckInSec:typeof e.nextSuggestedCheckInSec==`number`&&Number.isFinite(e.nextSuggestedCheckInSec)?e.nextSuggestedCheckInSec:void 0}}async function qn(e,t,n,r){let i=await Wn(e,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify(Un(t))},n,r);if(!i?.ok)return null;let a;try{a=await i.json()}catch{return null}return Kn(a,t.currentVersion,t.platform)}async function Jn(e,t,n,r){let i=await Wn(Fn,{method:`GET`,headers:{Accept:`text/html`},redirect:`follow`},n,r);if(!i?.ok)return null;let a=typeof i.url==`string`&&i.url.length>0?i.url:Fn,o=null;try{o=new URL(a).pathname.match(/\/releases\/tag\/v(\d+\.\d+\.\d+(?:-[\w.]+)?)/)}catch{return null}if(!o?.[1])return null;let s=o[1],c=Bn(s,e),l=`${In}/tag/v${s}`;return{available:c>0,version:s,currentVersion:e,releaseUrl:l,downloadUrl:Gn(t,s)}}async function Yn(e){let t=e.currentVersion?.trim()||`unknown`;if(t===`unknown`)return{available:!1,currentVersion:t,error:`Unable to check for mobile updates`};let n=e.fetchImpl??fetch,r=e.now??Date.now,i=Vn(),a=r()+Rn;for(let[t,o]of i.entries()){let s=Hn(a,i.length-t+1,r);if(s===null)break;let c=await qn(o,e,s,n);if(c)return c}let o=Hn(a,1,r);if(o!==null){let r=await Jn(t,e.platform,o,n);if(r)return r}return{available:!1,currentVersion:t,error:`Unable to check for mobile updates`}}function Xn(){if(typeof window>`u`)return`unknown`;try{let{deviceType:e}=Nt();return e}catch{return`unknown`}}function Zn(){let e=typeof window<`u`?window.__VSCODE_CONFIG__?.arch?.toLowerCase?.():void 0;if(e===`arm64`||e===`aarch64`)return`arm64`;if(e===`x64`||e===`amd64`||e===`x86_64`)return`x64`;let t=(typeof navigator<`u`?navigator.userAgentData:void 0)?.architecture?.toLowerCase?.();if(t===`arm`||t===`arm64`||t===`aarch64`)return`arm64`;if(t===`x86`||t===`x64`||t===`amd64`)return`x64`;let n=typeof navigator<`u`?navigator.userAgent.toLowerCase():``;return n.includes(`aarch64`)||n.includes(`arm64`)||n.includes(`armv`)?`arm64`:n.includes(`x86_64`)||n.includes(`x64`)||n.includes(`amd64`)||n.includes(`win64`)?`x64`:`unknown`}function Qn(){let e=M();if(e===`android`||e===`ios`)return e;if(typeof navigator>`u`)return`web`;let t=(navigator.platform||``).toLowerCase();return t.includes(`mac`)?`macos`:t.includes(`win`)?`windows`:t.includes(`linux`)?`linux`:`web`}function $n(e){let t=N.getState().reportUsage,n=new URLSearchParams({reportUsage:t?`true`:`false`});return n.set(`deviceClass`,Xn()),n.set(`arch`,Zn()),n.set(`platform`,Qn()),e===`desktop`?(n.set(`appType`,`desktop-electron`),n.set(`instanceMode`,l()?`local`:`remote`),n):e===`vscode`?(n.set(`appType`,`vscode`),n.set(`instanceMode`,`local`),n):e===`mobile`?(n.set(`appType`,`mobile-capacitor`),n.set(`instanceMode`,`remote`),n):(n.set(`appType`,`web`),n.set(`instanceMode`,`unknown`),n)}async function er(e,t){let n=t??`unknown`;try{let r=$n(e),a=typeof window<`u`?window.__VSCODE_CONFIG__?.extensionVersion:void 0;t?r.set(`currentVersion`,t):e===`vscode`&&a&&r.set(`currentVersion`,a);let o=await i(`/api/openchamber/update-check?${r.toString()}`,{method:`GET`,headers:{Accept:`application/json`}}),s=null;try{s=await o.json()}catch{s=null}if(!o.ok)return{available:!1,currentVersion:n,error:typeof s?.error==`string`&&s.error.trim().length>0?s.error.trim():`Server responded with ${o.status}`};if(!s)return{available:!1,currentVersion:n,error:`Update check returned an invalid response`};let c=typeof s.error==`string`&&s.error.trim().length>0?s.error.trim():void 0;return{available:s.available===!0,version:typeof s.version==`string`?s.version:void 0,currentVersion:typeof s.currentVersion==`string`?s.currentVersion:n,body:typeof s.body==`string`?s.body:void 0,releaseUrl:typeof s.releaseUrl==`string`?s.releaseUrl:void 0,downloadUrl:typeof s.downloadUrl==`string`?s.downloadUrl:void 0,nextSuggestedCheckInSec:typeof s.nextSuggestedCheckInSec==`number`&&Number.isFinite(s.nextSuggestedCheckInSec)?s.nextSuggestedCheckInSec:void 0,packageManager:typeof s.packageManager==`string`?s.packageManager:void 0,updateCommand:typeof s.updateCommand==`string`?s.updateCommand:void 0,error:c}}catch(e){return console.warn(`Failed to check for updates:`,e),{available:!1,currentVersion:n,error:e instanceof Error?e.message:`Failed to check for updates`}}}function tr(){return j()?`mobile`:a()?`desktop`:y()?`vscode`:f()?`web`:null}var nr={checking:!1,available:!1,downloading:!1,downloaded:!1,info:null,progress:null,error:null,runtimeType:null,lastChecked:null,nextCheckInSec:null,otaDecision:null,otaPhase:`idle`,otaDownloadSkipped:!1,lastOtaChannelOverride:null};function rr(e,t){let n=e.isChannelRollback===!0?{isChannelRollback:!0}:{};return e.primaryAction===`apply_ota`&&e.ota.bundle?e.ota.bundle.releaseVersion===t?{available:!1,otaPhase:`idle`,info:{available:!1,currentVersion:t,nextSuggestedCheckInSec:e.nextCheckInSec,...n}}:{available:!0,otaPhase:`available`,info:{available:!0,version:e.ota.bundle.releaseVersion,currentVersion:t,downloadUrl:e.ota.bundle.url,nextSuggestedCheckInSec:e.nextCheckInSec,inAppApply:!0,...e.releaseNotes?{body:e.releaseNotes}:{},...n}}:e.primaryAction===`install_native_required`?{available:e.native.state===`required`||e.native.state===`available`,otaPhase:`idle`,info:{available:e.native.state===`required`||e.native.state===`available`,version:e.native.version,currentVersion:t,downloadUrl:e.native.installUrl,nextSuggestedCheckInSec:e.nextCheckInSec,manualUpdate:!0,...e.releaseNotes?{body:e.releaseNotes}:{},...n}}:{available:!1,otaPhase:`idle`,info:{available:!1,currentVersion:t,nextSuggestedCheckInSec:e.nextCheckInSec,...n}}}var ir=C()((e,t)=>({...nr,checkForUpdates:async()=>{let n=tr();if(!n)return null;e({checking:!0,error:null,runtimeType:n});try{let r=null,i=null;if(n===`desktop`){let t=await c(),n=t?.downloaded===!0;return e({checking:!1,available:t?.available??!1,downloaded:n,...n?{downloading:!1,progress:null}:{},info:t,error:null,lastChecked:Date.now(),nextCheckInSec:null}),i}if(n===`web`)r=await er(`web`),i=r?.nextSuggestedCheckInSec??null;else if(n===`vscode`)i=(await er(`vscode`))?.nextSuggestedCheckInSec??null;else if(n===`mobile`){let n=await jn()??`unknown`,a=j()?o()?.mobileUpdates:void 0,s=N.getState().otaChannelOverride;if(a)try{let r=t().lastOtaChannelOverride!==s;e(r?{otaDecision:null,otaPhase:`checking`,downloaded:!1,otaDownloadSkipped:!1,progress:null,available:!1,info:null}:{otaPhase:`checking`});let i=await a.checkForOtaUpdate(s===`beta`||s===`stable`?{channelOverride:s}:void 0),o=rr(i,n),c=(r?void 0:t().otaDecision?.ota.bundle?.bundleId)!==i.ota.bundle?.bundleId,l=!r&&t().downloaded&&!c;return e({checking:!1,available:o.available,info:o.info,error:o.info.error??null,lastChecked:Date.now(),nextCheckInSec:i.nextCheckInSec,otaDecision:i,otaPhase:l?`pending_restart`:o.otaPhase,lastOtaChannelOverride:s,...c||r?{downloaded:!1,otaDownloadSkipped:!1,progress:null}:{}}),i.nextCheckInSec}catch(t){if(!(t instanceof L)){let r=t instanceof Error?t.message:`Mobile OTA check failed`;return e({checking:!1,available:!1,info:{available:!1,currentVersion:n},error:r,lastChecked:Date.now(),otaDecision:null,otaPhase:`error`,lastOtaChannelOverride:s}),null}}return r=await Yn({currentVersion:n,platform:Qn()===`ios`?`ios`:`android`,deviceClass:Xn(),arch:Zn(),reportUsage:N.getState().reportUsage}),i=r?.nextSuggestedCheckInSec??null,e({checking:!1,available:r?.available??!1,info:r,error:r?.error??null,lastChecked:Date.now(),nextCheckInSec:i,otaDecision:null,otaPhase:`idle`}),i}return e({checking:!1,available:n===`vscode`?!1:r?.available??!1,info:n===`vscode`?null:r,error:n===`vscode`?null:r?.error??null,lastChecked:Date.now(),nextCheckInSec:i}),i}catch(t){return e({checking:!1,error:t instanceof Error?t.message:`Failed to check for updates`}),null}},downloadUpdate:async()=>{let{available:n,runtimeType:r,otaDecision:i,downloading:a,downloaded:s}=t();if(r===`mobile`&&i?.primaryAction===`apply_ota`&&i.ota.bundle){if(a||s)return;let t=o()?.mobileUpdates;if(!t){e({error:`Mobile OTA updates are unavailable in this runtime`,otaPhase:`error`});return}e({downloading:!0,error:null,progress:null,otaPhase:`downloading`,otaDownloadSkipped:!1});try{let{skipped:n}=await t.downloadOtaUpdate(i.ota.bundle);await t.queueOtaUpdateForNextLaunch(),e({downloading:!1,downloaded:!0,progress:null,otaPhase:`pending_restart`,otaDownloadSkipped:n})}catch(t){e({downloading:!1,error:t instanceof Error?t.message:`Failed to download update`,otaPhase:`error`})}return}if(!(r!==`desktop`||!n)){e({downloading:!0,error:null,progress:null});try{let n=await c();if(!n?.available)throw Error(`Update detected, but desktop package is not ready yet. Retry in a moment.`);if(e(e=>({info:e.info?{...e.info,...n,body:e.info.body||n.body,available:e.info.available}:n})),n.downloaded||t().downloaded){e({downloading:!1,downloaded:!0,progress:null});return}if(n.downloading&&e({downloading:!0,progress:n.progress??{downloaded:0}}),!await S(t=>{e({progress:t})}))throw Error(`Failed to download update`);e({downloading:!1,downloaded:!0,progress:null})}catch(t){e({downloading:!1,error:t instanceof Error?t.message:`Failed to download update`})}}},subscribeDesktopUpdateEvents:async()=>{if(!a())return()=>{};let n=[],r=await _(n=>{let r=n.event,i=n.data??null;if(r===`Started`){if(!t().downloading)return;e({error:null,progress:{downloaded:0,total:typeof i?.contentLength==`number`?i.contentLength:void 0}});return}if(r===`Progress`){if(!t().downloading)return;e({progress:{downloaded:typeof i?.downloaded==`number`?i.downloaded:0,total:typeof i?.total==`number`?i.total:void 0}});return}r===`Finished`&&e({downloading:!1,downloaded:!0,progress:null})});r&&n.push(r);let i=await d(t=>{t.downloaded&&e({downloading:!1,downloaded:!0,available:!0,progress:null})});return i&&n.push(i),async()=>{for(let e of n)try{let t=e();t instanceof Promise&&await t}catch{}}},restartToUpdate:async()=>{let{downloaded:n,runtimeType:r,otaDecision:i}=t();if(r===`mobile`&&i?.primaryAction===`apply_ota`){if(!n)return;let t=o()?.mobileUpdates;if(!t){e({error:`Mobile OTA updates are unavailable in this runtime`,otaPhase:`error`});return}try{await t.applyOtaUpdateNow()}catch(t){e({error:t instanceof Error?t.message:`Failed to restart`,otaPhase:`error`})}return}if(!(r!==`desktop`||!n))try{if(!await h())throw Error(`Failed to restart`)}catch(t){e({error:t instanceof Error?t.message:`Failed to restart`})}},setOtaPhase:(t,n=null)=>{e({otaPhase:t,...n===void 0?{}:{error:n}})},setOtaDownloadPercent:n=>{if(!Number.isFinite(n)||n<0||n>100)return;let r=t();if(!r.downloading)return;let i=Math.round(n);if((r.progress?.total?Math.round(r.progress.downloaded/r.progress.total*100):null)===i)return;let a=r.otaDecision?.ota.bundle?.size;if(typeof a==`number`&&Number.isFinite(a)&&a>0){e({progress:{downloaded:Math.round(a*n/100),total:a}});return}e({progress:{downloaded:n,total:100}})},setOtaDownloadFailed:t=>{e({downloading:!1,downloaded:!1,error:t??`Failed to download update`,otaPhase:`error`})},dismiss:()=>{let n=t();(n.runtimeType!==`mobile`||n.otaPhase!==`pending_restart`)&&e({available:!1,downloaded:!1,info:null,otaDecision:null,otaPhase:`idle`,otaDownloadSkipped:!1})},reset:()=>{e(nr)}})),ar=`https://github.com/yee94/openchamber/releases`;function or(e){let t=new Date(`${e}T00:00:00`);return Number.isNaN(t.getTime())?e:new Intl.DateTimeFormat(_e(),{year:`numeric`,month:`short`,day:`numeric`}).format(t)}function sr(e){return e.replace(/^## \[[^\]]+\] - \d{4}-\d{2}-\d{2}\s*\n?/,``).trim()}function cr(e){return e.replace(/(^|[^a-zA-Z0-9])@([a-zA-Z0-9-]+)/g,`$1[@$2](https://github.com/$2)`)}function lr(e,t){let n=e.split(`.`).map(e=>Number.parseInt(e,10)),r=t.split(`.`).map(e=>Number.parseInt(e,10));for(let e=0;e<3;e+=1){let t=Number.isFinite(n[e])?n[e]:0,i=Number.isFinite(r[e])?r[e]:0;if(t!==i)return i-t}return 0}function ur(e){let t=/^## \[(\d+\.\d+\.\d+)\] - (\d{4}-\d{2}-\d{2})\s*$/gm,n=[],r;for(;(r=t.exec(e))!==null;)n.push({version:r[1]??``,date:r[2]??``,start:r.index});return n.length===0?[]:n.map((t,r)=>{let i=n[r+1]?.start??e.length,a=e.slice(t.start,i).trim();return{version:t.version,date:t.date,start:t.start,end:i,raw:a}})}var dr=2e3,fr=6e5;async function pr(){try{let e=await i(`/api/openchamber/update-install`,{method:`POST`,headers:{"Content-Type":`application/json`}});return e.ok?{success:!0,autoRestart:(await e.json().catch(()=>({}))).autoRestart!==!1}:{success:!1,error:(await e.json().catch(()=>({}))).error||`Server error: ${e.status}`}}catch(e){return{success:!1,error:e instanceof Error?e.message:void 0}}}async function mr(){try{return(await i(`/health`,{method:`GET`,headers:{Accept:`application/json`}})).ok}catch{return!1}}async function hr(e,t=Math.ceil(fr/dr),n=dr){for(let r=0;r<t;r++){try{let t=await i(`/api/openchamber/update-check`,{method:`GET`,headers:{Accept:`application/json`}});if(t.ok){let n=await t.json().catch(()=>null);if(n&&n.available===!1||n&&typeof n.currentVersion==`string`&&typeof e==`string`&&n.currentVersion!==e)return!0}else if((t.status===401||t.status===403)&&await mr())return!0}catch{}await new Promise(e=>setTimeout(e,n))}return!1}var gr=({open:e,onOpenChange:t,info:n,downloading:r,downloaded:i,progress:a,error:o,onDownload:s,onRestart:c,runtimeType:l=`desktop`})=>{let{t:u}=W(),[d,f]=(0,Q.useState)(!1),[p,m]=(0,Q.useState)(`idle`),[h,g]=(0,Q.useState)(null),_=ir(e=>e.otaDownloadSkipped),v=n?.releaseUrl||(n?.version?`${ar}/tag/v${n.version}`:ar),y=n?.downloadUrl,b=a?.total?Math.round(a.downloaded/a.total*100):0,x=l===`web`,S=l===`mobile`,C=S&&n?.manualUpdate===!0&&!!y,w=S&&n?.inAppApply===!0,T=l===`desktop`&&n?.manualUpdate===!0,E=n?.updateCommand||`openchamber update`,D=ge(e=>{!e&&w&&i&&ir.getState().dismiss(),t(e)}),O=ge(()=>{ir.getState().dismiss(),t(!1)});(0,Q.useEffect)(()=>{e||(m(`idle`),g(null))},[e]);let k=async()=>{(await ve(E)).ok&&(f(!0),setTimeout(()=>f(!1),2e3))},A=(0,Q.useCallback)(async e=>{await Lt(e)},[]),j=(0,Q.useCallback)(async()=>{m(`updating`),g(null);let e=await pr();if(!e.success){m(`error`),g(e.error||u(`updateDialog.error.updateFailed`));return}e.autoRestart&&(m(`restarting`),await new Promise(e=>setTimeout(e,2e3))),m(`reconnecting`),await hr(n?.currentVersion)?window.location.reload():(m(`error`),g(u(`updateDialog.error.takingLonger`)))},[n?.currentVersion,u]),M=(0,Q.useCallback)(()=>{y&&A(y)},[A,y]),N=p!==`idle`&&p!==`error`,P=(0,Q.useMemo)(()=>{if(!n?.body)return null;let e=n.body.trim();if(!e)return null;let t=ur(e);if(t.length===0)return{kind:`raw`,title:u(`updateDialog.changelog.title`),content:cr(e)};let r=[...t].sort((e,t)=>lr(e.version,t.version));return{kind:`sections`,title:u(`updateDialog.changelog.title`),sections:r.map(t=>({version:t.version,dateLabel:or(t.date),content:cr(sr(t.raw)||e)}))}},[n?.body,u]);return(0,X.jsx)(Re,{open:e,onOpenChange:N?void 0:D,children:(0,X.jsxs)(Fe,{className:`max-w-4xl gap-0 p-4 sm:p-5 bg-background border-[var(--interactive-border)]`,showCloseButton:!0,children:[(0,X.jsxs)(`div`,{className:`mb-3 pr-8 sm:mb-4`,children:[(0,X.jsxs)(Ie,{className:`flex items-center gap-2`,children:[(0,X.jsx)(q,{name:`download-cloud`,className:`h-5 w-5 text-[var(--primary-base)]`}),(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:u(p===`restarting`||p===`reconnecting`?`updateDialog.header.updating`:`updateDialog.header.updateAvailable`)})]}),(n?.currentVersion||n?.version)&&(0,X.jsxs)(`div`,{className:`mt-1.5 flex items-center gap-1.5 pl-7 font-mono text-[11px] leading-4 tracking-[-0.01em] tabular-nums sm:text-xs`,children:[n?.currentVersion&&(0,X.jsx)(`span`,{className:`text-muted-foreground/75`,children:n.currentVersion}),n?.currentVersion&&n?.version&&(0,X.jsx)(`span`,{className:`text-muted-foreground/40`,children:`→`}),n?.version&&(0,X.jsx)(`span`,{className:`font-medium text-[var(--primary-base)]`,children:n.version})]})]}),(0,X.jsxs)(`div`,{className:`space-y-3 sm:space-y-4`,children:[x&&N&&(0,X.jsxs)(`div`,{className:`rounded-lg bg-[var(--surface-elevated)]/30 p-5 border border-[var(--surface-subtle)]`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,X.jsx)(q,{name:`loader`,className:`h-5 w-5 animate-spin text-[var(--primary-base)]`}),(0,X.jsxs)(`div`,{className:`typography-ui-label text-foreground`,children:[p===`updating`&&u(`updateDialog.status.installingUpdate`),p===`restarting`&&u(`updateDialog.status.serverRestarting`),p===`reconnecting`&&u(`updateDialog.status.waitingForServer`)]})]}),(0,X.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:u(`updateDialog.status.autoReloadHint`)})]}),P&&!N&&(0,X.jsxs)(`section`,{className:`overflow-hidden rounded-xl border border-[var(--surface-subtle)] bg-[var(--surface-elevated)]/20`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--surface-subtle)] px-3.5 py-2.5 sm:px-4 sm:py-3`,children:[(0,X.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-[var(--primary-base)]`,"aria-hidden":`true`}),(0,X.jsx)(`h3`,{className:`typography-ui-caption font-medium text-muted-foreground`,children:P.title})]}),(0,X.jsx)(Ft,{className:`max-h-[min(42dvh,22rem)] p-0 sm:max-h-[400px]`,fillContainer:!1,children:P.kind===`raw`?(0,X.jsx)(`div`,{className:`break-words p-3.5 text-[13px] leading-[1.65] text-foreground sm:p-4 sm:text-sm [&_.markdown-content]:leading-[1.65] [&_a]:!text-[var(--primary-base)] [&_a]:!no-underline [&_a:hover]:!underline`,onClickCapture:e=>{let t=e.target.closest(`a`);t&&t.href&&(e.preventDefault(),e.stopPropagation(),A(t.href))},children:(0,X.jsx)(Pt,{content:P.content,disableLinkSafety:!0,enableFileReferences:!1})}):(0,X.jsx)(`div`,{className:`divide-y divide-[var(--surface-subtle)]`,children:P.sections.map(e=>(0,X.jsxs)(`div`,{className:`p-3.5 sm:p-4`,children:[(0,X.jsxs)(`div`,{className:`mb-2.5 flex flex-wrap items-center gap-x-2 gap-y-1 sm:mb-3`,children:[(0,X.jsxs)(`span`,{className:`rounded-md bg-[var(--primary-base)]/10 px-1.5 py-0.5 font-mono text-[11px] font-medium leading-4 text-[var(--primary-base)] tabular-nums sm:text-xs`,children:[`v`,e.version]}),(0,X.jsx)(`span`,{className:`text-[11px] leading-4 text-muted-foreground/75 sm:text-xs`,children:e.dateLabel})]}),(0,X.jsx)(`div`,{className:`break-words text-[13px] leading-[1.65] text-foreground sm:text-sm [&_.markdown-content]:leading-[1.65] [&_a]:!text-[var(--primary-base)] [&_a]:!no-underline [&_a:hover]:!underline`,onClickCapture:e=>{let t=e.target.closest(`a`);t&&t.href&&(e.preventDefault(),e.stopPropagation(),A(t.href))},children:(0,X.jsx)(Pt,{content:e.content,disableLinkSafety:!0,enableFileReferences:!1})})]},e.version))})})]}),x&&p===`error`&&(0,X.jsxs)(`div`,{className:`space-y-2 mt-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 typography-meta text-muted-foreground`,children:[(0,X.jsx)(q,{name:`terminal`,className:`h-4 w-4`}),(0,X.jsx)(`span`,{children:u(`updateDialog.fallback.updateViaTerminal`)})]}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2 p-1 pl-3 bg-[var(--surface-elevated)]/50 rounded-md border border-[var(--surface-subtle)]`,children:[(0,X.jsx)(`code`,{className:`flex-1 font-mono text-sm text-foreground overflow-x-auto whitespace-nowrap`,children:E}),(0,X.jsx)(`button`,{onClick:k,className:K(`flex items-center justify-center p-2 rounded`,`text-muted-foreground hover:text-foreground hover:bg-[var(--interactive-hover)]`,`transition-colors`,d&&`text-[var(--status-success)]`),title:u(d?`updateDialog.actions.copied`:`updateDialog.actions.copyCommand`),children:d?(0,X.jsx)(q,{name:`check`,className:`h-4 w-4`}):(0,X.jsx)(q,{name:`clipboard`,className:`h-4 w-4`})})]})]}),!x&&(!S||w)&&r&&(0,X.jsxs)(`div`,{className:`mt-3 space-y-2 rounded-lg border border-[var(--surface-subtle)] bg-[var(--surface-elevated)]/20 px-3.5 py-3 sm:mt-4 sm:px-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground sm:text-[13px]`,children:u(`updateDialog.status.downloadingPayload`)}),(0,X.jsxs)(`span`,{className:`shrink-0 font-mono text-[11px] leading-4 text-foreground tabular-nums sm:text-xs`,children:[b,`%`]})]}),(0,X.jsx)(`div`,{className:`h-1 overflow-hidden rounded-full bg-[var(--surface-subtle)] sm:h-1.5`,children:(0,X.jsx)(`div`,{className:`h-full rounded-full bg-[var(--primary-base)] transition-all duration-300`,style:{width:`${b}%`}})})]}),(o||h)&&(0,X.jsx)(`div`,{className:`p-3 mt-4 bg-[var(--status-error-background)] border border-[var(--status-error-border)] rounded-lg`,children:(0,X.jsx)(`p`,{className:`text-sm text-[var(--status-error)]`,children:o||h})})]}),w&&i&&_&&(0,X.jsxs)(`div`,{className:`mt-4 flex items-center gap-2 rounded-lg border border-[var(--status-success-border)] bg-[var(--status-success-background)] px-3 py-2.5 text-sm text-[var(--status-success)]`,children:[(0,X.jsx)(q,{name:`check`,className:`h-4 w-4 shrink-0`}),(0,X.jsx)(`span`,{children:u(`updateDialog.status.otaBundleReused`)})]}),(0,X.jsxs)(`div`,{className:`mt-4 flex items-center justify-between gap-4`,children:[!S||C?(0,X.jsxs)(`a`,{href:S?y:v,target:`_blank`,rel:`noopener noreferrer`,className:`flex items-center gap-1.5 typography-ui-label text-muted-foreground hover:text-foreground transition-colors shrink-0`,children:[(0,X.jsx)(q,{name:`external-link`,className:`h-4 w-4`}),`GitHub`]}):(0,X.jsx)(`span`,{}),(0,X.jsxs)(`div`,{className:`flex-1 flex justify-end`,children:[!x&&(!S||w)&&!T&&!i&&!r&&(0,X.jsxs)(J,{onClick:s,size:`default`,children:[(0,X.jsx)(q,{name:`download`,className:`h-4 w-4`}),u(w?`updateDialog.actions.applyOtaNow`:`updateDialog.actions.downloadUpdate`)]}),!x&&!S&&T&&!i&&!r&&(0,X.jsxs)(J,{onClick:()=>void A(v),size:`default`,children:[(0,X.jsx)(q,{name:`external-link`,className:`h-4 w-4`}),u(`updateDialog.actions.openMobileUpdate`)]}),!x&&(!S||w)&&r&&(0,X.jsxs)(J,{disabled:!0,size:`default`,children:[(0,X.jsx)(q,{name:`loader`,className:`h-4 w-4 animate-spin`}),u(`updateDialog.status.downloading`)]}),!x&&(!S||w)&&i&&(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[w&&(0,X.jsx)(J,{onClick:O,variant:`ghost`,size:`default`,children:u(`updateDialog.actions.later`)}),(0,X.jsxs)(J,{onClick:c,size:`default`,children:[(0,X.jsx)(q,{name:`restart`,className:`h-4 w-4`}),u(`updateDialog.actions.restartToUpdate`)]})]}),S&&!w&&C&&(0,X.jsxs)(J,{onClick:M,size:`default`,children:[(0,X.jsx)(q,{name:`external-link`,className:`h-4 w-4`}),u(`updateDialog.actions.openMobileUpdate`)]}),x&&!N&&(0,X.jsxs)(J,{onClick:j,size:`default`,children:[(0,X.jsx)(q,{name:`download`,className:`h-4 w-4`}),u(`updateDialog.actions.updateNow`)]}),x&&N&&(0,X.jsxs)(J,{disabled:!0,size:`default`,children:[(0,X.jsx)(q,{name:`loader`,className:`h-4 w-4 animate-spin`}),u(`updateDialog.status.updating`)]})]})]})]})})},_r=e(O(),1);function vr(e){let t=(0,Y.c)(20),{label:n,children:r,description:i,itemId:a,ariaLabel:o,className:s,cardClassName:c,cardId:l}=e,u=typeof n==`string`&&/^[\p{Script=Latin}\p{Number}\p{Punctuation}\p{Separator}]+$/u.test(n)?`latin`:void 0,d;t[0]===s?d=t[1]:(d=K(`oc-settings-group`,s),t[0]=s,t[1]=d);let f;t[2]!==n||t[3]!==u?(f=n?(0,X.jsx)(`div`,{className:`oc-settings-group-label`,"data-settings-label-script":u,children:n}):null,t[2]=n,t[3]=u,t[4]=f):f=t[4];let p;t[5]===c?p=t[6]:(p=K(`oc-settings-group-card`,c),t[5]=c,t[6]=p);let m;t[7]!==l||t[8]!==r||t[9]!==a||t[10]!==p?(m=(0,X.jsx)(`div`,{id:l,"data-settings-item":a,className:p,children:r}),t[7]=l,t[8]=r,t[9]=a,t[10]=p,t[11]=m):m=t[11];let h;t[12]===i?h=t[13]:(h=i?(0,X.jsx)(`p`,{className:`oc-settings-group-description text-muted-foreground`,children:i}):null,t[12]=i,t[13]=h);let g;return t[14]!==o||t[15]!==d||t[16]!==f||t[17]!==m||t[18]!==h?(g=(0,X.jsxs)(`section`,{className:d,"aria-label":o,children:[f,m,h]}),t[14]=o,t[15]=d,t[16]=f,t[17]=m,t[18]=h,t[19]=g):g=t[19],g}function yr(e){let t=(0,Y.c)(20),n,r,i,a,o,s,c,l;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7],l=t[8]):({label:s,description:a,descriptionPlacement:l,ariaLabel:n,groupClassName:o,cardClassName:r,children:i,...c}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=c,t[8]=l);let u=l===void 0?`inside`:l,d=u===`outside`?a:void 0,f=u===`inside`?a:void 0,p;t[9]!==i||t[10]!==s||t[11]!==c||t[12]!==f?(p=(0,X.jsx)(br,{label:s,description:f,...c,children:i}),t[9]=i,t[10]=s,t[11]=c,t[12]=f,t[13]=p):p=t[13];let m;return t[14]!==n||t[15]!==r||t[16]!==o||t[17]!==d||t[18]!==p?(m=(0,X.jsx)(vr,{ariaLabel:n,className:o,cardClassName:r,description:d,children:p}),t[14]=n,t[15]=r,t[16]=o,t[17]=d,t[18]=p,t[19]=m):m=t[19],m}function br(e){let t=(0,Y.c)(22),{label:n,children:r,description:i,itemId:a,className:o,copyClassName:s,controlClassName:c}=e,l;t[0]===o?l=t[1]:(l=K(`oc-settings-group-row oc-settings-split-row`,o),t[0]=o,t[1]=l);let u;t[2]===s?u=t[3]:(u=K(`oc-settings-split-row-copy`,s),t[2]=s,t[3]=u);let d;t[4]===n?d=t[5]:(d=n?(0,X.jsx)(`div`,{className:`typography-ui-label text-foreground`,children:n}):null,t[4]=n,t[5]=d);let f;t[6]===i?f=t[7]:(f=i?(0,X.jsx)(`span`,{className:`typography-meta text-muted-foreground`,children:i}):null,t[6]=i,t[7]=f);let p;t[8]!==u||t[9]!==d||t[10]!==f?(p=(0,X.jsxs)(`div`,{className:u,children:[d,f]}),t[8]=u,t[9]=d,t[10]=f,t[11]=p):p=t[11];let m;t[12]===c?m=t[13]:(m=K(`oc-settings-split-row-control`,c),t[12]=c,t[13]=m);let h;t[14]!==r||t[15]!==m?(h=(0,X.jsx)(`div`,{"data-settings-value":``,className:m,children:r}),t[14]=r,t[15]=m,t[16]=h):h=t[16];let g;return t[17]!==a||t[18]!==l||t[19]!==p||t[20]!==h?(g=(0,X.jsxs)(`div`,{"data-settings-item":a,className:l,children:[p,h]}),t[17]=a,t[18]=l,t[19]=p,t[20]=h,t[21]=g):g=t[21],g}function xr(e){let t=(0,Y.c)(32),{checked:n,onChange:r,label:i,ariaLabel:a,description:o,itemId:s,disabled:c,className:l}=e,u=c!==void 0&&c,d;t[0]!==n||t[1]!==u||t[2]!==r?(d=()=>{u||r(!n)},t[0]=n,t[1]=u,t[2]=r,t[3]=d):d=t[3];let f=d,p=Sr,m=u?`cursor-not-allowed`:`cursor-pointer`,h;t[4]!==l||t[5]!==m?(h=K(`oc-settings-group-row oc-settings-split-row group`,m,l),t[4]=l,t[5]=m,t[6]=h):h=t[6];let g=u?-1:0,_=u||void 0,v,y;t[7]===f?(v=t[8],y=t[9]):(v=e=>{p(e.target)||f()},y=e=>{p(e.target)||(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),f())},t[7]=f,t[8]=v,t[9]=y);let b;t[10]===i?b=t[11]:(b=(0,X.jsx)(`span`,{className:`typography-ui-label text-foreground`,children:i}),t[10]=i,t[11]=b);let x;t[12]===o?x=t[13]:(x=o?(0,X.jsx)(`span`,{className:`typography-meta text-muted-foreground`,children:o}):null,t[12]=o,t[13]=x);let S;t[14]!==x||t[15]!==b?(S=(0,X.jsxs)(`div`,{className:`oc-settings-split-row-copy`,children:[b,x]}),t[14]=x,t[15]=b,t[16]=S):S=t[16];let C;t[17]!==a||t[18]!==n||t[19]!==u||t[20]!==r?(C=(0,X.jsx)(`div`,{"data-settings-value":``,className:`oc-settings-split-row-control`,children:(0,X.jsx)(Je,{checked:n,onChange:r,disabled:u,ariaLabel:a})}),t[17]=a,t[18]=n,t[19]=u,t[20]=r,t[21]=C):C=t[21];let w;return t[22]!==n||t[23]!==s||t[24]!==S||t[25]!==C||t[26]!==h||t[27]!==g||t[28]!==_||t[29]!==v||t[30]!==y?(w=(0,X.jsxs)(`div`,{"data-settings-item":s,className:h,role:`button`,tabIndex:g,"aria-pressed":n,"aria-disabled":_,onClick:v,onKeyDown:y,children:[S,C]}),t[22]=n,t[23]=s,t[24]=S,t[25]=C,t[26]=h,t[27]=g,t[28]=_,t[29]=v,t[30]=y,t[31]=w):w=t[31],w}function Sr(e){return e instanceof HTMLElement&&e.closest(`button, a, input, select, textarea`)!==null}function Cr(e,t,n){return Math.min(n,Math.max(t,e))}function wr(e){if(!Number.isFinite(e))return 0;let t=String(e);if(t.includes(`e-`)){let[,e]=t.split(`e-`);return Number(e)||0}let n=t.split(`.`);return n.length===2?n[1].length:0}function Tr(e,t){let n=wr(t);return n<=0?e:Number(e.toFixed(n))}var Er=Q.forwardRef(({value:e,onValueChange:t,min:n=-1/0,max:r=1/0,step:i=1,className:a,containerClassName:o,onBlur:s,disabled:c,fallbackValue:l,onClear:u,emptyLabel:d=`—`,...f},p)=>{let{t:m}=W(),[h,g]=Q.useState(()=>e===void 0?``:String(e)),{isMobile:_}=Mt(),v=Q.useRef(!1),y=Q.useRef(null),b=Q.useCallback(()=>{if(typeof document>`u`||typeof window>`u`)return;y.current?.();let e=e=>{e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation?.(),y.current?.()},t=window.setTimeout(()=>{y.current?.()},700);y.current=()=>{window.clearTimeout(t),document.removeEventListener(`click`,e,!0),y.current=null},document.addEventListener(`click`,e,!0)},[]);Q.useEffect(()=>()=>{y.current?.()},[]),Q.useEffect(()=>{g(e===void 0?``:String(e))},[e]);let x=Q.useMemo(()=>e===void 0?l===void 0?Number.isFinite(n)?n:0:l:e,[l,n,e]),S=Q.useRef(x);Q.useEffect(()=>{S.current=x},[x]);let C=Q.useCallback(e=>{let a=Tr(Cr(e,n,r),i);S.current=a,t(a)},[r,n,t,i]),w=Q.useCallback(e=>{let t=e.target.value;if(g(t),t.trim()===``){u?.();return}let n=Number(t);Number.isFinite(n)&&C(n)},[C,u]),T=Q.useCallback(t=>{if(h.trim()===``){u||g(e===void 0?``:String(e)),s?.(t);return}let a=Number(h);if(!Number.isFinite(a))g(e===void 0?``:String(e));else{let t=Tr(Cr(a,n,r),i);t===e?S.current=t:C(a),g(String(t))}s?.(t)},[C,h,r,n,s,u,i,e]),E=!!(c||x>=r),D=!!(c||x<=n),O=()=>{D||C(S.current-i)},k=()=>{E||C(S.current+i)},A=e=>t=>{t.preventDefault(),t.stopPropagation(),v.current=!0,b(),e()},j=e=>t=>{if(v.current){v.current=!1,t.preventDefault(),t.stopPropagation();return}e()};return _?(0,X.jsxs)(`div`,{"data-slot":`number-input`,className:K(`flex h-9 shrink-0 items-stretch overflow-x-hidden overflow-y-hidden rounded-lg border border-border bg-transparent select-none overscroll-contain`,`[-webkit-user-select:none] [-webkit-touch-callout:none]`,`disabled:pointer-events-none disabled:opacity-50`,o),children:[(0,X.jsx)(`button`,{type:`button`,"aria-label":m(`numberInput.actions.decreaseAria`),disabled:D,onTouchStart:A(O),onClick:j(O),className:K(`grid h-full min-h-0 w-9 place-items-center overflow-x-hidden overflow-y-hidden border-r border-border p-0 leading-none touch-none`,`text-muted-foreground`,`disabled:pointer-events-none disabled:opacity-50`,!D&&`active:bg-interactive-hover`),children:(0,X.jsx)(q,{name:`subtract`,className:`block h-4 w-4`})}),(0,X.jsx)(`div`,{"data-slot":`number-input-value`,className:K(`flex h-full min-w-0 w-14 items-center justify-center bg-transparent px-1.5`,`text-center text-[16px] leading-none text-foreground [font-variant-numeric:tabular-nums]`,a),"aria-live":`polite`,children:e===void 0?d:h}),(0,X.jsx)(`button`,{type:`button`,"aria-label":m(`numberInput.actions.increaseAria`),disabled:E,onTouchStart:A(k),onClick:j(k),className:K(`grid h-full min-h-0 w-9 place-items-center overflow-x-hidden overflow-y-hidden border-l border-border p-0 leading-none touch-none`,`text-muted-foreground`,`disabled:pointer-events-none disabled:opacity-50`,!E&&`active:bg-interactive-hover`),children:(0,X.jsx)(q,{name:`add`,className:`block h-4 w-4`})})]}):(0,X.jsxs)(`div`,{"data-slot":`number-input`,className:K(`flex h-7 shrink-0 items-stretch overflow-x-hidden overflow-y-hidden rounded-lg border border-border bg-transparent`,`disabled:pointer-events-none disabled:opacity-50`,o),children:[(0,X.jsx)(`button`,{type:`button`,"aria-label":m(`numberInput.actions.decreaseAria`),disabled:D,onClick:()=>C(S.current-i),className:K(`flex h-full w-7 items-center justify-center overflow-x-hidden overflow-y-hidden border-r border-border p-0 leading-none touch-manipulation`,`text-muted-foreground hover:bg-interactive-hover hover:text-foreground`,`disabled:pointer-events-none disabled:opacity-50`),children:(0,X.jsx)(q,{name:`subtract`,className:`block h-3.5 w-3.5`})}),(0,X.jsx)(`input`,{...f,"data-slot":`number-input-value`,ref:p,type:`text`,inputMode:f.inputMode??`numeric`,value:h,onChange:w,onBlur:T,disabled:c,spellCheck:!1,autoComplete:`off`,autoCorrect:`off`,autoCapitalize:`off`,className:K(`h-full min-w-0 w-14 bg-transparent px-1.5 text-center typography-ui-label leading-none text-foreground [font-variant-numeric:tabular-nums]`,`placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground`,`appearance-none outline-none [appearance:textfield] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,`disabled:pointer-events-none disabled:cursor-not-allowed`,a)}),(0,X.jsx)(`button`,{type:`button`,"aria-label":m(`numberInput.actions.increaseAria`),disabled:E,onClick:()=>C(S.current+i),className:K(`flex h-full w-7 items-center justify-center overflow-x-hidden overflow-y-hidden border-l border-border p-0 leading-none touch-manipulation`,`text-muted-foreground hover:bg-interactive-hover hover:text-foreground`,`disabled:pointer-events-none disabled:opacity-50`),children:(0,X.jsx)(q,{name:`add`,className:`block h-3.5 w-3.5`})})]})});Er.displayName=`NumberInput`;var Dr=`/mcp/oauth/callback`,Or=e=>{if(typeof window>`u`)return null;try{let t=e.replace(/-/g,`+`).replace(/_/g,`/`),n=t.length%4==0?``:`=`.repeat(4-t.length%4),r=window.atob(t+n),i=Uint8Array.from(r,e=>e.charCodeAt(0));return new TextDecoder().decode(i)}catch{return null}},kr=e=>{let t=jr(e.get(`state`));if(t)return t;let n=e.get(`server`);if(typeof n!=`string`||!n.trim())return null;let r=e.get(`directory`);return{name:n.trim(),directory:typeof r==`string`&&r.trim()?r.trim():null}},Ar=e=>{let t=e.get(`state`);return typeof t==`string`&&t.trim()||null},jr=e=>{if(typeof e!=`string`||!e.trim())return null;let t=Or(e.trim());if(!t)return null;try{let e=JSON.parse(t);return e?.v!==1||typeof e.n!=`string`||!e.n.trim()?null:{name:e.n.trim(),directory:typeof e.d==`string`&&e.d.trim()?e.d.trim():null}}catch{return null}},Mr=e=>typeof e==`object`&&!!e&&`updateStatus`in e&&typeof e.updateStatus==`function`,Nr=e=>{let t=document.createElement(`div`);t.className=`cm-vim-panel`;let n=$t(e);if(!n)return{top:!1,dom:t};n.state.statusbar=t;let r=n.state.vimPlugin;return Mr(r)&&r.updateStatus(),{top:!1,dom:t,destroy(){n.state.statusbar===t&&(n.state.statusbar=null)}}};function Pr(e){return e?[Qt(),he.of(Nr),me()]:[]}var Fr={next:`Next match`,prev:`Previous match`,select:`Select all matches`,replace:`Replace`,replaceAll:`Replace all`,close:`Close`},Ir={case:`Match case`,re:`Regular expression`,word:`Match whole word`};function Lr(e){let t=e.querySelector(`.cm-search`);if(t){for(let[e,n]of Object.entries(Fr)){let r=t.querySelector(`button[name="${e}"]`);r&&!r.title&&(r.title=n)}for(let[e,n]of Object.entries(Ir)){let r=t.querySelector(`input[name="${e}"]`)?.parentElement;r&&!r.title&&(r.title=n)}}}var Rr=new WeakMap;function zr(e,t){let n=Jt(e.state);if(!n.valid)return Rr.delete(e),0;let r=Rr.get(e);if(!t&&r?.doc===e.state.doc&&r.query.eq(n))return r.total;let i=n.getCursor(e.state),a=0;for(let e=i.next();!e.done;e=i.next())a+=1;return Rr.set(e,{query:n,doc:e.state.doc,total:a}),a}function Br(e){let t=Jt(e.state);if(!t.valid)return 0;let n=e.state.selection.main,r=t.getCursor(e.state),i=0,a=0;for(let e=r.next();!e.done;e=r.next()){let t=e.value;if(i+=1,a===0&&(a=i),n.from===t.from&&n.to===t.to||n.from<t.to&&n.to>t.from||t.from>=n.head)return i}return a}function Vr(e,t,n=!1){let r=e.querySelector(`.cm-search`);if(!r)return;let i=r.querySelector(`.cm-search-message`);if(!i){i=document.createElement(`span`),i.className=`cm-search-message`,i.setAttribute(`aria-live`,`polite`);let e=r.querySelector(`button[name="next"]`),t=e?.parentNode===r?e:r.firstChild;r.insertBefore(i,t)}let a=zr(t,n),o=a===0?0:Br(t);i.textContent=a===0?``:`${o}/${a}`}var Hr=new U,Ur=new U,Wr=new U,Gr=new U,Kr=new U,qr=new U,Jr=new U,Yr=e=>e,Xr=oe,Zr=Kt,Qr=Xt,$r=class extends re{id;containerMap;constructor(e,t){super(),this.id=e,this.containerMap=t}toDOM(){let e=this.containerMap.get(this.id);return e||(e=document.createElement(`div`),e.className=`oc-block-widget`,e.dataset.widgetId=this.id,this.containerMap.set(this.id,e)),e}eq(e){return e.id===this.id}destroy(){}},ei=(e,t)=>!e||e.length===0?[]:de.define({create(n){let r=new H,i=[...e].sort((e,t)=>e.afterLine-t.afterLine);for(let e of i){let i=n.doc.lines;if(e.afterLine>i)continue;let a=n.doc.line(e.afterLine);r.add(a.to,a.to,R.widget({widget:new $r(e.id,t),block:!0,side:1}))}return r.finish()},update(e,t){return e.map(t.changes)},provide:e=>V.decorations.from(e)}),ti=e=>{if(!e)return[];let t=Math.max(1,e.start),n=Math.max(t,e.end);return ne.fromClass(class{decorations;constructor(e){this.decorations=this.build(e)}update(e){(e.docChanged||e.viewportChanged)&&(this.decorations=this.build(e.view))}build(e){let r=new H;for(let i=t;i<=n&&i<=e.state.doc.lines;i+=1){let t=e.state.doc.line(i);r.add(t.from,t.from,R.line({class:`oc-cm-selected-line`}))}return r.finish()}},{decorations:e=>e.decorations})};function ni({value:e,onChange:t,extensions:n,className:r,readOnly:i,lineNumbersConfig:a,highlightLines:o,onViewReady:s,onViewDestroy:c,blockWidgets:l,enableSearch:u,searchOpen:d,onSearchOpenChange:f,vimMode:p}){let m=Q.useRef(null),h=Q.useRef(null),g=Q.useRef(e),_=Q.useRef(t),v=Q.useRef(s),y=Q.useRef(c),b=Q.useRef(f),x=Q.useRef(l),S=Q.useRef(p),C=Q.useRef(new Map),[w,T]=Q.useState([]),E=Q.useCallback(e=>{let t=(e??[]).map(e=>{let t=C.current.get(e.id);return t?{id:e.id,content:e.content,container:t}:null}).filter(e=>e!==null);T(e=>e.length===t.length&&e.every((e,n)=>{let r=t[n];return e.id===r.id&&e.content===r.content&&e.container===r.container})?e:t)},[]),D=Q.useCallback(e=>{let t=m.current,n=e??h.current;if(!t||!n)return;let r=n.dom.querySelector(`.cm-gutters`),i=r instanceof HTMLElement?r.getBoundingClientRect().width:0;t.style.setProperty(`--oc-editor-gutter-width`,`${i}px`)},[]);return Q.useEffect(()=>{g.current=e},[e]),Q.useEffect(()=>{_.current=t},[t]),Q.useEffect(()=>{v.current=s,y.current=c},[s,c]),Q.useEffect(()=>{b.current=f},[f]),Q.useEffect(()=>{x.current=l,E(l)},[l,E]),Q.useEffect(()=>{if(!m.current)return;let e=(()=>{if(typeof document>`u`)return null;let e=document.querySelector(`meta[name="csp-nonce"]`)?.getAttribute(`content`);if(e)return e;let t=window.__OPENCHAMBER_CSP_NONCE__;return typeof t==`string`&&t.length>0?t:null})(),t=fe.create({doc:g.current,extensions:[...e?[V.cspNonce.of(e)]:[],se({fixed:!0}),Hr.of(ae(a)),Wt(),te.of(` `),Jr.of(Pr(p)),ce.of([Ut,...Ht,...Gt]),V.updateListener.of(e=>{D(e.view),(e.viewportChanged||e.geometryChanged)&&E(x.current);let t=qt(e.startState),n=qt(e.state);t!==n&&b.current?.(n);let r=!Jt(e.startState).eq(Jt(e.state));if(n&&(t!==n||r||e.docChanged||e.selectionSet)&&Vr(e.view.dom,e.view,t!==n||r||e.docChanged),!e.docChanged)return;let i=e.state.doc.toString();g.current=i,_.current(i),E(x.current)}),Ur.of(V.editable.of(!i)),Wr.of(n??[]),Gr.of(ti(o)),Kr.of(ei(l,C.current)),qr.of(u?[Yt({top:!0}),ce.of(Yr(Zt))]:[])]});return h.current=new V({state:t,parent:m.current}),Xr(h.current,h.current.state.doc.length,200),h.current.requestMeasure(),requestAnimationFrame(()=>{D(h.current),E(x.current)}),h.current&&v.current?.(h.current),()=>{y.current?.(),h.current?.destroy(),h.current=null,T([])}},[x,D,E]),Q.useEffect(()=>{let e=h.current;e&&(e.dispatch({effects:[Hr.reconfigure(ae(a)),Ur.reconfigure(V.editable.of(!i)),Wr.reconfigure(n??[]),Gr.reconfigure(ti(o)),Kr.reconfigure(ei(l,C.current)),qr.reconfigure(u?[Yt({top:!0}),ce.of(Yr(Zt))]:[])]}),Xr(e,e.state.doc.length,200),e.requestMeasure(),requestAnimationFrame(()=>{D(e),E(x.current)}))},[n,o,a,i,l,u,D,E]),Q.useEffect(()=>{let e=h.current;if(!e){S.current=p;return}S.current!==p&&(S.current=p,e.dispatch({effects:Jr.reconfigure(Pr(p))}))},[p]),Q.useEffect(()=>{let e=h.current;!e||u===!1||(d?(Zr(e),requestAnimationFrame(()=>{Lr(e.dom),Vr(e.dom,e,!0)})):Qr(e))},[d,u]),Q.useEffect(()=>{let t=h.current;if(!t)return;let n=t.state.doc.toString();n!==e&&(t.dispatch({changes:{from:0,to:n.length,insert:e}}),Xr(t,t.state.doc.length,300),t.requestMeasure(),requestAnimationFrame(()=>D(t)))},[e,D]),(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{ref:m,className:K(`h-full w-full`,`[&_.cm-editor]:h-full [&_.cm-editor]:w-full`,`[&_.cm-scroller]:font-mono [&_.cm-scroller]:text-[var(--text-code)] [&_.cm-scroller]:leading-6`,`[&_.cm-lineNumbers]:text-[var(--tools-edit-line-number)]`,r)}),w.map(e=>(0,_r.createPortal)(e.content,e.container,e.id))]})}function ri(e,t){let n=e.metadata.variant===`dark`,r=e.config?.fonts?.mono||`monospace`,i=e.colors.syntax.highlights||{},a=e.colors.syntax.tokens||{},o=t?.fontSize?`${t.fontSize}px`:`var(--text-code)`,s=V.theme({"&":{backgroundColor:`var(--background)`,color:e.colors.syntax.base.foreground,fontSize:o,lineHeight:`1.5`,position:`relative`},".cm-scroller":{fontFamily:r,backgroundColor:`var(--background)`},".cm-comment":{color:e.colors.syntax.base.comment},".cm-keyword":{color:e.colors.syntax.base.keyword},".cm-string":{color:e.colors.syntax.base.string},".cm-string-2":{color:a.stringEscape||e.colors.syntax.base.string},".cm-number":{color:e.colors.syntax.base.number},".cm-operator":{color:e.colors.syntax.base.operator},".cm-punctuation":{color:a.punctuation||e.colors.syntax.base.comment},".cm-atom":{color:a.boolean||e.colors.syntax.base.number},".cm-builtin":{color:a.functionCall||e.colors.syntax.base.function},".cm-def":{color:a.variableGlobal||e.colors.syntax.base.variable},".cm-attribute":{color:a.variableOther||a.variableProperty||e.colors.syntax.base.operator},".cm-meta":{color:e.colors.syntax.base.comment},".cm-property":{color:a.variableProperty||e.colors.syntax.base.keyword},".cm-variable":{color:e.colors.syntax.base.variable},".cm-variable-2":{color:a.variableOther||e.colors.syntax.base.function},".cm-variable-3":{color:a.variableGlobal||e.colors.syntax.base.type},".cm-tag":{color:a.tag||e.colors.syntax.base.keyword},".cm-link":{color:a.url||e.colors.syntax.base.keyword,textDecoration:`underline`},".cm-content":{caretColor:e.colors.interactive.cursor},".cm-cursor, .cm-dropCursor":{borderLeftColor:e.colors.interactive.cursor},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:e.colors.interactive.selection},".cm-gutters":{backgroundColor:`var(--background)`,color:i.lineNumber||e.colors.syntax.base.comment,borderRight:`1px solid ${e.colors.interactive.border}`,position:`sticky`,paddingRight:`8px`,left:0,zIndex:2,boxShadow:`0 0 0 var(--background)`},".cm-gutter":{backgroundColor:`var(--background)`},".cm-gutterElement":{backgroundColor:`var(--background)`},".cm-lineNumbers":{backgroundColor:`var(--background)`},".cm-lineNumbers .cm-gutterElement":{paddingLeft:`8px`,paddingRight:`8px`,minWidth:`42px`},".cm-activeLineGutter":{color:i.lineNumberActive||e.colors.syntax.base.foreground},".cm-activeLine":{backgroundColor:e.colors.surface.overlay},".cm-panels":{backgroundColor:`transparent`,color:e.colors.surface.foreground,position:`absolute`,top:`0`,right:`0`,left:`auto`,width:`auto`,zIndex:10,pointerEvents:`none`},".cm-panels-top":{borderBottom:`none`,position:`absolute`,top:`6px`,right:`14px`,left:`auto`,width:`auto`},".cm-panels-bottom":{position:`static`,width:`100%`,pointerEvents:`auto`},".cm-panels-bottom .cm-vim-panel":{borderTop:`1px solid ${e.colors.interactive.border}`,backgroundColor:e.colors.surface.elevated,color:e.colors.surface.mutedForeground,fontFamily:`var(--font-mono)`,fontSize:`12px`,minHeight:`22px`,padding:`2px 8px`},".cm-panel.cm-search":{pointerEvents:`auto`,padding:`4px`,backgroundColor:`color-mix(in srgb, ${e.colors.surface.elevated} 85%, transparent)`,border:`1px solid ${e.colors.interactive.border}`,borderRadius:`10px`,boxShadow:`0 2px 8px color-mix(in srgb, ${e.colors.surface.background} 60%, transparent)`,width:`auto`,minWidth:`360px`,maxWidth:`480px`},".cm-search":{display:`flex`,flexWrap:`wrap`,alignItems:`center`,gap:`0`,width:`100%`,color:e.colors.surface.foreground,fontFamily:`inherit`,fontSize:`13px`,lineHeight:`1`},".cm-search br":{display:`none`},".cm-search .cm-textfield":{appearance:`none`,height:`26px`,margin:0,padding:`0 8px`,borderRadius:`6px !important`,border:`1px solid ${e.colors.interactive.border}`,backgroundColor:e.colors.surface.background,color:e.colors.surface.foreground,fontFamily:`inherit`,fontSize:`12px`,lineHeight:`1`,outline:`none`,transition:`border-color 150ms ease`},".cm-search .cm-textfield::placeholder":{color:e.colors.surface.mutedForeground,opacity:1},".cm-search .cm-textfield:focus":{borderColor:e.colors.primary.base},'.cm-search .cm-textfield[name="search"]':{order:1,flex:`1 1 120px`,maxWidth:`calc(100% - 142px)`,minWidth:`100px`},".cm-search label":{order:2,display:`inline-flex`,alignItems:`center`,justifyContent:`center`,width:`26px`,height:`26px`,minWidth:`26px`,flexShrink:`0`,margin:0,marginLeft:`1px`,padding:0,borderRadius:`4px`,border:`1px solid transparent`,backgroundColor:`transparent`,color:`transparent`,cursor:`pointer`,userSelect:`none`,fontSize:`1px`,lineHeight:`0`,overflow:`hidden`,position:`relative`,transition:`background-color 120ms ease, border-color 120ms ease`},".cm-search label:hover":{backgroundColor:e.colors.interactive.hover},'.cm-search label:has(input[type="checkbox"]:checked)':{backgroundColor:e.colors.interactive.hover,borderColor:e.colors.interactive.border},'.cm-search [type="checkbox"]':{appearance:`none`,WebkitAppearance:`none`,width:`0`,height:`0`,margin:`0`,padding:`0`,border:`none`,position:`absolute`,opacity:`0`,pointerEvents:`none`},".cm-search label::after":{position:`absolute`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,fontSize:`13px`,fontWeight:`600`,lineHeight:`1`,fontFamily:`inherit`,color:e.colors.surface.mutedForeground,pointerEvents:`none`},".cm-search label:hover::after":{color:e.colors.surface.foreground},'.cm-search label:has(input[type="checkbox"]:checked)::after':{color:e.colors.surface.foreground},'.cm-search label:has(input[name="case"])::after':{content:`"Aa"`,fontSize:`12px`,letterSpacing:`-0.5px`},'.cm-search label:has(input[name="re"])::after':{content:`".*"`,fontSize:`13px`,fontFamily:`monospace`},'.cm-search label:has(input[name="word"])::after':{content:`"ab"`,fontSize:`12px`,textDecoration:`underline`,textUnderlineOffset:`2px`},".cm-search .cm-search-message":{order:3,color:e.colors.surface.mutedForeground,backgroundColor:`transparent`,border:`none`,borderRadius:`0`,padding:`0 6px`,fontSize:`11px`,whiteSpace:`nowrap`,lineHeight:`26px`},".cm-search .cm-button":{appearance:`none`,WebkitAppearance:`none`,display:`inline-flex`,alignItems:`center`,justifyContent:`center`,width:`26px`,height:`26px`,minWidth:`26px`,flexShrink:`0`,margin:0,marginLeft:`1px`,padding:0,borderRadius:`4px`,border:`none`,backgroundColor:`transparent`,backgroundImage:`none`,color:`transparent`,cursor:`pointer`,fontSize:`1px`,fontWeight:`400`,lineHeight:`0`,overflow:`hidden`,position:`relative`,boxShadow:`none`,transition:`background-color 120ms ease`},".cm-search .cm-button::after":{position:`absolute`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,fontSize:`15px`,lineHeight:`1`,color:e.colors.surface.mutedForeground,pointerEvents:`none`},".cm-search .cm-button:hover":{backgroundColor:e.colors.interactive.hover},".cm-search .cm-button:hover::after":{color:e.colors.surface.foreground},".cm-search .cm-button:active":{backgroundColor:e.colors.interactive.active},".cm-search .cm-button:focus-visible":{outline:`none`,boxShadow:`0 0 0 1px ${e.colors.interactive.focusRing}`},".cm-search .cm-button:disabled":{opacity:.4,cursor:`default`,pointerEvents:`none`},'.cm-search .cm-button[name="prev"]':{order:21,marginTop:`2px`},'.cm-search .cm-button[name="prev"]::after':{content:`"↑"`},'.cm-search .cm-button[name="next"]':{order:22,marginTop:`2px`},'.cm-search .cm-button[name="next"]::after':{content:`"↓"`},'.cm-search .cm-button[name="select"]':{order:23,marginTop:`2px`},'.cm-search .cm-button[name="select"]::after':{content:`"≡"`,fontSize:`17px`},'.cm-panel.cm-search button[name="close"]':{order:5,appearance:`none`,WebkitAppearance:`none`,display:`inline-flex`,alignItems:`center`,justifyContent:`center`,width:`26px`,height:`26px`,minWidth:`26px`,flexShrink:`0`,margin:`0 0 0 auto`,padding:`0`,borderRadius:`4px`,border:`none`,backgroundColor:`transparent`,backgroundImage:`none`,color:e.colors.surface.mutedForeground,cursor:`pointer`,fontSize:`16px`,lineHeight:`1`,boxShadow:`none`,position:`relative`,overflow:`visible`,transition:`background-color 120ms ease, color 120ms ease`},'.cm-panel.cm-search button[name="close"]:hover':{backgroundColor:e.colors.interactive.hover,color:e.colors.surface.foreground},'.cm-search .cm-button[name="replace"]':{order:24,marginTop:`2px`},'.cm-search .cm-button[name="replace"]::after':{content:`"⇄"`},'.cm-search .cm-button[name="replaceAll"], .cm-search .cm-button[name="replace-all"]':{order:25,marginTop:`2px`},'.cm-search .cm-button[name="replaceAll"]::after, .cm-search .cm-button[name="replace-all"]::after':{content:`"⇉"`},'.cm-search .cm-textfield[name="replace"]':{order:20,flex:`1 1 100%`,maxWidth:`calc(100% - 142px)`,minWidth:`80px`,marginTop:`2px`},".cm-searchMatch":{backgroundColor:e.colors.status.infoBackground,boxShadow:`inset 0 0 0 1px ${e.colors.status.infoBorder}`,borderRadius:`2px`},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:e.colors.interactive.selection,color:e.colors.interactive.selectionForeground,boxShadow:`inset 0 0 0 1px ${e.colors.interactive.borderFocus}`},"&.cm-focused":{outline:`none`}},{dark:n}),c=le.define([{tag:[B.comment,B.docComment,B.meta,B.documentMeta],class:`cm-comment`},{tag:[B.keyword,B.controlKeyword,B.moduleKeyword,B.definitionKeyword,B.modifier],class:`cm-keyword`},{tag:[B.operatorKeyword,B.operator,B.derefOperator,B.updateOperator,B.definitionOperator,B.typeOperator,B.controlOperator,B.logicOperator,B.bitwiseOperator,B.arithmeticOperator,B.compareOperator],class:`cm-operator`},{tag:[B.punctuation,B.separator,B.bracket,B.paren,B.brace,B.squareBracket,B.angleBracket],class:`cm-punctuation`},{tag:[B.string,B.regexp,B.attributeValue,B.special(B.string),B.monospace],class:`cm-string`},{tag:B.escape,class:`cm-string-2`},{tag:[B.number,B.bool,B.atom,B.null,B.self],class:`cm-number`},{tag:[B.function(B.variableName),B.function(B.definition(B.variableName)),B.function(B.propertyName),B.standard(B.variableName),B.special(B.variableName)],class:`cm-builtin`},{tag:B.definition(B.variableName),class:`cm-def`},{tag:[B.variableName,B.local(B.variableName),B.constant(B.variableName),B.literal],class:`cm-variable`},{tag:B.propertyName,class:`cm-property`},{tag:B.attributeName,class:`cm-attribute`},{tag:[B.className,B.typeName,B.namespace],class:`cm-variable-3`},{tag:[B.tagName,B.labelName,B.annotation,B.macroName],class:`cm-tag`},{tag:B.link,class:`cm-link`},{tag:[B.heading,B.heading1,B.heading2,B.heading3,B.heading4,B.heading5,B.heading6],class:`cm-keyword`}]),l=le.define([{tag:[B.comment,B.docComment,B.meta,B.documentMeta],color:e.colors.syntax.base.comment},{tag:[B.keyword,B.controlKeyword,B.moduleKeyword,B.definitionKeyword,B.modifier],color:e.colors.syntax.base.keyword},{tag:[B.operatorKeyword,B.operator,B.derefOperator,B.updateOperator,B.definitionOperator,B.typeOperator,B.controlOperator,B.logicOperator,B.bitwiseOperator,B.arithmeticOperator,B.compareOperator],color:e.colors.syntax.base.operator},{tag:[B.string,B.regexp,B.attributeValue,B.special(B.string),B.monospace],color:e.colors.syntax.base.string},{tag:B.escape,color:a.stringEscape||e.colors.syntax.base.string},{tag:[B.number,B.bool,B.atom,B.null,B.self],color:e.colors.syntax.base.number},{tag:[B.function(B.variableName),B.function(B.definition(B.variableName)),B.function(B.propertyName),B.standard(B.variableName),B.special(B.variableName)],color:e.colors.syntax.base.function},{tag:B.definition(B.variableName),color:a.variableGlobal||e.colors.syntax.base.variable},{tag:[B.variableName,B.local(B.variableName),B.constant(B.variableName),B.literal],color:e.colors.syntax.base.variable},{tag:B.propertyName,color:a.variableProperty||e.colors.syntax.base.variable},{tag:B.attributeName,color:a.variableOther||e.colors.syntax.base.variable},{tag:[B.className,B.typeName,B.namespace],color:e.colors.syntax.base.type},{tag:[B.tagName,B.labelName,B.annotation,B.macroName],color:a.tag||e.colors.syntax.base.keyword},{tag:B.link,color:a.url||e.colors.syntax.base.function,textDecoration:`underline`},{tag:[B.punctuation,B.separator,B.bracket,B.paren,B.brace,B.squareBracket,B.angleBracket],color:a.punctuation||e.colors.syntax.base.comment}]);return t?.syntaxColors===!1?[s]:[s,z(ue,{fallback:!0}),z(ie),z(c),z(l)]}var ii=180,ai=pe.define(),oi=1,si=2,ci=4,li=new Map,ui=(e,t)=>{let n=`${e}|${t}`,r=li.get(n);if(r)return r;let i=``;e&&(i+=`color:${e};`),t&oi&&(i+=`font-style:italic;`),t&si&&(i+=`font-weight:bold;`),t&ci&&(i+=`text-decoration:underline;`);let a=R.mark({attributes:{style:i}});return li.set(n,a),a},di=(e,t)=>{let n=new H,r=e.state.doc,i=Math.min(t.length,r.lines);for(let e=0;e<i;e+=1){let i=t[e];if(!i||i.length===0)continue;let a=r.line(e+1),o=a.from;for(let[e,t,r]of i){if(e<=0)continue;let i=o,s=Math.min(o+e,a.to);o+=e,!(s<=i)&&(!t&&!r||n.add(i,s,ui(t,r)))}}return n.finish()},fi=de.define({create(){return R.none},update(e,t){let n=e.map(t.changes);for(let e of t.effects)e.is(ai)&&(n=e.value);return n},provide:e=>V.decorations.from(e)}),pi=e=>ne.fromClass(class{timer;generation=0;abortController;constructor(e){this.tokenize(e)}update(e){e.docChanged&&this.schedule(e.view)}schedule(e){this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>{this.timer=void 0,this.tokenize(e)},ii)}async tokenize(t){let n=++this.generation;this.abortController?.abort();let r=new AbortController;this.abortController=r;let i=t.state.doc.toString(),a=await Rt(i,e.language,e.themeName,e.theme,{signal:r.signal,priority:`visible`});a&&(r.signal.aborted||n===this.generation&&t.state.doc.length===i.length&&t.dispatch({effects:ai.of(di(t,a))}))}destroy(){this.timer&&clearTimeout(this.timer),this.abortController?.abort(),this.abortController=void 0}}),mi=e=>[fi,pi(e)],hi=e=>{let t=(0,Y.c)(11),{currentMode:n,onToggle:r}=e,i=n===`preview`,a=i?`Switch to edit mode`:`Switch to preview mode`,o=i?`Edit`:`Preview`,s;t[0]===i?s=t[1]:(s=i?(0,X.jsx)(q,{name:`eye`,className:`size-4`,"aria-hidden":`true`}):(0,X.jsx)(q,{name:`eye-off`,className:`size-4`,"aria-hidden":`true`}),t[0]=i,t[1]=s);let c;t[2]!==a||t[3]!==r||t[4]!==s?(c=(0,X.jsx)(ot,{asChild:!0,children:(0,X.jsx)(J,{variant:`ghost`,size:`sm`,onClick:r,"aria-label":a,className:`h-5 w-5 p-0`,children:s})}),t[2]=a,t[3]=r,t[4]=s,t[5]=c):c=t[5];let l;t[6]===o?l=t[7]:(l=(0,X.jsx)(st,{sideOffset:8,children:o}),t[6]=o,t[7]=l);let u;return t[8]!==c||t[9]!==l?(u=(0,X.jsxs)(ct,{children:[c,l]}),t[8]=c,t[9]=l,t[10]=u):u=t[10],u},gi=C()(T(w((e,t)=>({selectedProfileId:null,defaultGitIdentityId:null,profiles:[],globalIdentity:null,discoveredCredentials:[],isLoading:!1,setSelectedProfile:t=>{e({selectedProfileId:t})},loadProfiles:async()=>{e({isLoading:!0});let n=t().profiles;try{return e({profiles:await He(),isLoading:!1}),!0}catch(t){return console.error(`Failed to load git identity profiles:`,t),e({profiles:n,isLoading:!1}),!1}},loadGlobalIdentity:async()=>{try{let t=await Ue();return t&&t.userName&&t.userEmail?e({globalIdentity:{id:`global`,name:`Global Identity`,userName:t.userName,userEmail:t.userEmail,authType:t.sshCommand?`ssh`:void 0,sshKey:t.sshCommand?t.sshCommand.replace(`ssh -i `,``):null,color:`info`,icon:`house`}}):e({globalIdentity:null}),!0}catch(t){return console.error(`Failed to load global git identity:`,t),e({globalIdentity:null}),!1}},loadDiscoveredCredentials:async()=>{try{return e({discoveredCredentials:await qe()}),!0}catch(t){return console.error(`Failed to discover git credentials:`,t),e({discoveredCredentials:[]}),!1}},loadDefaultGitIdentityId:async()=>{let t=e=>{if(typeof e!=`string`)return null;let t=e.trim();return t.length>0?t:null};try{let n=null;if(n===null){let e=o()?.settings;if(e)try{n=t(((await e.load())?.settings||{}).defaultGitIdentityId)}catch{}}if(n===null)try{let e=await i(`/api/config/settings`,{method:`GET`,headers:{Accept:`application/json`}});e.ok&&(n=t((await e.json().catch(()=>null))?.defaultGitIdentityId))}catch{}return e({defaultGitIdentityId:n}),!0}catch(e){return console.error(`Failed to load default git identity setting:`,e),!1}},setDefaultGitIdentityId:async t=>{try{let n=typeof t==`string`?t.trim():``,r=n.length>0?n:``;return await g({defaultGitIdentityId:r}),e({defaultGitIdentityId:r.length>0?r:null}),!0}catch(e){return console.error(`Failed to save default git identity setting:`,e),!1}},createProfile:async e=>{try{let n={...e,id:e.id||`profile-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,color:e.color||`keyword`,icon:e.icon||`branch`};return await Ke(n),await t().loadProfiles(),!0}catch(e){return console.error(`Failed to create git identity profile:`,e),!1}},updateProfile:async(e,n)=>{try{let r=t().profiles.find(t=>t.id===e);if(!r)throw Error(`Profile not found`);let i={...r,...n};return await Ve(e,i),await t().loadProfiles(),!0}catch(e){return console.error(`Failed to update git identity profile:`,e),!1}},deleteProfile:async n=>{try{return await We(n),t().selectedProfileId===n&&e({selectedProfileId:null}),await t().loadProfiles(),!0}catch(e){return console.error(`Failed to delete git identity profile:`,e),!1}},getProfileById:e=>{let{profiles:n,globalIdentity:r}=t();return e===`global`?r||void 0:n.find(t=>t.id===e)},getUnimportedCredentials:()=>{let{profiles:e,discoveredCredentials:n}=t();return n.filter(t=>!e.some(e=>e.authType===`token`&&e.host===t.host))}}),{name:`git-identities-store`,storage:P(),partialize:e=>({selectedProfileId:e.selectedProfileId})}),{name:`git-identities-store`}));typeof window<`u`&&(window.__zustand_git_identities_store__=gi);var _i=`w-full max-w-[30rem]`,vi=e=>{let t=(0,Y.c)(23),{title:n,description:r,settingsItem:i,titleAccessory:a,headerAction:o,children:s,className:c,contentClassName:l}=e,u;t[0]===n?u=t[1]:(u=(0,X.jsx)(`span`,{className:`truncate`,children:n}),t[0]=n,t[1]=u);let d;t[2]!==u||t[3]!==a?(d=(0,X.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[u,a]}),t[2]=u,t[3]=a,t[4]=d):d=t[4];let f;t[5]===o?f=t[6]:(f=o?(0,X.jsx)(`div`,{className:`shrink-0`,children:o}):null,t[5]=o,t[6]=f);let p;t[7]!==d||t[8]!==f?(p=(0,X.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[d,f]}),t[7]=d,t[8]=f,t[9]=p):p=t[9];let m;t[10]===l?m=t[11]:(m=K(`oc-settings-group-row`,l),t[10]=l,t[11]=m);let h;t[12]!==s||t[13]!==m?(h=(0,X.jsx)(`div`,{className:m,children:s}),t[12]=s,t[13]=m,t[14]=h):h=t[14];let g;t[15]!==r||t[16]!==p||t[17]!==h?(g=(0,X.jsx)(vr,{className:`oc-settings-detail-group`,label:p,description:r,children:h}),t[15]=r,t[16]=p,t[17]=h,t[18]=g):g=t[18];let _;return t[19]!==c||t[20]!==i||t[21]!==g?(_=(0,X.jsx)(`div`,{"data-settings-item":i,className:c,children:g}),t[19]=c,t[20]=i,t[21]=g,t[22]=_):_=t[22],_},yi=450,bi=({projectRef:e=null})=>{let{t}=W(),{isMobile:n,isTablet:r}=Mt(),i=n||r,a=je(e=>e.getActiveProject()),o=e?.path??a?.path??null,s=Oe(e=>e.getWorktreeMetadata),c=Me(),l=k(e=>e.homeDirectory),[u,d]=Q.useState([]),[f,p]=Q.useState(!1),[m,h]=Q.useState(!1),[g,_]=Q.useState(null),[v,y]=Q.useState(null),[b,x]=Q.useState([]),[S,C]=Q.useState(!1),w=Q.useRef(!1),T=Q.useMemo(()=>e?.id&&e?.path?{id:e.id,path:e.path}:!a?.id||!o?null:{id:a.id,path:o},[a?.id,o,e?.id,e?.path]),E=Q.useCallback(async()=>{if(!(!T||v===!1))try{let e=await Qe(T);x(e)}catch{}},[T,v]);Q.useEffect(()=>{if(!o)return;let e=!1;return y(null),(async()=>{try{let t=await Ge(o);if(e)return;y(t)}catch{}})(),()=>{e=!0}},[o]),Q.useEffect(()=>{if(!T){x([]),C(!1);return}if(v===!1){x([]),C(!1);return}let e=!1;return C(!0),x([]),(async()=>{try{let t=await Qe(T);if(e)return;x(t)}catch{}finally{e||C(!1)}})(),()=>{e=!0}},[T,v]),Q.useEffect(()=>{if(!T)return;let e=!1;return h(!0),(async()=>{try{let[t,n]=await Promise.all([be(T),Se(T)]);if(!e){let e=t.length>0?t:[``];d(e),_(JSON.stringify(e)),p(n)}}catch{e||(d([``]),_(JSON.stringify([``])),p(!1))}finally{e||h(!1)}})(),()=>{e=!0}},[T]);let D=Q.useCallback(async e=>{if(!T)return!1;let n=e.filter(e=>e.trim().length>0);try{return await ye(T,n)?(_(JSON.stringify(e)),!0):(G.error(t(`settings.openchamber.worktrees.setup.toast.saveFailed`)),!1)}catch{return G.error(t(`settings.openchamber.worktrees.setup.toast.saveFailed`)),!1}},[T,t]),O=Q.useMemo(()=>g!==null&&g!==JSON.stringify(u),[g,u]);Q.useEffect(()=>{if(!O||m||w.current)return;let e=window.setTimeout(()=>{w.current||(w.current=!0,(async()=>{try{await D(u)}finally{w.current=!1}})())},yi);return()=>{window.clearTimeout(e)}},[O,m,D,u]);let A=Q.useCallback((e,t)=>{d(n=>{let r=[...n];return r[e]=t,r})},[]),j=Q.useCallback(()=>{d(e=>[...e,``])},[]),M=Q.useCallback(e=>{d(t=>{let n=t.filter((t,n)=>n!==e);return n.length>0?n:[``]})},[]),N=Q.useCallback(()=>{!O||w.current||(w.current=!0,(async()=>{try{await D(u)}finally{w.current=!1}})())},[O,D,u]),P=Q.useCallback(e=>{p(e),T&&Ee(T,e)},[T]),F=Q.useCallback(e=>{let t=e=>e.replace(/\\/g,`/`).replace(/\/+$/,``),n=t(e.path),r=c.filter(e=>{let r=s(e.id);if(r?.path&&t(r.path)===n)return!0;let i=e.directory;return!!(i&&t(i)===n)}),i=new Set(r.map(e=>e.id)),a=[...Ae.getState().activeSessions,...Ae.getState().archivedSessions],o=e=>{let t=a.filter(t=>{let n=t.parentID;return n&&e.has(n)});if(t.length===0)return[];let n=new Set(t.map(e=>e.id));return[...t,...o(n)]},l=o(i),u=new Set,d=[...r,...l].filter(e=>!u.has(e.id)&&(u.add(e.id),!0));De.requestDelete({sessions:d,mode:`worktree`,worktree:e})},[c,s]),ee=Q.useMemo(()=>c.map(e=>e.id).join(`,`),[c]);Q.useEffect(()=>{v&&o&&E()},[ee,v,o,E]);let I=(0,X.jsxs)(ct,{children:[(0,X.jsx)(ot,{asChild:!0,children:(0,X.jsx)(q,{name:`information`,className:`h-3.5 w-3.5 text-muted-foreground/60 cursor-help`})}),(0,X.jsxs)(st,{sideOffset:8,className:`max-w-xs`,children:[t(`settings.openchamber.worktrees.setup.tooltipPrefix`),` `,(0,X.jsx)(`code`,{className:`font-mono text-xs bg-sidebar-accent/50 px-1 rounded`,children:`$ROOT_PROJECT_PATH`}),` `,t(`settings.openchamber.worktrees.setup.tooltipSuffix`)]})]}),L=(0,X.jsxs)(ct,{children:[(0,X.jsx)(ot,{asChild:!0,children:(0,X.jsx)(q,{name:`information`,className:`h-3.5 w-3.5 text-muted-foreground/60 cursor-help`})}),(0,X.jsx)(st,{sideOffset:8,className:`max-w-xs`,children:t(`settings.openchamber.worktrees.list.tooltip`)})]});return o?v===!1?(0,X.jsx)(vi,{title:t(`settings.projects.page.section.worktree`),settingsItem:`projects.worktree`,children:(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground`,children:t(`settings.openchamber.worktrees.state.gitOnly`)})}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(vi,{title:t(`settings.projects.page.section.worktree`),settingsItem:`projects.worktree`,titleAccessory:I,children:m?(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground`,children:t(`settings.openchamber.worktrees.setup.loading`)}):(0,X.jsxs)(`div`,{className:K(`flex flex-col gap-2`,_i),children:[u.map((e,n)=>(0,X.jsxs)(`div`,{className:`oc-settings-group-row flex w-full items-center gap-2`,children:[(0,X.jsx)(at,{value:e,onChange:e=>A(n,e.target.value),onBlur:N,placeholder:t(`settings.openchamber.worktrees.setup.commandPlaceholder`),className:`min-w-0 flex-1 font-mono text-xs`}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>M(n),className:`flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-destructive/10 hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50`,"aria-label":t(`settings.openchamber.worktrees.setup.removeCommandAria`),children:(0,X.jsx)(q,{name:`close`,className:`h-4 w-4`})})]},n)),(0,X.jsxs)(J,{type:`button`,variant:`ghost`,size:`xs`,className:`!font-normal`,onClick:j,children:[(0,X.jsx)(q,{name:`add`,className:`h-3.5 w-3.5`}),t(`settings.openchamber.worktrees.setup.addCommand`)]}),(0,X.jsxs)(`label`,{"data-settings-item":`projects.worktree.setup.wait`,className:`flex cursor-pointer items-center gap-2 py-1`,children:[(0,X.jsx)(Je,{checked:f,onChange:P,ariaLabel:t(`settings.openchamber.worktrees.setup.waitForCommandsAria`)}),(0,X.jsx)(`span`,{className:K(`typography-ui-label font-normal`,f?`text-foreground`:`text-foreground/60`),children:t(`settings.openchamber.worktrees.setup.waitForCommands`)})]})]})}),(0,X.jsx)(vi,{title:t(`settings.openchamber.worktrees.list.title`),titleAccessory:L,children:S?(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground`,children:t(`settings.openchamber.worktrees.list.loading`)}):b.length===0?(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground/70`,children:t(`settings.openchamber.worktrees.list.empty`)}):(0,X.jsx)(`div`,{className:K(`space-y-1`,_i),children:b.map(e=>(0,X.jsxs)(`div`,{className:`group flex w-full items-center gap-2 py-1.5`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,X.jsx)(`p`,{className:`typography-meta min-w-0 truncate text-foreground`,children:e.label||e.branch||t(`settings.openchamber.worktrees.list.detachedHead`)}),(0,X.jsx)(`span`,{className:`typography-micro flex-shrink-0 self-center rounded bg-sidebar-accent/40 px-1.5 py-[1px] leading-none text-muted-foreground/60`,children:`OpenCode`})]}),(0,X.jsx)(`p`,{className:`typography-micro truncate text-muted-foreground/60`,children:ze(e.path,l)})]}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>F(e),className:K(`flex h-7 w-7 shrink-0 items-center justify-center rounded text-muted-foreground/50 transition-opacity hover:bg-destructive/10 hover:text-destructive focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50`,i?`opacity-100`:`opacity-0 group-hover:opacity-100`),"aria-label":t(`settings.openchamber.worktrees.list.deleteWorktreeAria`,{name:e.branch||e.label||e.path}),children:(0,X.jsx)(q,{name:`delete-bin`,className:`h-4 w-4`})})]},e.path))})})]}):(0,X.jsx)(vi,{title:t(`settings.projects.page.section.worktree`),settingsItem:`projects.worktree`,children:(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground`,children:t(`settings.openchamber.worktrees.state.selectProject`)})})},xi=(e,t)=>t.updatedAtMs-e.updatedAtMs,Si=C((e,t)=>({instances:[],statusesById:{},importCandidates:[],isLoading:!1,isSaving:!1,isImportsLoading:!1,initialized:!1,listenerReady:!1,error:null,load:async()=>{if(!t().isLoading){e({isLoading:!0,error:null});try{let[n,r]=await Promise.all([xt(),mt()]),i={};for(let e of r.sort(xi))i[e.id]=e;t().listenerReady||await Ct(t=>{e(e=>({statusesById:{...e.statusesById,[t.id]:t}}))}),e({instances:n.instances,statusesById:i,isLoading:!1,initialized:!0,listenerReady:!0})}catch(t){e({isLoading:!1,error:t instanceof Error?t.message:String(t)})}}},loadImports:async()=>{if(!t().isImportsLoading){e({isImportsLoading:!0,error:null});try{e({importCandidates:await ut(),isImportsLoading:!1})}catch(t){e({isImportsLoading:!1,error:t instanceof Error?t.message:String(t)})}}},refreshStatuses:async()=>{try{let t=await mt(),n={};for(let e of t.sort(xi))n[e.id]=e;e({statusesById:n})}catch(t){e({error:t instanceof Error?t.message:String(t)})}},setInstances:async n=>{e({isSaving:!0,error:null});try{await ht({instances:n}),e({instances:n,isSaving:!1}),await t().refreshStatuses()}catch(t){throw e({isSaving:!1,error:t instanceof Error?t.message:String(t)}),t}},upsertInstance:async e=>{let n=t().instances,r=n.some(t=>t.id===e.id)?n.map(t=>t.id===e.id?e:t):[e,...n];await t().setInstances(r)},createFromCommand:async(e,n,r)=>{let i=vt(e,n);r&&r.trim()&&(i.nickname=r.trim()),await t().upsertInstance(i)},removeInstance:async n=>{await At(n).catch(()=>void 0);let r=t().instances.filter(e=>e.id!==n);await t().setInstances(r),e(e=>{let t={...e.statusesById};return delete t[n],{statusesById:t}})},connect:async n=>{e({error:null});try{await yt(n),await t().refreshStatuses()}catch(t){throw e({error:t instanceof Error?t.message:String(t)}),t}},disconnect:async n=>{e({error:null});try{await At(n),await t().refreshStatuses()}catch(t){throw e({error:t instanceof Error?t.message:String(t)}),t}},retry:async e=>{await t().connect(e)},getStatus:e=>t().statusesById[e]||null,clearError:()=>e({error:null})})),Ci=450,wi=()=>p(),Ti=()=>({id:wi(),name:``,command:``,icon:`play`}),Ei=({projectRef:e})=>{let{t}=W(),n=Q.useMemo(()=>s(),[]),r=Si(e=>e.instances),i=Si(e=>e.load),[a,o]=Q.useState([]),[c,l]=Q.useState(!1),[u,d]=Q.useState(null),[f,p]=Q.useState({}),m=Q.useRef(!1),h=Q.useRef(null);Q.useEffect(()=>{n&&i().catch(()=>void 0)},[n,i]),Q.useEffect(()=>{let t=!1;return l(!0),(async()=>{try{let n=await we(e);if(t)return;o(n.actions),d(JSON.stringify({actions:n.actions}))}catch{if(t)return;o([]),d(JSON.stringify({actions:[]}))}finally{t||l(!1)}})(),()=>{t=!0}},[e]);let g=Q.useMemo(()=>n?en(r):[],[r,n]),_=Q.useMemo(()=>a.some(e=>e.name.trim().length===0||e.command.trim().length===0)?t(`settings.projects.actions.validation.fillNameAndCommand`):null,[a,t]),v=Q.useMemo(()=>u!==null&&u!==JSON.stringify({actions:a}),[a,u]),y=Q.useCallback(async n=>await Te(e,{actions:n,primaryActionId:null})?(d(JSON.stringify({actions:n})),typeof window<`u`&&window.dispatchEvent(new CustomEvent(rn,{detail:{projectId:e.id}})),!0):(G.error(t(`settings.projects.actions.toast.saveFailed`)),!1),[e,t]);Q.useEffect(()=>{if(!v||c||_||m.current)return;let e=window.setTimeout(()=>{m.current||(m.current=!0,(async()=>{try{await y(a)}finally{m.current=!1}})())},Ci);return()=>{window.clearTimeout(e)}},[a,v,c,y,_]),Q.useEffect(()=>{if(!v||!_||c){_||(h.current=null);return}let e=window.setTimeout(()=>{h.current!==_&&(h.current=_,G.error(_))},1e3);return()=>{window.clearTimeout(e)}},[v,c,_]);let b=Q.useCallback(()=>{let e=Ti();o(t=>[...t,e]),p(t=>({...t,[e.id]:!0}))},[]),x=Q.useCallback(e=>{o(t=>t.filter(t=>t.id!==e)),p(t=>{let n={...t};return delete n[e],n})},[]),S=Q.useCallback((e,t)=>{o(n=>n.map(n=>n.id===e?t(n):n))},[]);return(0,X.jsxs)(vi,{title:t(`settings.projects.actions.title`),description:t(`settings.projects.actions.description`),settingsItem:`projects.actions`,headerAction:(0,X.jsxs)(J,{type:`button`,variant:`outline`,size:`xs`,className:`!font-normal`,onClick:b,children:[(0,X.jsx)(q,{name:`add`,className:`h-3.5 w-3.5`}),t(`settings.projects.actions.actions.add`)]}),contentClassName:`space-y-0`,children:[c?(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground`,children:t(`settings.projects.actions.state.loading`)}):a.length===0?(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground`,children:t(`settings.projects.actions.state.empty`)}):(0,X.jsx)(`div`,{className:K(`space-y-0`,_i),children:a.map(e=>{let r=e.icon||`play`,i=nn[r]||`play`,a=f[e.id]??!1,o=e.name.trim()||t(`settings.projects.actions.state.untitled`);return(0,X.jsxs)(Vt,{open:a,onOpenChange:t=>{p(n=>({...n,[e.id]:t}))},className:`py-1.5`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,X.jsxs)(Bt,{className:`group flex-1 justify-start gap-2 rounded-md px-0 pr-1 py-1 hover:bg-[var(--interactive-hover)] focus-visible:ring-2 focus-visible:ring-[var(--interactive-focus-ring)]`,children:[a?(0,X.jsx)(q,{name:`arrow-down-s`,className:`h-4 w-4 text-muted-foreground`}):(0,X.jsx)(q,{name:`arrow-right-s`,className:`h-4 w-4 text-muted-foreground`}),(0,X.jsx)(q,{name:i,className:`mt-0.5 h-4 w-4 shrink-0 text-muted-foreground`}),(0,X.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,X.jsx)(`span`,{className:`typography-ui-label text-foreground truncate`,children:o})})]}),(0,X.jsx)(J,{type:`button`,variant:`ghost`,size:`xs`,className:`!font-normal h-7 w-7 px-0 text-muted-foreground hover:text-[var(--status-error)]`,onClick:()=>x(e.id),children:(0,X.jsx)(q,{name:`delete-bin`,className:`h-3.5 w-3.5`})})]}),(0,X.jsx)(zt,{className:`pt-1.5`,children:(0,X.jsxs)(`div`,{className:`space-y-2 pb-4 pl-3 pr-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 py-1`,children:[(0,X.jsxs)(wt,{children:[(0,X.jsx)(Dt,{asChild:!0,children:(0,X.jsx)(`button`,{type:`button`,className:`inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md border border-[var(--interactive-border)] text-foreground hover:bg-[var(--interactive-hover)]`,"aria-label":t(`settings.projects.actions.field.selectIconAria`),children:(0,X.jsx)(q,{name:i,className:`h-4 w-4`})})}),(0,X.jsx)(St,{align:`start`,className:`w-56 p-2`,children:(0,X.jsx)(`div`,{className:`grid grid-cols-6 gap-1`,children:tn.map(n=>{let r=n.Icon,i=(e.icon||`play`)===n.key;return(0,X.jsx)(`button`,{type:`button`,onClick:()=>S(e.id,e=>({...e,icon:n.key})),className:K(`inline-flex h-8 w-8 items-center justify-center rounded-md border border-transparent text-foreground hover:bg-[var(--interactive-hover)]`,i&&`border-[var(--primary-base)] bg-[var(--primary-base)]/10 text-[var(--primary-base)]`),"aria-label":t(`settings.projects.actions.field.iconAria`,{icon:n.label}),children:(0,X.jsx)(q,{name:r,className:`h-4 w-4`})},n.key)})})})]}),(0,X.jsx)(at,{value:e.name,onChange:t=>S(e.id,e=>({...e,name:t.target.value})),placeholder:t(`settings.projects.actions.field.actionNamePlaceholder`),className:`h-7 flex-1 min-w-0`})]}),(0,X.jsxs)(`div`,{className:`py-1`,children:[(0,X.jsx)(`p`,{className:`typography-meta mb-0.5 text-muted-foreground`,children:t(`settings.projects.actions.field.command`)}),(0,X.jsx)(It,{embedded:!0,value:e.command,onChange:t=>S(e.id,e=>({...e,command:t.target.value})),placeholder:t(`settings.projects.actions.field.commandPlaceholder`),className:`min-h-[88px] w-full font-mono text-xs`})]}),(0,X.jsxs)(`div`,{className:`py-1`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1`,children:[(0,X.jsx)(`span`,{className:`typography-ui-label text-foreground`,children:t(`settings.projects.actions.field.autoOpenUrl`)}),(0,X.jsxs)(`div`,{className:`group flex cursor-pointer items-center gap-2`,role:`button`,tabIndex:0,"aria-pressed":e.autoOpenUrl===!0,onClick:()=>S(e.id,e=>({...e,...e.autoOpenUrl===!0?{autoOpenUrl:void 0}:{autoOpenUrl:!0}})),onKeyDown:t=>{(t.key===` `||t.key===`Enter`)&&(t.preventDefault(),S(e.id,e=>({...e,...e.autoOpenUrl===!0?{autoOpenUrl:void 0}:{autoOpenUrl:!0}})))},children:[(0,X.jsx)(Je,{checked:e.autoOpenUrl===!0,onChange:t=>S(e.id,e=>({...e,...t?{autoOpenUrl:!0}:{autoOpenUrl:void 0}})),ariaLabel:t(`settings.projects.actions.field.autoOpenUrlForAria`,{title:o})}),(0,X.jsx)(`span`,{className:`typography-ui-label font-normal text-foreground/80`,children:t(`settings.projects.actions.field.autoOpenUrlDescription`)})]})]}),e.autoOpenUrl===!0?(0,X.jsxs)(`div`,{className:`mt-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(at,{value:e.openUrl||``,onChange:t=>S(e.id,e=>({...e,openUrl:t.target.value})),placeholder:t(`settings.projects.actions.field.overrideUrlPlaceholder`),className:`h-7 w-full max-w-[24rem]`}),(0,X.jsxs)(ct,{children:[(0,X.jsx)(ot,{asChild:!0,children:(0,X.jsx)(q,{name:`information`,className:`h-3.5 w-3.5 shrink-0 text-muted-foreground/60 cursor-help`})}),(0,X.jsx)(st,{sideOffset:8,className:`max-w-xs`,children:t(`settings.projects.actions.field.overrideUrlTooltip`)})]})]}),n?(0,X.jsxs)(`div`,{className:`mt-2`,children:[(0,X.jsx)(`p`,{className:`typography-meta mb-0.5 text-muted-foreground`,children:t(`settings.projects.actions.field.desktopSshForward`)}),g.length>0?(0,X.jsxs)(et,{value:e.desktopOpenSshForward&&g.some(t=>t.id===e.desktopOpenSshForward)?e.desktopOpenSshForward:`__none__`,onValueChange:t=>{S(e.id,e=>({...e,...t===`__none__`?{desktopOpenSshForward:void 0}:{desktopOpenSshForward:t}}))},children:[(0,X.jsx)(Ze,{className:`h-7 w-full`,children:(0,X.jsx)(it,{placeholder:t(`settings.projects.actions.field.useOutputManualUrl`)})}),(0,X.jsxs)($e,{children:[(0,X.jsx)(Ye,{value:`__none__`,children:t(`settings.projects.actions.field.useOutputManualUrl`)}),g.map(e=>(0,X.jsx)(Ye,{value:e.id,children:e.label},e.id))]})]}):(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground`,children:t(`settings.projects.actions.state.noDesktopSshForwards`)})]}):null]}):null]})]})})]},e.id)})}),_&&a.length>0?(0,X.jsx)(`p`,{className:`typography-meta text-[var(--status-warning)]`,children:_}):null]})},Di=e=>{let t=(0,Y.c)(123),{form:n}=e,{t:r}=W(),{currentTheme:i}=jt(),{name:a,setName:o,icon:s,setIcon:c,color:l,setColor:u,iconBackground:d,setIconBackground:f,parsedDefaultModel:p,handleDefaultModelChange:m,isUploadingIcon:h,isRemovingCustomIcon:g,isDiscoveringIcon:_,pendingRemoveImageIcon:v,setPendingRemoveImageIcon:y,pendingUploadIconPreviewUrl:b,setPreviewImageFailed:x,hasPendingUploadImageIcon:S,hasCustomIcon:C,effectiveHasImageIcon:w,hasRemovableImageIcon:T,showImagePreview:E,fileInputRef:D,handleUploadIcon:O,handleRemoveImageIcon:k,handleDiscoverIcon:A,currentIconImage:j,project:M}=n;if(!M)return null;let N=l?tt[l]??null:null,P;t[0]===r?P=t[1]:(P=r(`settings.projects.page.field.projectName`),t[0]=r,t[1]=P);let F;t[2]===o?F=t[3]:(F=e=>o(e.target.value),t[2]=o,t[3]=F);let ee;t[4]===r?ee=t[5]:(ee=r(`settings.projects.page.field.projectNamePlaceholder`),t[4]=r,t[5]=ee);let I;t[6]!==a||t[7]!==F||t[8]!==ee?(I=(0,X.jsx)(at,{value:a,onChange:F,placeholder:ee}),t[6]=a,t[7]=F,t[8]=ee,t[9]=I):I=t[9];let L;t[10]!==P||t[11]!==I?(L=(0,X.jsx)(yr,{label:P,itemId:`projects.name`,children:I}),t[10]=P,t[11]=I,t[12]=L):L=t[12];let te;t[13]===r?te=t[14]:(te=r(`settings.projects.page.field.defaultModel`),t[13]=r,t[14]=te);let ne;t[15]===r?ne=t[16]:(ne=r(`settings.projects.page.field.defaultModelDescription`),t[15]=r,t[16]=ne);let R;t[17]!==m||t[18]!==p.modelId||t[19]!==p.providerId?(R=(0,X.jsx)(lt,{providerId:p.providerId,modelId:p.modelId,onChange:m,className:`oc-settings-inline-value`}),t[17]=m,t[18]=p.modelId,t[19]=p.providerId,t[20]=R):R=t[20];let re;t[21]!==te||t[22]!==ne||t[23]!==R?(re=(0,X.jsx)(yr,{label:te,description:ne,descriptionPlacement:`outside`,itemId:`projects.default-model`,children:R}),t[21]=te,t[22]=ne,t[23]=R,t[24]=re):re=t[24];let ie;t[25]===r?ie=t[26]:(ie=r(`settings.projects.page.field.accentColor`),t[25]=r,t[26]=ie);let z;t[27]===u?z=t[28]:(z=()=>u(null),t[27]=u,t[28]=z);let ae=l===null?`border-2 border-foreground bg-[var(--primary-base)]/10`:`border-border/40 hover:border-border hover:bg-[var(--surface-muted)]`,oe;t[29]===ae?oe=t[30]:(oe=K(`h-7 w-7 rounded-md border transition-colors flex items-center justify-center`,ae),t[29]=ae,t[30]=oe);let B;t[31]===r?B=t[32]:(B=r(`settings.projects.page.field.none`),t[31]=r,t[32]=B);let V;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,X.jsx)(q,{name:`close`,className:`h-4 w-4 text-muted-foreground`}),t[33]=V):V=t[33];let se;t[34]!==z||t[35]!==oe||t[36]!==B?(se=(0,X.jsx)(`button`,{type:`button`,onClick:z,className:oe,title:B,children:V}),t[34]=z,t[35]=oe,t[36]=B,t[37]=se):se=t[37];let ce;t[38]!==l||t[39]!==u?(ce=rt.map(e=>(0,X.jsx)(`button`,{type:`button`,onClick:()=>u(e.key),className:K(`h-7 w-7 rounded-md border transition-colors`,l===e.key?`border-2 border-foreground ring-1 ring-[var(--primary-base)]/40`:`border-transparent hover:border-border/70`),style:{backgroundColor:e.cssVar},title:e.label},e.key)),t[38]=l,t[39]=u,t[40]=ce):ce=t[40];let le;t[41]!==se||t[42]!==ce?(le=(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[se,ce]}),t[41]=se,t[42]=ce,t[43]=le):le=t[43];let ue;t[44]!==ie||t[45]!==le?(ue=(0,X.jsx)(yr,{label:ie,itemId:`projects.accent-color`,children:le}),t[44]=ie,t[45]=le,t[46]=ue):ue=t[46];let de;t[47]===r?de=t[48]:(de=r(`settings.projects.page.field.projectIcon`),t[47]=r,t[48]=de);let fe;t[49]===O?fe=t[50]:(fe=e=>{let t=e.target.files?.[0]??null;O(t),e.currentTarget.value=``},t[49]=O,t[50]=fe);let pe;t[51]!==D||t[52]!==fe?(pe=(0,X.jsx)(`input`,{ref:D,type:`file`,accept:`image/png,image/jpeg,image/svg+xml,.png,.jpg,.jpeg,.svg`,className:`hidden`,onChange:fe}),t[51]=D,t[52]=fe,t[53]=pe):pe=t[53];let H;t[54]===c?H=t[55]:(H=()=>c(null),t[54]=c,t[55]=H);let me=s===null?`border-2 border-foreground bg-[var(--primary-base)]/10`:`border-border/40 hover:border-border hover:bg-[var(--surface-muted)]`,U;t[56]===me?U=t[57]:(U=K(`h-7 w-7 rounded-md border transition-colors flex items-center justify-center`,me),t[56]=me,t[57]=U);let he;t[58]===r?he=t[59]:(he=r(`settings.projects.page.field.none`),t[58]=r,t[59]=he);let ge;t[60]===Symbol.for(`react.memo_cache_sentinel`)?(ge=(0,X.jsx)(q,{name:`close`,className:`h-4 w-4 text-muted-foreground`}),t[60]=ge):ge=t[60];let _e;t[61]!==H||t[62]!==U||t[63]!==he?(_e=(0,X.jsx)(`button`,{type:`button`,onClick:H,className:U,title:he,children:ge}),t[61]=H,t[62]=U,t[63]=he,t[64]=_e):_e=t[64];let ve;t[65]!==N||t[66]!==s||t[67]!==c?(ve=nt.map(e=>{let t=e.Icon;return(0,X.jsx)(`button`,{type:`button`,onClick:()=>c(e.key),className:K(`h-7 w-7 rounded-md border transition-colors flex items-center justify-center`,s===e.key?`border-2 border-foreground bg-[var(--primary-base)]/10`:`border-transparent hover:border-border hover:bg-[var(--surface-muted)]`),title:e.label,children:(0,X.jsx)(q,{name:t,className:`w-4 h-4`,style:N&&s===e.key?{color:N}:void 0})},e.key)}),t[65]=N,t[66]=s,t[67]=c,t[68]=ve):ve=t[68];let ye;t[69]!==_e||t[70]!==ve?(ye=(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[_e,ve]}),t[69]=_e,t[70]=ve,t[71]=ye):ye=t[71];let be;t[72]!==j||t[73]!==i||t[74]!==w||t[75]!==S||t[76]!==d||t[77]!==b||t[78]!==M||t[79]!==x||t[80]!==E||t[81]!==r?(be=w&&E&&(0,X.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,X.jsx)(`span`,{className:`typography-meta text-muted-foreground`,children:r(`settings.projects.page.field.preview`)}),(0,X.jsx)(`span`,{className:`inline-flex h-7 w-7 items-center justify-center rounded-md border border-border/60 bg-[var(--surface-elevated)] p-1`,children:(0,X.jsx)(`span`,{className:`inline-flex h-4 w-4 items-center justify-center overflow-hidden rounded-[2px]`,style:d?{backgroundColor:d}:void 0,children:S&&b?(0,X.jsx)(`img`,{src:b,alt:``,className:`h-full w-full object-contain`,draggable:!1,onError:()=>x(!0)}):(0,X.jsx)(Xe,{project:{...M,iconImage:j??M.iconImage},options:{themeVariant:i.metadata.variant,iconColor:i.colors.surface.foreground},className:`h-full w-full object-contain`,onError:()=>x(!0)})})})]}),t[72]=j,t[73]=i,t[74]=w,t[75]=S,t[76]=d,t[77]=b,t[78]=M,t[79]=x,t[80]=E,t[81]=r,t[82]=be):be=t[82];let xe;t[83]!==w||t[84]!==d||t[85]!==f||t[86]!==r?(xe=w&&(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[(0,X.jsx)(`input`,{type:`color`,value:d??`#000000`,onChange:e=>f(e.target.value),className:`h-7 w-9 cursor-pointer rounded border border-border bg-transparent p-1`,"aria-label":r(`settings.projects.page.field.projectIconBackgroundAria`)}),(0,X.jsx)(at,{value:d??``,onChange:e=>f(e.target.value),placeholder:`#000000`,className:`h-7 w-[8rem]`}),(0,X.jsx)(J,{type:`button`,size:`xs`,variant:`outline`,onClick:()=>f(null),className:`h-7 w-7 p-0`,"aria-label":r(`settings.projects.page.field.clearIconBackgroundAria`),title:r(`settings.projects.page.field.clearBackground`),disabled:!d,children:(0,X.jsx)(q,{name:`close`,className:`h-3.5 w-3.5`})})]}),t[83]=w,t[84]=d,t[85]=f,t[86]=r,t[87]=xe):xe=t[87];let Se;t[88]!==D||t[89]!==A||t[90]!==C||t[91]!==_||t[92]!==h||t[93]!==r?(Se=!C&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(J,{size:`xs`,className:`h-6 !font-normal`,onClick:()=>D.current?.click(),disabled:h,children:r(h?`settings.projects.page.actions.uploading`:`settings.projects.page.actions.uploadIcon`)}),(0,X.jsx)(J,{size:`xs`,className:`h-6 !font-normal`,variant:`outline`,onClick:()=>void A(),disabled:_,children:r(_?`settings.projects.page.actions.discovering`:`settings.projects.page.actions.discoverFavicon`)})]}),t[88]=D,t[89]=A,t[90]=C,t[91]=_,t[92]=h,t[93]=r,t[94]=Se):Se=t[94];let Ce;t[95]!==k||t[96]!==T||t[97]!==g||t[98]!==r?(Ce=T&&(0,X.jsx)(J,{size:`xs`,className:`!font-normal`,variant:`outline`,onClick:()=>void k(),disabled:g,children:r(g?`settings.projects.page.actions.removing`:`settings.projects.page.actions.removeProjectIcon`)}),t[95]=k,t[96]=T,t[97]=g,t[98]=r,t[99]=Ce):Ce=t[99];let we;t[100]!==g||t[101]!==v||t[102]!==y||t[103]!==r?(we=v&&(0,X.jsx)(J,{size:`xs`,className:`!font-normal`,variant:`outline`,onClick:()=>y(!1),disabled:g,children:r(`settings.projects.page.actions.undoRemove`)}),t[100]=g,t[101]=v,t[102]=y,t[103]=r,t[104]=we):we=t[104];let Te;t[105]!==Se||t[106]!==Ce||t[107]!==we?(Te=(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[Se,Ce,we]}),t[105]=Se,t[106]=Ce,t[107]=we,t[108]=Te):Te=t[108];let Ee;t[109]!==pe||t[110]!==ye||t[111]!==be||t[112]!==xe||t[113]!==Te?(Ee=(0,X.jsxs)(`div`,{className:`flex w-full flex-col items-end gap-2`,children:[pe,ye,be,xe,Te]}),t[109]=pe,t[110]=ye,t[111]=be,t[112]=xe,t[113]=Te,t[114]=Ee):Ee=t[114];let De;t[115]!==de||t[116]!==Ee?(De=(0,X.jsx)(yr,{label:de,itemId:`projects.icon`,children:Ee}),t[115]=de,t[116]=Ee,t[117]=De):De=t[117];let Oe;return t[118]!==ue||t[119]!==De||t[120]!==L||t[121]!==re?(Oe=(0,X.jsxs)(`div`,{className:`oc-settings-section-stack`,children:[L,re,ue,De]}),t[118]=ue,t[119]=De,t[120]=L,t[121]=re,t[122]=Oe):Oe=t[122],Oe},Oi=/^#(?:[\da-fA-F]{3}|[\da-fA-F]{6})$/,ki=e=>{if(!e)return null;let t=e.trim();return t&&Oi.test(t)?t.toLowerCase():null},Ai=e=>{let{t}=W(),n=je(e=>e.uploadProjectIcon),r=je(e=>e.removeProjectIcon),i=je(e=>e.discoverProjectIcon),a=je(t=>e?t.projects.find(t=>t.id===e.id)?.iconImage??null:null),[o,s]=Q.useState(``),[c,l]=Q.useState(null),[u,d]=Q.useState(null),[f,p]=Q.useState(null),[m,h]=Q.useState(void 0),[g,_]=Q.useState(!1),[v,y]=Q.useState(!1),[b,x]=Q.useState(!1),[S,C]=Q.useState(!1),[w,T]=Q.useState(null),[E,D]=Q.useState(null),[O,k]=Q.useState(!1),A=Q.useRef(null),j=Q.useCallback(()=>{T(null),D(e=>(e&&URL.revokeObjectURL(e),null))},[]),M=e?.id??null;Q.useEffect(()=>{if(!e){s(``),l(null),d(null),p(null),h(void 0);return}s(e.label??``),l(e.icon??null),d(e.color??null),p(e.iconBackground??null),h(e.defaultModel),C(!1),j(),k(!1)},[e,j]),Q.useEffect(()=>()=>{j()},[j]);let N=Q.useMemo(()=>Ce(m)??{providerId:``,modelId:``},[m]),P=!!e?.iconImage,F=!!(w&&E),ee=e?.iconImage?.source===`custom`,I=P&&!S||F,L=I,te=!!(e&&P&&!S),ne=!O&&(F||te),R=!!e&&(o.trim()!==(e?.label??``).trim()||c!==(e?.icon??null)||u!==(e?.color??null)||f!==(e?.iconBackground??null)||(m??void 0)!==(e?.defaultModel??void 0)||S||!!w),re=Q.useCallback((e,t)=>{h(e&&t?`${e}/${t}`:void 0)},[]),ie=Q.useCallback(t=>{!e||!t||g||(C(!1),k(!1),T(t),D(e=>(e&&URL.revokeObjectURL(e),URL.createObjectURL(t))))},[g,e]),z=Q.useCallback(()=>{!e||!L||v||(F&&j(),C(!!P),k(!1))},[j,F,L,P,v,e]),ae=Q.useCallback(async()=>{if(!(!e||b)){j(),C(!1),k(!1),x(!0);try{let n=await i(e.id);if(!n.ok){G.error(n.error||t(`settings.projects.page.toast.discoverIconFailed`));return}if(n.skipped){G.success(t(`settings.projects.page.toast.customIconAlreadySet`));return}G.success(t(`settings.projects.page.toast.iconDiscovered`))}finally{x(!1)}}},[j,i,b,e,t]),oe=Q.useCallback(async i=>{let a=i?.silent===!0;if(!e)return null;let s=o.trim();if(!s)return null;if(w){_(!0);let r=await n(e.id,w);if(_(!1),!r.ok)return G.error(r.error||t(`settings.projects.page.toast.uploadIconFailed`)),null;a||G.success(t(`settings.projects.page.toast.iconUpdated`)),j(),C(!1)}let l=S&&!!e.iconImage;if(l){y(!0);let n=await r(e.id);if(y(!1),!n.ok)return G.error(n.error||t(`settings.projects.page.toast.removeIconFailed`)),null;a||G.success(t(`settings.projects.page.toast.iconRemoved`)),C(!1),p(null)}return{label:s,icon:c,color:u,iconBackground:ki(l?null:f),defaultModel:m??null}},[j,u,m,c,f,o,S,w,e,r,t,n]);return Q.useEffect(()=>{k(!1)},[M,a?.updatedAt]),{name:o,setName:s,icon:c,setIcon:l,color:u,setColor:d,iconBackground:f,setIconBackground:p,defaultModel:m,parsedDefaultModel:N,handleDefaultModelChange:re,isUploadingIcon:g,isRemovingCustomIcon:v,isDiscoveringIcon:b,pendingRemoveImageIcon:S,setPendingRemoveImageIcon:C,pendingUploadIconFile:w,pendingUploadIconPreviewUrl:E,previewImageFailed:O,setPreviewImageFailed:k,hasStoredImageIcon:P,hasPendingUploadImageIcon:F,hasCustomIcon:ee,effectiveHasImageIcon:I,hasRemovableImageIcon:L,showStoredImagePreview:te,showImagePreview:ne,fileInputRef:A,clearPendingUploadIcon:j,handleUploadIcon:ie,handleRemoveImageIcon:z,handleDiscoverIcon:ae,hasChanges:R,prepareSaveData:oe,currentIconImage:a,project:e}},ji=450,Mi=(e,t)=>{let{t:n}=W(),{hasChanges:r,name:i,icon:a,color:o,iconBackground:s,defaultModel:c,pendingRemoveImageIcon:l,pendingUploadIconFile:u,isUploadingIcon:d,isRemovingCustomIcon:f,prepareSaveData:p}=e,m=Q.useRef(!1);Q.useEffect(()=>{if(!r||!i.trim()||d||f||m.current)return;let e=window.setTimeout(()=>{m.current||(m.current=!0,(async()=>{try{let e=await p({silent:!0});if(e)try{await t(e)}catch{G.error(n(`settings.projects.page.toast.saveFailed`))}}finally{m.current=!1}})())},ji);return()=>{window.clearTimeout(e)}},[o,c,r,a,s,f,d,i,t,l,u,p,n])},Ni=e=>{let t=(0,Y.c)(25),{project:n,onIdentitySave:r}=e,{t:i}=W(),a=Ai(n),o;bb0:{if(!n){o=null;break bb0}let e;t[0]!==n.id||t[1]!==n.path?(e={id:n.id,path:n.path},t[0]=n.id,t[1]=n.path,t[2]=e):e=t[2],o=e}let s=o,c;if(t[3]===r?c=t[4]:(c=async e=>{await r(e)},t[3]=r,t[4]=c),Mi(a,c),!n||!s)return null;let l;t[5]!==n.path||t[6]!==i?(l=n.path.split(/[\\/]/).filter(Boolean).at(-1)??i(`settings.projects.page.title.default`),t[5]=n.path,t[6]=i,t[7]=l):l=t[7];let u=l,d;t[8]===u?d=t[9]:(d=(0,X.jsx)(`h2`,{className:`typography-ui-header font-semibold text-foreground truncate`,children:u}),t[8]=u,t[9]=d);let f;t[10]===n.path?f=t[11]:(f=(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground truncate`,title:n.path,children:n.path}),t[10]=n.path,t[11]=f);let p;t[12]!==d||t[13]!==f?(p=(0,X.jsxs)(`div`,{className:`px-1`,children:[d,f]}),t[12]=d,t[13]=f,t[14]=p):p=t[14];let m;t[15]===a?m=t[16]:(m=(0,X.jsx)(Di,{form:a}),t[15]=a,t[16]=m);let h,g;t[17]===s?(h=t[18],g=t[19]):(h=(0,X.jsx)(Ei,{projectRef:s}),g=(0,X.jsx)(bi,{projectRef:s}),t[17]=s,t[18]=h,t[19]=g);let _;return t[20]!==p||t[21]!==m||t[22]!==h||t[23]!==g?(_=(0,X.jsxs)(`div`,{className:`oc-settings-section-stack`,children:[p,m,h,g]}),t[20]=p,t[21]=m,t[22]=h,t[23]=g,t[24]=_):_=t[24],_};function Pi(e){let t=e.indexOf(`/`);if(t!==-1){let n=e.substring(0,t);if(n===`gemini`||n===`antigravity`)return e.substring(t+1)}return e}var Fi={google:[{id:`gemini-auth`,label:`Gemini`,matcher:e=>e.startsWith(`gemini/`),order:1},{id:`antigravity-auth`,label:`Antigravity`,matcher:e=>e.startsWith(`antigravity/`),order:2}]};function Ii(e,t){let n=Fi[t]??[];for(let t of n)if(t.matcher(e))return t;return null}function Li(e){return Fi[e]??[]}function Ri(e){return[...e].sort((e,t)=>e.order-t.order)}function zi(e,t){let n=new Map;for(let r of Object.keys(e)){let e=Ii(r,t)?.id??null;n.has(e)||n.set(e,[]),n.get(e).push(r)}return n}function Bi(e,t,n){let r=new Map;for(let i of e){let e=Ii(t(i),n)?.id??null;r.has(e)||r.set(e,[]),r.get(e).push(i)}return r}function Vi(e,t){return t.filter(e=>{let t=e.toLowerCase(),n=t.includes(`/`)?t.split(`/`)[1]:t;return!!(n.startsWith(`gemini-3-`)||n.startsWith(`claude-`))})}var Hi=6e4,Ui=0,Wi=0,Gi=new Map,Ki=e=>{let t=an.map(e=>e.id),n=typeof e?.usageAutoRefresh==`boolean`&&e.usageAutoRefresh,r=typeof e?.usageRefreshIntervalMs==`number`&&Number.isFinite(e.usageRefreshIntervalMs)?Math.max(3e4,Math.min(3e5,Math.round(e.usageRefreshIntervalMs))):Hi,i=e?.usageDisplayMode===`remaining`?`remaining`:`usage`,a=typeof e?.usageShowPredValues==`boolean`&&e.usageShowPredValues,o=Array.isArray(e?.usageDropdownProviders)?e?.usageDropdownProviders:null,s=o?o.filter(e=>typeof e==`string`&&t.includes(e)):t,c={},l=e?.usageSelectedModels;if(l&&typeof l==`object`)for(let[e,t]of Object.entries(l))Array.isArray(t)&&(c[e]=t.filter(e=>typeof e==`string`));let u={},d=e?.usageExpandedFamilies;if(d&&typeof d==`object`)for(let[e,t]of Object.entries(d))Array.isArray(t)&&(u[e]=t.filter(e=>typeof e==`string`));return{autoRefresh:n,refreshIntervalMs:r,displayMode:i,showPredValues:a,dropdownProviderIds:s,selectedModels:c,expandedFamilies:u}},qi=async()=>{let e=o()?.settings;if(e)try{let t=(await e.load())?.settings;return Ki(t??null)}catch{}if(!y()){let e=await i(`/api/config/settings`,{method:`GET`,headers:{Accept:`application/json`}});if(e.ok)return Ki(await e.json().catch(()=>null))}return{autoRefresh:!1,refreshIntervalMs:Hi,displayMode:`usage`,showPredValues:!1,dropdownProviderIds:an.map(e=>e.id),selectedModels:{},expandedFamilies:{}}},Ji=async(e,t)=>{let n=Wi;Gi.set(e,(Gi.get(e)??0)+1),t(t=>({isFetchingProvider:{...t.isFetchingProvider,[e]:!0}}));try{let r=await x.fetchQuery({queryKey:u.quota(e),queryFn:({signal:t})=>v(e,t),staleTime:0,retry:!1});return n===Wi?(t(t=>{let n=t.results.filter(t=>t.providerId!==e);return n.push(r),{results:n}}),{providerId:e,result:r}):{providerId:e,stale:!0}}catch(t){return n===Wi?{providerId:e,error:t instanceof Error?t.message:`Failed to fetch quota`}:{providerId:e,stale:!0}}finally{if(n===Wi){let n=(Gi.get(e)??1)-1;n>0?Gi.set(e,n):Gi.delete(e),t(t=>({isFetchingProvider:{...t.isFetchingProvider,[e]:n>0}}))}}},Yi=()=>{Wi+=1,Ui+=1,Gi.clear(),Xi.setState({results:[],isLoading:!1,isFetchingProvider:{},lastUpdated:null,error:null})},Xi=C()(T((e,t)=>({results:[],selectedProviderId:null,isLoading:!1,isFetchingProvider:{},lastUpdated:null,error:null,autoRefresh:!1,refreshIntervalMs:Hi,displayMode:`usage`,showPredValues:!1,dropdownProviderIds:an.map(e=>e.id),selectedModels:{},expandedFamilies:{},loadSettings:async()=>{try{e(await qi())}catch(e){console.warn(`Failed to load usage settings:`,e)}},fetchAllQuotas:async()=>{let t=++Ui;e({isLoading:!0,error:null});let n=an.map(e=>e.id),r=await Promise.all(n.map(t=>Ji(t,e)));if(t===Ui){let t=r.find(e=>`error`in e);e({isLoading:!1,...r.some(e=>`result`in e)?{lastUpdated:Date.now()}:{},error:t?.error??null})}},fetchProviderQuota:async t=>{let n=await Ji(t,e);`stale`in n||e({error:`error`in n?n.error:null})},setSelectedProvider:t=>e({selectedProviderId:t}),setAutoRefresh:t=>e({autoRefresh:t}),setRefreshInterval:t=>{e({refreshIntervalMs:Math.max(3e4,Math.min(3e5,Math.round(t)))})},setDisplayMode:t=>e({displayMode:t}),setShowPredValues:t=>e({showPredValues:t}),setDropdownProviderIds:t=>e({dropdownProviderIds:t}),setSelectedModels:(t,n)=>{e(e=>({selectedModels:{...e.selectedModels,[t]:n}}))},toggleModelSelected:(t,n)=>{e(e=>{let r=e.selectedModels[t]??[],i=r.includes(n)?r.filter(e=>e!==n):[...r,n];return{selectedModels:{...e.selectedModels,[t]:i}}})},setExpandedFamilies:(n,r)=>{e(e=>({expandedFamilies:{...e.expandedFamilies,[n]:r}})),g({usageExpandedFamilies:t().expandedFamilies})},toggleFamilyExpanded:(n,r)=>{e(e=>{let t=e.expandedFamilies[n]??[],i=t.includes(r)?t.filter(e=>e!==r):[...t,r];return{expandedFamilies:{...e.expandedFamilies,[n]:i}}}),g({usageExpandedFamilies:t().expandedFamilies})},applyDefaultSelections:(n,r)=>{if((t().selectedModels[n]?.length??0)>0)return;let i=Vi(n,r);i.length!==0&&(e(e=>({selectedModels:{...e.selectedModels,[n]:i}})),g({usageSelectedModels:t().selectedModels}))}}),{name:`quota-store`})),Zi=()=>{let e=(0,Y.c)(5),t=Xi(Qi),n=Xi($i),r=Xi(ea),i,a;e[0]!==t||e[1]!==r||e[2]!==n?(i=()=>{if(!t)return;let e=window.setInterval(()=>{r()},n);return()=>window.clearInterval(e)},a=[t,n,r],e[0]=t,e[1]=r,e[2]=n,e[3]=i,e[4]=a):(i=e[3],a=e[4]),Q.useEffect(i,a)};function Qi(e){return e.autoRefresh}function $i(e){return e.refreshIntervalMs}function ea(e){return e.fetchAllQuotas}var ta=e=>{let t=(0,Y.c)(20),{percent:n,tonePercent:r,className:i,expectedMarkerPercent:a}=e,o;t[0]===n?o=t[1]:(o=Tt(n)??0,t[0]=n,t[1]=o);let s=o,c=r??n,l;t[2]===c?l=t[3]:(l=ft(c),t[2]=c,t[3]=l);let u=l,d=a==null?null:Math.max(0,Math.min(100,a)),f;t[4]===u?f=t[5]:(f=u===`critical`?{backgroundColor:`var(--status-error)`}:u===`warn`?{backgroundColor:`var(--status-warning)`}:{backgroundColor:`var(--status-success)`},t[4]=u,t[5]=f);let p=f,m;t[6]===i?m=t[7]:(m=K(`relative h-2.5 rounded-full bg-[var(--interactive-border)] overflow-hidden`,i),t[6]=i,t[7]=m);let h=`${s}%`,g;t[8]!==p||t[9]!==h?(g={...p,width:h},t[8]=p,t[9]=h,t[10]=g):g=t[10];let _;t[11]!==s||t[12]!==g?(_=(0,X.jsx)(`div`,{className:`h-full transition-all duration-300`,style:g,role:`progressbar`,"aria-valuenow":s,"aria-valuemin":0,"aria-valuemax":100}),t[11]=s,t[12]=g,t[13]=_):_=t[13];let v;t[14]===d?v=t[15]:(v=d!=null&&d>0&&d<100&&(0,X.jsx)(`div`,{className:`absolute top-0 h-full w-0.5 bg-foreground`,style:{left:`${d}%`},title:`Expected usage if spread evenly: ${Math.round(d)}% of quota`,"aria-hidden":`true`}),t[14]=d,t[15]=v);let y;return t[16]!==m||t[17]!==_||t[18]!==v?(y=(0,X.jsxs)(`div`,{className:m,children:[_,v]}),t[16]=m,t[17]=_,t[18]=v,t[19]=y):y=t[19],y},na=e=>{let t=(0,Y.c)(67),{paceInfo:n,className:r,compact:i}=e,a=i!==void 0&&i,{t:o}=W(),s;t[0]===n.status?s=t[1]:(s=bt(n.status),t[0]=n.status,t[1]=s);let c=s,l;bb0:{switch(n.status){case`on-track`:{let e;t[2]===o?e=t[3]:(e=o(`settings.usage.pace.status.onTrack`),t[2]=o,t[3]=e),l=e;break bb0}case`slightly-fast`:{let e;t[4]===o?e=t[5]:(e=o(`settings.usage.pace.status.slightlyFast`),t[4]=o,t[5]=e),l=e;break bb0}case`too-fast`:{let e;t[6]===o?e=t[7]:(e=o(`settings.usage.pace.status.tooFast`),t[6]=o,t[7]=e),l=e;break bb0}case`exhausted`:{let e;t[8]===o?e=t[9]:(e=o(`settings.usage.pace.status.usedUp`),t[8]=o,t[9]=e),l=e;break bb0}}l=void 0}let u=l,d;t[10]!==n.predictText||t[11]!==o?(d=o(`settings.usage.pace.predictionTooltip`,{prediction:n.predictText}),t[10]=n.predictText,t[11]=o,t[12]=d):d=t[12];let f=d;if(a){let e;t[13]===r?e=t[14]:(e=K(`flex items-center gap-1.5`,r),t[13]=r,t[14]=e);let i;t[15]===c?i=t[16]:(i={backgroundColor:c},t[15]=c,t[16]=i);let a;t[17]!==u||t[18]!==i?(a=(0,X.jsx)(`div`,{className:`h-2 w-2 rounded-full flex-shrink-0`,style:i,title:u}),t[17]=u,t[18]=i,t[19]=a):a=t[19];let s;t[20]===c?s=t[21]:(s={color:c},t[20]=c,t[21]=s);let l=n.isExhausted?void 0:f,d;t[22]!==n.isExhausted||t[23]!==n.predictText||t[24]!==n.remainingSeconds||t[25]!==o?(d=n.isExhausted?(0,X.jsx)(X.Fragment,{children:o(`settings.usage.pace.wait`,{duration:dt(n.remainingSeconds)})}):(0,X.jsx)(X.Fragment,{children:o(`settings.usage.pace.prediction`,{prediction:n.predictText})}),t[22]=n.isExhausted,t[23]=n.predictText,t[24]=n.remainingSeconds,t[25]=o,t[26]=d):d=t[26];let p;t[27]!==d||t[28]!==s||t[29]!==l?(p=(0,X.jsx)(`span`,{className:`typography-micro tabular-nums`,style:s,title:l,children:d}),t[27]=d,t[28]=s,t[29]=l,t[30]=p):p=t[30];let m;return t[31]!==p||t[32]!==e||t[33]!==a?(m=(0,X.jsxs)(`div`,{className:e,children:[a,p]}),t[31]=p,t[32]=e,t[33]=a,t[34]=m):m=t[34],m}let p;t[35]===r?p=t[36]:(p=K(`flex items-center justify-between gap-2`,r),t[35]=r,t[36]=p);let m;t[37]!==n.isExhausted||t[38]!==n.paceRateText||t[39]!==o?(m=!n.isExhausted&&(0,X.jsx)(`span`,{className:`typography-micro text-muted-foreground`,children:o(`settings.usage.pace.rate`,{rate:n.paceRateText})}),t[37]=n.isExhausted,t[38]=n.paceRateText,t[39]=o,t[40]=m):m=t[40];let h;t[41]===m?h=t[42]:(h=(0,X.jsx)(`div`,{className:`flex items-center gap-1.5`,children:m}),t[41]=m,t[42]=h);let g;t[43]===c?g=t[44]:(g={color:c},t[43]=c,t[44]=g);let _;t[45]!==n.isExhausted||t[46]!==n.predictText||t[47]!==n.remainingSeconds||t[48]!==f||t[49]!==u||t[50]!==o?(_=n.isExhausted?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`font-medium`,children:u}),(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:o(`settings.usage.pace.waitSeparator`)}),(0,X.jsx)(`span`,{className:`font-medium`,children:dt(n.remainingSeconds)})]}):(0,X.jsxs)(`span`,{title:f,children:[(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:o(`settings.usage.pace.predictionLabel`)}),(0,X.jsx)(`span`,{className:`font-medium`,children:n.predictText})]}),t[45]=n.isExhausted,t[46]=n.predictText,t[47]=n.remainingSeconds,t[48]=f,t[49]=u,t[50]=o,t[51]=_):_=t[51];let v;t[52]!==g||t[53]!==_?(v=(0,X.jsx)(`span`,{className:`typography-micro tabular-nums`,style:g,children:_}),t[52]=g,t[53]=_,t[54]=v):v=t[54];let y;t[55]===c?y=t[56]:(y={backgroundColor:c},t[55]=c,t[56]=y);let b;t[57]!==u||t[58]!==y?(b=(0,X.jsx)(`div`,{className:`h-2 w-2 rounded-full flex-shrink-0`,style:y,title:u}),t[57]=u,t[58]=y,t[59]=b):b=t[59];let x;t[60]!==v||t[61]!==b?(x=(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[v,b]}),t[60]=v,t[61]=b,t[62]=x):x=t[62];let S;return t[63]!==x||t[64]!==p||t[65]!==h?(S=(0,X.jsxs)(`div`,{className:p,children:[h,x]}),t[63]=x,t[64]=p,t[65]=h,t[66]=S):S=t[66],S},ra=e=>e instanceof Error&&e.name===`CancelledError`,ia=C(()=>({setStatus:e=>_t(x,e),refreshStatus:async(e,t)=>{let r=n();t?.force&&await x.cancelQueries({queryKey:u.github.auth(r),exact:!0});try{return await gt(x,e,r)}catch(e){if(ra(e))return pt(x,r);throw e}}})),aa={displayMode:`browser`,installed:!1,browserTab:!0},oa=new Set,sa=aa,ca=!1,la,ua=()=>{let e=Ot();return{displayMode:e,installed:e!==`browser`,browserTab:e===`browser`}},da=()=>(!ca&&typeof window<`u`&&(sa=ua(),ca=!0),sa),$=()=>{let e=ua();ca=!0,e.displayMode!==sa.displayMode&&(sa=e,oa.forEach(e=>e()))},fa=()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=[window.matchMedia(`(display-mode: standalone)`),window.matchMedia(`(display-mode: minimal-ui)`),window.matchMedia(`(display-mode: fullscreen)`),window.matchMedia(`(display-mode: window-controls-overlay)`)];for(let t of e)typeof t.addEventListener==`function`?t.addEventListener(`change`,$):typeof t.addListener==`function`&&t.addListener($);return window.addEventListener(`appinstalled`,$),window.addEventListener(`focus`,$),()=>{for(let t of e)typeof t.removeEventListener==`function`?t.removeEventListener(`change`,$):typeof t.removeListener==`function`&&t.removeListener($);window.removeEventListener(`appinstalled`,$),window.removeEventListener(`focus`,$)}},pa=e=>(oa.add(e),la??=fa(),$(),()=>{oa.delete(e),oa.size===0&&(la?.(),la=void 0)}),ma=()=>Q.useSyncExternalStore(pa,da,ha);function ha(){return aa}var ga=`OPEN CHAMBER`,_a=C()(w(e=>({sidebarBrandName:ga,setSidebarBrandName:t=>{let n=t.slice(0,64);e(e=>e.sidebarBrandName===n?e:{sidebarBrandName:n})}}),{name:`sidebar-brand-store`,storage:m(),version:2,migrate:(e,t)=>{if(!e||typeof e!=`object`)return e;let n=e;return t<1&&n.sidebarBrandName===`YEE CODE`&&(n.sidebarBrandName=ga),t<2&&n.sidebarBrandName===`Open Chamber`&&(n.sidebarBrandName=ga),n}}));typeof window<`u`&&t(e=>{r(e)&&_a.persist.rehydrate()});var va=(e,t)=>e?t.kind===e.kind?t.projectRoot.length===e.projectRoot.length?t.projectId.localeCompare(e.projectId)<0:t.projectRoot.length>e.projectRoot.length:t.kind===`project`:!0,ya=(e,t,n)=>{va(e.get(t),n)&&e.set(t,n)},ba=e=>{let t=e;return b(t.directory)??b(t.project?.worktree)},xa=e=>{if(e===`/`||/^[A-Z]:$/.test(e))return null;let t=e.lastIndexOf(`/`);return t<0?null:t===0?`/`:t===2&&/^[A-Z]:\//.test(e)?e.slice(0,2):e.slice(0,t)},Sa=(e,t,n,r,i=[])=>{let a=new Map,o=new Map;for(let e of t){let t=b(e.normalizedPath);if(!t)continue;let n=o.get(t);(!n||e.id.localeCompare(n.id)<0)&&o.set(t,e),ya(a,t,{projectId:e.id,projectRoot:t,scopeDirectory:t,kind:`project`})}if(!r)for(let[e,t]of n){let n=b(e),r=n?o.get(n):void 0;if(!(!r||!n))for(let e of t){let t=b(e.path);t&&ya(a,t,{projectId:r.id,projectRoot:n,scopeDirectory:t,kind:`worktree`})}}let s=new Map,c=new Map,l=new Map,u=new Map,d=new Map,f=e=>{if(!e)return null;if(s.has(e))return s.get(e)??null;if(r){let t=a.get(e)??null;return s.set(e,t),t}let t=[],n=e,i=null;for(;n;){if(s.has(n)){i=s.get(n)??null;break}if(t.push(n),i=a.get(n)??null,i)break;n=xa(n)}for(let e of t)s.set(e,i);return i},p=(e,t,n)=>{for(let r of e){let e=f(ba(r));if(!e)continue;c.set(r.id,e);let i=t.get(e.projectId);if(i?i.push(r):t.set(e.projectId,[r]),!n)continue;let a=n.get(e.scopeDirectory);a?a.add(r.id):n.set(e.scopeDirectory,new Set([r.id]))}};return p(e,l,d),p(i,u),{bySessionId:c,sessionsByProject:l,archivedSessionsByProject:u,sessionsByScope:d,directoryResolutions:s.size}},Ca=`__other__`;function wa(e){return e.time?.updated??e.time?.archived??e.time?.created??0}function Ta({mode:e=`dialog`}){let{t}=W(),{isMobile:n,isTablet:r,hasTouchInput:i}=Mt(),a=n||r||i,o=e===`page`,s=N(e=>e.isArchivedSessionsDialogOpen),c=N(e=>e.setArchivedSessionsDialogOpen),l=o||s,u=je(e=>e.projects),d=Ae(e=>e.archivedSessions),f=Oe(e=>e.setCurrentSession),p=N(e=>e.setSettingsDialogOpen),[m,h]=Q.useState(!1),[g,_]=Q.useState(null),[v,b]=Q.useState(null);Q.useEffect(()=>{if(!l){_(null),b(null);return}let e=!1;return h(!0),Ne().catch(()=>{e||G.error(t(`settings.openchamber.archivedSessions.toast.loadFailed`))}).finally(()=>{e||h(!1)}),()=>{e=!0}},[l,t]);let x=Q.useMemo(()=>{let e=Sa([],u.map(e=>({id:e.id,normalizedPath:e.path})),new Map,y(),d),n=new Map;for(let[t,r]of e.archivedSessionsByProject)n.set(t,[...r].sort((e,t)=>wa(t)-wa(e)));let r=new Set;for(let e of n.values())for(let t of e)r.add(t.id);let i=d.filter(e=>!r.has(e.id)).sort((e,t)=>wa(t)-wa(e));i.length>0&&n.set(Ca,i);let a=[];for(let e of u){let t=n.get(e.id)??[];t.length!==0&&a.push({projectId:e.id,label:e.label||e.path,path:e.path,sessions:t})}let o=n.get(Ca);return o&&o.length>0&&a.push({projectId:Ca,label:t(`settings.openchamber.archivedSessions.otherProjects`),path:null,sessions:o}),a.sort((e,t)=>t.sessions.length-e.sessions.length||e.label.localeCompare(t.label)),a},[d,u,t]),S=d.length,C=g?x.find(e=>e.projectId===g)??null:null,w=Q.useCallback(async e=>{b(e.id);try{await xe(e.id)?G.success(t(`settings.openchamber.archivedSessions.toast.restored`)):G.error(t(`settings.openchamber.archivedSessions.toast.restoreFailed`))}finally{b(null)}},[t]),T=Q.useCallback(e=>{let t=ke(e);f(e.id,t),c(!1),p(!1)},[f,c,p]),E=C?C.label:t(`settings.openchamber.archivedSessions.dialog.title`),D=C?C.sessions.length===1?t(`settings.openchamber.archivedSessions.dialog.sessionCountSingle`,{count:C.sessions.length}):t(`settings.openchamber.archivedSessions.dialog.sessionCountPlural`,{count:C.sessions.length}):t(`settings.openchamber.archivedSessions.dialog.description`),O=(0,X.jsxs)(`div`,{className:`space-y-3`,children:[C?(0,X.jsxs)(J,{type:`button`,variant:`ghost`,size:`sm`,className:`!h-7 !px-2 !font-normal text-muted-foreground`,onClick:()=>_(null),children:[(0,X.jsx)(q,{name:`arrow-left-s`,className:`mr-1 h-4 w-4`}),t(`settings.openchamber.archivedSessions.dialog.backToProjects`)]}):null,m?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 typography-meta text-muted-foreground py-6`,children:[(0,X.jsx)(q,{name:`loader-4`,className:`h-4 w-4 animate-spin`}),t(`settings.openchamber.archivedSessions.dialog.loading`)]}):C?C.sessions.length===0?(0,X.jsx)(`div`,{className:`rounded-lg border border-dashed border-border p-4 typography-meta text-muted-foreground`,children:t(`settings.openchamber.archivedSessions.dialog.emptyProject`)}):(0,X.jsx)(`div`,{className:`space-y-1.5`,children:C.sessions.map(e=>{let n=ke(e),r=wa(e),i=v===e.id;return(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-lg border border-border/60 px-3 py-2.5 sm:flex-row sm:items-center sm:gap-3`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`div`,{className:`typography-ui-label font-medium text-foreground truncate`,children:e.title||t(`sessions.sidebar.session.untitled`)}),(0,X.jsxs)(`div`,{className:`typography-meta text-muted-foreground truncate`,children:[r>0?Et(r):null,r>0&&n?` · `:null,n?ze(n):null]})]}),(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 shrink-0`,children:[(0,X.jsx)(J,{type:`button`,variant:`outline`,size:`xs`,className:`!font-normal`,disabled:i,onClick:()=>T(e),children:t(`settings.openchamber.archivedSessions.actions.preview`)}),(0,X.jsxs)(J,{type:`button`,variant:`default`,size:`xs`,className:`!font-normal`,disabled:i,onClick:()=>void w(e),children:[i?(0,X.jsx)(q,{name:`loader-4`,className:`mr-1 h-3.5 w-3.5 animate-spin`}):(0,X.jsx)(q,{name:`inbox-unarchive`,className:`mr-1 h-3.5 w-3.5`}),t(`settings.openchamber.archivedSessions.actions.restore`)]})]})]},e.id)})}):x.length===0?(0,X.jsx)(`div`,{className:`rounded-lg border border-dashed border-border p-4 typography-meta text-muted-foreground`,children:t(`settings.openchamber.archivedSessions.dialog.empty`)}):(0,X.jsx)(`div`,{className:`space-y-1.5`,children:x.map(e=>(0,X.jsxs)(`button`,{type:`button`,onClick:()=>_(e.projectId),className:K(`flex w-full items-center gap-3 rounded-lg border border-border/60 px-3 py-2.5 text-left`,`hover:bg-interactive-hover/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50`),children:[(0,X.jsx)(q,{name:`folder`,className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`div`,{className:`typography-ui-label font-medium text-foreground truncate`,children:e.label}),e.path?(0,X.jsx)(`div`,{className:`typography-meta text-muted-foreground truncate`,children:ze(e.path)}):null]}),(0,X.jsx)(`span`,{className:`typography-meta tabular-nums text-muted-foreground shrink-0`,children:e.sessions.length===1?t(`settings.openchamber.archivedSessions.dialog.sessionCountSingle`,{count:e.sessions.length}):t(`settings.openchamber.archivedSessions.dialog.sessionCountPlural`,{count:e.sessions.length})}),(0,X.jsx)(q,{name:`arrow-right-s`,className:`h-4 w-4 shrink-0 text-muted-foreground`})]},e.projectId))}),!C&&!m&&S>0?(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground`,children:t(S===1?`settings.openchamber.archivedSessions.summarySingle`:`settings.openchamber.archivedSessions.summaryPlural`,{count:S})}):null]});return o?(0,X.jsxs)(`div`,{"data-settings-item":`archived-sessions.manage`,className:`oc-settings-section-stack`,children:[(0,X.jsx)(`p`,{className:`typography-meta text-muted-foreground`,children:t(`settings.openchamber.archivedSessions.description`)}),O]}):a?(0,X.jsx)(kt,{open:s,title:E,onClose:()=>c(!1),contentMaxHeightClassName:`max-h-[min(80vh,640px)]`,renderHeader:e=>(0,X.jsxs)(`div`,{className:`flex flex-col gap-1 border-b border-border/40 px-3 py-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,X.jsx)(`h2`,{className:`typography-ui-label font-semibold text-foreground`,children:E}),e]}),(0,X.jsx)(`p`,{className:`typography-micro text-muted-foreground`,children:D})]}),children:O}):(0,X.jsx)(Re,{open:s,onOpenChange:c,children:(0,X.jsxs)(Fe,{className:`max-h-[85vh] max-w-2xl overflow-y-auto`,children:[(0,X.jsxs)(Pe,{children:[(0,X.jsx)(Ie,{children:E}),(0,X.jsx)(Le,{children:D})]}),O]})})}function Ea(){let e=(0,Y.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,X.jsx)(Ta,{mode:`dialog`}),e[0]=t):t=e[0],t}var Da=[`connection`,`personalization`,`workspace`,`opencode`,`content`,`system`],Oa=`instances,appearance,chat,notifications,sessions,archived-sessions,summary-ai,shortcuts,projects,git,remote-instances,providers,agents,assistants,behavior,commands,mcp,plugins,global-config,magic-prompts,snippets,skills.installed,skills.catalog,usage,voice,about`.split(`,`),ka=[`instances`,`appearance`,`chat`,`notifications`,`sessions`,`archived-sessions`,`summary-ai`,`projects`,`git`,`providers`,`agents`,`assistants`,`behavior`,`commands`,`mcp`,`plugins`,`magic-prompts`,`snippets`,`skills.installed`,`usage`,`voice`,`about`],Aa=[{slug:`home`,title:`Settings`,group:`personalization`,kind:`single`,description:`Search and jump to common pages.`,keywords:[`search`,`settings`]},{slug:`projects`,title:`Projects`,group:`workspace`,kind:`split`,keywords:[`project`,`projects`,`worktree`,`worktrees`,`repo`,`repository`,`directory`]},{slug:`instances`,title:`Switch instance`,group:`connection`,kind:`single`,keywords:[`instance`,`instances`,`server`,`connection`,`switch`],isAvailable:e=>e.isMobile},{slug:`remote-instances`,title:`Remote Instances`,group:`workspace`,kind:`single`,keywords:[`ssh`,`remote`,`instances`,`forwarding`,`connection`],isAvailable:e=>!e.isVSCode},{slug:`providers`,title:`Providers`,group:`opencode`,kind:`split`,keywords:[`provider`,`providers`,`models`,`model`,`api key`,`api keys`,`openai`,`anthropic`,`ollama`,`credentials`]},{slug:`usage`,title:`Usage`,group:`system`,kind:`split`,keywords:[`quota`,`billing`,`tokens`,`usage`,`limits`]},{slug:`agents`,title:`Agents`,group:`opencode`,kind:`split`,keywords:[`agent`,`agents`,`prompts`,`tools`,`permissions`]},{slug:`assistants`,title:`Assistants`,group:`opencode`,kind:`split`,keywords:[`assistant`,`assistants`,`sharing`]},{slug:`behavior`,title:`Behavior`,group:`opencode`,kind:`single`,keywords:[`behavior`,`agents.md`,`system prompt`,`global rules`,`instructions`,`override`]},{slug:`commands`,title:`Commands`,group:`opencode`,kind:`split`,keywords:[`command`,`commands`,`slash`,`macros`,`automation`]},{slug:`mcp`,title:`MCP`,group:`opencode`,kind:`split`,keywords:[`mcp`,`model context protocol`,`servers`,`tools`,`remote`,`stdio`]},{slug:`plugins`,title:`Plugins`,group:`opencode`,kind:`split`,keywords:[`plugin`,`plugins`,`extensions`,`addons`,`npm`,`opencode-wakatime`]},{slug:`global-config`,title:`Global Configuration`,group:`opencode`,kind:`single`,keywords:[`global`,`configuration`,`opencode.json`,`opencode.jsonc`,`oh-my-opencode`,`oh-my-openagent`]},{slug:`skills.installed`,title:`Skills`,group:`content`,kind:`split`,keywords:[`skill`,`skills`,`instructions`,`install`,`catalog`]},{slug:`skills.catalog`,title:`Skills Catalog`,group:`content`,kind:`single`,keywords:[`install`,`catalog`,`external`,`repository`,`skills catalog`]},{slug:`git`,title:`Git`,group:`workspace`,kind:`single`,keywords:[`git`,`github`,`identity`,`identities`,`ssh`,`profiles`,`credentials`,`keys`,`commit`,`gitmoji`,`oauth`,`prs`,`issues`],isAvailable:e=>!e.isVSCode},{slug:`appearance`,title:`Appearance`,group:`personalization`,kind:`single`,keywords:[`theme`,`font`,`spacing`,`padding`,`corner radius`,`radius`,`input bar`,`keyboard`,`viewport`,`mobile`,`terminal`,`pwa`,`install name`,`app shortcuts`]},{slug:`chat`,title:`Chat`,group:`personalization`,kind:`single`,keywords:[`tools`,`diff`,`reasoning`,`dotfiles`,`draft`,`queue`,`output`,`copy`,`image`,`split messages`,`message actions`]},{slug:`shortcuts`,title:`Shortcuts`,group:`personalization`,kind:`single`,keywords:[`keyboard`,`hotkeys`,`shortcuts`,`bindings`],isAvailable:e=>!e.isVSCode},{slug:`sessions`,title:`Sessions`,group:`personalization`,kind:`single`,keywords:[`defaults`,`default agent`,`default model`,`retention`,`memory`,`limits`,`zen`]},{slug:`archived-sessions`,title:`Archived sessions`,group:`personalization`,kind:`single`,keywords:[`archive`,`archived`,`restore`,`preview`,`history`]},{slug:`summary-ai`,title:`Summary AI`,group:`personalization`,kind:`single`,keywords:[`summary`,`commit`,`session title`,`prompt`,`provider`,`custom api`,`base url`,`api token`]},{slug:`magic-prompts`,title:`Magic Prompts`,group:`content`,kind:`split`,keywords:[`prompts`,`templates`,`git`,`github`,`review`,`commit`,`pull request`],isAvailable:e=>!e.isVSCode},{slug:`snippets`,title:`Snippets`,group:`content`,kind:`split`,keywords:[`prompt`,`templates`,`multi-run`,`strategy`,`approach`]},{slug:`notifications`,title:`Notifications`,group:`personalization`,kind:`single`,keywords:[`alerts`,`native`,`summary`,`summarization`]},{slug:`voice`,title:`Voice`,group:`system`,kind:`single`,keywords:[`tts`,`speech`,`voice`],isAvailable:e=>!e.isVSCode},{slug:`about`,title:`About`,group:`system`,kind:`single`,keywords:[`about`,`version`,`updates`,`release`,`changelog`],isAvailable:e=>e.isMobile}];function ja(e){let t=new Map(Oa.map((e,t)=>[e,t])),n=new Map;for(let t of e){let e=n.get(t.group)??[];e.push(t),n.set(t.group,e)}return Da.flatMap(e=>{let r=n.get(e);return r?.length?[{group:e,pages:r.sort((e,n)=>(t.get(e.slug)??999)-(t.get(n.slug)??999))}]:[]})}var Ma={sessions:`sessions`,agents:`agents`,commands:`commands`,mcp:`mcp`,skills:`skills.installed`,providers:`providers`,usage:`usage`,"git-identities":`git`,settings:`home`};function Na(e){let t=e.trim().toLowerCase();return Aa.find(e=>e.slug===t)??null}function Pa(e){let t=(e??``).trim().toLowerCase();if(!t)return`home`;let n=Ma[t];if(n)return n;let r=Na(t);return r?r.slug:`home`}var Fa=48;function Ia({title:e,eyebrow:t,trailing:n,className:r}){let i=(0,Q.useRef)(null),a=(0,Q.useRef)(null),o=(0,Q.useRef)(null),s=(0,Q.useRef)(null),c=(0,Q.useRef)(null),l=ge(()=>{s.current=null;let e=i.current,t=a.current;if(!e||!t)return;let n=Math.min(1,Math.max(0,t.scrollTop/Fa)),r=o.current?.matches?Number(n>=.5):n;c.current!==null&&Math.abs(c.current-r)<.001||(c.current=r,e.style.setProperty(`--oc-mobile-title-collapse`,r.toFixed(4)))}),u=ge(()=>{s.current===null&&(s.current=window.requestAnimationFrame(l))});return(0,Q.useEffect)(()=>{let e=i.current;if(!e)return;let t=e.closest(`.oc-mobile-settings-root-surface, [role="tabpanel"]`);if(!t)return;let n=window.matchMedia(`(prefers-reduced-motion: reduce)`);return a.current=t,o.current=n,c.current=null,t.addEventListener(`scroll`,u,{passive:!0}),n.addEventListener(`change`,u),l(),()=>{t.removeEventListener(`scroll`,u),n.removeEventListener(`change`,u),s.current!==null&&window.cancelAnimationFrame(s.current),s.current=null,a.current=null,o.current=null,c.current=null}},[]),(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`header`,{ref:i,className:K(`oc-mobile-collapsing-header flex shrink-0 items-start gap-4`,r),children:(0,X.jsxs)(`div`,{className:`oc-mobile-collapsing-header-inner`,children:[(0,X.jsxs)(`div`,{className:`oc-mobile-collapsing-header-title-block min-w-0 flex-1`,children:[t?(0,X.jsx)(`p`,{className:`oc-mobile-collapsing-header-eyebrow truncate typography-micro font-medium text-muted-foreground`,children:t}):null,(0,X.jsx)(`h1`,{className:`oc-mobile-root-page-title truncate font-semibold text-foreground`,children:e})]}),n?(0,X.jsx)(`div`,{className:`oc-mobile-collapsing-header-trailing flex min-h-10 shrink-0 items-center gap-3.5`,children:n}):null]})}),(0,X.jsx)(`div`,{className:`oc-mobile-collapsing-header-spacer`,"aria-hidden":`true`})]})}function La(e){let t=(0,Y.c)(10),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({asChild:i,className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let a=i!==void 0&&i?Be:`div`,o;t[4]===n?o=t[5]:(o=K(`oc-mobile-floating-surface`,n),t[4]=n,t[5]=o);let s;return t[6]!==a||t[7]!==r||t[8]!==o?(s=(0,X.jsx)(a,{className:o,...r}),t[6]=a,t[7]=r,t[8]=o,t[9]=s):s=t[9],s}function Ra(e){let t=(0,Y.c)(20),n,r,i,a,o,s;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6]):({as:o,children:n,className:r,variant:s,surfaceProps:a,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s);let c=o===void 0?`div`:o,l=s===void 0?`actions`:s,u;t[7]===r?u=t[8]:(u=K(`oc-mobile-floating-bottom-bar-frame`,r),t[7]=r,t[8]=u);let d=l===`navigation`?`oc-mobile-floating-bottom-bar-navigation`:`oc-mobile-floating-bottom-bar-actions`,f;t[9]===d?f=t[10]:(f=K(`oc-mobile-floating-bottom-bar`,d),t[9]=d,t[10]=f);let p;t[11]!==n||t[12]!==a||t[13]!==f?(p=(0,X.jsx)(La,{...a,className:f,children:n}),t[11]=n,t[12]=a,t[13]=f,t[14]=p):p=t[14];let m;return t[15]!==c||t[16]!==i||t[17]!==u||t[18]!==p?(m=(0,X.jsx)(c,{className:u,...i,children:p}),t[15]=c,t[16]=i,t[17]=u,t[18]=p,t[19]=m):m=t[19],m}function za(e){let t=(0,Y.c)(17),{title:n,children:r,surface:i,scrollsWithPage:a,showHeader:o,trailing:s,className:c,surfaceClassName:l,surfaceAriaLabel:u}=e,d=i===void 0||i,f=a!==void 0&&a,p=o===void 0||o,m=f&&`oc-mobile-tab-page-flow`,h=!p&&`gap-0`,g;t[0]!==c||t[1]!==m||t[2]!==h?(g=K(`oc-mobile-tab-page`,m,h,c),t[0]=c,t[1]=m,t[2]=h,t[3]=g):g=t[3];let _;t[4]!==p||t[5]!==n||t[6]!==s?(_=p?(0,X.jsx)(Ia,{title:n,trailing:s}):null,t[4]=p,t[5]=n,t[6]=s,t[7]=_):_=t[7];let v;t[8]!==r||t[9]!==d||t[10]!==u||t[11]!==l?(v=d?(0,X.jsx)(La,{className:K(`oc-mobile-tab-page-surface`,l),"aria-label":u,children:r}):(0,X.jsx)(`div`,{className:K(`oc-mobile-tab-page-content`,l),"aria-label":u,children:r}),t[8]=r,t[9]=d,t[10]=u,t[11]=l,t[12]=v):v=t[12];let y;return t[13]!==g||t[14]!==_||t[15]!==v?(y=(0,X.jsxs)(`div`,{className:g,children:[_,v]}),t[13]=g,t[14]=_,t[15]=v,t[16]=y):y=t[16],y}function Ba(e){let t=(0,Y.c)(12),{label:n,children:r,className:i,cardClassName:a,ariaLabel:o}=e,s;t[0]!==a||t[1]!==i?(s=K(`oc-mobile-labeled-surface-group`,a,i),t[0]=a,t[1]=i,t[2]=s):s=t[2];let c;t[3]===n?c=t[4]:(c=(0,X.jsx)(`div`,{className:`oc-mobile-labeled-surface-group-label`,children:n}),t[3]=n,t[4]=c);let l;t[5]===r?l=t[6]:(l=r?(0,X.jsx)(`div`,{className:`oc-mobile-labeled-surface-group-content`,children:r}):null,t[5]=r,t[6]=l);let u;return t[7]!==o||t[8]!==s||t[9]!==c||t[10]!==l?(u=(0,X.jsxs)(`section`,{className:s,"aria-label":o,children:[c,l]}),t[7]=o,t[8]=s,t[9]=c,t[10]=l,t[11]=u):u=t[11],u}export{pn as $,hi as A,br as B,Pi as C,Ni as D,Ri as E,kr as F,Mn as G,gr as H,Ar as I,hn as J,jn as K,Er as L,ri as M,ni as N,Si as O,Dr as P,sn as Q,yr as R,Li as S,Bi as T,ir as U,xr as V,An as W,_n as X,gn as Y,vn as Z,na as _,Ia as a,Zi as b,Na as c,Ea as d,mn as et,Ta as f,ia as g,ma as h,za as i,mi as j,gi as k,ja as l,_a as m,La as n,an as nt,ka as o,Sa as p,En as q,Ba as r,Aa as s,Ra as t,on as tt,Pa as u,ta as v,zi as w,Xi as x,Yi as y,vr as z};