codexmate 0.1.12 → 0.1.13

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.
@@ -368,6 +368,27 @@ return function render(_ctx, _cache) {
368
368
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.kilocode.meta')), 1 /* TEXT */)
369
369
  ])
370
370
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]))
371
+ : _createCommentVNode("v-if", true),
372
+ (_ctx.isConfigModeVisible('pi'))
373
+ ? (_openBlock(), _createElementBlock("button", {
374
+ key: 5,
375
+ id: "side-tab-config-pi",
376
+ "data-main-tab": "config",
377
+ "data-config-mode": "pi",
378
+ "aria-current": _ctx.mainTab === 'config' && _ctx.configMode === 'pi' ? 'page' : null,
379
+ class: _normalizeClass(['side-item', 'side-item-compact', { active: _ctx.isConfigModeNavActive('pi') }]),
380
+ onPointerdown: $event => (_ctx.onConfigTabPointerDown('pi', $event)),
381
+ onClick: $event => (_ctx.onConfigTabClick('pi', $event))
382
+ }, [
383
+ _createElementVNode("span", {
384
+ class: "side-item-icon",
385
+ "aria-hidden": "true"
386
+ }, "P"),
387
+ _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.pi')), 1 /* TEXT */),
388
+ _createElementVNode("div", { class: "side-item-meta" }, [
389
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.pi.meta')), 1 /* TEXT */)
390
+ ])
391
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]))
371
392
  : _createCommentVNode("v-if", true)
372
393
  ], 8 /* PROPS */, ["aria-label"]),
373
394
  _createElementVNode("div", {
@@ -3089,6 +3110,490 @@ return function render(_ctx, _cache) {
3089
3110
  ], 8 /* PROPS */, ["aria-labelledby"]), [
3090
3111
  [_vShow, _ctx.mainTab === 'config' && _ctx.configMode === 'kilocode']
3091
3112
  ]),
3113
+ _createCommentVNode(" Pi 配置 "),
3114
+ _withDirectives(_createElementVNode("div", {
3115
+ class: "mode-content mode-cards",
3116
+ id: "panel-config-pi",
3117
+ role: "tabpanel",
3118
+ "aria-labelledby": _ctx.forceCompactLayout ? 'tab-config' : 'side-tab-config-pi'
3119
+ }, [
3120
+ (_ctx.forceCompactLayout && !_ctx.sessionStandalone)
3121
+ ? (_openBlock(), _createElementBlock("div", {
3122
+ key: 0,
3123
+ class: "segmented-control"
3124
+ }, [
3125
+ (_ctx.isConfigModeVisible('codex'))
3126
+ ? (_openBlock(), _createElementBlock("button", {
3127
+ key: 0,
3128
+ type: "button",
3129
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'codex' }]),
3130
+ onClick: $event => (_ctx.switchConfigMode('codex'))
3131
+ }, _toDisplayString(_ctx.t('tab.config.codex')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
3132
+ : _createCommentVNode("v-if", true),
3133
+ (_ctx.isConfigModeVisible('claude'))
3134
+ ? (_openBlock(), _createElementBlock("button", {
3135
+ key: 1,
3136
+ type: "button",
3137
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'claude' }]),
3138
+ onClick: $event => (_ctx.switchConfigMode('claude'))
3139
+ }, _toDisplayString(_ctx.t('tab.config.claude')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
3140
+ : _createCommentVNode("v-if", true),
3141
+ (_ctx.isConfigModeVisible('openclaw'))
3142
+ ? (_openBlock(), _createElementBlock("button", {
3143
+ key: 2,
3144
+ type: "button",
3145
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'openclaw' }]),
3146
+ onClick: $event => (_ctx.switchConfigMode('openclaw'))
3147
+ }, _toDisplayString(_ctx.t('tab.config.openclaw')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
3148
+ : _createCommentVNode("v-if", true),
3149
+ (_ctx.isConfigModeVisible('opencode'))
3150
+ ? (_openBlock(), _createElementBlock("button", {
3151
+ key: 3,
3152
+ type: "button",
3153
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'opencode' }]),
3154
+ onClick: $event => (_ctx.switchConfigMode('opencode'))
3155
+ }, _toDisplayString(_ctx.t('tab.config.opencode')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
3156
+ : _createCommentVNode("v-if", true),
3157
+ (_ctx.isConfigModeVisible('kilocode'))
3158
+ ? (_openBlock(), _createElementBlock("button", {
3159
+ key: 4,
3160
+ type: "button",
3161
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'kilocode' }]),
3162
+ onClick: $event => (_ctx.switchConfigMode('kilocode'))
3163
+ }, _toDisplayString(_ctx.t('tab.config.kilocode')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
3164
+ : _createCommentVNode("v-if", true),
3165
+ (_ctx.isConfigModeVisible('pi'))
3166
+ ? (_openBlock(), _createElementBlock("button", {
3167
+ key: 5,
3168
+ type: "button",
3169
+ class: _normalizeClass(['segment', { active: _ctx.configMode === 'pi' }]),
3170
+ onClick: $event => (_ctx.switchConfigMode('pi'))
3171
+ }, _toDisplayString(_ctx.t('tab.config.pi')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
3172
+ : _createCommentVNode("v-if", true)
3173
+ ]))
3174
+ : _createCommentVNode("v-if", true),
3175
+ _createElementVNode("section", {
3176
+ class: "tool-config-write-card",
3177
+ "aria-label": _ctx.t('toolConfig.pi.title')
3178
+ }, [
3179
+ _createElementVNode("div", { class: "tool-config-write-copy" }, [
3180
+ _createElementVNode("div", { class: "tool-config-write-title" }, _toDisplayString(_ctx.t('toolConfig.pi.title')), 1 /* TEXT */),
3181
+ _createElementVNode("p", { class: "tool-config-write-desc" }, _toDisplayString(_ctx.t('toolConfig.pi.desc')), 1 /* TEXT */)
3182
+ ]),
3183
+ _createElementVNode("label", { class: "settings-toggle-row tool-config-write-toggle" }, [
3184
+ _createElementVNode("input", {
3185
+ type: "checkbox",
3186
+ autocomplete: "off",
3187
+ checked: _ctx.isToolConfigWriteAllowed('pi'),
3188
+ disabled: _ctx.toolConfigPermissionSaving.pi,
3189
+ onChange: $event => (_ctx.setToolConfigPermission('pi', $event.target.checked))
3190
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "disabled", "onChange"]),
3191
+ _createElementVNode("span", { class: "toggle-track" }, [
3192
+ _createElementVNode("span", { class: "toggle-thumb" })
3193
+ ]),
3194
+ _createElementVNode("span", null, _toDisplayString(_ctx.toolConfigPermissionStatusLabel('pi')), 1 /* TEXT */)
3195
+ ])
3196
+ ], 8 /* PROPS */, ["aria-label"]),
3197
+ _createElementVNode("div", {
3198
+ class: _normalizeClass(["tool-config-write-scope", { locked: !_ctx.isToolConfigWriteAllowed('pi') }])
3199
+ }, [
3200
+ _createElementVNode("div", { class: "tool-config-write-body" }, [
3201
+ _createElementVNode("section", { class: "selector-section" }, [
3202
+ _createElementVNode("div", { class: "selector-header" }, [
3203
+ _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('pi.providers.title')), 1 /* TEXT */),
3204
+ _createElementVNode("button", {
3205
+ type: "button",
3206
+ class: "btn-tool",
3207
+ onClick: _ctx.startAddPiProvider,
3208
+ disabled: !_ctx.isToolConfigWriteAllowed('pi') || _ctx.piSaving
3209
+ }, _toDisplayString(_ctx.t('pi.providers.add')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
3210
+ ]),
3211
+ _createElementVNode("div", { class: "config-template-hint" }, _toDisplayString(_ctx.t('pi.providers.targetFile', { path: '~/.pi/agent/models.json' })), 1 /* TEXT */),
3212
+ (_ctx.piProviderIds.length)
3213
+ ? (_openBlock(), _createElementBlock("div", {
3214
+ key: 0,
3215
+ class: "card-list"
3216
+ }, [
3217
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.piProviderIds, (providerId) => {
3218
+ return (_openBlock(), _createElementBlock("div", {
3219
+ key: providerId,
3220
+ class: "card",
3221
+ role: "button",
3222
+ tabindex: "0",
3223
+ onClick: $event => (_ctx.openEditPiProvider(providerId))
3224
+ }, [
3225
+ _createElementVNode("div", { class: "card-leading" }, [
3226
+ _createElementVNode("div", { class: "card-icon" }, _toDisplayString(_ctx.piProviderName(providerId).charAt(0).toUpperCase()), 1 /* TEXT */),
3227
+ _createElementVNode("div", { class: "card-content" }, [
3228
+ _createElementVNode("div", { class: "card-title" }, _toDisplayString(_ctx.piProviderName(providerId)), 1 /* TEXT */),
3229
+ _createElementVNode("div", { class: "card-subtitle" }, _toDisplayString(_ctx.piProviderSummary(providerId)), 1 /* TEXT */)
3230
+ ])
3231
+ ]),
3232
+ _createElementVNode("div", { class: "card-trailing" }, [
3233
+ (_ctx.piActiveProvider === providerId)
3234
+ ? (_openBlock(), _createElementBlock("span", {
3235
+ key: 0,
3236
+ class: "pill configured"
3237
+ }, _toDisplayString(_ctx.t('pi.providers.active')), 1 /* TEXT */))
3238
+ : (_openBlock(), _createElementBlock("button", {
3239
+ key: 1,
3240
+ type: "button",
3241
+ class: "btn-tool",
3242
+ onClick: _withModifiers($event => (_ctx.switchPiActiveProvider(providerId)), ["stop"]),
3243
+ disabled: !_ctx.isToolConfigWriteAllowed('pi') || _ctx.piSaving
3244
+ }, _toDisplayString(_ctx.t('pi.providers.setActive')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]))
3245
+ ])
3246
+ ], 8 /* PROPS */, ["onClick"]))
3247
+ }), 128 /* KEYED_FRAGMENT */))
3248
+ ]))
3249
+ : _createCommentVNode("v-if", true),
3250
+ (!_ctx.piProviderIds.length)
3251
+ ? (_openBlock(), _createElementBlock("div", {
3252
+ key: 1,
3253
+ class: "config-template-hint"
3254
+ }, _toDisplayString(_ctx.t('pi.providers.empty')), 1 /* TEXT */))
3255
+ : _createCommentVNode("v-if", true)
3256
+ ]),
3257
+ (_ctx.editingPiProvider)
3258
+ ? (_openBlock(), _createElementBlock("section", {
3259
+ key: 0,
3260
+ class: "selector-section"
3261
+ }, [
3262
+ _createElementVNode("div", { class: "selector-header" }, [
3263
+ _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('pi.providers.editorTitle')), 1 /* TEXT */),
3264
+ _createElementVNode("div", { class: "settings-tab-actions" }, [
3265
+ _createElementVNode("button", {
3266
+ type: "button",
3267
+ class: "btn-tool",
3268
+ onClick: _ctx.savePiProvider,
3269
+ disabled: !_ctx.isToolConfigWriteAllowed('pi') || _ctx.piSaving
3270
+ }, _toDisplayString(_ctx.t('common.save')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
3271
+ ])
3272
+ ]),
3273
+ _createElementVNode("div", { class: "codex-config-grid" }, [
3274
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
3275
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('pi.providers.fields.name')), 1 /* TEXT */),
3276
+ _createElementVNode("input", {
3277
+ class: "form-input",
3278
+ type: "text",
3279
+ value: _ctx.piProviderName(_ctx.editingPiProvider.id),
3280
+ readonly: ""
3281
+ }, null, 8 /* PROPS */, ["value"])
3282
+ ]),
3283
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
3284
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('pi.providers.fields.baseUrl')), 1 /* TEXT */),
3285
+ _withDirectives(_createElementVNode("input", {
3286
+ class: "form-input",
3287
+ type: "url",
3288
+ "onUpdate:modelValue": $event => ((_ctx.editingPiProvider.form.baseUrl) = $event),
3289
+ autocomplete: "off",
3290
+ spellcheck: "false",
3291
+ placeholder: "https://"
3292
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
3293
+ [_vModelText, _ctx.editingPiProvider.form.baseUrl]
3294
+ ])
3295
+ ]),
3296
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
3297
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('pi.providers.fields.api')), 1 /* TEXT */),
3298
+ _withDirectives(_createElementVNode("select", {
3299
+ class: "form-input",
3300
+ "onUpdate:modelValue": $event => ((_ctx.editingPiProvider.form.api) = $event),
3301
+ disabled: !_ctx.isToolConfigWriteAllowed('pi')
3302
+ }, [
3303
+ _createElementVNode("option", { value: "openai-completions" }, "openai-completions — " + _toDisplayString(_ctx.t('pi.providers.addModal.api.openaiCompletions')), 1 /* TEXT */),
3304
+ _createElementVNode("option", { value: "openai-responses" }, "openai-responses — " + _toDisplayString(_ctx.t('pi.providers.addModal.api.openaiResponses')), 1 /* TEXT */),
3305
+ _createElementVNode("option", { value: "anthropic-messages" }, "anthropic-messages — " + _toDisplayString(_ctx.t('pi.providers.addModal.api.anthropicMessages')), 1 /* TEXT */),
3306
+ _createElementVNode("option", { value: "google-generative-ai" }, "google-generative-ai — " + _toDisplayString(_ctx.t('pi.providers.addModal.api.googleGenerativeAi')), 1 /* TEXT */),
3307
+ (!['openai-completions', 'openai-responses', 'anthropic-messages', 'google-generative-ai'].includes(_ctx.editingPiProvider.form.api))
3308
+ ? (_openBlock(), _createElementBlock("option", {
3309
+ key: 0,
3310
+ value: _ctx.editingPiProvider.form.api
3311
+ }, _toDisplayString(_ctx.editingPiProvider.form.api || '—'), 9 /* TEXT, PROPS */, ["value"]))
3312
+ : _createCommentVNode("v-if", true)
3313
+ ], 8 /* PROPS */, ["onUpdate:modelValue", "disabled"]), [
3314
+ [_vModelSelect, _ctx.editingPiProvider.form.api]
3315
+ ])
3316
+ ]),
3317
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
3318
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('pi.providers.fields.apiKey')), 1 /* TEXT */),
3319
+ _createElementVNode("div", { class: "input-with-toggle" }, [
3320
+ _withDirectives(_createElementVNode("input", {
3321
+ class: "form-input",
3322
+ "onUpdate:modelValue": $event => ((_ctx.editingPiProvider.form.apiKey) = $event),
3323
+ type: _ctx.piShowKey ? 'text' : 'password',
3324
+ autocomplete: "off",
3325
+ spellcheck: "false",
3326
+ placeholder: "sk-..."
3327
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "type"]), [
3328
+ [_vModelDynamic, _ctx.editingPiProvider.form.apiKey]
3329
+ ]),
3330
+ _createElementVNode("button", {
3331
+ type: "button",
3332
+ class: "input-toggle-btn",
3333
+ onMousedown: _withModifiers(() => {}, ["prevent"]),
3334
+ onClick: $event => (_ctx.piShowKey = !_ctx.piShowKey),
3335
+ title: _ctx.piShowKey ? _ctx.t('common.hide') : _ctx.t('common.show'),
3336
+ "aria-label": _ctx.piShowKey ? _ctx.t('common.hide') : _ctx.t('common.show')
3337
+ }, [
3338
+ (!_ctx.piShowKey)
3339
+ ? (_openBlock(), _createElementBlock("svg", {
3340
+ key: 0,
3341
+ viewBox: "0 0 20 20",
3342
+ fill: "none",
3343
+ stroke: "currentColor",
3344
+ "stroke-width": "1.5",
3345
+ width: "16",
3346
+ height: "16"
3347
+ }, [
3348
+ _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" }),
3349
+ _createElementVNode("circle", {
3350
+ cx: "10",
3351
+ cy: "10",
3352
+ r: "3"
3353
+ })
3354
+ ]))
3355
+ : (_openBlock(), _createElementBlock("svg", {
3356
+ key: 1,
3357
+ viewBox: "0 0 20 20",
3358
+ fill: "none",
3359
+ stroke: "currentColor",
3360
+ "stroke-width": "1.5",
3361
+ width: "16",
3362
+ height: "16"
3363
+ }, [
3364
+ _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" })
3365
+ ]))
3366
+ ], 40 /* PROPS, NEED_HYDRATION */, ["onMousedown", "onClick", "title", "aria-label"])
3367
+ ])
3368
+ ])
3369
+ ]),
3370
+ _createElementVNode("div", { class: "form-group" }, [
3371
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('pi.providers.fields.models')), 1 /* TEXT */),
3372
+ (_ctx.piRemoteModelsLoading)
3373
+ ? (_openBlock(), _createElementBlock("p", {
3374
+ key: 0,
3375
+ class: "config-template-hint"
3376
+ }, _toDisplayString(_ctx.t('pi.providers.models.remoteLoading')), 1 /* TEXT */))
3377
+ : (_ctx.piRemoteModelError)
3378
+ ? (_openBlock(), _createElementBlock("p", {
3379
+ key: 1,
3380
+ class: "config-template-hint"
3381
+ }, _toDisplayString(_ctx.piRemoteModelError) + " · " + _toDisplayString(_ctx.t('pi.providers.models.remoteFailed')), 1 /* TEXT */))
3382
+ : _createCommentVNode("v-if", true),
3383
+ _createElementVNode("div", { class: "card-list" }, [
3384
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.editingPiProvider.form.models, (model, index) => {
3385
+ return (_openBlock(), _createElementBlock("div", {
3386
+ class: "card",
3387
+ key: index
3388
+ }, [
3389
+ _createElementVNode("div", { class: "input-with-toggle" }, [
3390
+ _withDirectives(_createElementVNode("input", {
3391
+ class: "form-input",
3392
+ type: "text",
3393
+ "onUpdate:modelValue": $event => ((model.id) = $event),
3394
+ autocomplete: "off",
3395
+ spellcheck: "false",
3396
+ placeholder: "claude-sonnet-4",
3397
+ disabled: !_ctx.isToolConfigWriteAllowed('pi'),
3398
+ onInput: $event => (_ctx.piModelSearch = model.id)
3399
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "disabled", "onInput"]), [
3400
+ [_vModelText, model.id]
3401
+ ]),
3402
+ _createElementVNode("button", {
3403
+ type: "button",
3404
+ class: "btn-tool input-toggle-btn",
3405
+ onClick: $event => (_ctx.editingPiProvider.form.models.splice(index, 1)),
3406
+ disabled: !_ctx.isToolConfigWriteAllowed('pi')
3407
+ }, _toDisplayString(_ctx.t('pi.providers.models.remove')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
3408
+ ])
3409
+ ]))
3410
+ }), 128 /* KEYED_FRAGMENT */)),
3411
+ (_ctx.editingPiProvider.form.models.length === 0)
3412
+ ? (_openBlock(), _createElementBlock("div", {
3413
+ key: 0,
3414
+ class: "card"
3415
+ }, [
3416
+ _withDirectives(_createElementVNode("input", {
3417
+ class: "form-input",
3418
+ type: "text",
3419
+ "onUpdate:modelValue": $event => ((_ctx.piModelSearch) = $event),
3420
+ autocomplete: "off",
3421
+ spellcheck: "false",
3422
+ placeholder: _ctx.t('pi.providers.models.search'),
3423
+ onKeydown: _withKeys(_withModifiers($event => (_ctx.addPiRemoteModel(_ctx.piModelSearch.trim())), ["prevent"]), ["enter"])
3424
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "placeholder", "onKeydown"]), [
3425
+ [_vModelText, _ctx.piModelSearch]
3426
+ ])
3427
+ ]))
3428
+ : _createCommentVNode("v-if", true),
3429
+ (!_ctx.piRemoteModelsLoading && !_ctx.piRemoteModelError && _ctx.piModelSearch.trim() && _ctx.piFilteredRemoteModels().length > 0)
3430
+ ? (_openBlock(), _createElementBlock("div", {
3431
+ key: 1,
3432
+ class: "card"
3433
+ }, [
3434
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.piFilteredRemoteModels(), (id) => {
3435
+ return (_openBlock(), _createElementBlock("button", {
3436
+ type: "button",
3437
+ class: "btn-tool",
3438
+ style: {"width":"100%","text-align":"left","justify-content":"flex-start"},
3439
+ key: id,
3440
+ onClick: $event => (_ctx.addPiRemoteModel(id))
3441
+ }, _toDisplayString(id), 9 /* TEXT, PROPS */, ["onClick"]))
3442
+ }), 128 /* KEYED_FRAGMENT */)),
3443
+ _createElementVNode("p", { class: "config-template-hint" }, _toDisplayString(_ctx.t('pi.providers.models.remoteCount', { count: _ctx.piRemoteModels.length })), 1 /* TEXT */)
3444
+ ]))
3445
+ : _createCommentVNode("v-if", true),
3446
+ (!_ctx.piRemoteModelsLoading && !_ctx.piRemoteModelError && _ctx.piModelSearch.trim() && _ctx.piFilteredRemoteModels().length === 0)
3447
+ ? (_openBlock(), _createElementBlock("p", {
3448
+ key: 2,
3449
+ class: "config-template-hint"
3450
+ }, _toDisplayString(_ctx.t('pi.providers.models.noMatch')), 1 /* TEXT */))
3451
+ : _createCommentVNode("v-if", true)
3452
+ ])
3453
+ ]),
3454
+ _createElementVNode("div", { class: "settings-tab-actions" }, [
3455
+ _createElementVNode("button", {
3456
+ type: "button",
3457
+ class: "btn-tool",
3458
+ onClick: _ctx.confirmDeletePiProvider,
3459
+ disabled: !_ctx.isToolConfigWriteAllowed('pi') || _ctx.piSaving
3460
+ }, _toDisplayString(_ctx.t('pi.providers.delete')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
3461
+ ])
3462
+ ]))
3463
+ : _createCommentVNode("v-if", true),
3464
+ (_ctx.showAddPiProviderModal)
3465
+ ? (_openBlock(), _createElementBlock("section", {
3466
+ key: 1,
3467
+ class: "selector-section"
3468
+ }, [
3469
+ _createElementVNode("div", { class: "selector-header" }, [
3470
+ _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('pi.providers.addModal.title')), 1 /* TEXT */),
3471
+ _createElementVNode("div", { class: "settings-tab-actions" }, [
3472
+ _createElementVNode("button", {
3473
+ type: "button",
3474
+ class: "btn-tool",
3475
+ onClick: _ctx.addPiProviderFromModal,
3476
+ disabled: !_ctx.isToolConfigWriteAllowed('pi') || _ctx.piSaving
3477
+ }, _toDisplayString(_ctx.t('common.save')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
3478
+ _createElementVNode("button", {
3479
+ type: "button",
3480
+ class: "btn-tool",
3481
+ onClick: _ctx.cancelAddPiProviderModal
3482
+ }, _toDisplayString(_ctx.t('common.cancel')), 9 /* TEXT, PROPS */, ["onClick"])
3483
+ ])
3484
+ ]),
3485
+ _createElementVNode("div", { class: "config-template-hint" }, _toDisplayString(_ctx.t('pi.providers.addModal.subtitle')), 1 /* TEXT */),
3486
+ _createElementVNode("div", { class: "codex-config-grid" }, [
3487
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
3488
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('pi.providers.addModal.fields.baseUrl')), 1 /* TEXT */),
3489
+ _withDirectives(_createElementVNode("input", {
3490
+ class: "form-input",
3491
+ type: "url",
3492
+ "onUpdate:modelValue": $event => ((_ctx.addingPiProviderBaseUrl) = $event),
3493
+ autocomplete: "off",
3494
+ spellcheck: "false",
3495
+ placeholder: "https://",
3496
+ onInput: _ctx.onAddingPiEndpointChange
3497
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "onInput"]), [
3498
+ [_vModelText, _ctx.addingPiProviderBaseUrl]
3499
+ ])
3500
+ ]),
3501
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
3502
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('pi.providers.addModal.fields.api')), 1 /* TEXT */),
3503
+ _withDirectives(_createElementVNode("select", {
3504
+ class: "form-input",
3505
+ "onUpdate:modelValue": $event => ((_ctx.addingPiProviderApi) = $event)
3506
+ }, [
3507
+ _createElementVNode("option", { value: "openai-completions" }, "openai-completions — " + _toDisplayString(_ctx.t('pi.providers.addModal.api.openaiCompletions')), 1 /* TEXT */),
3508
+ _createElementVNode("option", { value: "openai-responses" }, "openai-responses — " + _toDisplayString(_ctx.t('pi.providers.addModal.api.openaiResponses')), 1 /* TEXT */),
3509
+ _createElementVNode("option", { value: "anthropic-messages" }, "anthropic-messages — " + _toDisplayString(_ctx.t('pi.providers.addModal.api.anthropicMessages')), 1 /* TEXT */),
3510
+ _createElementVNode("option", { value: "google-generative-ai" }, "google-generative-ai — " + _toDisplayString(_ctx.t('pi.providers.addModal.api.googleGenerativeAi')), 1 /* TEXT */)
3511
+ ], 8 /* PROPS */, ["onUpdate:modelValue"]), [
3512
+ [_vModelSelect, _ctx.addingPiProviderApi]
3513
+ ])
3514
+ ]),
3515
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
3516
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('pi.providers.addModal.fields.apiKey')), 1 /* TEXT */),
3517
+ _withDirectives(_createElementVNode("input", {
3518
+ class: "form-input",
3519
+ type: "password",
3520
+ "onUpdate:modelValue": $event => ((_ctx.addingPiProviderApiKey) = $event),
3521
+ autocomplete: "off",
3522
+ spellcheck: "false",
3523
+ placeholder: _ctx.t('common.optional'),
3524
+ onInput: _ctx.onAddingPiEndpointChange
3525
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "placeholder", "onInput"]), [
3526
+ [_vModelText, _ctx.addingPiProviderApiKey]
3527
+ ])
3528
+ ]),
3529
+ _createElementVNode("div", { class: "form-group codex-config-field" }, [
3530
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('pi.providers.fields.models')), 1 /* TEXT */),
3531
+ (_ctx.addingPiRemoteLoading)
3532
+ ? (_openBlock(), _createElementBlock("p", {
3533
+ key: 0,
3534
+ class: "config-template-hint"
3535
+ }, _toDisplayString(_ctx.t('pi.providers.models.remoteLoading')), 1 /* TEXT */))
3536
+ : (_ctx.addingPiRemoteError)
3537
+ ? (_openBlock(), _createElementBlock("p", {
3538
+ key: 1,
3539
+ class: "config-template-hint"
3540
+ }, _toDisplayString(_ctx.addingPiRemoteError) + " · " + _toDisplayString(_ctx.t('pi.providers.models.remoteFailed')), 1 /* TEXT */))
3541
+ : _createCommentVNode("v-if", true),
3542
+ _withDirectives(_createElementVNode("input", {
3543
+ class: "form-input",
3544
+ type: "text",
3545
+ "onUpdate:modelValue": $event => ((_ctx.addingPiProviderModel) = $event),
3546
+ autocomplete: "off",
3547
+ spellcheck: "false",
3548
+ placeholder: _ctx.addingPiRemoteModels.length ? _ctx.t('pi.providers.models.search') : 'claude-sonnet-4'
3549
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
3550
+ [_vModelText, _ctx.addingPiProviderModel]
3551
+ ]),
3552
+ (!_ctx.addingPiRemoteLoading && _ctx.addingPiProviderModel.trim() && _ctx.piFilteredAddingRemoteModels().length > 0)
3553
+ ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [
3554
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.piFilteredAddingRemoteModels(), (id) => {
3555
+ return (_openBlock(), _createElementBlock("button", {
3556
+ type: "button",
3557
+ class: "btn-tool",
3558
+ style: {"width":"100%","text-align":"left","justify-content":"flex-start","margin-top":"8px"},
3559
+ key: id,
3560
+ onClick: $event => (_ctx.addingPiProviderModel = id)
3561
+ }, _toDisplayString(id), 9 /* TEXT, PROPS */, ["onClick"]))
3562
+ }), 128 /* KEYED_FRAGMENT */)),
3563
+ _createElementVNode("p", { class: "config-template-hint" }, _toDisplayString(_ctx.t('pi.providers.models.remoteCount', { count: _ctx.addingPiRemoteModels.length })), 1 /* TEXT */)
3564
+ ], 64 /* STABLE_FRAGMENT */))
3565
+ : (!_ctx.addingPiRemoteLoading && !_ctx.addingPiRemoteError && _ctx.addingPiProviderModel.trim() && _ctx.addingPiRemoteModels.length > 0)
3566
+ ? (_openBlock(), _createElementBlock("p", {
3567
+ key: 3,
3568
+ class: "config-template-hint"
3569
+ }, _toDisplayString(_ctx.t('pi.providers.models.noMatch')), 1 /* TEXT */))
3570
+ : _createCommentVNode("v-if", true)
3571
+ ])
3572
+ ])
3573
+ ]))
3574
+ : _createCommentVNode("v-if", true),
3575
+ (!_ctx.isToolConfigWriteAllowed('pi'))
3576
+ ? (_openBlock(), _createElementBlock("div", {
3577
+ key: 2,
3578
+ class: "tool-config-write-overlay"
3579
+ }, [
3580
+ _createElementVNode("div", { class: "tool-config-write-overlay-card" }, [
3581
+ _createElementVNode("div", { class: "tool-config-write-overlay-title" }, _toDisplayString(_ctx.t('toolConfig.pi.lockedTitle')), 1 /* TEXT */),
3582
+ _createElementVNode("p", null, _toDisplayString(_ctx.t('toolConfig.pi.lockedDesc')), 1 /* TEXT */),
3583
+ _createElementVNode("button", {
3584
+ type: "button",
3585
+ class: "btn-tool",
3586
+ onClick: $event => (_ctx.setToolConfigPermission('pi', true)),
3587
+ disabled: _ctx.toolConfigPermissionSaving.pi
3588
+ }, _toDisplayString(_ctx.t('toolConfig.enableWrite')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
3589
+ ])
3590
+ ]))
3591
+ : _createCommentVNode("v-if", true)
3592
+ ])
3593
+ ], 2 /* CLASS */)
3594
+ ], 8 /* PROPS */, ["aria-labelledby"]), [
3595
+ [_vShow, _ctx.mainTab === 'config' && _ctx.configMode === 'pi']
3596
+ ]),
3092
3597
  _createCommentVNode(" 会话浏览模式 "),
3093
3598
  _withDirectives(_createElementVNode("div", {
3094
3599
  class: "mode-content",
@@ -4817,60 +5322,73 @@ return function render(_ctx, _cache) {
4817
5322
  _createElementVNode("div", { class: "settings-card-content" }, [
4818
5323
  _createElementVNode("div", { class: "settings-card-title" }, _toDisplayString(_ctx.t('settings.configTabs.title')), 1 /* TEXT */),
4819
5324
  _createElementVNode("p", { class: "settings-card-desc" }, _toDisplayString(_ctx.t('settings.configTabs.meta')), 1 /* TEXT */),
4820
- _createElementVNode("label", { class: "settings-toggle-row" }, [
4821
- _createElementVNode("input", {
4822
- type: "checkbox",
4823
- checked: _ctx.configModeVisibility.codex,
4824
- onChange: $event => (_ctx.setConfigModeVisibility('codex', $event.target.checked))
4825
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
4826
- _createElementVNode("span", { class: "toggle-track" }, [
4827
- _createElementVNode("span", { class: "toggle-thumb" })
5325
+ _createElementVNode("div", { class: "settings-toggle-grid" }, [
5326
+ _createElementVNode("label", { class: "settings-toggle-row" }, [
5327
+ _createElementVNode("input", {
5328
+ type: "checkbox",
5329
+ checked: _ctx.configModeVisibility.codex,
5330
+ onChange: $event => (_ctx.setConfigModeVisibility('codex', $event.target.checked))
5331
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
5332
+ _createElementVNode("span", { class: "toggle-track" }, [
5333
+ _createElementVNode("span", { class: "toggle-thumb" })
5334
+ ]),
5335
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.codex')), 1 /* TEXT */)
4828
5336
  ]),
4829
- _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.codex')), 1 /* TEXT */)
4830
- ]),
4831
- _createElementVNode("label", { class: "settings-toggle-row" }, [
4832
- _createElementVNode("input", {
4833
- type: "checkbox",
4834
- checked: _ctx.configModeVisibility.claude,
4835
- onChange: $event => (_ctx.setConfigModeVisibility('claude', $event.target.checked))
4836
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
4837
- _createElementVNode("span", { class: "toggle-track" }, [
4838
- _createElementVNode("span", { class: "toggle-thumb" })
5337
+ _createElementVNode("label", { class: "settings-toggle-row" }, [
5338
+ _createElementVNode("input", {
5339
+ type: "checkbox",
5340
+ checked: _ctx.configModeVisibility.claude,
5341
+ onChange: $event => (_ctx.setConfigModeVisibility('claude', $event.target.checked))
5342
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
5343
+ _createElementVNode("span", { class: "toggle-track" }, [
5344
+ _createElementVNode("span", { class: "toggle-thumb" })
5345
+ ]),
5346
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.claude')), 1 /* TEXT */)
4839
5347
  ]),
4840
- _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.claude')), 1 /* TEXT */)
4841
- ]),
4842
- _createElementVNode("label", { class: "settings-toggle-row" }, [
4843
- _createElementVNode("input", {
4844
- type: "checkbox",
4845
- checked: _ctx.configModeVisibility.openclaw,
4846
- onChange: $event => (_ctx.setConfigModeVisibility('openclaw', $event.target.checked))
4847
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
4848
- _createElementVNode("span", { class: "toggle-track" }, [
4849
- _createElementVNode("span", { class: "toggle-thumb" })
5348
+ _createElementVNode("label", { class: "settings-toggle-row" }, [
5349
+ _createElementVNode("input", {
5350
+ type: "checkbox",
5351
+ checked: _ctx.configModeVisibility.openclaw,
5352
+ onChange: $event => (_ctx.setConfigModeVisibility('openclaw', $event.target.checked))
5353
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
5354
+ _createElementVNode("span", { class: "toggle-track" }, [
5355
+ _createElementVNode("span", { class: "toggle-thumb" })
5356
+ ]),
5357
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.openclaw')), 1 /* TEXT */)
4850
5358
  ]),
4851
- _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.openclaw')), 1 /* TEXT */)
4852
- ]),
4853
- _createElementVNode("label", { class: "settings-toggle-row" }, [
4854
- _createElementVNode("input", {
4855
- type: "checkbox",
4856
- checked: _ctx.configModeVisibility.opencode,
4857
- onChange: $event => (_ctx.setConfigModeVisibility('opencode', $event.target.checked))
4858
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
4859
- _createElementVNode("span", { class: "toggle-track" }, [
4860
- _createElementVNode("span", { class: "toggle-thumb" })
5359
+ _createElementVNode("label", { class: "settings-toggle-row" }, [
5360
+ _createElementVNode("input", {
5361
+ type: "checkbox",
5362
+ checked: _ctx.configModeVisibility.opencode,
5363
+ onChange: $event => (_ctx.setConfigModeVisibility('opencode', $event.target.checked))
5364
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
5365
+ _createElementVNode("span", { class: "toggle-track" }, [
5366
+ _createElementVNode("span", { class: "toggle-thumb" })
5367
+ ]),
5368
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.opencode')), 1 /* TEXT */)
4861
5369
  ]),
4862
- _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.opencode')), 1 /* TEXT */)
4863
- ]),
4864
- _createElementVNode("label", { class: "settings-toggle-row" }, [
4865
- _createElementVNode("input", {
4866
- type: "checkbox",
4867
- checked: _ctx.configModeVisibility.kilocode,
4868
- onChange: $event => (_ctx.setConfigModeVisibility('kilocode', $event.target.checked))
4869
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
4870
- _createElementVNode("span", { class: "toggle-track" }, [
4871
- _createElementVNode("span", { class: "toggle-thumb" })
5370
+ _createElementVNode("label", { class: "settings-toggle-row" }, [
5371
+ _createElementVNode("input", {
5372
+ type: "checkbox",
5373
+ checked: _ctx.configModeVisibility.kilocode,
5374
+ onChange: $event => (_ctx.setConfigModeVisibility('kilocode', $event.target.checked))
5375
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
5376
+ _createElementVNode("span", { class: "toggle-track" }, [
5377
+ _createElementVNode("span", { class: "toggle-thumb" })
5378
+ ]),
5379
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.kilocode')), 1 /* TEXT */)
4872
5380
  ]),
4873
- _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.kilocode')), 1 /* TEXT */)
5381
+ _createElementVNode("label", { class: "settings-toggle-row" }, [
5382
+ _createElementVNode("input", {
5383
+ type: "checkbox",
5384
+ checked: _ctx.configModeVisibility.pi,
5385
+ onChange: $event => (_ctx.setConfigModeVisibility('pi', $event.target.checked))
5386
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
5387
+ _createElementVNode("span", { class: "toggle-track" }, [
5388
+ _createElementVNode("span", { class: "toggle-thumb" })
5389
+ ]),
5390
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('tab.config.pi')), 1 /* TEXT */)
5391
+ ])
4874
5392
  ]),
4875
5393
  _createElementVNode("p", { class: "settings-card-hint" }, _toDisplayString(_ctx.t('settings.configTabs.hint')), 1 /* TEXT */)
4876
5394
  ])