codexmate 0.1.2 → 0.1.4

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.
@@ -71,7 +71,7 @@ return function render(_ctx, _cache) {
71
71
  "data-config-mode": _ctx.configMode,
72
72
  tabindex: _ctx.mainTab === 'config' ? 0 : -1,
73
73
  "aria-selected": _ctx.mainTab === 'config',
74
- "aria-controls": _ctx.configMode === 'claude' ? 'panel-config-claude' : (_ctx.configMode === 'openclaw' ? 'panel-config-openclaw' : (_ctx.configMode === 'opencode' ? 'panel-config-opencode' : 'panel-config-provider')),
74
+ "aria-controls": _ctx.configMode === 'claude' ? 'panel-config-claude' : (_ctx.configMode === 'openclaw' ? 'panel-config-openclaw' : (_ctx.configMode === 'opencode' ? 'panel-config-opencode' : (_ctx.configMode === 'kilocode' ? 'panel-config-kilocode' : 'panel-config-provider'))),
75
75
  onPointerdown: $event => (_ctx.onMainTabPointerDown('config', $event)),
76
76
  onClick: $event => (_ctx.onMainTabClick('config', $event))
77
77
  }, _toDisplayString(_ctx.t('tab.config')), 43 /* TEXT, CLASS, PROPS, NEED_HYDRATION */, ["data-config-mode", "tabindex", "aria-selected", "aria-controls", "onPointerdown", "onClick"]),
@@ -284,7 +284,7 @@ return function render(_ctx, _cache) {
284
284
  "data-main-tab": "config",
285
285
  "data-config-mode": "codex",
286
286
  "aria-current": _ctx.mainTab === 'config' && _ctx.configMode === 'codex' ? 'page' : null,
287
- class: _normalizeClass(['side-item', { active: _ctx.isConfigModeNavActive('codex') }]),
287
+ class: _normalizeClass(['side-item', 'side-item-compact', { active: _ctx.isConfigModeNavActive('codex') }]),
288
288
  onPointerdown: $event => (_ctx.onConfigTabPointerDown('codex', $event)),
289
289
  onClick: $event => (_ctx.onConfigTabClick('codex', $event))
290
290
  }, [
@@ -294,10 +294,7 @@ return function render(_ctx, _cache) {
294
294
  }, "C"),
295
295
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.codex')), 1 /* TEXT */),
296
296
  _createElementVNode("div", { class: "side-item-meta" }, [
297
- _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.codex.meta')), 1 /* TEXT */),
298
- (_ctx.currentProvider)
299
- ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('common.current', { value: _ctx.currentProvider })), 1 /* TEXT */))
300
- : _createCommentVNode("v-if", true)
297
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.codex.meta')), 1 /* TEXT */)
301
298
  ])
302
299
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]),
303
300
  _createElementVNode("button", {
@@ -305,7 +302,7 @@ return function render(_ctx, _cache) {
305
302
  "data-main-tab": "config",
306
303
  "data-config-mode": "claude",
307
304
  "aria-current": _ctx.mainTab === 'config' && _ctx.configMode === 'claude' ? 'page' : null,
308
- class: _normalizeClass(['side-item', { active: _ctx.isConfigModeNavActive('claude') }]),
305
+ class: _normalizeClass(['side-item', 'side-item-compact', { active: _ctx.isConfigModeNavActive('claude') }]),
309
306
  onPointerdown: $event => (_ctx.onConfigTabPointerDown('claude', $event)),
310
307
  onClick: $event => (_ctx.onConfigTabClick('claude', $event))
311
308
  }, [
@@ -315,10 +312,7 @@ return function render(_ctx, _cache) {
315
312
  }, "A"),
316
313
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.claude')), 1 /* TEXT */),
317
314
  _createElementVNode("div", { class: "side-item-meta" }, [
318
- _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.claude.meta')), 1 /* TEXT */),
319
- (_ctx.currentClaudeConfig)
320
- ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('common.current', { value: _ctx.currentClaudeConfig })), 1 /* TEXT */))
321
- : _createCommentVNode("v-if", true)
315
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.claude.meta')), 1 /* TEXT */)
322
316
  ])
323
317
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]),
324
318
  _createElementVNode("button", {
@@ -326,7 +320,7 @@ return function render(_ctx, _cache) {
326
320
  "data-main-tab": "config",
327
321
  "data-config-mode": "openclaw",
328
322
  "aria-current": _ctx.mainTab === 'config' && _ctx.configMode === 'openclaw' ? 'page' : null,
329
- class: _normalizeClass(['side-item', { active: _ctx.isConfigModeNavActive('openclaw') }]),
323
+ class: _normalizeClass(['side-item', 'side-item-compact', { active: _ctx.isConfigModeNavActive('openclaw') }]),
330
324
  onPointerdown: $event => (_ctx.onConfigTabPointerDown('openclaw', $event)),
331
325
  onClick: $event => (_ctx.onConfigTabClick('openclaw', $event))
332
326
  }, [
@@ -336,10 +330,7 @@ return function render(_ctx, _cache) {
336
330
  }, "O"),
337
331
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.openclaw')), 1 /* TEXT */),
338
332
  _createElementVNode("div", { class: "side-item-meta" }, [
339
- _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.openclaw.meta')), 1 /* TEXT */),
340
- (_ctx.currentOpenclawConfig)
341
- ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('common.current', { value: _ctx.currentOpenclawConfig })), 1 /* TEXT */))
342
- : _createCommentVNode("v-if", true)
333
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.openclaw.meta')), 1 /* TEXT */)
343
334
  ])
344
335
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]),
345
336
  _createElementVNode("button", {
@@ -347,7 +338,7 @@ return function render(_ctx, _cache) {
347
338
  "data-main-tab": "config",
348
339
  "data-config-mode": "opencode",
349
340
  "aria-current": _ctx.mainTab === 'config' && _ctx.configMode === 'opencode' ? 'page' : null,
350
- class: _normalizeClass(['side-item', { active: _ctx.isConfigModeNavActive('opencode') }]),
341
+ class: _normalizeClass(['side-item', 'side-item-compact', { active: _ctx.isConfigModeNavActive('opencode') }]),
351
342
  onPointerdown: $event => (_ctx.onConfigTabPointerDown('opencode', $event)),
352
343
  onClick: $event => (_ctx.onConfigTabClick('opencode', $event))
353
344
  }, [
@@ -357,36 +348,34 @@ return function render(_ctx, _cache) {
357
348
  }, "N"),
358
349
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.opencode')), 1 /* TEXT */),
359
350
  _createElementVNode("div", { class: "side-item-meta" }, [
360
- _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.opencode.meta')), 1 /* TEXT */),
361
- (_ctx.opencodeModel)
362
- ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('common.current', { value: _ctx.opencodeModel })), 1 /* TEXT */))
363
- : _createCommentVNode("v-if", true)
351
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.opencode.meta')), 1 /* TEXT */)
364
352
  ])
365
353
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]),
366
354
  _createElementVNode("button", {
367
- id: "side-tab-prompts",
368
- "data-main-tab": "prompts",
369
- "aria-current": _ctx.mainTab === 'prompts' ? 'page' : null,
370
- class: _normalizeClass(['side-item', { active: _ctx.isMainTabNavActive('prompts') }]),
371
- onPointerdown: $event => (_ctx.onMainTabPointerDown('prompts', $event)),
372
- onClick: $event => (_ctx.onMainTabClick('prompts', $event))
355
+ id: "side-tab-config-kilocode",
356
+ "data-main-tab": "config",
357
+ "data-config-mode": "kilocode",
358
+ "aria-current": _ctx.mainTab === 'config' && _ctx.configMode === 'kilocode' ? 'page' : null,
359
+ class: _normalizeClass(['side-item', 'side-item-compact', { active: _ctx.isConfigModeNavActive('kilocode') }]),
360
+ onPointerdown: $event => (_ctx.onConfigTabPointerDown('kilocode', $event)),
361
+ onClick: $event => (_ctx.onConfigTabClick('kilocode', $event))
373
362
  }, [
374
363
  _createElementVNode("span", {
375
364
  class: "side-item-icon",
376
365
  "aria-hidden": "true"
377
- }, "P"),
378
- _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.prompts')), 1 /* TEXT */),
366
+ }, "K"),
367
+ _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.kilocode')), 1 /* TEXT */),
379
368
  _createElementVNode("div", { class: "side-item-meta" }, [
380
- _createElementVNode("span", null, _toDisplayString(_ctx.t('side.prompts.meta')), 1 /* TEXT */)
369
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.kilocode.meta')), 1 /* TEXT */)
381
370
  ])
382
371
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"])
383
372
  ], 8 /* PROPS */, ["aria-label"]),
384
373
  _createElementVNode("div", {
385
374
  class: "side-section",
386
375
  role: "navigation",
387
- "aria-label": _ctx.t('side.sessions')
376
+ "aria-label": _ctx.t('side.workspace')
388
377
  }, [
389
- _createElementVNode("div", { class: "side-section-title" }, _toDisplayString(_ctx.t('side.sessions')), 1 /* TEXT */),
378
+ _createElementVNode("div", { class: "side-section-title" }, _toDisplayString(_ctx.t('side.workspace')), 1 /* TEXT */),
390
379
  _createElementVNode("button", {
391
380
  id: "side-tab-sessions",
392
381
  "data-main-tab": "sessions",
@@ -405,6 +394,23 @@ return function render(_ctx, _cache) {
405
394
  _createElementVNode("span", null, _toDisplayString(_ctx.t('sessions.sourceLabel', { value: (_ctx.sessionFilterSource === 'all' ? _ctx.t('sessions.source.all') : (_ctx.sessionFilterSource === 'claude' ? 'Claude Code' : (_ctx.sessionFilterSource === 'gemini' ? 'Gemini CLI' : (_ctx.sessionFilterSource === 'codebuddy' ? 'CodeBuddy Code' : 'Codex')))) })), 1 /* TEXT */)
406
395
  ])
407
396
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]),
397
+ _createElementVNode("button", {
398
+ id: "side-tab-prompts",
399
+ "data-main-tab": "prompts",
400
+ "aria-current": _ctx.mainTab === 'prompts' ? 'page' : null,
401
+ class: _normalizeClass(['side-item', { active: _ctx.isMainTabNavActive('prompts') }]),
402
+ onPointerdown: $event => (_ctx.onMainTabPointerDown('prompts', $event)),
403
+ onClick: $event => (_ctx.onMainTabClick('prompts', $event))
404
+ }, [
405
+ _createElementVNode("span", {
406
+ class: "side-item-icon",
407
+ "aria-hidden": "true"
408
+ }, "P"),
409
+ _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.prompts')), 1 /* TEXT */),
410
+ _createElementVNode("div", { class: "side-item-meta" }, [
411
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('side.prompts.meta')), 1 /* TEXT */)
412
+ ])
413
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]),
408
414
  _createElementVNode("button", {
409
415
  id: "side-tab-usage",
410
416
  "data-main-tab": "usage",
@@ -2243,6 +2249,28 @@ return function render(_ctx, _cache) {
2243
2249
  ]))
2244
2250
  : _createCommentVNode("v-if", true),
2245
2251
  _createElementVNode("div", { class: "openclaw-layout" }, [
2252
+ _createElementVNode("section", {
2253
+ class: "tool-config-write-card",
2254
+ "aria-label": _ctx.t('toolConfig.openclaw.title')
2255
+ }, [
2256
+ _createElementVNode("div", { class: "tool-config-write-copy" }, [
2257
+ _createElementVNode("div", { class: "tool-config-write-title" }, _toDisplayString(_ctx.t('toolConfig.openclaw.title')), 1 /* TEXT */),
2258
+ _createElementVNode("p", { class: "tool-config-write-desc" }, _toDisplayString(_ctx.t('toolConfig.openclaw.desc')), 1 /* TEXT */)
2259
+ ]),
2260
+ _createElementVNode("label", { class: "settings-toggle-row tool-config-write-toggle" }, [
2261
+ _createElementVNode("input", {
2262
+ type: "checkbox",
2263
+ autocomplete: "off",
2264
+ checked: _ctx.isToolConfigWriteAllowed('openclaw'),
2265
+ disabled: _ctx.toolConfigPermissionSaving.openclaw,
2266
+ onChange: $event => (_ctx.setToolConfigPermission('openclaw', $event.target.checked))
2267
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "disabled", "onChange"]),
2268
+ _createElementVNode("span", { class: "toggle-track" }, [
2269
+ _createElementVNode("span", { class: "toggle-thumb" })
2270
+ ]),
2271
+ _createElementVNode("span", null, _toDisplayString(_ctx.toolConfigPermissionStatusLabel('openclaw')), 1 /* TEXT */)
2272
+ ])
2273
+ ], 8 /* PROPS */, ["aria-label"]),
2246
2274
  _createElementVNode("section", {
2247
2275
  class: "settings-card settings-card--wide openclaw-summary-card",
2248
2276
  "aria-label": "OpenClaw 当前摘要"
@@ -2269,126 +2297,114 @@ return function render(_ctx, _cache) {
2269
2297
  _createElementVNode("div", { class: "openclaw-diagnostic-note" }, " 本页仅管理配置与工作区文件。 ")
2270
2298
  ])
2271
2299
  ]),
2272
- _createElementVNode("section", { class: "settings-card settings-card--wide openclaw-workspace-card" }, [
2273
- _createElementVNode("div", { class: "settings-card-body" }, [
2274
- _createElementVNode("div", { class: "openclaw-tools-grid" }, [
2275
- _createElementVNode("button", {
2276
- class: "openclaw-tool-btn",
2277
- onClick: _ctx.openOpenclawAgentsEditor,
2278
- disabled: _ctx.loading || !!_ctx.initError || _ctx.agentsLoading
2279
- }, [
2280
- _createElementVNode("div", { class: "tool-icon" }, "📄"),
2281
- _createElementVNode("div", { class: "tool-content" }, [
2282
- _createElementVNode("div", { class: "tool-title" }, "AGENTS.md"),
2283
- _createElementVNode("div", { class: "tool-meta" }, _toDisplayString(_ctx.agentsLoading ? _ctx.t('config.modelLoading') : 'Workspace file'), 1 /* TEXT */)
2284
- ]),
2285
- (_openBlock(), _createElementBlock("svg", {
2286
- class: "tool-chevron",
2287
- viewBox: "0 0 24 24",
2288
- fill: "none",
2289
- stroke: "currentColor",
2290
- "stroke-width": "2"
2291
- }, [
2292
- _createElementVNode("path", { d: "M9 18l6-6-6-6" })
2293
- ]))
2294
- ], 8 /* PROPS */, ["onClick", "disabled"]),
2295
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getOpenclawQuickWorkspaceFiles(), (fileName) => {
2296
- return (_openBlock(), _createElementBlock("button", {
2297
- key: fileName,
2298
- type: "button",
2299
- class: "openclaw-tool-btn",
2300
- onClick: $event => (_ctx.openOpenclawQuickWorkspaceFile(fileName)),
2301
- disabled: _ctx.loading || !!_ctx.initError || _ctx.agentsLoading
2302
- }, [
2303
- _createElementVNode("div", { class: "tool-icon" }, "📄"),
2304
- _createElementVNode("div", { class: "tool-content" }, [
2305
- _createElementVNode("div", { class: "tool-title" }, _toDisplayString(fileName), 1 /* TEXT */),
2306
- _createElementVNode("div", { class: "tool-meta" }, "Workspace file")
2307
- ]),
2308
- (_openBlock(), _createElementBlock("svg", {
2309
- class: "tool-chevron",
2310
- viewBox: "0 0 24 24",
2311
- fill: "none",
2312
- stroke: "currentColor",
2313
- "stroke-width": "2"
2314
- }, [
2315
- _createElementVNode("path", { d: "M9 18l6-6-6-6" })
2316
- ]))
2317
- ], 8 /* PROPS */, ["onClick", "disabled"]))
2318
- }), 128 /* KEYED_FRAGMENT */))
2319
- ])
2320
- ])
2321
- ]),
2322
- _createElementVNode("section", {
2323
- class: "settings-card settings-card--wide openclaw-configs-card",
2324
- "aria-labelledby": "openclaw-configs-title"
2300
+ _createElementVNode("div", {
2301
+ class: _normalizeClass(["tool-config-write-scope", { locked: !_ctx.isToolConfigWriteAllowed('openclaw') }])
2325
2302
  }, [
2326
- _createElementVNode("div", { class: "settings-card-body" }, [
2327
- _createElementVNode("div", { class: "card-list openclaw-card-list" }, [
2328
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.openclawConfigs, (config, name) => {
2329
- return (_openBlock(), _createElementBlock("div", {
2330
- key: name,
2331
- class: _normalizeClass(['card', { active: _ctx.currentOpenclawConfig === name }]),
2332
- onClick: $event => (_ctx.applyOpenclawConfig(name)),
2333
- onKeydown: [
2334
- _withKeys(_withModifiers($event => (_ctx.applyOpenclawConfig(name)), ["self","prevent"]), ["enter"]),
2335
- _withKeys(_withModifiers($event => (_ctx.applyOpenclawConfig(name)), ["self","prevent"]), ["space"])
2336
- ],
2337
- tabindex: "0",
2338
- role: "button",
2339
- "aria-label": _ctx.t('openclaw.action.applyAria', { name }),
2340
- "aria-current": _ctx.currentOpenclawConfig === name ? 'true' : null
2341
- }, [
2342
- _createElementVNode("div", { class: "card-leading" }, [
2343
- _createElementVNode("div", { class: "card-icon" }, _toDisplayString(name.charAt(0).toUpperCase()), 1 /* TEXT */),
2344
- _createElementVNode("div", { class: "card-content" }, [
2345
- _createElementVNode("div", { class: "card-title" }, _toDisplayString(name), 1 /* TEXT */),
2346
- _createElementVNode("div", { class: "card-subtitle" }, _toDisplayString(_ctx.openclawSubtitle(config)), 1 /* TEXT */),
2347
- (_ctx.openclawHasContent(config))
2348
- ? (_openBlock(), _createElementBlock("div", {
2349
- key: 0,
2350
- class: "openclaw-config-summary-mini"
2351
- }, [
2352
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getOpenclawConfigSummary(config).slice(0, 3), (item) => {
2353
- return (_openBlock(), _createElementBlock("span", {
2354
- key: item.key
2355
- }, _toDisplayString(item.label) + ": " + _toDisplayString(item.value), 1 /* TEXT */))
2356
- }), 128 /* KEYED_FRAGMENT */))
2357
- ]))
2358
- : _createCommentVNode("v-if", true)
2359
- ])
2360
- ]),
2361
- _createElementVNode("div", { class: "card-trailing" }, [
2362
- _createElementVNode("span", {
2363
- class: _normalizeClass(['pill', _ctx.openclawHasContent(config) ? 'configured' : 'empty'])
2364
- }, _toDisplayString(_ctx.openclawHasContent(config) ? _ctx.t('openclaw.configured') : _ctx.t('openclaw.notConfigured')), 3 /* TEXT, CLASS */),
2365
- _createElementVNode("div", {
2366
- class: "card-actions",
2367
- onClick: _withModifiers(() => {}, ["stop"])
2303
+ _createElementVNode("div", { class: "tool-config-write-body" }, [
2304
+ _createElementVNode("section", { class: "settings-card settings-card--wide openclaw-workspace-card" }, [
2305
+ _createElementVNode("div", { class: "settings-card-body" }, [
2306
+ _createElementVNode("div", { class: "openclaw-tools-grid" }, [
2307
+ _createElementVNode("button", {
2308
+ class: "openclaw-tool-btn",
2309
+ onClick: _ctx.openOpenclawAgentsEditor,
2310
+ disabled: _ctx.loading || !!_ctx.initError || _ctx.agentsLoading || !_ctx.isToolConfigWriteAllowed('openclaw')
2311
+ }, [
2312
+ _createElementVNode("div", { class: "tool-icon" }, "📄"),
2313
+ _createElementVNode("div", { class: "tool-content" }, [
2314
+ _createElementVNode("div", { class: "tool-title" }, "AGENTS.md"),
2315
+ _createElementVNode("div", { class: "tool-meta" }, _toDisplayString(_ctx.agentsLoading ? _ctx.t('config.modelLoading') : 'Workspace file'), 1 /* TEXT */)
2316
+ ]),
2317
+ (_openBlock(), _createElementBlock("svg", {
2318
+ class: "tool-chevron",
2319
+ viewBox: "0 0 24 24",
2320
+ fill: "none",
2321
+ stroke: "currentColor",
2322
+ "stroke-width": "2"
2368
2323
  }, [
2369
- _createElementVNode("button", {
2370
- class: "card-action-btn",
2371
- onClick: $event => (_ctx.openOpenclawEditModal(name)),
2372
- "aria-label": _ctx.t('openclaw.action.editAria', { name }),
2373
- title: _ctx.t('openclaw.action.edit')
2324
+ _createElementVNode("path", { d: "M9 18l6-6-6-6" })
2325
+ ]))
2326
+ ], 8 /* PROPS */, ["onClick", "disabled"]),
2327
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getOpenclawQuickWorkspaceFiles(), (fileName) => {
2328
+ return (_openBlock(), _createElementBlock("button", {
2329
+ key: fileName,
2330
+ type: "button",
2331
+ class: "openclaw-tool-btn",
2332
+ onClick: $event => (_ctx.openOpenclawQuickWorkspaceFile(fileName)),
2333
+ disabled: _ctx.loading || !!_ctx.initError || _ctx.agentsLoading || !_ctx.isToolConfigWriteAllowed('openclaw')
2334
+ }, [
2335
+ _createElementVNode("div", { class: "tool-icon" }, "📄"),
2336
+ _createElementVNode("div", { class: "tool-content" }, [
2337
+ _createElementVNode("div", { class: "tool-title" }, _toDisplayString(fileName), 1 /* TEXT */),
2338
+ _createElementVNode("div", { class: "tool-meta" }, "Workspace file")
2339
+ ]),
2340
+ (_openBlock(), _createElementBlock("svg", {
2341
+ class: "tool-chevron",
2342
+ viewBox: "0 0 24 24",
2343
+ fill: "none",
2344
+ stroke: "currentColor",
2345
+ "stroke-width": "2"
2374
2346
  }, [
2375
- (_openBlock(), _createElementBlock("svg", {
2376
- viewBox: "0 0 24 24",
2377
- fill: "none",
2378
- stroke: "currentColor",
2379
- "stroke-width": "2"
2347
+ _createElementVNode("path", { d: "M9 18l6-6-6-6" })
2348
+ ]))
2349
+ ], 8 /* PROPS */, ["onClick", "disabled"]))
2350
+ }), 128 /* KEYED_FRAGMENT */))
2351
+ ])
2352
+ ])
2353
+ ]),
2354
+ _createElementVNode("section", {
2355
+ class: "settings-card settings-card--wide openclaw-configs-card",
2356
+ "aria-labelledby": "openclaw-configs-title"
2357
+ }, [
2358
+ _createElementVNode("div", { class: "settings-card-body" }, [
2359
+ _createElementVNode("div", { class: "card-list openclaw-card-list" }, [
2360
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.openclawConfigs, (config, name) => {
2361
+ return (_openBlock(), _createElementBlock("div", {
2362
+ key: name,
2363
+ class: _normalizeClass(['card', { active: _ctx.currentOpenclawConfig === name, disabled: !_ctx.isToolConfigWriteAllowed('openclaw') }]),
2364
+ onClick: $event => (_ctx.isToolConfigWriteAllowed('openclaw') && _ctx.applyOpenclawConfig(name)),
2365
+ onKeydown: [
2366
+ _withKeys(_withModifiers($event => (_ctx.isToolConfigWriteAllowed('openclaw') && _ctx.applyOpenclawConfig(name)), ["self","prevent"]), ["enter"]),
2367
+ _withKeys(_withModifiers($event => (_ctx.isToolConfigWriteAllowed('openclaw') && _ctx.applyOpenclawConfig(name)), ["self","prevent"]), ["space"])
2368
+ ],
2369
+ tabindex: _ctx.isToolConfigWriteAllowed('openclaw') ? 0 : -1,
2370
+ role: "button",
2371
+ "aria-label": _ctx.t('openclaw.action.applyAria', { name }),
2372
+ "aria-disabled": !_ctx.isToolConfigWriteAllowed('openclaw') ? 'true' : null,
2373
+ "aria-current": _ctx.currentOpenclawConfig === name ? 'true' : null
2374
+ }, [
2375
+ _createElementVNode("div", { class: "card-leading" }, [
2376
+ _createElementVNode("div", { class: "card-icon" }, _toDisplayString(name.charAt(0).toUpperCase()), 1 /* TEXT */),
2377
+ _createElementVNode("div", { class: "card-content" }, [
2378
+ _createElementVNode("div", { class: "card-title" }, _toDisplayString(name), 1 /* TEXT */),
2379
+ _createElementVNode("div", { class: "card-subtitle" }, _toDisplayString(_ctx.openclawSubtitle(config)), 1 /* TEXT */),
2380
+ (_ctx.openclawHasContent(config))
2381
+ ? (_openBlock(), _createElementBlock("div", {
2382
+ key: 0,
2383
+ class: "openclaw-config-summary-mini"
2384
+ }, [
2385
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getOpenclawConfigSummary(config).slice(0, 3), (item) => {
2386
+ return (_openBlock(), _createElementBlock("span", {
2387
+ key: item.key
2388
+ }, _toDisplayString(item.label) + ": " + _toDisplayString(item.value), 1 /* TEXT */))
2389
+ }), 128 /* KEYED_FRAGMENT */))
2390
+ ]))
2391
+ : _createCommentVNode("v-if", true)
2392
+ ])
2393
+ ]),
2394
+ _createElementVNode("div", { class: "card-trailing" }, [
2395
+ _createElementVNode("span", {
2396
+ class: _normalizeClass(['pill', _ctx.openclawHasContent(config) ? 'configured' : 'empty'])
2397
+ }, _toDisplayString(_ctx.openclawHasContent(config) ? _ctx.t('openclaw.configured') : _ctx.t('openclaw.notConfigured')), 3 /* TEXT, CLASS */),
2398
+ _createElementVNode("div", {
2399
+ class: "card-actions",
2400
+ onClick: _withModifiers(() => {}, ["stop"])
2380
2401
  }, [
2381
- _createElementVNode("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }),
2382
- _createElementVNode("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })
2383
- ]))
2384
- ], 8 /* PROPS */, ["onClick", "aria-label", "title"]),
2385
- (!_ctx.isDefaultOpenclawConfig(name, config))
2386
- ? (_openBlock(), _createElementBlock("button", {
2387
- key: 0,
2388
- class: "card-action-btn delete",
2389
- onClick: $event => (_ctx.deleteOpenclawConfig(name)),
2390
- "aria-label": _ctx.t('openclaw.action.deleteAria', { name }),
2391
- title: _ctx.t('openclaw.action.delete')
2402
+ _createElementVNode("button", {
2403
+ class: "card-action-btn",
2404
+ onClick: $event => (_ctx.openOpenclawEditModal(name)),
2405
+ disabled: !_ctx.isToolConfigWriteAllowed('openclaw'),
2406
+ "aria-label": _ctx.t('openclaw.action.editAria', { name }),
2407
+ title: _ctx.t('openclaw.action.edit')
2392
2408
  }, [
2393
2409
  (_openBlock(), _createElementBlock("svg", {
2394
2410
  viewBox: "0 0 24 24",
@@ -2396,18 +2412,55 @@ return function render(_ctx, _cache) {
2396
2412
  stroke: "currentColor",
2397
2413
  "stroke-width": "2"
2398
2414
  }, [
2399
- _createElementVNode("path", { d: "M3 6h18" }),
2400
- _createElementVNode("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
2415
+ _createElementVNode("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }),
2416
+ _createElementVNode("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })
2401
2417
  ]))
2402
- ], 8 /* PROPS */, ["onClick", "aria-label", "title"]))
2403
- : _createCommentVNode("v-if", true)
2404
- ], 8 /* PROPS */, ["onClick"])
2418
+ ], 8 /* PROPS */, ["onClick", "disabled", "aria-label", "title"]),
2419
+ (!_ctx.isDefaultOpenclawConfig(name, config))
2420
+ ? (_openBlock(), _createElementBlock("button", {
2421
+ key: 0,
2422
+ class: "card-action-btn delete",
2423
+ onClick: $event => (_ctx.deleteOpenclawConfig(name)),
2424
+ "aria-label": _ctx.t('openclaw.action.deleteAria', { name }),
2425
+ title: _ctx.t('openclaw.action.delete')
2426
+ }, [
2427
+ (_openBlock(), _createElementBlock("svg", {
2428
+ viewBox: "0 0 24 24",
2429
+ fill: "none",
2430
+ stroke: "currentColor",
2431
+ "stroke-width": "2"
2432
+ }, [
2433
+ _createElementVNode("path", { d: "M3 6h18" }),
2434
+ _createElementVNode("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
2435
+ ]))
2436
+ ], 8 /* PROPS */, ["onClick", "aria-label", "title"]))
2437
+ : _createCommentVNode("v-if", true)
2438
+ ], 8 /* PROPS */, ["onClick"])
2439
+ ])
2440
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["onClick", "onKeydown", "tabindex", "aria-label", "aria-disabled", "aria-current"]))
2441
+ }), 128 /* KEYED_FRAGMENT */))
2442
+ ])
2443
+ ])
2444
+ ]),
2445
+ (!_ctx.isToolConfigWriteAllowed('openclaw'))
2446
+ ? (_openBlock(), _createElementBlock("div", {
2447
+ key: 0,
2448
+ class: "tool-config-write-overlay"
2449
+ }, [
2450
+ _createElementVNode("div", { class: "tool-config-write-overlay-card" }, [
2451
+ _createElementVNode("div", { class: "tool-config-write-overlay-title" }, _toDisplayString(_ctx.t('toolConfig.openclaw.lockedTitle')), 1 /* TEXT */),
2452
+ _createElementVNode("p", null, _toDisplayString(_ctx.t('toolConfig.openclaw.lockedDesc')), 1 /* TEXT */),
2453
+ _createElementVNode("button", {
2454
+ type: "button",
2455
+ class: "btn-tool",
2456
+ onClick: $event => (_ctx.setToolConfigPermission('openclaw', true)),
2457
+ disabled: _ctx.toolConfigPermissionSaving.openclaw
2458
+ }, _toDisplayString(_ctx.t('toolConfig.enableWrite')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
2405
2459
  ])
2406
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["onClick", "onKeydown", "aria-label", "aria-current"]))
2407
- }), 128 /* KEYED_FRAGMENT */))
2408
- ])
2460
+ ]))
2461
+ : _createCommentVNode("v-if", true)
2409
2462
  ])
2410
- ])
2463
+ ], 2 /* CLASS */)
2411
2464
  ])
2412
2465
  ], 8 /* PROPS */, ["aria-labelledby"]), [
2413
2466
  [_vShow, _ctx.mainTab === 'config' && _ctx.configMode === 'openclaw']
@@ -2443,7 +2496,12 @@ return function render(_ctx, _cache) {
2443
2496
  type: "button",
2444
2497
  class: _normalizeClass(['segment', { active: _ctx.configMode === 'opencode' }]),
2445
2498
  onClick: $event => (_ctx.switchConfigMode('opencode'))
2446
- }, _toDisplayString(_ctx.t('tab.config.opencode')), 11 /* TEXT, CLASS, PROPS */, ["onClick"])
2499
+ }, _toDisplayString(_ctx.t('tab.config.opencode')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]),
2500
+ _createElementVNode("button", {
2501
+ type: "button",
2502
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'kilocode' }]),
2503
+ onClick: $event => (_ctx.switchConfigMode('kilocode'))
2504
+ }, _toDisplayString(_ctx.t('tab.config.kilocode')), 11 /* TEXT, CLASS, PROPS */, ["onClick"])
2447
2505
  ]))
2448
2506
  : _createCommentVNode("v-if", true),
2449
2507
  _createElementVNode("section", {
@@ -2800,6 +2858,265 @@ return function render(_ctx, _cache) {
2800
2858
  ], 8 /* PROPS */, ["aria-labelledby"]), [
2801
2859
  [_vShow, _ctx.mainTab === 'config' && _ctx.configMode === 'opencode']
2802
2860
  ]),
2861
+ _createCommentVNode(" KiloCode 配置 "),
2862
+ _withDirectives(_createElementVNode("div", {
2863
+ class: "mode-content mode-cards",
2864
+ id: "panel-config-kilocode",
2865
+ role: "tabpanel",
2866
+ "aria-labelledby": _ctx.forceCompactLayout ? 'tab-config' : 'side-tab-config-kilocode'
2867
+ }, [
2868
+ (_ctx.forceCompactLayout && !_ctx.sessionStandalone)
2869
+ ? (_openBlock(), _createElementBlock("div", {
2870
+ key: 0,
2871
+ class: "segmented-control"
2872
+ }, [
2873
+ _createElementVNode("button", {
2874
+ type: "button",
2875
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'codex' }]),
2876
+ onClick: $event => (_ctx.switchConfigMode('codex'))
2877
+ }, _toDisplayString(_ctx.t('tab.config.codex')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]),
2878
+ _createElementVNode("button", {
2879
+ type: "button",
2880
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'claude' }]),
2881
+ onClick: $event => (_ctx.switchConfigMode('claude'))
2882
+ }, _toDisplayString(_ctx.t('tab.config.claude')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]),
2883
+ _createElementVNode("button", {
2884
+ type: "button",
2885
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'openclaw' }]),
2886
+ onClick: $event => (_ctx.switchConfigMode('openclaw'))
2887
+ }, _toDisplayString(_ctx.t('tab.config.openclaw')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]),
2888
+ _createElementVNode("button", {
2889
+ type: "button",
2890
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'opencode' }]),
2891
+ onClick: $event => (_ctx.switchConfigMode('opencode'))
2892
+ }, _toDisplayString(_ctx.t('tab.config.opencode')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]),
2893
+ _createElementVNode("button", {
2894
+ type: "button",
2895
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'kilocode' }]),
2896
+ onClick: $event => (_ctx.switchConfigMode('kilocode'))
2897
+ }, _toDisplayString(_ctx.t('tab.config.kilocode')), 11 /* TEXT, CLASS, PROPS */, ["onClick"])
2898
+ ]))
2899
+ : _createCommentVNode("v-if", true),
2900
+ _createElementVNode("section", {
2901
+ class: "tool-config-write-card",
2902
+ "aria-label": _ctx.t('toolConfig.kilocode.title')
2903
+ }, [
2904
+ _createElementVNode("div", { class: "tool-config-write-copy" }, [
2905
+ _createElementVNode("div", { class: "tool-config-write-title" }, _toDisplayString(_ctx.t('toolConfig.kilocode.title')), 1 /* TEXT */),
2906
+ _createElementVNode("p", { class: "tool-config-write-desc" }, _toDisplayString(_ctx.t('toolConfig.kilocode.desc')), 1 /* TEXT */)
2907
+ ]),
2908
+ _createElementVNode("label", { class: "settings-toggle-row tool-config-write-toggle" }, [
2909
+ _createElementVNode("input", {
2910
+ type: "checkbox",
2911
+ autocomplete: "off",
2912
+ checked: _ctx.isToolConfigWriteAllowed('kilocode'),
2913
+ disabled: _ctx.toolConfigPermissionSaving.kilocode,
2914
+ onChange: $event => (_ctx.setToolConfigPermission('kilocode', $event.target.checked))
2915
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "disabled", "onChange"]),
2916
+ _createElementVNode("span", { class: "toggle-track" }, [
2917
+ _createElementVNode("span", { class: "toggle-thumb" })
2918
+ ]),
2919
+ _createElementVNode("span", null, _toDisplayString(_ctx.toolConfigPermissionStatusLabel('kilocode')), 1 /* TEXT */)
2920
+ ])
2921
+ ], 8 /* PROPS */, ["aria-label"]),
2922
+ _createElementVNode("div", {
2923
+ class: _normalizeClass(["tool-config-write-scope", { locked: !_ctx.isToolConfigWriteAllowed('kilocode') }])
2924
+ }, [
2925
+ _createElementVNode("div", { class: "tool-config-write-body" }, [
2926
+ _createElementVNode("section", { class: "selector-section" }, [
2927
+ _createElementVNode("div", { class: "selector-header" }, [
2928
+ _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('kilocode.providerModel.title')), 1 /* TEXT */)
2929
+ ]),
2930
+ _createElementVNode("div", { class: "config-template-hint" }, _toDisplayString(_ctx.t('kilocode.targetFile', { path: _ctx.kilocodeConfigPath || '~/.config/kilo/kilo.jsonc', status: _ctx.kilocodeConfigExists ? _ctx.t('common.exists') : _ctx.t('common.notExistsWillCreateOnSave') })), 1 /* TEXT */),
2931
+ _createElementVNode("div", { class: "codex-config-grid" }, [
2932
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
2933
+ _createElementVNode("label", {
2934
+ class: "form-label",
2935
+ for: "kilocode-provider"
2936
+ }, _toDisplayString(_ctx.t('field.provider')), 1 /* TEXT */),
2937
+ _withDirectives(_createElementVNode("input", {
2938
+ id: "kilocode-provider",
2939
+ class: "form-input",
2940
+ "onUpdate:modelValue": $event => ((_ctx.kilocodeProvider) = $event),
2941
+ autocomplete: "off",
2942
+ spellcheck: "false",
2943
+ placeholder: "codexmate",
2944
+ onBlur: _ctx.autoSaveKilocodeConfig
2945
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "onBlur"]), [
2946
+ [_vModelText, _ctx.kilocodeProvider]
2947
+ ])
2948
+ ]),
2949
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
2950
+ _createElementVNode("label", {
2951
+ class: "form-label",
2952
+ for: "kilocode-base-url"
2953
+ }, _toDisplayString(_ctx.t('field.url')), 1 /* TEXT */),
2954
+ _withDirectives(_createElementVNode("input", {
2955
+ id: "kilocode-base-url",
2956
+ class: "form-input",
2957
+ "onUpdate:modelValue": $event => ((_ctx.kilocodeBaseUrl) = $event),
2958
+ autocomplete: "off",
2959
+ spellcheck: "false",
2960
+ placeholder: "https://api.example.com/v1",
2961
+ onBlur: _ctx.autoSaveKilocodeConfig
2962
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "onBlur"]), [
2963
+ [_vModelText, _ctx.kilocodeBaseUrl]
2964
+ ])
2965
+ ]),
2966
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
2967
+ _createElementVNode("label", {
2968
+ class: "form-label",
2969
+ for: "kilocode-model"
2970
+ }, _toDisplayString(_ctx.t('field.model')), 1 /* TEXT */),
2971
+ _withDirectives(_createElementVNode("input", {
2972
+ id: "kilocode-model",
2973
+ class: "form-input",
2974
+ "onUpdate:modelValue": $event => ((_ctx.kilocodeModel) = $event),
2975
+ autocomplete: "off",
2976
+ spellcheck: "false",
2977
+ placeholder: "gpt-5.3",
2978
+ onBlur: _ctx.autoSaveKilocodeConfig
2979
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "onBlur"]), [
2980
+ [_vModelText, _ctx.kilocodeModel]
2981
+ ])
2982
+ ]),
2983
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
2984
+ _createElementVNode("label", {
2985
+ class: "form-label",
2986
+ for: "kilocode-api-key"
2987
+ }, _toDisplayString(_ctx.t('opencode.field.apiKeyKeep')), 1 /* TEXT */),
2988
+ _createElementVNode("div", { class: "input-with-toggle" }, [
2989
+ _withDirectives(_createElementVNode("input", {
2990
+ id: "kilocode-api-key",
2991
+ class: "form-input",
2992
+ "onUpdate:modelValue": $event => ((_ctx.kilocodeApiKey) = $event),
2993
+ type: _ctx.kilocodeShowKey ? 'text' : 'password',
2994
+ autocomplete: "off",
2995
+ spellcheck: "false",
2996
+ placeholder: "sk-...",
2997
+ onBlur: _ctx.autoSaveKilocodeConfig
2998
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "type", "onBlur"]), [
2999
+ [_vModelDynamic, _ctx.kilocodeApiKey]
3000
+ ]),
3001
+ _createElementVNode("button", {
3002
+ type: "button",
3003
+ class: "input-toggle-btn",
3004
+ onMousedown: _withModifiers(() => {}, ["prevent"]),
3005
+ onClick: $event => (_ctx.kilocodeShowKey = !_ctx.kilocodeShowKey),
3006
+ title: _ctx.kilocodeShowKey ? _ctx.t('common.hide') : _ctx.t('common.show'),
3007
+ "aria-label": _ctx.kilocodeShowKey ? _ctx.t('common.hide') : _ctx.t('common.show')
3008
+ }, [
3009
+ (!_ctx.kilocodeShowKey)
3010
+ ? (_openBlock(), _createElementBlock("svg", {
3011
+ key: 0,
3012
+ viewBox: "0 0 20 20",
3013
+ fill: "none",
3014
+ stroke: "currentColor",
3015
+ "stroke-width": "1.5",
3016
+ width: "16",
3017
+ height: "16"
3018
+ }, [
3019
+ _createElementVNode("path", { d: "M10 4C5 4 1.73 8.11 1 10c.73 1.89 4 6 9 6s8.27-4.11 9-6c-.73-1.89-4-6-9-6z" }),
3020
+ _createElementVNode("circle", {
3021
+ cx: "10",
3022
+ cy: "10",
3023
+ r: "3"
3024
+ })
3025
+ ]))
3026
+ : (_openBlock(), _createElementBlock("svg", {
3027
+ key: 1,
3028
+ viewBox: "0 0 20 20",
3029
+ fill: "none",
3030
+ stroke: "currentColor",
3031
+ "stroke-width": "1.5",
3032
+ width: "16",
3033
+ height: "16"
3034
+ }, [
3035
+ _createElementVNode("path", { d: "M2 2l16 16M8.2 4.2A9.9 9.9 0 0 1 10 4c5 0 8.27 4.11 9 6-.44.94-1.5 2.7-3.2 4.2M14.5 14.5A5.9 5.9 0 0 1 10 16c-5 0-8.27-4.11-9-6 .76-1.66 2.2-3.6 4.3-5" })
3036
+ ]))
3037
+ ], 40 /* PROPS, NEED_HYDRATION */, ["onMousedown", "onClick", "title", "aria-label"])
3038
+ ])
3039
+ ])
3040
+ ]),
3041
+ (_ctx.kilocodeError)
3042
+ ? (_openBlock(), _createElementBlock("div", {
3043
+ key: 0,
3044
+ class: "config-template-hint error-text"
3045
+ }, _toDisplayString(_ctx.kilocodeError), 1 /* TEXT */))
3046
+ : _createCommentVNode("v-if", true)
3047
+ ]),
3048
+ (_ctx.kilocodeProviders.length)
3049
+ ? (_openBlock(), _createElementBlock("section", {
3050
+ key: 0,
3051
+ class: "selector-section"
3052
+ }, [
3053
+ _createElementVNode("div", { class: "selector-header" }, [
3054
+ _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('kilocode.summary.title')), 1 /* TEXT */)
3055
+ ]),
3056
+ _createElementVNode("div", { class: "card-list" }, [
3057
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.kilocodeProviders, (provider) => {
3058
+ return (_openBlock(), _createElementBlock("div", {
3059
+ key: provider.name,
3060
+ class: _normalizeClass(['card', { active: _ctx.normalizeKilocodeProviderNameForUi(provider.name) === _ctx.normalizeKilocodeProviderNameForUi(_ctx.kilocodeProvider) }]),
3061
+ onDblclick: $event => (_ctx.selectKilocodeProvider(provider)),
3062
+ onKeydown: _withKeys(_withModifiers($event => (_ctx.selectKilocodeProvider(provider)), ["self","prevent"]), ["enter"]),
3063
+ tabindex: "0",
3064
+ role: "button",
3065
+ "aria-current": _ctx.normalizeKilocodeProviderNameForUi(provider.name) === _ctx.normalizeKilocodeProviderNameForUi(_ctx.kilocodeProvider) ? 'true' : null
3066
+ }, [
3067
+ _createElementVNode("div", { class: "card-leading" }, [
3068
+ _createElementVNode("div", { class: "card-icon" }, _toDisplayString(provider.name.charAt(0).toUpperCase()), 1 /* TEXT */),
3069
+ _createElementVNode("div", { class: "card-content" }, [
3070
+ _createElementVNode("div", { class: "card-title" }, _toDisplayString(provider.name), 1 /* TEXT */),
3071
+ _createElementVNode("div", { class: "card-subtitle" }, _toDisplayString(provider.baseURL || provider.api || _ctx.t('config.url.unset')), 1 /* TEXT */),
3072
+ _createElementVNode("div", { class: "card-subtitle" }, _toDisplayString((provider.models || []).join(', ') || _ctx.t('opencode.summary.noModel')), 1 /* TEXT */)
3073
+ ])
3074
+ ]),
3075
+ _createElementVNode("div", { class: "card-trailing" }, [
3076
+ _createElementVNode("span", {
3077
+ class: _normalizeClass(['pill', provider.hasKey ? 'configured' : 'empty'])
3078
+ }, _toDisplayString(provider.hasKey ? _ctx.t('common.configured') : _ctx.t('common.notConfigured')), 3 /* TEXT, CLASS */)
3079
+ ])
3080
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["onDblclick", "onKeydown", "aria-current"]))
3081
+ }), 128 /* KEYED_FRAGMENT */))
3082
+ ])
3083
+ ]))
3084
+ : _createCommentVNode("v-if", true),
3085
+ _createElementVNode("section", { class: "selector-section" }, [
3086
+ _createElementVNode("div", { class: "selector-header" }, [
3087
+ _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('kilocode.configPreview.title')), 1 /* TEXT */)
3088
+ ]),
3089
+ _createElementVNode("textarea", {
3090
+ class: "template-textarea",
3091
+ value: _ctx.kilocodeContent,
3092
+ spellcheck: "false",
3093
+ readonly: "",
3094
+ "aria-readonly": "true"
3095
+ }, null, 8 /* PROPS */, ["value"]),
3096
+ _createElementVNode("div", { class: "config-template-hint" }, _toDisplayString(_ctx.t('kilocode.configPreview.hint')), 1 /* TEXT */)
3097
+ ]),
3098
+ (!_ctx.isToolConfigWriteAllowed('kilocode'))
3099
+ ? (_openBlock(), _createElementBlock("div", {
3100
+ key: 1,
3101
+ class: "tool-config-write-overlay"
3102
+ }, [
3103
+ _createElementVNode("div", { class: "tool-config-write-overlay-card" }, [
3104
+ _createElementVNode("div", { class: "tool-config-write-overlay-title" }, _toDisplayString(_ctx.t('toolConfig.kilocode.lockedTitle')), 1 /* TEXT */),
3105
+ _createElementVNode("p", null, _toDisplayString(_ctx.t('toolConfig.kilocode.lockedDesc')), 1 /* TEXT */),
3106
+ _createElementVNode("button", {
3107
+ type: "button",
3108
+ class: "btn-tool",
3109
+ onClick: $event => (_ctx.setToolConfigPermission('kilocode', true)),
3110
+ disabled: _ctx.toolConfigPermissionSaving.kilocode
3111
+ }, _toDisplayString(_ctx.t('toolConfig.enableWrite')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
3112
+ ])
3113
+ ]))
3114
+ : _createCommentVNode("v-if", true)
3115
+ ])
3116
+ ], 2 /* CLASS */)
3117
+ ], 8 /* PROPS */, ["aria-labelledby"]), [
3118
+ [_vShow, _ctx.mainTab === 'config' && _ctx.configMode === 'kilocode']
3119
+ ]),
2803
3120
  _createCommentVNode(" 会话浏览模式 "),
2804
3121
  _withDirectives(_createElementVNode("div", {
2805
3122
  class: "mode-content",
@@ -5148,8 +5465,7 @@ return function render(_ctx, _cache) {
5148
5465
  }, [
5149
5466
  _createElementVNode("div", { class: "selector-section" }, [
5150
5467
  _createElementVNode("div", { class: "selector-header" }, [
5151
- _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('docs.title')), 1 /* TEXT */),
5152
- _createElementVNode("div", { class: "skills-panel-note docs-section-note" }, _toDisplayString(_ctx.t('docs.subtitle')), 1 /* TEXT */)
5468
+ _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('docs.title')), 1 /* TEXT */)
5153
5469
  ]),
5154
5470
  _createElementVNode("div", { class: "docs-toolbar-grid" }, [
5155
5471
  _createElementVNode("div", { class: "docs-toolbar-card" }, [
@@ -5248,8 +5564,7 @@ return function render(_ctx, _cache) {
5248
5564
  ]),
5249
5565
  _createElementVNode("div", { class: "selector-section" }, [
5250
5566
  _createElementVNode("div", { class: "selector-header" }, [
5251
- _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('docs.section.commands')), 1 /* TEXT */),
5252
- _createElementVNode("div", { class: "skills-panel-note docs-section-note" }, _toDisplayString(_ctx.t('docs.section.commandsNote')), 1 /* TEXT */)
5567
+ _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('docs.section.commands')), 1 /* TEXT */)
5253
5568
  ]),
5254
5569
  _createElementVNode("div", { class: "install-list docs-install-list" }, [
5255
5570
  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.installTargetCards, (target) => {
@@ -5309,8 +5624,7 @@ return function render(_ctx, _cache) {
5309
5624
  ]),
5310
5625
  _createElementVNode("div", { class: "selector-section" }, [
5311
5626
  _createElementVNode("div", { class: "selector-header" }, [
5312
- _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('docs.section.faq')), 1 /* TEXT */),
5313
- _createElementVNode("div", { class: "skills-panel-note docs-section-note" }, _toDisplayString(_ctx.t('docs.section.faqNote')), 1 /* TEXT */)
5627
+ _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('docs.section.faq')), 1 /* TEXT */)
5314
5628
  ]),
5315
5629
  _createElementVNode("div", { class: "docs-help-grid" }, [
5316
5630
  _createElementVNode("div", { class: "docs-note-card" }, [
@@ -5320,13 +5634,6 @@ return function render(_ctx, _cache) {
5320
5634
  return (_openBlock(), _createElementBlock("li", { key: tip }, _toDisplayString(tip), 1 /* TEXT */))
5321
5635
  }), 128 /* KEYED_FRAGMENT */))
5322
5636
  ])
5323
- ]),
5324
- _createElementVNode("div", { class: "docs-note-card" }, [
5325
- _createElementVNode("div", { class: "docs-note-title" }, _toDisplayString(_ctx.t('common.rules')), 1 /* TEXT */),
5326
- _createElementVNode("ul", { class: "docs-static-list" }, [
5327
- _createElementVNode("li", null, _toDisplayString(_ctx.t('docs.rule.1')), 1 /* TEXT */),
5328
- _createElementVNode("li", null, _toDisplayString(_ctx.t('docs.rule.2')), 1 /* TEXT */)
5329
- ])
5330
5637
  ])
5331
5638
  ])
5332
5639
  ])