codexmate 0.0.57 → 0.1.2

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.
@@ -362,48 +362,22 @@ return function render(_ctx, _cache) {
362
362
  ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('common.current', { value: _ctx.opencodeModel })), 1 /* TEXT */))
363
363
  : _createCommentVNode("v-if", true)
364
364
  ])
365
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"])
366
- ], 8 /* PROPS */, ["aria-label"]),
367
- _createElementVNode("div", {
368
- class: "side-section",
369
- role: "navigation",
370
- "aria-label": _ctx.t('side.prompts')
371
- }, [
372
- _createElementVNode("div", { class: "side-section-title" }, _toDisplayString(_ctx.t('side.prompts')), 1 /* TEXT */),
373
- _createElementVNode("button", {
374
- id: "side-tab-prompts-agents",
375
- "data-main-tab": "prompts",
376
- "data-prompts-sub-tab": "codex",
377
- "aria-current": _ctx.mainTab === 'prompts' && _ctx.promptsSubTab === 'codex' ? 'page' : null,
378
- class: _normalizeClass(['side-item', { active: _ctx.isMainTabNavActive('prompts') && _ctx.promptsSubTab === 'codex' }]),
379
- onPointerdown: $event => (_ctx.onMainTabPointerDown('prompts', $event)),
380
- onClick: $event => {_ctx.switchPromptsSubTab('codex'); _ctx.onMainTabClick('prompts')}
381
- }, [
382
- _createElementVNode("span", {
383
- class: "side-item-icon",
384
- "aria-hidden": "true"
385
- }, "P"),
386
- _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.prompts.agents')), 1 /* TEXT */),
387
- _createElementVNode("div", { class: "side-item-meta" }, [
388
- _createElementVNode("span", null, _toDisplayString(_ctx.t('side.prompts.agents.meta')), 1 /* TEXT */)
389
- ])
390
365
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]),
391
366
  _createElementVNode("button", {
392
- id: "side-tab-prompts-project",
367
+ id: "side-tab-prompts",
393
368
  "data-main-tab": "prompts",
394
- "data-prompts-sub-tab": "claude-project",
395
- "aria-current": _ctx.mainTab === 'prompts' && _ctx.promptsSubTab === 'claude-project' ? 'page' : null,
396
- class: _normalizeClass(['side-item', { active: _ctx.isMainTabNavActive('prompts') && _ctx.promptsSubTab === 'claude-project' }]),
369
+ "aria-current": _ctx.mainTab === 'prompts' ? 'page' : null,
370
+ class: _normalizeClass(['side-item', { active: _ctx.isMainTabNavActive('prompts') }]),
397
371
  onPointerdown: $event => (_ctx.onMainTabPointerDown('prompts', $event)),
398
- onClick: $event => {_ctx.switchPromptsSubTab('claude-project'); _ctx.onMainTabClick('prompts')}
372
+ onClick: $event => (_ctx.onMainTabClick('prompts', $event))
399
373
  }, [
400
374
  _createElementVNode("span", {
401
375
  class: "side-item-icon",
402
376
  "aria-hidden": "true"
403
- }, "M"),
404
- _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.prompts.claude')), 1 /* TEXT */),
377
+ }, "P"),
378
+ _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.prompts')), 1 /* TEXT */),
405
379
  _createElementVNode("div", { class: "side-item-meta" }, [
406
- _createElementVNode("span", null, _toDisplayString(_ctx.t('side.prompts.claude.meta')), 1 /* TEXT */)
380
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('side.prompts.meta')), 1 /* TEXT */)
407
381
  ])
408
382
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"])
409
383
  ], 8 /* PROPS */, ["aria-label"]),
@@ -2269,6 +2243,32 @@ return function render(_ctx, _cache) {
2269
2243
  ]))
2270
2244
  : _createCommentVNode("v-if", true),
2271
2245
  _createElementVNode("div", { class: "openclaw-layout" }, [
2246
+ _createElementVNode("section", {
2247
+ class: "settings-card settings-card--wide openclaw-summary-card",
2248
+ "aria-label": "OpenClaw 当前摘要"
2249
+ }, [
2250
+ _createElementVNode("div", { class: "settings-card-body" }, [
2251
+ _createElementVNode("div", { class: "openclaw-summary-header" }, [
2252
+ _createElementVNode("div", null, [
2253
+ _createElementVNode("div", { class: "summary-eyebrow" }, "OPENCLAW"),
2254
+ _createElementVNode("div", { class: "summary-title" }, "配置与本地诊断")
2255
+ ]),
2256
+ _createElementVNode("div", { class: "summary-note" }, "配置摘要")
2257
+ ]),
2258
+ _createElementVNode("div", { class: "openclaw-summary-grid" }, [
2259
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getOpenclawStatusSummaryItems(), (item) => {
2260
+ return (_openBlock(), _createElementBlock("div", {
2261
+ key: item.key,
2262
+ class: _normalizeClass(['openclaw-summary-item', item.tone || ''])
2263
+ }, [
2264
+ _createElementVNode("div", { class: "summary-item-label" }, _toDisplayString(item.label), 1 /* TEXT */),
2265
+ _createElementVNode("div", { class: "summary-item-value" }, _toDisplayString(item.value), 1 /* TEXT */)
2266
+ ], 2 /* CLASS */))
2267
+ }), 128 /* KEYED_FRAGMENT */))
2268
+ ]),
2269
+ _createElementVNode("div", { class: "openclaw-diagnostic-note" }, " 本页仅管理配置与工作区文件。 ")
2270
+ ])
2271
+ ]),
2272
2272
  _createElementVNode("section", { class: "settings-card settings-card--wide openclaw-workspace-card" }, [
2273
2273
  _createElementVNode("div", { class: "settings-card-body" }, [
2274
2274
  _createElementVNode("div", { class: "openclaw-tools-grid" }, [
@@ -2280,7 +2280,7 @@ return function render(_ctx, _cache) {
2280
2280
  _createElementVNode("div", { class: "tool-icon" }, "📄"),
2281
2281
  _createElementVNode("div", { class: "tool-content" }, [
2282
2282
  _createElementVNode("div", { class: "tool-title" }, "AGENTS.md"),
2283
- _createElementVNode("div", { class: "tool-meta" }, _toDisplayString(_ctx.agentsLoading ? _ctx.t('config.modelLoading') : _ctx.t('openclaw.agents.hint')), 1 /* TEXT */)
2283
+ _createElementVNode("div", { class: "tool-meta" }, _toDisplayString(_ctx.agentsLoading ? _ctx.t('config.modelLoading') : 'Workspace file'), 1 /* TEXT */)
2284
2284
  ]),
2285
2285
  (_openBlock(), _createElementBlock("svg", {
2286
2286
  class: "tool-chevron",
@@ -2292,28 +2292,30 @@ return function render(_ctx, _cache) {
2292
2292
  _createElementVNode("path", { d: "M9 18l6-6-6-6" })
2293
2293
  ]))
2294
2294
  ], 8 /* PROPS */, ["onClick", "disabled"]),
2295
- _createElementVNode("div", { class: "openclaw-workspace-card" }, [
2296
- _createElementVNode("label", {
2297
- class: "workspace-label",
2298
- for: "openclaw-workspace-file"
2299
- }, _toDisplayString(_ctx.t('openclaw.workspaceFile')), 1 /* TEXT */),
2300
- _createElementVNode("div", { class: "workspace-input-group" }, [
2301
- _withDirectives(_createElementVNode("input", {
2302
- id: "openclaw-workspace-file",
2303
- class: "form-input",
2304
- "onUpdate:modelValue": $event => ((_ctx.openclawWorkspaceFileName) = $event),
2305
- placeholder: _ctx.t('openclaw.workspace.placeholder')
2306
- }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
2307
- [_vModelText, _ctx.openclawWorkspaceFileName]
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")
2308
2307
  ]),
2309
- _createElementVNode("button", {
2310
- class: "btn-tool",
2311
- onClick: _ctx.openOpenclawWorkspaceEditor,
2312
- disabled: _ctx.loading || !!_ctx.initError || _ctx.agentsLoading
2313
- }, _toDisplayString(_ctx.agentsLoading ? _ctx.t('config.modelLoading') : _ctx.t('openclaw.workspace.open')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
2314
- ]),
2315
- _createElementVNode("div", { class: "workspace-meta" }, _toDisplayString(_ctx.t('openclaw.workspace.hint')), 1 /* TEXT */)
2316
- ])
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 */))
2317
2319
  ])
2318
2320
  ])
2319
2321
  ]),
@@ -2341,7 +2343,19 @@ return function render(_ctx, _cache) {
2341
2343
  _createElementVNode("div", { class: "card-icon" }, _toDisplayString(name.charAt(0).toUpperCase()), 1 /* TEXT */),
2342
2344
  _createElementVNode("div", { class: "card-content" }, [
2343
2345
  _createElementVNode("div", { class: "card-title" }, _toDisplayString(name), 1 /* TEXT */),
2344
- _createElementVNode("div", { class: "card-subtitle" }, _toDisplayString(_ctx.openclawSubtitle(config)), 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)
2345
2359
  ])
2346
2360
  ]),
2347
2361
  _createElementVNode("div", { class: "card-trailing" }, [
@@ -6656,18 +6670,26 @@ return function render(_ctx, _cache) {
6656
6670
  role: "tabpanel",
6657
6671
  "aria-labelledby": "tab-prompts"
6658
6672
  }, [
6659
- _createElementVNode("div", { class: "segmented-control" }, [
6673
+ _createElementVNode("div", {
6674
+ class: "prompts-md-tabs",
6675
+ role: "tablist",
6676
+ "aria-label": _ctx.t('tab.prompts')
6677
+ }, [
6660
6678
  _createElementVNode("button", {
6661
6679
  type: "button",
6662
- class: _normalizeClass(['segment', { active: _ctx.promptsSubTab === 'codex' }]),
6680
+ class: _normalizeClass(['prompts-md-tab', { active: _ctx.promptsSubTab === 'codex' }]),
6681
+ role: "tab",
6682
+ "aria-selected": _ctx.promptsSubTab === 'codex',
6663
6683
  onClick: $event => (_ctx.switchPromptsSubTab('codex'))
6664
- }, _toDisplayString(_ctx.t('prompts.subTab.codex')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]),
6684
+ }, _toDisplayString(_ctx.t('prompts.subTab.codex')), 11 /* TEXT, CLASS, PROPS */, ["aria-selected", "onClick"]),
6665
6685
  _createElementVNode("button", {
6666
6686
  type: "button",
6667
- class: _normalizeClass(['segment', { active: _ctx.promptsSubTab === 'claude-project' }]),
6687
+ class: _normalizeClass(['prompts-md-tab', { active: _ctx.promptsSubTab === 'claude-project' }]),
6688
+ role: "tab",
6689
+ "aria-selected": _ctx.promptsSubTab === 'claude-project',
6668
6690
  onClick: $event => (_ctx.switchPromptsSubTab('claude-project'))
6669
- }, _toDisplayString(_ctx.t('prompts.subTab.project')), 11 /* TEXT, CLASS, PROPS */, ["onClick"])
6670
- ]),
6691
+ }, _toDisplayString(_ctx.t('prompts.subTab.project')), 11 /* TEXT, CLASS, PROPS */, ["aria-selected", "onClick"])
6692
+ ], 8 /* PROPS */, ["aria-label"]),
6671
6693
  (_ctx.promptsSubTab === 'claude-project')
6672
6694
  ? (_openBlock(), _createElementBlock("div", {
6673
6695
  key: 0,
@@ -6849,6 +6871,100 @@ return function render(_ctx, _cache) {
6849
6871
  ])
6850
6872
  ])
6851
6873
  ]),
6874
+ _createElementVNode("div", { class: "prompt-presets-inline-row" }, [
6875
+ _createElementVNode("div", { class: "prompt-presets-inline-group" }, [
6876
+ _createElementVNode("label", { class: "prompt-presets-inline-label" }, _toDisplayString(_ctx.t('prompts.presets.title')), 1 /* TEXT */),
6877
+ _createElementVNode("select", {
6878
+ class: "form-input prompt-presets-select",
6879
+ disabled: _ctx.agentsLoading || _ctx.agentsSaving || _ctx.agentsDiffVisible || !_ctx.promptPresets.length,
6880
+ title: _ctx.t('prompts.presets.title'),
6881
+ onChange: $event => (_ctx.applyPromptPresetSelection($event))
6882
+ }, [
6883
+ _createElementVNode("option", { value: "" }, _toDisplayString(_ctx.t('prompts.presets.selectPlaceholder')), 1 /* TEXT */),
6884
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.promptPresets, (preset) => {
6885
+ return (_openBlock(), _createElementBlock("option", {
6886
+ key: preset.id,
6887
+ value: preset.id
6888
+ }, _toDisplayString(preset.name), 9 /* TEXT, PROPS */, ["value"]))
6889
+ }), 128 /* KEYED_FRAGMENT */))
6890
+ ], 40 /* PROPS, NEED_HYDRATION */, ["disabled", "title", "onChange"])
6891
+ ]),
6892
+ _createElementVNode("div", { class: "prompt-presets-inline-group prompt-presets-inline-group--save" }, [
6893
+ _withDirectives(_createElementVNode("input", {
6894
+ type: "text",
6895
+ class: "form-input prompt-presets-name-input",
6896
+ "onUpdate:modelValue": $event => ((_ctx.promptPresetNameDraft) = $event),
6897
+ placeholder: _ctx.t('prompts.presets.namePlaceholder'),
6898
+ disabled: _ctx.agentsLoading || _ctx.agentsSaving || _ctx.agentsDiffVisible,
6899
+ onKeydown: _withKeys(_withModifiers(_ctx.saveCurrentPromptAsPreset, ["prevent"]), ["enter"])
6900
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "placeholder", "disabled", "onKeydown"]), [
6901
+ [_vModelText, _ctx.promptPresetNameDraft]
6902
+ ]),
6903
+ _createElementVNode("button", {
6904
+ type: "button",
6905
+ class: "btn-mini btn-confirm-mini",
6906
+ onClick: _ctx.saveCurrentPromptAsPreset,
6907
+ disabled: _ctx.promptPresetSaving || _ctx.agentsLoading || _ctx.agentsSaving || _ctx.agentsDiffVisible,
6908
+ title: _ctx.t('prompts.presets.saveCurrent')
6909
+ }, _toDisplayString(_ctx.t('prompts.presets.saveCurrent')), 9 /* TEXT, PROPS */, ["onClick", "disabled", "title"])
6910
+ ])
6911
+ ]),
6912
+ _createElementVNode("details", { class: "prompt-presets-panel" }, [
6913
+ _createElementVNode("summary", { class: "prompt-presets-summary" }, [
6914
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('prompts.presets.title')), 1 /* TEXT */),
6915
+ _createElementVNode("small", null, _toDisplayString(_ctx.t('prompts.presets.hint')), 1 /* TEXT */)
6916
+ ]),
6917
+ _createElementVNode("div", { class: "form-group prompt-presets-body" }, [
6918
+ _createElementVNode("div", { class: "editor-frame prompt-presets-frame" }, [
6919
+ (!_ctx.promptPresets.length)
6920
+ ? (_openBlock(), _createElementBlock("div", {
6921
+ key: 0,
6922
+ class: "state-message prompt-presets-empty"
6923
+ }, _toDisplayString(_ctx.t('prompts.presets.empty')), 1 /* TEXT */))
6924
+ : (_openBlock(), _createElementBlock("div", {
6925
+ key: 1,
6926
+ class: "prompt-presets-list"
6927
+ }, [
6928
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.promptPresets, (preset) => {
6929
+ return (_openBlock(), _createElementBlock("article", {
6930
+ key: preset.id,
6931
+ class: "prompt-preset-row"
6932
+ }, [
6933
+ _createElementVNode("div", { class: "prompt-preset-main" }, [
6934
+ _createElementVNode("input", {
6935
+ type: "text",
6936
+ class: "form-input prompt-preset-name",
6937
+ value: _ctx.getPromptPresetRenameDraft(preset),
6938
+ onInput: $event => (_ctx.setPromptPresetRenameDraft(preset.id, $event.target.value)),
6939
+ onKeydown: _withKeys(_withModifiers($event => (_ctx.renamePromptPreset(preset)), ["prevent"]), ["enter"]),
6940
+ "aria-label": _ctx.t('prompts.presets.renameAria')
6941
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["value", "onInput", "onKeydown", "aria-label"]),
6942
+ _createElementVNode("div", { class: "form-hint" }, _toDisplayString(_ctx.t('prompts.presets.updatedAt', { time: _ctx.formatPromptPresetTime(preset.updatedAt) })), 1 /* TEXT */),
6943
+ _createElementVNode("pre", { class: "prompt-preset-preview" }, _toDisplayString(preset.content), 1 /* TEXT */)
6944
+ ]),
6945
+ _createElementVNode("div", { class: "prompts-editor-actions prompt-preset-actions" }, [
6946
+ _createElementVNode("button", {
6947
+ type: "button",
6948
+ class: "btn-mini",
6949
+ onClick: $event => (_ctx.renamePromptPreset(preset))
6950
+ }, _toDisplayString(_ctx.t('common.save')), 9 /* TEXT, PROPS */, ["onClick"]),
6951
+ _createElementVNode("button", {
6952
+ type: "button",
6953
+ class: "btn-mini",
6954
+ onClick: $event => (_ctx.applyPromptPresetToEditor(preset))
6955
+ }, _toDisplayString(_ctx.t('common.paste')), 9 /* TEXT, PROPS */, ["onClick"]),
6956
+ _createElementVNode("button", {
6957
+ type: "button",
6958
+ class: "btn-mini btn-danger-mini",
6959
+ onClick: $event => (_ctx.deletePromptPreset(preset))
6960
+ }, _toDisplayString(_ctx.t('common.delete')), 9 /* TEXT, PROPS */, ["onClick"])
6961
+ ])
6962
+ ]))
6963
+ }), 128 /* KEYED_FRAGMENT */))
6964
+ ]))
6965
+ ])
6966
+ ])
6967
+ ]),
6852
6968
  _createElementVNode("div", { class: "form-group" }, [
6853
6969
  (_ctx.agentsDiffVisible)
6854
6970
  ? (_openBlock(), _createElementBlock("div", { key: 0 }, [
@@ -9096,8 +9212,10 @@ return function render(_ctx, _cache) {
9096
9212
  }, _toDisplayString(_ctx.agentsSaving ? (_ctx.agentsDiffVisible ? _ctx.t('common.saving') : _ctx.t('common.previewing')) : (_ctx.agentsDiffVisible ? _ctx.t('common.save') : _ctx.t('common.preview'))), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
9097
9213
  ])
9098
9214
  ]),
9099
- _createElementVNode("div", { class: "modal-editor-body" }, [
9100
- _createElementVNode("div", { class: "form-group" }, [
9215
+ _createElementVNode("div", {
9216
+ class: _normalizeClass(["modal-editor-body", { 'modal-editor-body--openclaw-workspace': _ctx.agentsContext === 'openclaw-workspace' }])
9217
+ }, [
9218
+ _createElementVNode("div", { class: "form-group agents-target-file-group" }, [
9101
9219
  _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('modal.agents.targetFile')), 1 /* TEXT */),
9102
9220
  _createElementVNode("div", { class: "form-hint" }, [
9103
9221
  _createTextVNode(_toDisplayString(_ctx.agentsPath || _ctx.t('common.notLoaded')) + " ", 1 /* TEXT */),
@@ -9106,8 +9224,10 @@ return function render(_ctx, _cache) {
9106
9224
  : _createCommentVNode("v-if", true)
9107
9225
  ])
9108
9226
  ]),
9109
- _createElementVNode("div", { class: "form-group" }, [
9110
- _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t(_ctx.agentsContext === 'claude-project' ? 'modal.agents.contentLabel.claudeProject' : 'modal.agents.contentLabel')), 1 /* TEXT */),
9227
+ _createElementVNode("div", { class: "form-group agents-content-group" }, [
9228
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.agentsContext === 'openclaw-workspace'
9229
+ ? `${_ctx.agentsWorkspaceFileName || '工作区文件'} 内容`
9230
+ : _ctx.t(_ctx.agentsContext === 'claude-project' ? 'modal.agents.contentLabel.claudeProject' : 'modal.agents.contentLabel')), 1 /* TEXT */),
9111
9231
  (!_ctx.agentsLoading && (_ctx.hasAgentsContentChanged() || _ctx.agentsDiffVisible))
9112
9232
  ? (_openBlock(), _createElementBlock("div", {
9113
9233
  key: 0,
@@ -9205,7 +9325,7 @@ return function render(_ctx, _cache) {
9205
9325
  }, _toDisplayString(_ctx.t('diff.viewHint.preview')), 1 /* TEXT */))
9206
9326
  ])
9207
9327
  ])
9208
- ])
9328
+ ], 2 /* CLASS */)
9209
9329
  ])
9210
9330
  ], 8 /* PROPS */, ["onClick"]))
9211
9331
  : _createCommentVNode("v-if", true),
@@ -40,6 +40,7 @@ body::after {
40
40
 
41
41
  .app-shell.sidebar-collapsed {
42
42
  --side-rail-width: var(--side-rail-collapsed-width, 136px);
43
+ grid-template-columns: var(--side-rail-collapsed-width, 136px) minmax(0, 1fr);
43
44
  }
44
45
 
45
46
  .app-shell.standalone {
@@ -61,6 +61,85 @@
61
61
  max-height: calc(100vh - 56px);
62
62
  }
63
63
 
64
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) {
65
+ width: min(94vw, 1040px);
66
+ max-height: calc(100vh - 40px);
67
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(250, 246, 241, 0.96) 100%);
68
+ }
69
+
70
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) .modal-editor-header {
71
+ padding: 18px 20px 12px;
72
+ border-bottom: 1px solid rgba(137, 111, 94, 0.10);
73
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.92), rgba(249, 244, 239, 0.82));
74
+ }
75
+
76
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) .modal-title {
77
+ margin-bottom: 0;
78
+ font-size: 18px;
79
+ letter-spacing: -0.02em;
80
+ }
81
+
82
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) .modal-header-actions {
83
+ gap: 6px;
84
+ }
85
+
86
+ .agents-modal .modal-editor-body--openclaw-workspace {
87
+ display: grid;
88
+ grid-template-columns: minmax(220px, 280px) minmax(0, 1fr);
89
+ gap: 14px;
90
+ padding: 16px 20px 20px;
91
+ overflow: hidden;
92
+ }
93
+
94
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) .agents-target-file-group {
95
+ align-self: start;
96
+ margin-bottom: 0;
97
+ padding: 14px;
98
+ border: 1px solid rgba(137, 111, 94, 0.12);
99
+ border-radius: var(--radius-lg);
100
+ background: rgba(255, 255, 255, 0.72);
101
+ }
102
+
103
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) .agents-target-file-group .form-hint {
104
+ margin-top: 8px;
105
+ font-family: var(--font-family-mono);
106
+ font-size: 12px;
107
+ line-height: 1.55;
108
+ overflow-wrap: anywhere;
109
+ }
110
+
111
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) .agents-content-group {
112
+ min-width: 0;
113
+ margin-bottom: 0;
114
+ }
115
+
116
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) .agents-content-group > .form-label {
117
+ display: flex;
118
+ align-items: center;
119
+ justify-content: space-between;
120
+ margin-bottom: 8px;
121
+ font-size: 13px;
122
+ font-weight: 600;
123
+ }
124
+
125
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) .template-editor,
126
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) .agents-diff-editor {
127
+ min-height: min(64vh, 620px);
128
+ max-height: min(68vh, 680px);
129
+ border-radius: var(--radius-lg);
130
+ border-color: rgba(137, 111, 94, 0.14);
131
+ background: rgba(255, 255, 255, 0.88);
132
+ font-size: 13px;
133
+ line-height: 1.62;
134
+ }
135
+
136
+ .agents-modal:has(.modal-editor-body--openclaw-workspace) .template-editor-warning {
137
+ margin-top: 8px;
138
+ padding: 10px 12px;
139
+ border-radius: var(--radius-md);
140
+ background: rgba(137, 111, 94, 0.06);
141
+ }
142
+
64
143
  .modal-editor-header {
65
144
  margin-bottom: 0;
66
145
  padding: var(--spacing-md) var(--spacing-md) 0;
@@ -693,3 +772,176 @@
693
772
  from { opacity: 0; transform: translateY(-8px); }
694
773
  to { opacity: 1; transform: translateY(0); }
695
774
  }
775
+
776
+ .prompts-md-tabs {
777
+ display: inline-flex;
778
+ align-items: center;
779
+ gap: 2px;
780
+ margin: 0 0 12px;
781
+ border-bottom: 1px solid var(--color-border-soft);
782
+ }
783
+
784
+ .prompts-md-tab {
785
+ padding: 7px 10px 8px;
786
+ border: 0;
787
+ border-bottom: 2px solid transparent;
788
+ background: transparent;
789
+ box-shadow: none;
790
+ color: var(--color-text-secondary);
791
+ cursor: pointer;
792
+ font-size: var(--font-size-body);
793
+ font-weight: var(--font-weight-secondary);
794
+ }
795
+
796
+ .prompts-md-tab:hover {
797
+ color: var(--color-text-primary);
798
+ background: transparent;
799
+ }
800
+
801
+ .prompts-md-tab.active {
802
+ color: var(--color-brand-dark);
803
+ border-bottom-color: var(--color-brand);
804
+ background: transparent;
805
+ box-shadow: none;
806
+ }
807
+
808
+ .prompt-presets-inline-row {
809
+ display: flex;
810
+ align-items: center;
811
+ gap: 10px;
812
+ margin: 8px 0 12px;
813
+ padding: 10px 12px;
814
+ border: 1px solid var(--color-border-soft);
815
+ border-radius: var(--radius-md);
816
+ background: var(--color-bg-card);
817
+ }
818
+
819
+ .prompt-presets-inline-group {
820
+ display: flex;
821
+ align-items: center;
822
+ gap: 8px;
823
+ min-width: 0;
824
+ }
825
+
826
+ .prompt-presets-inline-group--save {
827
+ flex: 1;
828
+ justify-content: flex-end;
829
+ }
830
+
831
+ .prompt-presets-inline-label {
832
+ flex-shrink: 0;
833
+ color: var(--color-text-secondary);
834
+ font-size: var(--font-size-small);
835
+ }
836
+
837
+ .prompt-presets-select {
838
+ min-width: 180px;
839
+ }
840
+
841
+ .prompt-presets-panel {
842
+ margin: 12px 0;
843
+ border: 1px solid var(--color-border-soft);
844
+ border-radius: var(--radius-md);
845
+ background: var(--color-bg-card);
846
+ }
847
+
848
+ .prompt-presets-summary {
849
+ display: flex;
850
+ align-items: baseline;
851
+ gap: 10px;
852
+ padding: 10px 12px;
853
+ cursor: pointer;
854
+ color: var(--color-text-primary);
855
+ font-weight: var(--font-weight-primary);
856
+ }
857
+
858
+ .prompt-presets-summary small {
859
+ color: var(--color-text-secondary);
860
+ font-weight: 400;
861
+ }
862
+
863
+ .prompt-presets-toolbar {
864
+ padding: 0 12px 10px;
865
+ }
866
+
867
+ .prompt-presets-save-row {
868
+ gap: 8px;
869
+ }
870
+
871
+ .prompt-presets-name-input {
872
+ width: min(340px, 34vw);
873
+ }
874
+
875
+ .prompt-presets-body {
876
+ min-height: 0;
877
+ margin: 0;
878
+ padding: 0 12px 12px;
879
+ }
880
+
881
+ .prompt-presets-frame {
882
+ max-height: 320px;
883
+ min-height: 0;
884
+ overflow: auto;
885
+ background: var(--color-bg-card);
886
+ }
887
+
888
+ .prompt-presets-empty {
889
+ margin: 0;
890
+ min-height: 120px;
891
+ display: flex;
892
+ align-items: center;
893
+ justify-content: center;
894
+ border: none;
895
+ background: transparent;
896
+ }
897
+
898
+ .prompt-presets-list {
899
+ display: flex;
900
+ flex-direction: column;
901
+ }
902
+
903
+ .prompt-preset-row {
904
+ display: grid;
905
+ grid-template-columns: minmax(0, 1fr) auto;
906
+ gap: 12px;
907
+ padding: 12px;
908
+ border-bottom: 1px solid var(--color-border-soft);
909
+ background: transparent;
910
+ }
911
+
912
+ .prompt-preset-row:last-child {
913
+ border-bottom: none;
914
+ }
915
+
916
+ .prompt-preset-main {
917
+ min-width: 0;
918
+ }
919
+
920
+ .prompt-preset-name {
921
+ font-weight: var(--font-weight-primary);
922
+ }
923
+
924
+ .prompt-preset-preview {
925
+ max-height: 180px;
926
+ margin: 8px 0 0;
927
+ padding: 10px;
928
+ overflow: auto;
929
+ white-space: pre-wrap;
930
+ word-break: break-word;
931
+ border-radius: var(--radius-sm);
932
+ background: var(--color-bg-subtle);
933
+ color: var(--color-text-secondary);
934
+ font-family: var(--font-family-mono);
935
+ font-size: 11px;
936
+ }
937
+
938
+ .prompt-preset-actions {
939
+ align-self: start;
940
+ flex-wrap: wrap;
941
+ justify-content: flex-end;
942
+ max-width: 260px;
943
+ }
944
+
945
+ .btn-danger-mini {
946
+ color: var(--color-danger);
947
+ }