@thesashadev/girl-agent 0.1.13 → 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 +15 -0
- package/dist/cli.js +71 -21
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
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
|
+
|
|
10
|
+
## 0.1.14
|
|
11
|
+
|
|
12
|
+
Дата: 2026-05-08
|
|
13
|
+
|
|
14
|
+
- Merge pull request #59 from TheSashaDev/devin/1778231542-oauth-fixed-port
|
|
15
|
+
- fix: update OAuth client credentials and add client_secret to token requests
|
|
16
|
+
- fix: use fixed port 3000 for OAuth callback
|
|
17
|
+
|
|
3
18
|
## 0.1.13
|
|
4
19
|
|
|
5
20
|
Дата: 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
|
}
|
|
@@ -1070,14 +1092,16 @@ var GIRLAI_BASE = "https://api.girl-agent.com";
|
|
|
1070
1092
|
var AUTHORIZE_URL = `${GIRLAI_BASE}/oauth/authorize`;
|
|
1071
1093
|
var TOKEN_URL = `${GIRLAI_BASE}/oauth/token`;
|
|
1072
1094
|
var REVOKE_URL = `${GIRLAI_BASE}/oauth/revoke`;
|
|
1073
|
-
var CLIENT_ID = "
|
|
1095
|
+
var CLIENT_ID = "oac_dcce490e74a452a9ed20";
|
|
1096
|
+
var CLIENT_SECRET = "abnfSGmeisM7SFdMn_c1MwFYAHaqzgs7";
|
|
1097
|
+
var CALLBACK_PORT = 3e3;
|
|
1098
|
+
var REDIRECT_URI = `http://localhost:${CALLBACK_PORT}/callback`;
|
|
1074
1099
|
async function runOAuthFlow(log) {
|
|
1075
1100
|
const state = crypto.randomBytes(16).toString("hex");
|
|
1076
|
-
const {
|
|
1077
|
-
const redirectUri = `http://localhost:${port}/callback`;
|
|
1101
|
+
const { waitForCode, close } = await startCallbackServer(state);
|
|
1078
1102
|
const authorizeParams = new URLSearchParams({
|
|
1079
1103
|
client_id: CLIENT_ID,
|
|
1080
|
-
redirect_uri:
|
|
1104
|
+
redirect_uri: REDIRECT_URI,
|
|
1081
1105
|
response_type: "code",
|
|
1082
1106
|
state
|
|
1083
1107
|
});
|
|
@@ -1091,13 +1115,14 @@ async function runOAuthFlow(log) {
|
|
|
1091
1115
|
close();
|
|
1092
1116
|
}
|
|
1093
1117
|
log("\u043A\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0435\u043D, \u043E\u0431\u043C\u0435\u043D\u0438\u0432\u0430\u044E \u043D\u0430 \u0442\u043E\u043A\u0435\u043D...");
|
|
1094
|
-
return exchangeCode(code,
|
|
1118
|
+
return exchangeCode(code, REDIRECT_URI);
|
|
1095
1119
|
}
|
|
1096
|
-
async function exchangeCode(code, redirectUri) {
|
|
1120
|
+
async function exchangeCode(code, redirectUri = REDIRECT_URI) {
|
|
1097
1121
|
const body = new URLSearchParams({
|
|
1098
1122
|
grant_type: "authorization_code",
|
|
1099
1123
|
code,
|
|
1100
1124
|
client_id: CLIENT_ID,
|
|
1125
|
+
client_secret: CLIENT_SECRET,
|
|
1101
1126
|
redirect_uri: redirectUri
|
|
1102
1127
|
});
|
|
1103
1128
|
const res = await fetch(TOKEN_URL, {
|
|
@@ -1120,7 +1145,8 @@ async function refreshAccessToken(refreshToken) {
|
|
|
1120
1145
|
const body = new URLSearchParams({
|
|
1121
1146
|
grant_type: "refresh_token",
|
|
1122
1147
|
refresh_token: refreshToken,
|
|
1123
|
-
client_id: CLIENT_ID
|
|
1148
|
+
client_id: CLIENT_ID,
|
|
1149
|
+
client_secret: CLIENT_SECRET
|
|
1124
1150
|
});
|
|
1125
1151
|
const res = await fetch(TOKEN_URL, {
|
|
1126
1152
|
method: "POST",
|
|
@@ -1180,11 +1206,8 @@ function startCallbackServer(expectedState) {
|
|
|
1180
1206
|
clearTimeout(timeout);
|
|
1181
1207
|
resolveCode(code);
|
|
1182
1208
|
});
|
|
1183
|
-
server.listen(
|
|
1184
|
-
const addr = server.address();
|
|
1185
|
-
const port = typeof addr === "object" && addr ? addr.port : 0;
|
|
1209
|
+
server.listen(CALLBACK_PORT, "127.0.0.1", () => {
|
|
1186
1210
|
resolveSetup({
|
|
1187
|
-
port,
|
|
1188
1211
|
waitForCode,
|
|
1189
1212
|
close: () => server.close()
|
|
1190
1213
|
});
|
|
@@ -4005,6 +4028,10 @@ ${ctx.romanticApproach ? `\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0435
|
|
|
4005
4028
|
ANTI_AI_RULES,
|
|
4006
4029
|
communicationFragment,
|
|
4007
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.` : "",
|
|
4008
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.`,
|
|
4009
4036
|
cfg.nationality === "UA" ? `# \u042F\u0437\u044B\u043A
|
|
4010
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
|
|
@@ -4555,6 +4582,8 @@ var SYS_AUTONOMOUS = `\u0422\u044B \u2014 \u0432\u043D\u0443\u0442\u0440\u0435\u
|
|
|
4555
4582
|
|
|
4556
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.
|
|
4557
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
|
+
|
|
4558
4587
|
\u0412\u0435\u0440\u043D\u0438 \u0421\u0422\u0420\u041E\u0413\u041E JSON:
|
|
4559
4588
|
{
|
|
4560
4589
|
"items": [
|
|
@@ -4592,6 +4621,7 @@ ${currentAgenda.length ? JSON.stringify(currentAgenda.filter((a) => a.state ===
|
|
|
4592
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".
|
|
4593
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.
|
|
4594
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.
|
|
4595
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.
|
|
4596
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.
|
|
4597
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.
|
|
@@ -4697,6 +4727,7 @@ autonomous:${dateKey} created=0`.trim() + "\n");
|
|
|
4697
4727
|
const rel = await readRelationship(cfg.slug);
|
|
4698
4728
|
const persona = (await readMd(cfg.slug, "persona.md")).slice(0, 900);
|
|
4699
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);
|
|
4700
4731
|
const histStr = history.slice(-16).map((m) => `${m.role === "user" ? "\u043E\u043D" : "\u043E\u043D\u0430"}: ${m.content}`).join("\n");
|
|
4701
4732
|
const stateBlock = [
|
|
4702
4733
|
`# \u0421\u0442\u0430\u0434\u0438\u044F: ${stage.label} (${cfg.stage})`,
|
|
@@ -4706,8 +4737,10 @@ autonomous:${dateKey} created=0`.trim() + "\n");
|
|
|
4706
4737
|
`# persona:
|
|
4707
4738
|
${persona}`,
|
|
4708
4739
|
`# speech:
|
|
4709
|
-
${speech}
|
|
4710
|
-
|
|
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");
|
|
4711
4744
|
let items = [];
|
|
4712
4745
|
try {
|
|
4713
4746
|
const raw = await llm.chat(
|
|
@@ -5001,12 +5034,14 @@ var Runtime = class extends EventEmitter {
|
|
|
5001
5034
|
pendingReplySeq = /* @__PURE__ */ new Map();
|
|
5002
5035
|
pendingReplyIncoming = /* @__PURE__ */ new Map();
|
|
5003
5036
|
incomingSeq = /* @__PURE__ */ new Map();
|
|
5037
|
+
tgSelf = {};
|
|
5004
5038
|
async start() {
|
|
5005
5039
|
this.presenceProfile = computePresenceProfile(this.cfg);
|
|
5006
5040
|
this.mcps = await startMcpServers(this.cfg);
|
|
5007
5041
|
this.emit("event", { type: "info", text: `MCP started: ${this.mcps.map((m) => m.id).join(", ") || "none"}` });
|
|
5008
5042
|
this.tg = await makeTgAdapter(this.cfg);
|
|
5009
5043
|
await this.tg.start((m) => this.handleIncoming(m));
|
|
5044
|
+
if (this.tg.getSelf) this.tgSelf = this.tg.getSelf();
|
|
5010
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))}` });
|
|
5011
5046
|
this.lastStage = this.cfg.stage;
|
|
5012
5047
|
this.refreshDailyLife().catch(() => {
|
|
@@ -5204,7 +5239,9 @@ ${m.text}` : media;
|
|
|
5204
5239
|
incoming: incomingText,
|
|
5205
5240
|
relationshipScope: scope,
|
|
5206
5241
|
committedPrimary: this.primaryIsCommitted(),
|
|
5207
|
-
realism
|
|
5242
|
+
realism,
|
|
5243
|
+
tgUsername: this.tgSelf.username,
|
|
5244
|
+
tgDisplayName: this.tgSelf.displayName
|
|
5208
5245
|
});
|
|
5209
5246
|
const reply = sanitizeModelReply(await this.llm.chat([
|
|
5210
5247
|
{
|
|
@@ -5229,7 +5266,9 @@ ${m.text}` : media;
|
|
|
5229
5266
|
incoming: incomingText,
|
|
5230
5267
|
relationshipScope: scope,
|
|
5231
5268
|
committedPrimary: this.primaryIsCommitted(),
|
|
5232
|
-
realism
|
|
5269
|
+
realism,
|
|
5270
|
+
tgUsername: this.tgSelf.username,
|
|
5271
|
+
tgDisplayName: this.tgSelf.displayName
|
|
5233
5272
|
});
|
|
5234
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";
|
|
5235
5274
|
const reply = sanitizeModelReply(await this.llm.chat([
|
|
@@ -5478,7 +5517,9 @@ ${m.text}` : media;
|
|
|
5478
5517
|
committedPrimary: this.primaryIsCommitted(),
|
|
5479
5518
|
romanticApproach,
|
|
5480
5519
|
realism,
|
|
5481
|
-
media: incoming?.media
|
|
5520
|
+
media: incoming?.media,
|
|
5521
|
+
tgUsername: this.tgSelf.username,
|
|
5522
|
+
tgDisplayName: this.tgSelf.displayName
|
|
5482
5523
|
});
|
|
5483
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." : "";
|
|
5484
5525
|
const messages = [
|
|
@@ -5608,27 +5649,36 @@ ${tick.intent === "short" ? "\u041E\u0442\u0432\u0435\u0447\u0430\u0439 \u043E\u
|
|
|
5608
5649
|
async composeProactiveMessage(item, hist) {
|
|
5609
5650
|
const conflict = await readConflict(this.cfg.slug);
|
|
5610
5651
|
const realism = await loadRealismContext(this.cfg, item.about);
|
|
5611
|
-
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.` : "";
|
|
5612
5660
|
const proactiveHint = `
|
|
5613
5661
|
|
|
5614
5662
|
# \u041F\u0420\u041E\u0410\u041A\u0422\u0418\u0412\u041D\u041E\u0415 \u0421\u041E\u041E\u0411\u0429\u0415\u041D\u0418\u0415
|
|
5615
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:
|
|
5616
|
-
- \
|
|
5664
|
+
- \u0422\u0435\u043C\u0430/\u043F\u043E\u0432\u043E\u0434: "${item.about}"
|
|
5617
5665
|
- \u041F\u043E\u0447\u0435\u043C\u0443 \u0442\u044B \u043F\u0438\u0448\u0435\u0448\u044C: "${item.reason}"
|
|
5618
5666
|
- \u0412\u0430\u0436\u043D\u043E\u0441\u0442\u044C \u0434\u043B\u044F \u0442\u0435\u0431\u044F: ${item.importance}/3
|
|
5619
5667
|
- \u041F\u043E\u043F\u044B\u0442\u043A\u0430 \u2116${item.attempts + 1}
|
|
5620
5668
|
|
|
5621
5669
|
\u0412\u0410\u0416\u041D\u041E:
|
|
5622
|
-
- \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
|
|
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.
|
|
5623
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")
|
|
5624
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?")
|
|
5625
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.
|
|
5626
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.
|
|
5627
|
-
- \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}`;
|
|
5628
5678
|
const messages = [
|
|
5629
5679
|
{ role: "system", content: sys + proactiveHint },
|
|
5630
5680
|
...hist.slice(-20).map((t) => ({ role: t.role, content: t.content })),
|
|
5631
|
-
{ 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.]" }
|
|
5632
5682
|
];
|
|
5633
5683
|
const reply = sanitizeModelReply(await this.llm.chat(messages, { temperature: 0.95, maxTokens: 3500 }));
|
|
5634
5684
|
return reply.trim();
|