@wangzhizhi/remi 0.0.1-alpha.1 → 0.1.224
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 +3 -3
- package/dist/accentColor.js +28 -0
- package/dist/help.js +10 -2
- package/dist/i18n.js +171 -59
- package/dist/initPrompt.js +3 -1
- package/dist/permissions.js +75 -8
- package/dist/repl.js +91 -21
- package/dist/statusCard.js +131 -0
- package/dist/statusline.js +4 -2
- package/dist/style.js +9 -12
- package/dist/tui/RemiApp.js +620 -56
- package/dist/tui/commands.js +90 -8
- package/dist/tui/hooksPanel.js +164 -0
- package/dist/tui/index.js +27 -2
- package/dist/tui/pastedText.js +82 -0
- package/dist/tui/renderers/Header.js +2 -2
- package/dist/tui/renderers/MessageList.js +525 -81
- package/dist/tui/renderers/PromptBox.js +12 -3
- package/dist/tui/renderers/StatusLine.js +19 -5
- package/dist/tui/renderers/WorkingIndicator.js +20 -11
- package/dist/tui/statusStats.js +420 -0
- package/dist/tui/theme.js +45 -3
- package/dist/usage.js +3 -0
- package/dist/version.js +1 -1
- package/node_modules/@remi/compact/dist/index.js +5 -3
- package/node_modules/@remi/compact/package.json +1 -1
- package/node_modules/@remi/config/dist/index.js +87 -16
- package/node_modules/@remi/config/package.json +1 -1
- package/node_modules/@remi/core/dist/contextBuilder.js +174 -41
- package/node_modules/@remi/core/dist/directoryOverview.js +14 -9
- package/node_modules/@remi/core/dist/index.js +1197 -167
- package/node_modules/@remi/core/dist/projectInstructions.js +1 -1
- package/node_modules/@remi/core/dist/responseStyles.js +62 -31
- package/node_modules/@remi/core/package.json +1 -1
- package/node_modules/@remi/hooks/dist/index.js +229 -0
- package/node_modules/@remi/hooks/package.json +8 -0
- package/node_modules/@remi/llm/dist/index.js +41 -6
- package/node_modules/@remi/llm/package.json +1 -1
- package/node_modules/@remi/memory/dist/index.js +166 -46
- package/node_modules/@remi/memory/package.json +1 -1
- package/node_modules/@remi/permissions/package.json +1 -1
- package/node_modules/@remi/sessions/dist/index.js +6 -2
- package/node_modules/@remi/sessions/package.json +1 -1
- package/node_modules/@remi/skills/dist/index.js +36 -10
- package/node_modules/@remi/skills/package.json +1 -1
- package/node_modules/@remi/terminal-markdown/dist/index.js +87 -14
- package/node_modules/@remi/terminal-markdown/package.json +1 -1
- package/node_modules/@remi/tools/dist/index.js +573 -8
- package/node_modules/@remi/tools/package.json +1 -1
- package/package.json +13 -11
- package/prompt/base-system.md +86 -8
- package/prompt/tool-use-system.md +225 -30
package/README.md
CHANGED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { loadRemiConfig, readProjectRemiConfig, writeProjectRemiConfig } from '@remi/config';
|
|
2
|
+
import { accentColorLabel, accentColorOptions, defaultAccentColorId, resolveAccentColorId, } from './tui/theme.js';
|
|
3
|
+
import { t } from './i18n.js';
|
|
4
|
+
export function accentColorPanelOptions() {
|
|
5
|
+
return accentColorOptions;
|
|
6
|
+
}
|
|
7
|
+
export function parseAccentColorArg(value) {
|
|
8
|
+
if (!value) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const normalized = value.trim().toLowerCase();
|
|
12
|
+
return accentColorOptions.find(option => option.id === normalized || option.label.toLowerCase() === normalized)?.id;
|
|
13
|
+
}
|
|
14
|
+
export function resolveConfiguredAccentColor(cwd) {
|
|
15
|
+
try {
|
|
16
|
+
return resolveAccentColorId(loadRemiConfig({ cwd }).config.accentColor);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return defaultAccentColorId;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function saveProjectAccentColor(cwd, colorId) {
|
|
23
|
+
const config = readProjectRemiConfig(cwd);
|
|
24
|
+
writeProjectRemiConfig({ ...config, accentColor: colorId }, cwd);
|
|
25
|
+
}
|
|
26
|
+
export function formatAccentColorChanged(colorId, saved = false, language) {
|
|
27
|
+
return t(language, saved ? 'accentColor.saved' : 'accentColor.selected', { label: accentColorLabel(colorId) });
|
|
28
|
+
}
|
package/dist/help.js
CHANGED
|
@@ -16,12 +16,20 @@ export function formatHelp() {
|
|
|
16
16
|
' remi --version Show version',
|
|
17
17
|
'',
|
|
18
18
|
'TUI commands:',
|
|
19
|
+
' /accent-color Choose accent color',
|
|
20
|
+
' /code-panel Choose code panel colors',
|
|
21
|
+
' /compact Compact this session',
|
|
22
|
+
' /exit Exit',
|
|
23
|
+
' /hooks Browse configured hooks',
|
|
19
24
|
' /init Create AGENTS.md repository instructions',
|
|
25
|
+
' /language Choose interface language',
|
|
20
26
|
' /model Show configured model aliases',
|
|
21
27
|
' /new Start a new session',
|
|
22
28
|
' /permissions Choose permissions and approval behavior',
|
|
29
|
+
' /personality Choose response personality',
|
|
30
|
+
' /skills Manage local Remi skills',
|
|
31
|
+
' /stat Show global usage stats',
|
|
32
|
+
' /status Show session status',
|
|
23
33
|
' /statusline Choose status line fields',
|
|
24
|
-
' /style Choose response style',
|
|
25
|
-
' /exit Exit',
|
|
26
34
|
].join('\n');
|
|
27
35
|
}
|
package/dist/i18n.js
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { loadRemiConfig, readProjectRemiConfig, writeProjectRemiConfig } from '@remi/config';
|
|
2
2
|
export const defaultLanguage = 'en';
|
|
3
3
|
export const supportedLanguages = [
|
|
4
|
-
{ code: 'zh-Hans', label: '简体中文', description: '使用简体中文显示 Remi 系统提示语。' },
|
|
5
4
|
{ code: 'en', label: 'English', description: 'Use English for Remi system messages.' },
|
|
5
|
+
{ code: 'zh-Hans', label: '简体中文', description: '使用简体中文显示 Remi 系统提示语。' },
|
|
6
6
|
];
|
|
7
7
|
const dictionaries = {
|
|
8
8
|
en: {
|
|
9
9
|
'slash.init.description': 'Create an AGENTS.md file with repository instructions',
|
|
10
10
|
'slash.model.description': 'Choose what model and reasoning effort to use',
|
|
11
11
|
'slash.permissions.description': 'Choose model permissions and approval behavior',
|
|
12
|
-
'slash.
|
|
13
|
-
'slash.
|
|
12
|
+
'slash.hooks.description': 'Browse configured hooks',
|
|
13
|
+
'slash.personality.description': 'Choose Remi personality',
|
|
14
|
+
'slash.codePanel.description': 'Choose code panel colors',
|
|
15
|
+
'slash.accentColor.description': 'Choose accent color',
|
|
16
|
+
'slash.stat.description': 'Show global usage stats',
|
|
17
|
+
'slash.status.description': 'Show session status',
|
|
14
18
|
'slash.statusline.description': 'Choose status line fields',
|
|
15
19
|
'slash.skills.description': 'Manage and load local Remi skills',
|
|
16
20
|
'slash.language.description': 'Choose interface language',
|
|
@@ -19,40 +23,51 @@ const dictionaries = {
|
|
|
19
23
|
'slash.exit.description': 'Exit Remi',
|
|
20
24
|
'command.unknown': 'Unknown command: {{command}}',
|
|
21
25
|
'version.message': 'Remi is running version {{version}}.',
|
|
22
|
-
'style.panel.title': 'Select
|
|
23
|
-
'style.panel.subtitle': 'Session
|
|
26
|
+
'style.panel.title': 'Select Personality',
|
|
27
|
+
'style.panel.subtitle': 'Session personality for model replies. It does not change model selection.',
|
|
24
28
|
'style.current': 'current',
|
|
25
|
-
'style.selected': '
|
|
26
|
-
'style.saved': '
|
|
27
|
-
'style.
|
|
28
|
-
'style.
|
|
29
|
-
'style.description.
|
|
30
|
-
'style.description.
|
|
31
|
-
'style.description.mentor': '
|
|
32
|
-
'style.description.minimal': '
|
|
33
|
-
'theme.panel.title': 'Select
|
|
34
|
-
'theme.panel.subtitle': 'Move up/down to live preview code
|
|
29
|
+
'style.selected': 'Personality selected: {{label}}.',
|
|
30
|
+
'style.saved': 'Personality saved: {{label}}.',
|
|
31
|
+
'style.closed': 'Personality selection closed without saving.',
|
|
32
|
+
'style.unknown': 'Unknown personality: {{style}}. Run /personality to choose.',
|
|
33
|
+
'style.description.friendly': 'Warm, collaborative, and helpful.',
|
|
34
|
+
'style.description.pragmatic': 'Concise, task-focused, and direct.',
|
|
35
|
+
'style.description.mentor': 'Explains reasoning and tradeoffs.',
|
|
36
|
+
'style.description.minimal': 'Fewest words possible.',
|
|
37
|
+
'theme.panel.title': 'Select Code Panel',
|
|
38
|
+
'theme.panel.subtitle': 'Move up/down to live preview code colors.',
|
|
35
39
|
'theme.panel.search': 'Type to filter themes',
|
|
36
|
-
'theme.panel.help': 'Press enter to confirm
|
|
40
|
+
'theme.panel.help': 'Press enter to confirm; Ctrl-C/Esc to go back',
|
|
37
41
|
'theme.current': 'current',
|
|
38
|
-
'theme.selected': '
|
|
39
|
-
'theme.saved': '
|
|
40
|
-
'theme.closed': '
|
|
41
|
-
'theme.unknown': 'Unknown
|
|
42
|
+
'theme.selected': 'Code panel selected: {{label}}.',
|
|
43
|
+
'theme.saved': 'Code panel saved: {{label}}.',
|
|
44
|
+
'theme.closed': 'Code panel settings closed without saving.',
|
|
45
|
+
'theme.unknown': 'Unknown code panel: {{theme}}. Run /code-panel to choose.',
|
|
46
|
+
'accentColor.panel.title': 'Select Accent Color',
|
|
47
|
+
'accentColor.panel.subtitle': 'Move up/down to preview interface accent.',
|
|
48
|
+
'accentColor.current': 'current',
|
|
49
|
+
'accentColor.help': 'Press enter to confirm; Ctrl-C/Esc to go back',
|
|
50
|
+
'accentColor.selected': 'Accent color selected: {{label}}.',
|
|
51
|
+
'accentColor.saved': 'Accent color saved: {{label}}.',
|
|
52
|
+
'accentColor.closed': 'Accent color settings closed without saving.',
|
|
53
|
+
'accentColor.unknown': 'Unknown accent color: {{color}}. Run /accent-color to choose.',
|
|
42
54
|
'language.panel.title': 'Select Language',
|
|
43
55
|
'language.panel.subtitle': 'Choose the language for Remi system messages.',
|
|
44
56
|
'language.current': 'current',
|
|
45
57
|
'language.saved': 'Language saved: {{label}}.',
|
|
58
|
+
'language.closed': 'Language selection closed without saving.',
|
|
46
59
|
'language.unknown': 'Unknown language: {{language}}. Run /language to choose.',
|
|
47
60
|
'model.panel.title': 'Select Model and Effort',
|
|
48
61
|
'model.panel.subtitle': 'Current profile {{profile}} / main uses {{model}} / effort {{effort}}',
|
|
49
62
|
'model.current': 'current',
|
|
50
63
|
'model.selected': 'Model selected: {{label}}.',
|
|
64
|
+
'model.closed': 'Model selection closed without saving.',
|
|
51
65
|
'model.error.load': 'Failed to load model configuration',
|
|
52
66
|
'permissions.panel.title': 'Update Model Permissions',
|
|
53
67
|
'permissions.panel.subtitle': 'Choose how Remi handles local files, shell execution, and approval requests.',
|
|
54
68
|
'permissions.current': 'current',
|
|
55
69
|
'permissions.saved': 'Permission profile saved: {{label}}.',
|
|
70
|
+
'permissions.closed': 'Permission profile selection closed without saving.',
|
|
56
71
|
'permissions.unknown': 'Unknown permission profile: {{profile}}. Run /permissions to choose.',
|
|
57
72
|
'permissions.profile.default.label': 'Default',
|
|
58
73
|
'permissions.profile.default.description': 'Remi can read and edit files in the current workspace, and requests approval for shell execution, internet, or other files.',
|
|
@@ -67,12 +82,22 @@ const dictionaries = {
|
|
|
67
82
|
'permission.request.action.editFileIn': 'Edit files in {{directory}}',
|
|
68
83
|
'permission.request.action.modifyFilesIn': 'Modify files in {{directory}}',
|
|
69
84
|
'permission.request.action.target': 'Target: {{path}}',
|
|
85
|
+
'permission.request.action.webSearch': 'Search the web',
|
|
86
|
+
'permission.request.action.webFetch': 'Fetch web page',
|
|
87
|
+
'permission.request.action.query': 'Query: {{query}}',
|
|
88
|
+
'permission.request.action.url': 'URL: {{url}}',
|
|
70
89
|
'permission.request.path.currentDirectory': 'the current directory',
|
|
71
|
-
'permission.request.persist':
|
|
72
|
-
'permission.request.persistRule':
|
|
73
|
-
'permission.request.sessionRule': '
|
|
74
|
-
'permission.request.once': '
|
|
75
|
-
'permission.request.deny': '
|
|
90
|
+
'permission.request.persist': 'Always allow',
|
|
91
|
+
'permission.request.persistRule': 'Always allow',
|
|
92
|
+
'permission.request.sessionRule': 'Allow for this session',
|
|
93
|
+
'permission.request.once': 'Allow',
|
|
94
|
+
'permission.request.deny': 'Cancel',
|
|
95
|
+
'permission.request.onceDescription': 'Run the tool and continue.',
|
|
96
|
+
'permission.request.sessionDescription': 'Run the tool and remember this choice for this session.',
|
|
97
|
+
'permission.request.sessionRuleDescription': 'Remember this choice for this session for {{rule}}.',
|
|
98
|
+
'permission.request.persistDescription': 'Run the tool and remember this choice for future matching tool calls.',
|
|
99
|
+
'permission.request.persistRuleDescription': 'Remember this choice for future tool calls matching {{rule}}.',
|
|
100
|
+
'permission.request.denyDescription': 'Cancel this tool call.',
|
|
76
101
|
'permission.request.help': 'Press enter to confirm or esc to cancel',
|
|
77
102
|
'permission.rule.prefix': 'commands that start with `{{prefix}}`',
|
|
78
103
|
'permission.rule.scoped': 'commands that start with `{{prefix}}` in `{{cwd}}`',
|
|
@@ -80,32 +105,59 @@ const dictionaries = {
|
|
|
80
105
|
'permission.rule.multipleScoped': 'commands that start with {{prefixes}} in `{{cwd}}`',
|
|
81
106
|
'permission.rule.filesystem': 'file changes under `{{root}}`',
|
|
82
107
|
'permission.rule.filesystemOperations': '{{operations}} files under `{{root}}`',
|
|
108
|
+
'permission.rule.networkTool': '{{tool}}',
|
|
109
|
+
'permission.reason.web_search': 'Queries public web search. Network permission is required before execution.',
|
|
110
|
+
'permission.reason.web_fetch': 'Fetches a public web page. Network permission is required before execution.',
|
|
83
111
|
'permission.savedRule': 'Allowed this session for commands that start with `{{prefix}}`.',
|
|
84
112
|
'permission.savedRules': 'Allowed this session for {{rule}}.',
|
|
85
113
|
'permission.savedPersistentRules': 'Always allowed {{rule}}.',
|
|
114
|
+
'askUserQuestion.customLabel': 'Type your decision',
|
|
115
|
+
'askUserQuestion.customPlaceholder': 'Type something',
|
|
116
|
+
'askUserQuestion.help': 'Enter to select · ↑/↓ to navigate · Esc/Ctrl-C to cancel',
|
|
117
|
+
'askUserQuestion.selected': 'Decision selected: {{label}}.',
|
|
118
|
+
'askUserQuestion.custom': 'Decision typed: {{text}}.',
|
|
119
|
+
'askUserQuestion.cancelled': 'Decision question cancelled.',
|
|
86
120
|
'statusline.panel.title': 'Configure Status Line',
|
|
87
121
|
'statusline.panel.subtitle': 'Select which items to display in the status line.',
|
|
88
122
|
'statusline.panel.search': 'Type to search',
|
|
89
|
-
'statusline.panel.help': 'Press space to toggle; ↑/↓ to move; enter to save and close;
|
|
123
|
+
'statusline.panel.help': 'Press space to toggle; ↑/↓ to move; enter to save and close; Ctrl-C/Esc to close',
|
|
90
124
|
'statusline.saved': 'Status line saved: {{items}}.',
|
|
91
125
|
'statusline.closed': 'Status line settings closed without saving.',
|
|
92
126
|
'statusline.context': 'Context',
|
|
93
127
|
'statusline.used': 'used',
|
|
94
128
|
'statusline.input': 'input',
|
|
95
129
|
'statusline.output': 'output',
|
|
130
|
+
'statusline.cacheHit': 'cache hit',
|
|
96
131
|
'statusline.catalog.model': 'Current main model',
|
|
97
132
|
'statusline.catalog.cwd': 'Current working directory',
|
|
98
133
|
'statusline.catalog.git-branch': 'Current Git branch (hidden when unavailable)',
|
|
99
134
|
'statusline.catalog.branch-changes': 'Working tree line changes, such as +8 -1',
|
|
100
135
|
'statusline.catalog.context-remaining': 'Percentage of context window remaining',
|
|
101
|
-
'statusline.catalog.used-tokens': '
|
|
102
|
-
'statusline.catalog.total-input-tokens': '
|
|
136
|
+
'statusline.catalog.used-tokens': 'Non-cached input plus output tokens in the current session',
|
|
137
|
+
'statusline.catalog.total-input-tokens': 'Non-cached input tokens with cached input shown separately',
|
|
103
138
|
'statusline.catalog.total-output-tokens': 'Total output tokens used in the current session',
|
|
139
|
+
'statusline.catalog.cache-hit-rate': 'Cached input share for the current session',
|
|
104
140
|
'statusline.catalog.run-state': 'Compact session run-state text',
|
|
105
141
|
'statusline.catalog.permissions': 'Current permission profile',
|
|
142
|
+
'status.card.model': 'Model',
|
|
143
|
+
'status.card.directory': 'Directory',
|
|
144
|
+
'status.card.permissions': 'Permissions',
|
|
145
|
+
'status.card.agents': 'Agents.md',
|
|
146
|
+
'status.card.session': 'Session',
|
|
147
|
+
'status.card.personality': 'Personality',
|
|
148
|
+
'status.card.gitBranch': 'Git branch',
|
|
149
|
+
'status.card.reasoning': 'reasoning',
|
|
150
|
+
'status.card.unconfigured': 'unconfigured',
|
|
151
|
+
'status.card.noSession': 'none',
|
|
152
|
+
'status.card.noBranch': 'none',
|
|
153
|
+
'status.card.none': 'none',
|
|
154
|
+
'status.card.permissions.workspaceOnRequest': 'Workspace (on-request)',
|
|
155
|
+
'status.card.permissions.workspaceAutoReview': 'Workspace (auto-review)',
|
|
156
|
+
'status.card.permissions.fullAccess': 'Full Access (bypass)',
|
|
157
|
+
'status.card.permissions.readOnly': 'Read Only',
|
|
106
158
|
'skills.panel.title': 'Skills',
|
|
107
159
|
'skills.panel.subtitle': 'Choose an action',
|
|
108
|
-
'skills.panel.help': 'Press enter to confirm
|
|
160
|
+
'skills.panel.help': 'Press enter to confirm; Ctrl-C/Esc to go back',
|
|
109
161
|
'skills.panel.list': 'List skills',
|
|
110
162
|
'skills.panel.listDescription': 'Tip: press $ to open this list directly.',
|
|
111
163
|
'skills.panel.toggle': 'Enable/Disable Skills',
|
|
@@ -121,6 +173,7 @@ const dictionaries = {
|
|
|
121
173
|
'tool.action.list': 'List',
|
|
122
174
|
'tool.action.read': 'Read',
|
|
123
175
|
'tool.action.search': 'Search',
|
|
176
|
+
'tool.action.fetch': 'Fetch',
|
|
124
177
|
'tool.action.find': 'Find',
|
|
125
178
|
'tool.action.create': 'Create',
|
|
126
179
|
'tool.action.exists': 'Exists',
|
|
@@ -128,18 +181,21 @@ const dictionaries = {
|
|
|
128
181
|
'tool.action.edit': 'Edit',
|
|
129
182
|
'tool.action.delete': 'Delete',
|
|
130
183
|
'tool.action.run': 'Run',
|
|
184
|
+
'tool.action.ask': 'Ask',
|
|
131
185
|
'tool.action.planUpdate': 'Plan update',
|
|
132
186
|
'tool.action.done': 'Done',
|
|
133
187
|
'tool.action.completed': 'Completed',
|
|
134
188
|
'tool.running.listing': 'Listing',
|
|
135
189
|
'tool.running.reading': 'Reading',
|
|
136
190
|
'tool.running.searching': 'Searching',
|
|
191
|
+
'tool.running.fetching': 'Fetching',
|
|
137
192
|
'tool.running.finding': 'Finding',
|
|
138
193
|
'tool.running.creating': 'Creating',
|
|
139
194
|
'tool.running.writing': 'Writing',
|
|
140
195
|
'tool.running.editing': 'Editing',
|
|
141
196
|
'tool.running.deleting': 'Deleting',
|
|
142
197
|
'tool.running.running': 'Running',
|
|
198
|
+
'tool.running.asking': 'Asking',
|
|
143
199
|
'tool.running.updatingPlan': 'Updating plan',
|
|
144
200
|
'tool.count.directory.one': 'directory',
|
|
145
201
|
'tool.count.directory.other': 'directories',
|
|
@@ -168,7 +224,7 @@ const dictionaries = {
|
|
|
168
224
|
'prompt.working': 'Working...',
|
|
169
225
|
'queue.title': 'Messages to be submitted after next tool call',
|
|
170
226
|
'queue.hint': 'press esc to interrupt and send immediately',
|
|
171
|
-
'messages.empty': '
|
|
227
|
+
'messages.empty': '',
|
|
172
228
|
'working.label': 'Working',
|
|
173
229
|
'working.interrupt': 'esc to interrupt',
|
|
174
230
|
'thinking.label': 'Thinking...',
|
|
@@ -196,8 +252,12 @@ const dictionaries = {
|
|
|
196
252
|
'slash.init.description': '创建包含仓库协作规则的 AGENTS.md 文件',
|
|
197
253
|
'slash.model.description': '选择本次会话使用的模型和推理强度',
|
|
198
254
|
'slash.permissions.description': '选择模型权限和审批行为',
|
|
199
|
-
'slash.
|
|
200
|
-
'slash.
|
|
255
|
+
'slash.hooks.description': '查看已配置 hooks',
|
|
256
|
+
'slash.personality.description': '选择 Remi 的回复人格',
|
|
257
|
+
'slash.codePanel.description': '选择代码面板配色',
|
|
258
|
+
'slash.accentColor.description': '选择高亮色',
|
|
259
|
+
'slash.stat.description': '查看全局使用统计',
|
|
260
|
+
'slash.status.description': '查看当前会话状态',
|
|
201
261
|
'slash.statusline.description': '选择底部状态栏字段',
|
|
202
262
|
'slash.skills.description': '管理和加载本地 Remi skills',
|
|
203
263
|
'slash.language.description': '选择界面语言',
|
|
@@ -206,40 +266,51 @@ const dictionaries = {
|
|
|
206
266
|
'slash.exit.description': '退出 Remi',
|
|
207
267
|
'command.unknown': '未知命令:{{command}}',
|
|
208
268
|
'version.message': 'Remi 当前版本是 {{version}}。',
|
|
209
|
-
'style.panel.title': '
|
|
210
|
-
'style.panel.subtitle': '
|
|
269
|
+
'style.panel.title': '选择回复人格',
|
|
270
|
+
'style.panel.subtitle': '只影响模型回复人格,不改变模型选择。',
|
|
211
271
|
'style.current': '当前',
|
|
212
|
-
'style.selected': '
|
|
213
|
-
'style.saved': '
|
|
214
|
-
'style.
|
|
215
|
-
'style.
|
|
216
|
-
'style.description.
|
|
217
|
-
'style.description.
|
|
218
|
-
'style.description.mentor': '
|
|
219
|
-
'style.description.minimal': '
|
|
220
|
-
'theme.panel.title': '
|
|
221
|
-
'theme.panel.subtitle': '
|
|
272
|
+
'style.selected': '已选择回复人格:{{label}}。',
|
|
273
|
+
'style.saved': '已保存回复人格:{{label}}。',
|
|
274
|
+
'style.closed': '已关闭回复人格选择,未保存更改。',
|
|
275
|
+
'style.unknown': '未知回复人格:{{style}}。运行 /personality 选择。',
|
|
276
|
+
'style.description.friendly': '温暖、协作、乐于帮助。',
|
|
277
|
+
'style.description.pragmatic': '简洁、聚焦任务、直接。',
|
|
278
|
+
'style.description.mentor': '说明推理和取舍。',
|
|
279
|
+
'style.description.minimal': '尽量少字回答。',
|
|
280
|
+
'theme.panel.title': '选择代码面板',
|
|
281
|
+
'theme.panel.subtitle': '上下移动以实时预览代码配色。',
|
|
222
282
|
'theme.panel.search': '输入以筛选主题',
|
|
223
|
-
'theme.panel.help': '
|
|
283
|
+
'theme.panel.help': '按回车确认;Ctrl-C/Esc 返回',
|
|
224
284
|
'theme.current': '当前',
|
|
225
|
-
'theme.selected': '
|
|
226
|
-
'theme.saved': '
|
|
227
|
-
'theme.closed': '
|
|
228
|
-
'theme.unknown': '
|
|
285
|
+
'theme.selected': '已选择代码面板:{{label}}。',
|
|
286
|
+
'theme.saved': '已保存代码面板:{{label}}。',
|
|
287
|
+
'theme.closed': '已关闭代码面板设置,未保存更改。',
|
|
288
|
+
'theme.unknown': '未知代码面板:{{theme}}。运行 /code-panel 选择。',
|
|
289
|
+
'accentColor.panel.title': '选择高亮色',
|
|
290
|
+
'accentColor.panel.subtitle': '上下移动以预览界面高亮色。',
|
|
291
|
+
'accentColor.current': '当前',
|
|
292
|
+
'accentColor.help': '按回车确认;Ctrl-C/Esc 返回',
|
|
293
|
+
'accentColor.selected': '已选择高亮色:{{label}}。',
|
|
294
|
+
'accentColor.saved': '已保存高亮色:{{label}}。',
|
|
295
|
+
'accentColor.closed': '已关闭高亮色设置,未保存更改。',
|
|
296
|
+
'accentColor.unknown': '未知高亮色:{{color}}。运行 /accent-color 选择。',
|
|
229
297
|
'language.panel.title': '选择语言',
|
|
230
298
|
'language.panel.subtitle': '选择 Remi 系统提示语使用的语言。',
|
|
231
299
|
'language.current': '当前',
|
|
232
300
|
'language.saved': '已保存语言:{{label}}。',
|
|
301
|
+
'language.closed': '已关闭语言选择,未保存更改。',
|
|
233
302
|
'language.unknown': '未知语言:{{language}}。运行 /language 选择。',
|
|
234
303
|
'model.panel.title': '选择模型和推理强度',
|
|
235
304
|
'model.panel.subtitle': '当前 profile {{profile}} / main 使用 {{model}} / effort {{effort}}',
|
|
236
305
|
'model.current': '当前',
|
|
237
306
|
'model.selected': '已选择模型:{{label}}。',
|
|
307
|
+
'model.closed': '已关闭模型选择,未保存更改。',
|
|
238
308
|
'model.error.load': '加载模型配置失败',
|
|
239
309
|
'permissions.panel.title': '更新模型权限',
|
|
240
310
|
'permissions.panel.subtitle': '选择 Remi 如何处理本地文件、shell 执行和审批请求。',
|
|
241
311
|
'permissions.current': '当前',
|
|
242
312
|
'permissions.saved': '已保存权限档位:{{label}}。',
|
|
313
|
+
'permissions.closed': '已关闭权限档位选择,未保存更改。',
|
|
243
314
|
'permissions.unknown': '未知权限档位:{{profile}}。运行 /permissions 选择。',
|
|
244
315
|
'permissions.profile.default.label': 'Default',
|
|
245
316
|
'permissions.profile.default.description': 'Remi 可以读写当前工作区文件;执行 shell、联网或访问其他文件时需要审批。',
|
|
@@ -254,12 +325,22 @@ const dictionaries = {
|
|
|
254
325
|
'permission.request.action.editFileIn': '在 {{directory}} 中修改文件',
|
|
255
326
|
'permission.request.action.modifyFilesIn': '在 {{directory}} 中修改文件',
|
|
256
327
|
'permission.request.action.target': '目标:{{path}}',
|
|
328
|
+
'permission.request.action.webSearch': '搜索网页',
|
|
329
|
+
'permission.request.action.webFetch': '抓取网页',
|
|
330
|
+
'permission.request.action.query': '查询:{{query}}',
|
|
331
|
+
'permission.request.action.url': 'URL:{{url}}',
|
|
257
332
|
'permission.request.path.currentDirectory': '当前目录',
|
|
258
|
-
'permission.request.persist': '
|
|
259
|
-
'permission.request.persistRule': '
|
|
260
|
-
'permission.request.sessionRule': '
|
|
261
|
-
'permission.request.once': '
|
|
262
|
-
'permission.request.deny': '
|
|
333
|
+
'permission.request.persist': '始终允许',
|
|
334
|
+
'permission.request.persistRule': '始终允许',
|
|
335
|
+
'permission.request.sessionRule': '本 session 允许',
|
|
336
|
+
'permission.request.once': '允许',
|
|
337
|
+
'permission.request.deny': '取消',
|
|
338
|
+
'permission.request.onceDescription': '运行该工具并继续。',
|
|
339
|
+
'permission.request.sessionDescription': '运行该工具,并在本 session 记住这个选择。',
|
|
340
|
+
'permission.request.sessionRuleDescription': '本 session 对{{rule}}记住这个选择。',
|
|
341
|
+
'permission.request.persistDescription': '运行该工具,并为后续匹配的工具调用记住这个选择。',
|
|
342
|
+
'permission.request.persistRuleDescription': '后续对匹配{{rule}}的工具调用记住这个选择。',
|
|
343
|
+
'permission.request.denyDescription': '取消这次工具调用。',
|
|
263
344
|
'permission.request.help': '按回车确认,按 esc 取消',
|
|
264
345
|
'permission.rule.prefix': '以 `{{prefix}}` 开头的命令',
|
|
265
346
|
'permission.rule.scoped': '`{{cwd}}` 中以 `{{prefix}}` 开头的命令',
|
|
@@ -267,32 +348,59 @@ const dictionaries = {
|
|
|
267
348
|
'permission.rule.multipleScoped': '`{{cwd}}` 中以 {{prefixes}} 开头的命令',
|
|
268
349
|
'permission.rule.filesystem': '`{{root}}` 目录中的文件变更',
|
|
269
350
|
'permission.rule.filesystemOperations': '`{{root}}` 目录中的{{operations}}文件',
|
|
351
|
+
'permission.rule.networkTool': '{{tool}}',
|
|
352
|
+
'permission.reason.web_search': '搜索公开网页,执行前需要网络权限。',
|
|
353
|
+
'permission.reason.web_fetch': '抓取公开网页,执行前需要网络权限。',
|
|
270
354
|
'permission.savedRule': '本 session 已允许以 `{{prefix}}` 开头的命令。',
|
|
271
355
|
'permission.savedRules': '本 session 已允许{{rule}}。',
|
|
272
356
|
'permission.savedPersistentRules': '已始终允许{{rule}}。',
|
|
357
|
+
'askUserQuestion.customLabel': '输入你的决定',
|
|
358
|
+
'askUserQuestion.customPlaceholder': '输入内容',
|
|
359
|
+
'askUserQuestion.help': 'Enter 选择 · ↑/↓ 移动 · Esc/Ctrl-C 取消',
|
|
360
|
+
'askUserQuestion.selected': '已选择:{{label}}。',
|
|
361
|
+
'askUserQuestion.custom': '已输入决策:{{text}}。',
|
|
362
|
+
'askUserQuestion.cancelled': '已取消决策问题。',
|
|
273
363
|
'statusline.panel.title': '配置状态栏',
|
|
274
364
|
'statusline.panel.subtitle': '选择底部状态栏展示哪些字段。',
|
|
275
365
|
'statusline.panel.search': '输入以搜索',
|
|
276
|
-
'statusline.panel.help': '空格切换;↑/↓ 移动;回车保存并关闭;
|
|
366
|
+
'statusline.panel.help': '空格切换;↑/↓ 移动;回车保存并关闭;Ctrl-C/Esc 关闭',
|
|
277
367
|
'statusline.saved': '已保存状态栏字段:{{items}}。',
|
|
278
368
|
'statusline.closed': '已关闭状态栏设置,未保存更改。',
|
|
279
369
|
'statusline.context': 'Context',
|
|
280
370
|
'statusline.used': 'used',
|
|
281
371
|
'statusline.input': 'input',
|
|
282
372
|
'statusline.output': 'output',
|
|
373
|
+
'statusline.cacheHit': '缓存命中',
|
|
283
374
|
'statusline.catalog.model': '当前 main 模型',
|
|
284
375
|
'statusline.catalog.cwd': '当前工作目录',
|
|
285
376
|
'statusline.catalog.git-branch': '当前 Git 分支(不可用时隐藏)',
|
|
286
377
|
'statusline.catalog.branch-changes': '工作区行级改动,例如 +8 -1',
|
|
287
378
|
'statusline.catalog.context-remaining': '上下文窗口剩余百分比',
|
|
288
|
-
'statusline.catalog.used-tokens': '
|
|
289
|
-
'statusline.catalog.total-input-tokens': '
|
|
379
|
+
'statusline.catalog.used-tokens': '当前会话非缓存 input + output token',
|
|
380
|
+
'statusline.catalog.total-input-tokens': '当前会话非缓存 input token,cached 单独显示',
|
|
290
381
|
'statusline.catalog.total-output-tokens': '当前会话 output token 总数',
|
|
382
|
+
'statusline.catalog.cache-hit-rate': '当前会话 cached input 占比',
|
|
291
383
|
'statusline.catalog.run-state': '紧凑的会话运行状态文本',
|
|
292
384
|
'statusline.catalog.permissions': '当前权限档位',
|
|
385
|
+
'status.card.model': '模型',
|
|
386
|
+
'status.card.directory': '目录',
|
|
387
|
+
'status.card.permissions': '权限',
|
|
388
|
+
'status.card.agents': 'Agents.md',
|
|
389
|
+
'status.card.session': 'Session',
|
|
390
|
+
'status.card.personality': 'Personality',
|
|
391
|
+
'status.card.gitBranch': 'Git 分支',
|
|
392
|
+
'status.card.reasoning': '推理',
|
|
393
|
+
'status.card.unconfigured': '未配置',
|
|
394
|
+
'status.card.noSession': '无',
|
|
395
|
+
'status.card.noBranch': '无',
|
|
396
|
+
'status.card.none': '无',
|
|
397
|
+
'status.card.permissions.workspaceOnRequest': 'Workspace(需要确认)',
|
|
398
|
+
'status.card.permissions.workspaceAutoReview': 'Workspace(自动审查)',
|
|
399
|
+
'status.card.permissions.fullAccess': 'Full Access(bypass)',
|
|
400
|
+
'status.card.permissions.readOnly': '只读',
|
|
293
401
|
'skills.panel.title': 'Skills',
|
|
294
402
|
'skills.panel.subtitle': '选择操作',
|
|
295
|
-
'skills.panel.help': '
|
|
403
|
+
'skills.panel.help': '按回车确认;Ctrl-C/Esc 返回',
|
|
296
404
|
'skills.panel.list': '列出 skills',
|
|
297
405
|
'skills.panel.listDescription': '提示:按 $ 可直接打开这个列表。',
|
|
298
406
|
'skills.panel.toggle': '启用/禁用 Skills',
|
|
@@ -308,6 +416,7 @@ const dictionaries = {
|
|
|
308
416
|
'tool.action.list': '列出',
|
|
309
417
|
'tool.action.read': '读取',
|
|
310
418
|
'tool.action.search': '搜索',
|
|
419
|
+
'tool.action.fetch': '抓取',
|
|
311
420
|
'tool.action.find': '查找',
|
|
312
421
|
'tool.action.create': '创建',
|
|
313
422
|
'tool.action.exists': '已存在',
|
|
@@ -315,18 +424,21 @@ const dictionaries = {
|
|
|
315
424
|
'tool.action.edit': '修改',
|
|
316
425
|
'tool.action.delete': '删除',
|
|
317
426
|
'tool.action.run': '执行',
|
|
427
|
+
'tool.action.ask': '询问',
|
|
318
428
|
'tool.action.planUpdate': '更新计划',
|
|
319
429
|
'tool.action.done': '完成',
|
|
320
430
|
'tool.action.completed': '完成',
|
|
321
431
|
'tool.running.listing': '正在列出',
|
|
322
432
|
'tool.running.reading': '正在读取',
|
|
323
433
|
'tool.running.searching': '正在搜索',
|
|
434
|
+
'tool.running.fetching': '正在抓取',
|
|
324
435
|
'tool.running.finding': '正在查找',
|
|
325
436
|
'tool.running.creating': '正在创建',
|
|
326
437
|
'tool.running.writing': '正在写入',
|
|
327
438
|
'tool.running.editing': '正在修改',
|
|
328
439
|
'tool.running.deleting': '正在删除',
|
|
329
440
|
'tool.running.running': '正在执行',
|
|
441
|
+
'tool.running.asking': '正在询问',
|
|
330
442
|
'tool.running.updatingPlan': '正在更新计划',
|
|
331
443
|
'tool.count.directory.one': '个目录',
|
|
332
444
|
'tool.count.directory.other': '个目录',
|
|
@@ -355,7 +467,7 @@ const dictionaries = {
|
|
|
355
467
|
'prompt.working': '处理中...',
|
|
356
468
|
'queue.title': '排队消息将在下一次工具调用后提交',
|
|
357
469
|
'queue.hint': '按 esc 可中断当前请求并立即发送',
|
|
358
|
-
'messages.empty': '
|
|
470
|
+
'messages.empty': '',
|
|
359
471
|
'working.label': '处理中',
|
|
360
472
|
'working.interrupt': 'esc 中断',
|
|
361
473
|
'thinking.label': '思考中...',
|
package/dist/initPrompt.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export function buildInitPrompt() {
|
|
2
2
|
return `Set up a minimal AGENTS.md for this repository. AGENTS.md is loaded into future Remi sessions, so keep it concise and only include information that would prevent mistakes.
|
|
3
3
|
|
|
4
|
+
Treat this slash-command task as standalone for the current Remi runtime cwd. Do not continue, repair, recreate, or validate prior task artifacts unless current filesystem exploration shows they are part of this repository.
|
|
5
|
+
|
|
4
6
|
Work in this order:
|
|
5
7
|
|
|
6
|
-
1. Explore the repository before writing. Read key files such as README, package manifests, workspace config, build/test config, Makefile, CI config, and any existing AI-agent instruction files: AGENTS.md, AGENT.md,
|
|
8
|
+
1. Explore the repository before writing. Read key files such as README, package manifests, workspace config, build/test config, Makefile, CI config, and any existing AI-agent instruction files: AGENTS.md, AGENT.md, REMI.md, .cursor/rules, .cursorrules, .github/copilot-instructions.md, .windsurfrules, or .clinerules.
|
|
7
9
|
2. Identify only non-obvious guidance: build/test/lint commands, package manager/runtime requirements, architecture boundaries, repo workflow, local setup gotchas, testing quirks, generated files, security rules, or user/team preferences already documented in the repo.
|
|
8
10
|
3. If AGENTS.md already exists, read it first and update it narrowly. Do not silently overwrite existing guidance.
|
|
9
11
|
4. Create or update AGENTS.md at the project root with a short, practical structure. Start it with:
|