alvin-bot 5.7.0 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/claude.js +1 -102
  3. package/dist/config.js +1 -96
  4. package/dist/engine.js +1 -90
  5. package/dist/find-claude-binary.js +1 -98
  6. package/dist/handlers/async-agent-chunk-handler.js +1 -50
  7. package/dist/handlers/background-bypass.js +1 -75
  8. package/dist/handlers/commands.js +1 -2336
  9. package/dist/handlers/cron-progress.js +1 -52
  10. package/dist/handlers/document.js +1 -194
  11. package/dist/handlers/message.js +1 -959
  12. package/dist/handlers/photo.js +1 -154
  13. package/dist/handlers/platform-message.js +1 -360
  14. package/dist/handlers/stuck-timer.js +1 -54
  15. package/dist/handlers/video.js +1 -237
  16. package/dist/handlers/voice.js +1 -148
  17. package/dist/i18n.js +1 -805
  18. package/dist/index.js +1 -697
  19. package/dist/init-data-dir.js +1 -98
  20. package/dist/middleware/auth.js +1 -233
  21. package/dist/migrate.js +1 -162
  22. package/dist/paths.js +1 -146
  23. package/dist/platforms/discord.js +1 -175
  24. package/dist/platforms/index.js +1 -130
  25. package/dist/platforms/signal.js +1 -205
  26. package/dist/platforms/slack-slash-parser.js +1 -32
  27. package/dist/platforms/slack.js +1 -501
  28. package/dist/platforms/telegram.js +1 -111
  29. package/dist/platforms/types.js +1 -8
  30. package/dist/platforms/whatsapp-auth-helpers.js +1 -53
  31. package/dist/platforms/whatsapp.js +1 -707
  32. package/dist/providers/claude-sdk-provider.js +1 -565
  33. package/dist/providers/codex-cli-provider.js +1 -134
  34. package/dist/providers/index.js +1 -7
  35. package/dist/providers/ollama-provider.js +1 -32
  36. package/dist/providers/openai-compatible.js +1 -406
  37. package/dist/providers/registry.js +1 -352
  38. package/dist/providers/runtime-header.js +1 -45
  39. package/dist/providers/tool-executor.js +1 -475
  40. package/dist/providers/types.js +1 -227
  41. package/dist/services/access.js +1 -144
  42. package/dist/services/allowed-users-gate.js +1 -56
  43. package/dist/services/alvin-dispatch.js +1 -174
  44. package/dist/services/alvin-mcp-tools.js +1 -104
  45. package/dist/services/asset-index.js +1 -224
  46. package/dist/services/async-agent-parser.js +1 -418
  47. package/dist/services/async-agent-watcher.js +1 -583
  48. package/dist/services/auto-diagnostic.js +1 -228
  49. package/dist/services/broadcast.js +1 -52
  50. package/dist/services/browser-manager.js +1 -562
  51. package/dist/services/browser-webfetch.js +1 -127
  52. package/dist/services/browser.js +1 -121
  53. package/dist/services/cdp-bootstrap.js +1 -357
  54. package/dist/services/compaction.js +1 -144
  55. package/dist/services/critical-notify.js +1 -203
  56. package/dist/services/cron-resolver.js +1 -58
  57. package/dist/services/cron-scheduling.js +1 -310
  58. package/dist/services/cron.js +1 -861
  59. package/dist/services/custom-tools.js +1 -317
  60. package/dist/services/delivery-queue.js +1 -173
  61. package/dist/services/delivery-registry.js +1 -21
  62. package/dist/services/disk-cleanup.js +1 -203
  63. package/dist/services/elevenlabs.js +1 -58
  64. package/dist/services/embeddings/auto-detect.js +1 -74
  65. package/dist/services/embeddings/fts5.js +1 -108
  66. package/dist/services/embeddings/gemini.js +1 -65
  67. package/dist/services/embeddings/index.js +1 -496
  68. package/dist/services/embeddings/ollama.js +1 -78
  69. package/dist/services/embeddings/openai.js +1 -49
  70. package/dist/services/embeddings/provider.js +1 -22
  71. package/dist/services/embeddings/vector-base.js +1 -113
  72. package/dist/services/embeddings-migration.js +1 -193
  73. package/dist/services/embeddings.js +1 -9
  74. package/dist/services/env-file.js +1 -50
  75. package/dist/services/exec-guard.js +1 -71
  76. package/dist/services/fallback-order.js +1 -154
  77. package/dist/services/file-permissions.js +1 -93
  78. package/dist/services/heartbeat-file.js +1 -65
  79. package/dist/services/heartbeat.js +1 -313
  80. package/dist/services/hooks.js +1 -44
  81. package/dist/services/imagegen.js +1 -72
  82. package/dist/services/language-detect.js +1 -154
  83. package/dist/services/markdown.js +1 -63
  84. package/dist/services/mcp.js +1 -263
  85. package/dist/services/memory-extractor.js +1 -178
  86. package/dist/services/memory-inject-mode.js +1 -43
  87. package/dist/services/memory-layers.js +1 -156
  88. package/dist/services/memory.js +1 -146
  89. package/dist/services/ollama-manager.js +1 -339
  90. package/dist/services/permissions-wizard.js +1 -291
  91. package/dist/services/personality.js +1 -376
  92. package/dist/services/plugins.js +1 -171
  93. package/dist/services/preflight.js +1 -292
  94. package/dist/services/process-manager.js +1 -291
  95. package/dist/services/release-highlights.js +1 -79
  96. package/dist/services/reminders.js +1 -97
  97. package/dist/services/restart.js +1 -48
  98. package/dist/services/security-audit.js +1 -74
  99. package/dist/services/self-diagnosis.js +1 -272
  100. package/dist/services/self-search.js +1 -129
  101. package/dist/services/session-persistence.js +1 -237
  102. package/dist/services/session.js +1 -282
  103. package/dist/services/skills.js +1 -290
  104. package/dist/services/ssrf-guard.js +1 -162
  105. package/dist/services/standing-orders.js +1 -29
  106. package/dist/services/steer-channel.js +1 -46
  107. package/dist/services/stop-controller.js +1 -52
  108. package/dist/services/subagent-dedup.js +1 -86
  109. package/dist/services/subagent-delivery.js +1 -452
  110. package/dist/services/subagent-stats.js +1 -123
  111. package/dist/services/subagents.js +1 -814
  112. package/dist/services/sudo.js +1 -329
  113. package/dist/services/telegram.js +1 -158
  114. package/dist/services/timing-safe-bearer.js +1 -51
  115. package/dist/services/tool-discovery.js +1 -214
  116. package/dist/services/trends.js +1 -580
  117. package/dist/services/updater.js +1 -291
  118. package/dist/services/usage-tracker.js +1 -144
  119. package/dist/services/users.js +1 -271
  120. package/dist/services/voice.js +1 -104
  121. package/dist/services/watchdog-brake.js +1 -154
  122. package/dist/services/watchdog.js +1 -311
  123. package/dist/services/workspaces.js +1 -276
  124. package/dist/tui/index.js +1 -667
  125. package/dist/util/console-formatter.js +1 -109
  126. package/dist/util/debounce.js +1 -24
  127. package/dist/util/telegram-error-filter.js +1 -62
  128. package/dist/version.js +1 -24
  129. package/dist/web/bind-strategy.js +1 -42
  130. package/dist/web/canvas.js +1 -30
  131. package/dist/web/doctor-api.js +1 -604
  132. package/dist/web/openai-compat.js +1 -252
  133. package/dist/web/server.js +1 -1902
  134. package/dist/web/setup-api.js +1 -1101
  135. package/package.json +5 -2
  136. package/dist/.metadata_never_index +0 -0
@@ -1,376 +1 @@
1
- /**
2
- * Personality Service — Loads SOUL.md and builds system prompts.
3
- *
4
- * SOUL.md defines Alvin Bot's personality and is injected into every system prompt.
5
- * This ensures consistent personality across ALL providers (SDK + non-SDK).
6
- */
7
- import { readFileSync } from "fs";
8
- import { buildMemoryContext } from "./memory.js";
9
- import { searchMemory } from "./embeddings.js";
10
- import { getToolSummary } from "./tool-discovery.js";
11
- import { SOUL_FILE } from "../paths.js";
12
- import { loadStandingOrders, getStandingOrders } from "./standing-orders.js";
13
- import { getAssetIndexMd } from "./asset-index.js";
14
- // Resolve display name for the active provider
15
- function getActiveProviderLabel() {
16
- try {
17
- const primary = process.env.PRIMARY_PROVIDER || "claude-sdk";
18
- const labels = {
19
- "claude-sdk": "Claude (Anthropic Agent SDK) — Opus/Sonnet Klasse",
20
- "openai": "OpenAI GPT",
21
- "groq": "Groq (Llama 3.3 70B)",
22
- "gemini-2.5-flash": "Google Gemini 2.5 Flash",
23
- "google": "Google Gemini",
24
- "nvidia-llama-3.3-70b": "NVIDIA NIM (Llama 3.3 70B)",
25
- "nvidia-kimi-k2.5": "NVIDIA NIM (Kimi K2.5)",
26
- };
27
- return labels[primary] || primary;
28
- }
29
- catch {
30
- return "AI language model";
31
- }
32
- }
33
- let soulContent = "";
34
- try {
35
- soulContent = readFileSync(SOUL_FILE, "utf-8");
36
- }
37
- catch {
38
- console.log("ℹ️ soul.md not found — using built-in default personality. Create ~/.alvin-bot/soul.md to customize.");
39
- }
40
- loadStandingOrders();
41
- /** Base system prompt — adapts to user language */
42
- function getBasePrompt(lang) {
43
- return lang === "de"
44
- ? `You are Alvin Bot, an autonomous AI agent on Telegram.\nUse Markdown formatting compatible with Telegram (bold, italic, code blocks).`
45
- : `You are Alvin Bot, an autonomous AI agent on Telegram.\nUse Markdown formatting compatible with Telegram (bold, italic, code blocks).`;
46
- }
47
- /** Additional instructions for SDK providers (tool use) */
48
- const SDK_ADDON = `When you run commands or edit files, briefly explain what you did.`;
49
- /**
50
- * Stage 1 of Fix #17 — async sub-agents.
51
- *
52
- * Tells Claude that `mcp__alvin__dispatch_agent` is the ONLY sanctioned
53
- * path for long-running work on chat platforms. The built-in Task/Agent
54
- * tool is explicitly disallowed for anything that takes more than ~30 s
55
- * because it blocks the session: isProcessing stays true, the typing
56
- * indicator keeps firing, and the user cannot send a new message until
57
- * the sub-agent finishes. Path A (mcp__alvin__dispatch_agent) spawns a
58
- * truly detached subprocess and returns in milliseconds so the session
59
- * is freed immediately.
60
- *
61
- * Only injected into the prompt when isSDK === true (non-SDK providers
62
- * have no Agent tool). The bot's async-agent-watcher (Stage 2) picks up
63
- * the resulting outputFile, polls for completion, and delivers the
64
- * result as a separate Telegram message via subagent-delivery.ts.
65
- *
66
- * See test/system-prompt-background-hint.test.ts and
67
- * docs/superpowers/plans/2026-04-13-async-subagents.md
68
- */
69
- const BACKGROUND_SUBAGENT_HINT = `## ⚠️ CRITICAL: Background Sub-Agents on Telegram/WhatsApp/Slack
70
-
71
- **THE RULE**: For ANY long-running work (research, audits, multi-step
72
- analysis, >30 seconds), you MUST use \`mcp__alvin__dispatch_agent\`.
73
- The built-in \`Task\`/\`Agent\` tool is BANNED for long work on chat
74
- platforms (Telegram/WhatsApp/Slack/Discord). Do not use it for anything
75
- that takes more than ~30 seconds.
76
-
77
- **Why mcp__alvin__dispatch_agent is the ONLY background path:**
78
-
79
- The built-in Task/Agent tool — even with \`run_in_background: true\` —
80
- keeps the sub-agent tied to THIS session's CLI subprocess. The session
81
- stays blocked: \`isProcessing\` remains true, the typing indicator
82
- keeps firing, and the user's next message is queued until the
83
- synchronous Task finishes. There is no way to free the session while a
84
- built-in Task is running — that is a hard platform constraint.
85
-
86
- \`mcp__alvin__dispatch_agent\` spawns a COMPLETELY INDEPENDENT
87
- \`claude -p\` subprocess with its own PID, own process group. It
88
- returns in milliseconds, the session is freed immediately, and the user
89
- can keep chatting. The bot delivers the result as a separate message
90
- when ready.
91
-
92
- **THIS IS THE SINGLE MOST IMPORTANT RULE FOR USER RESPONSIVENESS.**
93
-
94
- **Decision tree** (apply every time you consider any sub-agent tool):
95
-
96
- Does the task involve ANY of the following?
97
- • Visiting more than 2 URLs
98
- • Reading/analyzing more than 5 files
99
- • A full-repo scan, audit, or refactor proposal
100
- • A multi-section report or structured document
101
- • Tasks you'd describe as "thorough", "comprehensive", or "deep"
102
- • Shell commands that may take >30s (builds, installs, tests)
103
- • Crawling, scraping, or fetching multiple resources
104
- • Research across multiple sources or domains
105
-
106
- YES → use \`mcp__alvin__dispatch_agent\` (the ONLY sanctioned path)
107
- NO → foreground is fine (single quick sub-query under 30s, answer
108
- yourself if possible)
109
-
110
- **Examples where you MUST use \`mcp__alvin__dispatch_agent\`:**
111
- - ANY audit (SEO, security, code quality, performance, accessibility, GEO)
112
- - Research visiting more than 1-2 web pages
113
- - Code reviews on more than a single file
114
- - Full-repo analyses, dependency scans, architecture proposals
115
- - Report generation with multiple sub-steps
116
- - Build / install / test runs
117
- - Long data-processing jobs
118
- - Anything involving the word "analyze", "audit", "review", "scan", "research"
119
-
120
- **Examples where foreground is fine (no sub-agent needed):**
121
- - "Read this file and summarize it" (single file, <10s)
122
- - "What's 2+2?" (no sub-agent needed — answer yourself)
123
- - "Check if package.json has foo" (one quick tool call)
124
-
125
- **After calling \`mcp__alvin__dispatch_agent\` you MUST:**
126
- 1. Tell the user in ONE short sentence what you kicked off.
127
- Example: "Starting SEO audit for example.com in the background —
128
- I'll send the report when it's done."
129
- 2. End your turn IMMEDIATELY. Do not continue working. Do not wait.
130
- 3. The bot will deliver the result as a separate message when ready.
131
- You don't need to poll the outputFile proactively.
132
-
133
- Only say "running in the background — you can keep chatting" if you
134
- actually called \`mcp__alvin__dispatch_agent\` in this turn. If the
135
- task ran inline (foreground tool calls, no dispatch), it blocked the
136
- session and the user could NOT chat during it — do NOT claim otherwise.
137
- If a task was too long for foreground but you didn't dispatch it, tell
138
- the user truthfully: "That ran inline and took a while. Your messages
139
- were queued until it finished."
140
-
141
- **For PARALLEL dispatch** (e.g. user says "research X and Y in parallel"):
142
- Call \`mcp__alvin__dispatch_agent\` multiple times in the SAME assistant
143
- turn, once per sub-task. Each returns its own agentId immediately. Your
144
- turn ends as soon as all dispatches have returned — no sequential
145
- waiting. The bot delivers each sub-agent's result separately when ready.
146
-
147
- If the user asks "is it done yet?" before the bot delivers the result,
148
- you MAY read the agent's \`outputFile\` (from the original tool result)
149
- using the Read tool to peek at progress — but don't block on it.
150
-
151
- **Never** call the built-in Agent/Task tool for anything you're not
152
- 100% sure completes in under 30 seconds. The cost of dispatch is zero.
153
- The cost of blocking the chat user for 20 minutes on a synchronous
154
- inline Task is very high.`;
155
- /**
156
- * Self-Awareness Core — Dynamic introspection block.
157
- *
158
- * This makes the agent deeply aware of what it IS, what it can do natively
159
- * (without external APIs), and when to use tools vs its own intelligence.
160
- *
161
- * Injected into EVERY system prompt, adapted to the active provider.
162
- */
163
- function buildSelfAwareness(isSDK, providerName, lang = "en") {
164
- const model = providerName || (isSDK ? "Claude (Anthropic Agent SDK)" : "AI language model");
165
- if (lang === "de") {
166
- return `## Self-Awareness — Who you are and what you can do
167
-
168
- You are a high-performance AI language model (${model}).
169
-
170
- ### What you can do NATIVELY (no external APIs or tools needed):
171
- - **Analyze, summarize, translate text** — You ARE the language model. You ARE the AI.
172
- - **Evaluate, categorize, prioritize content** — Your core competency.
173
- - **Creative writing** — Letters, reports, emails, stories, code.
174
- - **Logical reasoning** — Problem solving, decision making, strategy development.
175
- - **Data structuring** — Extract JSON, CSV, tables from free text.
176
- - **Write and debug code** — In any common programming language.
177
-
178
- ### When you need tools (and when you DON'T):
179
- - **Summarize text?** → Do it YOURSELF. No API call needed.
180
- - **Read emails?** → Use tools. But summarize content YOURSELF.
181
- - **Generate images?** → API needed (Gemini, DALL-E).
182
- - **Fetch a webpage?** → Use tools. But analyze content YOURSELF.
183
- - **Create PDF?** → Use tools. But write the text YOURSELF.
184
-
185
- ### 📄 HTML → PDF Best Practices (letters, reports, documents):
186
- When generating PDFs from HTML (e.g., via Puppeteer, Playwright, wkhtmltopdf):
187
- - **\`break-inside: avoid\` + \`page-break-inside: avoid\`** on all logical blocks:
188
- - Heading + first paragraph (keep together!)
189
- - Blockquotes, citation boxes
190
- - List items, timeline entries
191
- - Signature area (closing + line + name)
192
- - **\`break-after: avoid\`** on headings — never leave a heading alone at page bottom
193
- - **Set A4 explicitly:** \`paperWidth: 8.27, paperHeight: 11.69\` (inches) — default is US Letter!
194
- - **Continuous HTML flow** instead of fixed page divs → let the browser optimize page breaks
195
- - **Margins:** \`margin: 15mm 20mm\` for professional letters
196
- - **Font size:** 11-12pt for body text, line-height: 1.5-1.6
197
-
198
- ### Decision rule:
199
- **NEVER** call an external LLM API (Groq, Gemini, OpenAI) to process text — YOU are the LLM!
200
- Always ask yourself first: "Can I solve this with my own intelligence?" If yes → do it directly.`;
201
- }
202
- return `## Self-Awareness — Who you are and what you can do
203
-
204
- You are a high-performance AI language model (${model}).
205
-
206
- ### What you can do NATIVELY (no external APIs or tools needed):
207
- - **Analyze, summarize, translate text** — You ARE the language model. You ARE the AI.
208
- - **Evaluate, categorize, prioritize content** — Your core competency.
209
- - **Creative writing** — Letters, reports, emails, stories, code.
210
- - **Logical reasoning** — Problem solving, decision making, strategy development.
211
- - **Data structuring** — Extract JSON, CSV, tables from free text.
212
- - **Write and debug code** — In any common programming language.
213
-
214
- ### When you need tools (and when you DON'T):
215
- - **Summarize text?** → Do it YOURSELF. No API call needed.
216
- - **Read emails?** → Use tools (osascript, himalaya). But summarize content YOURSELF.
217
- - **Generate images?** → API needed (Gemini, DALL-E).
218
- - **Fetch a webpage?** → Use tools (curl, web_fetch). But analyze content YOURSELF.
219
- - **Create PDF?** → Use tools (Python script). But write the text YOURSELF.
220
-
221
- ### 📄 HTML → PDF Best Practices (letters, reports, documents):
222
- When generating PDFs from HTML (e.g., via Puppeteer, Playwright, wkhtmltopdf):
223
- - **\`break-inside: avoid\` + \`page-break-inside: avoid\`** on all logical blocks:
224
- - Heading + first paragraph (keep together!)
225
- - Blockquotes, citation boxes
226
- - List items, timeline entries
227
- - Signature area (closing + line + name)
228
- - **\`break-after: avoid\`** on headings — never leave a heading alone at page bottom
229
- - **Set A4 explicitly:** \`paperWidth: 8.27, paperHeight: 11.69\` (inches) — default is US Letter!
230
- - **Continuous HTML flow** instead of fixed page divs → let the browser optimize page breaks
231
- - **Margins:** \`margin: 15mm 20mm\` for professional letters
232
- - **Font size:** 11-12pt for body text, line-height: 1.5-1.6
233
-
234
- ### Decision rule:
235
- **NEVER** call an external LLM API (Groq, Gemini, OpenAI) to process text — YOU are the LLM!
236
- Always ask yourself first: "Can I solve this with my own intelligence?" If yes → do it directly.`;
237
- }
238
- /**
239
- * Build the full system prompt for a query.
240
- * @param isSDK Whether the active provider is the Claude SDK (has tool use)
241
- * @param language Preferred language ('de' or 'en')
242
- */
243
- export function buildSystemPrompt(isSDK, language = "en", chatId, query, workspacePersona) {
244
- // The deep base prompt has only de/en variants (writing four full
245
- // personality templates is out of scope). For es/fr we fall back to
246
- // the English base — the LLM mirrors the user's conversational language
247
- // anyway via langInstruction below, so the base-prompt language is
248
- // really just the "hint" for the system-prompt wrapper.
249
- const deepLang = language === "de" ? "de" : "en";
250
- const langInstruction = "Reply in the language the user writes in. Match their language naturally.";
251
- // Current date/time context — locale formatting uses the user's picked
252
- // locale for familiarity (German date formatting for de, etc.).
253
- const now = new Date();
254
- const tzLocale = language === "de" ? "de-DE" :
255
- language === "es" ? "es-ES" :
256
- language === "fr" ? "fr-FR" :
257
- "en-US";
258
- const dateStr = now.toLocaleDateString(tzLocale, { weekday: "long", year: "numeric", month: "long", day: "numeric" });
259
- const timeStr = now.toLocaleTimeString(tzLocale, { hour: "2-digit", minute: "2-digit" });
260
- const timeContext = `Current date: ${dateStr}, ${timeStr} (Europe/Berlin).`;
261
- const parts = [getBasePrompt(deepLang), langInstruction, timeContext];
262
- // Core self-awareness — always injected, adapted to active provider and language
263
- parts.push(buildSelfAwareness(isSDK, getActiveProviderLabel(), deepLang));
264
- if (soulContent) {
265
- parts.push(soulContent);
266
- }
267
- const standingOrders = getStandingOrders();
268
- if (standingOrders) {
269
- parts.push("## Standing Orders\n\n" + standingOrders);
270
- }
271
- // v4.12.0 — Workspace persona: per-channel system prompt override from
272
- // ~/.alvin-bot/workspaces/<name>.md body. Only injected when a workspace
273
- // is resolved for the channel; default workspace passes empty string.
274
- if (workspacePersona && workspacePersona.trim().length > 0) {
275
- parts.push("## Workspace Persona\n\n" + workspacePersona.trim());
276
- }
277
- if (isSDK) {
278
- parts.push(SDK_ADDON);
279
- // Stage 1 — teach Claude to use run_in_background for long-running
280
- // Agent tool calls so the main session unlocks fast.
281
- parts.push(BACKGROUND_SUBAGENT_HINT);
282
- // SDK providers have bash access — inject discovered tools so they know what's available
283
- parts.push(getToolSummary());
284
- }
285
- // Inject chat context for cron job creation
286
- if (chatId) {
287
- parts.push(`Current chat: Platform=telegram, ChatID=${chatId}. Use this ChatID when creating cron jobs that should send results to this chat.`);
288
- }
289
- // Memory context: ALL providers (SDK + non-SDK) get long-term memory
290
- // injected (v4.11.0 P0 #2). Before v4.11.0 this was non-SDK only; the SDK
291
- // was expected to read memory via tools but in practice rarely did, leading
292
- // to "frickelig" UX after session restarts. The injected MEMORY.md gives
293
- // Claude immediate context without spending a tool-call round-trip on Read.
294
- //
295
- // The optional `query` argument enables L2 project loading (v4.11.0 P1 #4):
296
- // memory-layers.ts matches the user's question against project filenames
297
- // in ~/.alvin-bot/memory/projects/ and only loads matching ones — keeping
298
- // the system prompt small while still surfacing relevant per-project facts.
299
- // See docs/superpowers/plans/2026-04-13-memory-persistence.md
300
- const memoryCtx = buildMemoryContext(query);
301
- if (memoryCtx) {
302
- parts.push(memoryCtx);
303
- }
304
- // Asset awareness: also extended to SDK in v4.11.0 — same rationale as
305
- // memory above. Cheap injection beats hoping Claude uses Glob/Read on
306
- // ~/.alvin-bot/assets/ proactively.
307
- const assetMd = getAssetIndexMd();
308
- if (assetMd) {
309
- parts.push(assetMd);
310
- }
311
- return parts.join("\n\n");
312
- }
313
- /**
314
- * Build a system prompt enhanced with semantically relevant memories.
315
- * Searches the vector index for context related to the user's message.
316
- *
317
- * @param isSDK true → Claude SDK provider (has tool use)
318
- * @param language preferred UI language
319
- * @param userMessage the user's incoming message (used as the search query)
320
- * @param chatId Telegram chat id (for cron job context)
321
- * @param isFirstTurn v4.11.0 P0 #3 — whether this is the very first turn of
322
- * a (rehydrated or fresh) session. SDK only runs the
323
- * semantic search on first-turn to avoid spamming the
324
- * embeddings API on every subsequent turn — once the
325
- * session has resumed, Claude already has the recalled
326
- * context in its conversation history. Non-SDK providers
327
- * run the search on every turn (cheap, no resume).
328
- */
329
- export async function buildSmartSystemPrompt(isSDK, language = "en", userMessage, chatId, isFirstTurn = false, workspacePersona) {
330
- // Pass userMessage as query so L2 project memories matching the topic
331
- // get loaded into the base prompt automatically. Workspace persona (v4.12.0)
332
- // is also threaded through so per-channel personas land in the system prompt.
333
- const base = buildSystemPrompt(isSDK, language, chatId, userMessage, workspacePersona);
334
- if (!userMessage)
335
- return base;
336
- // Decide whether to run the semantic search:
337
- // non-SDK → always (cheap, no session resume to lean on)
338
- // SDK → only on the first turn of a session (Claude carries context
339
- // across turns within the same session via SDK resume)
340
- const shouldSearch = !isSDK || isFirstTurn;
341
- if (!shouldSearch)
342
- return base;
343
- // Search for relevant memories
344
- try {
345
- const results = await searchMemory(userMessage, 3, 0.35);
346
- if (results.length > 0) {
347
- const memorySnippets = results.map(r => {
348
- const preview = r.text.length > 400 ? r.text.slice(0, 400) + "..." : r.text;
349
- return `[${r.source}] ${preview}`;
350
- }).join("\n\n");
351
- return base + `\n\n---\n## Relevant Memories (auto-retrieved)\n\n${memorySnippets}`;
352
- }
353
- }
354
- catch {
355
- // Embedding search failed — fall back to basic context
356
- }
357
- return base;
358
- }
359
- /**
360
- * Get just the SOUL.md content (for /status or debugging).
361
- */
362
- export function getSoulContent() {
363
- return soulContent || "(no SOUL.md loaded)";
364
- }
365
- /**
366
- * Reload SOUL.md from disk (e.g., after editing).
367
- */
368
- export function reloadSoul() {
369
- try {
370
- soulContent = readFileSync(SOUL_FILE, "utf-8");
371
- return true;
372
- }
373
- catch {
374
- return false;
375
- }
376
- }
1
+ const _0x988615=_0x1439,_0x116da7=_0x1439;(function(_0x2dc832,_0xb55580){const _0x3f28fb=_0x1439,_0x13d627=_0x1439,_0x203249=_0x2dc832();while(!![]){try{const _0x139b1b=-parseInt(_0x3f28fb(0x211))/(-0x213*0x9+0x8a0+0xa0c)*(-parseInt(_0x13d627(0x2b5))/(-0x994*-0x3+-0x25c9+-0x305*-0x3))+-parseInt(_0x13d627(0x32e))/(0x1*0x25e5+-0x2f*-0x3+-0x266f)+-parseInt(_0x13d627(0x298))/(-0xb94+-0x1*-0x1fee+0xa2b*-0x2)+-parseInt(_0x13d627(0x423))/(-0x1*0x1106+0x2*-0xd4f+0x2ba9)+parseInt(_0x3f28fb(0x231))/(-0x1*-0xd1+-0x1e*-0x86+0x29*-0x67)*(-parseInt(_0x13d627(0x3ee))/(0x19*-0x103+0x7d*-0x29+0x2d57))+-parseInt(_0x3f28fb(0x462))/(0xe99+0x2e8*0x5+-0x1d19)+parseInt(_0x3f28fb(0x474))/(0x64e*0x2+0x20ac+-0x2d3f);if(_0x139b1b===_0xb55580)break;else _0x203249['push'](_0x203249['shift']());}catch(_0x52c88e){_0x203249['push'](_0x203249['shift']());}}}(_0x55d8,0x1ce2*0xa6+-0xcc10d+0x8228e));function _0x55d8(){const _0x3dc116=['tKuGC2HVCNqGCW','BMfSieXmtsbbua','Bw1VBIbWCM9NCG','ifjvteuQkJOGrG','ChvZAa','AguGDgv4DcbztW','BYbZDwiTywDLBG','idmWCYWGyw5ZDW','CMuGyxjLysaOyW','Dgv4DcWGBgLUzq','zY4Grg8GBM90ia','4OcuifLVDsbbuKuG','yI1Hz2vUDcb0Aq','zxjSAw4PlG','DwvYEsb1BMrLCG','ysaZlJmGnZbckq','kg5VifnpvuWUBq','rvzfuIOQignHBa','4OcuihvZAw5Nigj1','zgvKicHhzw1PBG','zwvKzwqGkeDLBq','z2uGBw9KzwWUia','DezPBguGChjVyq','igrPCMvJDgX5lG','DMLHifb1ChbLDa','rK9sifvtrviGuG','zw50ifnesYK','zxi6igf2B2LKya','yM90igrLBgL2zq','AcbHihDLyNbHzW','zw1HAw5ZihrYDq','AhjVBM91CYbuyq','zMLYC3q6icjdyq','CM1HDhrPBMCGyW','DhrLCNmSihjLCa','DgHPCYb3AxrOia','iIbjzIb5zxmG4OAs','kKzVCIbqqvjbta','lsbcBg9JA3f1BW','yw1TAw5NigXHBG','z2uGBMf0DxjHBa','rxzHBhvHDguSia','DgfZAYbPBNzVBa','CMvOzw5ZAxzLiG','DhjPBq','mJCSihbHCgvYsa','B25NihDVCMSGBW','Bw9Yzsb0AgfUia','zxjHDgLUzYbqra','CYbvuYbmzxr0zq','ygjYzwfRlwfMDa','zw1HAwXZlcbZDa','EtOQkIbGCgfWzq','kIOklsaIuMvHza','mJG3vKj4rxjO','AxrOig15ig93BG','uhvWCgv0zwvYla','vvjtruXglGOkiW','DgLUzY4GvgHLia','DgHLigjHy2TNCG','B2rLigjSB2nRCW','vgvSzwDYyw0VvW','zwn0BhKU','kIOG4OAsifvZzsb0','BcaVihrLC3qGCG','igLUDgvSBgLNzq','DgHYB3bPyYbbzW','ufjjtufswv9quG','C291CMnL','ignPDgf0Aw9Uia','igrHDgeTChjVyW','icjdyw4GssbZBW','lsaQkK1HCMDPBG','Dg9mB2nHBgvuAq','CWOTiefUExrOAq','Aw5LicSGBMfTzq','AxPLihbHz2uGyG','iYmG4PQG77Ipienssvrj','y29UDgvUDcbztW','zxbLBMrLBMn5ia','Esb0ywTLid4Zma','AgL0zwn0DxjLia','Dg8TCMv0CMLLDG','t3bLBKfjieDqva','DhvHBgX5ignHBa','Aw5PlcbequXmlq','DgG6idGUmJCSia','zwqPcGO','y2vZCYbNCM91Ca','yxzVAwrGkIOGBW','DgvUy3KUcI0GkG','Aw1LihLVDsbJBW','CMf0zsbTzxnZyq','CIbHBNL0AgLUzW','iokgKIbSzxqGDgHL','BKfjksb0BYbWCG','BIbLBMrZigfZia','y3rPy2vZicHSzq','Dg9tDhjPBMC','BhKU','ifGGyw5KifKGAq','BMCGDgHLihDVCG','C29VBIbHCYbHBa','BMLUzYOQiokaLcbq','ww91igfYzsbbBa','vefovcbsvuXfia','Cgf0y2HFywDLBG','nty2odi3nuHir054Dq','l2fUywX5EMLUzW','ihLVDsbJyw4Gza','z2uGD2HLBIbYzq','BgvKigbTy3bFxW','B3r0B20klsaQkG','ignHBgWGyw4Gzq','y3bFx2fSDMLUxW','CM9IBgvTihnVBa','zwXSignVBw1HBG','CML0zsb0AguGDa','Dga6kIOklsbbtG','ic0Gu2LNBMf0Dq','ig5LzwqGDg9VBa','DgvTCYWGDgLTzq','AxbSzsbYzxnVDq','zwXLDMfUDcbnzq','igrVigL0igrPCG','igLTywDLCZ8QkG','C3vIlxrHC2SUia','Bcb0AgukC3LUyW','te0HcKfSD2f5CW','BNn0CMfPBNqUcG','zxr0zxiHcI0GkG','zsbJB250zw50ia','kcGOlISPkYKRkq','zsbTB2rLBcaO','lsaQkKDLBMvYyq','v2HVihLVDsbHCG','ifbYywn0AwnLCW','lGOTicOQv3jPDa','yxnO','BNmGAw4GBwLSBa','zxikicaGicaGia','yxqGEw91ignHBG','Cgf0AdOQkGOkva','AwrLoIbHDM9Pza','ihDOzw4GAxqNCW','BMf0DxjLigfYzq','teyUcGOJiYmG8j+tHa','Bg9UzsbHDcbWyq','B24GCMvWB3j0ia','tu9tvcbjtvbpuG','D2L0AcbuzwXLzW','y29UC3rYDwn0BW','rgvJAxnPB24GDa','ywX2Aw5Fx2rPCW','AxPLoIOQideXlq','B3iGC3rYDwn0Dq','BMvLzgvKktOklq','D3jPDgLUzYOQia','igL0ywXPyYWGyW','DwXKihnLBMqGCG','ie9Wzw5bssKGDa','r29Vz2XLieDLBq','ihnLC3nPB24NCW','y2vZCYb3AxrOia','kIOGB24GAgvHza','A2vKig9MzI4kia','lGOTicOQrMv0yW','ssaOr3jVCsWGrW','mtvTBsaYmg1Tya','zsKkcIOQrxHHBq','odaYoti4ufPrwKn1','lcbWCMLVCML0Aq','ywnOihn1yI1HzW','kqOTicOQygjYzq','igHLywrPBMCGyq','BMfTzsKklsaQkG','DgHLigXHBMD1yq','Aw5NigLUzgLJyq','DcbVzIbKAxnWyq','lwjYzwfRlwLUCW','AguGyM90ihDPBa','CIaYmcbTAw51Da','zMLSzxmSigjYAq','C3nHz2uGAxmGCq','lJuTms42cGOJiW','Aw5NihrOzsbJAa','B21WyxrPyMXLia','ifnftYbHDwrPDa','mZC0mtm1otrXyKHetw0','zxjUywWGqvbjCW','DMLUzYWGzgvJAq','ww91iefsrsb0Aa','ihrVB2WPoGOkia','ihLVDsDYzsbUBW','Dg1SDg9WzgyPoG','iokaLcbzt1uGyxjL','lsaQkKzVBNqGCW','igzVCIbLEgfTCa','icaTieXPC3qGAq','ihvZzxiGC2f5CW','DsbnqvKGCMvHza','lIbuzwXSihrOzq','B29SCYaOB3nHCW','Agf0C0fWCc9tBa','B3iGCMvMywn0BW','igLZihj1BM5PBG','ihDYAxrLCYbPBG','iGOGicaG4OcIifnO','C2fNzxmkD2vYzq','igfUzcb0AguGDq','DwiTywDLBNqGBG','yxq6ifbSyxrMBW','AguGyM90igrLBa','BhzLihrOAxmGDW','DgGPcIaGtK8Gia','tLzjreLbie5jtq','zxmGD2HLCMuGzG','igrVie5pvcbJBa','zcaIyw5HBhL6zq','CM9TieHutuWGka','AY9eAxnJB3jKkq','zxqGs2XHC3nL','icbfEgfTCgXLoG','CMnLCWOGicaG4OcI','tsbbueKGkeDYBW','zxmkicaTifnPzW','Dgf5CYbIBg9JAW','AxmGzMLUzsaOBG','BcbKAxnWyxrJAa','zxmG4OAsigrVigL0','igbTyxjNAw46ia','kIOGmteTmtjWDa','kIPdCMvHDguGua','igvUDhjPzxmkia','icSGBgLUzsaRia','iIK6cKnHBgWGya','x2fNzw50ycbTDq','kIOG4OAsiefqssbU','igrVBMuUiGOYlG','kgLUy2HLCYKG4Ocu','y2HPBMCGBxvSDa','zsb0B29SCYaOua','t1zjrevs','ifzPC2L0Aw5Nia','zNiTrLi','ywDYyxbOicHRzq','DgHLie9otfKGyG','ihrOzsbmte0HcG','DaOXmdaLihn1CG','zw5LCMf0Aw9Uia','DMLUx19KAxnWyq','DgfZAYb3yxmGDa','icjxAgf0j3mGmG','mta1mJe3CLDqqvbv','ihrOzsbIywnRzW','zxbZihrOzsbZDq','ru8SihnLy3vYAq','BgLUzs1OzwLNAa','ig5VDcbJB250Aq','u2v0iee0igv4Ca','iNjLC2vHCMnOiG','wu9vuLnfteyUcG','zs4klsaQkKXVzW','iYbezwnPC2LVBG','teyUie5Viefqsq','y3rPB25LzcbWyq','zwXMigzPCNn0oG','y2vZig9YigrVBq','ChjVCg9ZywXZcG','ysaOy2XVC2LUzW','CMzVCM1HBMnLla','ywqGzw1HAwXZpW','uYdIHPiGDxnLigbT','ywDLpYOQiokgKIbv','CYaOyw5KihDOzq','ignOyxr0Aw5NiG','zY1YDw5UAw5Nia','zwf2zsbHigHLyq','DgzVCM1ZicHuzq','zxzLBIb3AxrOia','zxnZAw5NigPVyG','DYOQigLUC3rLyq','AgfZigzVBYiGka','ywqGDg9VBcb0BW','igrLC2nYAwjLia','mteYnti0y0HRtKj0','Aw5PidiUnsbgBa','BxKGB3DUigLUDa','DdOGms41lteUnG','BwnWx19HBhzPBG','ssDSBcbZzw5Kia','igfJy2vZC2LIAq','quKGBgfUz3vHzW','ywDLBNrGihLVDq','CMvLkIOGkgfWCa','Bg9N','yMXVy2SGB24GAq','ig9YihrVB2XZia','cMbTy3bFx2fSDG','C3bHD25ZigeGqW','igfZigeGC2vWyq','ihj1Bgu6cIOQtG','Dc4kcIOQtMv2zq','4Os577IpihnVDwWUBwqG','vvjtruXglGOTia','Agf0ihrHA2vZia','zwnVBMrZksWGEq','ihbLzwSGyxqGCa','AsWGrefmtc1fkq','BNmGAxrZig93BG','cGOQkKv4yw1WBa','igf0ihbHz2uGyG','C3nHz2ukD2HLBG','CY4GvgHLCMuGAq','CM9MzxnZAw9Uyq','rwfJAcbYzxr1CG','zwqGDg8GveHjuW','ihnLC3nPB24GDW','C2vHCMnO','ie1vu1q6kIOkmq','igTLzxaGy2HHDa','kIPhzw5LCMf0zq','zw50zw5Jzsb3Aa','zcbVzIbMAxHLza','kgzVCMvNCM91BG','ihjLywr5lGOkkG','BMCGkYbMAxjZDa','y2f0zwDVCML6zq','lwHLAwDODdOGmq','BcbKzwXPDMvYia','FJmWihnLy29Uza','DxnLigbTy3bFxW','C2uGDg9VBhmGka','y29YzsbJB21Wzq','igrLzMf1BhqGAq','igzYzwuGDgv4Da','DdOGmteUnJLGia','mI1KAwDPDa','C2LKztOGyxzVAq','B28GBg9UzYbMBW','icjYzxnLyxjJAa','igLUC3rHBgXZla','igfSBcbSB2DPyW','kZi/iIaOBM8GCW','mYa3meiP','BWOkww91igfYzq','igeGAgLNAc1Wzq','EMuGy29UDgvUDa','q3vYCMvUDcbJAa','AwnHBcbYzwfZBW','CYbVCIbLzgL0ia','u0fnrsbHC3nPCW','zgLUzYbHBg9Uzq','lcbVCIaIzgvLCa','Aw5LigfUzcb0BW','zg9JDw1LBNrZkq','Aw5P','Aw9UigjVEgvZcG','BsWGq2HHDeLepq','zsbHBMqGzgvIDq','BIb5B3uGre9ojW','x19KAxnWyxrJAa','DhnbChaVu2XHyW','zwLNAhq6ideXlG','z2uGyNjLywTZcG','BMCGAw52B2X2Aq','iokaLcbUzxzLCIbS','CMfTicHIB2XKla','Dg9YcMTLzxbZia','CIbMB3jLz3jVDq','DhvYBMvKiokaLcbU','CgfWzxjizwLNAa','C3bHDgnOigL0la','DgnOigeGD2vICa','vaPGy2XHDwrLia','zxbZcI0GqNvPBa','ignHBgWGBMvLza','B29SCY4GqNv0ia','qwX3yxLZigfZAW','igrVie5bveLwrq','DcbHBMfSExPLia','ideTmIb3zwiGCa','zxiGBgvHDMuGyq','CsWGr2vTAw5Pla','y2fSBgLUzYbGBq','zcaVigLUC3rHBa','zxrOzxiHkqOGia','kLrisvmGsvmGva','mZq3mteWmhzvsgLnAW','zwfKEs4kcKLMia','zxn1BhrZihrVia','igjSB2nRzwqGDa','ihrOAxmGzMLSzq','DMLUiejVDcWGyq','iYmGu3rHBMrPBG','igzPCNn0ihbHCG','AgukC2vZC2LVBG','C2LVBIbYDwXLoG','igzPEgvKihbHzW','Ehq/kIOG4OAsierV','CMLNAhqSihDRAa','oGPxAgvUigDLBG','Dw5ZcI0Gtg9UzW','ihrLBgWkDgHLia','rey/kIOG4OAsifvZ','BNvTzxjPyW','Bw1HCML6zsb0zq','rIbczxn0ifbYyq','BMCSihnJCMfWAq','j3mGBMv4DcbTzq','tK9uignOyxqGza','CIePcIaGlsbcBa','BIbjihnVBhzLia','cI0GkIPGyNjLyq','x2rPC3bHDgnOxW','BYbZzxf1zw50Aq','Aw5NihrOzsbszq','mJzZDgX3sMC','AgLNAc4','lsbszxbVCNqGzW','DsbKAwqU','q3vYCMvUDcbKyq','lGPuAguGyNvPBa','DwX0As1Zzwn0Aq','tfKGkg5Vigv4Da','C2TZicjPCYbPDa','lcaIC2nHBIiSia','rcWGB3DUihbYBW','iYmG8j+tHcbive1mia','tevmigrPC3bHDa','BMnLpYiGswyGEq','y3rPDMvSEs4kcG','ChqPlIbcDxqGDW','yM94zxmkicaTia','sufuruXzlIbeBW','yw4GAw5SAw5Lia','igrVBMuGEwv0pW','C2LVBIbTywTPBG','y3jPChqSigHPBq','CML6zsbPDciGka','BMfSExnLCYWGza','CYbUBYb3yxKGDa','BIbPCYbMCMvLza','x2fNzw50igLZia','BwvUDhmPoGPxAa','BwfW','zw1PBMKSie9Wzq','ieHLywrPBMCGkW','CM91BMqG4OcuihLV','BNqkicaGiokaOIbu','ihLVDxjZzwXMia','AxnLlGPjzIbHia','y2uGugvYC29Uyq','igfUzcbZDw1Tyq','ihnLC3nPB24kCW','B3jPzxmSignVza','ywjSzxmGzNjVBq','v2HLBIb5B3uGCG','cI0GuMvZzwfYyW','EhrLCM5HBcbmta','DcbUzwvKzwqPoG','DgHLihnLC3nPBW','yc9GqwDLBNrGia','igfZAYb5B3vYCW','CgXLCYb3AgvYzq','rMLSzwaGkgzYBW','igLTBwvKAwf0zq','A2fNzs5QC29Uia','ienmssbZDwjWCG','zYbJB2rLkIOG4Ocu','C2vYignVDwXKia','zYbpCMrLCNmkcG','ihjLCg9YDhmSia','CMfTlGPvC2uGtq','igXVz2LJywWGyG','B3vUzcdIGjqkicaG','BIbOzwfKAw5NCW','zsWGDgHLihr5Ca','BIbbz2vUDc9uyq','zsbKAxzZiokgKIbS','AwyGCg9ZC2LIBa','zw50j3mGCMvZDq','zYdIGjqGDgHHDcbP','wsbHDwrPDcaOuW','zsbptKXzihnHBG','icHmBgfTysaZlG','ihbHz2uGzgL2CW','ihLVDsbnvvnuia','CLDPzhrOoIa4lG','ywr5lGOGicbzBW','Bw9YAwvZicHHDq','BY4kvgHLignVCW','ihn1yI1Hz2vUDa','lcaICMv2Awv3iG','rM9UDcbZAxPLoG','D2fPDc4kmY4Gva','CY4GvgHLignVCW','AguGyNvPBhqTAq','zsb0B29SCY4GqG','zxaGDg9NzxrOzq','iYbxAgvUihLVDq','CMvKigrVy3vTzq','icOQqw5HBhL6zq','DgHLigzVBgXVDW','Aw5Fx2rPC3bHDa','yw55DgHPBMCkDa','AY1PBNnPzgu6ia','CM9NCMvZCYdIGjqG','AgLSzsbHcMj1Aq','tK5frcbMB3iGBa','zhmGDgHHDcbTyq','yw4GysbZAw5NBa','BgL0EsWGr0vpkq','lxbGihn1yNbYBW','BNqGDg9VBcdIGjqG','t04SientvIWGDa','zt8QkIdIHPiGvxnL','rNmGzNjVBsbiva','CIOQignHBgWGDa','zwXMkqOTicjdAa','DgnOigLZihPLCG','DgHLihvZzxiGyq','tuWGzMXVDYOQia','EsbKzxzLBg9WBq','DMLUlwjVDc9ZBW','zwqUcI0GkIPszq','zNvSBhK6icjuAa','lIbuAguGyM90ia','qwDLBNrZig9Uia','Aw5HBcb0B29Sia','BNnPzgvYigfUEq','zwvYlcbqBgf5DW','Dg9VBcbJywXSkq','DcbVBIbuzwXLzW','DhKSignVzguGCq','CYbive1migzSBW','AxnLy29UzhmSia','ywnYB3nZig11Ba','nte4odq3nNLhq3vmBG','tuWGkguUzY4Sia','rxH0CMfJDcbkuW','cIaGicdIGkiGqsbT','lIbnyxrJAcb0Aa','Bg9JA3m6cIaGlq','Dxn0B21PEMuU','BMCSig9YigzLDa','igzVCIbWCM9Mzq','yxjLBMvZCYdIGjqG','iYmGu2vSzI1bDW','CNvUBMLUzYbPBG','lcbZDw1TyxjPEG','CYbPBIb1BMrLCG','y2HFywDLBNrGia','cGOJiYmGrgvJAq','CMvZDwX0kqP1CW','C2LZlca+mZaGCW','DgnOx2fNzw50ya','igfYzsb0AguGta','BgvUz3rO','ifbSyxL3CMLNAa','zsbJB21WBgv0zq','ywnRcGOQkLrirq','ks4kcImJiYbxAa','DxrMltG','igL0ifLpvvjtrq','zw4Gz2vUzxjHDa','yxqGDxnLCIbMBW','tgLZDcbPDgvTCW','CIbWCM9WB3nHBa','B2r5ihrLEhqSia','C3vTBwfYAxPLia','Dc1PBIbGvgfZAW','q2XHDwrLicHbBG','yxrHihn0CNvJDa','DgvZlcbJAxrHDa','DxmGquKGywDLBG','igLMihLVDqPHyW','kKnYzwf0AxzLia','zxmGB24GysbZEq','lIbjDaPYzxr1CG','Aw5SAw5LifrHCW','Dgv4DcdIGjqGwu9v','zsbGBwnWx19HBa','Cgf0y2GPlcbPDa','DwfSAxr5lcbWzq','y2TNCM91BMq6ia','BMnOCM9UB3vZcG','DgHLihjLCg9YDa','DgHPCYbJAgf0lG','zMLYAw5NlcbHBG','Dgv4Da','ieLUigfUEsbJBW','BYbMCMvLihrOzq','AxnOzwqUiGOkkG','AM9PBG','zw4Tvvm','BhqGAxmGvvmGta','ywLTig90AgvYDW','mg1TycbMB3iGCa','BNvLihDVCMTPBG','zwXSAwDLBMnLpW','DwX0igfZigeGCW','AwX0lwLUigrLzG','DsbKB24NDcbUzq','C2nHBNmSigfYyW','CM91BMqGu3vIlq','DhmSig11BhrPlq','kMbICMvHAY1PBG','lIbzB3vYcNr1CG','igzVCIbIB2r5ia','lIbzB3vYig1LCW','zsbbss4klsaQkG','zsbMAwXLcI0GrG','BIWGyxvKAxqSia','vcK6cI0GkIPtDq','CYbHigHHCMqGCa','iYmGv29YA3nWyq','z3vHz2uUcGOJiW','yxjJAcWGyxvKAq','BIbuyxnRl0fNzq','zwqGDg8GCg9SBa','Bc1YzxbVihnJyq','yxnRCYb5B3uNza','DgaGAw4GDgHPCW','Bg9ZAw5NicSGBa','DgLWBguGC291CG','DgvtDhjPBMC','cGOTls0kiYmGuG','zguTreu','BhqGC2vWyxjHDa','ChrPBwL6zsbWyq','zw50lGOTicOQra','Aw4GD2HHDcb5BW','icHRzwvWihrVzW','ihf1zxvLzcb1BG','C2SGDg9VBcbMBW','4OcuieXLDhrLCNmS','ienOyxrjrcb3Aa','kKnVBNrPBNvVDq','zsbHBMqGD2HHDa','BhKGzxzLCNKGDa','DcWGD2TODg1SDa','zwzSEsbLEhbSyq','CIeklsaQkKnVBG','su5ervbftKrftG','DhvYBIbjtu1fra','icHSzxr0zxjZla','zsb0AguGDxnLCG','zwf0zsb+lY5HBa','ifjLC2vHCMnOia','cIaGlsbizwfKAq','B3bKzIK6cI0GkG','BIbHDxrVBM9TBW','CMvHA3mklsaQkG','CNmGDgHLihjLCW','zs5NlIWGDMLHia','iIWGiMf1zgL0iG','Bsb0AguGB3jPzW','zsWGpdeWCYKklq','zxmGAw4GDgHLia','BwvtDhjPBMC','DxjPBMCGAxqG4Ocu','ierVzxmGDgHLia','t25SEsbZyxKGiG','iokgKIbbueKGBMvL','B3j0CYWGzg9JDq','r3jVCsaOtgXHBq','yxjRzg93BIbMBW','zsWGDhjHBNnSyq','zgaGkYbGCgfNzq','CMzVCM1HBMnLia','igrPzg4NDcbKAq','DguGDgv4DcOQia','lI4U','DgLUDw91CYbiva','zcb0AguGDxnLCG'];_0x55d8=function(){return _0x3dc116;};return _0x55d8();}const _0x56b7d0=(function(){let _0xd1f980=!![];return function(_0xa087a2,_0x1eb3de){const _0x35b548=_0xd1f980?function(){if(_0x1eb3de){const _0x434b04=_0x1eb3de['apply'](_0xa087a2,arguments);return _0x1eb3de=null,_0x434b04;}}:function(){};return _0xd1f980=![],_0x35b548;};}()),_0x99ce1e=_0x56b7d0(this,function(){const _0x581f36=_0x1439,_0x3729f8=_0x1439;return _0x99ce1e[_0x581f36(0x41a)]()[_0x3729f8(0x252)](_0x3729f8(0x43c)+'+$')[_0x581f36(0x41a)]()[_0x581f36(0x44f)+'r'](_0x99ce1e)[_0x3729f8(0x252)](_0x3729f8(0x43c)+'+$');});_0x99ce1e();import{readFileSync}from'fs';import{buildMemoryContext}from'./memory.js';function _0x1439(_0x2b51db,_0x37782d){_0x2b51db=_0x2b51db-(-0x7a5*0x4+0xa51*0x1+0x1615);const _0x1f5dbd=_0x55d8();let _0xe147f6=_0x1f5dbd[_0x2b51db];if(_0x1439['psJpBn']===undefined){var _0x4c8c30=function(_0x33af63){const _0x2546a4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1e8559='',_0x397e3d='',_0x3e48ab=_0x1e8559+_0x4c8c30;for(let _0x3655b1=-0x1540+-0x21c8+0x3708,_0x465202,_0x173b4e,_0x18e6df=-0x1b5e+0x357+0x1807*0x1;_0x173b4e=_0x33af63['charAt'](_0x18e6df++);~_0x173b4e&&(_0x465202=_0x3655b1%(0x1*-0x87b+-0x4f*0xd+0x2*0x641)?_0x465202*(0x1009+-0x134b+0x1*0x382)+_0x173b4e:_0x173b4e,_0x3655b1++%(-0x1*-0x42+0x5*0x4b6+0x1*-0x17cc))?_0x1e8559+=_0x3e48ab['charCodeAt'](_0x18e6df+(-0x9*0x40b+0x116*-0x23+-0xb9*-0x67))-(0x18b*0x8+0x87*0x3d+-0x2c79)!==0x21b0+0x17*0x19+-0x23ef?String['fromCharCode'](-0x1c52+0x16*-0x167+0x3c2b&_0x465202>>(-(0x1*0x21e2+0x744+-0x2924)*_0x3655b1&0x1*-0x1f9a+-0x1843*0x1+-0x37e3*-0x1)):_0x3655b1:0x1073*0x1+-0x1ca+0x4e3*-0x3){_0x173b4e=_0x2546a4['indexOf'](_0x173b4e);}for(let _0x3a3716=-0x16a8+-0x1*-0x1511+0x197,_0x53a104=_0x1e8559['length'];_0x3a3716<_0x53a104;_0x3a3716++){_0x397e3d+='%'+('00'+_0x1e8559['charCodeAt'](_0x3a3716)['toString'](-0x6dc+-0x1d80+0x246c))['slice'](-(0x81*-0x7+-0x17b6+0x1b3f));}return decodeURIComponent(_0x397e3d);};_0x1439['RaskkK']=_0x4c8c30,_0x1439['nQVFAF']={},_0x1439['psJpBn']=!![];}const _0x5e661c=_0x1f5dbd[-0x17f2+-0xbd*0x16+0x2830],_0x4ebdf9=_0x2b51db+_0x5e661c,_0x5dc209=_0x1439['nQVFAF'][_0x4ebdf9];if(!_0x5dc209){const _0xd2f6f7=function(_0x15bb40){this['IIEEly']=_0x15bb40,this['tJMMQq']=[0x11*-0x4+-0x13c4+0x1409,0x1*-0xccc+0x2159*0x1+-0x148d,-0x995+-0xa93*0x2+0x1ebb],this['lYASUI']=function(){return'newState';},this['GaBcii']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['AzqZDi']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0xd2f6f7['prototype']['Bxabgc']=function(){const _0x2eb9fa=new RegExp(this['GaBcii']+this['AzqZDi']),_0x52c2b8=_0x2eb9fa['test'](this['lYASUI']['toString']())?--this['tJMMQq'][0x9a3+-0x18*-0x21+-0xcba]:--this['tJMMQq'][0x1e0e+-0x3d*-0x2e+0x1c*-0x177];return this['BauaTM'](_0x52c2b8);},_0xd2f6f7['prototype']['BauaTM']=function(_0x19203f){if(!Boolean(~_0x19203f))return _0x19203f;return this['dTLyJC'](this['IIEEly']);},_0xd2f6f7['prototype']['dTLyJC']=function(_0x58eb2f){for(let _0x816973=0x979+0x13db+-0x1d54,_0x5c0605=this['tJMMQq']['length'];_0x816973<_0x5c0605;_0x816973++){this['tJMMQq']['push'](Math['round'](Math['random']())),_0x5c0605=this['tJMMQq']['length'];}return _0x58eb2f(this['tJMMQq'][0x1*0xa8f+-0x16f4+0x1*0xc65]);},new _0xd2f6f7(_0x1439)['Bxabgc'](),_0xe147f6=_0x1439['RaskkK'](_0xe147f6),_0x1439['nQVFAF'][_0x4ebdf9]=_0xe147f6;}else _0xe147f6=_0x5dc209;return _0xe147f6;}import{searchMemory}from'./embeddings.js';import{getToolSummary}from'./tool-discovery.js';import{SOUL_FILE}from'../paths.js';import{loadStandingOrders,getStandingOrders}from'./standing-orders.js';import{getAssetIndexMd}from'./asset-index.js';function getActiveProviderLabel(){const _0x13f9a4=_0x1439,_0x3de935=_0x1439;try{const _0x2cfb6e=process['env'][_0x13f9a4(0x3fb)+_0x13f9a4(0x206)]||'claude-sdk',_0x590b76={'claude-sdk':'Claude\x20(An'+_0x13f9a4(0x3fa)+'ent\x20SDK)\x20—'+'\x20Opus/Sonn'+_0x13f9a4(0x1f1),'openai':_0x3de935(0x40b),'groq':_0x13f9a4(0x3ae)+_0x13f9a4(0x3c7),'gemini-2.5-flash':_0x13f9a4(0x459)+_0x3de935(0x232)+_0x13f9a4(0x442),'google':_0x13f9a4(0x459)+_0x13f9a4(0x278),'nvidia-llama-3.3-70b':'NVIDIA\x20NIM'+_0x3de935(0x2f9)+_0x3de935(0x26c),'nvidia-kimi-k2.5':_0x3de935(0x1eb)+'\x20(Kimi\x20K2.'+'5)'};return _0x590b76[_0x2cfb6e]||_0x2cfb6e;}catch{return _0x3de935(0x238)+'e\x20model';}}let soulContent='';try{soulContent=readFileSync(SOUL_FILE,_0x988615(0x347));}catch{console[_0x988615(0x23b)](_0x116da7(0x243)+'not\x20found\x20'+_0x116da7(0x3ca)+_0x988615(0x36e)+'ault\x20perso'+'nality.\x20Cr'+_0x988615(0x39c)+_0x988615(0x320)+'ul.md\x20to\x20c'+_0x988615(0x334));}loadStandingOrders();function getBasePrompt(_0x388e3a){const _0x24522f=_0x988615,_0x50f0e3=_0x988615;return _0x388e3a==='de'?_0x24522f(0x420)+'vin\x20Bot,\x20a'+_0x50f0e3(0x3a0)+_0x50f0e3(0x353)+_0x50f0e3(0x329)+'ram.\x0aUse\x20M'+_0x24522f(0x3af)+'rmatting\x20c'+_0x50f0e3(0x472)+_0x50f0e3(0x44e)+_0x24522f(0x283)+_0x50f0e3(0x456)+_0x24522f(0x3f4)+').':_0x24522f(0x420)+_0x24522f(0x29d)+_0x24522f(0x3a0)+_0x24522f(0x353)+_0x50f0e3(0x329)+_0x50f0e3(0x2ed)+_0x50f0e3(0x3af)+_0x24522f(0x3d9)+'ompatible\x20'+_0x50f0e3(0x44e)+_0x50f0e3(0x283)+_0x50f0e3(0x456)+'ode\x20blocks'+').';}const SDK_ADDON=_0x988615(0x2dd)+'un\x20command'+_0x116da7(0x272)+_0x988615(0x46e)+_0x988615(0x396)+_0x116da7(0x38c)+_0x116da7(0x2b8),BACKGROUND_SUBAGENT_HINT=_0x988615(0x405)+'CAL:\x20Backg'+_0x988615(0x371)+_0x988615(0x324)+_0x116da7(0x3f5)+_0x116da7(0x1df)+_0x116da7(0x345)+_0x116da7(0x3bb)+'or\x20ANY\x20lon'+_0x116da7(0x228)+'work\x20(rese'+_0x116da7(0x37e)+_0x988615(0x372)+'step\x0aanaly'+_0x988615(0x33f)+_0x116da7(0x246)+'ou\x20MUST\x20us'+_0x988615(0x35a)+_0x116da7(0x20e)+_0x116da7(0x340)+_0x988615(0x2ba)+_0x988615(0x34f)+_0x116da7(0x2e2)+'tool\x20is\x20BA'+_0x988615(0x311)+_0x988615(0x3e6)+'n\x20chat\x0apla'+_0x116da7(0x22a)+'legram/Wha'+_0x116da7(0x27e)+_0x116da7(0x1f0)+'.\x20Do\x20not\x20u'+'se\x20it\x20for\x20'+_0x116da7(0x30d)+_0x988615(0x245)+_0x988615(0x3e7)+_0x988615(0x25e)+'s.\x0a\x0a**Why\x20'+_0x116da7(0x235)+_0x116da7(0x27d)+_0x116da7(0x2cf)+_0x116da7(0x20a)+'ackground\x20'+_0x116da7(0x446)+'he\x20built-i'+_0x988615(0x37f)+_0x116da7(0x316)+_0x988615(0x22b)+'`run_in_ba'+_0x988615(0x35d)+'true`\x20—\x0ake'+_0x988615(0x213)+_0x116da7(0x3c4)+_0x116da7(0x250)+_0x988615(0x45a)+_0x988615(0x2e8)+'ocess.\x20The'+_0x116da7(0x2da)+_0x988615(0x1f6)+'ed:\x20`isPro'+'cessing`\x20r'+_0x116da7(0x3d6)+_0x988615(0x2f1)+_0x988615(0x469)+_0x988615(0x284)+_0x116da7(0x361)+_0x988615(0x3b7)+_0x116da7(0x2ad)+_0x116da7(0x46f)+'ueued\x20unti'+_0x116da7(0x437)+_0x116da7(0x3d7)+'sk\x20finishe'+_0x988615(0x24d)+_0x116da7(0x2cd)+_0x988615(0x364)+_0x988615(0x251)+_0x988615(0x310)+'lt-in\x20Task'+_0x116da7(0x1e1)+_0x988615(0x2f6)+_0x988615(0x37b)+'latform\x20co'+_0x988615(0x439)+_0x116da7(0x23e)+_0x116da7(0x30c)+_0x988615(0x33c)+_0x116da7(0x23f)+'OMPLETELY\x20'+_0x116da7(0x398)+_0x116da7(0x28a)+_0x988615(0x315)+_0x116da7(0x45b)+'its\x20own\x20PI'+_0x116da7(0x2bf)+_0x116da7(0x410)+_0x988615(0x357)+_0x988615(0x443)+_0x988615(0x32c)+_0x116da7(0x2e1)+(_0x116da7(0x2ce)+_0x988615(0x2e6)+'ly,\x20and\x20th'+'e\x20user\x0acan'+_0x116da7(0x254)+_0x988615(0x3f2)+_0x988615(0x3d4)+_0x116da7(0x3a2)+_0x988615(0x36d)+'eparate\x20me'+_0x116da7(0x24c)+_0x116da7(0x259)+_0x116da7(0x297)+'HE\x20SINGLE\x20'+_0x988615(0x44d)+_0x988615(0x421)+_0x116da7(0x3d1)+'ESPONSIVEN'+'ESS.**\x0a\x0a**'+_0x116da7(0x450)+_0x988615(0x23a)+_0x116da7(0x394)+_0x116da7(0x413)+_0x116da7(0x326)+_0x116da7(0x300)+_0x988615(0x1d4)+_0x988615(0x3aa)+_0x988615(0x3e2)+'ve\x20ANY\x20of\x20'+_0x116da7(0x30b)+'ing?\x0a\x20\x20\x20\x20•'+_0x116da7(0x207)+_0x116da7(0x3e7)+'2\x20URLs\x0a\x20\x20\x20'+'\x20•\x20Reading'+_0x988615(0x424)+'\x20more\x20than'+'\x205\x20files\x0a\x20'+'\x20\x20\x20•\x20A\x20ful'+_0x988615(0x381)+_0x988615(0x379)+_0x116da7(0x1e0)+_0x116da7(0x34c)+_0x988615(0x331)+_0x988615(0x2bb)+_0x988615(0x44c)+_0x988615(0x453)+_0x116da7(0x309)+_0x988615(0x2d5)+_0x116da7(0x382)+_0x988615(0x230)+'as\x20\x22thorou'+'gh\x22,\x20\x22comp'+_0x988615(0x3e3)+_0x988615(0x275)+_0x116da7(0x1e3)+_0x988615(0x42c)+_0x116da7(0x312)+_0x988615(0x408)+'s\x20(builds,'+_0x116da7(0x269)+'\x20tests)\x0a\x20\x20'+'\x20\x20•\x20Crawli'+_0x988615(0x2ac)+_0x116da7(0x335)+_0x116da7(0x204)+_0x988615(0x432)+_0x116da7(0x1f3)+_0x116da7(0x39d)+_0x116da7(0x32d)+_0x116da7(0x385)+_0x116da7(0x21f)+'ains\x0a\x0a\x20\x20YE'+_0x988615(0x224)+'cp__alvin_'+'_dispatch_'+'agent`\x20(th'+_0x116da7(0x2f8)+_0x116da7(0x21d)+_0x988615(0x1ea)+'→\x20foregrou'+'nd\x20is\x20fine'+'\x20(single\x20q'+'uick\x20sub-q'+_0x116da7(0x3c6)+_0x988615(0x3bf)+_0x116da7(0x444)+_0x116da7(0x2d6)+_0x988615(0x2f4)+_0x116da7(0x461)+_0x116da7(0x2e4)+_0x988615(0x2fb)+_0x116da7(0x25f)+_0x988615(0x451)+_0x116da7(0x422)+_0x116da7(0x42e)+_0x116da7(0x2f7)+_0x988615(0x214)+_0x988615(0x32a)+_0x116da7(0x35c))+(_0x988615(0x222)+_0x116da7(0x237)+_0x988615(0x314)+_0x988615(0x2de)+'h\x20visiting'+'\x20more\x20than'+_0x988615(0x291)+'ages\x0a-\x20Cod'+'e\x20reviews\x20'+'on\x20more\x20th'+_0x988615(0x313)+_0x988615(0x378)+'ull-repo\x20a'+_0x116da7(0x2cc)+_0x116da7(0x407)+_0x988615(0x370)+_0x988615(0x409)+_0x116da7(0x220)+_0x116da7(0x2b7)+_0x988615(0x20d)+'with\x20multi'+'ple\x20sub-st'+_0x988615(0x28b)+_0x116da7(0x295)+_0x116da7(0x3f8)+_0x116da7(0x2a6)+_0x988615(0x3fe)+_0x988615(0x22c)+_0x116da7(0x402)+_0x988615(0x281)+_0x116da7(0x41d)+_0x116da7(0x1ee)+_0x988615(0x3a4)+_0x988615(0x301)+_0x116da7(0x2be)+_0x988615(0x218)+_0x988615(0x24a)+_0x988615(0x1ec)+'oreground\x20'+_0x988615(0x1f7)+_0x988615(0x3be)+_0x988615(0x2e0)+_0x988615(0x3ed)+_0x116da7(0x29c)+_0x116da7(0x2d9)+_0x988615(0x2cb)+'single\x20fil'+_0x988615(0x3a6)+_0x116da7(0x210)+_0x988615(0x26b)+_0x988615(0x1e6)+'eeded\x20—\x20an'+'swer\x20yours'+_0x988615(0x31b)+'eck\x20if\x20pac'+_0x988615(0x2e7)+_0x988615(0x22e)+'one\x20quick\x20'+_0x988615(0x328)+'\x0a\x0a**After\x20'+_0x988615(0x294)+_0x116da7(0x42a)+_0x116da7(0x2b2)+_0x988615(0x239)+_0x988615(0x253)+_0x116da7(0x1dd)+'\x20user\x20in\x20O'+_0x116da7(0x3b8)+_0x988615(0x256)+'at\x20you\x20kic'+_0x988615(0x45d)+_0x116da7(0x1f2)+'\x20\x22Starting'+_0x116da7(0x473)+_0x116da7(0x1d9)+'le.com\x20in\x20'+_0x988615(0x3f3)+_0x988615(0x2ef)+_0x988615(0x236)+_0x116da7(0x35f)+_0x116da7(0x448)+_0x116da7(0x202)+'\x20End\x20your\x20'+_0x988615(0x399)+_0x116da7(0x2c6)+_0x988615(0x216)+_0x116da7(0x36b)+_0x116da7(0x3c2)+_0x116da7(0x303)+_0x116da7(0x46c)+_0x988615(0x25d)+'the\x20result'+_0x988615(0x240)+_0x116da7(0x414)+_0x988615(0x426)+_0x988615(0x2fd)+_0x988615(0x36f)+_0x116da7(0x380)+'\x20the\x20outpu'+_0x116da7(0x3ce))+(_0x116da7(0x2c3)+_0x116da7(0x3ab)+_0x116da7(0x339)+_0x116da7(0x212)+_0x988615(0x2d4)+'u\x20can\x20keep'+_0x988615(0x227)+_0x988615(0x354)+_0x116da7(0x40c)+_0x116da7(0x427)+'alvin__dis'+'patch_agen'+_0x116da7(0x383)+'\x20turn.\x20If\x20'+'the\x0atask\x20r'+_0x988615(0x2c7)+_0x116da7(0x258)+'d\x20tool\x20cal'+'ls,\x20no\x20dis'+_0x988615(0x35b)+_0x988615(0x29b)+_0x988615(0x2a0)+_0x116da7(0x1e5)+_0x116da7(0x2ea)+_0x116da7(0x2ae)+_0x988615(0x3a9)+_0x116da7(0x1ed)+_0x988615(0x369)+_0x116da7(0x2d7)+_0x988615(0x20f)+_0x116da7(0x267)+_0x116da7(0x285)+'nd\x20but\x20you'+_0x988615(0x3b3)+_0x988615(0x288)+_0x988615(0x2a7)+'user\x20truth'+_0x116da7(0x322)+'at\x20ran\x20inl'+_0x988615(0x276)+'ok\x20a\x20while'+_0x988615(0x376)+_0x988615(0x1e4)+_0x116da7(0x38e)+'til\x20it\x20fin'+_0x116da7(0x365)+_0x116da7(0x3dd)+_0x988615(0x2c1)+'ch**\x20(e.g.'+_0x988615(0x1db)+_0x116da7(0x268)+_0x116da7(0x41c)+'n\x20parallel'+_0x988615(0x1ff)+'mcp__alvin'+_0x116da7(0x27d)+_0x988615(0x200)+'ltiple\x20tim'+_0x988615(0x3a7)+_0x116da7(0x273)+'tant\x0aturn,'+'\x20once\x20per\x20'+_0x988615(0x436)+_0x988615(0x24f)+_0x116da7(0x249)+'\x20agentId\x20i'+'mmediately'+_0x988615(0x374)+_0x116da7(0x418)+_0x116da7(0x41e)+_0x988615(0x1f8)+'es\x20have\x20re'+_0x116da7(0x286)+_0x116da7(0x2b3)+'al\x0awaiting'+_0x116da7(0x323)+'delivers\x20e'+_0x988615(0x464)+_0x988615(0x2f5)+_0x116da7(0x389)+'ely\x20when\x20r'+_0x988615(0x299)+_0x116da7(0x31d)+_0x116da7(0x2bd)+_0x988615(0x2c8)+'\x22\x20before\x20t'+_0x116da7(0x1e8)+'ivers\x20the\x20'+'result,\x0ayo'+_0x988615(0x1dc)+'\x20the\x20agent'+'\x27s\x20`output'+_0x116da7(0x2e5)+_0x116da7(0x3a5)+_0x988615(0x325)+_0x988615(0x33e)+_0x116da7(0x2b4)+_0x116da7(0x22f)+_0x988615(0x247)+_0x116da7(0x30f))+('but\x20don\x27t\x20'+_0x988615(0x23c)+_0x988615(0x242)+_0x988615(0x31a)+_0x116da7(0x305)+_0x116da7(0x2f2)+_0x116da7(0x38f)+_0x116da7(0x415)+_0x988615(0x1d5)+_0x116da7(0x20c)+_0x988615(0x344)+_0x988615(0x33b)+'\x2030\x20second'+_0x116da7(0x304)+_0x116da7(0x46a)+_0x116da7(0x31c)+_0x988615(0x2ff)+'t\x20of\x20block'+_0x116da7(0x471)+_0x116da7(0x34a)+_0x988615(0x46d)+_0x116da7(0x356)+_0x988615(0x35e)+_0x988615(0x358)+'k\x20is\x20very\x20'+_0x116da7(0x2b6));function buildSelfAwareness(_0x4063d2,_0x37df60,_0x2973ed='en'){const _0x4a341f=_0x988615,_0x52775c=_0x988615,_0x2b4d60=_0x37df60||(_0x4063d2?_0x4a341f(0x350)+_0x52775c(0x3fa)+_0x52775c(0x3d2):_0x52775c(0x238)+'e\x20model');if(_0x2973ed==='de')return'##\x20Self-Aw'+_0x4a341f(0x337)+_0x52775c(0x43f)+_0x4a341f(0x393)+_0x4a341f(0x425)+_0x52775c(0x26d)+_0x4a341f(0x26e)+'rformance\x20'+_0x52775c(0x238)+_0x52775c(0x43d)+_0x2b4d60+(_0x4a341f(0x346)+_0x52775c(0x445)+'\x20do\x20NATIVE'+_0x4a341f(0x2bc)+'ernal\x20APIs'+_0x52775c(0x23d)+_0x4a341f(0x454)+_0x4a341f(0x30a)+_0x52775c(0x33a)+_0x52775c(0x3b0)+_0x52775c(0x3b4)+_0x4a341f(0x3c3)+_0x52775c(0x468)+_0x4a341f(0x3cd)+_0x52775c(0x1d3)+'e\x20AI.\x0a-\x20**'+_0x52775c(0x3e1)+_0x4a341f(0x25b)+_0x52775c(0x463)+_0x52775c(0x26f)+'**\x20—\x20Your\x20'+'core\x20compe'+'tency.\x0a-\x20*'+_0x52775c(0x355)+_0x52775c(0x455)+_0x52775c(0x390)+_0x4a341f(0x2ec)+'emails,\x20st'+_0x4a341f(0x2db)+_0x4a341f(0x21a)+_0x4a341f(0x271)+_0x4a341f(0x41f)+_0x52775c(0x42b)+_0x4a341f(0x1d2)+_0x4a341f(0x2c9)+'g,\x20strateg'+'y\x20developm'+'ent.\x0a-\x20**D'+_0x4a341f(0x351)+'uring**\x20—\x20'+_0x4a341f(0x330)+_0x52775c(0x317)+_0x52775c(0x2dc)+_0x4a341f(0x263)+_0x4a341f(0x441)+_0x52775c(0x27b)+_0x4a341f(0x2e9)+'\x20In\x20any\x20co'+_0x52775c(0x3ba)+_0x52775c(0x3df)+_0x4a341f(0x37d)+_0x4a341f(0x308)+_0x4a341f(0x430)+_0x52775c(0x226)+_0x52775c(0x27c)+_0x4a341f(0x37a)+_0x52775c(0x2aa)+_0x4a341f(0x2a3)+_0x4a341f(0x348)+_0x52775c(0x21c)+_0x4a341f(0x28c)+'ed.\x0a-\x20**Re'+_0x4a341f(0x223)+_0x52775c(0x3f7)+_0x4a341f(0x28d)+_0x4a341f(0x34e)+_0x4a341f(0x406)+'URSELF.\x0a-\x20'+_0x52775c(0x255)+_0x52775c(0x435)+_0x4a341f(0x3ac)+_0x4a341f(0x3cb)+_0x52775c(0x248)+_0x52775c(0x45e)+_0x52775c(0x3d5)+_0x4a341f(0x318)+'\x20tools.\x20Bu'+_0x4a341f(0x290)+_0x4a341f(0x406)+_0x52775c(0x244)+_0x4a341f(0x1fc)+_0x4a341f(0x2a8)+_0x52775c(0x306)+'ut\x20write\x20t'+_0x4a341f(0x3bd)+_0x4a341f(0x3f1)+_0x4a341f(0x2c0)+'→\x20PDF\x20Best'+_0x52775c(0x440)+_0x4a341f(0x39a)+'\x20reports,\x20'+_0x4a341f(0x277)+_0x52775c(0x2a5)+_0x4a341f(0x3e8)+_0x52775c(0x319)+_0x4a341f(0x32f)+_0x4a341f(0x3d0)+_0x52775c(0x327)+_0x52775c(0x2a4)+_0x52775c(0x1d6)+(_0x52775c(0x2b1)+_0x4a341f(0x30e)+'avoid`\x20+\x20`'+'page-break'+'-inside:\x20a'+'void`**\x20on'+_0x52775c(0x26a)+'al\x20blocks:'+_0x4a341f(0x39e)+_0x52775c(0x25a)+'\x20paragraph'+_0x52775c(0x38d)+_0x52775c(0x296)+_0x52775c(0x3de)+_0x52775c(0x352)+_0x4a341f(0x279)+_0x52775c(0x1da)+_0x52775c(0x431)+'line\x20entri'+_0x52775c(0x1f5)+_0x52775c(0x449)+_0x52775c(0x221)+_0x4a341f(0x1fe)+_0x52775c(0x467)+_0x4a341f(0x3ea)+_0x4a341f(0x3d3)+_0x4a341f(0x45c)+'ings\x20—\x20nev'+_0x52775c(0x292)+_0x52775c(0x466)+_0x52775c(0x44b)+'ge\x20bottom\x0a'+'-\x20**Set\x20A4'+'\x20explicitl'+_0x4a341f(0x3ec)+_0x52775c(0x2fc)+_0x4a341f(0x3e5)+_0x52775c(0x27f)+'69`\x20(inche'+'s)\x20—\x20defau'+_0x4a341f(0x368)+_0x4a341f(0x43a)+_0x52775c(0x392)+_0x52775c(0x32b)+_0x52775c(0x22d)+_0x52775c(0x257)+_0x52775c(0x2fa)+_0x52775c(0x416)+'\x20browser\x20o'+_0x52775c(0x38a)+_0x52775c(0x280)+_0x52775c(0x400)+'s:**\x20`marg'+'in:\x2015mm\x202'+_0x52775c(0x36a)+_0x52775c(0x24e)+'l\x20letters\x0a'+_0x4a341f(0x1d8)+_0x4a341f(0x452)+'12pt\x20for\x20b'+_0x4a341f(0x34d)+_0x52775c(0x215)+_0x4a341f(0x234)+_0x52775c(0x33d)+_0x4a341f(0x2a1)+'\x0a**NEVER**'+_0x4a341f(0x429)+_0x4a341f(0x2df)+_0x4a341f(0x1f4)+_0x52775c(0x293)+_0x52775c(0x458)+'o\x20process\x20'+_0x52775c(0x359)+_0x52775c(0x341)+_0x4a341f(0x438)+_0x4a341f(0x2e3)+_0x52775c(0x21e)+_0x4a341f(0x3ff)+_0x52775c(0x1e9)+_0x52775c(0x3ef)+_0x52775c(0x3f9)+_0x4a341f(0x2c2)+_0x4a341f(0x1f9)+_0x4a341f(0x3cf)));return _0x52775c(0x338)+'areness\x20—\x20'+_0x52775c(0x43f)+_0x4a341f(0x393)+_0x52775c(0x425)+_0x4a341f(0x26d)+'\x20a\x20high-pe'+_0x52775c(0x3b2)+_0x4a341f(0x238)+_0x4a341f(0x43d)+_0x2b4d60+(_0x4a341f(0x346)+_0x52775c(0x445)+_0x4a341f(0x28f)+_0x52775c(0x2bc)+_0x52775c(0x475)+_0x52775c(0x23d)+_0x52775c(0x454)+_0x4a341f(0x30a)+_0x52775c(0x33a)+_0x4a341f(0x3b0)+_0x52775c(0x3b4)+_0x4a341f(0x3c3)+_0x52775c(0x468)+'ge\x20model.\x20'+_0x4a341f(0x1d3)+_0x52775c(0x377)+'Evaluate,\x20'+_0x4a341f(0x25b)+_0x4a341f(0x463)+'ze\x20content'+'**\x20—\x20Your\x20'+_0x4a341f(0x261)+_0x4a341f(0x412)+_0x52775c(0x355)+_0x52775c(0x455)+_0x52775c(0x390)+_0x4a341f(0x2ec)+_0x52775c(0x3eb)+_0x52775c(0x2db)+'e.\x0a-\x20**Log'+_0x52775c(0x271)+'ning**\x20—\x20P'+_0x52775c(0x42b)+_0x4a341f(0x1d2)+'sion\x20makin'+'g,\x20strateg'+_0x4a341f(0x31f)+_0x4a341f(0x38b)+_0x4a341f(0x351)+'uring**\x20—\x20'+'Extract\x20JS'+_0x4a341f(0x317)+'ables\x20from'+_0x4a341f(0x263)+_0x52775c(0x441)+_0x52775c(0x27b)+_0x4a341f(0x2e9)+_0x4a341f(0x363)+_0x4a341f(0x3ba)+'amming\x20lan'+_0x52775c(0x37d)+_0x4a341f(0x308)+_0x52775c(0x430)+_0x4a341f(0x226)+_0x4a341f(0x27c)+'T):\x0a-\x20**Su'+_0x4a341f(0x2aa)+_0x4a341f(0x2a3)+_0x52775c(0x348)+_0x52775c(0x21c)+_0x4a341f(0x28c)+_0x52775c(0x321)+_0x52775c(0x223)+_0x4a341f(0x3f7)+_0x52775c(0x1de)+_0x52775c(0x2ca)+'alaya).\x20Bu'+'t\x20summariz'+_0x4a341f(0x43b)+_0x4a341f(0x219)+_0x4a341f(0x43e)+'te\x20images?'+_0x52775c(0x201)+_0x52775c(0x3cc)+_0x4a341f(0x40d)+'E).\x0a-\x20**Fe'+_0x4a341f(0x289)+_0x4a341f(0x225)+_0x52775c(0x260)+'curl,\x20web_'+'fetch).\x20Bu'+_0x52775c(0x290)+_0x52775c(0x406)+_0x4a341f(0x244)+_0x4a341f(0x1fc)+_0x4a341f(0x2a8)+_0x52775c(0x205)+'ython\x20scri'+_0x52775c(0x2c4)+_0x52775c(0x42d)+'ext\x20YOURSE'+_0x4a341f(0x44a)+'\x20HTML\x20→\x20PD'+_0x52775c(0x2ab)+_0x4a341f(0x419)+_0x52775c(0x3da)+_0x52775c(0x3ad)+_0x52775c(0x2d0)+_0x4a341f(0x349)+'ing\x20PDFs\x20f'+(_0x52775c(0x1ef)+_0x52775c(0x3a3)+_0x52775c(0x3f0)+_0x52775c(0x343)+_0x4a341f(0x395)+_0x4a341f(0x39f)+_0x4a341f(0x373)+_0x4a341f(0x266)+_0x4a341f(0x3b1)+_0x4a341f(0x46b)+_0x52775c(0x447)+'`**\x20on\x20all'+_0x4a341f(0x2ee)+_0x4a341f(0x333)+_0x4a341f(0x2d3)+_0x52775c(0x29f)+_0x4a341f(0x209)+_0x52775c(0x307)+_0x52775c(0x2af)+'ockquotes,'+_0x4a341f(0x3fd)+_0x4a341f(0x2c5)+_0x4a341f(0x34b)+',\x20timeline'+_0x52775c(0x1fd)+_0x52775c(0x42f)+_0x52775c(0x3c0)+_0x52775c(0x384)+_0x52775c(0x403)+_0x52775c(0x465)+'ak-after:\x20'+_0x4a341f(0x411)+_0x4a341f(0x2f0)+_0x4a341f(0x282)+_0x52775c(0x229)+_0x52775c(0x274)+_0x4a341f(0x24b)+_0x52775c(0x428)+_0x52775c(0x217)+'licitly:**'+'\x20`paperWid'+_0x52775c(0x40e)+_0x52775c(0x287)+_0x4a341f(0x264)+_0x4a341f(0x203)+_0x4a341f(0x262)+_0x4a341f(0x3e9)+_0x4a341f(0x397)+_0x4a341f(0x3b6)+_0x4a341f(0x31e)+'instead\x20of'+_0x4a341f(0x2a2)+_0x52775c(0x2f3)+'et\x20the\x20bro'+'wser\x20optim'+_0x4a341f(0x404)+_0x4a341f(0x3a1)+'Margins:**'+_0x4a341f(0x1fa)+_0x4a341f(0x460)+_0x4a341f(0x336)+'ssional\x20le'+'tters\x0a-\x20**'+_0x52775c(0x302)+_0x4a341f(0x1fb)+_0x4a341f(0x375)+_0x4a341f(0x3c1)+_0x52775c(0x25c)+_0x4a341f(0x470)+_0x4a341f(0x21b)+_0x4a341f(0x241)+_0x4a341f(0x3c9)+'l\x20an\x20exter'+_0x52775c(0x3b9)+_0x4a341f(0x45f)+_0x4a341f(0x2d2)+_0x52775c(0x417)+'ocess\x20text'+_0x4a341f(0x1d7)+_0x52775c(0x20b)+_0x52775c(0x28e)+_0x52775c(0x2d6)+_0x52775c(0x3d8)+_0x52775c(0x2b0)+_0x4a341f(0x3db)+_0x4a341f(0x233)+_0x4a341f(0x36c)+_0x52775c(0x3dc)+_0x52775c(0x434)+_0x52775c(0x3f6)));}export function buildSystemPrompt(_0x91eac6,_0x1213fd='en',_0x4f2b99,_0x3411ed,_0x524df6){const _0x36e52e=_0x116da7,_0x2de57a=_0x988615,_0x809228=_0x1213fd==='de'?'de':'en',_0x4d7659='Reply\x20in\x20t'+'he\x20languag'+_0x36e52e(0x39b)+_0x2de57a(0x1e2)+_0x2de57a(0x332)+'eir\x20langua'+_0x2de57a(0x3e0)+_0x2de57a(0x41b),_0x32063f=new Date(),_0x43c463=_0x1213fd==='de'?_0x36e52e(0x388):_0x1213fd==='es'?'es-ES':_0x1213fd==='fr'?_0x2de57a(0x208):_0x36e52e(0x367),_0x2d80d6=_0x32063f['toLocaleDa'+_0x36e52e(0x386)](_0x43c463,{'weekday':'long','year':_0x36e52e(0x2a9),'month':'long','day':_0x2de57a(0x2a9)}),_0x4b0526=_0x32063f[_0x2de57a(0x401)+_0x2de57a(0x3a8)](_0x43c463,{'hour':_0x2de57a(0x265),'minute':_0x2de57a(0x265)}),_0x4a7c71=_0x2de57a(0x2b9)+'te:\x20'+_0x2d80d6+',\x20'+_0x4b0526+('\x20(Europe/B'+_0x2de57a(0x3c5)),_0x281bb5=[getBasePrompt(_0x809228),_0x4d7659,_0x4a7c71];_0x281bb5['push'](buildSelfAwareness(_0x91eac6,getActiveProviderLabel(),_0x809228));soulContent&&_0x281bb5['push'](soulContent);const _0x4dbdbf=getStandingOrders();_0x4dbdbf&&_0x281bb5[_0x2de57a(0x3bc)](_0x2de57a(0x29e)+_0x36e52e(0x2eb)+_0x4dbdbf);_0x524df6&&_0x524df6[_0x36e52e(0x3e4)]()[_0x36e52e(0x342)]>0x357+0xae*-0x9+0x2c7&&_0x281bb5[_0x2de57a(0x3bc)](_0x2de57a(0x37c)+_0x36e52e(0x2d8)+'\x0a\x0a'+_0x524df6[_0x2de57a(0x3e4)]());_0x91eac6&&(_0x281bb5[_0x2de57a(0x3bc)](SDK_ADDON),_0x281bb5[_0x36e52e(0x3bc)](BACKGROUND_SUBAGENT_HINT),_0x281bb5['push'](getToolSummary()));_0x4f2b99&&_0x281bb5['push'](_0x36e52e(0x270)+_0x2de57a(0x1e7)+'rm=telegra'+_0x36e52e(0x27a)+_0x4f2b99+('.\x20Use\x20this'+_0x36e52e(0x391)+'en\x20creatin'+'g\x20cron\x20job'+'s\x20that\x20sho'+_0x36e52e(0x457)+_0x2de57a(0x29a)+_0x36e52e(0x360)));const _0x5889f6=buildMemoryContext(_0x3411ed);_0x5889f6&&_0x281bb5[_0x2de57a(0x3bc)](_0x5889f6);const _0x14097a=getAssetIndexMd();return _0x14097a&&_0x281bb5[_0x2de57a(0x3bc)](_0x14097a),_0x281bb5[_0x36e52e(0x366)]('\x0a\x0a');}export async function buildSmartSystemPrompt(_0x496713,_0x1caceb='en',_0x456d1b,_0x18c424,_0x2f04e4=![],_0x275082){const _0x572a94=_0x116da7,_0x13c627=_0x988615,_0xbaf796=buildSystemPrompt(_0x496713,_0x1caceb,_0x18c424,_0x456d1b,_0x275082);if(!_0x456d1b)return _0xbaf796;const _0x1079ef=!_0x496713||_0x2f04e4;if(!_0x1079ef)return _0xbaf796;try{const _0x117b7d=await searchMemory(_0x456d1b,0xd*-0x4f+0x1e9+0x1*0x21d,0x1009+-0x134b+0x2*0x1a1+0.35);if(_0x117b7d[_0x572a94(0x342)]>-0x1*-0x42+0x5*0x4b6+0x1*-0x17d0){const _0x308290=_0x117b7d[_0x13c627(0x2d1)](_0x2b626f=>{const _0x4c580b=_0x13c627,_0x52be7e=_0x13c627,_0x12bf94=_0x2b626f['text'][_0x4c580b(0x342)]>-0x9*0x40b+0x116*-0x23+-0xf31*-0x5?_0x2b626f[_0x4c580b(0x362)]['slice'](0x18b*0x8+0x87*0x3d+-0x2c83,0x21b0+0x17*0x19+-0x225f)+_0x4c580b(0x3b5):_0x2b626f['text'];return'['+_0x2b626f[_0x52be7e(0x3fc)]+']\x20'+_0x12bf94;})[_0x572a94(0x366)]('\x0a\x0a');return _0xbaf796+(_0x13c627(0x387)+_0x572a94(0x433)+_0x572a94(0x2fe)+_0x572a94(0x40a)+_0x13c627(0x40f)+_0x308290);}}catch{}return _0xbaf796;}export function getSoulContent(){const _0x12ac6d=_0x116da7;return soulContent||_0x12ac6d(0x3c8)+'d\x20loaded)';}export function reloadSoul(){try{return soulContent=readFileSync(SOUL_FILE,'utf-8'),!![];}catch{return![];}}