codexmate 0.1.7 → 0.1.8
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/cli/system-prompt-files.js +177 -0
- package/cli.js +27 -0
- package/package.json +1 -1
- package/web-ui/app.js +19 -0
- package/web-ui/modules/app.computed.session.mjs +1 -1
- package/web-ui/modules/app.methods.agents.mjs +5 -12
- package/web-ui/modules/app.methods.index.mjs +2 -0
- package/web-ui/modules/app.methods.session-browser.mjs +21 -1
- package/web-ui/modules/app.methods.system-prompt.mjs +294 -0
- package/web-ui/modules/i18n/locales/en.mjs +11 -0
- package/web-ui/modules/i18n/locales/ja.mjs +11 -0
- package/web-ui/modules/i18n/locales/vi.mjs +11 -0
- package/web-ui/modules/i18n/locales/zh-tw.mjs +11 -0
- package/web-ui/modules/i18n/locales/zh.mjs +11 -0
- package/web-ui/modules/request-token.mjs +9 -0
- package/web-ui/partials/index/panel-prompts.html +96 -1
- package/web-ui/res/web-ui-render.precompiled.js +554 -285
- package/web-ui/styles/responsive.css +18 -0
- package/web-ui/styles/sessions-usage.css +20 -1
- package/web-ui/styles/system-prompt.css +23 -0
- package/web-ui/styles.css +1 -0
|
@@ -231,6 +231,7 @@ const en = Object.freeze({
|
|
|
231
231
|
'subtitle.prompts': 'Edit AGENTS.md and CLAUDE.md.',
|
|
232
232
|
'prompts.subTab.codex': 'AGENTS.md (Codex)',
|
|
233
233
|
'prompts.subTab.project': 'CLAUDE.md',
|
|
234
|
+
'prompts.subTab.system': 'System Prompt',
|
|
234
235
|
'prompts.subTab.presets': 'Preset pool',
|
|
235
236
|
'prompts.presets.title': 'Presets',
|
|
236
237
|
'prompts.presets.hint': 'Manage presets.',
|
|
@@ -1575,6 +1576,16 @@ const en = Object.freeze({
|
|
|
1575
1576
|
'kilocode.writeRequired': 'Enable KiloCode write access first',
|
|
1576
1577
|
'kilocode.saved': 'KiloCode config saved',
|
|
1577
1578
|
'kilocode.autoSaved': 'KiloCode config synced',
|
|
1579
|
+
'sysPrompt.scope.label': 'Scope',
|
|
1580
|
+
'sysPrompt.scope.global': 'Global (~/.pi/agent/)',
|
|
1581
|
+
'sysPrompt.scope.project': 'Project (<cwd>/.pi/)',
|
|
1582
|
+
'sysPrompt.mode.label': 'Mode',
|
|
1583
|
+
'sysPrompt.mode.append': 'Append to default prompt (APPEND_SYSTEM.md)',
|
|
1584
|
+
'sysPrompt.mode.system': 'Replace default prompt (SYSTEM.md)',
|
|
1585
|
+
'sysPrompt.placeholder': 'Type system prompt content here…',
|
|
1586
|
+
'sysPrompt.hint.unsaved': 'Unsaved changes detected',
|
|
1587
|
+
'sysPrompt.hint.twoStepSave': 'Click preview to see the diff, then confirm to save.',
|
|
1588
|
+
'sysPrompt.toast.saved': 'System prompt saved',
|
|
1578
1589
|
});
|
|
1579
1590
|
|
|
1580
1591
|
export { en };
|
|
@@ -232,6 +232,7 @@ const ja = Object.freeze({
|
|
|
232
232
|
'subtitle.prompts': 'AGENTS.md と CLAUDE.md を編集。',
|
|
233
233
|
'prompts.subTab.codex': 'AGENTS.md (Codex)',
|
|
234
234
|
'prompts.subTab.project': 'CLAUDE.md',
|
|
235
|
+
'prompts.subTab.system': 'System Prompt',
|
|
235
236
|
'prompts.subTab.presets': 'プリセット',
|
|
236
237
|
'prompts.presets.title': 'プリセット',
|
|
237
238
|
'prompts.presets.hint': 'プリセットを管理します。',
|
|
@@ -1576,6 +1577,16 @@ const ja = Object.freeze({
|
|
|
1576
1577
|
'kilocode.writeRequired': '先に KiloCode の書き込みを有効化してください',
|
|
1577
1578
|
'kilocode.saved': 'KiloCode 設定を保存しました',
|
|
1578
1579
|
'kilocode.autoSaved': 'KiloCode 設定を同期しました',
|
|
1580
|
+
'sysPrompt.scope.label': 'スコープ',
|
|
1581
|
+
'sysPrompt.scope.global': 'グローバル (~/.pi/agent/)',
|
|
1582
|
+
'sysPrompt.scope.project': 'プロジェクト (<cwd>/.pi/)',
|
|
1583
|
+
'sysPrompt.mode.label': 'モード',
|
|
1584
|
+
'sysPrompt.mode.append': 'デフォルトに追加 (APPEND_SYSTEM.md)',
|
|
1585
|
+
'sysPrompt.mode.system': 'デフォルトを置換 (SYSTEM.md)',
|
|
1586
|
+
'sysPrompt.placeholder': 'システムプロンプトの内容を入力…',
|
|
1587
|
+
'sysPrompt.hint.unsaved': '未保存の変更があります',
|
|
1588
|
+
'sysPrompt.hint.twoStepSave': 'プレビューで差分を確認し、確認後に保存します。',
|
|
1589
|
+
'sysPrompt.toast.saved': 'System prompt を保存しました',
|
|
1579
1590
|
});
|
|
1580
1591
|
|
|
1581
1592
|
export { ja };
|
|
@@ -250,6 +250,7 @@ const vi = Object.freeze({
|
|
|
250
250
|
'subtitle.prompts': 'Chỉnh sửa AGENTS.md và CLAUDE.md.',
|
|
251
251
|
'prompts.subTab.codex': 'AGENTS.md (Codex)',
|
|
252
252
|
'prompts.subTab.project': 'CLAUDE.md',
|
|
253
|
+
'prompts.subTab.system': 'System Prompt',
|
|
253
254
|
'prompts.subTab.presets': 'Kho preset',
|
|
254
255
|
'prompts.presets.title': 'Preset',
|
|
255
256
|
'prompts.presets.hint': 'Quản lý preset.',
|
|
@@ -1545,6 +1546,16 @@ const vi = Object.freeze({
|
|
|
1545
1546
|
'kilocode.writeRequired': 'Hãy bật quyền ghi KiloCode trước',
|
|
1546
1547
|
'kilocode.saved': 'Đã lưu cấu hình KiloCode',
|
|
1547
1548
|
'kilocode.autoSaved': 'Đã đồng bộ cấu hình KiloCode',
|
|
1549
|
+
'sysPrompt.scope.label': 'Phạm vi',
|
|
1550
|
+
'sysPrompt.scope.global': 'Toàn cục (~/.pi/agent/)',
|
|
1551
|
+
'sysPrompt.scope.project': 'Dự án (<cwd>/.pi/)',
|
|
1552
|
+
'sysPrompt.mode.label': 'Chế độ',
|
|
1553
|
+
'sysPrompt.mode.append': 'Thêm vào prompt mặc định (APPEND_SYSTEM.md)',
|
|
1554
|
+
'sysPrompt.mode.system': 'Thay thế prompt mặc định (SYSTEM.md)',
|
|
1555
|
+
'sysPrompt.placeholder': 'Nhập nội dung system prompt…',
|
|
1556
|
+
'sysPrompt.hint.unsaved': 'Có thay đổi chưa lưu',
|
|
1557
|
+
'sysPrompt.hint.twoStepSave': 'Nhấn xem trước để xem diff, sau đó xác nhận để lưu.',
|
|
1558
|
+
'sysPrompt.toast.saved': 'Đã lưu system prompt',
|
|
1548
1559
|
});
|
|
1549
1560
|
|
|
1550
1561
|
export { vi };
|
|
@@ -231,6 +231,7 @@ const zhTw = Object.freeze({
|
|
|
231
231
|
'subtitle.prompts': '編輯 AGENTS.md 與 CLAUDE.md。',
|
|
232
232
|
'prompts.subTab.codex': 'AGENTS.md (Codex)',
|
|
233
233
|
'prompts.subTab.project': 'CLAUDE.md',
|
|
234
|
+
'prompts.subTab.system': 'System Prompt',
|
|
234
235
|
'prompts.subTab.presets': '預設池',
|
|
235
236
|
'prompts.presets.title': '預設池',
|
|
236
237
|
'prompts.presets.hint': '管理預設。',
|
|
@@ -1573,6 +1574,16 @@ const zhTw = Object.freeze({
|
|
|
1573
1574
|
'kilocode.writeRequired': '請先開啟 KiloCode 寫入開關',
|
|
1574
1575
|
'kilocode.saved': 'KiloCode 設定已儲存',
|
|
1575
1576
|
'kilocode.autoSaved': 'KiloCode 設定已同步',
|
|
1577
|
+
'sysPrompt.scope.label': '作用域',
|
|
1578
|
+
'sysPrompt.scope.global': '全域 (~/.pi/agent/)',
|
|
1579
|
+
'sysPrompt.scope.project': '專案 (<cwd>/.pi/)',
|
|
1580
|
+
'sysPrompt.mode.label': '模式',
|
|
1581
|
+
'sysPrompt.mode.append': '追加到預設提示詞 (APPEND_SYSTEM.md)',
|
|
1582
|
+
'sysPrompt.mode.system': '替換預設提示詞 (SYSTEM.md)',
|
|
1583
|
+
'sysPrompt.placeholder': '在此輸入 system prompt 內容…',
|
|
1584
|
+
'sysPrompt.hint.unsaved': '有未儲存的變更',
|
|
1585
|
+
'sysPrompt.hint.twoStepSave': '點擊預覽查看差異,確認後儲存。',
|
|
1586
|
+
'sysPrompt.toast.saved': 'System prompt 已儲存',
|
|
1576
1587
|
});
|
|
1577
1588
|
|
|
1578
1589
|
export { zhTw };
|
|
@@ -231,6 +231,7 @@ const zh = Object.freeze({
|
|
|
231
231
|
'subtitle.prompts': '编辑 AGENTS.md 与 CLAUDE.md。',
|
|
232
232
|
'prompts.subTab.codex': 'AGENTS.md (Codex)',
|
|
233
233
|
'prompts.subTab.project': 'CLAUDE.md',
|
|
234
|
+
'prompts.subTab.system': 'System Prompt',
|
|
234
235
|
'prompts.subTab.presets': '预设池',
|
|
235
236
|
'prompts.presets.title': '预设池',
|
|
236
237
|
'prompts.presets.hint': '管理预设。',
|
|
@@ -1573,6 +1574,16 @@ const zh = Object.freeze({
|
|
|
1573
1574
|
'kilocode.writeRequired': '请先打开 KiloCode 写入开关',
|
|
1574
1575
|
'kilocode.saved': 'KiloCode 配置已保存',
|
|
1575
1576
|
'kilocode.autoSaved': 'KiloCode 配置已同步',
|
|
1577
|
+
'sysPrompt.scope.label': '作用域',
|
|
1578
|
+
'sysPrompt.scope.global': '全局 (~/.pi/agent/)',
|
|
1579
|
+
'sysPrompt.scope.project': '项目 (<cwd>/.pi/)',
|
|
1580
|
+
'sysPrompt.mode.label': '模式',
|
|
1581
|
+
'sysPrompt.mode.append': '追加到默认提示词 (APPEND_SYSTEM.md)',
|
|
1582
|
+
'sysPrompt.mode.system': '替换默认提示词 (SYSTEM.md)',
|
|
1583
|
+
'sysPrompt.placeholder': '在此输入 system prompt 内容…',
|
|
1584
|
+
'sysPrompt.hint.unsaved': '有未保存的改动',
|
|
1585
|
+
'sysPrompt.hint.twoStepSave': '点击预览查看差异,确认后保存。',
|
|
1586
|
+
'sysPrompt.toast.saved': 'System prompt 已保存',
|
|
1576
1587
|
});
|
|
1577
1588
|
|
|
1578
1589
|
export { zh };
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
<div class="prompts-md-tabs" role="tablist" :aria-label="t('tab.prompts')">
|
|
9
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
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
|
+
<button type="button" :class="['prompts-md-tab', { active: promptsSubTab === 'system' }]" role="tab" :aria-selected="promptsSubTab === 'system'" @click="switchPromptsSubTab('system')">{{ t('prompts.subTab.system') }}</button>
|
|
11
12
|
</div>
|
|
12
13
|
|
|
13
14
|
<div v-if="promptsSubTab === 'claude-project'" class="project-path-selector">
|
|
@@ -33,7 +34,7 @@
|
|
|
33
34
|
</div>
|
|
34
35
|
|
|
35
36
|
|
|
36
|
-
<div class="prompts-editor">
|
|
37
|
+
<div v-if="promptsSubTab !== 'system'" class="prompts-editor">
|
|
37
38
|
<div class="prompts-editor-toolbar">
|
|
38
39
|
<div class="form-hint">
|
|
39
40
|
{{ agentsPath || t('common.notLoaded') }}
|
|
@@ -189,4 +190,98 @@
|
|
|
189
190
|
</div>
|
|
190
191
|
|
|
191
192
|
</div>
|
|
193
|
+
|
|
194
|
+
<div v-if="promptsSubTab === 'system'">
|
|
195
|
+
<div class="sys-prompt-controls">
|
|
196
|
+
<div class="sys-prompt-control-group">
|
|
197
|
+
<label class="form-label">{{ t('sysPrompt.scope.label') }}</label>
|
|
198
|
+
<select class="form-input sys-prompt-select" :value="sysPromptScope" @change="switchSysPromptScope($event.target.value)" :disabled="sysPromptLoading || sysPromptSaving || sysPromptDiffVisible">
|
|
199
|
+
<option value="global">{{ t('sysPrompt.scope.global') }}</option>
|
|
200
|
+
<option value="project">{{ t('sysPrompt.scope.project') }}</option>
|
|
201
|
+
</select>
|
|
202
|
+
</div>
|
|
203
|
+
<div class="sys-prompt-control-group">
|
|
204
|
+
<label class="form-label">{{ t('sysPrompt.mode.label') }}</label>
|
|
205
|
+
<select class="form-input sys-prompt-select" :value="sysPromptMode" @change="switchSysPromptMode($event.target.value)" :disabled="sysPromptLoading || sysPromptSaving || sysPromptDiffVisible">
|
|
206
|
+
<option value="append">{{ t('sysPrompt.mode.append') }}</option>
|
|
207
|
+
<option value="system">{{ t('sysPrompt.mode.system') }}</option>
|
|
208
|
+
</select>
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
|
|
212
|
+
<div class="prompts-editor">
|
|
213
|
+
<div class="prompts-editor-toolbar">
|
|
214
|
+
<div class="form-hint">
|
|
215
|
+
{{ sysPromptPath || t('common.notLoaded') }}
|
|
216
|
+
<span v-if="sysPromptPath">
|
|
217
|
+
({{ sysPromptExists ? t('common.exists') : t('common.notExistsWillCreateOnSave') }})
|
|
218
|
+
</span>
|
|
219
|
+
</div>
|
|
220
|
+
<div class="prompts-editor-actions">
|
|
221
|
+
<div class="prompts-editor-group prompts-editor-group--secondary">
|
|
222
|
+
<button class="btn-mini" @click="exportSysPromptContent" :disabled="sysPromptLoading || sysPromptSaving || !sysPromptContent" :title="t('modal.agents.export')">
|
|
223
|
+
<svg class="btn-icon-sm" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3v12M8 11l4 4 4-4M4 17v2h16v-2"/></svg>
|
|
224
|
+
</button>
|
|
225
|
+
<button class="btn-mini" @click="copySysPromptContent" :disabled="sysPromptLoading || sysPromptSaving || !sysPromptContent" :title="t('modal.agents.copy')">
|
|
226
|
+
<svg class="btn-icon-sm" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg>
|
|
227
|
+
</button>
|
|
228
|
+
<button class="btn-mini" @click="pasteSysPromptContent" :disabled="sysPromptLoading || sysPromptSaving || sysPromptDiffVisible" :title="t('common.paste')">
|
|
229
|
+
<svg class="btn-icon-sm" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="8" y="2" width="8" height="4" rx="1"/><path d="M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2"/></svg>
|
|
230
|
+
</button>
|
|
231
|
+
</div>
|
|
232
|
+
<div class="prompts-editor-group prompts-editor-group--workflow">
|
|
233
|
+
<button class="btn-mini" @click="cancelSysPromptEdit" :disabled="sysPromptSaving || sysPromptDiffLoading" :title="t('common.cancel')">
|
|
234
|
+
<svg class="btn-icon-sm" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 6L6 18M6 6l12 12"/></svg>
|
|
235
|
+
</button>
|
|
236
|
+
<button v-if="sysPromptDiffVisible" class="btn-mini" @click="resetSysPromptDiffState" :disabled="sysPromptSaving || sysPromptDiffLoading" :title="t('common.backToEdit')">
|
|
237
|
+
<svg class="btn-icon-sm" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M19 12H5M12 19l-7-7 7-7"/></svg>
|
|
238
|
+
</button>
|
|
239
|
+
<button class="btn-mini btn-confirm-mini" @click="applySystemPrompt" :disabled="sysPromptSaving || sysPromptLoading || sysPromptDiffLoading || (!sysPromptDiffVisible && !hasSysPromptContentChanged()) || (sysPromptDiffVisible && !sysPromptDiffHasChangesValue)" :title="sysPromptDiffVisible ? t('common.save') : t('common.preview')">
|
|
240
|
+
<svg v-if="sysPromptDiffVisible" class="btn-icon-sm" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 6L9 17l-5-5"/></svg>
|
|
241
|
+
<svg v-else class="btn-icon-sm" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>
|
|
242
|
+
</button>
|
|
243
|
+
</div>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
<div class="form-group">
|
|
247
|
+
<div v-if="sysPromptDiffVisible">
|
|
248
|
+
<div
|
|
249
|
+
v-if="!sysPromptDiffLoading && !sysPromptDiffError && !sysPromptDiffTruncated && (sysPromptDiffStats.added || sysPromptDiffStats.removed)"
|
|
250
|
+
class="agents-diff-summary">
|
|
251
|
+
<span class="agents-diff-stat add">+{{ sysPromptDiffStats.added }}</span>
|
|
252
|
+
<span class="agents-diff-stat del">-{{ sysPromptDiffStats.removed }}</span>
|
|
253
|
+
</div>
|
|
254
|
+
<div v-if="sysPromptDiffLoading" class="state-message">{{ t('diff.generating') }}</div>
|
|
255
|
+
<div v-else-if="sysPromptDiffError" class="state-message error">{{ sysPromptDiffError }}</div>
|
|
256
|
+
<div v-else-if="sysPromptDiffTruncated" class="agents-diff-empty">{{ t('diff.tooLargeSkip') }}</div>
|
|
257
|
+
<div v-else-if="!sysPromptDiffHasChangesValue" class="agents-diff-empty">{{ t('diff.noChanges') }}</div>
|
|
258
|
+
<div v-else class="agents-diff-view agents-diff-editor">
|
|
259
|
+
<div
|
|
260
|
+
v-for="(line, index) in sysPromptDiffLines"
|
|
261
|
+
:key="'sys-prompt-diff-' + index"
|
|
262
|
+
:class="['agents-diff-line', line.type]">
|
|
263
|
+
<span class="agents-diff-line-sign">
|
|
264
|
+
{{ line.type === 'add' ? '+' : (line.type === 'del' ? '-' : ' ') }}
|
|
265
|
+
</span>
|
|
266
|
+
<span class="agents-diff-line-text">{{ line.value }}</span>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
<div :class="['editor-frame', { 'editor-frame--loading': sysPromptLoading }]">
|
|
271
|
+
<div v-if="sysPromptLoading" class="editor-skeleton">
|
|
272
|
+
<div class="skeleton-line" v-for="i in 6" :key="i"></div>
|
|
273
|
+
</div>
|
|
274
|
+
<textarea
|
|
275
|
+
v-model="sysPromptContent"
|
|
276
|
+
class="form-input template-editor"
|
|
277
|
+
spellcheck="false"
|
|
278
|
+
:readonly="sysPromptLoading || sysPromptSaving || sysPromptDiffVisible"
|
|
279
|
+
:placeholder="t('sysPrompt.placeholder')"></textarea>
|
|
280
|
+
</div>
|
|
281
|
+
<div v-if="sysPromptContextHint()" :class="['prompts-context-hint', { 'prompts-context-hint--warn': sysPromptContextHint().warn }]">
|
|
282
|
+
{{ sysPromptContextHint().text }}
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
</div>
|
|
192
287
|
</div>
|