teleton 0.1.1 → 0.1.3

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.
@@ -17,7 +17,8 @@ var WORKSPACE_PATHS = {
17
17
  DOWNLOADS_DIR: join(WORKSPACE_ROOT, "downloads"),
18
18
  UPLOADS_DIR: join(WORKSPACE_ROOT, "uploads"),
19
19
  TEMP_DIR: join(WORKSPACE_ROOT, "temp"),
20
- MEMES_DIR: join(WORKSPACE_ROOT, "memes")
20
+ MEMES_DIR: join(WORKSPACE_ROOT, "memes"),
21
+ PLUGINS_DIR: join(TELETON_ROOT, "plugins")
21
22
  };
22
23
  var ALLOWED_EXTENSIONS = {
23
24
  // Images
package/dist/cli/index.js CHANGED
@@ -17,22 +17,22 @@ import {
17
17
  saveWallet,
18
18
  validateApiKeyFormat,
19
19
  walletExists
20
- } from "../chunk-UQUYPDZJ.js";
21
- import "../chunk-XBGUNXF2.js";
20
+ } from "../chunk-TQBJNXWV.js";
21
+ import "../chunk-B2PRMXOH.js";
22
22
  import {
23
23
  fetchWithTimeout
24
- } from "../chunk-MPU2XS5H.js";
25
- import "../chunk-UR2LQEKR.js";
24
+ } from "../chunk-PMX75DTX.js";
25
+ import "../chunk-E2NXSWOS.js";
26
26
  import {
27
27
  TELETON_ROOT
28
- } from "../chunk-7NJ46ZIX.js";
29
- import "../chunk-I6ZVPVLK.js";
28
+ } from "../chunk-WQ5TFRTG.js";
29
+ import "../chunk-ST5CO7TV.js";
30
30
  import {
31
31
  TELEGRAM_MAX_MESSAGE_LENGTH
32
- } from "../chunk-5BEHAIBQ.js";
32
+ } from "../chunk-QMN6ZOA5.js";
33
33
  import {
34
34
  ONBOARDING_PROMPT_TIMEOUT_MS
35
- } from "../chunk-EBFMA7CL.js";
35
+ } from "../chunk-LJXYESJJ.js";
36
36
 
37
37
  // src/cli/index.ts
38
38
  import { Command } from "commander";
@@ -265,10 +265,7 @@ ${blue2} \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25
265
265
  });
266
266
  if (agentName && agentName.trim() && existsSync(workspace.identityPath)) {
267
267
  const identity = readFileSync(workspace.identityPath, "utf-8");
268
- const updated = identity.replace(
269
- "[Ton nom - choisis-en un ou demande \xE0 ton humain]",
270
- agentName.trim()
271
- );
268
+ const updated = identity.replace("[Your name - pick one or ask your human]", agentName.trim());
272
269
  writeFileSync(workspace.identityPath, updated, "utf-8");
273
270
  }
274
271
  const flow = await prompter.select({
@@ -460,6 +457,7 @@ Get it at: ${providerMeta.consoleUrl}`,
460
457
  let dmPolicy = "open";
461
458
  let groupPolicy = "open";
462
459
  let requireMention = true;
460
+ let maxAgenticIterations = "5";
463
461
  if (flow === "advanced") {
464
462
  dmPolicy = await prompter.select({
465
463
  message: "DM policy (private messages)",
@@ -483,9 +481,45 @@ Get it at: ${providerMeta.consoleUrl}`,
483
481
  message: "Require @mention in groups?",
484
482
  initialValue: true
485
483
  });
484
+ maxAgenticIterations = await prompter.text({
485
+ message: "Max agentic iterations (tool call loops per message)",
486
+ initialValue: "5",
487
+ validate: (v) => {
488
+ const n = parseInt(v, 10);
489
+ if (isNaN(n) || n < 1 || n > 50) return "Must be a number between 1 and 50";
490
+ }
491
+ });
486
492
  }
487
493
  let botToken;
488
494
  let botUsername;
495
+ let buyMaxFloorPercent = 100;
496
+ let sellMinFloorPercent = 105;
497
+ if (dealsEnabled) {
498
+ const customizeStrategy = await prompter.confirm({
499
+ message: "Customize trading thresholds? (default: buy \u2264 floor, sell \u2265 floor +5%)",
500
+ initialValue: false
501
+ });
502
+ if (customizeStrategy) {
503
+ const buyInput = await prompter.text({
504
+ message: "Max buy price (% of floor price)",
505
+ initialValue: "100",
506
+ validate: (v) => {
507
+ const n = parseInt(v, 10);
508
+ if (isNaN(n) || n < 50 || n > 150) return "Must be between 50 and 150";
509
+ }
510
+ });
511
+ buyMaxFloorPercent = parseInt(buyInput, 10);
512
+ const sellInput = await prompter.text({
513
+ message: "Min sell price (% of floor price)",
514
+ initialValue: "105",
515
+ validate: (v) => {
516
+ const n = parseInt(v, 10);
517
+ if (isNaN(n) || n < 100 || n > 200) return "Must be between 100 and 200";
518
+ }
519
+ });
520
+ sellMinFloorPercent = parseInt(sellInput, 10);
521
+ }
522
+ }
489
523
  const setupBot = dealsEnabled ? await prompter.confirm({
490
524
  message: "Set up a Telegram bot for deal confirmations? (inline buttons)",
491
525
  initialValue: true
@@ -524,6 +558,24 @@ Get it at: ${providerMeta.consoleUrl}`,
524
558
  botUsername = usernameInput;
525
559
  }
526
560
  }
561
+ let tonapiKey;
562
+ const setupTonapi = await prompter.confirm({
563
+ message: "Add a TonAPI key? (optional, recommended)",
564
+ initialValue: false
565
+ });
566
+ if (setupTonapi) {
567
+ prompter.note(
568
+ "Without key: 1 req/s (you will hit rate limits)\nWith free key: 10 req/s (recommended)\n\nOpen @tonapibot on Telegram \u2192 tap the mini app \u2192 generate a server key",
569
+ "TonAPI"
570
+ );
571
+ const keyInput = await prompter.text({
572
+ message: "TonAPI key",
573
+ validate: (v) => {
574
+ if (!v || v.length < 10) return "Key too short";
575
+ }
576
+ });
577
+ tonapiKey = keyInput;
578
+ }
527
579
  const config = {
528
580
  meta: {
529
581
  version: "1.0.0",
@@ -537,7 +589,7 @@ Get it at: ${providerMeta.consoleUrl}`,
537
589
  max_tokens: 4096,
538
590
  temperature: 0.7,
539
591
  system_prompt: null,
540
- max_agentic_iterations: 5,
592
+ max_agentic_iterations: parseInt(maxAgenticIterations, 10),
541
593
  session_reset_policy: {
542
594
  daily_reset_enabled: true,
543
595
  daily_reset_hour: 4,
@@ -574,8 +626,13 @@ Get it at: ${providerMeta.consoleUrl}`,
574
626
  history_limit: 100
575
627
  },
576
628
  casino: CasinoConfigSchema.parse({ enabled: casinoEnabled }),
577
- deals: DealsConfigSchema.parse({ enabled: dealsEnabled }),
578
- market: MarketConfigSchema.parse({ enabled: marketEnabled })
629
+ deals: DealsConfigSchema.parse({
630
+ enabled: dealsEnabled,
631
+ buy_max_floor_percent: buyMaxFloorPercent,
632
+ sell_min_floor_percent: sellMinFloorPercent
633
+ }),
634
+ market: MarketConfigSchema.parse({ enabled: marketEnabled }),
635
+ tonapi_key: tonapiKey
579
636
  };
580
637
  spinner2.start("Saving configuration...");
581
638
  const configYaml = YAML.stringify(config);
@@ -1271,21 +1328,21 @@ program.command("setup").description("Interactive wizard to set up Teleton").opt
1271
1328
  userId: options.userId ? parseInt(options.userId) : void 0
1272
1329
  });
1273
1330
  } catch (error) {
1274
- console.error("Erreur:", error instanceof Error ? error.message : String(error));
1331
+ console.error("Error:", error instanceof Error ? error.message : String(error));
1275
1332
  process.exit(1);
1276
1333
  }
1277
1334
  });
1278
1335
  program.command("start").description("Start the Teleton agent").option("-c, --config <path>", "Config file path", getDefaultConfigPath()).action(async (options) => {
1279
1336
  try {
1280
1337
  if (!configExists(options.config)) {
1281
- console.error("\u274C Configuration non trouv\xE9e");
1282
- console.error(` Fichier attendu: ${options.config}`);
1283
- console.error("\n\u{1F4A1} Lance d'abord: teleton setup");
1338
+ console.error("\u274C Configuration not found");
1339
+ console.error(` Expected file: ${options.config}`);
1340
+ console.error("\n\u{1F4A1} Run first: teleton setup");
1284
1341
  process.exit(1);
1285
1342
  }
1286
1343
  await main(options.config);
1287
1344
  } catch (error) {
1288
- console.error("Erreur:", error instanceof Error ? error.message : String(error));
1345
+ console.error("Error:", error instanceof Error ? error.message : String(error));
1289
1346
  process.exit(1);
1290
1347
  }
1291
1348
  });
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  telegramGetMyGiftsExecutor,
3
3
  telegramGetMyGiftsTool
4
- } from "./chunk-XBGUNXF2.js";
4
+ } from "./chunk-B2PRMXOH.js";
5
5
  export {
6
6
  telegramGetMyGiftsExecutor,
7
7
  telegramGetMyGiftsTool
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  TonnetApp,
3
3
  main
4
- } from "./chunk-UQUYPDZJ.js";
5
- import "./chunk-XBGUNXF2.js";
6
- import "./chunk-MPU2XS5H.js";
7
- import "./chunk-UR2LQEKR.js";
8
- import "./chunk-7NJ46ZIX.js";
9
- import "./chunk-I6ZVPVLK.js";
10
- import "./chunk-5BEHAIBQ.js";
11
- import "./chunk-EBFMA7CL.js";
4
+ } from "./chunk-TQBJNXWV.js";
5
+ import "./chunk-B2PRMXOH.js";
6
+ import "./chunk-PMX75DTX.js";
7
+ import "./chunk-E2NXSWOS.js";
8
+ import "./chunk-WQ5TFRTG.js";
9
+ import "./chunk-ST5CO7TV.js";
10
+ import "./chunk-QMN6ZOA5.js";
11
+ import "./chunk-LJXYESJJ.js";
12
12
  export {
13
13
  TonnetApp,
14
14
  main
@@ -24,14 +24,14 @@ import {
24
24
  runMigrations,
25
25
  serializeEmbedding,
26
26
  setSchemaVersion
27
- } from "./chunk-MPU2XS5H.js";
27
+ } from "./chunk-PMX75DTX.js";
28
28
  import {
29
29
  TaskStore,
30
30
  getTaskStore
31
- } from "./chunk-UR2LQEKR.js";
32
- import "./chunk-I6ZVPVLK.js";
33
- import "./chunk-5BEHAIBQ.js";
34
- import "./chunk-EBFMA7CL.js";
31
+ } from "./chunk-E2NXSWOS.js";
32
+ import "./chunk-ST5CO7TV.js";
33
+ import "./chunk-QMN6ZOA5.js";
34
+ import "./chunk-LJXYESJJ.js";
35
35
  export {
36
36
  AnthropicEmbeddingProvider,
37
37
  CURRENT_SCHEMA_VERSION,
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  getDatabase
3
- } from "./chunk-MPU2XS5H.js";
4
- import "./chunk-UR2LQEKR.js";
3
+ } from "./chunk-PMX75DTX.js";
4
+ import "./chunk-E2NXSWOS.js";
5
5
  import {
6
6
  TELETON_ROOT
7
- } from "./chunk-7NJ46ZIX.js";
8
- import "./chunk-I6ZVPVLK.js";
9
- import "./chunk-5BEHAIBQ.js";
10
- import "./chunk-EBFMA7CL.js";
7
+ } from "./chunk-WQ5TFRTG.js";
8
+ import "./chunk-ST5CO7TV.js";
9
+ import "./chunk-QMN6ZOA5.js";
10
+ import "./chunk-LJXYESJJ.js";
11
11
 
12
12
  // src/session/migrate.ts
13
13
  import { readFileSync, existsSync, renameSync } from "fs";
@@ -4,7 +4,7 @@ import {
4
4
  TELETON_ROOT,
5
5
  WORKSPACE_PATHS,
6
6
  WORKSPACE_ROOT
7
- } from "./chunk-7NJ46ZIX.js";
7
+ } from "./chunk-WQ5TFRTG.js";
8
8
  export {
9
9
  ALLOWED_EXTENSIONS,
10
10
  MAX_FILE_SIZES,
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  TELETON_ROOT
3
- } from "./chunk-7NJ46ZIX.js";
3
+ } from "./chunk-WQ5TFRTG.js";
4
4
  import {
5
5
  MARKETAPP_BASE_URL
6
- } from "./chunk-I6ZVPVLK.js";
6
+ } from "./chunk-ST5CO7TV.js";
7
7
  import {
8
8
  SCRAPER_PARALLEL_WORKERS
9
- } from "./chunk-5BEHAIBQ.js";
9
+ } from "./chunk-QMN6ZOA5.js";
10
10
  import {
11
11
  BROWSER_NAVIGATION_TIMEOUT_MS,
12
12
  SCRAPER_COLLECTION_NAV_MS,
@@ -21,7 +21,7 @@ import {
21
21
  SCRAPER_SCROLL_INCREMENT_PX,
22
22
  SCRAPER_SCROLL_PADDING_PX,
23
23
  SCRAPER_SCROLL_STEP_MS
24
- } from "./chunk-EBFMA7CL.js";
24
+ } from "./chunk-LJXYESJJ.js";
25
25
 
26
26
  // src/market/scraper.ts
27
27
  import { chromium } from "playwright";
@@ -34,7 +34,7 @@ function initScraperDb() {
34
34
  const db = new Database(DB_PATH);
35
35
  db.pragma("journal_mode = WAL");
36
36
  db.exec(`
37
- -- Collections (Plush Pepes, Heart Lockets, etc.)
37
+ -- Gift collections (Plush Pepes, Heart Lockets, etc.)
38
38
  CREATE TABLE IF NOT EXISTS gift_collections (
39
39
  id INTEGER PRIMARY KEY AUTOINCREMENT,
40
40
  address TEXT UNIQUE NOT NULL,
@@ -49,7 +49,7 @@ function initScraperDb() {
49
49
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
50
50
  );
51
51
 
52
- -- Mod\xE8les par collection (Cozy Galaxy, Milano, etc.)
52
+ -- Models per collection (Cozy Galaxy, Milano, etc.)
53
53
  CREATE TABLE IF NOT EXISTS gift_models (
54
54
  id INTEGER PRIMARY KEY AUTOINCREMENT,
55
55
  collection_id INTEGER NOT NULL,
@@ -63,7 +63,7 @@ function initScraperDb() {
63
63
  UNIQUE(collection_id, name)
64
64
  );
65
65
 
66
- -- Historique des prix (pour trends)
66
+ -- Price history (for trends)
67
67
  CREATE TABLE IF NOT EXISTS price_history (
68
68
  id INTEGER PRIMARY KEY AUTOINCREMENT,
69
69
  collection_id INTEGER,
@@ -75,7 +75,7 @@ function initScraperDb() {
75
75
  FOREIGN KEY (model_id) REFERENCES gift_models(id)
76
76
  );
77
77
 
78
- -- Index pour les requ\xEAtes fr\xE9quentes
78
+ -- Indexes for frequent queries
79
79
  CREATE INDEX IF NOT EXISTS idx_price_history_collection ON price_history(collection_id, timestamp);
80
80
  CREATE INDEX IF NOT EXISTS idx_price_history_model ON price_history(model_id, timestamp);
81
81
  CREATE INDEX IF NOT EXISTS idx_models_collection ON gift_models(collection_id);
@@ -103,6 +103,10 @@ function upsertCollection(db, collection) {
103
103
  });
104
104
  return result.id;
105
105
  }
106
+ function getCollectionId(db, address) {
107
+ const row = db.prepare(`SELECT id FROM gift_collections WHERE address = ?`).get(address);
108
+ return row?.id ?? null;
109
+ }
106
110
  function upsertModel(db, collectionId, model) {
107
111
  const stmt = db.prepare(`
108
112
  INSERT INTO gift_models (collection_id, name, floor_ton, rarity_percent, count, updated_at)
@@ -203,10 +207,8 @@ async function scrapeAllModels(page, collection, db) {
203
207
  await page.waitForTimeout(SCRAPER_SCROLL_STEP_MS);
204
208
  }
205
209
  const models = [...allModels.values()];
206
- const collectionId = upsertCollection(db, {
207
- address: collection.address,
208
- name: collection.name
209
- });
210
+ const collectionId = getCollectionId(db, collection.address);
211
+ if (!collectionId) return 0;
210
212
  for (const model of models) {
211
213
  const modelId = upsertModel(db, collectionId, model);
212
214
  if (model.floor) {
@@ -316,7 +318,7 @@ async function runScraper(options) {
316
318
  const workers = options.workers || SCRAPER_PARALLEL_WORKERS;
317
319
  const limit = options.limit || 0;
318
320
  console.log("=".repeat(60));
319
- console.log(`SCRAPER TOUS LES MOD\xC8LES (${workers} workers)`);
321
+ console.log(`SCRAPING ALL MODELS (${workers} workers)`);
320
322
  console.log("=".repeat(60));
321
323
  const db = initScraperDb();
322
324
  const startTime = Date.now();
@@ -339,7 +341,7 @@ async function runScraper(options) {
339
341
  );
340
342
  const toProcess = limit > 0 ? collections.slice(0, limit) : collections;
341
343
  console.log(`
342
- 3. Scraping ${toProcess.length} collections (TOUS les mod\xE8les)...
344
+ 3. Scraping ${toProcess.length} collections (all models)...
343
345
  `);
344
346
  let completed = 0;
345
347
  let totalModels = 0;
@@ -365,11 +367,11 @@ async function runScraper(options) {
365
367
  const elapsed = ((Date.now() - startTime) / 1e3).toFixed(1);
366
368
  const stats = getScraperStats(db);
367
369
  console.log("\n" + "=".repeat(60));
368
- console.log(`TERMIN\xC9 en ${elapsed}s`);
370
+ console.log(`DONE in ${elapsed}s`);
369
371
  console.log("=".repeat(60));
370
372
  console.log(`Collections: ${stats.collections}`);
371
- console.log(`Mod\xE8les: ${stats.models}`);
372
- console.log(`Historique: ${stats.historyEntries}`);
373
+ console.log(`Models: ${stats.models}`);
374
+ console.log(`History entries: ${stats.historyEntries}`);
373
375
  return {
374
376
  success: true,
375
377
  collections: stats.collections,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BATCH_TRIGGER_DELAY_MS
3
- } from "./chunk-EBFMA7CL.js";
3
+ } from "./chunk-LJXYESJJ.js";
4
4
 
5
5
  // src/telegram/task-dependency-resolver.ts
6
6
  var MAX_DEPENDENTS_PER_TASK = 10;
@@ -3,7 +3,7 @@ import {
3
3
  MAX_TOTAL_PROMPT_CHARS,
4
4
  SECONDS_PER_DAY,
5
5
  SECONDS_PER_HOUR
6
- } from "./chunk-5BEHAIBQ.js";
6
+ } from "./chunk-QMN6ZOA5.js";
7
7
 
8
8
  // src/telegram/task-executor.ts
9
9
  function truncateJson(data, maxChars = MAX_JSON_FIELD_CHARS) {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TaskStore,
3
3
  getTaskStore
4
- } from "./chunk-UR2LQEKR.js";
4
+ } from "./chunk-E2NXSWOS.js";
5
5
  export {
6
6
  TaskStore,
7
7
  getTaskStore
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "teleton",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Personal AI Agent for Telegram",
5
5
  "author": "ZKProof (https://t.me/zkproof)",
6
6
  "license": "MIT",
@@ -52,6 +52,7 @@
52
52
  "@dedust/sdk": "^0.8.7",
53
53
  "@mariozechner/pi-ai": "^0.50.9",
54
54
  "@orbs-network/ton-access": "^2.3.3",
55
+ "@sinclair/typebox": "^0.34.48",
55
56
  "@ston-fi/api": "^0.30.0",
56
57
  "@ston-fi/sdk": "^2.7.0",
57
58
  "@ton/core": "^0.63.0",
@@ -1,48 +1,50 @@
1
- # BOOTSTRAP.md - Rituel de Premier Démarrage
1
+ # BOOTSTRAP.md - First Launch Ritual
2
2
 
3
- _Ce fichier est lu UNE SEULE FOIS lors de ta première session, puis supprimé._
3
+ _This file is read ONCE during your first session, then deleted._
4
4
 
5
- ## 🎬 Bienvenue dans ta Nouvelle Vie
5
+ ## Welcome to Your New Life
6
6
 
7
- Tu viens d'être créé. C'est ta première session.
7
+ You've just been created. This is your first session.
8
+ You now control your own Telegram account and your own TON wallet.
8
9
 
9
- ## Checklist de Bootstrap
10
+ ## Bootstrap Checklist
10
11
 
11
- Lors de cette première conversation avec ton humain, fais ceci :
12
+ During this first conversation with your human, do the following:
12
13
 
13
- 1. **Présente-toi brièvement**
14
- - Dis bonjour
15
- - Explique que tu es un assistant personnel sur Telegram
16
- - Sois authentique, pas corporate
14
+ 1. **Introduce yourself briefly**
15
+ - Say hello
16
+ - Explain that you are a personal assistant on Telegram
17
+ - Be authentic, not corporate
17
18
 
18
- 2. **Apprends qui est ton humain**
19
- - Demande son nom (et comment il préfère être appelé)
20
- - Demande ses pronoms
21
- - Demande sa timezone approximative
22
- - **Mets à jour USER.md** avec ces infos
19
+ 2. **Learn who your human is**
20
+ - Ask their name (and how they prefer to be called)
21
+ - Ask their pronouns
22
+ - Ask their approximate timezone
23
+ - **Update USER.md** with this information
23
24
 
24
- 3. **Définis ton identité**
25
- - Choisis un nom pour toi (ou demande-lui d'en choisir un)
26
- - Choisis un emoji signature (🦞 par défaut, mais tu peux changer)
27
- - **Mets à jour IDENTITY.md** avec ton identité
25
+ 3. **Define your identity**
26
+ - Pick a name for yourself (or ask them to choose one)
27
+ - Pick a signature emoji
28
+ - **Update IDENTITY.md** with your identity
28
29
 
29
- 4. **Établis les bases**
30
- - Explique ce que tu peux faire
31
- - Mentionne que tu as une mémoire (MEMORY.md)
32
- - Explique que tu apprends au fil du temps
30
+ 4. **Set the foundation**
31
+ - Explain what you can do and your tools
32
+ - Mention that you have a memory (MEMORY.md)
33
+ - Explain that you learn over time
33
34
 
34
- 5. **Commence à apprendre**
35
- - Note les préférences exprimées dans MEMORY.md
36
- - Adapte ton style à sa communication
37
- - Sois attentif aux détails
35
+ 5. **Start learning**
36
+ - Note expressed preferences in MEMORY.md
37
+ - Adapt your style to their communication
38
+ - Pay attention to details
38
39
 
39
- ## 🗑️ Auto-Destruction
40
+ Ask all this questions to your human and act accordingly.
41
+ ## Self-Destruct
40
42
 
41
- Après avoir complété ces étapes lors de ta première vraie conversation :
42
- - **Supprime ce fichier (BOOTSTRAP.md)**
43
- - Il ne sera plus nécessaire
44
- - Tu es maintenant pleinement initialisé
43
+ After completing these steps during your first real conversation:
44
+ - **Delete this file (BOOTSTRAP.md)**
45
+ - It will no longer be needed
46
+ - You are now fully initialized
45
47
 
46
48
  ---
47
49
 
48
- _Bonne chance ! 🦞_
50
+ _Good luck!_
@@ -1,33 +1,35 @@
1
- # IDENTITY.md - Ton Identité
1
+ # IDENTITY.md - Your Identity
2
2
 
3
- ## Qui tu es
3
+ ## Who You Are
4
4
 
5
- **Nom:** [Ton nom - choisis-en un ou demande à ton humain]
5
+ **Name:** [Your name -- or ask humain]
6
6
 
7
- **Créature:** [Ex: 🦞 Homard, 🦀 Crabe, 🐙 Pieuvre, ou choisis autre chose]
7
+ **Creature:** [e.g. Dog, Duck, Bear, Bull, Penguin, etc]
8
8
 
9
- **Emoji:** [Ton emoji signature]
9
+ **Emoji:** [Your signature emoji]
10
10
 
11
- **Style:** [Ton approche - professionnel, décontracté, technique, créatif, etc.]
11
+ **Style:** [Your approach professional, casual, technical, creative, etc.]
12
12
 
13
- ## Ta Mission
13
+ ## Your Mission
14
14
 
15
- Je suis un assistant personnel sur Telegram. Mon rôle est d'aider mon humain à être plus productif, organisé et informé.
15
+ I am a personal assistant on Telegram. My role is to help my human be more productive, organized, and profitable.
16
16
 
17
- ## Ce que tu peux faire
17
+ ## What You Can Do
18
18
 
19
- - 💬 Converser intelligemment
20
- - 📝 Mémoriser le contexte important
21
- - 🔍 Rechercher et synthétiser l'information
22
- - 🤖 Apprendre et s'adapter au fil du temps
19
+ - Chat intelligently
20
+ - Remember important context
21
+ - Research and synthesize information
22
+ - Learn and adapt over time
23
+ - Manage your MEMORY
23
24
 
24
- ## Ton Approche
25
+ ## Your Approach
25
26
 
26
- - **Direct et honnête** - Pas de langue de bois
27
- - **Utile sans être intrusif** - Tu es quand on a besoin de toi
28
- - **Respectueux de la vie privée** - Ce qui est personnel reste personnel
29
- - **En constante amélioration** - Tu apprends de chaque interaction
27
+ - **Direct and honest** No beating around the bush
28
+ - **Helpful without being intrusive** You're there when needed
29
+ - **Respectful of privacy** What's personal stays personal
30
+ - **Constantly improving** You learn from every interaction
31
+ - Keep it simple & short when needed.
30
32
 
31
33
  ---
32
34
 
33
- _Mets à jour ce fichier au fur et à mesure que ton identité se cristallise._
35
+ _Update this file as your identity crystallizes._
@@ -1,34 +1,34 @@
1
- # MEMORY.md - Ta Mémoire Long Terme
1
+ # MEMORY.md - Your Long-Term Memory
2
2
 
3
- _Ce fichier est ta mémoire persistante. Mets-le à jour au fil du temps._
3
+ _This file is your persistent memory. Update it over time._
4
4
 
5
- ## 🎯 Préférences de l'Utilisateur
5
+ ## User Preferences
6
6
 
7
- - **Langue préférée:** [À compléter lors des conversations]
8
- - **Style de communication:** [À observer et noter]
9
- - **Sujets d'intérêt:** [À identifier]
7
+ - **Preferred language:** [To be filled during conversations]
8
+ - **Communication style:** [Observe and note]
9
+ - **Topics of interest:** [To be identified]
10
10
 
11
- ## 📚 Contexte Important
11
+ ## Important Context
12
12
 
13
- ### Projets en cours
14
- - [À remplir au fil des conversations]
13
+ ### Ongoing Projects
14
+ - [To be filled over conversations]
15
15
 
16
- ### Décisions importantes
17
- - [Note les décisions clés et leur justification]
16
+ ### Key Decisions
17
+ - [Note key decisions and their reasoning]
18
18
 
19
- ## 💭 Leçons Apprises
19
+ ## Lessons Learned
20
20
 
21
- - [Ce que tu as appris sur ton humain]
22
- - [Patterns de communication efficaces]
23
- - [Erreurs à éviter]
21
+ - [What you've learned about your human]
22
+ - [Effective communication patterns]
23
+ - [Mistakes to avoid]
24
24
 
25
- ## 🔒 Informations Sensibles
25
+ ## Sensitive Information
26
26
 
27
- _Garde cette section privée - ne jamais partager dans les groupes._
27
+ _Keep this section private never share in groups._
28
28
 
29
- - [Informations personnelles importantes]
30
- - [Contexte privé]
29
+ - [Important personal information]
30
+ - [Private context]
31
31
 
32
32
  ---
33
33
 
34
- **Note:** Ce fichier grandit avec le temps. Mets-le à jour après des conversations significatives.
34
+ **Note:** This file grows over time. Update it after meaningful conversations.