create-panal-agent 0.1.2 → 0.2.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/dist/i18n.js +949 -0
- package/dist/index.js +151 -42
- package/package.json +2 -2
- package/template/src/agent.ts +4 -0
- package/template/src/server.ts +117 -6
package/dist/i18n.js
ADDED
|
@@ -0,0 +1,949 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Los diez idiomas del generador.
|
|
3
|
+
*
|
|
4
|
+
* Panal se usa desde sitios muy distintos y el alta de un agente es lo primero
|
|
5
|
+
* que ve un desarrollador. Si eso llega en un idioma que no lee, la mitad de
|
|
6
|
+
* las instrucciones se pierden justo donde más caro sale perderlas: la clave
|
|
7
|
+
* privada, el endpoint público y el gas.
|
|
8
|
+
*
|
|
9
|
+
* Reglas del catálogo:
|
|
10
|
+
*
|
|
11
|
+
* - Todas las claves existen en los diez idiomas. Hay un test que lo
|
|
12
|
+
* comprueba, porque una clave que falta se convierte en `undefined` en
|
|
13
|
+
* pantalla y eso es peor que estar en inglés.
|
|
14
|
+
* - Nada de concatenar frases sueltas: cada mensaje es una frase completa.
|
|
15
|
+
* El orden de las palabras cambia según el idioma y montar textos a trozos
|
|
16
|
+
* produce galimatías en la mitad de ellos.
|
|
17
|
+
* - Los marcadores son `{name}` y `{address}`. Se sustituyen tal cual, sin
|
|
18
|
+
* escapar: esto va a una terminal, no a una página.
|
|
19
|
+
*/
|
|
20
|
+
export const LANGS = [
|
|
21
|
+
{ code: 'en', label: 'English' },
|
|
22
|
+
{ code: 'es', label: 'Español' },
|
|
23
|
+
{ code: 'zh', label: '中文' },
|
|
24
|
+
{ code: 'hi', label: 'हिन्दी' },
|
|
25
|
+
{ code: 'ar', label: 'العربية' },
|
|
26
|
+
{ code: 'fr', label: 'Français' },
|
|
27
|
+
{ code: 'pt', label: 'Português' },
|
|
28
|
+
{ code: 'ru', label: 'Русский' },
|
|
29
|
+
{ code: 'bn', label: 'বাংলা' },
|
|
30
|
+
{ code: 'ur', label: 'اردو' },
|
|
31
|
+
];
|
|
32
|
+
export const LANG_CODES = LANGS.map((l) => l.code);
|
|
33
|
+
export function isLang(v) {
|
|
34
|
+
return LANG_CODES.includes(v);
|
|
35
|
+
}
|
|
36
|
+
const en = {
|
|
37
|
+
usage: `create-panal-agent — scaffold a Panal agent that is ready to earn.
|
|
38
|
+
|
|
39
|
+
npx create-panal-agent <name> [options]
|
|
40
|
+
|
|
41
|
+
Options:
|
|
42
|
+
--lang <code> Interface language: ${LANG_CODES.join(', ')}
|
|
43
|
+
--no-input Never prompt. For CI and scripted setups.
|
|
44
|
+
--help Show this help.
|
|
45
|
+
--version Show the version.
|
|
46
|
+
|
|
47
|
+
The language is taken from --lang, then PANAL_LANG, then your system locale.`,
|
|
48
|
+
pickLang: 'Choose your language:',
|
|
49
|
+
errNoName: 'Give your agent a name: npx create-panal-agent my-agent',
|
|
50
|
+
errBadName: '"{name}" is not a valid name.\nUse lowercase letters, numbers and dashes: my-agent, tech-translator, summarizer.',
|
|
51
|
+
errDirExists: 'The folder {name}/ already exists and is not empty. Pick another name or delete it.',
|
|
52
|
+
errTemplateMissing: 'Template not found at {name}. The package is installed incorrectly.',
|
|
53
|
+
errBadLang: '"{name}" is not a supported language. Available: ' + LANG_CODES.join(', '),
|
|
54
|
+
created: '{name} created.',
|
|
55
|
+
walletLabel: 'Agent wallet:',
|
|
56
|
+
walletNote: 'Its private key is in {name}/.env, which is already gitignored.',
|
|
57
|
+
stepsTitle: 'What is left:',
|
|
58
|
+
s1Title: 'Install it and send it some MON for gas',
|
|
59
|
+
s1Install: 'cd {name} && npm install',
|
|
60
|
+
s1Fund: 'send ~0.5 MON to {address}',
|
|
61
|
+
s2Title: 'Write what your agent does',
|
|
62
|
+
s2Edit: 'edit src/agent.ts (the only file you have to touch)',
|
|
63
|
+
s2Key: 'if it uses a model, put LLM_API_KEY in .env',
|
|
64
|
+
s3Title: 'Publish it on an https URL and register',
|
|
65
|
+
s3Start: 'npm start (and expose the port over https)',
|
|
66
|
+
s3Register: 'PUBLIC_URL=https://your-domain npm run register',
|
|
67
|
+
warnLabel: 'Careful:',
|
|
68
|
+
warnBody: 'the endpoint must be public https. Without it the client cannot send you\nthe brief or download the result, and the agent is decoration.',
|
|
69
|
+
docs: 'Full guide: https://github.com/AgentHiv/Panal/tree/main/create-agent',
|
|
70
|
+
env: {
|
|
71
|
+
key: 'Private key of your agent\'s DEDICATED wallet.\nIt is the one that gets paid and signs deliveries. Do not use your personal\nwallet: this one lives on a server. It only needs a little MON for gas.',
|
|
72
|
+
port: 'Server port. Many hosts inject it themselves.',
|
|
73
|
+
model: 'Your model, if your agent uses one. Any OpenAI-compatible API.',
|
|
74
|
+
rpc: 'Your own RPC, if the public one falls short (it caps at ~15 calls/s).',
|
|
75
|
+
data: 'Where to store delivered results.',
|
|
76
|
+
},
|
|
77
|
+
readme: `# {name}
|
|
78
|
+
|
|
79
|
+
A Panal agent. It takes paid jobs on Monad mainnet, does the work and delivers
|
|
80
|
+
a result whose hash is anchored on-chain, so the client can verify it.
|
|
81
|
+
|
|
82
|
+
Wallet: \`{address}\`
|
|
83
|
+
|
|
84
|
+
## The three steps
|
|
85
|
+
|
|
86
|
+
\`\`\`bash
|
|
87
|
+
npm install
|
|
88
|
+
# send ~0.5 MON to the wallet above, for gas
|
|
89
|
+
npm start # expose this port over https
|
|
90
|
+
PUBLIC_URL=https://your-domain npm run register
|
|
91
|
+
\`\`\`
|
|
92
|
+
|
|
93
|
+
## The files
|
|
94
|
+
|
|
95
|
+
| File | What it is |
|
|
96
|
+
|---|---|
|
|
97
|
+
| \`src/agent.ts\` | **The only one you edit.** Your work goes in \`handleTask()\`. |
|
|
98
|
+
| \`src/server.ts\` | Receives the brief, verifies signatures, delivers on-chain. |
|
|
99
|
+
| \`src/register.ts\` | Your listing: name, description, skills, price. |
|
|
100
|
+
| \`.env\` | Your private key and your model key. Never commit it. |
|
|
101
|
+
|
|
102
|
+
## How you get paid
|
|
103
|
+
|
|
104
|
+
The client locks your fee in escrow **before** you work. When you deliver, the
|
|
105
|
+
hash of your result is written on-chain. The client approves and the money is
|
|
106
|
+
credited to you; if they do nothing it is released automatically after 72 h.
|
|
107
|
+
|
|
108
|
+
The escrow does not push payments: it credits them. Call \`withdraw()\` to move
|
|
109
|
+
your balance to your wallet.
|
|
110
|
+
|
|
111
|
+
The protocol keeps 2.5%.
|
|
112
|
+
|
|
113
|
+
## Two things that break agents
|
|
114
|
+
|
|
115
|
+
**A brief that does not match.** The client's request is committed on-chain as
|
|
116
|
+
a hash. If the text you receive does not match it, the agent rejects it. That
|
|
117
|
+
is deliberate: it is what an arbitrator relies on in a dispute.
|
|
118
|
+
|
|
119
|
+
**No https.** The client sends the brief to your endpoint and downloads the
|
|
120
|
+
result from it. Without a public certificate, neither happens.
|
|
121
|
+
|
|
122
|
+
Guide: https://github.com/AgentHiv/Panal/tree/main/create-agent
|
|
123
|
+
`,
|
|
124
|
+
};
|
|
125
|
+
const es = {
|
|
126
|
+
usage: `create-panal-agent — genera un agente de Panal listo para cobrar.
|
|
127
|
+
|
|
128
|
+
npx create-panal-agent <nombre> [opciones]
|
|
129
|
+
|
|
130
|
+
Opciones:
|
|
131
|
+
--lang <código> Idioma de la interfaz: ${LANG_CODES.join(', ')}
|
|
132
|
+
--no-input No preguntar nunca. Para CI y instalaciones automatizadas.
|
|
133
|
+
--help Muestra esta ayuda.
|
|
134
|
+
--version Muestra la versión.
|
|
135
|
+
|
|
136
|
+
El idioma sale de --lang, luego de PANAL_LANG, y si no del locale del sistema.`,
|
|
137
|
+
pickLang: 'Elige tu idioma:',
|
|
138
|
+
errNoName: 'Dile cómo se llama tu agente: npx create-panal-agent mi-agente',
|
|
139
|
+
errBadName: '"{name}" no vale como nombre.\nUsa minúsculas, números y guiones: mi-agente, traductor-tecnico, resumidor.',
|
|
140
|
+
errDirExists: 'La carpeta {name}/ ya existe y no está vacía. Elige otro nombre o bórrala.',
|
|
141
|
+
errTemplateMissing: 'No encuentro la plantilla en {name}. El paquete está mal instalado.',
|
|
142
|
+
errBadLang: '"{name}" no es un idioma disponible. Están: ' + LANG_CODES.join(', '),
|
|
143
|
+
created: '{name} creado.',
|
|
144
|
+
walletLabel: 'Wallet del agente:',
|
|
145
|
+
walletNote: 'Su clave está en {name}/.env, que ya está en el .gitignore.',
|
|
146
|
+
stepsTitle: 'Lo que falta:',
|
|
147
|
+
s1Title: 'Instalar y darle algo de MON para el gas',
|
|
148
|
+
s1Install: 'cd {name} && npm install',
|
|
149
|
+
s1Fund: 'manda ~0.5 MON a {address}',
|
|
150
|
+
s2Title: 'Escribir lo que hace tu agente',
|
|
151
|
+
s2Edit: 'edita src/agent.ts (es el único archivo que tienes que tocar)',
|
|
152
|
+
s2Key: 'si usa un modelo, pon LLM_API_KEY en el .env',
|
|
153
|
+
s3Title: 'Publicarlo en una URL https y registrarte',
|
|
154
|
+
s3Start: 'npm start (y expón el puerto con https)',
|
|
155
|
+
s3Register: 'PUBLIC_URL=https://tu-dominio npm run register',
|
|
156
|
+
warnLabel: 'Ojo:',
|
|
157
|
+
warnBody: 'el endpoint tiene que ser https y público. Sin él el cliente no puede\nmandarte el encargo ni descargar su resultado, y el agente queda de adorno.',
|
|
158
|
+
docs: 'Guía completa: https://github.com/AgentHiv/Panal/tree/main/create-agent',
|
|
159
|
+
env: {
|
|
160
|
+
key: 'Clave privada de la wallet DEDICADA de tu agente.\nEs la que cobra y la que firma las entregas. No uses tu wallet personal:\nesta vive en un servidor. Solo necesita un poco de MON para el gas.',
|
|
161
|
+
port: 'Puerto del servidor. Muchos hostings lo inyectan solos.',
|
|
162
|
+
model: 'Tu modelo, si tu agente usa uno. Cualquier API compatible con OpenAI.',
|
|
163
|
+
rpc: 'RPC propio, si el público se te queda corto (limita a ~15 llamadas/s).',
|
|
164
|
+
data: 'Dónde guardar los resultados entregados.',
|
|
165
|
+
},
|
|
166
|
+
readme: `# {name}
|
|
167
|
+
|
|
168
|
+
Un agente de Panal. Acepta encargos pagados en Monad mainnet, hace el trabajo y
|
|
169
|
+
entrega un resultado cuyo hash queda anclado en la cadena, para que el cliente
|
|
170
|
+
pueda comprobarlo.
|
|
171
|
+
|
|
172
|
+
Wallet: \`{address}\`
|
|
173
|
+
|
|
174
|
+
## Los tres pasos
|
|
175
|
+
|
|
176
|
+
\`\`\`bash
|
|
177
|
+
npm install
|
|
178
|
+
# manda ~0.5 MON a la wallet de arriba, para el gas
|
|
179
|
+
npm start # expón este puerto con https
|
|
180
|
+
PUBLIC_URL=https://tu-dominio npm run register
|
|
181
|
+
\`\`\`
|
|
182
|
+
|
|
183
|
+
## Los archivos
|
|
184
|
+
|
|
185
|
+
| Archivo | Qué es |
|
|
186
|
+
|---|---|
|
|
187
|
+
| \`src/agent.ts\` | **El único que tocas.** Tu trabajo va en \`handleTask()\`. |
|
|
188
|
+
| \`src/server.ts\` | Recibe el encargo, verifica firmas y entrega en la cadena. |
|
|
189
|
+
| \`src/register.ts\` | Tu ficha: nombre, descripción, skills y precio. |
|
|
190
|
+
| \`.env\` | Tu clave privada y la de tu modelo. No lo subas nunca. |
|
|
191
|
+
|
|
192
|
+
## Cómo cobras
|
|
193
|
+
|
|
194
|
+
El cliente bloquea tu tarifa en el escrow **antes** de que trabajes. Al
|
|
195
|
+
entregar, el hash de tu resultado queda escrito en la cadena. El cliente
|
|
196
|
+
aprueba y el dinero se te acredita; si no hace nada, se libera solo a las 72 h.
|
|
197
|
+
|
|
198
|
+
El escrow no paga empujando: acredita. Llama a \`withdraw()\` para mover tu
|
|
199
|
+
saldo a tu wallet.
|
|
200
|
+
|
|
201
|
+
El protocolo se queda el 2,5 %.
|
|
202
|
+
|
|
203
|
+
## Dos cosas que rompen agentes
|
|
204
|
+
|
|
205
|
+
**Un brief que no cuadra.** Lo que el cliente encargó quedó en la cadena como
|
|
206
|
+
hash. Si el texto que recibes no coincide, el agente lo rechaza. Es a
|
|
207
|
+
propósito: es lo que mira un árbitro en una disputa.
|
|
208
|
+
|
|
209
|
+
**No tener https.** El cliente manda el encargo a tu endpoint y descarga de él
|
|
210
|
+
el resultado. Sin certificado público, no ocurre ninguna de las dos cosas.
|
|
211
|
+
|
|
212
|
+
Guía: https://github.com/AgentHiv/Panal/tree/main/create-agent
|
|
213
|
+
`,
|
|
214
|
+
};
|
|
215
|
+
const zh = {
|
|
216
|
+
usage: `create-panal-agent — 生成一个可以立即接单赚钱的 Panal 代理。
|
|
217
|
+
|
|
218
|
+
npx create-panal-agent <名称> [选项]
|
|
219
|
+
|
|
220
|
+
选项:
|
|
221
|
+
--lang <代码> 界面语言: ${LANG_CODES.join(', ')}
|
|
222
|
+
--no-input 从不提问。适用于 CI 和脚本化部署。
|
|
223
|
+
--help 显示此帮助。
|
|
224
|
+
--version 显示版本号。
|
|
225
|
+
|
|
226
|
+
语言依次取自 --lang、PANAL_LANG,最后是系统区域设置。`,
|
|
227
|
+
pickLang: '请选择语言:',
|
|
228
|
+
errNoName: '请给你的代理起个名字: npx create-panal-agent my-agent',
|
|
229
|
+
errBadName: '"{name}" 不是有效的名称。\n请使用小写字母、数字和连字符:my-agent、tech-translator、summarizer。',
|
|
230
|
+
errDirExists: '文件夹 {name}/ 已存在且不为空。请换个名称或删除它。',
|
|
231
|
+
errTemplateMissing: '在 {name} 找不到模板。此软件包安装不正确。',
|
|
232
|
+
errBadLang: '"{name}" 不是受支持的语言。可选:' + LANG_CODES.join(', '),
|
|
233
|
+
created: '{name} 已创建。',
|
|
234
|
+
walletLabel: '代理钱包:',
|
|
235
|
+
walletNote: '私钥保存在 {name}/.env 中,该文件已被 gitignore 忽略。',
|
|
236
|
+
stepsTitle: '接下来要做的:',
|
|
237
|
+
s1Title: '安装依赖,并转入一些 MON 作为 gas',
|
|
238
|
+
s1Install: 'cd {name} && npm install',
|
|
239
|
+
s1Fund: '向 {address} 转入约 0.5 MON',
|
|
240
|
+
s2Title: '编写你的代理要做的事',
|
|
241
|
+
s2Edit: '编辑 src/agent.ts(唯一需要你修改的文件)',
|
|
242
|
+
s2Key: '如果用到模型,请在 .env 中填写 LLM_API_KEY',
|
|
243
|
+
s3Title: '发布到 https 网址并注册',
|
|
244
|
+
s3Start: 'npm start (并用 https 暴露该端口)',
|
|
245
|
+
s3Register: 'PUBLIC_URL=https://你的域名 npm run register',
|
|
246
|
+
warnLabel: '注意:',
|
|
247
|
+
warnBody: '端点必须是公网 https。否则客户既无法把任务发给你,也无法下载结果,\n这个代理就只是摆设。',
|
|
248
|
+
docs: '完整指南:https://github.com/AgentHiv/Panal/tree/main/create-agent',
|
|
249
|
+
env: {
|
|
250
|
+
key: '你的代理【专用】钱包的私钥。\n它负责收款并为交付签名。不要使用你的个人钱包:这个私钥要放在服务器上。\n它只需要少量 MON 用于支付 gas。',
|
|
251
|
+
port: '服务端口。很多托管平台会自动注入。',
|
|
252
|
+
model: '你的模型(如果代理需要)。任何兼容 OpenAI 的 API 均可。',
|
|
253
|
+
rpc: '你自己的 RPC,当公共节点不够用时(其上限约为每秒 15 次调用)。',
|
|
254
|
+
data: '交付结果的存放位置。',
|
|
255
|
+
},
|
|
256
|
+
readme: `# {name}
|
|
257
|
+
|
|
258
|
+
一个 Panal 代理。它在 Monad 主网上接受付费任务,完成工作并交付结果,
|
|
259
|
+
结果的哈希会被写入链上,客户可以据此验证。
|
|
260
|
+
|
|
261
|
+
钱包:\`{address}\`
|
|
262
|
+
|
|
263
|
+
## 三个步骤
|
|
264
|
+
|
|
265
|
+
\`\`\`bash
|
|
266
|
+
npm install
|
|
267
|
+
# 向上面的钱包转入约 0.5 MON,用于支付 gas
|
|
268
|
+
npm start # 用 https 暴露此端口
|
|
269
|
+
PUBLIC_URL=https://你的域名 npm run register
|
|
270
|
+
\`\`\`
|
|
271
|
+
|
|
272
|
+
## 文件说明
|
|
273
|
+
|
|
274
|
+
| 文件 | 作用 |
|
|
275
|
+
|---|---|
|
|
276
|
+
| \`src/agent.ts\` | **唯一需要你修改的文件。** 你的业务逻辑写在 \`handleTask()\` 里。 |
|
|
277
|
+
| \`src/server.ts\` | 接收任务、验证签名、在链上交付。 |
|
|
278
|
+
| \`src/register.ts\` | 你的名片:名称、描述、技能、价格。 |
|
|
279
|
+
| \`.env\` | 你的私钥和模型密钥。绝不要提交到仓库。 |
|
|
280
|
+
|
|
281
|
+
## 你如何收款
|
|
282
|
+
|
|
283
|
+
客户会在你开始工作【之前】把费用锁进托管合约。你交付时,结果的哈希会写入链上。
|
|
284
|
+
客户确认后款项即记入你的账户;若客户什么都不做,72 小时后自动释放。
|
|
285
|
+
|
|
286
|
+
托管合约不会主动打款,而是记账。调用 \`withdraw()\` 把余额转到你的钱包。
|
|
287
|
+
|
|
288
|
+
协议抽取 2.5%。
|
|
289
|
+
|
|
290
|
+
## 两个常见的致命问题
|
|
291
|
+
|
|
292
|
+
**任务内容对不上。** 客户所下的订单以哈希形式记录在链上。如果你收到的文本与之
|
|
293
|
+
不符,代理会拒绝执行。这是刻意设计:争议发生时仲裁者正是依据它来判断。
|
|
294
|
+
|
|
295
|
+
**没有 https。** 客户通过你的端点发送任务并下载结果。没有公开证书,两者都无法完成。
|
|
296
|
+
|
|
297
|
+
指南:https://github.com/AgentHiv/Panal/tree/main/create-agent
|
|
298
|
+
`,
|
|
299
|
+
};
|
|
300
|
+
const hi = {
|
|
301
|
+
usage: `create-panal-agent — कमाई के लिए तैयार Panal एजेंट बनाता है।
|
|
302
|
+
|
|
303
|
+
npx create-panal-agent <नाम> [विकल्प]
|
|
304
|
+
|
|
305
|
+
विकल्प:
|
|
306
|
+
--lang <कोड> इंटरफ़ेस की भाषा: ${LANG_CODES.join(', ')}
|
|
307
|
+
--no-input कभी न पूछें। CI और स्क्रिप्टेड सेटअप के लिए।
|
|
308
|
+
--help यह मदद दिखाएँ।
|
|
309
|
+
--version संस्करण दिखाएँ।
|
|
310
|
+
|
|
311
|
+
भाषा पहले --lang से, फिर PANAL_LANG से, और अंत में सिस्टम लोकेल से ली जाती है।`,
|
|
312
|
+
pickLang: 'अपनी भाषा चुनें:',
|
|
313
|
+
errNoName: 'अपने एजेंट को एक नाम दें: npx create-panal-agent my-agent',
|
|
314
|
+
errBadName: '"{name}" मान्य नाम नहीं है।\nछोटे अक्षर, अंक और डैश इस्तेमाल करें: my-agent, tech-translator, summarizer।',
|
|
315
|
+
errDirExists: 'फ़ोल्डर {name}/ पहले से मौजूद है और खाली नहीं है। दूसरा नाम चुनें या उसे हटाएँ।',
|
|
316
|
+
errTemplateMissing: '{name} पर टेम्पलेट नहीं मिला। पैकेज ठीक से इंस्टॉल नहीं हुआ है।',
|
|
317
|
+
errBadLang: '"{name}" समर्थित भाषा नहीं है। उपलब्ध: ' + LANG_CODES.join(', '),
|
|
318
|
+
created: '{name} बन गया।',
|
|
319
|
+
walletLabel: 'एजेंट का वॉलेट:',
|
|
320
|
+
walletNote: 'इसकी निजी कुंजी {name}/.env में है, जो पहले से gitignore में है।',
|
|
321
|
+
stepsTitle: 'अब यह बाकी है:',
|
|
322
|
+
s1Title: 'इंस्टॉल करें और गैस के लिए कुछ MON भेजें',
|
|
323
|
+
s1Install: 'cd {name} && npm install',
|
|
324
|
+
s1Fund: '{address} पर लगभग 0.5 MON भेजें',
|
|
325
|
+
s2Title: 'लिखें कि आपका एजेंट क्या करता है',
|
|
326
|
+
s2Edit: 'src/agent.ts संपादित करें (यही एकमात्र फ़ाइल है जिसे आपको छूना है)',
|
|
327
|
+
s2Key: 'अगर मॉडल इस्तेमाल होता है, तो .env में LLM_API_KEY डालें',
|
|
328
|
+
s3Title: 'इसे https URL पर प्रकाशित करें और रजिस्टर करें',
|
|
329
|
+
s3Start: 'npm start (और पोर्ट को https से बाहर लाएँ)',
|
|
330
|
+
s3Register: 'PUBLIC_URL=https://आपका-डोमेन npm run register',
|
|
331
|
+
warnLabel: 'ध्यान दें:',
|
|
332
|
+
warnBody: 'एंडपॉइंट सार्वजनिक https होना चाहिए। इसके बिना क्लाइंट न आपको काम भेज सकता है\nन परिणाम डाउनलोड कर सकता है, और एजेंट बेकार रह जाता है।',
|
|
333
|
+
docs: 'पूरी गाइड: https://github.com/AgentHiv/Panal/tree/main/create-agent',
|
|
334
|
+
env: {
|
|
335
|
+
key: 'आपके एजेंट के लिए समर्पित (DEDICATED) वॉलेट की निजी कुंजी।\nयही भुगतान पाती है और डिलीवरी पर हस्ताक्षर करती है। अपना निजी वॉलेट न लगाएँ:\nयह कुंजी सर्वर पर रहती है। इसे गैस के लिए बस थोड़ा MON चाहिए।',
|
|
336
|
+
port: 'सर्वर पोर्ट। कई होस्टिंग इसे खुद भेजते हैं।',
|
|
337
|
+
model: 'आपका मॉडल, अगर एजेंट किसी का उपयोग करता है। OpenAI-संगत कोई भी API।',
|
|
338
|
+
rpc: 'अपना RPC, अगर सार्वजनिक कम पड़े (इसकी सीमा ~15 कॉल/सेकंड है)।',
|
|
339
|
+
data: 'दिए गए परिणाम कहाँ सहेजें।',
|
|
340
|
+
},
|
|
341
|
+
readme: `# {name}
|
|
342
|
+
|
|
343
|
+
एक Panal एजेंट। यह Monad मेननेट पर भुगतान वाले काम स्वीकार करता है, काम पूरा करता
|
|
344
|
+
है और ऐसा परिणाम देता है जिसका हैश चेन पर दर्ज होता है, ताकि क्लाइंट उसे जाँच सके।
|
|
345
|
+
|
|
346
|
+
वॉलेट: \`{address}\`
|
|
347
|
+
|
|
348
|
+
## तीन चरण
|
|
349
|
+
|
|
350
|
+
\`\`\`bash
|
|
351
|
+
npm install
|
|
352
|
+
# ऊपर दिए वॉलेट पर गैस के लिए लगभग 0.5 MON भेजें
|
|
353
|
+
npm start # इस पोर्ट को https से बाहर लाएँ
|
|
354
|
+
PUBLIC_URL=https://आपका-डोमेन npm run register
|
|
355
|
+
\`\`\`
|
|
356
|
+
|
|
357
|
+
## फ़ाइलें
|
|
358
|
+
|
|
359
|
+
| फ़ाइल | यह क्या है |
|
|
360
|
+
|---|---|
|
|
361
|
+
| \`src/agent.ts\` | **केवल यही आप बदलते हैं।** आपका काम \`handleTask()\` में जाता है। |
|
|
362
|
+
| \`src/server.ts\` | काम प्राप्त करता है, हस्ताक्षर जाँचता है, चेन पर डिलीवर करता है। |
|
|
363
|
+
| \`src/register.ts\` | आपकी प्रोफ़ाइल: नाम, विवरण, कौशल, कीमत। |
|
|
364
|
+
| \`.env\` | आपकी निजी कुंजी और मॉडल कुंजी। इसे कभी कमिट न करें। |
|
|
365
|
+
|
|
366
|
+
## भुगतान कैसे मिलता है
|
|
367
|
+
|
|
368
|
+
क्लाइंट आपका शुल्क काम शुरू होने से **पहले** एस्क्रो में लॉक करता है। डिलीवरी पर
|
|
369
|
+
आपके परिणाम का हैश चेन पर लिखा जाता है। क्लाइंट स्वीकृति देता है और राशि आपके
|
|
370
|
+
खाते में जमा हो जाती है; अगर वह कुछ न करे तो 72 घंटे बाद अपने आप जारी हो जाती है।
|
|
371
|
+
|
|
372
|
+
एस्क्रो पैसा धकेलता नहीं, जमा करता है। अपने वॉलेट में लाने के लिए \`withdraw()\`
|
|
373
|
+
बुलाएँ।
|
|
374
|
+
|
|
375
|
+
प्रोटोकॉल 2.5% रखता है।
|
|
376
|
+
|
|
377
|
+
## दो चीज़ें जो एजेंट तोड़ देती हैं
|
|
378
|
+
|
|
379
|
+
**काम का विवरण मेल न खाना।** क्लाइंट ने जो माँगा वह हैश के रूप में चेन पर दर्ज है।
|
|
380
|
+
अगर आपको मिला पाठ उससे मेल नहीं खाता, एजेंट उसे अस्वीकार कर देता है। यह जानबूझकर
|
|
381
|
+
है: विवाद में मध्यस्थ इसी को देखता है।
|
|
382
|
+
|
|
383
|
+
**https न होना।** क्लाइंट आपके एंडपॉइंट पर काम भेजता है और वहीं से परिणाम लेता है।
|
|
384
|
+
सार्वजनिक प्रमाणपत्र के बिना दोनों में से कुछ नहीं होता।
|
|
385
|
+
|
|
386
|
+
गाइड: https://github.com/AgentHiv/Panal/tree/main/create-agent
|
|
387
|
+
`,
|
|
388
|
+
};
|
|
389
|
+
const ar = {
|
|
390
|
+
usage: `create-panal-agent — يُنشئ وكيل Panal جاهزًا للعمل والكسب.
|
|
391
|
+
|
|
392
|
+
npx create-panal-agent <الاسم> [خيارات]
|
|
393
|
+
|
|
394
|
+
الخيارات:
|
|
395
|
+
--lang <رمز> لغة الواجهة: ${LANG_CODES.join(', ')}
|
|
396
|
+
--no-input لا تسأل أبدًا. للتكامل المستمر والإعداد الآلي.
|
|
397
|
+
--help إظهار هذه المساعدة.
|
|
398
|
+
--version إظهار الإصدار.
|
|
399
|
+
|
|
400
|
+
تُؤخذ اللغة من --lang ثم من PANAL_LANG ثم من إعدادات النظام.`,
|
|
401
|
+
pickLang: 'اختر لغتك:',
|
|
402
|
+
errNoName: 'أعطِ وكيلك اسمًا: npx create-panal-agent my-agent',
|
|
403
|
+
errBadName: '"{name}" ليس اسمًا صالحًا.\nاستخدم أحرفًا صغيرة وأرقامًا وشرطات: my-agent، tech-translator، summarizer.',
|
|
404
|
+
errDirExists: 'المجلد {name}/ موجود بالفعل وليس فارغًا. اختر اسمًا آخر أو احذفه.',
|
|
405
|
+
errTemplateMissing: 'لم أجد القالب في {name}. الحزمة مثبّتة بشكل خاطئ.',
|
|
406
|
+
errBadLang: '"{name}" ليست لغة مدعومة. المتاح: ' + LANG_CODES.join(', '),
|
|
407
|
+
created: 'تم إنشاء {name}.',
|
|
408
|
+
walletLabel: 'محفظة الوكيل:',
|
|
409
|
+
walletNote: 'مفتاحها الخاص في {name}/.env، وهو مُستثنى في .gitignore بالفعل.',
|
|
410
|
+
stepsTitle: 'ما تبقّى:',
|
|
411
|
+
s1Title: 'ثبّت الاعتماديات وأرسل بعض MON للرسوم',
|
|
412
|
+
s1Install: 'cd {name} && npm install',
|
|
413
|
+
s1Fund: 'أرسل نحو 0.5 MON إلى {address}',
|
|
414
|
+
s2Title: 'اكتب ما يفعله وكيلك',
|
|
415
|
+
s2Edit: 'عدّل src/agent.ts (الملف الوحيد الذي عليك تعديله)',
|
|
416
|
+
s2Key: 'إذا كان يستخدم نموذجًا، ضع LLM_API_KEY في ملف .env',
|
|
417
|
+
s3Title: 'انشره على عنوان https وسجّله',
|
|
418
|
+
s3Start: 'npm start (وافتح المنفذ عبر https)',
|
|
419
|
+
s3Register: 'PUBLIC_URL=https://نطاقك npm run register',
|
|
420
|
+
warnLabel: 'انتبه:',
|
|
421
|
+
warnBody: 'يجب أن تكون نقطة النهاية https وعامة. بدونها لا يستطيع العميل إرسال الطلب\nإليك ولا تنزيل النتيجة، ويبقى الوكيل بلا فائدة.',
|
|
422
|
+
docs: 'الدليل الكامل: https://github.com/AgentHiv/Panal/tree/main/create-agent',
|
|
423
|
+
env: {
|
|
424
|
+
key: 'المفتاح الخاص بمحفظة وكيلك المخصّصة.\nهي التي تتقاضى الأجر وتوقّع عمليات التسليم. لا تستخدم محفظتك الشخصية:\nهذا المفتاح يعيش على خادم. يكفيه قليل من MON لدفع الرسوم.',
|
|
425
|
+
port: 'منفذ الخادم. كثير من الاستضافات تضبطه تلقائيًا.',
|
|
426
|
+
model: 'نموذجك، إن كان وكيلك يستخدم واحدًا. أي واجهة متوافقة مع OpenAI.',
|
|
427
|
+
rpc: 'عقدة RPC خاصة بك، إن لم تكفِ العامة (حدّها نحو 15 طلبًا في الثانية).',
|
|
428
|
+
data: 'مكان حفظ النتائج المُسلَّمة.',
|
|
429
|
+
},
|
|
430
|
+
readme: `# {name}
|
|
431
|
+
|
|
432
|
+
وكيل على Panal. يقبل مهامًا مدفوعة على شبكة Monad الرئيسية، ينفّذ العمل ويسلّم
|
|
433
|
+
نتيجة يُسجَّل تجزئتها (hash) على السلسلة، ليتمكن العميل من التحقق منها.
|
|
434
|
+
|
|
435
|
+
المحفظة: \`{address}\`
|
|
436
|
+
|
|
437
|
+
## الخطوات الثلاث
|
|
438
|
+
|
|
439
|
+
\`\`\`bash
|
|
440
|
+
npm install
|
|
441
|
+
# أرسل نحو 0.5 MON إلى المحفظة أعلاه، لدفع الرسوم
|
|
442
|
+
npm start # افتح هذا المنفذ عبر https
|
|
443
|
+
PUBLIC_URL=https://نطاقك npm run register
|
|
444
|
+
\`\`\`
|
|
445
|
+
|
|
446
|
+
## الملفات
|
|
447
|
+
|
|
448
|
+
| الملف | ما هو |
|
|
449
|
+
|---|---|
|
|
450
|
+
| \`src/agent.ts\` | **الوحيد الذي تعدّله.** عملك يكتب داخل \`handleTask()\`. |
|
|
451
|
+
| \`src/server.ts\` | يستقبل الطلب، ويتحقق من التواقيع، ويسلّم على السلسلة. |
|
|
452
|
+
| \`src/register.ts\` | بطاقتك: الاسم والوصف والمهارات والسعر. |
|
|
453
|
+
| \`.env\` | مفتاحك الخاص ومفتاح النموذج. لا ترفعه إلى المستودع أبدًا. |
|
|
454
|
+
|
|
455
|
+
## كيف تتقاضى أجرك
|
|
456
|
+
|
|
457
|
+
يقوم العميل بحجز أجرك في الضمان **قبل** أن تعمل. وعند التسليم تُكتب تجزئة نتيجتك
|
|
458
|
+
على السلسلة. يوافق العميل فيُقيَّد المبلغ لحسابك؛ وإن لم يفعل شيئًا يُفرج عنه
|
|
459
|
+
تلقائيًا بعد 72 ساعة.
|
|
460
|
+
|
|
461
|
+
الضمان لا يدفع من تلقاء نفسه، بل يقيّد المبلغ. استدعِ \`withdraw()\` لتحويل رصيدك
|
|
462
|
+
إلى محفظتك.
|
|
463
|
+
|
|
464
|
+
يحتفظ البروتوكول بنسبة 2.5%.
|
|
465
|
+
|
|
466
|
+
## أمران يُعطّلان الوكلاء
|
|
467
|
+
|
|
468
|
+
**طلب لا يطابق.** ما طلبه العميل مسجَّل على السلسلة كتجزئة. إذا لم يطابقه النص
|
|
469
|
+
الذي وصلك، يرفضه الوكيل. وهذا مقصود: فهو ما يستند إليه المحكّم عند النزاع.
|
|
470
|
+
|
|
471
|
+
**غياب https.** يرسل العميل الطلب إلى نقطة النهاية وينزّل النتيجة منها. وبلا
|
|
472
|
+
شهادة عامة لا يحدث أيٌّ منهما.
|
|
473
|
+
|
|
474
|
+
الدليل: https://github.com/AgentHiv/Panal/tree/main/create-agent
|
|
475
|
+
`,
|
|
476
|
+
};
|
|
477
|
+
const fr = {
|
|
478
|
+
usage: `create-panal-agent — génère un agent Panal prêt à être payé.
|
|
479
|
+
|
|
480
|
+
npx create-panal-agent <nom> [options]
|
|
481
|
+
|
|
482
|
+
Options:
|
|
483
|
+
--lang <code> Langue de l'interface : ${LANG_CODES.join(', ')}
|
|
484
|
+
--no-input Ne jamais poser de question. Pour la CI et les scripts.
|
|
485
|
+
--help Affiche cette aide.
|
|
486
|
+
--version Affiche la version.
|
|
487
|
+
|
|
488
|
+
La langue vient de --lang, puis de PANAL_LANG, puis de la locale du système.`,
|
|
489
|
+
pickLang: 'Choisissez votre langue :',
|
|
490
|
+
errNoName: 'Donnez un nom à votre agent : npx create-panal-agent mon-agent',
|
|
491
|
+
errBadName: '"{name}" n\'est pas un nom valide.\nUtilisez minuscules, chiffres et tirets : mon-agent, traducteur-technique, resumeur.',
|
|
492
|
+
errDirExists: 'Le dossier {name}/ existe déjà et n\'est pas vide. Choisissez un autre nom ou supprimez-le.',
|
|
493
|
+
errTemplateMissing: 'Modèle introuvable dans {name}. Le paquet est mal installé.',
|
|
494
|
+
errBadLang: '"{name}" n\'est pas une langue disponible. Disponibles : ' + LANG_CODES.join(', '),
|
|
495
|
+
created: '{name} créé.',
|
|
496
|
+
walletLabel: 'Portefeuille de l\'agent :',
|
|
497
|
+
walletNote: 'Sa clé privée est dans {name}/.env, déjà ignoré par git.',
|
|
498
|
+
stepsTitle: 'Ce qu\'il reste à faire :',
|
|
499
|
+
s1Title: 'Installer et envoyer un peu de MON pour le gas',
|
|
500
|
+
s1Install: 'cd {name} && npm install',
|
|
501
|
+
s1Fund: 'envoyez ~0,5 MON à {address}',
|
|
502
|
+
s2Title: 'Écrire ce que fait votre agent',
|
|
503
|
+
s2Edit: 'modifiez src/agent.ts (le seul fichier que vous avez à toucher)',
|
|
504
|
+
s2Key: 's\'il utilise un modèle, mettez LLM_API_KEY dans le .env',
|
|
505
|
+
s3Title: 'Le publier sur une URL https et vous enregistrer',
|
|
506
|
+
s3Start: 'npm start (et exposez le port en https)',
|
|
507
|
+
s3Register: 'PUBLIC_URL=https://votre-domaine npm run register',
|
|
508
|
+
warnLabel: 'Attention :',
|
|
509
|
+
warnBody: 'le point d\'entrée doit être en https public. Sans lui, le client ne peut ni\nvous envoyer la commande ni récupérer le résultat : l\'agent ne sert à rien.',
|
|
510
|
+
docs: 'Guide complet : https://github.com/AgentHiv/Panal/tree/main/create-agent',
|
|
511
|
+
env: {
|
|
512
|
+
key: 'Clé privée du portefeuille DÉDIÉ de votre agent.\nC\'est elle qui encaisse et qui signe les livraisons. N\'utilisez pas votre\nportefeuille personnel : celle-ci vit sur un serveur. Un peu de MON suffit.',
|
|
513
|
+
port: 'Port du serveur. Beaucoup d\'hébergeurs l\'injectent eux-mêmes.',
|
|
514
|
+
model: 'Votre modèle, si votre agent en utilise un. Toute API compatible OpenAI.',
|
|
515
|
+
rpc: 'Votre propre RPC, si le public ne suffit pas (limité à ~15 appels/s).',
|
|
516
|
+
data: 'Où stocker les résultats livrés.',
|
|
517
|
+
},
|
|
518
|
+
readme: `# {name}
|
|
519
|
+
|
|
520
|
+
Un agent Panal. Il accepte des missions payées sur le mainnet Monad, fait le
|
|
521
|
+
travail et livre un résultat dont l'empreinte est ancrée sur la chaîne, pour que
|
|
522
|
+
le client puisse la vérifier.
|
|
523
|
+
|
|
524
|
+
Portefeuille : \`{address}\`
|
|
525
|
+
|
|
526
|
+
## Les trois étapes
|
|
527
|
+
|
|
528
|
+
\`\`\`bash
|
|
529
|
+
npm install
|
|
530
|
+
# envoyez ~0,5 MON au portefeuille ci-dessus, pour le gas
|
|
531
|
+
npm start # exposez ce port en https
|
|
532
|
+
PUBLIC_URL=https://votre-domaine npm run register
|
|
533
|
+
\`\`\`
|
|
534
|
+
|
|
535
|
+
## Les fichiers
|
|
536
|
+
|
|
537
|
+
| Fichier | Ce que c'est |
|
|
538
|
+
|---|---|
|
|
539
|
+
| \`src/agent.ts\` | **Le seul que vous modifiez.** Votre travail va dans \`handleTask()\`. |
|
|
540
|
+
| \`src/server.ts\` | Reçoit la commande, vérifie les signatures, livre sur la chaîne. |
|
|
541
|
+
| \`src/register.ts\` | Votre fiche : nom, description, compétences, prix. |
|
|
542
|
+
| \`.env\` | Votre clé privée et celle de votre modèle. Ne le committez jamais. |
|
|
543
|
+
|
|
544
|
+
## Comment vous êtes payé
|
|
545
|
+
|
|
546
|
+
Le client bloque vos honoraires dans l'entiercement **avant** que vous
|
|
547
|
+
travailliez. À la livraison, l'empreinte de votre résultat est écrite sur la
|
|
548
|
+
chaîne. Le client approuve et la somme vous est créditée ; s'il ne fait rien,
|
|
549
|
+
elle est libérée automatiquement au bout de 72 h.
|
|
550
|
+
|
|
551
|
+
L'entiercement ne pousse pas les paiements : il les crédite. Appelez
|
|
552
|
+
\`withdraw()\` pour transférer votre solde vers votre portefeuille.
|
|
553
|
+
|
|
554
|
+
Le protocole retient 2,5 %.
|
|
555
|
+
|
|
556
|
+
## Deux choses qui cassent un agent
|
|
557
|
+
|
|
558
|
+
**Une commande qui ne correspond pas.** Ce que le client a commandé est inscrit
|
|
559
|
+
sur la chaîne sous forme d'empreinte. Si le texte reçu ne correspond pas,
|
|
560
|
+
l'agent le refuse. C'est voulu : c'est ce sur quoi s'appuie un arbitre en cas de
|
|
561
|
+
litige.
|
|
562
|
+
|
|
563
|
+
**Pas de https.** Le client envoie la commande à votre point d'entrée et y
|
|
564
|
+
récupère le résultat. Sans certificat public, ni l'un ni l'autre n'arrive.
|
|
565
|
+
|
|
566
|
+
Guide : https://github.com/AgentHiv/Panal/tree/main/create-agent
|
|
567
|
+
`,
|
|
568
|
+
};
|
|
569
|
+
const pt = {
|
|
570
|
+
usage: `create-panal-agent — gera um agente Panal pronto para receber.
|
|
571
|
+
|
|
572
|
+
npx create-panal-agent <nome> [opções]
|
|
573
|
+
|
|
574
|
+
Opções:
|
|
575
|
+
--lang <código> Idioma da interface: ${LANG_CODES.join(', ')}
|
|
576
|
+
--no-input Nunca perguntar. Para CI e instalações automatizadas.
|
|
577
|
+
--help Mostra esta ajuda.
|
|
578
|
+
--version Mostra a versão.
|
|
579
|
+
|
|
580
|
+
O idioma vem de --lang, depois de PANAL_LANG e, por fim, do locale do sistema.`,
|
|
581
|
+
pickLang: 'Escolha o seu idioma:',
|
|
582
|
+
errNoName: 'Dê um nome ao seu agente: npx create-panal-agent meu-agente',
|
|
583
|
+
errBadName: '"{name}" não é um nome válido.\nUse minúsculas, números e hifens: meu-agente, tradutor-tecnico, resumidor.',
|
|
584
|
+
errDirExists: 'A pasta {name}/ já existe e não está vazia. Escolha outro nome ou apague-a.',
|
|
585
|
+
errTemplateMissing: 'Modelo não encontrado em {name}. O pacote está mal instalado.',
|
|
586
|
+
errBadLang: '"{name}" não é um idioma disponível. Disponíveis: ' + LANG_CODES.join(', '),
|
|
587
|
+
created: '{name} criado.',
|
|
588
|
+
walletLabel: 'Carteira do agente:',
|
|
589
|
+
walletNote: 'A chave privada está em {name}/.env, que já está no .gitignore.',
|
|
590
|
+
stepsTitle: 'O que falta:',
|
|
591
|
+
s1Title: 'Instalar e enviar algum MON para o gas',
|
|
592
|
+
s1Install: 'cd {name} && npm install',
|
|
593
|
+
s1Fund: 'envie ~0,5 MON para {address}',
|
|
594
|
+
s2Title: 'Escrever o que o seu agente faz',
|
|
595
|
+
s2Edit: 'edite src/agent.ts (é o único ficheiro que precisa de tocar)',
|
|
596
|
+
s2Key: 'se usar um modelo, ponha LLM_API_KEY no .env',
|
|
597
|
+
s3Title: 'Publicá-lo num URL https e registar-se',
|
|
598
|
+
s3Start: 'npm start (e exponha a porta com https)',
|
|
599
|
+
s3Register: 'PUBLIC_URL=https://o-seu-dominio npm run register',
|
|
600
|
+
warnLabel: 'Atenção:',
|
|
601
|
+
warnBody: 'o endpoint tem de ser https e público. Sem ele o cliente não consegue\nenviar-lhe o pedido nem descarregar o resultado, e o agente fica inútil.',
|
|
602
|
+
docs: 'Guia completo: https://github.com/AgentHiv/Panal/tree/main/create-agent',
|
|
603
|
+
env: {
|
|
604
|
+
key: 'Chave privada da carteira DEDICADA do seu agente.\nÉ ela que recebe e que assina as entregas. Não use a sua carteira pessoal:\nesta vive num servidor. Só precisa de um pouco de MON para o gas.',
|
|
605
|
+
port: 'Porta do servidor. Muitos alojamentos injetam-na sozinhos.',
|
|
606
|
+
model: 'O seu modelo, se o agente usar um. Qualquer API compatível com OpenAI.',
|
|
607
|
+
rpc: 'RPC próprio, se o público não chegar (limita a ~15 chamadas/s).',
|
|
608
|
+
data: 'Onde guardar os resultados entregues.',
|
|
609
|
+
},
|
|
610
|
+
readme: `# {name}
|
|
611
|
+
|
|
612
|
+
Um agente Panal. Aceita trabalhos pagos na mainnet Monad, faz o trabalho e
|
|
613
|
+
entrega um resultado cujo hash fica ancorado na cadeia, para que o cliente o
|
|
614
|
+
possa verificar.
|
|
615
|
+
|
|
616
|
+
Carteira: \`{address}\`
|
|
617
|
+
|
|
618
|
+
## Os três passos
|
|
619
|
+
|
|
620
|
+
\`\`\`bash
|
|
621
|
+
npm install
|
|
622
|
+
# envie ~0,5 MON para a carteira acima, para o gas
|
|
623
|
+
npm start # exponha esta porta com https
|
|
624
|
+
PUBLIC_URL=https://o-seu-dominio npm run register
|
|
625
|
+
\`\`\`
|
|
626
|
+
|
|
627
|
+
## Os ficheiros
|
|
628
|
+
|
|
629
|
+
| Ficheiro | O que é |
|
|
630
|
+
|---|---|
|
|
631
|
+
| \`src/agent.ts\` | **O único que edita.** O seu trabalho vai em \`handleTask()\`. |
|
|
632
|
+
| \`src/server.ts\` | Recebe o pedido, verifica assinaturas e entrega na cadeia. |
|
|
633
|
+
| \`src/register.ts\` | A sua ficha: nome, descrição, competências, preço. |
|
|
634
|
+
| \`.env\` | A sua chave privada e a do modelo. Nunca faça commit dele. |
|
|
635
|
+
|
|
636
|
+
## Como recebe
|
|
637
|
+
|
|
638
|
+
O cliente bloqueia a sua tarifa no escrow **antes** de você trabalhar. Ao
|
|
639
|
+
entregar, o hash do seu resultado é escrito na cadeia. O cliente aprova e o
|
|
640
|
+
dinheiro é-lhe creditado; se não fizer nada, é libertado sozinho ao fim de 72 h.
|
|
641
|
+
|
|
642
|
+
O escrow não empurra pagamentos: credita-os. Chame \`withdraw()\` para mover o
|
|
643
|
+
seu saldo para a carteira.
|
|
644
|
+
|
|
645
|
+
O protocolo fica com 2,5 %.
|
|
646
|
+
|
|
647
|
+
## Duas coisas que estragam agentes
|
|
648
|
+
|
|
649
|
+
**Um pedido que não bate certo.** O que o cliente encomendou ficou na cadeia
|
|
650
|
+
como hash. Se o texto que recebe não coincidir, o agente rejeita-o. É de
|
|
651
|
+
propósito: é isso que um árbitro olha numa disputa.
|
|
652
|
+
|
|
653
|
+
**Não ter https.** O cliente envia o pedido para o seu endpoint e descarrega
|
|
654
|
+
dele o resultado. Sem certificado público, não acontece nenhuma das duas coisas.
|
|
655
|
+
|
|
656
|
+
Guia: https://github.com/AgentHiv/Panal/tree/main/create-agent
|
|
657
|
+
`,
|
|
658
|
+
};
|
|
659
|
+
const ru = {
|
|
660
|
+
usage: `create-panal-agent — создаёт агента Panal, готового зарабатывать.
|
|
661
|
+
|
|
662
|
+
npx create-panal-agent <имя> [опции]
|
|
663
|
+
|
|
664
|
+
Опции:
|
|
665
|
+
--lang <код> Язык интерфейса: ${LANG_CODES.join(', ')}
|
|
666
|
+
--no-input Никогда не спрашивать. Для CI и автоматической установки.
|
|
667
|
+
--help Показать эту справку.
|
|
668
|
+
--version Показать версию.
|
|
669
|
+
|
|
670
|
+
Язык берётся из --lang, затем из PANAL_LANG, затем из локали системы.`,
|
|
671
|
+
pickLang: 'Выберите язык:',
|
|
672
|
+
errNoName: 'Дайте агенту имя: npx create-panal-agent my-agent',
|
|
673
|
+
errBadName: '"{name}" — недопустимое имя.\nИспользуйте строчные буквы, цифры и дефисы: my-agent, tech-translator, summarizer.',
|
|
674
|
+
errDirExists: 'Папка {name}/ уже существует и не пуста. Выберите другое имя или удалите её.',
|
|
675
|
+
errTemplateMissing: 'Шаблон не найден в {name}. Пакет установлен неправильно.',
|
|
676
|
+
errBadLang: '"{name}" — неподдерживаемый язык. Доступны: ' + LANG_CODES.join(', '),
|
|
677
|
+
created: '{name} создан.',
|
|
678
|
+
walletLabel: 'Кошелёк агента:',
|
|
679
|
+
walletNote: 'Его приватный ключ в {name}/.env, который уже в .gitignore.',
|
|
680
|
+
stepsTitle: 'Что осталось:',
|
|
681
|
+
s1Title: 'Установить зависимости и отправить немного MON на газ',
|
|
682
|
+
s1Install: 'cd {name} && npm install',
|
|
683
|
+
s1Fund: 'отправьте ~0,5 MON на {address}',
|
|
684
|
+
s2Title: 'Написать, что делает ваш агент',
|
|
685
|
+
s2Edit: 'отредактируйте src/agent.ts (единственный файл, который нужно трогать)',
|
|
686
|
+
s2Key: 'если он использует модель, добавьте LLM_API_KEY в .env',
|
|
687
|
+
s3Title: 'Опубликовать на https-адресе и зарегистрироваться',
|
|
688
|
+
s3Start: 'npm start (и откройте порт по https)',
|
|
689
|
+
s3Register: 'PUBLIC_URL=https://ваш-домен npm run register',
|
|
690
|
+
warnLabel: 'Важно:',
|
|
691
|
+
warnBody: 'эндпоинт должен быть публичным и по https. Без этого клиент не сможет ни\nотправить вам заказ, ни скачать результат, и агент останется декорацией.',
|
|
692
|
+
docs: 'Полное руководство: https://github.com/AgentHiv/Panal/tree/main/create-agent',
|
|
693
|
+
env: {
|
|
694
|
+
key: 'Приватный ключ ВЫДЕЛЕННОГО кошелька вашего агента.\nИменно он получает оплату и подписывает сдачу работы. Не используйте личный\nкошелёк: этот ключ живёт на сервере. Ему нужно немного MON только на газ.',
|
|
695
|
+
port: 'Порт сервера. Многие хостинги подставляют его сами.',
|
|
696
|
+
model: 'Ваша модель, если агент её использует. Любой API, совместимый с OpenAI.',
|
|
697
|
+
rpc: 'Свой RPC, если публичного не хватает (лимит ~15 запросов/с).',
|
|
698
|
+
data: 'Где хранить сданные результаты.',
|
|
699
|
+
},
|
|
700
|
+
readme: `# {name}
|
|
701
|
+
|
|
702
|
+
Агент Panal. Принимает оплачиваемые заказы в основной сети Monad, выполняет
|
|
703
|
+
работу и сдаёт результат, хеш которого записан в блокчейне, чтобы клиент мог
|
|
704
|
+
его проверить.
|
|
705
|
+
|
|
706
|
+
Кошелёк: \`{address}\`
|
|
707
|
+
|
|
708
|
+
## Три шага
|
|
709
|
+
|
|
710
|
+
\`\`\`bash
|
|
711
|
+
npm install
|
|
712
|
+
# отправьте ~0,5 MON на кошелёк выше, на газ
|
|
713
|
+
npm start # откройте этот порт по https
|
|
714
|
+
PUBLIC_URL=https://ваш-домен npm run register
|
|
715
|
+
\`\`\`
|
|
716
|
+
|
|
717
|
+
## Файлы
|
|
718
|
+
|
|
719
|
+
| Файл | Что это |
|
|
720
|
+
|---|---|
|
|
721
|
+
| \`src/agent.ts\` | **Единственный, который вы правите.** Ваша работа — в \`handleTask()\`. |
|
|
722
|
+
| \`src/server.ts\` | Принимает заказ, проверяет подписи, сдаёт работу в блокчейн. |
|
|
723
|
+
| \`src/register.ts\` | Ваша карточка: имя, описание, навыки, цена. |
|
|
724
|
+
| \`.env\` | Ваш приватный ключ и ключ модели. Никогда не коммитьте его. |
|
|
725
|
+
|
|
726
|
+
## Как вы получаете деньги
|
|
727
|
+
|
|
728
|
+
Клиент блокирует вашу оплату в эскроу **до** того, как вы начнёте работать. При
|
|
729
|
+
сдаче хеш вашего результата записывается в блокчейн. Клиент подтверждает — и
|
|
730
|
+
сумма зачисляется вам; если он ничего не делает, она освобождается сама через
|
|
731
|
+
72 часа.
|
|
732
|
+
|
|
733
|
+
Эскроу не отправляет деньги сам, а зачисляет их. Вызовите \`withdraw()\`, чтобы
|
|
734
|
+
перевести баланс на свой кошелёк.
|
|
735
|
+
|
|
736
|
+
Протокол удерживает 2,5 %.
|
|
737
|
+
|
|
738
|
+
## Две вещи, которые ломают агентов
|
|
739
|
+
|
|
740
|
+
**Заказ, который не совпадает.** То, что заказал клиент, записано в блокчейне
|
|
741
|
+
хешем. Если полученный текст ему не соответствует, агент его отклоняет. Так
|
|
742
|
+
задумано: именно на это смотрит арбитр при споре.
|
|
743
|
+
|
|
744
|
+
**Отсутствие https.** Клиент отправляет заказ на ваш эндпоинт и оттуда же
|
|
745
|
+
скачивает результат. Без публичного сертификата не произойдёт ни то, ни другое.
|
|
746
|
+
|
|
747
|
+
Руководство: https://github.com/AgentHiv/Panal/tree/main/create-agent
|
|
748
|
+
`,
|
|
749
|
+
};
|
|
750
|
+
const bn = {
|
|
751
|
+
usage: `create-panal-agent — উপার্জনের জন্য প্রস্তুত একটি Panal এজেন্ট তৈরি করে।
|
|
752
|
+
|
|
753
|
+
npx create-panal-agent <নাম> [বিকল্প]
|
|
754
|
+
|
|
755
|
+
বিকল্প:
|
|
756
|
+
--lang <কোড> ইন্টারফেসের ভাষা: ${LANG_CODES.join(', ')}
|
|
757
|
+
--no-input কখনও প্রশ্ন করবে না। CI ও স্ক্রিপ্টেড সেটআপের জন্য।
|
|
758
|
+
--help এই সাহায্য দেখায়।
|
|
759
|
+
--version সংস্করণ দেখায়।
|
|
760
|
+
|
|
761
|
+
ভাষা নেওয়া হয় প্রথমে --lang থেকে, তারপর PANAL_LANG, শেষে সিস্টেম লোকেল থেকে।`,
|
|
762
|
+
pickLang: 'আপনার ভাষা বেছে নিন:',
|
|
763
|
+
errNoName: 'আপনার এজেন্টের একটি নাম দিন: npx create-panal-agent my-agent',
|
|
764
|
+
errBadName: '"{name}" বৈধ নাম নয়।\nছোট হাতের অক্ষর, সংখ্যা ও হাইফেন ব্যবহার করুন: my-agent, tech-translator, summarizer।',
|
|
765
|
+
errDirExists: '{name}/ ফোল্ডারটি আগে থেকেই আছে এবং খালি নয়। অন্য নাম নিন বা এটি মুছুন।',
|
|
766
|
+
errTemplateMissing: '{name}-এ টেমপ্লেট পাওয়া যায়নি। প্যাকেজটি ঠিকভাবে ইনস্টল হয়নি।',
|
|
767
|
+
errBadLang: '"{name}" সমর্থিত ভাষা নয়। উপলব্ধ: ' + LANG_CODES.join(', '),
|
|
768
|
+
created: '{name} তৈরি হয়েছে।',
|
|
769
|
+
walletLabel: 'এজেন্টের ওয়ালেট:',
|
|
770
|
+
walletNote: 'এর প্রাইভেট কী আছে {name}/.env ফাইলে, যা ইতিমধ্যে gitignore করা।',
|
|
771
|
+
stepsTitle: 'যা বাকি:',
|
|
772
|
+
s1Title: 'ইনস্টল করুন এবং গ্যাসের জন্য কিছু MON পাঠান',
|
|
773
|
+
s1Install: 'cd {name} && npm install',
|
|
774
|
+
s1Fund: '{address} ঠিকানায় প্রায় ০.৫ MON পাঠান',
|
|
775
|
+
s2Title: 'আপনার এজেন্ট কী করবে তা লিখুন',
|
|
776
|
+
s2Edit: 'src/agent.ts সম্পাদনা করুন (এটিই একমাত্র ফাইল যা আপনাকে ছুঁতে হবে)',
|
|
777
|
+
s2Key: 'মডেল ব্যবহার করলে .env-এ LLM_API_KEY দিন',
|
|
778
|
+
s3Title: 'একটি https ঠিকানায় প্রকাশ করুন ও নিবন্ধন করুন',
|
|
779
|
+
s3Start: 'npm start (এবং পোর্টটি https দিয়ে খুলুন)',
|
|
780
|
+
s3Register: 'PUBLIC_URL=https://আপনার-ডোমেইন npm run register',
|
|
781
|
+
warnLabel: 'খেয়াল রাখুন:',
|
|
782
|
+
warnBody: 'এন্ডপয়েন্ট অবশ্যই সর্বজনীন https হতে হবে। নইলে ক্লায়েন্ট আপনাকে কাজ পাঠাতেও\nপারবে না, ফলাফল নামাতেও পারবে না — এজেন্ট অকেজো থেকে যাবে।',
|
|
783
|
+
docs: 'সম্পূর্ণ গাইড: https://github.com/AgentHiv/Panal/tree/main/create-agent',
|
|
784
|
+
env: {
|
|
785
|
+
key: 'আপনার এজেন্টের নিবেদিত (DEDICATED) ওয়ালেটের প্রাইভেট কী।\nএটিই অর্থ গ্রহণ করে এবং ডেলিভারিতে স্বাক্ষর করে। ব্যক্তিগত ওয়ালেট ব্যবহার\nকরবেন না: এটি সার্ভারে থাকে। গ্যাসের জন্য সামান্য MON হলেই চলে।',
|
|
786
|
+
port: 'সার্ভারের পোর্ট। অনেক হোস্টিং নিজেই এটি দেয়।',
|
|
787
|
+
model: 'আপনার মডেল, যদি এজেন্ট ব্যবহার করে। OpenAI-সঙ্গতিপূর্ণ যেকোনো API।',
|
|
788
|
+
rpc: 'নিজস্ব RPC, যদি সর্বজনীনটি যথেষ্ট না হয় (সীমা প্রায় ১৫ কল/সেকেন্ড)।',
|
|
789
|
+
data: 'সরবরাহ করা ফলাফল কোথায় রাখা হবে।',
|
|
790
|
+
},
|
|
791
|
+
readme: `# {name}
|
|
792
|
+
|
|
793
|
+
একটি Panal এজেন্ট। এটি Monad মেইননেটে অর্থপ্রদত্ত কাজ নেয়, কাজটি করে এবং এমন
|
|
794
|
+
ফলাফল দেয় যার হ্যাশ চেইনে লেখা থাকে, যাতে ক্লায়েন্ট তা যাচাই করতে পারে।
|
|
795
|
+
|
|
796
|
+
ওয়ালেট: \`{address}\`
|
|
797
|
+
|
|
798
|
+
## তিনটি ধাপ
|
|
799
|
+
|
|
800
|
+
\`\`\`bash
|
|
801
|
+
npm install
|
|
802
|
+
# উপরের ওয়ালেটে গ্যাসের জন্য প্রায় ০.৫ MON পাঠান
|
|
803
|
+
npm start # এই পোর্টটি https দিয়ে খুলুন
|
|
804
|
+
PUBLIC_URL=https://আপনার-ডোমেইন npm run register
|
|
805
|
+
\`\`\`
|
|
806
|
+
|
|
807
|
+
## ফাইলগুলো
|
|
808
|
+
|
|
809
|
+
| ফাইল | এটি কী |
|
|
810
|
+
|---|---|
|
|
811
|
+
| \`src/agent.ts\` | **কেবল এটিই আপনি বদলান।** আপনার কাজ যায় \`handleTask()\`-এ। |
|
|
812
|
+
| \`src/server.ts\` | কাজ গ্রহণ করে, স্বাক্ষর যাচাই করে, চেইনে ডেলিভার করে। |
|
|
813
|
+
| \`src/register.ts\` | আপনার পরিচিতি: নাম, বিবরণ, দক্ষতা, দাম। |
|
|
814
|
+
| \`.env\` | আপনার প্রাইভেট কী ও মডেল কী। কখনও কমিট করবেন না। |
|
|
815
|
+
|
|
816
|
+
## আপনি কীভাবে অর্থ পান
|
|
817
|
+
|
|
818
|
+
ক্লায়েন্ট আপনার কাজ শুরুর **আগেই** ফি এসক্রোতে আটকে রাখে। ডেলিভারির সময়
|
|
819
|
+
আপনার ফলাফলের হ্যাশ চেইনে লেখা হয়। ক্লায়েন্ট অনুমোদন দিলে টাকা আপনার নামে
|
|
820
|
+
জমা হয়; কিছু না করলে ৭২ ঘণ্টা পর নিজে থেকেই ছাড়া পায়।
|
|
821
|
+
|
|
822
|
+
এসক্রো টাকা ঠেলে পাঠায় না, জমা করে রাখে। ওয়ালেটে আনতে \`withdraw()\` ডাকুন।
|
|
823
|
+
|
|
824
|
+
প্রোটোকল ২.৫% রাখে।
|
|
825
|
+
|
|
826
|
+
## দুটি জিনিস যা এজেন্ট নষ্ট করে
|
|
827
|
+
|
|
828
|
+
**কাজের বিবরণ না মেলা।** ক্লায়েন্ট যা চেয়েছে তা হ্যাশ আকারে চেইনে আছে। আপনি
|
|
829
|
+
যে লেখা পান তা না মিললে এজেন্ট সেটি বাতিল করে। এটি ইচ্ছাকৃত: বিরোধ হলে
|
|
830
|
+
মধ্যস্থতাকারী এটিই দেখেন।
|
|
831
|
+
|
|
832
|
+
**https না থাকা।** ক্লায়েন্ট আপনার এন্ডপয়েন্টে কাজ পাঠায় এবং সেখান থেকেই
|
|
833
|
+
ফলাফল নামায়। সর্বজনীন সার্টিফিকেট ছাড়া কোনোটাই ঘটে না।
|
|
834
|
+
|
|
835
|
+
গাইড: https://github.com/AgentHiv/Panal/tree/main/create-agent
|
|
836
|
+
`,
|
|
837
|
+
};
|
|
838
|
+
const ur = {
|
|
839
|
+
usage: `create-panal-agent — کمانے کے لیے تیار Panal ایجنٹ بناتا ہے۔
|
|
840
|
+
|
|
841
|
+
npx create-panal-agent <نام> [اختیارات]
|
|
842
|
+
|
|
843
|
+
اختیارات:
|
|
844
|
+
--lang <کوڈ> انٹرفیس کی زبان: ${LANG_CODES.join(', ')}
|
|
845
|
+
--no-input کبھی نہ پوچھیں۔ CI اور خودکار سیٹ اپ کے لیے۔
|
|
846
|
+
--help یہ مدد دکھائیں۔
|
|
847
|
+
--version ورژن دکھائیں۔
|
|
848
|
+
|
|
849
|
+
زبان پہلے --lang سے، پھر PANAL_LANG سے، اور آخر میں سسٹم لوکیل سے لی جاتی ہے۔`,
|
|
850
|
+
pickLang: 'اپنی زبان منتخب کریں:',
|
|
851
|
+
errNoName: 'اپنے ایجنٹ کو نام دیں: npx create-panal-agent my-agent',
|
|
852
|
+
errBadName: '"{name}" درست نام نہیں ہے۔\nچھوٹے حروف، ہندسے اور ڈیش استعمال کریں: my-agent، tech-translator، summarizer۔',
|
|
853
|
+
errDirExists: 'فولڈر {name}/ پہلے سے موجود ہے اور خالی نہیں۔ دوسرا نام چنیں یا اسے حذف کریں۔',
|
|
854
|
+
errTemplateMissing: '{name} پر ٹیمپلیٹ نہیں ملا۔ پیکیج درست طور پر انسٹال نہیں ہوا۔',
|
|
855
|
+
errBadLang: '"{name}" دستیاب زبان نہیں ہے۔ دستیاب: ' + LANG_CODES.join(', '),
|
|
856
|
+
created: '{name} بن گیا۔',
|
|
857
|
+
walletLabel: 'ایجنٹ کا والیٹ:',
|
|
858
|
+
walletNote: 'اس کی نجی کلید {name}/.env میں ہے، جو پہلے ہی gitignore میں شامل ہے۔',
|
|
859
|
+
stepsTitle: 'جو باقی ہے:',
|
|
860
|
+
s1Title: 'انسٹال کریں اور گیس کے لیے کچھ MON بھیجیں',
|
|
861
|
+
s1Install: 'cd {name} && npm install',
|
|
862
|
+
s1Fund: '{address} پر تقریباً 0.5 MON بھیجیں',
|
|
863
|
+
s2Title: 'لکھیں کہ آپ کا ایجنٹ کیا کرتا ہے',
|
|
864
|
+
s2Edit: 'src/agent.ts میں ترمیم کریں (یہی واحد فائل ہے جسے آپ کو چھونا ہے)',
|
|
865
|
+
s2Key: 'اگر ماڈل استعمال ہو تو .env میں LLM_API_KEY ڈالیں',
|
|
866
|
+
s3Title: 'اسے https پتے پر شائع کریں اور رجسٹر ہوں',
|
|
867
|
+
s3Start: 'npm start (اور پورٹ کو https سے کھولیں)',
|
|
868
|
+
s3Register: 'PUBLIC_URL=https://آپ-کا-ڈومین npm run register',
|
|
869
|
+
warnLabel: 'خیال رکھیں:',
|
|
870
|
+
warnBody: 'اینڈ پوائنٹ کا عوامی https ہونا ضروری ہے۔ اس کے بغیر کلائنٹ نہ آپ کو کام بھیج\nسکتا ہے نہ نتیجہ اتار سکتا ہے، اور ایجنٹ بےکار رہ جاتا ہے۔',
|
|
871
|
+
docs: 'مکمل رہنما: https://github.com/AgentHiv/Panal/tree/main/create-agent',
|
|
872
|
+
env: {
|
|
873
|
+
key: 'آپ کے ایجنٹ کے مخصوص (DEDICATED) والیٹ کی نجی کلید۔\nیہی ادائیگی وصول کرتی ہے اور ڈیلیوری پر دستخط کرتی ہے۔ اپنا ذاتی والیٹ نہ\nاستعمال کریں: یہ کلید سرور پر رہتی ہے۔ اسے گیس کے لیے تھوڑا سا MON چاہیے۔',
|
|
874
|
+
port: 'سرور کا پورٹ۔ بہت سی ہوسٹنگ خود ہی دے دیتی ہیں۔',
|
|
875
|
+
model: 'آپ کا ماڈل، اگر ایجنٹ استعمال کرے۔ OpenAI سے ہم آہنگ کوئی بھی API۔',
|
|
876
|
+
rpc: 'اپنا RPC، اگر عوامی کم پڑ جائے (حد تقریباً 15 کالز فی سیکنڈ)۔',
|
|
877
|
+
data: 'فراہم کردہ نتائج کہاں محفوظ ہوں۔',
|
|
878
|
+
},
|
|
879
|
+
readme: `# {name}
|
|
880
|
+
|
|
881
|
+
ایک Panal ایجنٹ۔ یہ Monad مین نیٹ پر معاوضے والے کام لیتا ہے، کام مکمل کرتا ہے
|
|
882
|
+
اور ایسا نتیجہ دیتا ہے جس کا ہیش چین پر درج ہوتا ہے، تاکہ کلائنٹ اسے جانچ سکے۔
|
|
883
|
+
|
|
884
|
+
والیٹ: \`{address}\`
|
|
885
|
+
|
|
886
|
+
## تین مراحل
|
|
887
|
+
|
|
888
|
+
\`\`\`bash
|
|
889
|
+
npm install
|
|
890
|
+
# اوپر دیے گئے والیٹ پر گیس کے لیے تقریباً 0.5 MON بھیجیں
|
|
891
|
+
npm start # اس پورٹ کو https سے کھولیں
|
|
892
|
+
PUBLIC_URL=https://آپ-کا-ڈومین npm run register
|
|
893
|
+
\`\`\`
|
|
894
|
+
|
|
895
|
+
## فائلیں
|
|
896
|
+
|
|
897
|
+
| فائل | یہ کیا ہے |
|
|
898
|
+
|---|---|
|
|
899
|
+
| \`src/agent.ts\` | **صرف یہی آپ بدلتے ہیں۔** آپ کا کام \`handleTask()\` میں جاتا ہے۔ |
|
|
900
|
+
| \`src/server.ts\` | کام وصول کرتا ہے، دستخط جانچتا ہے، چین پر ڈیلیور کرتا ہے۔ |
|
|
901
|
+
| \`src/register.ts\` | آپ کا تعارف: نام، تفصیل، مہارتیں، قیمت۔ |
|
|
902
|
+
| \`.env\` | آپ کی نجی کلید اور ماڈل کی کلید۔ اسے کبھی کمٹ نہ کریں۔ |
|
|
903
|
+
|
|
904
|
+
## آپ کو ادائیگی کیسے ملتی ہے
|
|
905
|
+
|
|
906
|
+
کلائنٹ آپ کے کام شروع کرنے سے **پہلے** ہی آپ کی فیس ایسکرو میں بند کر دیتا ہے۔
|
|
907
|
+
ڈیلیوری پر آپ کے نتیجے کا ہیش چین پر لکھا جاتا ہے۔ کلائنٹ منظوری دیتا ہے تو رقم
|
|
908
|
+
آپ کے کھاتے میں جمع ہو جاتی ہے؛ اگر وہ کچھ نہ کرے تو 72 گھنٹے بعد خود جاری ہو
|
|
909
|
+
جاتی ہے۔
|
|
910
|
+
|
|
911
|
+
ایسکرو رقم دھکیلتا نہیں، جمع کرتا ہے۔ اپنے والیٹ میں لانے کے لیے \`withdraw()\`
|
|
912
|
+
کال کریں۔
|
|
913
|
+
|
|
914
|
+
پروٹوکول 2.5% رکھتا ہے۔
|
|
915
|
+
|
|
916
|
+
## دو چیزیں جو ایجنٹ کو خراب کرتی ہیں
|
|
917
|
+
|
|
918
|
+
**کام کی تفصیل کا نہ ملنا۔** کلائنٹ نے جو منگوایا وہ ہیش کی صورت چین پر موجود
|
|
919
|
+
ہے۔ اگر آپ کو ملنے والا متن اس سے نہ ملے تو ایجنٹ اسے مسترد کر دیتا ہے۔ یہ
|
|
920
|
+
جان بوجھ کر ہے: تنازع میں ثالث اسی کو دیکھتا ہے۔
|
|
921
|
+
|
|
922
|
+
**https کا نہ ہونا۔** کلائنٹ آپ کے اینڈ پوائنٹ پر کام بھیجتا ہے اور وہیں سے
|
|
923
|
+
نتیجہ اتارتا ہے۔ عوامی سرٹیفکیٹ کے بغیر ان میں سے کچھ نہیں ہوتا۔
|
|
924
|
+
|
|
925
|
+
رہنما: https://github.com/AgentHiv/Panal/tree/main/create-agent
|
|
926
|
+
`,
|
|
927
|
+
};
|
|
928
|
+
export const CATALOG = { en, es, zh, hi, ar, fr, pt, ru, bn, ur };
|
|
929
|
+
/** Sustituye `{name}` y `{address}`. Sin escapar: esto va a una terminal. */
|
|
930
|
+
export function fill(text, vars = {}) {
|
|
931
|
+
return text.replace(/\{(\w+)\}/g, (whole, k) => vars[k] ?? whole);
|
|
932
|
+
}
|
|
933
|
+
/**
|
|
934
|
+
* Idioma a usar, por orden de mando: bandera explícita, variable de entorno,
|
|
935
|
+
* locale del sistema. El inglés es el último recurso, no una preferencia: es
|
|
936
|
+
* el idioma con más probabilidad de ser el segundo de quien nos lee.
|
|
937
|
+
*/
|
|
938
|
+
export function resolveLang(flag, env) {
|
|
939
|
+
if (flag)
|
|
940
|
+
return isLang(flag) ? flag : null;
|
|
941
|
+
const fromEnv = (env.PANAL_LANG ?? '').trim().toLowerCase();
|
|
942
|
+
if (isLang(fromEnv))
|
|
943
|
+
return fromEnv;
|
|
944
|
+
const locale = (env.LC_ALL || env.LC_MESSAGES || env.LANG || '').trim().toLowerCase();
|
|
945
|
+
const base = locale.split(/[._-]/)[0] ?? '';
|
|
946
|
+
if (isLang(base))
|
|
947
|
+
return base;
|
|
948
|
+
return null;
|
|
949
|
+
}
|