codexmate 0.0.56 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +2 -2
  2. package/README.vi.md +1 -0
  3. package/README.zh.md +2 -2
  4. package/cli/openai-bridge-retry.js +62 -0
  5. package/cli/openai-bridge-runtime.js +1819 -0
  6. package/cli/openai-bridge.js +137 -2048
  7. package/cli.js +749 -133
  8. package/lib/task-orchestrator.js +90 -21
  9. package/lib/task-workspace-chat.js +292 -0
  10. package/package.json +2 -2
  11. package/web-ui/app.js +67 -131
  12. package/web-ui/modules/app.computed.main-tabs.mjs +304 -7
  13. package/web-ui/modules/app.methods.agents.mjs +192 -1
  14. package/web-ui/modules/app.methods.claude-config.mjs +65 -25
  15. package/web-ui/modules/app.methods.navigation.mjs +67 -83
  16. package/web-ui/modules/app.methods.openclaw-editing.mjs +3 -6
  17. package/web-ui/modules/app.methods.providers.mjs +40 -10
  18. package/web-ui/modules/app.methods.session-actions.mjs +1 -12
  19. package/web-ui/modules/app.methods.session-browser.mjs +23 -54
  20. package/web-ui/modules/app.methods.session-trash.mjs +0 -1
  21. package/web-ui/modules/app.methods.startup-claude.mjs +16 -31
  22. package/web-ui/modules/app.methods.task-orchestration.mjs +347 -8
  23. package/web-ui/modules/app.methods.tool-config-permissions.mjs +0 -3
  24. package/web-ui/modules/app.methods.web-ui-preferences.mjs +442 -68
  25. package/web-ui/modules/config-template-confirm-pref.mjs +2 -3
  26. package/web-ui/modules/i18n/locales/en.mjs +181 -30
  27. package/web-ui/modules/i18n/locales/ja.mjs +178 -27
  28. package/web-ui/modules/i18n/locales/vi.mjs +180 -29
  29. package/web-ui/modules/i18n/locales/zh-tw.mjs +181 -30
  30. package/web-ui/modules/i18n/locales/zh.mjs +183 -32
  31. package/web-ui/modules/i18n.mjs +5 -12
  32. package/web-ui/modules/sessions-filters-url.mjs +1 -2
  33. package/web-ui/partials/index/layout-header.html +44 -38
  34. package/web-ui/partials/index/modals-basic.html +26 -0
  35. package/web-ui/partials/index/panel-orchestration.html +489 -282
  36. package/web-ui/partials/index/panel-prompts.html +66 -3
  37. package/web-ui/res/web-ui-render.precompiled.js +1181 -604
  38. package/web-ui/styles/layout-shell.css +157 -1
  39. package/web-ui/styles/modals-core.css +173 -0
  40. package/web-ui/styles/navigation-panels.css +11 -0
  41. package/web-ui/styles/responsive.css +32 -0
  42. package/web-ui/styles/task-orchestration.css +2161 -4
@@ -5,9 +5,9 @@
5
5
  id="panel-prompts"
6
6
  role="tabpanel"
7
7
  aria-labelledby="tab-prompts">
8
- <div class="segmented-control">
9
- <button type="button" :class="['segment', { active: promptsSubTab === 'codex' }]" @click="switchPromptsSubTab('codex')">{{ t('prompts.subTab.codex') }}</button>
10
- <button type="button" :class="['segment', { active: promptsSubTab === 'claude-project' }]" @click="switchPromptsSubTab('claude-project')">{{ t('prompts.subTab.project') }}</button>
8
+ <div class="prompts-md-tabs" role="tablist" :aria-label="t('tab.prompts')">
9
+ <button type="button" :class="['prompts-md-tab', { active: promptsSubTab === 'codex' }]" role="tab" :aria-selected="promptsSubTab === 'codex'" @click="switchPromptsSubTab('codex')">{{ t('prompts.subTab.codex') }}</button>
10
+ <button type="button" :class="['prompts-md-tab', { active: promptsSubTab === 'claude-project' }]" role="tab" :aria-selected="promptsSubTab === 'claude-project'" @click="switchPromptsSubTab('claude-project')">{{ t('prompts.subTab.project') }}</button>
11
11
  </div>
12
12
 
13
13
  <div v-if="promptsSubTab === 'claude-project'" class="project-path-selector">
@@ -32,6 +32,7 @@
32
32
  </div>
33
33
  </div>
34
34
 
35
+
35
36
  <div class="prompts-editor">
36
37
  <div class="prompts-editor-toolbar">
37
38
  <div class="form-hint">
@@ -83,6 +84,68 @@
83
84
  </div>
84
85
  </div>
85
86
  </div>
87
+ <div class="prompt-presets-inline-row">
88
+ <div class="prompt-presets-inline-group">
89
+ <label class="prompt-presets-inline-label">{{ t('prompts.presets.title') }}</label>
90
+ <select
91
+ class="form-input prompt-presets-select"
92
+ :disabled="agentsLoading || agentsSaving || agentsDiffVisible || !promptPresets.length"
93
+ :title="t('prompts.presets.title')"
94
+ @change="applyPromptPresetSelection($event)">
95
+ <option value="">{{ t('prompts.presets.selectPlaceholder') }}</option>
96
+ <option v-for="preset in promptPresets" :key="preset.id" :value="preset.id">{{ preset.name }}</option>
97
+ </select>
98
+ </div>
99
+ <div class="prompt-presets-inline-group prompt-presets-inline-group--save">
100
+ <input
101
+ type="text"
102
+ class="form-input prompt-presets-name-input"
103
+ v-model="promptPresetNameDraft"
104
+ :placeholder="t('prompts.presets.namePlaceholder')"
105
+ :disabled="agentsLoading || agentsSaving || agentsDiffVisible"
106
+ @keydown.enter.prevent="saveCurrentPromptAsPreset">
107
+ <button
108
+ type="button"
109
+ class="btn-mini btn-confirm-mini"
110
+ @click="saveCurrentPromptAsPreset"
111
+ :disabled="promptPresetSaving || agentsLoading || agentsSaving || agentsDiffVisible"
112
+ :title="t('prompts.presets.saveCurrent')">
113
+ {{ t('prompts.presets.saveCurrent') }}
114
+ </button>
115
+ </div>
116
+ </div>
117
+ <details class="prompt-presets-panel">
118
+ <summary class="prompt-presets-summary">
119
+ <span>{{ t('prompts.presets.title') }}</span>
120
+ <small>{{ t('prompts.presets.hint') }}</small>
121
+ </summary>
122
+ <div class="form-group prompt-presets-body">
123
+ <div class="editor-frame prompt-presets-frame">
124
+ <div v-if="!promptPresets.length" class="state-message prompt-presets-empty">{{ t('prompts.presets.empty') }}</div>
125
+ <div v-else class="prompt-presets-list">
126
+ <article v-for="preset in promptPresets" :key="preset.id" class="prompt-preset-row">
127
+ <div class="prompt-preset-main">
128
+ <input
129
+ type="text"
130
+ class="form-input prompt-preset-name"
131
+ :value="getPromptPresetRenameDraft(preset)"
132
+ @input="setPromptPresetRenameDraft(preset.id, $event.target.value)"
133
+ @keydown.enter.prevent="renamePromptPreset(preset)"
134
+ :aria-label="t('prompts.presets.renameAria')">
135
+ <div class="form-hint">{{ t('prompts.presets.updatedAt', { time: formatPromptPresetTime(preset.updatedAt) }) }}</div>
136
+ <pre class="prompt-preset-preview">{{ preset.content }}</pre>
137
+ </div>
138
+ <div class="prompts-editor-actions prompt-preset-actions">
139
+ <button type="button" class="btn-mini" @click="renamePromptPreset(preset)">{{ t('common.save') }}</button>
140
+ <button type="button" class="btn-mini" @click="applyPromptPresetToEditor(preset)">{{ t('common.paste') }}</button>
141
+ <button type="button" class="btn-mini btn-danger-mini" @click="deletePromptPreset(preset)">{{ t('common.delete') }}</button>
142
+ </div>
143
+ </article>
144
+ </div>
145
+ </div>
146
+ </div>
147
+ </details>
148
+
86
149
 
87
150
  <div class="form-group">
88
151
  <div v-if="agentsDiffVisible">