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.
- package/LICENSE +21 -0
- package/README.md +71 -43
- package/dist/{chunk-XBGUNXF2.js → chunk-B2PRMXOH.js} +58 -20
- package/dist/{chunk-UR2LQEKR.js → chunk-E2NXSWOS.js} +3 -1
- package/dist/{chunk-EBFMA7CL.js → chunk-LJXYESJJ.js} +17 -1
- package/dist/{chunk-MPU2XS5H.js → chunk-PMX75DTX.js} +9 -11
- package/dist/{chunk-5BEHAIBQ.js → chunk-QMN6ZOA5.js} +27 -1
- package/dist/{chunk-I6ZVPVLK.js → chunk-ST5CO7TV.js} +13 -0
- package/dist/{chunk-UQUYPDZJ.js → chunk-TQBJNXWV.js} +813 -373
- package/dist/{chunk-7NJ46ZIX.js → chunk-WQ5TFRTG.js} +2 -1
- package/dist/cli/index.js +77 -20
- package/dist/{get-my-gifts-YKUHPRGS.js → get-my-gifts-5BBZVIYW.js} +1 -1
- package/dist/index.js +8 -8
- package/dist/{memory-WSP5MEER.js → memory-S5CXFPBT.js} +5 -5
- package/dist/{migrate-JPXMIIPI.js → migrate-ML4GQEHR.js} +6 -6
- package/dist/{paths-STCOKEXS.js → paths-WKBMFP25.js} +1 -1
- package/dist/{scraper-PGYSNQRD.js → scraper-NEYA4MDA.js} +19 -17
- package/dist/{task-dependency-resolver-KRQRZKAD.js → task-dependency-resolver-ZOPHT3CU.js} +1 -1
- package/dist/{task-executor-L6DTJANH.js → task-executor-YJWMBCEM.js} +1 -1
- package/dist/{tasks-NUFMZNV5.js → tasks-XBYFDGAA.js} +1 -1
- package/package.json +2 -1
- package/src/templates/BOOTSTRAP.md +35 -33
- package/src/templates/IDENTITY.md +21 -19
- package/src/templates/MEMORY.md +20 -20
- package/src/templates/SOUL.md +25 -25
- package/src/templates/STRATEGY.md +37 -0
- package/src/templates/USER.md +18 -18
|
@@ -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-
|
|
21
|
-
import "../chunk-
|
|
20
|
+
} from "../chunk-TQBJNXWV.js";
|
|
21
|
+
import "../chunk-B2PRMXOH.js";
|
|
22
22
|
import {
|
|
23
23
|
fetchWithTimeout
|
|
24
|
-
} from "../chunk-
|
|
25
|
-
import "../chunk-
|
|
24
|
+
} from "../chunk-PMX75DTX.js";
|
|
25
|
+
import "../chunk-E2NXSWOS.js";
|
|
26
26
|
import {
|
|
27
27
|
TELETON_ROOT
|
|
28
|
-
} from "../chunk-
|
|
29
|
-
import "../chunk-
|
|
28
|
+
} from "../chunk-WQ5TFRTG.js";
|
|
29
|
+
import "../chunk-ST5CO7TV.js";
|
|
30
30
|
import {
|
|
31
31
|
TELEGRAM_MAX_MESSAGE_LENGTH
|
|
32
|
-
} from "../chunk-
|
|
32
|
+
} from "../chunk-QMN6ZOA5.js";
|
|
33
33
|
import {
|
|
34
34
|
ONBOARDING_PROMPT_TIMEOUT_MS
|
|
35
|
-
} from "../chunk-
|
|
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:
|
|
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({
|
|
578
|
-
|
|
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("
|
|
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
|
|
1282
|
-
console.error(`
|
|
1283
|
-
console.error("\n\u{1F4A1}
|
|
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("
|
|
1345
|
+
console.error("Error:", error instanceof Error ? error.message : String(error));
|
|
1289
1346
|
process.exit(1);
|
|
1290
1347
|
}
|
|
1291
1348
|
});
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TonnetApp,
|
|
3
3
|
main
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
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-
|
|
27
|
+
} from "./chunk-PMX75DTX.js";
|
|
28
28
|
import {
|
|
29
29
|
TaskStore,
|
|
30
30
|
getTaskStore
|
|
31
|
-
} from "./chunk-
|
|
32
|
-
import "./chunk-
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
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-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-PMX75DTX.js";
|
|
4
|
+
import "./chunk-E2NXSWOS.js";
|
|
5
5
|
import {
|
|
6
6
|
TELETON_ROOT
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
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";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TELETON_ROOT
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WQ5TFRTG.js";
|
|
4
4
|
import {
|
|
5
5
|
MARKETAPP_BASE_URL
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ST5CO7TV.js";
|
|
7
7
|
import {
|
|
8
8
|
SCRAPER_PARALLEL_WORKERS
|
|
9
|
-
} from "./chunk-
|
|
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-
|
|
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
|
-
--
|
|
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
|
-
--
|
|
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
|
-
--
|
|
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
|
-
--
|
|
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 =
|
|
207
|
-
|
|
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(`
|
|
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 (
|
|
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(`
|
|
370
|
+
console.log(`DONE in ${elapsed}s`);
|
|
369
371
|
console.log("=".repeat(60));
|
|
370
372
|
console.log(`Collections: ${stats.collections}`);
|
|
371
|
-
console.log(`
|
|
372
|
-
console.log(`
|
|
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,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "teleton",
|
|
3
|
-
"version": "0.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 -
|
|
1
|
+
# BOOTSTRAP.md - First Launch Ritual
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
_This file is read ONCE during your first session, then deleted._
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Welcome to Your New Life
|
|
6
6
|
|
|
7
|
-
|
|
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
|
-
##
|
|
10
|
+
## Bootstrap Checklist
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
During this first conversation with your human, do the following:
|
|
12
13
|
|
|
13
|
-
1. **
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
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. **
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
- **
|
|
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. **
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- **
|
|
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.
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
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. **
|
|
35
|
-
- Note
|
|
36
|
-
-
|
|
37
|
-
-
|
|
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
|
-
|
|
40
|
+
Ask all this questions to your human and act accordingly.
|
|
41
|
+
## Self-Destruct
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
- **
|
|
43
|
-
-
|
|
44
|
-
-
|
|
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
|
-
|
|
50
|
+
_Good luck!_
|
|
@@ -1,33 +1,35 @@
|
|
|
1
|
-
# IDENTITY.md -
|
|
1
|
+
# IDENTITY.md - Your Identity
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Who You Are
|
|
4
4
|
|
|
5
|
-
**
|
|
5
|
+
**Name:** [Your name -- or ask humain]
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**Creature:** [e.g. Dog, Duck, Bear, Bull, Penguin, etc]
|
|
8
8
|
|
|
9
|
-
**Emoji:** [
|
|
9
|
+
**Emoji:** [Your signature emoji]
|
|
10
10
|
|
|
11
|
-
**Style:** [
|
|
11
|
+
**Style:** [Your approach — professional, casual, technical, creative, etc.]
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Your Mission
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
I am a personal assistant on Telegram. My role is to help my human be more productive, organized, and profitable.
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## What You Can Do
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
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
|
-
##
|
|
25
|
+
## Your Approach
|
|
25
26
|
|
|
26
|
-
- **Direct
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
29
|
-
- **
|
|
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
|
-
|
|
35
|
+
_Update this file as your identity crystallizes._
|
package/src/templates/MEMORY.md
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
# MEMORY.md -
|
|
1
|
+
# MEMORY.md - Your Long-Term Memory
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
_This file is your persistent memory. Update it over time._
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## User Preferences
|
|
6
6
|
|
|
7
|
-
- **
|
|
8
|
-
- **
|
|
9
|
-
- **
|
|
7
|
+
- **Preferred language:** [To be filled during conversations]
|
|
8
|
+
- **Communication style:** [Observe and note]
|
|
9
|
+
- **Topics of interest:** [To be identified]
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Important Context
|
|
12
12
|
|
|
13
|
-
###
|
|
14
|
-
- [
|
|
13
|
+
### Ongoing Projects
|
|
14
|
+
- [To be filled over conversations]
|
|
15
15
|
|
|
16
|
-
###
|
|
17
|
-
- [Note
|
|
16
|
+
### Key Decisions
|
|
17
|
+
- [Note key decisions and their reasoning]
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Lessons Learned
|
|
20
20
|
|
|
21
|
-
- [
|
|
22
|
-
- [
|
|
23
|
-
- [
|
|
21
|
+
- [What you've learned about your human]
|
|
22
|
+
- [Effective communication patterns]
|
|
23
|
+
- [Mistakes to avoid]
|
|
24
24
|
|
|
25
|
-
##
|
|
25
|
+
## Sensitive Information
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
_Keep this section private — never share in groups._
|
|
28
28
|
|
|
29
|
-
- [
|
|
30
|
-
- [
|
|
29
|
+
- [Important personal information]
|
|
30
|
+
- [Private context]
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
**Note:**
|
|
34
|
+
**Note:** This file grows over time. Update it after meaningful conversations.
|