alvin-bot 5.6.2 → 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 (137) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -1
  3. package/dist/claude.js +1 -102
  4. package/dist/config.js +1 -96
  5. package/dist/engine.js +1 -90
  6. package/dist/find-claude-binary.js +1 -98
  7. package/dist/handlers/async-agent-chunk-handler.js +1 -50
  8. package/dist/handlers/background-bypass.js +1 -75
  9. package/dist/handlers/commands.js +1 -2336
  10. package/dist/handlers/cron-progress.js +1 -52
  11. package/dist/handlers/document.js +1 -194
  12. package/dist/handlers/message.js +1 -959
  13. package/dist/handlers/photo.js +1 -154
  14. package/dist/handlers/platform-message.js +1 -360
  15. package/dist/handlers/stuck-timer.js +1 -54
  16. package/dist/handlers/video.js +1 -237
  17. package/dist/handlers/voice.js +1 -148
  18. package/dist/i18n.js +1 -805
  19. package/dist/index.js +1 -697
  20. package/dist/init-data-dir.js +1 -98
  21. package/dist/middleware/auth.js +1 -233
  22. package/dist/migrate.js +1 -162
  23. package/dist/paths.js +1 -146
  24. package/dist/platforms/discord.js +1 -175
  25. package/dist/platforms/index.js +1 -130
  26. package/dist/platforms/signal.js +1 -205
  27. package/dist/platforms/slack-slash-parser.js +1 -32
  28. package/dist/platforms/slack.js +1 -501
  29. package/dist/platforms/telegram.js +1 -111
  30. package/dist/platforms/types.js +1 -8
  31. package/dist/platforms/whatsapp-auth-helpers.js +1 -53
  32. package/dist/platforms/whatsapp.js +1 -707
  33. package/dist/providers/claude-sdk-provider.js +1 -565
  34. package/dist/providers/codex-cli-provider.js +1 -134
  35. package/dist/providers/index.js +1 -7
  36. package/dist/providers/ollama-provider.js +1 -32
  37. package/dist/providers/openai-compatible.js +1 -406
  38. package/dist/providers/registry.js +1 -352
  39. package/dist/providers/runtime-header.js +1 -45
  40. package/dist/providers/tool-executor.js +1 -475
  41. package/dist/providers/types.js +1 -227
  42. package/dist/services/access.js +1 -144
  43. package/dist/services/allowed-users-gate.js +1 -56
  44. package/dist/services/alvin-dispatch.js +1 -130
  45. package/dist/services/alvin-mcp-tools.js +1 -104
  46. package/dist/services/asset-index.js +1 -224
  47. package/dist/services/async-agent-parser.js +1 -418
  48. package/dist/services/async-agent-watcher.js +1 -443
  49. package/dist/services/auto-diagnostic.js +1 -228
  50. package/dist/services/broadcast.js +1 -52
  51. package/dist/services/browser-manager.js +1 -562
  52. package/dist/services/browser-webfetch.js +1 -127
  53. package/dist/services/browser.js +1 -121
  54. package/dist/services/cdp-bootstrap.js +1 -357
  55. package/dist/services/compaction.js +1 -144
  56. package/dist/services/critical-notify.js +1 -203
  57. package/dist/services/cron-resolver.js +1 -58
  58. package/dist/services/cron-scheduling.js +1 -310
  59. package/dist/services/cron.js +1 -861
  60. package/dist/services/custom-tools.js +1 -317
  61. package/dist/services/delivery-queue.js +1 -173
  62. package/dist/services/delivery-registry.js +1 -21
  63. package/dist/services/disk-cleanup.js +1 -203
  64. package/dist/services/elevenlabs.js +1 -58
  65. package/dist/services/embeddings/auto-detect.js +1 -74
  66. package/dist/services/embeddings/fts5.js +1 -108
  67. package/dist/services/embeddings/gemini.js +1 -65
  68. package/dist/services/embeddings/index.js +1 -496
  69. package/dist/services/embeddings/ollama.js +1 -78
  70. package/dist/services/embeddings/openai.js +1 -49
  71. package/dist/services/embeddings/provider.js +1 -22
  72. package/dist/services/embeddings/vector-base.js +1 -113
  73. package/dist/services/embeddings-migration.js +1 -193
  74. package/dist/services/embeddings.js +1 -9
  75. package/dist/services/env-file.js +1 -50
  76. package/dist/services/exec-guard.js +1 -71
  77. package/dist/services/fallback-order.js +1 -154
  78. package/dist/services/file-permissions.js +1 -93
  79. package/dist/services/heartbeat-file.js +1 -65
  80. package/dist/services/heartbeat.js +1 -313
  81. package/dist/services/hooks.js +1 -44
  82. package/dist/services/imagegen.js +1 -72
  83. package/dist/services/language-detect.js +1 -154
  84. package/dist/services/markdown.js +1 -63
  85. package/dist/services/mcp.js +1 -263
  86. package/dist/services/memory-extractor.js +1 -178
  87. package/dist/services/memory-inject-mode.js +1 -43
  88. package/dist/services/memory-layers.js +1 -156
  89. package/dist/services/memory.js +1 -146
  90. package/dist/services/ollama-manager.js +1 -339
  91. package/dist/services/permissions-wizard.js +1 -291
  92. package/dist/services/personality.js +1 -376
  93. package/dist/services/plugins.js +1 -171
  94. package/dist/services/preflight.js +1 -292
  95. package/dist/services/process-manager.js +1 -291
  96. package/dist/services/release-highlights.js +1 -79
  97. package/dist/services/reminders.js +1 -97
  98. package/dist/services/restart.js +1 -48
  99. package/dist/services/security-audit.js +1 -74
  100. package/dist/services/self-diagnosis.js +1 -272
  101. package/dist/services/self-search.js +1 -129
  102. package/dist/services/session-persistence.js +1 -237
  103. package/dist/services/session.js +1 -282
  104. package/dist/services/skills.js +1 -290
  105. package/dist/services/ssrf-guard.js +1 -162
  106. package/dist/services/standing-orders.js +1 -29
  107. package/dist/services/steer-channel.js +1 -46
  108. package/dist/services/stop-controller.js +1 -52
  109. package/dist/services/subagent-dedup.js +1 -0
  110. package/dist/services/subagent-delivery.js +1 -452
  111. package/dist/services/subagent-stats.js +1 -123
  112. package/dist/services/subagents.js +1 -814
  113. package/dist/services/sudo.js +1 -329
  114. package/dist/services/telegram.js +1 -158
  115. package/dist/services/timing-safe-bearer.js +1 -51
  116. package/dist/services/tool-discovery.js +1 -214
  117. package/dist/services/trends.js +1 -580
  118. package/dist/services/updater.js +1 -291
  119. package/dist/services/usage-tracker.js +1 -144
  120. package/dist/services/users.js +1 -271
  121. package/dist/services/voice.js +1 -104
  122. package/dist/services/watchdog-brake.js +1 -154
  123. package/dist/services/watchdog.js +1 -311
  124. package/dist/services/workspaces.js +1 -276
  125. package/dist/tui/index.js +1 -667
  126. package/dist/util/console-formatter.js +1 -109
  127. package/dist/util/debounce.js +1 -24
  128. package/dist/util/telegram-error-filter.js +1 -62
  129. package/dist/version.js +1 -24
  130. package/dist/web/bind-strategy.js +1 -42
  131. package/dist/web/canvas.js +1 -30
  132. package/dist/web/doctor-api.js +1 -604
  133. package/dist/web/openai-compat.js +1 -252
  134. package/dist/web/server.js +1 -1831
  135. package/dist/web/setup-api.js +1 -1101
  136. package/package.json +5 -2
  137. 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![];}}