agentlas 0.4.0
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/LICENSE +201 -0
- package/README.md +107 -0
- package/bin/agentlas.cjs +176 -0
- package/engine/ENGINE_META.json +8 -0
- package/engine/agentlas-api-agent.cjs +451 -0
- package/engine/agentlas-banner.cjs +108 -0
- package/engine/agentlas-capabilities.cjs +72 -0
- package/engine/agentlas-cloud-runtime.cjs +199 -0
- package/engine/agentlas-composer.cjs +256 -0
- package/engine/agentlas-config.cjs +29 -0
- package/engine/agentlas-doctor.cjs +173 -0
- package/engine/agentlas-i18n.cjs +317 -0
- package/engine/agentlas-input.cjs +437 -0
- package/engine/agentlas-native-host.cjs +612 -0
- package/engine/agentlas-onboard.cjs +71 -0
- package/engine/agentlas-parity.cjs +994 -0
- package/engine/agentlas-repl.cjs +1258 -0
- package/engine/agentlas-style.cjs +100 -0
- package/engine/agentlas-tools.cjs +196 -0
- package/engine/agentlas-ui.cjs +266 -0
- package/engine/agentlas.cjs +7503 -0
- package/engine/architecture.data.json +139 -0
- package/engine/bootstrap-schema.sql +568 -0
- package/install.ps1 +26 -0
- package/install.sh +53 -0
- package/package.json +49 -0
- package/scripts/gen-bootstrap-schema.sh +23 -0
- package/test/smoke.sh +56 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Tiny i18n for the agentlas terminal chrome. Language is chosen in the first-run
|
|
4
|
+
* onboarding wizard and stored in cli-prefs.json. Missing keys fall back to English.
|
|
5
|
+
* Technical tokens (/slash commands, runtime/model names, "runtime"/"perm"/"cwd") stay as-is.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const LANGS = [
|
|
9
|
+
{ code: "en", label: "English" },
|
|
10
|
+
{ code: "ko", label: "한국어" },
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
const STRINGS = {
|
|
14
|
+
en: {
|
|
15
|
+
// banner
|
|
16
|
+
"banner.help": "for commands",
|
|
17
|
+
"banner.quit": "to quit",
|
|
18
|
+
"banner.interrupt": "to interrupt",
|
|
19
|
+
// picker
|
|
20
|
+
"picker.agents": "Agents",
|
|
21
|
+
"picker.companies": "Companies",
|
|
22
|
+
"picker.none": "(none yet — open the Agentlas app to install agents, or /import <path>)",
|
|
23
|
+
"picker.prompt": "pick a number/name, or type a task to auto-route (/help, /import <path>, /exit) › ",
|
|
24
|
+
"picker.hint": "Just type — Agentlas routes your task to the right agent. /agents to choose one, / for commands.",
|
|
25
|
+
"composer.autoroute": "auto-route",
|
|
26
|
+
"composer.hint": "/ for commands",
|
|
27
|
+
"picker.noNum": "no agent at that number",
|
|
28
|
+
"picker.noFirm": "no such company",
|
|
29
|
+
"picker.noMatch": 'no match for "%s" — try a number or a name',
|
|
30
|
+
// repl
|
|
31
|
+
"interrupted": "interrupted",
|
|
32
|
+
"ctrlcAgain": "Press Ctrl-C again to exit.",
|
|
33
|
+
"bye": "Goodbye.",
|
|
34
|
+
"stalled": "stream stalled — interrupted (idle timeout)",
|
|
35
|
+
"thinkingWith": "thinking with %s",
|
|
36
|
+
"spinnerStop": "ctrl-c to stop",
|
|
37
|
+
"noKey": "No %s API key. Add one in the app (Settings → BYOK), or switch with /runtime.",
|
|
38
|
+
"runtimeSet": "runtime → %s",
|
|
39
|
+
"runtimeNotInstalled": "%s CLI is not installed.",
|
|
40
|
+
"runtimeUsage": "usage: /runtime claude-code|codex|gemini|anthropic|openai|google|ollama|upstage",
|
|
41
|
+
"modelOnlyApi": "/model only applies to BYOK/Ollama (api) runtimes.",
|
|
42
|
+
"modelSet": "model → %s",
|
|
43
|
+
"modelDefault": "(default)",
|
|
44
|
+
"effortSet": "effort → %s",
|
|
45
|
+
"effortCurrent": "current effort: %s",
|
|
46
|
+
"effortUsage": "usage: /effort low|medium|high|max|auto",
|
|
47
|
+
"permSet": "permission → %s",
|
|
48
|
+
"permUsage": "usage: /permission read|write|full",
|
|
49
|
+
"permCurrent": "current permission: %s",
|
|
50
|
+
"sideUsage": "usage: /side <question>",
|
|
51
|
+
"sideNeedsSubject": "pick an agent first, or type the task normally so Agentlas can auto-route it",
|
|
52
|
+
"sideStart": "side question; this answer will not be saved to chat context",
|
|
53
|
+
"sideDone": "side question complete; main chat context unchanged",
|
|
54
|
+
"noAgent": "no agent: %s",
|
|
55
|
+
"noCompany": "no company: %s",
|
|
56
|
+
"agentUsage": "usage: /agent <name>",
|
|
57
|
+
"firmUsage": "usage: /firm <name>",
|
|
58
|
+
"importUsage": "usage: /import <folder>",
|
|
59
|
+
"installUsage": "usage: /install <slug> (browse in the app, or /marketplace)",
|
|
60
|
+
"installing": "installing %s…",
|
|
61
|
+
"cloudInstalled": "installed: %s",
|
|
62
|
+
"market.title": "Marketplace",
|
|
63
|
+
"market.help": "Install agents and teams from the Agentlas cloud marketplace or a local folder.",
|
|
64
|
+
"market.installHint": "install a cloud agent by slug",
|
|
65
|
+
"market.importHint": "install a local agent/team folder",
|
|
66
|
+
"market.loggedIn": "cloud session: signed in",
|
|
67
|
+
"market.loggedOut": "cloud session: signed out — sign in via the app (or set AGENTLAS_SESSION) to install cloud agents",
|
|
68
|
+
"mcp.none": "(no MCP servers configured — add them in the app)",
|
|
69
|
+
"mcp.wired": "%s server(s) wired into write/full turns (incl. playwright)",
|
|
70
|
+
"mcp.usage": "add/remove MCP servers in the app; the terminal wires enabled stdio servers",
|
|
71
|
+
"help.mcp": "list configured MCP servers and which are wired",
|
|
72
|
+
"resume.title": "Resume — recent sessions",
|
|
73
|
+
"resume.none": "(no saved sessions yet — they're saved after each turn)",
|
|
74
|
+
"resume.usage": "usage: /resume <number>",
|
|
75
|
+
"resume.noNum": "no session at that number",
|
|
76
|
+
"resume.ok": "resumed → %s",
|
|
77
|
+
"help.resume": "list and resume a recent runtime session",
|
|
78
|
+
"cwdNoPath": "no such path: %s",
|
|
79
|
+
"cwdSet": "cwd → %s",
|
|
80
|
+
"noMemory": "(no memory yet)",
|
|
81
|
+
"imported": "imported: %s (%s)",
|
|
82
|
+
"updated": "updated: %s (%s)",
|
|
83
|
+
"switched": "→ %s",
|
|
84
|
+
"unknownCmd": "unknown command: /%s. Type / for the command list.",
|
|
85
|
+
"team.title": "Team — agent → runtime (auto-routed by capability)",
|
|
86
|
+
"team.auto": "auto",
|
|
87
|
+
"team.pinned": "pinned",
|
|
88
|
+
"team.usage": "usage: /team · /team <agent> <claude-code|codex|gemini|auto>",
|
|
89
|
+
"team.set": "%s → %s",
|
|
90
|
+
"routedImage": "routed to %s for image support",
|
|
91
|
+
"guard.imageWarn": "this agent works with images, but %s can't generate them — try /runtime gemini (or codex), or /team to pin one",
|
|
92
|
+
"multimodal.title": "Multimodal fallback",
|
|
93
|
+
"multimodal.set": "multimodal %s → %s",
|
|
94
|
+
"multimodal.usage": "set with /multimodal set <image|video|audio> <provider-id>",
|
|
95
|
+
// help rows
|
|
96
|
+
"help.talk": "talk to the current agent/company — streaming + tools",
|
|
97
|
+
"help.skills": "list slash-command skills",
|
|
98
|
+
"help.agents": "list installed agents",
|
|
99
|
+
"help.team": "view/assign each agent's LLM (auto-routed by capability)",
|
|
100
|
+
"help.agent": "switch to another agent",
|
|
101
|
+
"help.firms": "list companies / switch to one",
|
|
102
|
+
"help.runtime": "switch runtime (claude-code|codex|gemini|anthropic|openai|google|ollama|upstage)",
|
|
103
|
+
"help.model": "set the model (claude/codex/gemini alias or BYOK/Ollama id)",
|
|
104
|
+
"help.effort": "set reasoning effort (low|medium|high|max|auto)",
|
|
105
|
+
"help.permission": "what it may do (read|write|full)",
|
|
106
|
+
"help.permissions": "show permission choices and current level",
|
|
107
|
+
"help.setup": "run language, runtime, and permission setup again",
|
|
108
|
+
"help.cwd": "show or change the working folder",
|
|
109
|
+
"help.memory": "show the memory being injected",
|
|
110
|
+
"help.ontology": "turn on/list/add project ontology sources with short natural commands",
|
|
111
|
+
"help.side": "ask a side question without saving it to chat context",
|
|
112
|
+
"help.status": "show model/runtime, agent, permission, and directory",
|
|
113
|
+
"help.multimodal": "show/set image, video, and audio fallback providers",
|
|
114
|
+
"help.import": "import a local folder (agent or team)",
|
|
115
|
+
"help.market": "browse/install marketplace agents",
|
|
116
|
+
"help.install": "install a cloud agent by slug",
|
|
117
|
+
"help.clear": "clear the chat and redraw",
|
|
118
|
+
"help.storm": "run a force-robust Stormbreaker pipeline on a goal",
|
|
119
|
+
"help.build": "build/repair/package an agent or team (Hephaestus)",
|
|
120
|
+
"help.route": "preview which agent/pipeline would take a request",
|
|
121
|
+
"help.research": "run the Research Engine (search/gather/read)",
|
|
122
|
+
"help.swarm": "fan out an emergent agent swarm on a goal",
|
|
123
|
+
"help.doctor": "check runtimes and data",
|
|
124
|
+
"help.compact": "drop older transcript turns and keep the latest context",
|
|
125
|
+
"help.keybindings": "show terminal shortcuts",
|
|
126
|
+
"help.exit": "quit (Ctrl-C: stop the turn / quit when idle)",
|
|
127
|
+
"help.talkKey": "(type a message)",
|
|
128
|
+
// input affordances + commands (history/cost/diff/@file/!shell/multiline/tab)
|
|
129
|
+
"noHistory": "(no history yet)",
|
|
130
|
+
"noCost": "(no usage recorded yet)",
|
|
131
|
+
"cost.title": "Session usage — by runtime",
|
|
132
|
+
"cost.total": "total",
|
|
133
|
+
"diffNoGit": "not a git repository (cwd)",
|
|
134
|
+
"diffClean": "(working tree clean)",
|
|
135
|
+
"help.cost": "session usage/cost, broken down by runtime",
|
|
136
|
+
"help.diff": "show the working-tree git diff",
|
|
137
|
+
"help.history": "list recent inputs (persisted across sessions)",
|
|
138
|
+
"help.tipsTitle": "Shortcuts",
|
|
139
|
+
"help.slash": "start a slash command such as /help or /status",
|
|
140
|
+
"help.atfile": "attach a file's contents to your message",
|
|
141
|
+
"help.bang": "run a shell command in the working folder",
|
|
142
|
+
"help.multiline": "continue input on the next line",
|
|
143
|
+
"help.tab": "autocomplete commands, agents, runtimes, paths",
|
|
144
|
+
"help.arrows": "browse persisted input history",
|
|
145
|
+
"help.ctrlc": "interrupt a running turn, or press twice when idle to quit",
|
|
146
|
+
"compact.noop": "context is already compact (%s message(s))",
|
|
147
|
+
"compact.done": "compacted context: %s → %s message(s)",
|
|
148
|
+
// onboarding wizard
|
|
149
|
+
"wiz.welcome": "Welcome to Agentlas — let's set things up.",
|
|
150
|
+
"wiz.langQ": "Choose your language",
|
|
151
|
+
"wiz.runtimeQ": "Which AI should run your agents by default?",
|
|
152
|
+
"wiz.runtimeAuto": "Use the app's active runtime",
|
|
153
|
+
"wiz.runtimeInstalled": "installed",
|
|
154
|
+
"wiz.runtimeMissing": "not installed",
|
|
155
|
+
"wiz.permQ": "How much should agents be allowed to do by default?",
|
|
156
|
+
"wiz.permRead": "read — look only (no changes)",
|
|
157
|
+
"wiz.permWrite": "write — read + create/edit files (recommended)",
|
|
158
|
+
"wiz.permFull": "full — everything, including shell commands",
|
|
159
|
+
"wiz.pick": "Enter a number › ",
|
|
160
|
+
"wiz.saved": "All set. You can change any of this later with /runtime, /permission.",
|
|
161
|
+
"wiz.changeLang": "Tip: re-run setup anytime with agentlas setup",
|
|
162
|
+
},
|
|
163
|
+
ko: {
|
|
164
|
+
"banner.help": "명령 보기",
|
|
165
|
+
"banner.quit": "종료",
|
|
166
|
+
"banner.interrupt": "턴 중단",
|
|
167
|
+
"picker.agents": "에이전트",
|
|
168
|
+
"picker.companies": "회사",
|
|
169
|
+
"picker.none": "(아직 없음 — Agentlas 앱에서 에이전트를 설치하거나 /import <경로>)",
|
|
170
|
+
"picker.prompt": "번호/이름을 고르거나, 할 일을 바로 입력하면 자동 라우팅합니다 (/help, /import <경로>, /exit) › ",
|
|
171
|
+
"picker.hint": "그냥 입력하세요 — 할 일을 알맞은 에이전트로 자동 라우팅합니다. /agents 로 직접 선택, / 로 명령.",
|
|
172
|
+
"composer.autoroute": "자동 라우팅",
|
|
173
|
+
"composer.hint": "/ 명령",
|
|
174
|
+
"picker.noNum": "그 번호의 에이전트가 없습니다",
|
|
175
|
+
"picker.noFirm": "그런 회사가 없습니다",
|
|
176
|
+
"picker.noMatch": '"%s"에 맞는 항목이 없습니다 — 번호나 이름으로',
|
|
177
|
+
"interrupted": "중단됨",
|
|
178
|
+
"ctrlcAgain": "종료하려면 Ctrl-C를 한 번 더 누르세요.",
|
|
179
|
+
"bye": "안녕",
|
|
180
|
+
"stalled": "응답이 지연되어 중단했습니다 (idle timeout)",
|
|
181
|
+
"thinkingWith": "%s로 생각 중",
|
|
182
|
+
"spinnerStop": "ctrl-c로 중단",
|
|
183
|
+
"noKey": "%s API 키가 없습니다. 앱 설정 → BYOK에서 등록하거나 /runtime으로 전환하세요.",
|
|
184
|
+
"runtimeSet": "런타임 → %s",
|
|
185
|
+
"runtimeNotInstalled": "%s CLI가 설치돼 있지 않습니다.",
|
|
186
|
+
"runtimeUsage": "사용법: /runtime claude-code|codex|gemini|anthropic|openai|google|ollama|upstage",
|
|
187
|
+
"modelOnlyApi": "/model은 BYOK/Ollama(api) 런타임에서만 적용됩니다.",
|
|
188
|
+
"modelSet": "모델 → %s",
|
|
189
|
+
"modelDefault": "(기본값)",
|
|
190
|
+
"effortSet": "추론 강도 → %s",
|
|
191
|
+
"effortCurrent": "현재 추론 강도: %s",
|
|
192
|
+
"effortUsage": "사용법: /effort low|medium|high|max|auto",
|
|
193
|
+
"permSet": "권한 → %s",
|
|
194
|
+
"permUsage": "사용법: /permission read|write|full",
|
|
195
|
+
"permCurrent": "현재 권한: %s",
|
|
196
|
+
"sideUsage": "사용법: /side <질문>",
|
|
197
|
+
"sideNeedsSubject": "먼저 에이전트를 고르거나, 그냥 할 일을 입력해서 Agentlas가 자동 라우팅하게 하세요.",
|
|
198
|
+
"sideStart": "사이드 질문입니다. 이 답변은 메인 대화 맥락에 저장하지 않습니다.",
|
|
199
|
+
"sideDone": "사이드 질문 완료. 메인 대화 맥락은 그대로입니다.",
|
|
200
|
+
"noAgent": "에이전트 없음: %s",
|
|
201
|
+
"noCompany": "회사 없음: %s",
|
|
202
|
+
"agentUsage": "사용법: /agent <이름>",
|
|
203
|
+
"firmUsage": "사용법: /firm <이름>",
|
|
204
|
+
"importUsage": "사용법: /import <폴더>",
|
|
205
|
+
"installUsage": "사용법: /install <slug> (마켓플레이스는 앱에서 보거나 /marketplace)",
|
|
206
|
+
"installing": "%s 설치 중…",
|
|
207
|
+
"cloudInstalled": "설치됨: %s",
|
|
208
|
+
"market.title": "마켓플레이스",
|
|
209
|
+
"market.help": "Agentlas 클라우드 마켓플레이스 또는 로컬 폴더에서 에이전트/팀을 설치합니다.",
|
|
210
|
+
"market.installHint": "slug로 클라우드 에이전트 설치",
|
|
211
|
+
"market.importHint": "로컬 에이전트/팀 폴더 설치",
|
|
212
|
+
"market.loggedIn": "클라우드 세션: 로그인됨",
|
|
213
|
+
"market.loggedOut": "클라우드 세션: 로그아웃 — 클라우드 설치는 앱에서 로그인(또는 AGENTLAS_SESSION) 필요",
|
|
214
|
+
"mcp.none": "(설정된 MCP 서버 없음 — 앱에서 추가)",
|
|
215
|
+
"mcp.wired": "write/full 턴에 %s개 서버 연결됨 (playwright 포함)",
|
|
216
|
+
"mcp.usage": "MCP 서버 추가/삭제는 앱에서; 터미널은 enabled stdio 서버를 연결합니다",
|
|
217
|
+
"help.mcp": "설정된 MCP 서버와 연결 상태 보기",
|
|
218
|
+
"resume.title": "이어하기 — 최근 세션",
|
|
219
|
+
"resume.none": "(저장된 세션 없음 — 각 턴 후 저장됩니다)",
|
|
220
|
+
"resume.usage": "사용법: /resume <번호>",
|
|
221
|
+
"resume.noNum": "그 번호의 세션이 없습니다",
|
|
222
|
+
"resume.ok": "이어하기 → %s",
|
|
223
|
+
"help.resume": "최근 런타임 세션 목록/이어하기",
|
|
224
|
+
"cwdNoPath": "경로 없음: %s",
|
|
225
|
+
"cwdSet": "작업 폴더 → %s",
|
|
226
|
+
"noMemory": "(메모리 없음)",
|
|
227
|
+
"imported": "임포트됨: %s (%s)",
|
|
228
|
+
"updated": "갱신됨: %s (%s)",
|
|
229
|
+
"switched": "→ %s",
|
|
230
|
+
"unknownCmd": "알 수 없는 명령: /%s. / 를 입력하면 명령 목록이 열립니다.",
|
|
231
|
+
"team.title": "팀 — 에이전트 → 런타임 (능력 기반 자동 라우팅)",
|
|
232
|
+
"team.auto": "자동",
|
|
233
|
+
"team.pinned": "고정",
|
|
234
|
+
"team.usage": "사용법: /team · /team <에이전트> <claude-code|codex|gemini|auto>",
|
|
235
|
+
"team.set": "%s → %s",
|
|
236
|
+
"routedImage": "이미지 지원을 위해 %s로 라우팅",
|
|
237
|
+
"guard.imageWarn": "이 에이전트는 이미지 작업인데 %s는 이미지 생성 불가 — /runtime gemini(또는 codex), 또는 /team으로 고정",
|
|
238
|
+
"multimodal.title": "멀티모달 fallback",
|
|
239
|
+
"multimodal.set": "멀티모달 %s → %s",
|
|
240
|
+
"multimodal.usage": "/multimodal set <image|video|audio> <provider-id> 로 변경",
|
|
241
|
+
"help.talk": "현재 에이전트/회사와 대화 — 스트리밍 + 툴",
|
|
242
|
+
"help.skills": "slash 명령 스킬 목록",
|
|
243
|
+
"help.agents": "설치된 에이전트 목록",
|
|
244
|
+
"help.team": "에이전트별 LLM 보기/지정 (능력 기반 자동)",
|
|
245
|
+
"help.agent": "다른 에이전트로 전환",
|
|
246
|
+
"help.firms": "회사 목록 / 전환",
|
|
247
|
+
"help.runtime": "런타임 전환 (claude-code|codex|gemini|anthropic|openai|google|ollama|upstage)",
|
|
248
|
+
"help.model": "모델 지정 (claude/codex/gemini 별칭 또는 BYOK/Ollama id)",
|
|
249
|
+
"help.effort": "추론 강도 지정 (low|medium|high|max|auto)",
|
|
250
|
+
"help.permission": "허용 범위 (read|write|full)",
|
|
251
|
+
"help.permissions": "권한 선택지와 현재 단계 보기",
|
|
252
|
+
"help.setup": "언어·런타임·권한 설정 다시 실행",
|
|
253
|
+
"help.cwd": "작업 폴더 보기/변경",
|
|
254
|
+
"help.memory": "주입되는 메모리 보기",
|
|
255
|
+
"help.ontology": "짧은 자연어로 프로젝트 온톨로지 켜기/목록/자료 등록",
|
|
256
|
+
"help.side": "메인 대화 맥락에 저장하지 않는 사이드 질문",
|
|
257
|
+
"help.status": "모델/런타임, 에이전트, 권한, 작업 폴더 보기",
|
|
258
|
+
"help.multimodal": "이미지·영상·음성 fallback provider 보기/변경",
|
|
259
|
+
"help.import": "로컬 폴더(에이전트/팀) 임포트",
|
|
260
|
+
"help.market": "마켓플레이스 에이전트 보기/설치",
|
|
261
|
+
"help.install": "slug로 클라우드 에이전트 설치",
|
|
262
|
+
"help.clear": "대화 비우고 다시 그리기",
|
|
263
|
+
"help.storm": "목표를 Stormbreaker 견고 파이프라인으로 실행",
|
|
264
|
+
"help.build": "에이전트/팀 빌드·수리·패키징 (Hephaestus)",
|
|
265
|
+
"help.route": "요청이 어떤 에이전트로 라우팅되는지 미리보기",
|
|
266
|
+
"help.research": "Research Engine 실행 (search/gather/read)",
|
|
267
|
+
"help.swarm": "목표에 emergent 에이전트 스웜 전개",
|
|
268
|
+
"help.doctor": "런타임/데이터 점검",
|
|
269
|
+
"help.compact": "오래된 대화 맥락을 줄이고 최근 맥락 유지",
|
|
270
|
+
"help.keybindings": "터미널 단축키 보기",
|
|
271
|
+
"help.exit": "종료 (Ctrl-C: 턴 중단 / 유휴 시 종료)",
|
|
272
|
+
"help.talkKey": "(메시지 입력)",
|
|
273
|
+
"noHistory": "(아직 기록 없음)",
|
|
274
|
+
"noCost": "(아직 기록된 사용량 없음)",
|
|
275
|
+
"cost.title": "세션 사용량 — 런타임별",
|
|
276
|
+
"cost.total": "합계",
|
|
277
|
+
"diffNoGit": "git 저장소가 아닙니다 (cwd)",
|
|
278
|
+
"diffClean": "(변경 사항 없음)",
|
|
279
|
+
"help.cost": "런타임별 세션 사용량/비용",
|
|
280
|
+
"help.diff": "작업 트리 git diff 보기",
|
|
281
|
+
"help.history": "최근 입력 목록 (세션 간 유지)",
|
|
282
|
+
"help.tipsTitle": "단축키",
|
|
283
|
+
"help.slash": "/help, /status 같은 slash 명령 시작",
|
|
284
|
+
"help.atfile": "파일 내용을 메시지에 첨부",
|
|
285
|
+
"help.bang": "작업 폴더에서 셸 명령 실행",
|
|
286
|
+
"help.multiline": "다음 줄에 이어서 입력",
|
|
287
|
+
"help.tab": "명령·에이전트·런타임·경로 자동완성",
|
|
288
|
+
"help.arrows": "세션 간 저장된 입력 기록 탐색",
|
|
289
|
+
"help.ctrlc": "실행 중인 턴 중단, 유휴 시 두 번 누르면 종료",
|
|
290
|
+
"compact.noop": "이미 충분히 compact 상태입니다 (%s개 메시지)",
|
|
291
|
+
"compact.done": "맥락 compact 완료: %s → %s개 메시지",
|
|
292
|
+
"wiz.welcome": "Agentlas에 오신 걸 환영합니다 — 먼저 설정할게요.",
|
|
293
|
+
"wiz.langQ": "언어를 선택하세요",
|
|
294
|
+
"wiz.runtimeQ": "기본으로 어떤 AI가 에이전트를 실행할까요?",
|
|
295
|
+
"wiz.runtimeAuto": "앱의 활성 런타임 사용",
|
|
296
|
+
"wiz.runtimeInstalled": "설치됨",
|
|
297
|
+
"wiz.runtimeMissing": "미설치",
|
|
298
|
+
"wiz.permQ": "에이전트가 기본적으로 어디까지 할 수 있게 할까요?",
|
|
299
|
+
"wiz.permRead": "read — 보기만 (변경 없음)",
|
|
300
|
+
"wiz.permWrite": "write — 읽기 + 파일 생성/편집 (권장)",
|
|
301
|
+
"wiz.permFull": "full — 셸 명령 포함 전부",
|
|
302
|
+
"wiz.pick": "번호 입력 › ",
|
|
303
|
+
"wiz.saved": "완료. 나중에 /runtime, /permission으로 언제든 바꿀 수 있어요.",
|
|
304
|
+
"wiz.changeLang": "팁: 언제든 agentlas setup 으로 다시 설정",
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
function t(lang, key, ...args) {
|
|
309
|
+
const table = STRINGS[lang] || STRINGS.en;
|
|
310
|
+
let s = table[key];
|
|
311
|
+
if (s == null) s = STRINGS.en[key];
|
|
312
|
+
if (s == null) return key;
|
|
313
|
+
let i = 0;
|
|
314
|
+
return s.replace(/%s/g, () => (i < args.length ? String(args[i++]) : "%s"));
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
module.exports = { t, LANGS, STRINGS };
|