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.
- package/CHANGELOG.md +29 -0
- package/README.md +1 -1
- package/dist/claude.js +1 -102
- package/dist/config.js +1 -96
- package/dist/engine.js +1 -90
- package/dist/find-claude-binary.js +1 -98
- package/dist/handlers/async-agent-chunk-handler.js +1 -50
- package/dist/handlers/background-bypass.js +1 -75
- package/dist/handlers/commands.js +1 -2336
- package/dist/handlers/cron-progress.js +1 -52
- package/dist/handlers/document.js +1 -194
- package/dist/handlers/message.js +1 -959
- package/dist/handlers/photo.js +1 -154
- package/dist/handlers/platform-message.js +1 -360
- package/dist/handlers/stuck-timer.js +1 -54
- package/dist/handlers/video.js +1 -237
- package/dist/handlers/voice.js +1 -148
- package/dist/i18n.js +1 -805
- package/dist/index.js +1 -697
- package/dist/init-data-dir.js +1 -98
- package/dist/middleware/auth.js +1 -233
- package/dist/migrate.js +1 -162
- package/dist/paths.js +1 -146
- package/dist/platforms/discord.js +1 -175
- package/dist/platforms/index.js +1 -130
- package/dist/platforms/signal.js +1 -205
- package/dist/platforms/slack-slash-parser.js +1 -32
- package/dist/platforms/slack.js +1 -501
- package/dist/platforms/telegram.js +1 -111
- package/dist/platforms/types.js +1 -8
- package/dist/platforms/whatsapp-auth-helpers.js +1 -53
- package/dist/platforms/whatsapp.js +1 -707
- package/dist/providers/claude-sdk-provider.js +1 -565
- package/dist/providers/codex-cli-provider.js +1 -134
- package/dist/providers/index.js +1 -7
- package/dist/providers/ollama-provider.js +1 -32
- package/dist/providers/openai-compatible.js +1 -406
- package/dist/providers/registry.js +1 -352
- package/dist/providers/runtime-header.js +1 -45
- package/dist/providers/tool-executor.js +1 -475
- package/dist/providers/types.js +1 -227
- package/dist/services/access.js +1 -144
- package/dist/services/allowed-users-gate.js +1 -56
- package/dist/services/alvin-dispatch.js +1 -130
- package/dist/services/alvin-mcp-tools.js +1 -104
- package/dist/services/asset-index.js +1 -224
- package/dist/services/async-agent-parser.js +1 -418
- package/dist/services/async-agent-watcher.js +1 -443
- package/dist/services/auto-diagnostic.js +1 -228
- package/dist/services/broadcast.js +1 -52
- package/dist/services/browser-manager.js +1 -562
- package/dist/services/browser-webfetch.js +1 -127
- package/dist/services/browser.js +1 -121
- package/dist/services/cdp-bootstrap.js +1 -357
- package/dist/services/compaction.js +1 -144
- package/dist/services/critical-notify.js +1 -203
- package/dist/services/cron-resolver.js +1 -58
- package/dist/services/cron-scheduling.js +1 -310
- package/dist/services/cron.js +1 -861
- package/dist/services/custom-tools.js +1 -317
- package/dist/services/delivery-queue.js +1 -173
- package/dist/services/delivery-registry.js +1 -21
- package/dist/services/disk-cleanup.js +1 -203
- package/dist/services/elevenlabs.js +1 -58
- package/dist/services/embeddings/auto-detect.js +1 -74
- package/dist/services/embeddings/fts5.js +1 -108
- package/dist/services/embeddings/gemini.js +1 -65
- package/dist/services/embeddings/index.js +1 -496
- package/dist/services/embeddings/ollama.js +1 -78
- package/dist/services/embeddings/openai.js +1 -49
- package/dist/services/embeddings/provider.js +1 -22
- package/dist/services/embeddings/vector-base.js +1 -113
- package/dist/services/embeddings-migration.js +1 -193
- package/dist/services/embeddings.js +1 -9
- package/dist/services/env-file.js +1 -50
- package/dist/services/exec-guard.js +1 -71
- package/dist/services/fallback-order.js +1 -154
- package/dist/services/file-permissions.js +1 -93
- package/dist/services/heartbeat-file.js +1 -65
- package/dist/services/heartbeat.js +1 -313
- package/dist/services/hooks.js +1 -44
- package/dist/services/imagegen.js +1 -72
- package/dist/services/language-detect.js +1 -154
- package/dist/services/markdown.js +1 -63
- package/dist/services/mcp.js +1 -263
- package/dist/services/memory-extractor.js +1 -178
- package/dist/services/memory-inject-mode.js +1 -43
- package/dist/services/memory-layers.js +1 -156
- package/dist/services/memory.js +1 -146
- package/dist/services/ollama-manager.js +1 -339
- package/dist/services/permissions-wizard.js +1 -291
- package/dist/services/personality.js +1 -376
- package/dist/services/plugins.js +1 -171
- package/dist/services/preflight.js +1 -292
- package/dist/services/process-manager.js +1 -291
- package/dist/services/release-highlights.js +1 -79
- package/dist/services/reminders.js +1 -97
- package/dist/services/restart.js +1 -48
- package/dist/services/security-audit.js +1 -74
- package/dist/services/self-diagnosis.js +1 -272
- package/dist/services/self-search.js +1 -129
- package/dist/services/session-persistence.js +1 -237
- package/dist/services/session.js +1 -282
- package/dist/services/skills.js +1 -290
- package/dist/services/ssrf-guard.js +1 -162
- package/dist/services/standing-orders.js +1 -29
- package/dist/services/steer-channel.js +1 -46
- package/dist/services/stop-controller.js +1 -52
- package/dist/services/subagent-dedup.js +1 -0
- package/dist/services/subagent-delivery.js +1 -452
- package/dist/services/subagent-stats.js +1 -123
- package/dist/services/subagents.js +1 -814
- package/dist/services/sudo.js +1 -329
- package/dist/services/telegram.js +1 -158
- package/dist/services/timing-safe-bearer.js +1 -51
- package/dist/services/tool-discovery.js +1 -214
- package/dist/services/trends.js +1 -580
- package/dist/services/updater.js +1 -291
- package/dist/services/usage-tracker.js +1 -144
- package/dist/services/users.js +1 -271
- package/dist/services/voice.js +1 -104
- package/dist/services/watchdog-brake.js +1 -154
- package/dist/services/watchdog.js +1 -311
- package/dist/services/workspaces.js +1 -276
- package/dist/tui/index.js +1 -667
- package/dist/util/console-formatter.js +1 -109
- package/dist/util/debounce.js +1 -24
- package/dist/util/telegram-error-filter.js +1 -62
- package/dist/version.js +1 -24
- package/dist/web/bind-strategy.js +1 -42
- package/dist/web/canvas.js +1 -30
- package/dist/web/doctor-api.js +1 -604
- package/dist/web/openai-compat.js +1 -252
- package/dist/web/server.js +1 -1831
- package/dist/web/setup-api.js +1 -1101
- package/package.json +5 -2
- 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![];}}
|