codexmate 0.0.45 → 0.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -7
- package/README.zh.md +20 -7
- package/cli.js +522 -4
- package/package.json +2 -1
- package/web-ui/app.js +27 -4
- package/web-ui/index.html +1 -0
- package/web-ui/modules/app.constants.mjs +13 -0
- package/web-ui/modules/app.methods.codex-config.mjs +7 -3
- package/web-ui/modules/app.methods.index.mjs +6 -0
- package/web-ui/modules/app.methods.opencode-config.mjs +228 -0
- package/web-ui/modules/app.methods.startup-claude.mjs +6 -4
- package/web-ui/modules/app.methods.tool-config-permissions.mjs +3 -2
- package/web-ui/modules/config-mode.computed.mjs +17 -1
- package/web-ui/modules/i18n/locales/en.mjs +47 -0
- package/web-ui/modules/i18n/locales/ja.mjs +47 -0
- package/web-ui/modules/i18n/locales/vi.mjs +47 -0
- package/web-ui/modules/i18n/locales/zh-tw.mjs +1274 -0
- package/web-ui/modules/i18n/locales/zh.mjs +47 -0
- package/web-ui/modules/i18n.dict.mjs +2 -0
- package/web-ui/modules/i18n.mjs +3 -2
- package/web-ui/partials/index/layout-header.html +30 -2
- package/web-ui/partials/index/modal-config-template-agents.html +1 -1
- package/web-ui/partials/index/panel-config-claude.html +6 -6
- package/web-ui/partials/index/panel-config-codex.html +6 -6
- package/web-ui/partials/index/panel-config-opencode.html +166 -0
- package/web-ui/res/web-ui-render.precompiled.js +468 -56
- package/web-ui/styles/controls-forms.css +62 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
window.__CODEXMATE_WEB_UI_RENDER__ = (() => {
|
|
2
|
-
const { toDisplayString: _toDisplayString, openBlock: _openBlock, createElementBlock: _createElementBlock, createCommentVNode: _createCommentVNode, createTextVNode: _createTextVNode, createElementVNode: _createElementVNode, normalizeClass: _normalizeClass, Fragment: _Fragment, renderList: _renderList, vShow: _vShow, withDirectives: _withDirectives, vModelSelect: _vModelSelect, vModelText: _vModelText, withKeys: _withKeys, withModifiers: _withModifiers,
|
|
2
|
+
const { toDisplayString: _toDisplayString, openBlock: _openBlock, createElementBlock: _createElementBlock, createCommentVNode: _createCommentVNode, createTextVNode: _createTextVNode, createElementVNode: _createElementVNode, normalizeClass: _normalizeClass, Fragment: _Fragment, renderList: _renderList, vShow: _vShow, withDirectives: _withDirectives, vModelSelect: _vModelSelect, vModelText: _vModelText, withKeys: _withKeys, withModifiers: _withModifiers, vModelDynamic: _vModelDynamic, vModelCheckbox: _vModelCheckbox, isMemoSame: _isMemoSame, withMemo: _withMemo, normalizeStyle: _normalizeStyle } = Vue
|
|
3
3
|
|
|
4
4
|
return function render(_ctx, _cache) {
|
|
5
5
|
return (_openBlock(), _createElementBlock(_Fragment, null, [
|
|
@@ -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' : 'panel-config-provider'),
|
|
74
|
+
"aria-controls": _ctx.configMode === 'claude' ? 'panel-config-claude' : (_ctx.configMode === 'openclaw' ? 'panel-config-openclaw' : (_ctx.configMode === 'opencode' ? 'panel-config-opencode' : '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"]),
|
|
@@ -193,15 +193,7 @@ return function render(_ctx, _cache) {
|
|
|
193
193
|
alt: "Codex Mate logo"
|
|
194
194
|
}),
|
|
195
195
|
_createElementVNode("div", { class: "brand-copy" }, [
|
|
196
|
-
_createElementVNode("div", { class: "brand-kicker" },
|
|
197
|
-
_createTextVNode("Codex Mate"),
|
|
198
|
-
(_ctx.appVersion)
|
|
199
|
-
? (_openBlock(), _createElementBlock("span", {
|
|
200
|
-
key: 0,
|
|
201
|
-
class: "brand-version"
|
|
202
|
-
}, " v" + _toDisplayString(_ctx.appVersion), 1 /* TEXT */))
|
|
203
|
-
: _createCommentVNode("v-if", true)
|
|
204
|
-
])
|
|
196
|
+
_createElementVNode("div", { class: "brand-kicker" }, "Codex Mate")
|
|
205
197
|
])
|
|
206
198
|
]),
|
|
207
199
|
(_ctx.isAppVersionStatusVisible())
|
|
@@ -319,6 +311,23 @@ return function render(_ctx, _cache) {
|
|
|
319
311
|
? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('common.current', { value: _ctx.currentOpenclawConfig })), 1 /* TEXT */))
|
|
320
312
|
: _createCommentVNode("v-if", true)
|
|
321
313
|
])
|
|
314
|
+
], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]),
|
|
315
|
+
_createElementVNode("button", {
|
|
316
|
+
id: "side-tab-config-opencode",
|
|
317
|
+
"data-main-tab": "config",
|
|
318
|
+
"data-config-mode": "opencode",
|
|
319
|
+
"aria-current": _ctx.mainTab === 'config' && _ctx.configMode === 'opencode' ? 'page' : null,
|
|
320
|
+
class: _normalizeClass(['side-item', { active: _ctx.isConfigModeNavActive('opencode') }]),
|
|
321
|
+
onPointerdown: $event => (_ctx.onConfigTabPointerDown('opencode', $event)),
|
|
322
|
+
onClick: $event => (_ctx.onConfigTabClick('opencode', $event))
|
|
323
|
+
}, [
|
|
324
|
+
_createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.opencode')), 1 /* TEXT */),
|
|
325
|
+
_createElementVNode("div", { class: "side-item-meta" }, [
|
|
326
|
+
_createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.opencode.meta')), 1 /* TEXT */),
|
|
327
|
+
(_ctx.opencodeModel)
|
|
328
|
+
? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('common.current', { value: _ctx.opencodeModel })), 1 /* TEXT */))
|
|
329
|
+
: _createCommentVNode("v-if", true)
|
|
330
|
+
])
|
|
322
331
|
], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"])
|
|
323
332
|
], 8 /* PROPS */, ["aria-label"]),
|
|
324
333
|
_createElementVNode("div", {
|
|
@@ -570,13 +579,28 @@ return function render(_ctx, _cache) {
|
|
|
570
579
|
_createElementVNode("span", { class: "value" }, _toDisplayString(_ctx.openclawWorkspaceFileName || _ctx.t('common.notSelected')), 1 /* TEXT */)
|
|
571
580
|
])
|
|
572
581
|
], 64 /* STABLE_FRAGMENT */))
|
|
573
|
-
: (
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
582
|
+
: (_ctx.configMode === 'opencode')
|
|
583
|
+
? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [
|
|
584
|
+
_createElementVNode("div", { class: "status-chip" }, [
|
|
585
|
+
_createElementVNode("span", { class: "label" }, _toDisplayString(_ctx.t('status.opencodeProvider')), 1 /* TEXT */),
|
|
586
|
+
_createElementVNode("span", { class: "value" }, _toDisplayString(_ctx.opencodeProvider || _ctx.t('common.notSelected')), 1 /* TEXT */)
|
|
587
|
+
]),
|
|
588
|
+
_createElementVNode("div", { class: "status-chip" }, [
|
|
589
|
+
_createElementVNode("span", { class: "label" }, _toDisplayString(_ctx.t('status.opencodeModel')), 1 /* TEXT */),
|
|
590
|
+
_createElementVNode("span", { class: "value" }, _toDisplayString(_ctx.opencodeModel || _ctx.t('common.notSelected')), 1 /* TEXT */)
|
|
591
|
+
]),
|
|
592
|
+
_createElementVNode("div", { class: "status-chip" }, [
|
|
593
|
+
_createElementVNode("span", { class: "label" }, _toDisplayString(_ctx.t('status.opencodeConfig')), 1 /* TEXT */),
|
|
594
|
+
_createElementVNode("span", { class: "value" }, _toDisplayString(_ctx.opencodeConfigPath || _ctx.t('common.notSelected')), 1 /* TEXT */)
|
|
595
|
+
])
|
|
596
|
+
], 64 /* STABLE_FRAGMENT */))
|
|
597
|
+
: (_openBlock(), _createElementBlock("div", {
|
|
598
|
+
key: 4,
|
|
599
|
+
class: "status-chip"
|
|
600
|
+
}, [
|
|
601
|
+
_createElementVNode("span", { class: "label" }, _toDisplayString(_ctx.t('status.configMode')), 1 /* TEXT */),
|
|
602
|
+
_createElementVNode("span", { class: "value" }, _toDisplayString(_ctx.t('common.notSelected')), 1 /* TEXT */)
|
|
603
|
+
]))
|
|
580
604
|
]))
|
|
581
605
|
: (!_ctx.sessionStandalone && _ctx.mainTab === 'sessions')
|
|
582
606
|
? (_openBlock(), _createElementBlock("div", {
|
|
@@ -1569,25 +1593,25 @@ return function render(_ctx, _cache) {
|
|
|
1569
1593
|
], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["onClick", "onKeydown", "tabindex", "aria-current"]))
|
|
1570
1594
|
}), 128 /* KEYED_FRAGMENT */))
|
|
1571
1595
|
]))
|
|
1596
|
+
: _createCommentVNode("v-if", true),
|
|
1597
|
+
(!_ctx.isToolConfigWriteAllowed('codex'))
|
|
1598
|
+
? (_openBlock(), _createElementBlock("div", {
|
|
1599
|
+
key: 4,
|
|
1600
|
+
class: "tool-config-write-overlay"
|
|
1601
|
+
}, [
|
|
1602
|
+
_createElementVNode("div", { class: "tool-config-write-overlay-card" }, [
|
|
1603
|
+
_createElementVNode("div", { class: "tool-config-write-overlay-title" }, _toDisplayString(_ctx.t('toolConfig.codex.lockedTitle')), 1 /* TEXT */),
|
|
1604
|
+
_createElementVNode("p", null, _toDisplayString(_ctx.t('toolConfig.codex.lockedDesc')), 1 /* TEXT */),
|
|
1605
|
+
_createElementVNode("button", {
|
|
1606
|
+
type: "button",
|
|
1607
|
+
class: "btn-tool",
|
|
1608
|
+
onClick: $event => (_ctx.setToolConfigPermission('codex', true)),
|
|
1609
|
+
disabled: _ctx.toolConfigPermissionSaving.codex
|
|
1610
|
+
}, _toDisplayString(_ctx.t('toolConfig.enableWrite')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
1611
|
+
])
|
|
1612
|
+
]))
|
|
1572
1613
|
: _createCommentVNode("v-if", true)
|
|
1573
|
-
])
|
|
1574
|
-
(!_ctx.isToolConfigWriteAllowed('codex'))
|
|
1575
|
-
? (_openBlock(), _createElementBlock("div", {
|
|
1576
|
-
key: 0,
|
|
1577
|
-
class: "tool-config-write-overlay"
|
|
1578
|
-
}, [
|
|
1579
|
-
_createElementVNode("div", { class: "tool-config-write-overlay-card" }, [
|
|
1580
|
-
_createElementVNode("div", { class: "tool-config-write-overlay-title" }, _toDisplayString(_ctx.t('toolConfig.codex.lockedTitle')), 1 /* TEXT */),
|
|
1581
|
-
_createElementVNode("p", null, _toDisplayString(_ctx.t('toolConfig.codex.lockedDesc')), 1 /* TEXT */),
|
|
1582
|
-
_createElementVNode("button", {
|
|
1583
|
-
type: "button",
|
|
1584
|
-
class: "btn-tool",
|
|
1585
|
-
onClick: $event => (_ctx.setToolConfigPermission('codex', true)),
|
|
1586
|
-
disabled: _ctx.toolConfigPermissionSaving.codex
|
|
1587
|
-
}, _toDisplayString(_ctx.t('toolConfig.enableWrite')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
1588
|
-
])
|
|
1589
|
-
]))
|
|
1590
|
-
: _createCommentVNode("v-if", true)
|
|
1614
|
+
])
|
|
1591
1615
|
], 2 /* CLASS */)
|
|
1592
1616
|
], 64 /* STABLE_FRAGMENT */))
|
|
1593
1617
|
], 8 /* PROPS */, ["aria-labelledby"]), [
|
|
@@ -2097,25 +2121,25 @@ return function render(_ctx, _cache) {
|
|
|
2097
2121
|
])
|
|
2098
2122
|
], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["onClick", "onKeydown", "aria-current"]))
|
|
2099
2123
|
}), 128 /* KEYED_FRAGMENT */))
|
|
2100
|
-
])
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
])
|
|
2117
|
-
|
|
2118
|
-
|
|
2124
|
+
]),
|
|
2125
|
+
(!_ctx.isToolConfigWriteAllowed('claude'))
|
|
2126
|
+
? (_openBlock(), _createElementBlock("div", {
|
|
2127
|
+
key: 1,
|
|
2128
|
+
class: "tool-config-write-overlay"
|
|
2129
|
+
}, [
|
|
2130
|
+
_createElementVNode("div", { class: "tool-config-write-overlay-card" }, [
|
|
2131
|
+
_createElementVNode("div", { class: "tool-config-write-overlay-title" }, _toDisplayString(_ctx.t('toolConfig.claude.lockedTitle')), 1 /* TEXT */),
|
|
2132
|
+
_createElementVNode("p", null, _toDisplayString(_ctx.t('toolConfig.claude.lockedDesc')), 1 /* TEXT */),
|
|
2133
|
+
_createElementVNode("button", {
|
|
2134
|
+
type: "button",
|
|
2135
|
+
class: "btn-tool",
|
|
2136
|
+
onClick: $event => (_ctx.setToolConfigPermission('claude', true)),
|
|
2137
|
+
disabled: _ctx.toolConfigPermissionSaving.claude
|
|
2138
|
+
}, _toDisplayString(_ctx.t('toolConfig.enableWrite')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
2139
|
+
])
|
|
2140
|
+
]))
|
|
2141
|
+
: _createCommentVNode("v-if", true)
|
|
2142
|
+
])
|
|
2119
2143
|
], 2 /* CLASS */)
|
|
2120
2144
|
], 64 /* STABLE_FRAGMENT */))
|
|
2121
2145
|
], 8 /* PROPS */, ["aria-labelledby"]), [
|
|
@@ -2280,6 +2304,394 @@ return function render(_ctx, _cache) {
|
|
|
2280
2304
|
], 8 /* PROPS */, ["aria-labelledby"]), [
|
|
2281
2305
|
[_vShow, _ctx.mainTab === 'config' && _ctx.configMode === 'openclaw']
|
|
2282
2306
|
]),
|
|
2307
|
+
_createCommentVNode(" OpenCode 配置 "),
|
|
2308
|
+
_withDirectives(_createElementVNode("div", {
|
|
2309
|
+
class: "mode-content mode-cards",
|
|
2310
|
+
id: "panel-config-opencode",
|
|
2311
|
+
role: "tabpanel",
|
|
2312
|
+
"aria-labelledby": _ctx.forceCompactLayout ? 'tab-config' : 'side-tab-config-opencode'
|
|
2313
|
+
}, [
|
|
2314
|
+
(_ctx.forceCompactLayout && !_ctx.sessionStandalone)
|
|
2315
|
+
? (_openBlock(), _createElementBlock("div", {
|
|
2316
|
+
key: 0,
|
|
2317
|
+
class: "segmented-control"
|
|
2318
|
+
}, [
|
|
2319
|
+
_createElementVNode("button", {
|
|
2320
|
+
type: "button",
|
|
2321
|
+
class: _normalizeClass(['segment', { active: _ctx.configMode === 'codex' }]),
|
|
2322
|
+
onClick: $event => (_ctx.switchConfigMode('codex'))
|
|
2323
|
+
}, _toDisplayString(_ctx.t('tab.config.codex')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]),
|
|
2324
|
+
_createElementVNode("button", {
|
|
2325
|
+
type: "button",
|
|
2326
|
+
class: _normalizeClass(['segment', { active: _ctx.configMode === 'claude' }]),
|
|
2327
|
+
onClick: $event => (_ctx.switchConfigMode('claude'))
|
|
2328
|
+
}, _toDisplayString(_ctx.t('tab.config.claude')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]),
|
|
2329
|
+
_createElementVNode("button", {
|
|
2330
|
+
type: "button",
|
|
2331
|
+
class: _normalizeClass(['segment', { active: _ctx.configMode === 'openclaw' }]),
|
|
2332
|
+
onClick: $event => (_ctx.switchConfigMode('openclaw'))
|
|
2333
|
+
}, _toDisplayString(_ctx.t('tab.config.openclaw')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]),
|
|
2334
|
+
_createElementVNode("button", {
|
|
2335
|
+
type: "button",
|
|
2336
|
+
class: _normalizeClass(['segment', { active: _ctx.configMode === 'opencode' }]),
|
|
2337
|
+
onClick: $event => (_ctx.switchConfigMode('opencode'))
|
|
2338
|
+
}, _toDisplayString(_ctx.t('tab.config.opencode')), 11 /* TEXT, CLASS, PROPS */, ["onClick"])
|
|
2339
|
+
]))
|
|
2340
|
+
: _createCommentVNode("v-if", true),
|
|
2341
|
+
_createElementVNode("section", {
|
|
2342
|
+
class: "tool-config-write-card",
|
|
2343
|
+
"aria-label": _ctx.t('opencode.writeAria')
|
|
2344
|
+
}, [
|
|
2345
|
+
_createElementVNode("div", { class: "tool-config-write-copy" }, [
|
|
2346
|
+
_createElementVNode("div", { class: "tool-config-write-title" }, _toDisplayString(_ctx.t('toolConfig.opencode.title')), 1 /* TEXT */),
|
|
2347
|
+
_createElementVNode("p", { class: "tool-config-write-desc" }, _toDisplayString(_ctx.t('toolConfig.opencode.desc')), 1 /* TEXT */)
|
|
2348
|
+
]),
|
|
2349
|
+
_createElementVNode("label", { class: "settings-toggle-row tool-config-write-toggle" }, [
|
|
2350
|
+
_createElementVNode("input", {
|
|
2351
|
+
type: "checkbox",
|
|
2352
|
+
autocomplete: "off",
|
|
2353
|
+
checked: _ctx.isToolConfigWriteAllowed('opencode'),
|
|
2354
|
+
disabled: _ctx.toolConfigPermissionSaving.opencode,
|
|
2355
|
+
onChange: $event => (_ctx.setToolConfigPermission('opencode', $event.target.checked))
|
|
2356
|
+
}, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "disabled", "onChange"]),
|
|
2357
|
+
_createElementVNode("span", { class: "toggle-track" }, [
|
|
2358
|
+
_createElementVNode("span", { class: "toggle-thumb" })
|
|
2359
|
+
]),
|
|
2360
|
+
_createElementVNode("span", null, _toDisplayString(_ctx.toolConfigPermissionStatusLabel('opencode')), 1 /* TEXT */)
|
|
2361
|
+
])
|
|
2362
|
+
], 8 /* PROPS */, ["aria-label"]),
|
|
2363
|
+
_createElementVNode("div", {
|
|
2364
|
+
class: _normalizeClass(["tool-config-write-scope", { locked: !_ctx.isToolConfigWriteAllowed('opencode') }])
|
|
2365
|
+
}, [
|
|
2366
|
+
_createElementVNode("div", { class: "tool-config-write-body" }, [
|
|
2367
|
+
_createElementVNode("section", { class: "selector-section" }, [
|
|
2368
|
+
_createElementVNode("div", { class: "selector-header" }, [
|
|
2369
|
+
_createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('opencode.providerModel.title')), 1 /* TEXT */),
|
|
2370
|
+
_createElementVNode("div", { class: "selector-actions opencode-provider-actions" }, [
|
|
2371
|
+
_createElementVNode("button", {
|
|
2372
|
+
type: "button",
|
|
2373
|
+
class: "btn-tool btn-tool-compact",
|
|
2374
|
+
onClick: $event => (_ctx.loadOpencodeConfig({ toast: true })),
|
|
2375
|
+
disabled: _ctx.opencodeLoading
|
|
2376
|
+
}, _toDisplayString(_ctx.opencodeLoading ? _ctx.t('common.refreshing') : _ctx.t('common.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
|
|
2377
|
+
_createElementVNode("button", {
|
|
2378
|
+
type: "button",
|
|
2379
|
+
class: "btn-tool btn-tool-compact",
|
|
2380
|
+
onClick: _ctx.applyOpencodeSelection,
|
|
2381
|
+
disabled: _ctx.opencodeApplying || _ctx.opencodeLoading || !_ctx.isToolConfigWriteAllowed('opencode')
|
|
2382
|
+
}, _toDisplayString(_ctx.opencodeApplying ? _ctx.t('common.applying') : _ctx.t('opencode.applySelection')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
2383
|
+
])
|
|
2384
|
+
]),
|
|
2385
|
+
_createElementVNode("div", { class: "config-template-hint" }, _toDisplayString(_ctx.t('opencode.targetFile', { path: _ctx.opencodeConfigPath || '~/.config/opencode/opencode.jsonc', status: _ctx.opencodeConfigExists ? _ctx.t('common.exists') : _ctx.t('common.notExistsWillCreateOnSave') })), 1 /* TEXT */),
|
|
2386
|
+
_createElementVNode("div", { class: "config-template-hint" }, _toDisplayString(_ctx.t('opencode.providerStoreFile', { path: _ctx.opencodeProviderStorePath || '~/.codexmate/opencode/providers.json' })), 1 /* TEXT */),
|
|
2387
|
+
_createElementVNode("div", { class: "codex-config-grid" }, [
|
|
2388
|
+
_createElementVNode("div", { class: "form-group codex-config-field" }, [
|
|
2389
|
+
_createElementVNode("label", {
|
|
2390
|
+
class: "form-label",
|
|
2391
|
+
for: "opencode-provider"
|
|
2392
|
+
}, _toDisplayString(_ctx.t('field.provider')), 1 /* TEXT */),
|
|
2393
|
+
_withDirectives(_createElementVNode("input", {
|
|
2394
|
+
id: "opencode-provider",
|
|
2395
|
+
class: "form-input",
|
|
2396
|
+
"onUpdate:modelValue": $event => ((_ctx.opencodeProvider) = $event),
|
|
2397
|
+
list: "opencode-provider-options",
|
|
2398
|
+
autocomplete: "off",
|
|
2399
|
+
spellcheck: "false",
|
|
2400
|
+
onChange: $event => (_ctx.fillOpencodeProvider(_ctx.opencodeProvider)),
|
|
2401
|
+
onBlur: $event => (_ctx.fillOpencodeProvider(_ctx.opencodeProvider)),
|
|
2402
|
+
placeholder: "anthropic / openai / gemini"
|
|
2403
|
+
}, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "onChange", "onBlur"]), [
|
|
2404
|
+
[_vModelText, _ctx.opencodeProvider]
|
|
2405
|
+
]),
|
|
2406
|
+
_createElementVNode("datalist", { id: "opencode-provider-options" }, [
|
|
2407
|
+
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.opencodeProviderCatalog(), (provider) => {
|
|
2408
|
+
return (_openBlock(), _createElementBlock("option", {
|
|
2409
|
+
key: provider,
|
|
2410
|
+
value: provider
|
|
2411
|
+
}, null, 8 /* PROPS */, ["value"]))
|
|
2412
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
2413
|
+
])
|
|
2414
|
+
]),
|
|
2415
|
+
_createElementVNode("div", { class: "form-group codex-config-field" }, [
|
|
2416
|
+
_createElementVNode("label", {
|
|
2417
|
+
class: "form-label",
|
|
2418
|
+
for: "opencode-model"
|
|
2419
|
+
}, _toDisplayString(_ctx.t('field.model')), 1 /* TEXT */),
|
|
2420
|
+
_withDirectives(_createElementVNode("input", {
|
|
2421
|
+
id: "opencode-model",
|
|
2422
|
+
class: "form-input",
|
|
2423
|
+
"onUpdate:modelValue": $event => ((_ctx.opencodeModel) = $event),
|
|
2424
|
+
list: "opencode-model-options",
|
|
2425
|
+
autocomplete: "off",
|
|
2426
|
+
spellcheck: "false",
|
|
2427
|
+
placeholder: "claude-3.7-sonnet / gpt-4.1"
|
|
2428
|
+
}, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
|
|
2429
|
+
[_vModelText, _ctx.opencodeModel]
|
|
2430
|
+
]),
|
|
2431
|
+
_createElementVNode("datalist", { id: "opencode-model-options" }, [
|
|
2432
|
+
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.opencodeModelCatalogForProvider(_ctx.opencodeProvider), (model) => {
|
|
2433
|
+
return (_openBlock(), _createElementBlock("option", {
|
|
2434
|
+
key: model,
|
|
2435
|
+
value: model
|
|
2436
|
+
}, null, 8 /* PROPS */, ["value"]))
|
|
2437
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
2438
|
+
])
|
|
2439
|
+
]),
|
|
2440
|
+
_createElementVNode("div", { class: "form-group codex-config-field" }, [
|
|
2441
|
+
_createElementVNode("label", {
|
|
2442
|
+
class: "form-label",
|
|
2443
|
+
for: "opencode-agent"
|
|
2444
|
+
}, _toDisplayString(_ctx.t('opencode.field.agent')), 1 /* TEXT */),
|
|
2445
|
+
_withDirectives(_createElementVNode("input", {
|
|
2446
|
+
id: "opencode-agent",
|
|
2447
|
+
class: "form-input",
|
|
2448
|
+
"onUpdate:modelValue": $event => ((_ctx.opencodeAgent) = $event),
|
|
2449
|
+
list: "opencode-agent-options",
|
|
2450
|
+
autocomplete: "off",
|
|
2451
|
+
spellcheck: "false",
|
|
2452
|
+
placeholder: "build"
|
|
2453
|
+
}, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
|
|
2454
|
+
[_vModelText, _ctx.opencodeAgent]
|
|
2455
|
+
]),
|
|
2456
|
+
_createElementVNode("datalist", { id: "opencode-agent-options" }, [
|
|
2457
|
+
_createElementVNode("option", { value: "build" }),
|
|
2458
|
+
_createElementVNode("option", { value: "plan" }),
|
|
2459
|
+
_createElementVNode("option", { value: "general" }),
|
|
2460
|
+
_createElementVNode("option", { value: "summary" }),
|
|
2461
|
+
_createElementVNode("option", { value: "compaction" }),
|
|
2462
|
+
_createElementVNode("option", { value: "title" }),
|
|
2463
|
+
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.opencodeAgents, (agent) => {
|
|
2464
|
+
return (_openBlock(), _createElementBlock("option", {
|
|
2465
|
+
key: agent.name,
|
|
2466
|
+
value: agent.name
|
|
2467
|
+
}, null, 8 /* PROPS */, ["value"]))
|
|
2468
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
2469
|
+
])
|
|
2470
|
+
]),
|
|
2471
|
+
_createElementVNode("div", { class: "form-group codex-config-field" }, [
|
|
2472
|
+
_createElementVNode("label", {
|
|
2473
|
+
class: "form-label",
|
|
2474
|
+
for: "opencode-api-key"
|
|
2475
|
+
}, _toDisplayString(_ctx.t('opencode.field.apiKeyKeep')), 1 /* TEXT */),
|
|
2476
|
+
_createElementVNode("div", { class: "input-with-toggle" }, [
|
|
2477
|
+
_withDirectives(_createElementVNode("input", {
|
|
2478
|
+
id: "opencode-api-key",
|
|
2479
|
+
class: "form-input",
|
|
2480
|
+
"onUpdate:modelValue": $event => ((_ctx.opencodeApiKey) = $event),
|
|
2481
|
+
type: _ctx.opencodeShowKey ? 'text' : 'password',
|
|
2482
|
+
autocomplete: "off",
|
|
2483
|
+
spellcheck: "false",
|
|
2484
|
+
placeholder: "sk-..."
|
|
2485
|
+
}, null, 8 /* PROPS */, ["onUpdate:modelValue", "type"]), [
|
|
2486
|
+
[_vModelDynamic, _ctx.opencodeApiKey]
|
|
2487
|
+
]),
|
|
2488
|
+
_createElementVNode("button", {
|
|
2489
|
+
type: "button",
|
|
2490
|
+
class: "input-toggle-btn",
|
|
2491
|
+
onClick: $event => (_ctx.opencodeShowKey = !_ctx.opencodeShowKey),
|
|
2492
|
+
title: _ctx.opencodeShowKey ? _ctx.t('common.hide') : _ctx.t('common.show')
|
|
2493
|
+
}, _toDisplayString(_ctx.opencodeShowKey ? _ctx.t('common.hide') : _ctx.t('common.show')), 9 /* TEXT, PROPS */, ["onClick", "title"])
|
|
2494
|
+
])
|
|
2495
|
+
]),
|
|
2496
|
+
_createElementVNode("div", { class: "form-group codex-config-field" }, [
|
|
2497
|
+
_createElementVNode("label", {
|
|
2498
|
+
class: "form-label",
|
|
2499
|
+
for: "opencode-max-tokens"
|
|
2500
|
+
}, _toDisplayString(_ctx.t('opencode.field.maxTokens')), 1 /* TEXT */),
|
|
2501
|
+
_withDirectives(_createElementVNode("input", {
|
|
2502
|
+
id: "opencode-max-tokens",
|
|
2503
|
+
class: "form-input",
|
|
2504
|
+
"onUpdate:modelValue": $event => ((_ctx.opencodeMaxTokens) = $event),
|
|
2505
|
+
inputmode: "numeric",
|
|
2506
|
+
autocomplete: "off",
|
|
2507
|
+
placeholder: "5000"
|
|
2508
|
+
}, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
|
|
2509
|
+
[_vModelText, _ctx.opencodeMaxTokens]
|
|
2510
|
+
])
|
|
2511
|
+
]),
|
|
2512
|
+
_createElementVNode("div", { class: "form-group codex-config-field" }, [
|
|
2513
|
+
_createElementVNode("label", {
|
|
2514
|
+
class: "form-label",
|
|
2515
|
+
for: "opencode-reasoning-effort"
|
|
2516
|
+
}, _toDisplayString(_ctx.t('opencode.field.reasoningEffort')), 1 /* TEXT */),
|
|
2517
|
+
_withDirectives(_createElementVNode("select", {
|
|
2518
|
+
id: "opencode-reasoning-effort",
|
|
2519
|
+
class: "model-select",
|
|
2520
|
+
"onUpdate:modelValue": $event => ((_ctx.opencodeReasoningEffort) = $event)
|
|
2521
|
+
}, [
|
|
2522
|
+
_createElementVNode("option", { value: "" }, _toDisplayString(_ctx.t('opencode.option.keepUnchanged')), 1 /* TEXT */),
|
|
2523
|
+
_createElementVNode("option", { value: "low" }, _toDisplayString(_ctx.t('opencode.option.reasoningLow')), 1 /* TEXT */),
|
|
2524
|
+
_createElementVNode("option", { value: "medium" }, _toDisplayString(_ctx.t('opencode.option.reasoningMedium')), 1 /* TEXT */),
|
|
2525
|
+
_createElementVNode("option", { value: "high" }, _toDisplayString(_ctx.t('opencode.option.reasoningHigh')), 1 /* TEXT */)
|
|
2526
|
+
], 8 /* PROPS */, ["onUpdate:modelValue"]), [
|
|
2527
|
+
[_vModelSelect, _ctx.opencodeReasoningEffort]
|
|
2528
|
+
])
|
|
2529
|
+
])
|
|
2530
|
+
]),
|
|
2531
|
+
_createElementVNode("label", {
|
|
2532
|
+
class: "settings-toggle-row",
|
|
2533
|
+
style: {"margin-top":"12px"}
|
|
2534
|
+
}, [
|
|
2535
|
+
_withDirectives(_createElementVNode("input", {
|
|
2536
|
+
type: "checkbox",
|
|
2537
|
+
"onUpdate:modelValue": $event => ((_ctx.opencodeApplyToCoreAgents) = $event)
|
|
2538
|
+
}, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
|
|
2539
|
+
[_vModelCheckbox, _ctx.opencodeApplyToCoreAgents]
|
|
2540
|
+
]),
|
|
2541
|
+
_createElementVNode("span", { class: "toggle-track" }, [
|
|
2542
|
+
_createElementVNode("span", { class: "toggle-thumb" })
|
|
2543
|
+
]),
|
|
2544
|
+
_createElementVNode("span", null, _toDisplayString(_ctx.t('opencode.applyToCoreAgents')), 1 /* TEXT */)
|
|
2545
|
+
]),
|
|
2546
|
+
_createElementVNode("label", {
|
|
2547
|
+
class: "settings-toggle-row",
|
|
2548
|
+
style: {"margin-top":"8px"}
|
|
2549
|
+
}, [
|
|
2550
|
+
_withDirectives(_createElementVNode("input", {
|
|
2551
|
+
type: "checkbox",
|
|
2552
|
+
"onUpdate:modelValue": $event => ((_ctx.opencodeAutoCompact) = $event)
|
|
2553
|
+
}, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
|
|
2554
|
+
[_vModelCheckbox, _ctx.opencodeAutoCompact]
|
|
2555
|
+
]),
|
|
2556
|
+
_createElementVNode("span", { class: "toggle-track" }, [
|
|
2557
|
+
_createElementVNode("span", { class: "toggle-thumb" })
|
|
2558
|
+
]),
|
|
2559
|
+
_createElementVNode("span", null, _toDisplayString(_ctx.t('opencode.enableAutoCompaction')), 1 /* TEXT */)
|
|
2560
|
+
]),
|
|
2561
|
+
_createElementVNode("label", {
|
|
2562
|
+
class: "settings-toggle-row",
|
|
2563
|
+
style: {"margin-top":"8px"}
|
|
2564
|
+
}, [
|
|
2565
|
+
_withDirectives(_createElementVNode("input", {
|
|
2566
|
+
type: "checkbox",
|
|
2567
|
+
"onUpdate:modelValue": $event => ((_ctx.opencodeProviderDisabled) = $event)
|
|
2568
|
+
}, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
|
|
2569
|
+
[_vModelCheckbox, _ctx.opencodeProviderDisabled]
|
|
2570
|
+
]),
|
|
2571
|
+
_createElementVNode("span", { class: "toggle-track" }, [
|
|
2572
|
+
_createElementVNode("span", { class: "toggle-thumb" })
|
|
2573
|
+
]),
|
|
2574
|
+
_createElementVNode("span", null, _toDisplayString(_ctx.t('opencode.disableProvider')), 1 /* TEXT */)
|
|
2575
|
+
])
|
|
2576
|
+
]),
|
|
2577
|
+
_createElementVNode("section", { class: "selector-section" }, [
|
|
2578
|
+
_createElementVNode("div", { class: "selector-header" }, [
|
|
2579
|
+
_createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('opencode.configFile.title')), 1 /* TEXT */),
|
|
2580
|
+
_createElementVNode("div", { class: "selector-actions" }, [
|
|
2581
|
+
_createElementVNode("button", {
|
|
2582
|
+
type: "button",
|
|
2583
|
+
class: "btn-tool btn-tool-compact",
|
|
2584
|
+
onClick: $event => (_ctx.$refs.opencodeImportInput && _ctx.$refs.opencodeImportInput.click())
|
|
2585
|
+
}, _toDisplayString(_ctx.t('opencode.importParse')), 9 /* TEXT, PROPS */, ["onClick"]),
|
|
2586
|
+
_createElementVNode("button", {
|
|
2587
|
+
type: "button",
|
|
2588
|
+
class: "btn-tool btn-tool-compact",
|
|
2589
|
+
onClick: _ctx.saveOpencodeConfig,
|
|
2590
|
+
disabled: _ctx.opencodeSaving || _ctx.opencodeLoading || !_ctx.isToolConfigWriteAllowed('opencode')
|
|
2591
|
+
}, _toDisplayString(_ctx.opencodeSaving ? _ctx.t('common.saving') : _ctx.t('opencode.saveConfig')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
2592
|
+
])
|
|
2593
|
+
]),
|
|
2594
|
+
_createElementVNode("input", {
|
|
2595
|
+
ref: "opencodeImportInput",
|
|
2596
|
+
class: "sr-only",
|
|
2597
|
+
type: "file",
|
|
2598
|
+
accept: ".json,.jsonc,.opencode",
|
|
2599
|
+
onChange: _ctx.handleOpencodeImportChange
|
|
2600
|
+
}, null, 40 /* PROPS, NEED_HYDRATION */, ["onChange"]),
|
|
2601
|
+
(_ctx.opencodeImportFileName)
|
|
2602
|
+
? (_openBlock(), _createElementBlock("div", {
|
|
2603
|
+
key: 0,
|
|
2604
|
+
class: "config-template-hint"
|
|
2605
|
+
}, _toDisplayString(_ctx.t('opencode.parsedFile', { file: _ctx.opencodeImportFileName })), 1 /* TEXT */))
|
|
2606
|
+
: _createCommentVNode("v-if", true),
|
|
2607
|
+
(_ctx.opencodeError || _ctx.opencodeImportError)
|
|
2608
|
+
? (_openBlock(), _createElementBlock("div", {
|
|
2609
|
+
key: 1,
|
|
2610
|
+
class: "config-template-hint error-text"
|
|
2611
|
+
}, _toDisplayString(_ctx.opencodeError || _ctx.opencodeImportError), 1 /* TEXT */))
|
|
2612
|
+
: _createCommentVNode("v-if", true),
|
|
2613
|
+
_withDirectives(_createElementVNode("textarea", {
|
|
2614
|
+
class: "template-textarea",
|
|
2615
|
+
"onUpdate:modelValue": $event => ((_ctx.opencodeContent) = $event),
|
|
2616
|
+
spellcheck: "false",
|
|
2617
|
+
readonly: _ctx.opencodeSaving || _ctx.opencodeLoading,
|
|
2618
|
+
placeholder: _ctx.t('opencode.textarea.placeholder')
|
|
2619
|
+
}, null, 8 /* PROPS */, ["onUpdate:modelValue", "readonly", "placeholder"]), [
|
|
2620
|
+
[_vModelText, _ctx.opencodeContent]
|
|
2621
|
+
]),
|
|
2622
|
+
_createElementVNode("div", { class: "config-template-hint" }, _toDisplayString(_ctx.t('opencode.configFile.hint')), 1 /* TEXT */)
|
|
2623
|
+
]),
|
|
2624
|
+
(_ctx.opencodeProviders.length || _ctx.opencodeAgents.length)
|
|
2625
|
+
? (_openBlock(), _createElementBlock("section", {
|
|
2626
|
+
key: 0,
|
|
2627
|
+
class: "selector-section"
|
|
2628
|
+
}, [
|
|
2629
|
+
_createElementVNode("div", { class: "selector-header" }, [
|
|
2630
|
+
_createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('opencode.summary.title')), 1 /* TEXT */)
|
|
2631
|
+
]),
|
|
2632
|
+
_createElementVNode("div", { class: "card-list" }, [
|
|
2633
|
+
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.opencodeProviders, (provider) => {
|
|
2634
|
+
return (_openBlock(), _createElementBlock("div", {
|
|
2635
|
+
key: provider.name,
|
|
2636
|
+
class: "card"
|
|
2637
|
+
}, [
|
|
2638
|
+
_createElementVNode("div", { class: "card-leading" }, [
|
|
2639
|
+
_createElementVNode("div", { class: "card-icon" }, _toDisplayString(provider.name.charAt(0).toUpperCase()), 1 /* TEXT */),
|
|
2640
|
+
_createElementVNode("div", { class: "card-content" }, [
|
|
2641
|
+
_createElementVNode("div", { class: "card-title" }, _toDisplayString(provider.name), 1 /* TEXT */),
|
|
2642
|
+
_createElementVNode("div", { class: "card-subtitle" }, _toDisplayString(provider.hasKey ? provider.apiKey : _ctx.t('opencode.summary.noApiKey')), 1 /* TEXT */)
|
|
2643
|
+
])
|
|
2644
|
+
]),
|
|
2645
|
+
_createElementVNode("div", { class: "card-trailing" }, [
|
|
2646
|
+
_createElementVNode("span", {
|
|
2647
|
+
class: _normalizeClass(['pill', provider.disabled ? 'empty' : 'configured'])
|
|
2648
|
+
}, _toDisplayString(provider.disabled ? _ctx.t('common.disabled') : _ctx.t('common.enabled')), 3 /* TEXT, CLASS */),
|
|
2649
|
+
_createElementVNode("span", { class: "pill empty" }, _toDisplayString(provider.source === 'codexmate' ? _ctx.t('opencode.summary.sourceCodexMate') : _ctx.t('opencode.summary.sourceOpenCode')), 1 /* TEXT */)
|
|
2650
|
+
])
|
|
2651
|
+
]))
|
|
2652
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
2653
|
+
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.opencodeAgents, (agent) => {
|
|
2654
|
+
return (_openBlock(), _createElementBlock("div", {
|
|
2655
|
+
key: agent.name,
|
|
2656
|
+
class: "card"
|
|
2657
|
+
}, [
|
|
2658
|
+
_createElementVNode("div", { class: "card-leading" }, [
|
|
2659
|
+
_createElementVNode("div", { class: "card-icon" }, "A"),
|
|
2660
|
+
_createElementVNode("div", { class: "card-content" }, [
|
|
2661
|
+
_createElementVNode("div", { class: "card-title" }, _toDisplayString(agent.name), 1 /* TEXT */),
|
|
2662
|
+
_createElementVNode("div", { class: "card-subtitle" }, _toDisplayString(agent.model || _ctx.t('opencode.summary.noModel')), 1 /* TEXT */)
|
|
2663
|
+
])
|
|
2664
|
+
]),
|
|
2665
|
+
_createElementVNode("div", { class: "card-trailing" }, [
|
|
2666
|
+
_createElementVNode("span", { class: "pill configured" }, _toDisplayString(_ctx.t('opencode.summary.agentType')), 1 /* TEXT */)
|
|
2667
|
+
])
|
|
2668
|
+
]))
|
|
2669
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
2670
|
+
])
|
|
2671
|
+
]))
|
|
2672
|
+
: _createCommentVNode("v-if", true),
|
|
2673
|
+
(!_ctx.isToolConfigWriteAllowed('opencode'))
|
|
2674
|
+
? (_openBlock(), _createElementBlock("div", {
|
|
2675
|
+
key: 1,
|
|
2676
|
+
class: "tool-config-write-overlay"
|
|
2677
|
+
}, [
|
|
2678
|
+
_createElementVNode("div", { class: "tool-config-write-overlay-card" }, [
|
|
2679
|
+
_createElementVNode("div", { class: "tool-config-write-overlay-title" }, _toDisplayString(_ctx.t('toolConfig.opencode.lockedTitle')), 1 /* TEXT */),
|
|
2680
|
+
_createElementVNode("p", null, _toDisplayString(_ctx.t('toolConfig.opencode.lockedDesc')), 1 /* TEXT */),
|
|
2681
|
+
_createElementVNode("button", {
|
|
2682
|
+
type: "button",
|
|
2683
|
+
class: "btn-tool",
|
|
2684
|
+
onClick: $event => (_ctx.setToolConfigPermission('opencode', true)),
|
|
2685
|
+
disabled: _ctx.toolConfigPermissionSaving.opencode
|
|
2686
|
+
}, _toDisplayString(_ctx.t('toolConfig.enableWrite')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
2687
|
+
])
|
|
2688
|
+
]))
|
|
2689
|
+
: _createCommentVNode("v-if", true)
|
|
2690
|
+
])
|
|
2691
|
+
], 2 /* CLASS */)
|
|
2692
|
+
], 8 /* PROPS */, ["aria-labelledby"]), [
|
|
2693
|
+
[_vShow, _ctx.mainTab === 'config' && _ctx.configMode === 'opencode']
|
|
2694
|
+
]),
|
|
2283
2695
|
_createCommentVNode(" 会话浏览模式 "),
|
|
2284
2696
|
_withDirectives(_createElementVNode("div", {
|
|
2285
2697
|
class: "mode-content",
|
|
@@ -7382,7 +7794,7 @@ return function render(_ctx, _cache) {
|
|
|
7382
7794
|
}, [
|
|
7383
7795
|
_createElementVNode("div", { class: "agents-diff-header" }, [
|
|
7384
7796
|
_createElementVNode("div", { class: "agents-diff-title" }, [
|
|
7385
|
-
_createTextVNode(_toDisplayString(_ctx.t('diff.title.configTemplate')) + " ", 1 /* TEXT */),
|
|
7797
|
+
_createTextVNode(_toDisplayString(_ctx.configTemplateContext === 'claude' ? _ctx.t('diff.title.claudeSettings') : _ctx.t('diff.title.configTemplate')) + " ", 1 /* TEXT */),
|
|
7386
7798
|
(_ctx.configTemplateDiffLoading)
|
|
7387
7799
|
? (_openBlock(), _createElementBlock("span", {
|
|
7388
7800
|
key: 0,
|