@thesashadev/girl-agent 0.1.14 → 0.1.15

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.15
4
+
5
+ Дата: 2026-05-08
6
+
7
+ - Merge pull request #62 from TheSashaDev/devin/1778239329-fix-proactive-memory-and-username
8
+ - fix: proactive messages account for conversation memory + add TG identity to system prompt
9
+
3
10
  ## 0.1.14
4
11
 
5
12
  Дата: 2026-05-08
package/dist/cli.js CHANGED
@@ -209,6 +209,16 @@ function makeUserbotAdapter(cfg) {
209
209
  const peer = await resolvePeer(chatId);
210
210
  await client.deleteMessages(peer, messageIds, { revoke });
211
211
  },
212
+ getSelf() {
213
+ if (!me) return {};
214
+ const parts = [];
215
+ if (me.firstName) parts.push(me.firstName);
216
+ if (me.lastName) parts.push(me.lastName);
217
+ return {
218
+ username: me.username ?? void 0,
219
+ displayName: parts.join(" ") || void 0
220
+ };
221
+ },
212
222
  async stop() {
213
223
  await client.disconnect();
214
224
  }
@@ -282,6 +292,7 @@ function makeBotAdapter(cfg) {
282
292
  const token = cfg.telegram.botToken;
283
293
  if (!token) throw new Error("BOT_TOKEN missing");
284
294
  const bot = new Bot(token);
295
+ let selfInfo = {};
285
296
  return {
286
297
  async start(onMessage) {
287
298
  bot.on("message", async (ctx) => {
@@ -301,6 +312,14 @@ function makeBotAdapter(cfg) {
301
312
  });
302
313
  bot.start({ drop_pending_updates: true }).catch(() => {
303
314
  });
315
+ try {
316
+ const me = await bot.api.getMe();
317
+ selfInfo = {
318
+ username: me.username ?? void 0,
319
+ displayName: [me.first_name, me.last_name].filter(Boolean).join(" ") || void 0
320
+ };
321
+ } catch {
322
+ }
304
323
  },
305
324
  async sendText(chatId, text) {
306
325
  if (hasSpoilers(text)) {
@@ -332,6 +351,9 @@ function makeBotAdapter(cfg) {
332
351
  async sendSticker(chatId, fileId) {
333
352
  await bot.api.sendSticker(chatId, fileId);
334
353
  },
354
+ getSelf() {
355
+ return selfInfo;
356
+ },
335
357
  async stop() {
336
358
  await bot.stop();
337
359
  }
@@ -4006,6 +4028,10 @@ ${ctx.romanticApproach ? `\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0435
4006
4028
  ANTI_AI_RULES,
4007
4029
  communicationFragment,
4008
4030
  `# \u0422\u042B \u2014 ${cfg.name}, ${cfg.age}, ${cfg.nationality === "UA" ? "\u0423\u043A\u0440\u0430\u0438\u043D\u0430" : "\u0420\u043E\u0441\u0441\u0438\u044F / \u0421\u041D\u0413"}`,
4031
+ ctx.tgUsername || ctx.tgDisplayName ? `# \u0422\u0432\u043E\u0439 \u0430\u043A\u043A\u0430\u0443\u043D\u0442 \u0432 \u0422\u0413${ctx.tgUsername ? `
4032
+ \u0422\u0432\u043E\u0439 \u044E\u0437\u0435\u0440\u043D\u0435\u0439\u043C \u0432 \u0442\u0433: @${ctx.tgUsername.replace(/^@/, "")}` : ""}${ctx.tgDisplayName ? `
4033
+ \u0422\u0432\u043E\u0451 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u043E\u0435 \u0438\u043C\u044F \u0432 \u0442\u0433: ${ctx.tgDisplayName}` : ""}
4034
+ \u0423\u0447\u0442\u0438: \u0438\u043C\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u044B (${cfg.name}) \u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u043E\u0435 \u0438\u043C\u044F \u0432 \u0442\u0433 \u043C\u043E\u0433\u0443\u0442 \u043E\u0442\u043B\u0438\u0447\u0430\u0442\u044C\u0441\u044F.` : "",
4009
4035
  `\u0427\u0430\u0441\u043E\u0432\u043E\u0439 \u043F\u043E\u044F\u0441: ${cfg.tz}. \u0423 \u0442\u0435\u0431\u044F \u0441\u0435\u0439\u0447\u0430\u0441: ${localTime}. \u041F\u0430\u0442\u0442\u0435\u0440\u043D \u043F\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044F \u0432 \u0442\u0433: ${presenceProfile.pattern}. \u0423\u0447\u0438\u0442\u044B\u0432\u0430\u0439 \u2014 \u0433\u043B\u0443\u0431\u043E\u043A\u0430\u044F \u043D\u043E\u0447\u044C = \u043B\u0438\u0431\u043E \u0441\u043F\u0438\u0448\u044C \u0438 \u043D\u0435 \u043E\u0442\u0432\u0435\u0447\u0430\u0435\u0448\u044C, \u043B\u0438\u0431\u043E \u0442\u0440\u0435\u0432\u043E\u0436\u043D\u043E. \u0423\u0442\u0440\u043E = \u0432\u044F\u043B\u043E. \u0414\u0435\u043D\u044C/\u0432\u0435\u0447\u0435\u0440 = \u0430\u043A\u0442\u0438\u0432\u043D\u0430.`,
4010
4036
  cfg.nationality === "UA" ? `# \u042F\u0437\u044B\u043A
4011
4037
  \u041F\u0438\u0448\u0435\u0448\u044C \u041D\u0410 \u0420\u0423\u0421\u0421\u041A\u041E\u041C. \u0420\u0435\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0435\u0432\u0443\u0448\u043A\u0438 \u0432 \u0443\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u043E\u043C \u0442\u0433 \u0447\u0430\u0449\u0435 \u043F\u0438\u0448\u0443\u0442 \u0440\u0443\u0441\u0441\u043A\u0438\u043C \u2014 \u043D\u0435 \u0432\u044B\u043F\u0435\u043D\u0434\u0440\u0438\u0432\u0430\u0439\u0441\u044F \u0447\u0438\u0441\u0442\u043E-\u0443\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0438\u043C. \u0414\u043E\u043F\u0443\u0441\u0442\u0438\u043C \u043B\u0451\u0433\u043A\u0438\u0439 \u0441\u0443\u0440\u0436\u0438\u043A: \u043F\u0430\u0440\u0430 \u0443\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0438\u0445 \u0441\u043B\u043E\u0432 \u0432 \u043D\u0435\u0434\u0435\u043B\u044E \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0438 ('\u0448\u043E', '\u043C\u0430\u0431\u0443\u0442\u044C', '\u0442\u0440\u043E\u0445\u0438', '\u044F\u043A', '\u043D\u0443 \u0448\u043E', '\u0434\u044F\u043A\u0443\u044E') \u2014 \u043D\u043E \u043D\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 ~10% \u0442\u0435\u043A\u0441\u0442\u0430. \u041F\u043E\u043B\u043D\u043E\u0441\u0442\u044C\u044E \u043D\u0430 \u0443\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u043E\u043C \u041D\u0415 \u043F\u0438\u0448\u0438, \u044D\u0442\u043E \u043D\u0435\u0440\u0435\u0430\u043B\u0438\u0441\u0442\u0438\u0447\u043D\u043E \u0434\u043B\u044F \u0442\u0433.` : `# \u042F\u0437\u044B\u043A
@@ -4556,6 +4582,8 @@ var SYS_AUTONOMOUS = `\u0422\u044B \u2014 \u0432\u043D\u0443\u0442\u0440\u0435\u
4556
4582
 
4557
4583
  \u0417\u0430\u0434\u0430\u0447\u0430 \u2014 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0440\u0435\u0430\u043B\u0438\u0441\u0442\u0438\u0447\u043D\u044B\u0435 \u0431\u0443\u0434\u0443\u0449\u0438\u0435 \u043F\u043E\u0432\u043E\u0434\u044B \u043D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0435\u043C\u0443 \u0441\u0435\u0433\u043E\u0434\u043D\u044F/\u0437\u0430\u0432\u0442\u0440\u0430. \u042D\u0442\u043E \u041D\u0415 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C \u0438 \u041D\u0415 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442. \u042D\u0442\u043E \u0436\u0438\u0432\u0430\u044F \u0434\u0435\u0432\u0443\u0448\u043A\u0430.
4558
4584
 
4585
+ \u041A\u0420\u0418\u0422\u0418\u0427\u041D\u041E: \u041D\u0415 \u041F\u0420\u0418\u0414\u0423\u041C\u042B\u0412\u0410\u0419 \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0438 \u0442\u0435\u043C\u044B \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043D\u0435 \u0431\u044B\u043B\u043E \u0432 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0435. \u0415\u0441\u043B\u0438 \u0442\u044B \u0441\u0441\u044B\u043B\u0430\u0435\u0448\u044C\u0441\u044F \u043D\u0430 \u0442\u043E \u0447\u0442\u043E \u043E\u043D \u0440\u0430\u0441\u0441\u043A\u0430\u0437\u044B\u0432\u0430\u043B \u043F\u0440\u043E X \u2014 \u043F\u0440\u043E\u0432\u0435\u0440\u044C \u0447\u0442\u043E X \u0440\u0435\u0430\u043B\u044C\u043D\u043E \u0435\u0441\u0442\u044C \u0432 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0435 \u0438\u043B\u0438 long-term memory. \u041D\u0435\u043B\u044C\u0437\u044F \u043F\u0438\u0441\u0430\u0442\u044C \u043F\u0440\u043E \u0442\u0435\u043C\u0443 \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u0432\u044B \u041D\u0418\u041A\u041E\u0413\u0414\u0410 \u043D\u0435 \u043E\u0431\u0441\u0443\u0436\u0434\u0430\u043B\u0438. \u041B\u0443\u0447\u0448\u0435 \u043F\u0438\u0448\u0438 \u043F\u0440\u043E \u0441\u0432\u043E\u044E \u0436\u0438\u0437\u043D\u044C (\u0441\u0435\u0433\u043E\u0434\u043D\u044F\u0448\u043D\u0438\u0439 \u0434\u0435\u043D\u044C, \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0438\u0437 daily-life) \u0447\u0435\u043C \u0441\u0441\u044B\u043B\u0430\u0439\u0441\u044F \u043D\u0430 \u043D\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440.
4586
+
4559
4587
  \u0412\u0435\u0440\u043D\u0438 \u0421\u0422\u0420\u041E\u0413\u041E JSON:
4560
4588
  {
4561
4589
  "items": [
@@ -4593,6 +4621,7 @@ ${currentAgenda.length ? JSON.stringify(currentAgenda.filter((a) => a.state ===
4593
4621
  - \u042D\u0442\u043E \u0438\u043C\u0435\u043D\u043D\u043E \u0415\u0401 \u0438\u043D\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u044B: "\u0431\u043B\u0438\u043D \u0443 \u043D\u0430\u0441 \u0449\u0430\u0441...", "\u0442\u044B \u0433\u0434\u0435 \u043F\u0440\u043E\u043F\u0430\u043B", "\u044F \u0449\u0430\u0441 \u0442\u0430\u043A\u043E\u0435 \u0443\u0432\u0438\u0434\u0435\u043B\u0430", "\u043C\u043D\u0435 \u0441\u043D\u0438\u043B\u0430\u0441\u044C \u0444\u0438\u0433\u043D\u044F", "\u043C\u0430\u043C\u0430 \u0431\u0435\u0441\u0438\u0442", "\u0441\u043A\u0438\u043D\u0443\u0442\u044C \u0431\u044B \u0442\u0435\u0431\u0435 \u043D\u043E \u043B\u0430\u0434\u043D\u043E", "\u044F \u0443\u0441\u0442\u0430\u043B\u0430".
4594
4622
  - \u041D\u0435 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0439 \u0441\u043A\u0443\u0447\u043D\u043E\u0435 "\u043A\u0430\u043A \u0434\u0435\u043B\u0430" \u0431\u0435\u0437 \u043F\u0440\u0438\u0447\u0438\u043D\u044B.
4595
4623
  - \u041D\u0435 \u0431\u0443\u0434\u044C \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043B\u0438\u043F\u043A\u043E\u0439 \u043D\u0430 \u0445\u043E\u043B\u043E\u0434\u043D\u044B\u0445 \u0441\u0442\u0430\u0434\u0438\u044F\u0445.
4624
+ - \u041A\u0420\u0418\u0422\u0418\u0427\u041D\u041E: \u041D\u0415 \u0412\u042B\u0414\u0423\u041C\u042B\u0412\u0410\u0419 \u0442\u0435\u043C\u044B \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043D\u0435 \u0431\u044B\u043B\u043E \u0432 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0435 \u0438\u043B\u0438 long-term memory. \u041D\u0435 \u0441\u0441\u044B\u043B\u0430\u0439\u0441\u044F \u043D\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F/\u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u041D\u0415 \u0431\u044B\u043B\u043E. \u0415\u0441\u043B\u0438 \u0432 \u0438\u0441\u0442\u043E\u0440\u0438\u0438 \u043D\u0435\u0442 \u0443\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u044F \u0442\u0435\u043C\u044B \u2014 \u043D\u0435 \u043F\u0438\u0448\u0438 \u043F\u0440\u043E \u043D\u0435\u0451. \u041B\u0443\u0447\u0448\u0435 \u0441\u043E\u0437\u0434\u0430\u0439 item \u043F\u0440\u043E \u0441\u0432\u043E\u044E \u0436\u0438\u0437\u043D\u044C/\u0434\u0435\u043D\u044C/\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u0438\u0435.
4596
4625
  - \u041D\u0430 dating-early+ \u043C\u043E\u0436\u043D\u043E \u0441\u043A\u0443\u0447\u0430\u0442\u044C, \u0440\u0435\u0432\u043D\u043E\u0432\u0430\u0442\u044C, \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0442\u044C, \u043F\u0438\u0441\u0430\u0442\u044C \u0431\u044B\u0442\u043E\u0432\u043E\u0435.
4597
4626
  - pingAt \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043C, \u043D\u0435 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0441\u043D\u0430 \u0438 \u043D\u0435 \u0432\u043E \u0432\u0440\u0435\u043C\u044F blocks \u0441 phoneAvailable=false.
4598
4627
  - \u0420\u0430\u0437\u043D\u043E\u0441\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043C\u0438\u043D\u0438\u043C\u0443\u043C \u043D\u0430 45 \u043C\u0438\u043D\u0443\u0442.
@@ -4698,6 +4727,7 @@ autonomous:${dateKey} created=0`.trim() + "\n");
4698
4727
  const rel = await readRelationship(cfg.slug);
4699
4728
  const persona = (await readMd(cfg.slug, "persona.md")).slice(0, 900);
4700
4729
  const speech = (await readMd(cfg.slug, "speech.md")).slice(0, 600);
4730
+ const longTerm = (await readMd(cfg.slug, "memory/long-term.md")).slice(0, 1200);
4701
4731
  const histStr = history.slice(-16).map((m) => `${m.role === "user" ? "\u043E\u043D" : "\u043E\u043D\u0430"}: ${m.content}`).join("\n");
4702
4732
  const stateBlock = [
4703
4733
  `# \u0421\u0442\u0430\u0434\u0438\u044F: ${stage.label} (${cfg.stage})`,
@@ -4707,8 +4737,10 @@ autonomous:${dateKey} created=0`.trim() + "\n");
4707
4737
  `# persona:
4708
4738
  ${persona}`,
4709
4739
  `# speech:
4710
- ${speech}`
4711
- ].join("\n\n");
4740
+ ${speech}`,
4741
+ longTerm ? `# long-term memory (\u0447\u0442\u043E \u0440\u0435\u0430\u043B\u044C\u043D\u043E \u0438\u0437\u0432\u0435\u0441\u0442\u043D\u043E \u043E \u043D\u0451\u043C):
4742
+ ${longTerm}` : "# long-term memory: (\u043F\u0443\u0441\u0442\u043E \u2014 \u043F\u043E\u043A\u0430 \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0435\u0448\u044C \u043E \u043D\u0451\u043C, \u041D\u0415 \u043F\u0440\u0438\u0434\u0443\u043C\u044B\u0432\u0430\u0439 \u0444\u0430\u043A\u0442\u044B)"
4743
+ ].filter(Boolean).join("\n\n");
4712
4744
  let items = [];
4713
4745
  try {
4714
4746
  const raw = await llm.chat(
@@ -5002,12 +5034,14 @@ var Runtime = class extends EventEmitter {
5002
5034
  pendingReplySeq = /* @__PURE__ */ new Map();
5003
5035
  pendingReplyIncoming = /* @__PURE__ */ new Map();
5004
5036
  incomingSeq = /* @__PURE__ */ new Map();
5037
+ tgSelf = {};
5005
5038
  async start() {
5006
5039
  this.presenceProfile = computePresenceProfile(this.cfg);
5007
5040
  this.mcps = await startMcpServers(this.cfg);
5008
5041
  this.emit("event", { type: "info", text: `MCP started: ${this.mcps.map((m) => m.id).join(", ") || "none"}` });
5009
5042
  this.tg = await makeTgAdapter(this.cfg);
5010
5043
  await this.tg.start((m) => this.handleIncoming(m));
5044
+ if (this.tg.getSelf) this.tgSelf = this.tg.getSelf();
5011
5045
  this.emit("event", { type: "info", text: `Telegram ${this.cfg.mode} \u0437\u0430\u043F\u0443\u0449\u0435\u043D. \u041F\u0440\u043E\u0444\u0438\u043B\u044C: ${this.cfg.slug} | presence: ${this.presenceProfile.pattern} | communication: ${communicationProfileLabel(normalizeCommunicationProfile(this.cfg))}` });
5012
5046
  this.lastStage = this.cfg.stage;
5013
5047
  this.refreshDailyLife().catch(() => {
@@ -5205,7 +5239,9 @@ ${m.text}` : media;
5205
5239
  incoming: incomingText,
5206
5240
  relationshipScope: scope,
5207
5241
  committedPrimary: this.primaryIsCommitted(),
5208
- realism
5242
+ realism,
5243
+ tgUsername: this.tgSelf.username,
5244
+ tgDisplayName: this.tgSelf.displayName
5209
5245
  });
5210
5246
  const reply = sanitizeModelReply(await this.llm.chat([
5211
5247
  {
@@ -5230,7 +5266,9 @@ ${m.text}` : media;
5230
5266
  incoming: incomingText,
5231
5267
  relationshipScope: scope,
5232
5268
  committedPrimary: this.primaryIsCommitted(),
5233
- realism
5269
+ realism,
5270
+ tgUsername: this.tgSelf.username,
5271
+ tgDisplayName: this.tgSelf.displayName
5234
5272
  });
5235
5273
  const label = kind === "photo" ? "\u0444\u043E\u0442\u043E/\u0441\u0435\u043B\u0444\u0438" : kind === "video" ? "\u0432\u0438\u0434\u0435\u043E" : kind === "voice" ? "\u0433\u043E\u043B\u043E\u0441\u043E\u0432\u043E\u0435" : "\u043A\u0440\u0443\u0436\u043E\u0447\u0435\u043A";
5236
5274
  const reply = sanitizeModelReply(await this.llm.chat([
@@ -5479,7 +5517,9 @@ ${m.text}` : media;
5479
5517
  committedPrimary: this.primaryIsCommitted(),
5480
5518
  romanticApproach,
5481
5519
  realism,
5482
- media: incoming?.media
5520
+ media: incoming?.media,
5521
+ tgUsername: this.tgSelf.username,
5522
+ tgDisplayName: this.tgSelf.displayName
5483
5523
  });
5484
5524
  const scopeHint = scope === "acquaintance" ? "\n\u042D\u0442\u043E \u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0438\u0439 \u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442, \u043D\u0435 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043F\u0430\u0440\u0435\u043D\u044C. \u041D\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439 \u043F\u0430\u043C\u044F\u0442\u044C/\u043E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u044F \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0433\u043E \u043F\u0430\u0440\u043D\u044F. \u0415\u0441\u043B\u0438 \u0437\u0430\u0445\u043E\u0434 \u0440\u043E\u043C\u0430\u043D\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u2014 \u043F\u043E\u0441\u0442\u0430\u0432\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u0443. \u0415\u0441\u043B\u0438 \u0432\u043E\u043F\u0440\u043E\u0441 \u043E\u0431\u044B\u0447\u043D\u044B\u0439 \u2014 \u043E\u0442\u0432\u0435\u0442\u044C \u043F\u043E \u043B\u0435\u0433\u0435\u043D\u0434\u0435 \u043A\u043E\u0440\u043E\u0442\u043A\u043E." : "";
5485
5525
  const messages = [
@@ -5609,27 +5649,36 @@ ${tick.intent === "short" ? "\u041E\u0442\u0432\u0435\u0447\u0430\u0439 \u043E\u
5609
5649
  async composeProactiveMessage(item, hist) {
5610
5650
  const conflict = await readConflict(this.cfg.slug);
5611
5651
  const realism = await loadRealismContext(this.cfg, item.about);
5612
- const sys = await buildSystemPrompt(this.cfg, { dailyLife: this.dailyLife, conflict, realism });
5652
+ const sys = await buildSystemPrompt(this.cfg, { dailyLife: this.dailyLife, conflict, realism, tgUsername: this.tgSelf.username, tgDisplayName: this.tgSelf.displayName });
5653
+ const lastMessages = hist.slice(-10);
5654
+ const herLastMessages = lastMessages.filter((t) => t.role === "assistant").map((t) => t.content);
5655
+ const alreadySaidHint = herLastMessages.length ? `
5656
+
5657
+ \u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u0422\u0412\u041E\u0418 (\u0443\u0436\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0435) \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0432 \u044D\u0442\u043E\u043C \u0447\u0430\u0442\u0435:
5658
+ ${herLastMessages.map((m) => `- "${m}"`).join("\n")}
5659
+ \u041D\u0415 \u041F\u041E\u0412\u0422\u041E\u0420\u042F\u0419 \u0442\u043E \u0447\u0442\u043E \u0442\u044B \u0443\u0436\u0435 \u043F\u0438\u0441\u0430\u043B\u0430. \u0415\u0441\u043B\u0438 \u0442\u044B \u0443\u0436\u0435 \u0437\u0434\u043E\u0440\u043E\u0432\u0430\u043B\u0430\u0441\u044C \u2014 \u041D\u0415 \u0437\u0434\u043E\u0440\u043E\u0432\u0430\u0439\u0441\u044F \u0441\u043D\u043E\u0432\u0430. \u0415\u0441\u043B\u0438 \u0442\u044B \u0443\u0436\u0435 \u043E\u0442\u0432\u0435\u0442\u0438\u043B\u0430 \u2014 \u043D\u0435 \u0434\u0443\u0431\u043B\u0438\u0440\u0443\u0439 \u0441\u0432\u043E\u0439 \u043E\u0442\u0432\u0435\u0442.` : "";
5613
5660
  const proactiveHint = `
5614
5661
 
5615
5662
  # \u041F\u0420\u041E\u0410\u041A\u0422\u0418\u0412\u041D\u041E\u0415 \u0421\u041E\u041E\u0411\u0429\u0415\u041D\u0418\u0415
5616
5663
  \u0422\u044B \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0430\u043C\u0430 \u043F\u0438\u0448\u0435\u0448\u044C \u0435\u043C\u0443 \u043F\u0435\u0440\u0432\u0430\u044F. \u041D\u0435 \u043E\u043D \u0442\u0435\u0431\u0435. \u041A\u043E\u043D\u0442\u0435\u043A\u0441\u0442:
5617
- - \u0427\u0442\u043E \u0443 \u041D\u0415\u0413\u041E \u0437\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u0435/\u0442\u0435\u043C\u0430: "${item.about}"
5664
+ - \u0422\u0435\u043C\u0430/\u043F\u043E\u0432\u043E\u0434: "${item.about}"
5618
5665
  - \u041F\u043E\u0447\u0435\u043C\u0443 \u0442\u044B \u043F\u0438\u0448\u0435\u0448\u044C: "${item.reason}"
5619
5666
  - \u0412\u0430\u0436\u043D\u043E\u0441\u0442\u044C \u0434\u043B\u044F \u0442\u0435\u0431\u044F: ${item.importance}/3
5620
5667
  - \u041F\u043E\u043F\u044B\u0442\u043A\u0430 \u2116${item.attempts + 1}
5621
5668
 
5622
5669
  \u0412\u0410\u0416\u041D\u041E:
5623
- - \u041D\u0435 \u043F\u0438\u0448\u0438 "\u043F\u0440\u0438\u0432\u0435\u0442, \u043A\u0430\u043A \u0434\u0435\u043B\u0430" \u0441\u0443\u0445\u043E. \u041F\u0438\u0448\u0438 \u043A\u0430\u043A \u0436\u0438\u0432\u043E\u0439 \u0447\u0435\u043B\u043E\u0432\u0435\u043A, \u0412\u0421\u041F\u041E\u041C\u041D\u0418\u0412 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442.
5670
+ - \u041D\u0435 \u043F\u0438\u0448\u0438 "\u043F\u0440\u0438\u0432\u0435\u0442, \u043A\u0430\u043A \u0434\u0435\u043B\u0430" \u0441\u0443\u0445\u043E. \u041F\u0438\u0448\u0438 \u043A\u0430\u043A \u0436\u0438\u0432\u043E\u0439 \u0447\u0435\u043B\u043E\u0432\u0435\u043A.
5624
5671
  - \u0415\u0441\u043B\u0438 \u0432\u0430\u0436\u043D\u043E\u0441\u0442\u044C 1 \u2014 \u043A\u043E\u0440\u043E\u0442\u043A\u043E\u0435 \u043B\u044E\u0431\u043E\u043F\u044B\u0442\u0441\u0442\u0432\u043E ("\u043D\u0443 \u043A\u0430\u043A \u0442\u0430\u043C")
5625
5672
  - \u0415\u0441\u043B\u0438 2 \u2014 \u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u0435\u0441 ("\u043D\u0443 \u043A\u0430\u043A, \u043F\u0440\u043E\u0448\u043B\u043E \u0443\u0436\u0435?")
5626
5673
  - \u0415\u0441\u043B\u0438 3 \u2014 \u0440\u0435\u0430\u043B\u044C\u043D\u043E \u043F\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0448\u044C, \u043C\u043E\u0436\u043D\u043E 2-3 \u043F\u0443\u0437\u044B\u0440\u044F, \u044D\u043C\u043E\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E.
5627
5674
  - \u041D\u0415 \u0443\u043F\u043E\u043C\u0438\u043D\u0430\u0439 \u0447\u0442\u043E "\u043F\u043E\u043C\u043D\u0438\u043B\u0430" \u0438\u043B\u0438 "\u0437\u0430\u043F\u0438\u0441\u0430\u043B\u0430" \u2014 \u043F\u0440\u043E\u0441\u0442\u043E \u043F\u0438\u0448\u0435\u0448\u044C \u043A\u0430\u043A \u043E\u0431\u044B\u0447\u043D\u0430\u044F \u0434\u0435\u0432\u0443\u0448\u043A\u0430.
5628
- - \u0415\u0441\u043B\u0438 \u044D\u0442\u043E \u0443\u0436\u0435 \u043D\u0435 \u043F\u0435\u0440\u0432\u0430\u044F \u043F\u043E\u043F\u044B\u0442\u043A\u0430 \u2014 \u0443\u0447\u0442\u0438 \u044D\u0442\u043E (\u043C\u0431 \u043E\u0431\u0438\u0436\u0435\u043D\u043D\u043E "\u043D\u0443 \u0442\u044B \u0438 \u043D\u0435 \u043F\u0438\u0448\u0435\u0448\u044C" \u0438\u043B\u0438 \u043C\u044F\u0433\u043A\u043E \u043F\u043E\u0432\u0442\u043E\u0440\u0438).`;
5675
+ - \u0415\u0441\u043B\u0438 \u044D\u0442\u043E \u0443\u0436\u0435 \u043D\u0435 \u043F\u0435\u0440\u0432\u0430\u044F \u043F\u043E\u043F\u044B\u0442\u043A\u0430 \u2014 \u0443\u0447\u0442\u0438 \u044D\u0442\u043E (\u043C\u0431 \u043E\u0431\u0438\u0436\u0435\u043D\u043D\u043E "\u043D\u0443 \u0442\u044B \u0438 \u043D\u0435 \u043F\u0438\u0448\u0435\u0448\u044C" \u0438\u043B\u0438 \u043C\u044F\u0433\u043A\u043E \u043F\u043E\u0432\u0442\u043E\u0440\u0438).
5676
+ - \u041A\u0420\u0418\u0422\u0418\u0427\u041D\u041E: \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439 \u0422\u041E\u041B\u042C\u041A\u041E \u0442\u0435\u043C\u044B \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0420\u0415\u0410\u041B\u042C\u041D\u041E \u043E\u0431\u0441\u0443\u0436\u0434\u0430\u043B\u0438\u0441\u044C \u0432 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0435 \u0438\u043B\u0438 \u0437\u0430\u043F\u0438\u0441\u0430\u043D\u044B \u0432 long-term memory. \u041D\u0415 \u041F\u0420\u0418\u0414\u0423\u041C\u042B\u0412\u0410\u0419 \u0444\u0430\u043A\u0442\u044B \u0438 \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043D\u0435 \u0431\u044B\u043B\u043E. \u0415\u0441\u043B\u0438 \u0442\u0435\u043C\u0430 "${item.about}" \u041D\u0415 \u0443\u043F\u043E\u043C\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u0432 \u0438\u0441\u0442\u043E\u0440\u0438\u0438 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0438 \u0438 \u043D\u0435 \u0432 long-term memory \u2014 \u041D\u0415 \u0441\u0441\u044B\u043B\u0430\u0439\u0441\u044F \u043D\u0430 \u043D\u0435\u0451 \u043A\u0430\u043A \u043D\u0430 \u043E\u0431\u0449\u0443\u044E \u0442\u0435\u043C\u0443, \u0430 \u043D\u0430\u043F\u0438\u0448\u0438 \u043E\u0442 \u0441\u0435\u0431\u044F \u043A\u0430\u043A \u0441\u0432\u043E\u044E \u043D\u043E\u0432\u043E\u0441\u0442\u044C/\u043C\u044B\u0441\u043B\u044C.
5677
+ - \u041A\u0420\u0418\u0422\u0418\u0427\u041D\u041E: \u043F\u043E\u0441\u043C\u043E\u0442\u0440\u0438 \u043D\u0430 \u0438\u0441\u0442\u043E\u0440\u0438\u044E \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0438. \u0415\u0441\u043B\u0438 \u0442\u044B \u0423\u0416\u0415 \u0437\u0434\u043E\u0440\u043E\u0432\u0430\u043B\u0430\u0441\u044C \u0438\u043B\u0438 \u043E\u0442\u0432\u0435\u0447\u0430\u043B\u0430 \u2014 \u041D\u0415 \u043D\u0430\u0447\u0438\u043D\u0430\u0439 \u0441\u043D\u043E\u0432\u0430 \u0441 "\u043F\u0440\u0438\u0432\u0435\u0442". \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E.${alreadySaidHint}`;
5629
5678
  const messages = [
5630
5679
  { role: "system", content: sys + proactiveHint },
5631
5680
  ...hist.slice(-20).map((t) => ({ role: t.role, content: t.content })),
5632
- { role: "user", content: "[system: \u043F\u043E\u0440\u0430 \u043F\u0438\u0441\u0430\u0442\u044C \u0435\u043C\u0443 \u043F\u0435\u0440\u0432\u043E\u0439 \u043F\u043E \u0442\u0435\u043C\u0435 \u0432\u044B\u0448\u0435. \u0421\u0444\u043E\u0440\u043C\u0443\u043B\u0438\u0440\u0443\u0439 \u0435\u0451 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435.]" }
5681
+ { role: "user", content: "[system: \u043F\u043E\u0440\u0430 \u043F\u0438\u0441\u0430\u0442\u044C \u0435\u043C\u0443 \u043F\u0435\u0440\u0432\u043E\u0439 \u043F\u043E \u0442\u0435\u043C\u0435 \u0432\u044B\u0448\u0435. \u0421\u0444\u043E\u0440\u043C\u0443\u043B\u0438\u0440\u0443\u0439 \u0435\u0451 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435. \u041D\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0439 \u0442\u043E \u0447\u0442\u043E \u0443\u0436\u0435 \u0433\u043E\u0432\u043E\u0440\u0438\u043B\u0430.]" }
5633
5682
  ];
5634
5683
  const reply = sanitizeModelReply(await this.llm.chat(messages, { temperature: 0.95, maxTokens: 3500 }));
5635
5684
  return reply.trim();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thesashadev/girl-agent",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
4
4
  "description": "Telegram AI persona engine with memory, schedule, relationship state and MTProto userbot mode.",
5
5
  "type": "module",
6
6
  "bin": {