From c622785fc1ce1f7cb70fa42bc725db6b727b8b0a Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 17 Feb 2026 22:13:43 +0000 Subject: [PATCH 01/63] Add Bates Core installer (Phases 1-4): Windows setup, Linux bootstrap, dashboard, Telegram MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Complete Step 1 "Bates Core" installer that gets a working AI assistant with dashboard and Telegram in 15 minutes: - Windows Inno Setup script (BatesCore.iss) + PowerShell WSL2 bootstrap (install.ps1) - Linux setup scripts: core-setup.sh, core-configure.sh, core-verify.sh - Shared libraries: common.sh, prerequisites.sh, template-engine.sh - 7 core workspace rules, 2 skills, templatized SOUL.md/TOOLS.md - Config templates: openclaw.json, auth-profiles.json, systemd service, crontab - 8 sanitized core scripts (health-check, watchdog, archive, tmux, etc.) - 2 plugins: cost-tracker + dashboard (glassmorphism UI, 14 panels, agent org chart) - Step 2 enhancement wizard scaffold (bates-enhance.sh) with 5 shared libraries - Build pipeline: sanitize-check.sh (15 forbidden patterns) + build-package.sh - All personal data sanitized — 0 forbidden patterns detected Co-Authored-By: Claude Opus 4.6 --- .gitignore | 40 + bates-core/BatesCore.iss | 181 ++ bates-core/core-configure.sh | 282 +++ bates-core/core-setup.sh | 104 ++ bates-core/core-verify.sh | 110 ++ bates-core/crontab/core-crontab.template | 11 + bates-core/install.ps1 | 267 +++ bates-core/lib/common.sh | 123 ++ bates-core/lib/prerequisites.sh | 105 ++ bates-core/lib/template-engine.sh | 64 + bates-core/plugins/cost-tracker/index.ts | 773 ++++++++ .../plugins/cost-tracker/openclaw.plugin.json | 10 + bates-core/plugins/dashboard/index.ts | 874 ++++++++++ .../plugins/dashboard/openclaw.plugin.json | 10 + bates-core/plugins/dashboard/package.json | 6 + .../dashboard/static/assets/agent-avatar.png | Bin 0 -> 765606 bytes .../static/assets/agent-baby_Dark.png | Bin 0 -> 518084 bytes .../static/assets/agent-baby_Ember.png | Bin 0 -> 479268 bytes .../static/assets/agent-baby_Sage.png | Bin 0 -> 534915 bytes .../static/assets/agent-baby_aqua.png | Bin 0 -> 1662511 bytes .../static/assets/agent-baby_bolt.png | Bin 0 -> 476738 bytes .../static/assets/agent-baby_core.png | Bin 0 -> 518520 bytes .../static/assets/agent-baby_frost.png | Bin 0 -> 522325 bytes .../static/assets/agent-baby_nova.png | Bin 0 -> 1665407 bytes .../static/assets/agent-baby_pixel.png | Bin 0 -> 506229 bytes .../static/assets/agent-baby_sky.png | Bin 0 -> 501507 bytes .../static/assets/app-icon-small.png | Bin 0 -> 108199 bytes .../static/assets/avatar-transparent.png | Bin 0 -> 419926 bytes .../plugins/dashboard/static/assets/bg.jpg | Bin 0 -> 190944 bytes .../plugins/dashboard/static/assets/bg.png | Bin 0 -> 1377044 bytes .../plugins/dashboard/static/assets/bg2.png | Bin 0 -> 1581424 bytes .../dashboard/static/assets/design-ref.png | Bin 0 -> 1709226 bytes .../static/assets/horizontal-logo.png | Bin 0 -> 1030576 bytes .../plugins/dashboard/static/index.html | 209 +++ bates-core/plugins/dashboard/static/js/app.js | 379 ++++ .../plugins/dashboard/static/js/gateway.js | 685 ++++++++ .../dashboard/static/js/panel-agents.js | 230 +++ .../plugins/dashboard/static/js/panel-ceo.js | 91 + .../plugins/dashboard/static/js/panel-chat.js | 421 +++++ .../dashboard/static/js/panel-costs.js | 153 ++ .../dashboard/static/js/panel-crons.js | 144 ++ .../dashboard/static/js/panel-delegations.js | 122 ++ .../dashboard/static/js/panel-files.js | 163 ++ .../dashboard/static/js/panel-integrations.js | 88 + .../dashboard/static/js/panel-memory.js | 177 ++ .../dashboard/static/js/panel-rollout.js | 113 ++ .../dashboard/static/js/panel-settings.js | 43 + .../dashboard/static/js/panel-standup.js | 73 + .../dashboard/static/js/panel-status.js | 93 + .../dashboard/static/js/panel-tasks.js | 130 ++ .../plugins/dashboard/static/styles.css | 1553 +++++++++++++++++ bates-core/scripts-core/archive-sessions.sh | 41 + bates-core/scripts-core/claude-sub.sh | 5 + bates-core/scripts-core/claude-tmux.sh | 57 + bates-core/scripts-core/dashboard-register.sh | 76 + bates-core/scripts-core/health-check.sh | 150 ++ bates-core/scripts-core/model-fallback.sh | 22 + bates-core/scripts-core/run-delegation.sh | 70 + bates-core/scripts-core/watchdog-bates.sh | 78 + bates-core/systemd/clock-sync.service | 6 + bates-core/systemd/clock-sync.timer | 9 + .../systemd/openclaw-gateway.service.template | 19 + .../templates/auth-profiles.json.template | 17 + bates-core/templates/openclaw.json.template | 71 + bates-core/templates/wslconfig.template | 6 + bates-core/workspace-core/AGENTS.md | 14 + bates-core/workspace-core/DATA-HANDLING.md | 33 + bates-core/workspace-core/HEARTBEAT.md | 26 + bates-core/workspace-core/MEMORY.md | 16 + .../workspace-core/PROACTIVE-PLAYBOOK.md | 26 + bates-core/workspace-core/SOUL.md.template | 91 + bates-core/workspace-core/TOOLS.md.template | 27 + .../workspace-core/observations/findings.md | 5 + .../workspace-core/observations/patterns.md | 5 + .../workspace-core/rules/context-hygiene.md | 27 + .../workspace-core/rules/context-safety.md | 25 + .../rules/knowledge-persistence.md | 30 + .../rules/memory-classification.md | 50 + .../workspace-core/rules/model-routing.md | 19 + .../workspace-core/rules/self-service.md | 32 + .../workspace-core/rules/subagent-policy.md | 212 +++ .../skills/coding-agent/SKILL.md | 55 + .../skills/quick-capture/SKILL.md | 46 + bates-enhance/bates-enhance.sh | 124 ++ bates-enhance/lib/api-key-validator.sh | 120 ++ bates-enhance/lib/backup-restore.sh | 99 ++ bates-enhance/lib/common.sh | 123 ++ bates-enhance/lib/config-merge.sh | 142 ++ bates-enhance/lib/cron-unlock.sh | 56 + bates-enhance/lib/integration-state.sh | 133 ++ bates-enhance/lib/template-engine.sh | 64 + build/build-package.sh | 84 + build/sanitize-check.sh | 60 + 93 files changed, 10198 insertions(+) create mode 100644 .gitignore create mode 100644 bates-core/BatesCore.iss create mode 100755 bates-core/core-configure.sh create mode 100755 bates-core/core-setup.sh create mode 100755 bates-core/core-verify.sh create mode 100644 bates-core/crontab/core-crontab.template create mode 100644 bates-core/install.ps1 create mode 100755 bates-core/lib/common.sh create mode 100755 bates-core/lib/prerequisites.sh create mode 100755 bates-core/lib/template-engine.sh create mode 100644 bates-core/plugins/cost-tracker/index.ts create mode 100644 bates-core/plugins/cost-tracker/openclaw.plugin.json create mode 100644 bates-core/plugins/dashboard/index.ts create mode 100644 bates-core/plugins/dashboard/openclaw.plugin.json create mode 100644 bates-core/plugins/dashboard/package.json create mode 100644 bates-core/plugins/dashboard/static/assets/agent-avatar.png create mode 100644 bates-core/plugins/dashboard/static/assets/agent-baby_Dark.png create mode 100644 bates-core/plugins/dashboard/static/assets/agent-baby_Ember.png create mode 100644 bates-core/plugins/dashboard/static/assets/agent-baby_Sage.png create mode 100644 bates-core/plugins/dashboard/static/assets/agent-baby_aqua.png create mode 100644 bates-core/plugins/dashboard/static/assets/agent-baby_bolt.png create mode 100644 bates-core/plugins/dashboard/static/assets/agent-baby_core.png create mode 100644 bates-core/plugins/dashboard/static/assets/agent-baby_frost.png create mode 100644 bates-core/plugins/dashboard/static/assets/agent-baby_nova.png create mode 100644 bates-core/plugins/dashboard/static/assets/agent-baby_pixel.png create mode 100644 bates-core/plugins/dashboard/static/assets/agent-baby_sky.png create mode 100644 bates-core/plugins/dashboard/static/assets/app-icon-small.png create mode 100644 bates-core/plugins/dashboard/static/assets/avatar-transparent.png create mode 100644 bates-core/plugins/dashboard/static/assets/bg.jpg create mode 100644 bates-core/plugins/dashboard/static/assets/bg.png create mode 100644 bates-core/plugins/dashboard/static/assets/bg2.png create mode 100644 bates-core/plugins/dashboard/static/assets/design-ref.png create mode 100644 bates-core/plugins/dashboard/static/assets/horizontal-logo.png create mode 100644 bates-core/plugins/dashboard/static/index.html create mode 100644 bates-core/plugins/dashboard/static/js/app.js create mode 100644 bates-core/plugins/dashboard/static/js/gateway.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-agents.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-ceo.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-chat.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-costs.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-crons.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-delegations.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-files.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-integrations.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-memory.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-rollout.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-settings.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-standup.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-status.js create mode 100644 bates-core/plugins/dashboard/static/js/panel-tasks.js create mode 100644 bates-core/plugins/dashboard/static/styles.css create mode 100755 bates-core/scripts-core/archive-sessions.sh create mode 100755 bates-core/scripts-core/claude-sub.sh create mode 100755 bates-core/scripts-core/claude-tmux.sh create mode 100755 bates-core/scripts-core/dashboard-register.sh create mode 100755 bates-core/scripts-core/health-check.sh create mode 100755 bates-core/scripts-core/model-fallback.sh create mode 100755 bates-core/scripts-core/run-delegation.sh create mode 100755 bates-core/scripts-core/watchdog-bates.sh create mode 100644 bates-core/systemd/clock-sync.service create mode 100644 bates-core/systemd/clock-sync.timer create mode 100644 bates-core/systemd/openclaw-gateway.service.template create mode 100644 bates-core/templates/auth-profiles.json.template create mode 100644 bates-core/templates/openclaw.json.template create mode 100644 bates-core/templates/wslconfig.template create mode 100644 bates-core/workspace-core/AGENTS.md create mode 100644 bates-core/workspace-core/DATA-HANDLING.md create mode 100644 bates-core/workspace-core/HEARTBEAT.md create mode 100644 bates-core/workspace-core/MEMORY.md create mode 100644 bates-core/workspace-core/PROACTIVE-PLAYBOOK.md create mode 100644 bates-core/workspace-core/SOUL.md.template create mode 100644 bates-core/workspace-core/TOOLS.md.template create mode 100644 bates-core/workspace-core/observations/findings.md create mode 100644 bates-core/workspace-core/observations/patterns.md create mode 100644 bates-core/workspace-core/rules/context-hygiene.md create mode 100644 bates-core/workspace-core/rules/context-safety.md create mode 100644 bates-core/workspace-core/rules/knowledge-persistence.md create mode 100644 bates-core/workspace-core/rules/memory-classification.md create mode 100644 bates-core/workspace-core/rules/model-routing.md create mode 100644 bates-core/workspace-core/rules/self-service.md create mode 100644 bates-core/workspace-core/rules/subagent-policy.md create mode 100644 bates-core/workspace-core/skills/coding-agent/SKILL.md create mode 100644 bates-core/workspace-core/skills/quick-capture/SKILL.md create mode 100755 bates-enhance/bates-enhance.sh create mode 100755 bates-enhance/lib/api-key-validator.sh create mode 100755 bates-enhance/lib/backup-restore.sh create mode 100755 bates-enhance/lib/common.sh create mode 100755 bates-enhance/lib/config-merge.sh create mode 100755 bates-enhance/lib/cron-unlock.sh create mode 100755 bates-enhance/lib/integration-state.sh create mode 100755 bates-enhance/lib/template-engine.sh create mode 100755 build/build-package.sh create mode 100755 build/sanitize-check.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5d908ff --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +# Build output +build/output/ +*.exe + +# OS files +.DS_Store +Thumbs.db +desktop.ini + +# Node +node_modules/ +npm-debug.log + +# Plugin data (runtime, not shipped) +bates-core/plugins/*/data/ +bates-core/plugins/*/node_modules/ +bates-enhance/integrations/*/node_modules/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo + +# Secrets (should never be committed) +*.env +.env.* +credentials.json +auth-profiles.json +*.key +*.pem + +# Temporary +*.tmp +*.bak +*.orig + +# Search index data +bates-enhance/integrations/search/search-index/db/ +bates-enhance/integrations/search/search-index/venv/ diff --git a/bates-core/BatesCore.iss b/bates-core/BatesCore.iss new file mode 100644 index 0000000..d7c1158 --- /dev/null +++ b/bates-core/BatesCore.iss @@ -0,0 +1,181 @@ +; BatesCore.iss -- Inno Setup script for Bates AI Assistant +; Compiles to BatesCore-2.0.0.exe +; +; Prerequisites handled by this installer: +; - Windows 10/11 Pro (build 19041+) +; - 8GB RAM minimum +; - 20GB free disk space +; - Internet connectivity +; - Admin rights (for WSL2 enablement) + +#define MyAppName "Bates AI Assistant" +#define MyAppVersion "2.0.0" +#define MyAppPublisher "getBates" +#define MyAppURL "https://github.com/getBates/Bates" + +[Setup] +AppId={{A7E3B4C1-8F9D-4E6A-B2C5-1D0F3E7A9B8C} +AppName={#MyAppName} +AppVersion={#MyAppVersion} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL}/issues +DefaultDirName={localappdata}\BatesInstaller +DefaultGroupName={#MyAppName} +OutputDir=..\build\output +OutputBaseFilename=BatesCore-{#MyAppVersion} +Compression=lzma2/ultra64 +SolidCompression=yes +PrivilegesRequired=admin +AllowNoIcons=yes +DisableProgramGroupPage=yes +LicenseFile=..\LICENSE +; Uncomment when graphics are ready: +; SetupIconFile=assets\bates-icon.ico +; WizardSmallImageFile=assets\installer-logo.bmp +; WizardImageFile=assets\installer-banner.bmp +WizardStyle=modern +ArchitecturesInstallIn64BitMode=x64compatible +MinVersion=10.0.19041 + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +[Files] +; Core setup scripts +Source: "core-setup.sh"; DestDir: "{app}"; Flags: ignoreversion +Source: "core-configure.sh"; DestDir: "{app}"; Flags: ignoreversion +Source: "core-verify.sh"; DestDir: "{app}"; Flags: ignoreversion +Source: "install.ps1"; DestDir: "{app}"; Flags: ignoreversion + +; Libraries +Source: "lib\*"; DestDir: "{app}\lib"; Flags: ignoreversion recursesubdirs + +; Workspace templates +Source: "workspace-core\*"; DestDir: "{app}\workspace-core"; Flags: ignoreversion recursesubdirs + +; Scripts +Source: "scripts-core\*"; DestDir: "{app}\scripts-core"; Flags: ignoreversion + +; Plugins +Source: "plugins\*"; DestDir: "{app}\plugins"; Flags: ignoreversion recursesubdirs + +; Systemd templates +Source: "systemd\*"; DestDir: "{app}\systemd"; Flags: ignoreversion + +; Config templates +Source: "templates\*"; DestDir: "{app}\templates"; Flags: ignoreversion + +; Crontab template +Source: "crontab\*"; DestDir: "{app}\crontab"; Flags: ignoreversion + +; Assets (when available) +; Source: "assets\*"; DestDir: "{app}\assets"; Flags: ignoreversion + +[Run] +; Launch the PowerShell bootstrap after installation +Filename: "powershell.exe"; \ + Parameters: "-ExecutionPolicy Bypass -File ""{app}\install.ps1"" -InstallDir ""{app}"""; \ + StatusMsg: "Setting up Bates AI Assistant..."; \ + Flags: runascurrentuser waituntilterminated + +[UninstallRun] +; Run uninstall script if it exists +Filename: "wsl.exe"; \ + Parameters: "-d Ubuntu-24.04 -- bash -c ""~/.openclaw/scripts/uninstall.sh --auto 2>/dev/null || true"""; \ + Flags: runhidden waituntilterminated + +[UninstallDelete] +Type: filesandordirs; Name: "{app}" + +[Code] +// Pascal Script for prerequisite validation + +function IsWindows10ProOrLater(): Boolean; +var + Version: TWindowsVersion; +begin + GetWindowsVersionEx(Version); + // Windows 10 = 10.0, build 19041+ (version 2004) + Result := (Version.Major >= 10) and (Version.Build >= 19041); +end; + +function GetTotalRAM(): Integer; +var + MemStatus: MEMORYSTATUS; +begin + // Note: GlobalMemoryStatus is 32-bit limited, but good enough for our check + GlobalMemoryStatus(MemStatus); + Result := MemStatus.dwTotalPhys div (1024 * 1024 * 1024); +end; + +function GetFreeDiskSpace(): Integer; +var + FreeBytesAvailable: Int64; + TotalBytes: Int64; + FreeBytes: Int64; +begin + if GetDiskFreeSpaceEx(ExpandConstant('{sd}'), FreeBytesAvailable, TotalBytes, FreeBytes) then + Result := FreeBytesAvailable div (1024 * 1024 * 1024) + else + Result := 0; +end; + +function CheckInternetConnection(): Boolean; +var + WinHttpReq: Variant; +begin + Result := False; + try + WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1'); + WinHttpReq.Open('GET', 'https://github.com', False); + WinHttpReq.SetTimeouts(5000, 5000, 5000, 5000); + WinHttpReq.Send(''); + Result := (WinHttpReq.Status = 200); + except + Result := False; + end; +end; + +function InitializeSetup(): Boolean; +var + RAM: Integer; + Disk: Integer; + ErrorMsg: String; +begin + Result := True; + ErrorMsg := ''; + + // Check Windows version + if not IsWindows10ProOrLater() then + begin + ErrorMsg := ErrorMsg + '- WSL2 requires Windows 10 Pro version 2004 (build 19041) or later.' + #13#10; + end; + + // Check RAM + RAM := GetTotalRAM(); + if RAM < 7 then // Use 7 as threshold (8GB reports as ~7.x) + begin + ErrorMsg := ErrorMsg + '- Bates needs at least 8GB RAM. Detected: ' + IntToStr(RAM) + 'GB.' + #13#10; + end; + + // Check disk space + Disk := GetFreeDiskSpace(); + if Disk < 20 then + begin + ErrorMsg := ErrorMsg + '- At least 20GB free disk space required. Available: ' + IntToStr(Disk) + 'GB.' + #13#10; + end; + + // Check internet + if not CheckInternetConnection() then + begin + ErrorMsg := ErrorMsg + '- Internet connection required for installation.' + #13#10; + end; + + if ErrorMsg <> '' then + begin + MsgBox('Prerequisites not met:' + #13#10 + #13#10 + ErrorMsg + #13#10 + + 'Please fix these issues and try again.', mbError, MB_OK); + Result := False; + end; +end; diff --git a/bates-core/core-configure.sh b/bates-core/core-configure.sh new file mode 100755 index 0000000..0c3b2d3 --- /dev/null +++ b/bates-core/core-configure.sh @@ -0,0 +1,282 @@ +#!/usr/bin/env bash +# core-configure.sh -- Phase 3: AI auth + personalization + Telegram +# Called after core-setup.sh has installed all dependencies. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/lib/common.sh" +source "$SCRIPT_DIR/lib/template-engine.sh" + +export PATH="$HOME/.npm-global/bin:$PATH" + +echo "" +echo "===========================================" +echo " Bates Core -- Configuration" +echo "===========================================" + +# ============================================================ +# AI Provider Selection +# ============================================================ +echo "" +echo "Choose your AI subscription:" +echo " 1) Anthropic (Claude Max) -- Best quality, Opus 4.6" +echo " 2) OpenAI (ChatGPT Pro) -- GPT-4o" +echo " 3) Google (Gemini Advanced) -- Gemini 2.0 Pro" +echo "" +read -rp "Selection [1]: " PROVIDER_CHOICE +PROVIDER_CHOICE="${PROVIDER_CHOICE:-1}" + +case "$PROVIDER_CHOICE" in + 1) + export PROVIDER="anthropic" + export PRIMARY_MODEL="anthropic/claude-opus-4-6" + export PRIMARY_MODEL_SHORT="Opus 4.6" + echo "" + echo "Anthropic subscription auth requires a token from Claude Code." + echo "" + echo "In another terminal, run:" + echo " claude setup-token" + echo "" + echo "Then paste the token here." + echo "" + read -rp "Subscription token: " SUB_TOKEN + if [[ -z "$SUB_TOKEN" ]]; then + fatal "Subscription token is required." + fi + openclaw models auth setup-token --provider anthropic <<< "$SUB_TOKEN" + success "Anthropic subscription configured." + + echo "" + read -rp "Optional: API key as fallback (or Enter to skip): " API_KEY + if [[ -n "$API_KEY" ]]; then + # Store API key in systemd drop-in for gateway + cat > "$HOME/.config/systemd/user/openclaw-gateway.service.d/api-key.conf" << EOF +[Service] +Environment="ANTHROPIC_API_KEY=$API_KEY" +EOF + chmod 600 "$HOME/.config/systemd/user/openclaw-gateway.service.d/api-key.conf" + success "API key fallback configured." + fi + ;; + 2) + export PROVIDER="openai" + export PRIMARY_MODEL="openai/gpt-4o" + export PRIMARY_MODEL_SHORT="GPT-4o" + echo "" + echo "Starting OpenAI auth flow..." + openclaw models auth --provider openai + ;; + 3) + export PROVIDER="google" + export PRIMARY_MODEL="google/gemini-2.0-pro" + export PRIMARY_MODEL_SHORT="Gemini 2.0 Pro" + echo "" + echo "Starting Google auth flow..." + openclaw models auth --provider google + ;; + *) + fatal "Invalid selection: $PROVIDER_CHOICE" + ;; +esac + +# ============================================================ +# Personalization +# ============================================================ +echo "" +echo "--- Personalization ---" +read -rp "Assistant name [Bates]: " ASSISTANT_NAME +export ASSISTANT_NAME="${ASSISTANT_NAME:-Bates}" + +read -rp "Your name: " USER_NAME +if [[ -z "$USER_NAME" ]]; then + fatal "Your name is required." +fi +export USER_NAME + +read -rp "Your timezone [Europe/Lisbon]: " USER_TZ +export USER_TZ="${USER_TZ:-Europe/Lisbon}" + +# ============================================================ +# Telegram Setup +# ============================================================ +echo "" +echo "===========================================" +echo " Telegram Setup (your first messaging channel)" +echo "===========================================" +echo "" +echo "Telegram lets you talk to $ASSISTANT_NAME from your phone, anywhere." +echo "" +echo "Step 1: Create a bot" +echo " Open Telegram and message @BotFather:" +echo " /newbot -> follow the prompts -> copy the bot token" +echo "" +read -rp "Bot token (e.g., 7123456789:AAF...): " TELEGRAM_BOT_TOKEN +if [[ -z "$TELEGRAM_BOT_TOKEN" ]]; then + fatal "Telegram bot token is required." +fi +export TELEGRAM_BOT_TOKEN + +echo "" +echo "Step 2: Your Telegram user ID" +echo " Message @userinfobot in Telegram to get your numeric ID." +echo "" +read -rp "Your Telegram user ID (numeric): " TELEGRAM_USER_ID +if [[ -z "$TELEGRAM_USER_ID" ]]; then + fatal "Telegram user ID is required." +fi +export TELEGRAM_USER_ID + +# ============================================================ +# Generate Configuration +# ============================================================ +step "Generating configuration..." + +# Render openclaw.json +template_render "$SCRIPT_DIR/templates/openclaw.json.template" \ + "$HOME/.openclaw/openclaw.json" +chmod 600 "$HOME/.openclaw/openclaw.json" +success "openclaw.json generated" + +# Render auth profiles +mkdir -p "$HOME/.openclaw/agents/main/agent" +template_render "$SCRIPT_DIR/templates/auth-profiles.json.template" \ + "$HOME/.openclaw/agents/main/agent/auth-profiles.json" +chmod 600 "$HOME/.openclaw/agents/main/agent/auth-profiles.json" +success "Auth profiles generated" + +# ============================================================ +# Deploy Workspace +# ============================================================ +step "Deploying workspace..." + +# Render template files +for f in "$SCRIPT_DIR"/workspace-core/*.template; do + [[ -f "$f" ]] || continue + basename_full="$(basename "$f")" + basename_no_ext="${basename_full%.template}" + target="$HOME/.openclaw/workspace/$basename_no_ext" + template_render "$f" "$target" + echo " Rendered: $basename_no_ext" +done + +# Copy non-template files +for f in "$SCRIPT_DIR"/workspace-core/*.md; do + [[ -f "$f" ]] || continue + basename_full="$(basename "$f")" + # Skip if a .template version exists (already rendered above) + if [[ -f "$SCRIPT_DIR/workspace-core/${basename_full}.template" ]]; then + continue + fi + cp "$f" "$HOME/.openclaw/workspace/$basename_full" + echo " Copied: $basename_full" +done + +# Copy rules +if [[ -d "$SCRIPT_DIR/workspace-core/rules" ]]; then + cp "$SCRIPT_DIR"/workspace-core/rules/*.md "$HOME/.openclaw/workspace/rules/" 2>/dev/null || true + echo " Copied: rules/" +fi + +# Copy skills +if [[ -d "$SCRIPT_DIR/workspace-core/skills" ]]; then + cp -r "$SCRIPT_DIR"/workspace-core/skills/* "$HOME/.openclaw/workspace/skills/" 2>/dev/null || true + echo " Copied: skills/" +fi + +# Copy observations +if [[ -d "$SCRIPT_DIR/workspace-core/observations" ]]; then + cp "$SCRIPT_DIR"/workspace-core/observations/*.md "$HOME/.openclaw/workspace/observations/" 2>/dev/null || true + echo " Copied: observations/" +fi + +success "Workspace deployed" + +# ============================================================ +# Deploy Scripts +# ============================================================ +step "Installing scripts..." +cp "$SCRIPT_DIR"/scripts-core/*.sh "$HOME/.openclaw/scripts/" 2>/dev/null || true +chmod +x "$HOME/.openclaw/scripts/"*.sh 2>/dev/null || true +success "Scripts installed" + +# ============================================================ +# Deploy Plugins +# ============================================================ +step "Installing plugins..." + +# Cost tracker +if [[ -d "$SCRIPT_DIR/plugins/cost-tracker" ]]; then + mkdir -p "$HOME/.openclaw/extensions/cost-tracker" + cp -r "$SCRIPT_DIR/plugins/cost-tracker/"* "$HOME/.openclaw/extensions/cost-tracker/" + success "Cost tracker plugin installed" +fi + +# Dashboard +if [[ -d "$SCRIPT_DIR/plugins/dashboard" ]]; then + mkdir -p "$HOME/.openclaw/extensions/dashboard" + cp -r "$SCRIPT_DIR/plugins/dashboard/"* "$HOME/.openclaw/extensions/dashboard/" + # Install dashboard dependencies if package.json exists + if [[ -f "$HOME/.openclaw/extensions/dashboard/package.json" ]]; then + (cd "$HOME/.openclaw/extensions/dashboard" && npm install --production 2>/dev/null) || true + fi + success "Dashboard plugin installed" +fi + +# ============================================================ +# Core Cron Jobs (via OpenClaw) +# ============================================================ +step "Setting up cron jobs..." + +openclaw cron add --name "health-log" \ + --schedule "0 */6 * * *" --tz "$USER_TZ" \ + --message "Run health check: check gateway status, disk space, memory. Save to observations/health.json." \ + 2>/dev/null || warn "health-log cron already exists" + +openclaw cron add --name "context-watchdog" \ + --schedule "0 * * * *" --tz "$USER_TZ" \ + --message "Check context token usage. If approaching limit, trigger compaction." \ + 2>/dev/null || warn "context-watchdog cron already exists" + +openclaw cron add --name "proactive-checkin" \ + --schedule "0 2,9,12,16,20 * * *" --tz "$USER_TZ" \ + --message "Proactive check-in. Review available local data. Score changes. Only message if actionable." \ + 2>/dev/null || warn "proactive-checkin cron already exists" + +success "3 core cron jobs configured" + +# ============================================================ +# System Crontab +# ============================================================ +step "Installing system crontab..." + +CRONTAB_CONTENT="$(cat <> /tmp/watchdog-bates.log 2>&1 +*/30 * * * * $HOME/.openclaw/scripts/archive-sessions.sh >> /tmp/archive-sessions.log 2>&1 +0 2 * * * rm -f $HOME/.openclaw/sessions.json && systemctl --user restart openclaw-gateway >> /tmp/session-cleanup.log 2>&1 +EOF +)" + +# Merge with existing crontab (don't overwrite user entries) +(crontab -l 2>/dev/null | grep -v 'watchdog-bates\|archive-sessions\|session-cleanup'; echo "$CRONTAB_CONTENT") | crontab - +success "System crontab installed" + +# ============================================================ +# File Permissions +# ============================================================ +step "Securing configuration..." +chmod 600 "$HOME/.openclaw/openclaw.json" +chmod 600 "$HOME/.openclaw/agents/main/agent/auth-profiles.json" 2>/dev/null || true +chmod -R 700 "$HOME/.config/systemd/user/openclaw-gateway.service.d/" 2>/dev/null || true +success "Permissions set" + +# ============================================================ +# OpenClaw Onboard +# ============================================================ +step "Running OpenClaw onboard..." +openclaw onboard --install-daemon 2>/dev/null || warn "Onboard may have already run" + +echo "" +success "Configuration complete!" +echo "" +echo "Next: Run core-verify.sh to start the gateway and verify everything works." diff --git a/bates-core/core-setup.sh b/bates-core/core-setup.sh new file mode 100755 index 0000000..710e102 --- /dev/null +++ b/bates-core/core-setup.sh @@ -0,0 +1,104 @@ +#!/usr/bin/env bash +# core-setup.sh -- Phase 2: Linux environment setup +# Called by install.ps1 after WSL2 + Ubuntu are ready. +# Installs all system dependencies and prepares the environment. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/lib/common.sh" +source "$SCRIPT_DIR/lib/prerequisites.sh" + +echo "" +echo "===========================================" +echo " Bates Core -- Linux Environment Setup" +echo "===========================================" +echo "" + +# --- Prerequisite Checks --- +run_all_checks + +# --- System Packages --- +step "Updating system packages..." +sudo apt-get update -qq +sudo apt-get install -y -qq \ + build-essential curl git jq ntpdate poppler-utils \ + python3 python3-pip python3-venv + +# --- Node.js 22 --- +step "Installing Node.js 22..." +if command -v node &>/dev/null && [[ "$(node -v)" == v22.* ]]; then + success "Node.js $(node -v) already installed" +else + curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - + sudo apt-get install -y -qq nodejs + success "Node.js $(node -v) installed" +fi + +# --- npm global prefix --- +step "Configuring npm global prefix..." +mkdir -p "$HOME/.npm-global" +npm config set prefix "$HOME/.npm-global" +if ! grep -q '.npm-global/bin' "$HOME/.bashrc" 2>/dev/null; then + echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> "$HOME/.bashrc" +fi +export PATH="$HOME/.npm-global/bin:$PATH" + +# --- OpenClaw --- +step "Installing OpenClaw..." +if command -v openclaw &>/dev/null; then + success "OpenClaw already installed ($(openclaw --version 2>/dev/null || echo 'unknown version'))" +else + npm install -g openclaw + success "OpenClaw installed" +fi + +# --- mcporter --- +step "Installing mcporter..." +if command -v mcporter &>/dev/null; then + success "mcporter already installed" +else + npm install -g mcporter + success "mcporter installed" +fi + +# --- systemd linger --- +step "Enabling systemd linger..." +if loginctl show-user "$(whoami)" 2>/dev/null | grep -q "Linger=yes"; then + success "Linger already enabled" +else + sudo loginctl enable-linger "$(whoami)" + success "Linger enabled" +fi + +# --- Directory structure --- +step "Creating directory structure..." +mkdir -p "$HOME/.openclaw"/{workspace/{rules,refs,skills,observations},scripts,extensions,cron,agents/main/{sessions,archive},enhance} +mkdir -p "$HOME/.config/systemd/user" + +# --- Clock sync timer --- +step "Installing clock-sync timer..." +cp "$SCRIPT_DIR/systemd/clock-sync.service" "$HOME/.config/systemd/user/" +cp "$SCRIPT_DIR/systemd/clock-sync.timer" "$HOME/.config/systemd/user/" +systemctl --user daemon-reload +systemctl --user enable clock-sync.timer 2>/dev/null || true + +# --- Gateway service --- +step "Installing gateway service..." +cp "$SCRIPT_DIR/systemd/openclaw-gateway.service.template" \ + "$HOME/.config/systemd/user/openclaw-gateway.service" +# Replace %h with actual home dir (systemd user units support %h, but template needs it) +sed -i "s|%h|$HOME|g" "$HOME/.config/systemd/user/openclaw-gateway.service" + +# NODE_PATH drop-in for npm-global plugin resolution +mkdir -p "$HOME/.config/systemd/user/openclaw-gateway.service.d" +cat > "$HOME/.config/systemd/user/openclaw-gateway.service.d/node-path.conf" << EOF +[Service] +Environment="NODE_PATH=$HOME/.npm-global/lib/node_modules" +EOF + +systemctl --user daemon-reload + +echo "" +success "Linux environment setup complete." +echo "" +echo "Next: Run core-configure.sh to set up AI auth and personalization." diff --git a/bates-core/core-verify.sh b/bates-core/core-verify.sh new file mode 100755 index 0000000..4f2ccc3 --- /dev/null +++ b/bates-core/core-verify.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +# core-verify.sh -- Phase 4: Health check + open dashboard +# Called after core-configure.sh to verify everything works. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/lib/common.sh" + +export PATH="$HOME/.npm-global/bin:$PATH" + +echo "" +echo "===========================================" +echo " Bates Core -- Verification" +echo "===========================================" +echo "" + +PASS=0 +FAIL=0 + +check() { + local name="$1" + shift + if "$@" &>/dev/null 2>&1; then + echo -e " ${GREEN}[PASS]${NC} $name" + ((PASS++)) + else + echo -e " ${RED}[FAIL]${NC} $name" + ((FAIL++)) + fi +} + +# --- Start Gateway --- +step "Starting gateway service..." +systemctl --user daemon-reload +systemctl --user enable --now openclaw-gateway 2>/dev/null || true + +echo "Waiting for gateway to start..." +sleep 8 + +# --- Run Checks --- +step "Running verification checks..." +echo "" + +check "Gateway service running" systemctl --user is-active openclaw-gateway +check "Dashboard accessible" curl -sf --max-time 5 http://localhost:18789/dashboard +check "Cost tracker API" curl -sf --max-time 5 http://localhost:18789/cost-tracker/api/today +check "Cron jobs configured" bash -c "openclaw cron list 2>/dev/null | grep -q health-log" +check "Scripts installed" test -x "$HOME/.openclaw/scripts/watchdog-bates.sh" +check "Workspace deployed" test -f "$HOME/.openclaw/workspace/SOUL.md" + +# Check Telegram channel +check "Telegram channel configured" bash -c "python3 -c \"import json; c=json.load(open('$HOME/.openclaw/openclaw.json')); assert c['channels']['telegram']['enabled']\"" + +echo "" +echo "===========================================" +echo " Results: $PASS passed, $FAIL failed" +echo "===========================================" +echo "" + +if [[ $FAIL -eq 0 ]]; then + echo "All checks passed! Your assistant is ready." + echo "" + echo "Dashboard: http://localhost:18789/dashboard" + echo "" + + # Read assistant name from config + ASSISTANT_NAME=$(python3 -c " +import json +c = json.load(open('$HOME/.openclaw/openclaw.json')) +name = c.get('agents', {}).get('definitions', {}).get('main', {}).get('name', 'Bates') +print(name.split(' (')[0]) +" 2>/dev/null || echo "Bates") + + echo "$ASSISTANT_NAME is now running and ready to chat!" + echo "" + echo "Talk to $ASSISTANT_NAME:" + echo " - Web dashboard: http://localhost:18789/dashboard" + echo " - Telegram: open the bot you created and send a message" + echo "" + echo "To add more integrations later:" + echo " bates-enhance.sh" + echo "" + + # Activate Telegram pairing + echo "===========================================" + echo " Telegram Activation" + echo "===========================================" + echo "" + echo "Open your Telegram bot and send any message to start the pairing." + echo "The gateway will prompt you to approve the pairing." + echo "" + echo "Check gateway logs for pairing status:" + echo " journalctl --user -u openclaw-gateway -n 20 --no-pager" + echo "" + + # Try to open browser on Windows + cmd.exe /c start http://localhost:18789/dashboard 2>/dev/null || true +else + echo "Some checks failed. Review the errors above." + echo "" + echo "Troubleshooting:" + echo " Gateway logs: journalctl --user -u openclaw-gateway -n 30 --no-pager" + echo " Service status: systemctl --user status openclaw-gateway" + echo " Config file: cat ~/.openclaw/openclaw.json" + echo "" + echo "Common issues:" + echo " - Gateway not starting: check Node.js version (need v22+)" + echo " - Dashboard not accessible: check port 18789 is not in use" + echo " - Auth failure: re-run 'claude setup-token' and update via openclaw models auth" +fi diff --git a/bates-core/crontab/core-crontab.template b/bates-core/crontab/core-crontab.template new file mode 100644 index 0000000..1d4cdae --- /dev/null +++ b/bates-core/crontab/core-crontab.template @@ -0,0 +1,11 @@ +# Bates Core system cron +# Installed by core-configure.sh + +# Process watchdog: restart gateway if it dies +*/2 * * * * {{HOME}}/.openclaw/scripts/watchdog-bates.sh >> /tmp/watchdog-bates.log 2>&1 + +# Session archival: move old .jsonl files to archive/ +*/30 * * * * {{HOME}}/.openclaw/scripts/archive-sessions.sh >> /tmp/archive-sessions.log 2>&1 + +# Daily session cleanup: clear stale session state at 2 AM +0 2 * * * rm -f {{HOME}}/.openclaw/sessions.json && systemctl --user restart openclaw-gateway >> /tmp/session-cleanup.log 2>&1 diff --git a/bates-core/install.ps1 b/bates-core/install.ps1 new file mode 100644 index 0000000..20b8414 --- /dev/null +++ b/bates-core/install.ps1 @@ -0,0 +1,267 @@ +# install.ps1 -- Phase 1: Windows Bootstrap for Bates AI Assistant +# Run by Inno Setup after prerequisite checks pass, or standalone. +# +# This script: +# 1. Enables WSL2 if not already enabled +# 2. Installs Ubuntu 24.04 +# 3. Configures .wslconfig +# 4. Creates a Windows Scheduled Task for WSL2 auto-start +# 5. Handles reboot if needed (auto-resume via Scheduled Task) +# 6. Launches core-setup.sh inside WSL2 + +param( + [string]$InstallDir = "$env:LOCALAPPDATA\BatesInstaller" +) + +$ErrorActionPreference = "Stop" + +function Write-Step($msg) { + Write-Host "" + Write-Host "==> $msg" -ForegroundColor Cyan +} + +function Write-Success($msg) { + Write-Host "[OK] $msg" -ForegroundColor Green +} + +function Write-Warn($msg) { + Write-Host "[WARN] $msg" -ForegroundColor Yellow +} + +function Write-Fail($msg) { + Write-Host "[ERROR] $msg" -ForegroundColor Red +} + +# ============================================================ +# Banner +# ============================================================ +Write-Host "" +Write-Host "==========================================" -ForegroundColor Cyan +Write-Host " Bates AI Assistant -- Windows Setup" -ForegroundColor Cyan +Write-Host "==========================================" -ForegroundColor Cyan +Write-Host "" + +# ============================================================ +# Check if resuming after reboot +# ============================================================ +$resumeMarker = Join-Path $InstallDir ".resume-after-reboot" +if (Test-Path $resumeMarker) { + Write-Step "Resuming after reboot..." + Remove-Item $resumeMarker -Force + + # Remove the resume scheduled task + Unregister-ScheduledTask -TaskName "BatesInstallResume" -Confirm:$false -ErrorAction SilentlyContinue + + # Jump straight to WSL2 setup + goto_wsl_setup + exit 0 +} + +# ============================================================ +# Step 1: Check and Enable WSL2 +# ============================================================ +Write-Step "Checking WSL2..." + +$needsReboot = $false + +# Check WSL feature +$wslFeature = Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -ErrorAction SilentlyContinue +if ($null -eq $wslFeature -or $wslFeature.State -ne "Enabled") { + Write-Step "Enabling Windows Subsystem for Linux..." + dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart | Out-Null + $needsReboot = $true +} + +# Check Virtual Machine Platform +$vmFeature = Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -ErrorAction SilentlyContinue +if ($null -eq $vmFeature -or $vmFeature.State -ne "Enabled") { + Write-Step "Enabling Virtual Machine Platform..." + dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart | Out-Null + $needsReboot = $true +} + +# Set WSL2 as default version +try { + wsl --set-default-version 2 2>$null | Out-Null +} catch { + # May fail if WSL not fully installed yet (needs reboot) +} + +Write-Success "WSL2 features enabled" + +# ============================================================ +# Step 2: Handle Reboot if Needed +# ============================================================ +if ($needsReboot) { + Write-Step "WSL2 requires a system reboot to complete installation." + Write-Host "" + Write-Host "After reboot, the installer will resume automatically." -ForegroundColor Yellow + Write-Host "" + + # Create resume marker + New-Item -Path $resumeMarker -ItemType File -Force | Out-Null + + # Create scheduled task to resume after reboot + $action = New-ScheduledTaskAction -Execute "powershell.exe" ` + -Argument "-ExecutionPolicy Bypass -File `"$InstallDir\install.ps1`" -InstallDir `"$InstallDir`"" + $trigger = New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME + $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries + $principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -RunLevel Highest + Register-ScheduledTask -TaskName "BatesInstallResume" ` + -Action $action -Trigger $trigger -Settings $settings -Principal $principal -Force | Out-Null + + Write-Success "Resume task created" + + $answer = Read-Host "Reboot now? (y/n)" + if ($answer -match "^[Yy]") { + Restart-Computer -Force + } else { + Write-Host "" + Write-Host "Please reboot manually, then the installer will resume." -ForegroundColor Yellow + exit 0 + } +} + +# ============================================================ +# Step 3: Install Ubuntu 24.04 +# ============================================================ +function goto_wsl_setup { + Write-Step "Checking Ubuntu 24.04..." + + # Check if Ubuntu-24.04 is already installed + $distros = wsl --list --quiet 2>$null + if ($distros -match "Ubuntu-24.04") { + Write-Success "Ubuntu 24.04 already installed" + } else { + Write-Step "Installing Ubuntu 24.04 (this may take a few minutes)..." + wsl --install -d Ubuntu-24.04 --no-launch 2>$null + + if ($LASTEXITCODE -ne 0) { + # Try alternative method + wsl --install Ubuntu-24.04 2>$null + } + + Write-Success "Ubuntu 24.04 installed" + } + + # Set as default distribution + wsl --set-default Ubuntu-24.04 2>$null + + # ============================================================ + # Step 4: Configure .wslconfig + # ============================================================ + Write-Step "Configuring WSL2..." + + $wslConfigPath = Join-Path $env:USERPROFILE ".wslconfig" + $wslConfigSource = Join-Path $InstallDir "templates\wslconfig.template" + + if (Test-Path $wslConfigSource) { + Copy-Item $wslConfigSource $wslConfigPath -Force + } else { + # Fallback: write config directly + @" +[wsl2] +memory=12GB +vmIdleTimeout=-1 + +[boot] +systemd=true +"@ | Set-Content $wslConfigPath + } + Write-Success ".wslconfig configured" + + # Restart WSL to apply config + wsl --shutdown 2>$null + Start-Sleep -Seconds 3 + + # ============================================================ + # Step 5: Create WSL2 Auto-Start Scheduled Task + # ============================================================ + Write-Step "Setting up WSL2 auto-start..." + + $wslAction = New-ScheduledTaskAction -Execute "wsl.exe" ` + -Argument "-d Ubuntu-24.04 -- bash -c 'sleep 5'" + $wslTrigger = New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME + $wslSettings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries + Register-ScheduledTask -TaskName "BatesWSLAutoStart" ` + -Action $wslAction -Trigger $wslTrigger -Settings $wslSettings -Force | Out-Null + + Write-Success "WSL2 auto-start configured" + + # ============================================================ + # Step 6: Copy installer files into WSL2 + # ============================================================ + Write-Step "Copying installer files to WSL2..." + + # Convert Windows path to WSL path + $wslInstallDir = "/mnt/" + $InstallDir.Replace("\", "/").Replace(":", "").ToLower() + # Alternative: copy to a known location in WSL + $wslTargetDir = "/tmp/bates-installer" + + # Create target directory and copy files + wsl -d Ubuntu-24.04 -- bash -c "rm -rf $wslTargetDir && mkdir -p $wslTargetDir" + wsl -d Ubuntu-24.04 -- bash -c "cp -r '$wslInstallDir/'* '$wslTargetDir/' 2>/dev/null || true" + + # Make scripts executable + wsl -d Ubuntu-24.04 -- bash -c "chmod +x '$wslTargetDir/'*.sh '$wslTargetDir/scripts-core/'*.sh 2>/dev/null || true" + + Write-Success "Files copied to WSL2" + + # ============================================================ + # Step 7: Run Linux Setup + # ============================================================ + Write-Step "Starting Linux environment setup..." + Write-Host "" + Write-Host "This will install Node.js, OpenClaw, and system packages inside WSL2." -ForegroundColor Yellow + Write-Host "You may be prompted for your WSL2 user password (sudo)." -ForegroundColor Yellow + Write-Host "" + + # Run core-setup.sh + wsl -d Ubuntu-24.04 -- bash "$wslTargetDir/core-setup.sh" + + if ($LASTEXITCODE -eq 0) { + Write-Success "Linux setup complete" + + # ============================================================ + # Step 8: Run Configuration (interactive) + # ============================================================ + Write-Step "Starting AI configuration..." + Write-Host "" + + wsl -d Ubuntu-24.04 -- bash "$wslTargetDir/core-configure.sh" + + if ($LASTEXITCODE -eq 0) { + Write-Success "Configuration complete" + + # ============================================================ + # Step 9: Verify Installation + # ============================================================ + wsl -d Ubuntu-24.04 -- bash "$wslTargetDir/core-verify.sh" + } else { + Write-Fail "Configuration failed. Check the output above." + Write-Host "You can retry: wsl -d Ubuntu-24.04 -- bash $wslTargetDir/core-configure.sh" + } + } else { + Write-Fail "Linux setup failed. Check the output above." + Write-Host "You can retry: wsl -d Ubuntu-24.04 -- bash $wslTargetDir/core-setup.sh" + } +} + +# Call the setup function (when not resuming) +goto_wsl_setup + +# ============================================================ +# Final Message +# ============================================================ +Write-Host "" +Write-Host "==========================================" -ForegroundColor Green +Write-Host " Installation Complete!" -ForegroundColor Green +Write-Host "==========================================" -ForegroundColor Green +Write-Host "" +Write-Host "Your AI assistant is running at: http://localhost:18789/dashboard" +Write-Host "" +Write-Host "To add more integrations later, run in WSL2:" +Write-Host " bates-enhance.sh" +Write-Host "" +Write-Host "Press any key to exit..." +$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") diff --git a/bates-core/lib/common.sh b/bates-core/lib/common.sh new file mode 100755 index 0000000..41d73ca --- /dev/null +++ b/bates-core/lib/common.sh @@ -0,0 +1,123 @@ +#!/usr/bin/env bash +# common.sh -- Shared functions for Bates installer scripts +# Provides logging, colors, prompts, and step tracking + +set -euo pipefail + +# Colors (only if terminal supports them) +if [[ -t 1 ]]; then + RED='\033[0;31m' + GREEN='\033[0;32m' + YELLOW='\033[1;33m' + CYAN='\033[0;36m' + BOLD='\033[1m' + NC='\033[0m' +else + RED='' GREEN='' YELLOW='' CYAN='' BOLD='' NC='' +fi + +# Step counter +_STEP_NUM=0 + +step() { + ((_STEP_NUM++)) || true + echo -e "\n${CYAN}==> Step ${_STEP_NUM}: $1${NC}" +} + +info() { + echo -e "${CYAN}[INFO]${NC} $1" +} + +success() { + echo -e "${GREEN}[OK]${NC} $1" +} + +warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +error() { + echo -e "${RED}[ERROR]${NC} $1" >&2 +} + +fatal() { + error "$1" + exit 1 +} + +# Prompt with default value +prompt_default() { + local prompt="$1" + local default="$2" + local varname="$3" + local input + + if [[ -n "$default" ]]; then + read -rp "$prompt [$default]: " input + eval "$varname=\"${input:-$default}\"" + else + read -rp "$prompt: " input + eval "$varname=\"$input\"" + fi +} + +# Yes/No prompt (returns 0 for yes, 1 for no) +confirm() { + local prompt="${1:-Continue?}" + local reply + read -rp "$prompt (y/n): " reply + [[ "$reply" =~ ^[Yy] ]] +} + +# Check if a command exists +require_cmd() { + local cmd="$1" + local msg="${2:-$cmd is required but not installed}" + if ! command -v "$cmd" &>/dev/null; then + fatal "$msg" + fi +} + +# Spinner for long-running commands +spinner() { + local pid=$1 + local msg="${2:-Working...}" + local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏' + local i=0 + while kill -0 "$pid" 2>/dev/null; do + printf "\r${CYAN}%s${NC} %s" "${spin:i++%${#spin}:1}" "$msg" + sleep 0.1 + done + printf "\r" +} + +# Run a command with spinner +run_with_spinner() { + local msg="$1" + shift + "$@" &>/dev/null & + local pid=$! + spinner "$pid" "$msg" + wait "$pid" + local rc=$? + if [[ $rc -eq 0 ]]; then + success "$msg" + else + error "$msg (exit code $rc)" + return $rc + fi +} + +# Get the install directory (where bates-core/ scripts live) +get_install_dir() { + local script_dir + script_dir="$(cd "$(dirname "${BASH_SOURCE[1]:-${BASH_SOURCE[0]}}")" && pwd)" + # If called from lib/, go up one level + if [[ "$(basename "$script_dir")" == "lib" ]]; then + echo "$(dirname "$script_dir")" + else + echo "$script_dir" + fi +} + +INSTALL_DIR="$(get_install_dir)" diff --git a/bates-core/lib/prerequisites.sh b/bates-core/lib/prerequisites.sh new file mode 100755 index 0000000..d7e4299 --- /dev/null +++ b/bates-core/lib/prerequisites.sh @@ -0,0 +1,105 @@ +#!/usr/bin/env bash +# prerequisites.sh -- System prerequisite checks for Bates Core +# Called from core-setup.sh to verify the environment is suitable + +source "$(dirname "${BASH_SOURCE[0]}")/common.sh" + +check_wsl2() { + if [[ -f /proc/version ]] && grep -qi microsoft /proc/version; then + success "Running inside WSL2" + return 0 + else + error "Not running inside WSL2" + return 1 + fi +} + +check_ubuntu() { + if [[ -f /etc/os-release ]]; then + local version + version=$(grep VERSION_ID /etc/os-release | cut -d'"' -f2) + if [[ "$version" == "24.04" ]]; then + success "Ubuntu 24.04 detected" + return 0 + else + warn "Ubuntu $version detected (24.04 recommended)" + return 0 + fi + else + error "Cannot determine Linux distribution" + return 1 + fi +} + +check_ram() { + local min_gb="${1:-8}" + local total_kb + total_kb=$(grep MemTotal /proc/meminfo | awk '{print $2}') + local total_gb=$(( total_kb / 1048576 )) + + if [[ $total_gb -ge $min_gb ]]; then + success "RAM: ${total_gb}GB (minimum ${min_gb}GB)" + return 0 + else + error "Insufficient RAM: ${total_gb}GB (minimum ${min_gb}GB)" + return 1 + fi +} + +check_disk() { + local min_gb="${1:-20}" + local avail_kb + avail_kb=$(df -k "$HOME" | tail -1 | awk '{print $4}') + local avail_gb=$(( avail_kb / 1048576 )) + + if [[ $avail_gb -ge $min_gb ]]; then + success "Disk space: ${avail_gb}GB free (minimum ${min_gb}GB)" + return 0 + else + error "Insufficient disk space: ${avail_gb}GB (minimum ${min_gb}GB)" + return 1 + fi +} + +check_internet() { + if curl -sf --max-time 10 https://github.com &>/dev/null; then + success "Internet connection OK" + return 0 + else + error "No internet connection (cannot reach github.com)" + return 1 + fi +} + +check_systemd() { + if systemctl --user status &>/dev/null 2>&1; then + success "systemd user session available" + return 0 + else + error "systemd user session not available" + echo " This may require WSL2 with systemd enabled." + echo " Add [boot] systemd=true to /etc/wsl.conf and restart WSL2." + return 1 + fi +} + +# Run all prerequisite checks, fail if any critical check fails +run_all_checks() { + local failures=0 + + info "Checking prerequisites..." + echo "" + + check_wsl2 || ((failures++)) + check_ubuntu || true # non-critical + check_ram 8 || ((failures++)) + check_disk 20 || ((failures++)) + check_internet || ((failures++)) + check_systemd || ((failures++)) + + echo "" + if [[ $failures -gt 0 ]]; then + fatal "$failures prerequisite check(s) failed. Fix the issues above and try again." + fi + success "All prerequisite checks passed." +} diff --git a/bates-core/lib/template-engine.sh b/bates-core/lib/template-engine.sh new file mode 100755 index 0000000..9f74275 --- /dev/null +++ b/bates-core/lib/template-engine.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +# template-engine.sh -- Replace {{PLACEHOLDER}} variables in template files +# +# Usage: +# source lib/template-engine.sh +# export ASSISTANT_NAME="Bates" USER_NAME="Robert" +# template_render "input.template" "output.conf" +# +# Placeholders use the format {{VAR_NAME}} where VAR_NAME matches +# an exported environment variable. Unset variables are left as-is. + +template_render() { + local template="$1" + local output="$2" + + if [[ ! -f "$template" ]]; then + echo "ERROR: Template not found: $template" >&2 + return 1 + fi + + cp "$template" "$output" + + # Find all {{VAR}} placeholders in the output file + local vars + vars=$(grep -oP '\{\{[A-Z_][A-Z0-9_]*\}\}' "$output" 2>/dev/null | sort -u) || true + + for var_with_braces in $vars; do + # Strip {{ and }} + local var_name="${var_with_braces#\{\{}" + var_name="${var_name%\}\}}" + + # Get the value from the environment + local var_value="${!var_name:-}" + + if [[ -n "$var_value" ]]; then + # Escape special sed characters in the value + local escaped_value + escaped_value=$(printf '%s' "$var_value" | sed 's/[&/\]/\\&/g') + sed -i "s|{{${var_name}}}|${escaped_value}|g" "$output" + fi + done +} + +# Render a template string (stdin) to stdout +template_render_string() { + local content + content=$(cat) + + local vars + vars=$(echo "$content" | grep -oP '\{\{[A-Z_][A-Z0-9_]*\}\}' 2>/dev/null | sort -u) || true + + for var_with_braces in $vars; do + local var_name="${var_with_braces#\{\{}" + var_name="${var_name%\}\}}" + local var_value="${!var_name:-}" + if [[ -n "$var_value" ]]; then + local escaped_value + escaped_value=$(printf '%s' "$var_value" | sed 's/[&/\]/\\&/g') + content=$(echo "$content" | sed "s|{{${var_name}}}|${escaped_value}|g") + fi + done + + echo "$content" +} diff --git a/bates-core/plugins/cost-tracker/index.ts b/bates-core/plugins/cost-tracker/index.ts new file mode 100644 index 0000000..cd6b7af --- /dev/null +++ b/bates-core/plugins/cost-tracker/index.ts @@ -0,0 +1,773 @@ +import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, statSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; +import { homedir } from "os"; +import { + emptyPluginConfigSchema, + onDiagnosticEvent, +} from "openclaw/plugin-sdk"; +import type { + OpenClawPluginApi, + DiagnosticUsageEvent, + DiagnosticEventPayload, +} from "openclaw/plugin-sdk"; + +// --------------------------------------------------------------------------- +// globalThis bridge for diagnostic events (future-proofing) +// --------------------------------------------------------------------------- +// BUG: onDiagnosticEvent from "openclaw/plugin-sdk" registers on a separate +// `listeners` Set (in dist/plugin-sdk/index.js) from where the gateway emits +// events (dist/extensionAPI.js has its own `listeners$3`). Both are inlined +// copies of src/infra/diagnostic-events.ts with no shared state. Plugins +// loaded via jiti therefore never receive model.usage events. +// +// WORKAROUND: We scan session transcript JSONL files to extract usage data. +// The globalThis bridge is registered for forward-compat if the gateway +// core adds dispatch to globalThis.__openclawDiagnosticListeners. +declare global { + // eslint-disable-next-line no-var + var __openclawDiagnosticListeners: Set<(evt: DiagnosticEventPayload) => void> | undefined; + // eslint-disable-next-line no-var + var __openclawMessageTransform: ((text: string, meta: { channel: string; to: string }) => string) | undefined; +} +if (!globalThis.__openclawDiagnosticListeners) { + globalThis.__openclawDiagnosticListeners = new Set(); +} + +// --------------------------------------------------------------------------- +// Constants +// --------------------------------------------------------------------------- +const PLUGIN_DIR = dirname(fileURLToPath(import.meta.url)); +const DATA_DIR = join(PLUGIN_DIR, "data"); +const DAILY_FILE = join(DATA_DIR, "daily-costs.json"); +const OFFSETS_FILE = join(DATA_DIR, "scan-offsets.json"); +const OPENCLAW_DIR = join(homedir(), ".openclaw"); +const AGENTS_DIR = join(OPENCLAW_DIR, "agents"); +const AUTH_PROFILES_FILE = join(AGENTS_DIR, "main", "agent", "auth-profiles.json"); + +// How often to scan session files (ms) +const SCAN_INTERVAL_MS = 60_000; + +// Anthropic model prefix for zero-cost detection under subscription +const ANTHROPIC_MODEL_PREFIXES = ["claude-"]; + +// Cost per million tokens (fallback when transcript has no cost field) +const MODEL_COSTS: Record< + string, + { input: number; output: number; cacheRead: number; cacheWrite: number } +> = { + "claude-sonnet-4-5-20250929": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, + "claude-haiku-4-5-20251001": { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, + "claude-opus-4-5-20251101": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 }, + "claude-opus-4-6": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 }, + "gemini-2.5-flash": { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, + "deepseek-chat": { input: 0.27, output: 1.1, cacheRead: 0, cacheWrite: 0 }, + "sonar-pro": { input: 3, output: 15, cacheRead: 0, cacheWrite: 0 }, +}; + +// --------------------------------------------------------------------------- +// Subscription (token) profile detection +// --------------------------------------------------------------------------- +// When the active Anthropic auth profile is a "token" type (e.g. Claude Max +// subscription), per-token costs are $0 since they're covered by the flat fee. +// We cache this check and refresh it periodically (the file rarely changes). +let _isAnthropicSubscription: boolean | null = null; +let _subscriptionCheckAt = 0; +const SUBSCRIPTION_CHECK_INTERVAL_MS = 300_000; // re-check every 5 minutes + +function isAnthropicSubscription(): boolean { + const now = Date.now(); + if (_isAnthropicSubscription !== null && now - _subscriptionCheckAt < SUBSCRIPTION_CHECK_INTERVAL_MS) { + return _isAnthropicSubscription; + } + _subscriptionCheckAt = now; + try { + if (!existsSync(AUTH_PROFILES_FILE)) { + _isAnthropicSubscription = false; + return false; + } + const data = JSON.parse(readFileSync(AUTH_PROFILES_FILE, "utf-8")); + const activeProfile = data?.lastGood?.anthropic; + if (!activeProfile) { + _isAnthropicSubscription = false; + return false; + } + const profileDef = data?.profiles?.[activeProfile]; + _isAnthropicSubscription = profileDef?.type === "token"; + return _isAnthropicSubscription; + } catch { + _isAnthropicSubscription = false; + return false; + } +} + +function isAnthropicModel(model: string | undefined): boolean { + if (!model) return false; + return ANTHROPIC_MODEL_PREFIXES.some((prefix) => model.startsWith(prefix)); +} + +// --------------------------------------------------------------------------- +// Types +// --------------------------------------------------------------------------- +interface InteractionCost { + timestamp: number; + model?: string; + provider?: string; + inputTokens: number; + outputTokens: number; + cacheReadTokens: number; + cacheWriteTokens: number; + totalTokens: number; + costUsd: number; + sessionKey?: string; +} + +interface DailyCosts { + [dateKey: string]: { + totalCost: number; + totalTokens: number; + interactions: number; + byModel: Record< + string, + { + cost: number; + tokens: number; + count: number; + } + >; + }; +} + +interface SessionAccumulator { + totalCost: number; + totalTokens: number; + interactions: number; + lastInteractionCost: number; + lastInteractionTokens: number; + lastModel?: string; + startedAt: number; +} + +// --------------------------------------------------------------------------- +// State +// --------------------------------------------------------------------------- +let dailyCosts: DailyCosts = {}; +const sessionAccumulators = new Map(); +let globalAccumulator: SessionAccumulator = { + totalCost: 0, + totalTokens: 0, + interactions: 0, + lastInteractionCost: 0, + lastInteractionTokens: 0, + startedAt: Date.now(), +}; + +let lastInteraction: InteractionCost | null = null; +let diagnosticEventsReceived = 0; // track if onDiagnosticEvent works +let scanTimer: ReturnType | null = null; + +// Track which JSONL lines we've already processed (by file + byte offset) +// Persisted to disk to survive gateway restarts and prevent double-counting. +let scannedOffsets = new Map(); + +function loadScannedOffsets(): Map { + try { + if (existsSync(OFFSETS_FILE)) { + const data = JSON.parse(readFileSync(OFFSETS_FILE, "utf-8")); + return new Map(Object.entries(data)); + } + } catch {} + return new Map(); +} + +function saveScannedOffsets(): void { + try { + if (!existsSync(DATA_DIR)) { + mkdirSync(DATA_DIR, { recursive: true }); + } + const obj: Record = {}; + for (const [k, v] of scannedOffsets) obj[k] = v; + writeFileSync(OFFSETS_FILE, JSON.stringify(obj)); + } catch {} +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- +function todayKey(): string { + return new Date().toLocaleDateString("en-CA", { + timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone, + }); +} + +function dateKeyFromTimestamp(ts: number): string { + return new Date(ts).toLocaleDateString("en-CA", { + timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone, + }); +} + +function formatUsd(value: number): string { + if (value >= 1) return `$${value.toFixed(2)}`; + if (value >= 0.01) return `$${value.toFixed(2)}`; + if (value >= 0.001) return `$${value.toFixed(3)}`; + return `$${value.toFixed(4)}`; +} + +function formatTokens(value: number): string { + if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`; + if (value >= 10_000) return `${Math.round(value / 1_000)}k`; + if (value >= 1_000) return `${(value / 1_000).toFixed(1)}k`; + return String(Math.round(value)); +} + +function estimateCost( + model: string | undefined, + input: number, + output: number, + cacheRead: number, + cacheWrite: number +): number { + // Anthropic models are free under Claude Max subscription (token profile) + if (isAnthropicModel(model) && isAnthropicSubscription()) return 0; + + const costs = model ? MODEL_COSTS[model] : undefined; + if (!costs) return 0; + return ( + (input * costs.input + + output * costs.output + + cacheRead * costs.cacheRead + + cacheWrite * costs.cacheWrite) / + 1_000_000 + ); +} + +function loadDailyCosts(): DailyCosts { + try { + if (existsSync(DAILY_FILE)) { + return JSON.parse(readFileSync(DAILY_FILE, "utf-8")); + } + } catch {} + return {}; +} + +function saveDailyCosts(): void { + try { + if (!existsSync(DATA_DIR)) { + mkdirSync(DATA_DIR, { recursive: true }); + } + writeFileSync(DAILY_FILE, JSON.stringify(dailyCosts, null, 2)); + } catch {} +} + +function getOrCreateSession(sessionKey: string): SessionAccumulator { + let acc = sessionAccumulators.get(sessionKey); + if (!acc) { + acc = { + totalCost: 0, + totalTokens: 0, + interactions: 0, + lastInteractionCost: 0, + lastInteractionTokens: 0, + startedAt: Date.now(), + }; + sessionAccumulators.set(sessionKey, acc); + } + return acc; +} + +function recordUsage(event: DiagnosticUsageEvent): void { + const input = event.usage?.input ?? 0; + const output = event.usage?.output ?? 0; + const cacheRead = event.usage?.cacheRead ?? 0; + const cacheWrite = event.usage?.cacheWrite ?? 0; + const totalTokens = + event.usage?.total ?? input + output + cacheRead + cacheWrite; + + // Anthropic models are free under Claude Max subscription (token profile) + const subscriptionZero = isAnthropicModel(event.model) && isAnthropicSubscription(); + const costUsd = subscriptionZero ? 0 : + (event.costUsd ?? estimateCost(event.model, input, output, cacheRead, cacheWrite)); + + const interaction: InteractionCost = { + timestamp: event.ts ?? Date.now(), + model: event.model, + provider: event.provider, + inputTokens: input, + outputTokens: output, + cacheReadTokens: cacheRead, + cacheWriteTokens: cacheWrite, + totalTokens, + costUsd, + sessionKey: event.sessionKey, + }; + + lastInteraction = interaction; + + const sessionKey = event.sessionKey ?? "__global__"; + const session = getOrCreateSession(sessionKey); + session.totalCost += costUsd; + session.totalTokens += totalTokens; + session.interactions += 1; + session.lastInteractionCost = costUsd; + session.lastInteractionTokens = totalTokens; + session.lastModel = event.model; + + globalAccumulator.totalCost += costUsd; + globalAccumulator.totalTokens += totalTokens; + globalAccumulator.interactions += 1; + globalAccumulator.lastInteractionCost = costUsd; + globalAccumulator.lastInteractionTokens = totalTokens; + globalAccumulator.lastModel = event.model; + + const day = dateKeyFromTimestamp(interaction.timestamp); + if (!dailyCosts[day]) { + dailyCosts[day] = { + totalCost: 0, + totalTokens: 0, + interactions: 0, + byModel: {}, + }; + } + const dayBucket = dailyCosts[day]; + dayBucket.totalCost += costUsd; + dayBucket.totalTokens += totalTokens; + dayBucket.interactions += 1; + + const modelKey = event.model ?? "unknown"; + if (!dayBucket.byModel[modelKey]) { + dayBucket.byModel[modelKey] = { cost: 0, tokens: 0, count: 0 }; + } + dayBucket.byModel[modelKey].cost += costUsd; + dayBucket.byModel[modelKey].tokens += totalTokens; + dayBucket.byModel[modelKey].count += 1; + + if (globalAccumulator.interactions % 10 === 0) { + saveDailyCosts(); + } +} + +// --------------------------------------------------------------------------- +// Session transcript JSONL scanner (fallback for broken diagnostic events) +// --------------------------------------------------------------------------- +// Scans session JSONL files for assistant messages with usage data. +// Only processes new lines since the last scan (tracked by byte offset). +function recordFromTranscript( + model: string | undefined, + usage: { input?: number; output?: number; cacheRead?: number; cacheWrite?: number; totalTokens?: number; cost?: { total?: number } }, + timestamp: number, + provider?: string, +): void { + const input = usage.input ?? 0; + const output = usage.output ?? 0; + const cacheRead = usage.cacheRead ?? 0; + const cacheWrite = usage.cacheWrite ?? 0; + const totalTokens = usage.totalTokens ?? (input + output + cacheRead + cacheWrite); + + // Anthropic models are free under Claude Max subscription (token profile). + // Override any cost from the API response since it still reports billing rates. + const subscriptionZero = isAnthropicModel(model) && isAnthropicSubscription(); + const costUsd = subscriptionZero ? 0 : (usage.cost?.total ?? estimateCost(model, input, output, cacheRead, cacheWrite)); + + const interaction: InteractionCost = { + timestamp, + model, + provider, + inputTokens: input, + outputTokens: output, + cacheReadTokens: cacheRead, + cacheWriteTokens: cacheWrite, + totalTokens, + costUsd, + }; + + lastInteraction = interaction; + + globalAccumulator.totalCost += costUsd; + globalAccumulator.totalTokens += totalTokens; + globalAccumulator.interactions += 1; + globalAccumulator.lastInteractionCost = costUsd; + globalAccumulator.lastInteractionTokens = totalTokens; + globalAccumulator.lastModel = model; + + const day = dateKeyFromTimestamp(timestamp); + if (!dailyCosts[day]) { + dailyCosts[day] = { totalCost: 0, totalTokens: 0, interactions: 0, byModel: {} }; + } + const bucket = dailyCosts[day]; + bucket.totalCost += costUsd; + bucket.totalTokens += totalTokens; + bucket.interactions += 1; + + const mk = model ?? "unknown"; + if (!bucket.byModel[mk]) { + bucket.byModel[mk] = { cost: 0, tokens: 0, count: 0 }; + } + bucket.byModel[mk].cost += costUsd; + bucket.byModel[mk].tokens += totalTokens; + bucket.byModel[mk].count += 1; +} + +function scanSessionFiles(logger?: { debug: (...args: unknown[]) => void }): void { + // Skip if onDiagnosticEvent is actually working + if (diagnosticEventsReceived > 0) return; + + let newEntries = 0; + try { + if (!existsSync(AGENTS_DIR)) return; + const agentDirs = readdirSync(AGENTS_DIR, { withFileTypes: true }) + .filter((d) => d.isDirectory()); + + for (const agentDir of agentDirs) { + const sessionsDir = join(AGENTS_DIR, agentDir.name, "sessions"); + if (!existsSync(sessionsDir)) continue; + + let files: string[]; + try { + files = readdirSync(sessionsDir).filter((f) => f.endsWith(".jsonl")); + } catch { + continue; + } + + for (const file of files) { + const filePath = join(sessionsDir, file); + let fileSize: number; + try { + fileSize = statSync(filePath).size; + } catch { + continue; + } + + const prevOffset = scannedOffsets.get(filePath) ?? 0; + if (fileSize <= prevOffset) continue; + + // Read only new bytes + let newContent: string; + try { + const fd = require("fs").openSync(filePath, "r"); + const buf = Buffer.alloc(fileSize - prevOffset); + require("fs").readSync(fd, buf, 0, buf.length, prevOffset); + require("fs").closeSync(fd); + newContent = buf.toString("utf-8"); + } catch { + continue; + } + + scannedOffsets.set(filePath, fileSize); + + // Parse each line + const lines = newContent.split("\n"); + for (const line of lines) { + if (!line.trim()) continue; + try { + const entry = JSON.parse(line); + // Look for assistant messages with usage data + if ( + entry.type === "message" && + entry.message?.role === "assistant" && + entry.message?.usage + ) { + const msg = entry.message; + const ts = msg.timestamp ?? (entry.timestamp ? new Date(entry.timestamp).getTime() : Date.now()); + recordFromTranscript(msg.model, msg.usage, ts, msg.provider); + newEntries++; + } + } catch { + // Skip malformed lines + } + } + } + } + } catch { + // Silently handle scan errors + } + + if (newEntries > 0) { + saveDailyCosts(); + saveScannedOffsets(); + logger?.debug(`cost-tracker: scanned ${newEntries} new usage entries from session transcripts`); + } +} + +function buildCostFooter(turnCostSnapshot?: { cost: number; tokens: number }): string { + const day = todayKey(); + const dayData = dailyCosts[day]; + const dailyTotal = dayData?.totalCost ?? 0; + const dailyTokens = dayData?.totalTokens ?? 0; + + // Use snapshot if provided (captures cost delta for this specific turn) + const turnCost = turnCostSnapshot?.cost ?? lastInteraction?.costUsd ?? 0; + const turnTokens = turnCostSnapshot?.tokens ?? lastInteraction?.totalTokens ?? 0; + + if (turnCost === 0 && dailyTotal === 0 && turnTokens === 0 && dailyTokens === 0) return ""; + + // Show tokens when costs are $0 (subscription), costs when > $0, or both + if (dailyTotal === 0 && turnCost === 0) { + // Subscription mode: show token counts only + const turnPart = turnTokens > 0 ? formatTokens(turnTokens) : "0"; + return `\n\n_turn: ${turnPart} tokens · today: ${formatTokens(dailyTokens)} tokens_`; + } + + return `\n\n_turn: ${formatUsd(turnCost)} · today: ${formatUsd(dailyTotal)}_`; +} + +// --------------------------------------------------------------------------- +// Plugin +// --------------------------------------------------------------------------- +const plugin = { + id: "cost-tracker", + name: "Cost Tracker", + description: "Tracks per-interaction API costs and appends cost footer to responses", + configSchema: emptyPluginConfigSchema(), + + register(api: OpenClawPluginApi) { + dailyCosts = loadDailyCosts(); + scannedOffsets = loadScannedOffsets(); + + // ----------------------------------------------------------------------- + // 1. Listen to diagnostic usage events (broken due to module isolation, + // but kept for forward-compat if core fix lands) + // ----------------------------------------------------------------------- + const diagnosticHandler = (evt: DiagnosticEventPayload) => { + if (evt.type === "model.usage") { + diagnosticEventsReceived++; + recordUsage(evt as DiagnosticUsageEvent); + } + }; + const unsubscribe = onDiagnosticEvent(diagnosticHandler); + + // Also register on globalThis bridge for future gateway versions + globalThis.__openclawDiagnosticListeners!.add(diagnosticHandler); + + // ----------------------------------------------------------------------- + // 2. Session transcript scanner (primary data source until bug is fixed) + // ----------------------------------------------------------------------- + // Initial scan on startup: catch up with any usage since last restart + scanSessionFiles(api.logger as any); + + // Periodic scan every 60s + scanTimer = setInterval(() => { + scanSessionFiles(api.logger as any); + }, SCAN_INTERVAL_MS); + + // Also scan on agent_end to capture the latest interaction quickly + api.on("agent_end", () => { + // Small delay to let the transcript file flush + setTimeout(() => scanSessionFiles(api.logger as any), 2000); + }); + + // ----------------------------------------------------------------------- + // 3. Append cost footer via globalThis bridge + // ----------------------------------------------------------------------- + // The message_sending hook is defined in the gateway but never invoked. + // Instead, we use a globalThis.__openclawMessageTransform bridge that + // is called from a small patch in the gateway deliver module. + // Initialize preTurnDailyTotal from persisted data so first turn after + // restart doesn't show turn == today (was starting at 0). + const initDayData = dailyCosts[todayKey()]; + let preTurnDailyTotal = initDayData?.totalCost ?? 0; + let preTurnDailyTokens = initDayData?.totalTokens ?? 0; + api.on("message_received", () => { + scanSessionFiles(api.logger as any); + const dayData = dailyCosts[todayKey()]; + preTurnDailyTotal = dayData?.totalCost ?? 0; + preTurnDailyTokens = dayData?.totalTokens ?? 0; + }); + + globalThis.__openclawMessageTransform = (text: string, _meta: { channel: string; to: string }) => { + if (!text || !text.trim()) return text; + if (text.startsWith("[Tool:")) return text; + + // Scan transcripts to capture this turn's usage + scanSessionFiles(api.logger as any); + + const dayData = dailyCosts[todayKey()]; + const currentDailyTotal = dayData?.totalCost ?? 0; + const currentDailyTokens = dayData?.totalTokens ?? 0; + const turnCost = currentDailyTotal - preTurnDailyTotal; + const turnTokens = currentDailyTokens - preTurnDailyTokens; + + const footer = buildCostFooter( + (turnCost > 0 || turnTokens > 0) ? { cost: turnCost, tokens: turnTokens } : undefined + ); + if (!footer) return text; + + return text + footer; + }; + + // ----------------------------------------------------------------------- + // 4. Hook into session_end to persist costs and clean up + // ----------------------------------------------------------------------- + api.on("session_end", (event, ctx) => { + saveDailyCosts(); + if (ctx.sessionId) { + sessionAccumulators.delete(ctx.sessionId); + } + }); + + // ----------------------------------------------------------------------- + // 5. Hook into gateway_stop to persist costs and clean up timer + // ----------------------------------------------------------------------- + api.on("gateway_stop", () => { + saveDailyCosts(); + saveScannedOffsets(); + if (scanTimer) { + clearInterval(scanTimer); + scanTimer = null; + } + globalThis.__openclawDiagnosticListeners?.delete(diagnosticHandler); + delete (globalThis as any).__openclawMessageTransform; + }); + + // ----------------------------------------------------------------------- + // 6. Register /cost command for on-demand cost report + // ----------------------------------------------------------------------- + api.registerCommand({ + name: "cost", + description: "Show current cost summary (today, session, per-model breakdown)", + acceptsArgs: true, + requireAuth: true, + handler: (ctx) => { + // Trigger a scan before reporting to get fresh data + scanSessionFiles(api.logger as any); + + const day = todayKey(); + const dayData = dailyCosts[day]; + + const lines: string[] = []; + lines.push("--- Cost Report ---"); + lines.push(""); + + if (dayData) { + lines.push( + `Today (${day}): ${formatUsd(dayData.totalCost)} | ${formatTokens(dayData.totalTokens)} tokens | ${dayData.interactions} API calls` + ); + lines.push(""); + lines.push("By model:"); + const sortedModels = Object.entries(dayData.byModel).sort( + ([, a], [, b]) => b.cost - a.cost + ); + for (const [model, data] of sortedModels) { + const pct = + dayData.totalCost > 0 + ? ((data.cost / dayData.totalCost) * 100).toFixed(0) + : "0"; + lines.push( + ` ${model}: ${formatUsd(data.cost)} (${pct}%) | ${formatTokens(data.tokens)} tok | ${data.count} calls` + ); + } + } else { + lines.push(`Today (${day}): No usage recorded yet.`); + } + + lines.push(""); + lines.push( + `Since gateway start: ${formatUsd(globalAccumulator.totalCost)} | ${formatTokens(globalAccumulator.totalTokens)} tokens | ${globalAccumulator.interactions} calls` + ); + lines.push( + `Data source: ${diagnosticEventsReceived > 0 ? "diagnostic events (real-time)" : "session transcript scan (60s interval)"}` + ); + + const last7 = []; + for (let i = 0; i < 7; i++) { + const d = new Date(); + d.setDate(d.getDate() - i); + const key = d.toLocaleDateString("en-CA", { + timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone, + }); + const data = dailyCosts[key]; + if (data) { + last7.push({ date: key, ...data }); + } + } + + if (last7.length > 1) { + lines.push(""); + lines.push("Last 7 days:"); + let weekTotal = 0; + for (const d of last7) { + lines.push( + ` ${d.date}: ${formatUsd(d.totalCost)} | ${d.interactions} calls` + ); + weekTotal += d.totalCost; + } + lines.push(` Total: ${formatUsd(weekTotal)}`); + } + + return { text: lines.join("\n") }; + }, + }); + + // ----------------------------------------------------------------------- + // 7. Register HTTP API endpoint for cost data + // ----------------------------------------------------------------------- + api.registerHttpHandler(async (req: any, res: any): Promise => { + const url = new URL( + req.url ?? "/", + `http://${req.headers.host || "localhost"}` + ); + const pathname = url.pathname; + + if (pathname === "/cost-tracker/api/summary") { + // Trigger scan for fresh data + scanSessionFiles(api.logger as any); + + const day = todayKey(); + const dayData = dailyCosts[day]; + + const response = { + today: dayData ?? { + totalCost: 0, + totalTokens: 0, + interactions: 0, + byModel: {}, + }, + gatewaySession: { + totalCost: globalAccumulator.totalCost, + totalTokens: globalAccumulator.totalTokens, + interactions: globalAccumulator.interactions, + startedAt: globalAccumulator.startedAt, + }, + lastInteraction: lastInteraction + ? { + model: lastInteraction.model, + costUsd: lastInteraction.costUsd, + totalTokens: lastInteraction.totalTokens, + timestamp: lastInteraction.timestamp, + } + : null, + daily: dailyCosts, + dataSource: diagnosticEventsReceived > 0 ? "diagnostic-events" : "transcript-scan", + }; + + res.setHeader("Content-Type", "application/json"); + res.setHeader("Cache-Control", "no-cache"); + res.end(JSON.stringify(response)); + return true; + } + + if (pathname === "/cost-tracker/api/today") { + scanSessionFiles(api.logger as any); + const day = todayKey(); + const dayData = dailyCosts[day] ?? { + totalCost: 0, + totalTokens: 0, + interactions: 0, + byModel: {}, + }; + + res.setHeader("Content-Type", "application/json"); + res.setHeader("Cache-Control", "no-cache"); + res.end(JSON.stringify({ date: day, ...dayData })); + return true; + } + + return false; + }); + + api.logger.info( + "Cost tracker plugin registered: /cost command, globalThis message transform, transcript scanner (60s), HTTP API at /cost-tracker/api/*" + ); + }, +}; + +export default plugin; diff --git a/bates-core/plugins/cost-tracker/openclaw.plugin.json b/bates-core/plugins/cost-tracker/openclaw.plugin.json new file mode 100644 index 0000000..e6f420c --- /dev/null +++ b/bates-core/plugins/cost-tracker/openclaw.plugin.json @@ -0,0 +1,10 @@ +{ + "id": "cost-tracker", + "name": "Cost Tracker", + "description": "Tracks per-interaction and daily API costs, appends cost footer to every Bates response", + "configSchema": { + "type": "object", + "additionalProperties": false, + "properties": {} + } +} diff --git a/bates-core/plugins/dashboard/index.ts b/bates-core/plugins/dashboard/index.ts new file mode 100644 index 0000000..ca29d20 --- /dev/null +++ b/bates-core/plugins/dashboard/index.ts @@ -0,0 +1,874 @@ +import { readFileSync, writeFileSync, readdirSync, statSync, existsSync, openSync, readSync, closeSync, mkdirSync, unlinkSync } from "fs"; +import { execSync, execFileSync } from "child_process"; +import { join, resolve, extname, dirname } from "path"; +import { fileURLToPath } from "url"; +import { homedir } from "os"; +import { emptyPluginConfigSchema } from "openclaw/plugin-sdk"; +import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; + +const PLUGIN_DIR = dirname(fileURLToPath(import.meta.url)); +const STATIC_DIR = join(PLUGIN_DIR, "static"); +const OPENCLAW_HOME = join(homedir(), ".openclaw"); +const WORKSPACE = join(OPENCLAW_HOME, "workspace"); + +// Resolve the Control UI directory from the openclaw package installation +// This path may vary depending on how openclaw is installed (global npm, local, etc.) +function findControlUiDir(): string { + // Try common locations + const candidates = [ + join(homedir(), ".npm-global/lib/node_modules/openclaw/dist/control-ui"), + join("/usr/local/lib/node_modules/openclaw/dist/control-ui"), + join("/usr/lib/node_modules/openclaw/dist/control-ui"), + ]; + for (const c of candidates) { + if (existsSync(c)) return c; + } + return candidates[0]; // fallback +} +const CONTROL_UI_DIR = findControlUiDir(); + +// Injected into Control UI: sidebar nav item + top banner for mobile +const DASHBOARD_LINK_SNIPPET = ` + + + + + + + + + + + + + + + + + + + + + diff --git a/bates-core/plugins/dashboard/static/js/app.js b/bates-core/plugins/dashboard/static/js/app.js new file mode 100644 index 0000000..2542e70 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/app.js @@ -0,0 +1,379 @@ +/** + * Bates Command Center — App Controller v4 + * 5 tabs · persistent chat drawer · glassmorphism + */ +(function () { + const panels = {}; + let gateway = null; + let currentView = 'overview'; + + const VIEW_PANELS = { + overview: ['ceo', 'tasks', 'status', 'agents', 'files', 'crons'], + agents: ['agents'], + operations: ['crons', 'delegations', 'integrations', 'costs', 'settings'], + standup: ['standup'], + memory: ['memory'], + }; + + const DASH_API_BASE = ''; + + window.Dashboard = { + DASH_API: DASH_API_BASE, + registerPanel(id, mod) { panels[id] = mod; }, + getGateway() { return gateway; }, + + async fetchApi(ep) { + try { + const headers = {}; + const token = window.__GATEWAY_CONFIG?.token; + if (token) headers['Authorization'] = 'Bearer ' + token; + return await (await fetch(`/dashboard/api/${ep}`, { headers })).json(); + } + catch (e) { console.error(`API ${ep}:`, e); return null; } + }, + + // Compact task row for project detail modals (spreadsheet-dense) + renderTaskRowCompact(t) { + const done = t.completed; + const overdue = !done && t.dueDate && t.dueDate < new Date().toISOString().slice(0, 10); + const PRI_COLORS = { urgent: '#ff4757', important: '#ffa502', medium: '#00d4ff', low: '#747d8c' }; + const taskUrl = t.source === 'To Do' + ? `https://to-do.office.com/tasks/id/${t.id}/details` + : `https://tasks.office.com/TENANT.example.com/Home/Task/${t.id}`; + return ` + + + ${Dashboard.esc(t.title || '—')} + ${t.dueDate || ''} + `; + }, + + // Shared task row renderer used by panel-tasks.js and project detail modals + renderTaskRow(t, opts) { + opts = opts || {}; + const done = t.completed; + const overdue = !done && t.dueDate && t.dueDate < new Date().toISOString().slice(0, 10); + const PRI_COLORS = { urgent: '#ff4757', important: '#ffa502', medium: '#00d4ff', low: '#747d8c' }; + const taskUrl = t.source === 'To Do' + ? `https://to-do.office.com/tasks/id/${t.id}/details` + : `https://tasks.office.com/TENANT.example.com/Home/Task/${t.id}`; + return `
+ + +
+
${Dashboard.esc(t.title || '—')}
+
+ ${t.dueDate ? '📅 ' + t.dueDate : ''} + ${Dashboard.esc(t.planName || '')} + ${Dashboard.esc(t.source || '')} + ${t.checklistTotal ? `☑ ${t.checklistDone}/${t.checklistTotal}` : ''} + ${t.percentComplete > 0 && t.percentComplete < 100 ? `${t.percentComplete}%` : ''} +
+
+
`; + }, + + // Wire click and complete handlers on task rows within a container + wireTaskRows(container, onComplete) { + if (!container) return; + container.querySelectorAll('.task-row-clickable').forEach(el => { + el.style.cursor = 'pointer'; + el.addEventListener('click', (e) => { + e.stopPropagation(); + const url = el.dataset.url; + if (url) window.open(url, '_blank'); + }); + }); + container.querySelectorAll('.task-complete-btn').forEach(btn => { + btn.addEventListener('click', async (e) => { + e.stopPropagation(); + const row = btn.closest('.task-row-shared'); + if (!row || row.classList.contains('done')) return; + btn.disabled = true; + btn.textContent = '⏳'; + try { + const headers = { 'Content-Type': 'application/json' }; + const token = window.__GATEWAY_CONFIG?.token; + if (token) headers['Authorization'] = 'Bearer ' + token; + const resp = await fetch('/dashboard/api/tasks/complete', { + method: 'POST', headers, + body: JSON.stringify({ taskId: row.dataset.taskId, source: row.dataset.source, project: row.dataset.project }) + }); + const result = await resp.json(); + if (result.success) { + row.classList.add('done'); + btn.textContent = '✓'; + btn.style.background = 'var(--green)'; + btn.style.borderColor = 'var(--green)'; + btn.style.color = '#fff'; + if (onComplete) onComplete(); + } else { + btn.textContent = '✗'; + btn.style.color = 'var(--red)'; + setTimeout(() => { btn.textContent = '✓'; btn.style.color = ''; btn.disabled = false; }, 2000); + } + } catch { + btn.textContent = '✗'; + setTimeout(() => { btn.textContent = '✓'; btn.disabled = false; }, 2000); + } + }); + }); + }, + + timeAgo(d) { + if (!d) return 'never'; + const ms = Date.now() - new Date(d).getTime(); + if (ms < 0) { const a = -ms; return a < 60e3 ? `in ${(a/1e3)|0}s` : a < 36e5 ? `in ${(a/6e4)|0}m` : a < 864e5 ? `in ${(a/36e5)|0}h` : `in ${(a/864e5)|0}d`; } + return ms < 60e3 ? `${(ms/1e3)|0}s ago` : ms < 36e5 ? `${(ms/6e4)|0}m ago` : ms < 864e5 ? `${(ms/36e5)|0}h ago` : `${(ms/864e5)|0}d ago`; + }, + formatSize(b) { return b < 1024 ? b+'B' : b < 1048576 ? (b/1024).toFixed(1)+'KB' : (b/1048576).toFixed(1)+'MB'; }, + esc(s) { const d = document.createElement('div'); d.textContent = s; return d.innerHTML; }, + }; + + // ─── Navigation ─── + function switchView(id) { + if (!VIEW_PANELS[id]) return; + currentView = id; + document.querySelectorAll('.view').forEach(v => v.classList.remove('active')); + document.getElementById('view-' + id)?.classList.add('active'); + document.querySelectorAll('.nav-tab').forEach(n => n.classList.remove('active')); + document.querySelectorAll(`.nav-tab[data-view="${id}"]`).forEach(n => n.classList.add('active')); + for (const pid of VIEW_PANELS[id]) { + try { panels[pid]?.refresh?.(gateway); } catch (e) { console.error(`Refresh ${pid}:`, e); } + } + } + + // ─── Chat Drawer ─── + function setupChatDrawer() { + const drawer = document.getElementById('chat-drawer'); + const toggle = document.getElementById('chat-toggle-btn'); + const close = document.getElementById('chat-drawer-close'); + if (!drawer || !toggle) return; + + function setOpen(open) { + drawer.classList.toggle('open', open); + toggle.classList.toggle('active', open); + localStorage.setItem('bates-chat-open', open ? '1' : '0'); + } + toggle.addEventListener('click', () => setOpen(!drawer.classList.contains('open'))); + close?.addEventListener('click', () => setOpen(false)); + + const saved = localStorage.getItem('bates-chat-open'); + setOpen(saved !== '0'); + } + + // ─── Clock ─── + function updateClock() { + const el = document.getElementById('clock'); + if (!el) return; + el.textContent = new Date().toLocaleTimeString('en-GB', { timeZone: 'Europe/Lisbon', hour: '2-digit', minute: '2-digit' }); + } + + // ─── Connection ─── + function updateConn(status) { + const dot = document.getElementById('conn-dot'); + const lbl = document.getElementById('conn-label'); + if (dot) dot.className = 'conn-dot ' + status; + if (lbl) lbl.textContent = status === 'connected' ? 'LIVE' : status.toUpperCase(); + } + + // ─── Refresh buttons ─── + function setupRefresh() { + document.querySelectorAll('.panel-refresh').forEach(btn => { + btn.addEventListener('click', () => { + const pid = (btn.dataset.action || '').replace('refresh-', ''); + try { panels[pid]?.refresh?.(gateway); } catch {} + }); + }); + } + + // ─── Overview metrics ─── + window._updateOverviewMetrics = function(d) { + if (!d) return; + const set = (id, v) => { const el = document.getElementById(id); if (el) el.textContent = v; }; + if (d.activeAgents !== undefined) set('metric-agents-val', d.activeAgents); + if (d.emails !== undefined) set('metric-emails-val', d.emails); + if (d.tasks !== undefined) set('metric-tasks-val', d.tasks); + if (d.nextCron !== undefined) set('metric-cron-val', d.nextCron); + }; + + // ─── Agents summary hook ─── + const _origReg = window.Dashboard.registerPanel; + window.Dashboard.registerPanel = function(id, mod) { + if (id === 'agents') { + const oRefresh = mod.refresh, oInit = mod.init; + mod.refresh = async gw => { await oRefresh(gw); updateAgentsSummary(); }; + mod.init = async gw => { await oInit(gw); updateAgentsSummary(); }; + } + _origReg(id, mod); + }; + + function updateAgentsSummary() { + const el = document.getElementById('panel-agents-summary'); + if (!el) return; + const cards = document.querySelectorAll('#panel-agents .acard, #panel-agents .agent-card'); + if (!cards.length) { el.innerHTML = '
No agents online
'; return; } + let html = '
'; + let n = 0; + cards.forEach(c => { + if (n >= 6) return; + const name = c.querySelector('.aname, .agent-name'); + const role = c.querySelector('.arole, .agent-role'); + const dot = c.querySelector('.status-dot'); + if (!name) return; + html += `
+ + ${name.textContent} + ${role ? `${role.textContent}` : ''} +
`; + n++; + }); + if (cards.length > 6) html += `
View all ${cards.length} →
`; + html += '
'; + el.innerHTML = html; + } + + // ─── Rollout panel (standalone, not injected into project card) ─── + + // ─── Init ─── + async function init() { + updateClock(); + setInterval(updateClock, 1000); + + document.querySelectorAll('.nav-tab').forEach(b => b.addEventListener('click', () => switchView(b.dataset.view))); + setupChatDrawer(); + setupRefresh(); + + const ov = document.getElementById('soul-modal-overlay'); + const cl = document.getElementById('soul-modal-close'); + if (ov) ov.addEventListener('click', e => { if (e.target === ov) ov.classList.remove('visible'); }); + if (cl) cl.addEventListener('click', () => ov.classList.remove('visible')); + + const config = window.__GATEWAY_CONFIG || {}; + gateway = new GatewayClient(config); + gateway.onStatusChange = updateConn; + updateConn('reconnecting'); + + for (const [id, p] of Object.entries(panels)) { + try { await p.init?.(gateway); } catch (e) { console.error(`Init ${id}:`, e); } + } + + gateway.connect().then(() => { + for (const pid of VIEW_PANELS[currentView]) { + try { panels[pid]?.refresh?.(gateway); } catch {} + } + // Refresh chat panel after auth is confirmed + if (panels.chat?.refresh) try { panels.chat.refresh(gateway); } catch {} + }).catch(e => { console.error('WS failed:', e); updateConn('disconnected'); }); + + // Project boxes clickable + setupProjectBoxes(); + + setInterval(() => { + for (const pid of VIEW_PANELS[currentView]) { + try { panels[pid]?.refresh?.(gateway); } catch {} + } + }, 30000); + } + + // ─── Project Detail Views ─── + // Configure your projects here. Update planUrl with your own Planner/To-Do URLs. + const PROJECT_DATA = { + project_a: { name: 'Project A', icon: '🏦', desc: 'Example project A', agent: 'conrad', agentName: 'Conrad', planUrl: 'https://tasks.office.com/TENANT.example.com/Home/PlanViews/PLAN_ID_A' }, + project_b: { name: 'Project B', icon: '⚡', desc: 'Example project B', agent: 'soren', agentName: 'Soren', planUrl: 'https://tasks.office.com/TENANT.example.com/Home/PlanViews/PLAN_ID_B' }, + project_c: { name: 'Project C', icon: '🏫', desc: 'Example project C', agent: 'amara', agentName: 'Amara', planUrl: 'https://tasks.office.com/TENANT.example.com/Home/PlanViews/PLAN_ID_C' }, + bates: { name: 'Bates', icon: '🐧', desc: 'AI operations platform — agent orchestration & rollout', agent: 'dash', agentName: 'Dash', planUrl: 'https://tasks.office.com/TENANT.example.com/Home/PlanViews/PLAN_ID_D' }, + private: { name: 'Private', icon: '🏠', desc: 'Personal & family affairs', agent: 'jules', agentName: 'Jules', planUrl: 'https://to-do.office.com/tasks' }, + }; + + function setupProjectBoxes() { + document.querySelectorAll('.project-box').forEach(box => { + const pid = box.dataset.project; + if (!pid || !PROJECT_DATA[pid]) return; + box.addEventListener('click', (e) => { + e.stopPropagation(); + openProjectDetail(pid); + }); + }); + } + + function openProjectDetail(pid) { + const p = PROJECT_DATA[pid]; + if (!p) return; + const ov = document.getElementById('soul-modal-overlay'); + if (!ov) return; + const titleEl = document.getElementById('soul-modal-title'); + const bodyEl = document.getElementById('soul-modal-body'); + titleEl.textContent = p.icon + ' ' + p.name; + bodyEl.innerHTML = ` +
+
${Dashboard.esc(p.desc)}
+ +
+
Planner Tasks
+
📋 Loading…
+
+
+
Recent Files
+
📁 Loading...
+
+
`; + ov.classList.add('visible'); + + // Load project tasks using shared task row component + (function loadProjectTasks() { + const tel = document.getElementById('project-detail-tasks-' + pid); + if (!tel) return; + + function renderProjectTaskRows(tasks) { + const incomplete = tasks.filter(t => !t.completed && !t.error); + const done = tasks.filter(t => t.completed); + if (!incomplete.length && !done.length) { tel.textContent = '📋 No tasks'; return; } + let h = ''; + for (const t of incomplete.slice(0, 20)) h += Dashboard.renderTaskRowCompact(t); + h += '
'; + if (done.length) h += `
✓ ${done.length} completed
`; + if (incomplete.length > 20) { const planLink = PROJECT_DATA[pid]?.planUrl; h += `+ ${incomplete.length - 20} more → Open in Planner`; } + tel.innerHTML = h; + Dashboard.wireTaskRows(tel); + } + + const pt = window._getProjectTasks?.(pid); + if (pt && pt.tasks?.length) { + renderProjectTaskRows(pt.tasks); + } else if (pt && pt.tasks?.length === 0) { + tel.textContent = '📋 No tasks in this plan'; + } else { + Dashboard.fetchApi('tasks').then(data => { + if (data?.byProject?.[pid]?.tasks) { + renderProjectTaskRows(data.byProject[pid].tasks); + } else { + tel.textContent = '📋 No plan configured'; + } + }).catch(() => { tel.textContent = '📋 Could not load tasks'; }); + } + })(); + + // Try to load filtered files + Dashboard.fetchApi('files').then(files => { + const el = document.getElementById('project-detail-files-' + pid); + if (!el) return; + const all = Array.isArray(files) ? files : []; + const kw = pid; + const filtered = all.filter(f => (f.path || '').toLowerCase().includes(kw)).slice(0, 5); + if (!filtered.length) { el.textContent = '📁 No recent files for this project'; return; } + el.innerHTML = filtered.map(f => `
${Dashboard.esc(f.name)} ${Dashboard.timeAgo(f.modified)}
`).join(''); + }).catch(() => { + const el = document.getElementById('project-detail-files-' + pid); + if (el) el.textContent = '📁 Could not load files'; + }); + } + + document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', init) : init(); +})(); diff --git a/bates-core/plugins/dashboard/static/js/gateway.js b/bates-core/plugins/dashboard/static/js/gateway.js new file mode 100644 index 0000000..b439cb2 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/gateway.js @@ -0,0 +1,685 @@ +/** + * OpenClaw Gateway WebSocket Client + * Protocol v3 — typed frames { type: "req"|"res"|"event" } + * Includes Ed25519 device auth for operator scopes. + */ + +// ─── Ed25519 (minimal, browser-only via noble-ed25519-style inline) ─── +// We use SubtleCrypto SHA-512 + a tiny Ed25519 sign implementation. +// For brevity we import the same device-identity approach as Control UI: +// generate keypair, store in localStorage, sign connect payload. + +const DEVICE_STORAGE_KEY = "openclaw-device-identity-v1"; +const DEVICE_AUTH_TOKEN_KEY = "openclaw.device.auth.v1"; + +// ─── Helpers ─── +function b64url(bytes) { + let s = ""; + for (const b of bytes) s += String.fromCharCode(b); + return btoa(s).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, ""); +} +function b64urlDecode(str) { + const s = str.replace(/-/g, "+").replace(/_/g, "/"); + const padded = s + "=".repeat((4 - s.length % 4) % 4); + const bin = atob(padded); + const bytes = new Uint8Array(bin.length); + for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i); + return bytes; +} +function hexFromBytes(bytes) { + return Array.from(bytes).map(b => b.toString(16).padStart(2, "0")).join(""); +} +async function sha256Hex(bytes) { + const hash = await crypto.subtle.digest("SHA-256", bytes.buffer); + return hexFromBytes(new Uint8Array(hash)); +} + +// ─── Ed25519 via noble-ed25519 approach (reuse Control UI's stored keys) ─── +// We need to sign payloads. The Control UI stores keys as base64url-encoded +// Ed25519 seed (private) and public key. We'll use the Web Crypto Ed25519 API +// if available (Chrome 113+, Firefox 128+), or fall back to importing the +// existing noble-ed25519 implementation pattern. + +// Try native Ed25519 first (available in modern browsers) +async function ed25519Sign(privateKeyBytes, message) { + // Try native Web Crypto Ed25519 + try { + const key = await crypto.subtle.importKey( + "pkcs8", + ed25519SeedToPkcs8(privateKeyBytes), + { name: "Ed25519" }, + false, + ["sign"] + ); + const sig = await crypto.subtle.sign("Ed25519", key, new TextEncoder().encode(message)); + return new Uint8Array(sig); + } catch (e) { + // Native Ed25519 not available, fall back to noble implementation + return ed25519SignNoble(privateKeyBytes, new TextEncoder().encode(message)); + } +} + +// Convert 32-byte Ed25519 seed to PKCS#8 format for Web Crypto +function ed25519SeedToPkcs8(seed) { + // PKCS#8 wrapper for Ed25519 private key (seed) + const prefix = new Uint8Array([ + 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, + 0x04, 0x22, 0x04, 0x20 + ]); + const result = new Uint8Array(prefix.length + seed.length); + result.set(prefix); + result.set(seed, prefix.length); + return result.buffer; +} + +// Minimal noble-ed25519 sign (synchronous-style using SHA-512 from SubtleCrypto) +async function sha512(data) { + const hash = await crypto.subtle.digest("SHA-512", data instanceof Uint8Array ? data.buffer : data); + return new Uint8Array(hash); +} + +// We'll use a simplified approach: if native Ed25519 fails, we load the +// noble-ed25519 micro library dynamically. For now, store a minimal implementation. +// This is the same Ed25519 implementation used by Control UI (inlined). + +// ─── Modular arithmetic for Ed25519 ─── +const P = 2n ** 255n - 19n; +const N = 2n ** 252n + 27742317777372353535851937790883648493n; +const Gx = 15112221349535807912866137220509078750507884956996801397894129974371384098553n; +const Gy = 46316835694926478169428394003475163141307993866256225615783033890098355573289n; +const D_CONST = 37095705934669439343138083508754565189542113879843219016388785533085940283555n; + +function mod(a, m = P) { let r = a % m; return r >= 0n ? r : m + r; } +function modInv(a, m = P) { + let [old_r, r] = [mod(a, m), m]; + let [old_s, s] = [1n, 0n]; + while (r !== 0n) { + const q = old_r / r; + [old_r, r] = [r, old_r - q * r]; + [old_s, s] = [s, old_s - q * s]; + } + return mod(old_s, m); +} +function modN(a) { return mod(a, N); } + +class EdPoint { + constructor(X, Y, Z, T) { this.X = X; this.Y = Y; this.Z = Z; this.T = T; } + static ZERO = new EdPoint(0n, 1n, 1n, 0n); + static BASE = new EdPoint(Gx, Gy, 1n, mod(Gx * Gy)); + + add(other) { + const a = -1n; // Ed25519 a = -1 + const { X: X1, Y: Y1, Z: Z1, T: T1 } = this; + const { X: X2, Y: Y2, Z: Z2, T: T2 } = other; + const A = mod(X1 * X2); + const B = mod(Y1 * Y2); + const C = mod(T1 * D_CONST * T2); + const DD = mod(Z1 * Z2); + const E = mod((X1 + Y1) * (X2 + Y2) - A - B); + const F = mod(DD - C); + const G = mod(DD + C); + const H = mod(B - a * A); + return new EdPoint(mod(E * F), mod(G * H), mod(F * G), mod(E * H)); + } + + double() { + const a = -1n; + const { X, Y, Z } = this; + const A = mod(X * X); + const B = mod(Y * Y); + const C = mod(2n * mod(Z * Z)); + const D2 = mod(a * A); + const E = mod(mod((X + Y) * (X + Y)) - A - B); + const G = mod(D2 + B); + const F = mod(G - C); + const H = mod(D2 - B); + return new EdPoint(mod(E * F), mod(G * H), mod(F * G), mod(E * H)); + } + + multiply(scalar) { + let result = EdPoint.ZERO; + let base = this; + let s = scalar; + while (s > 0n) { + if (s & 1n) result = result.add(base); + base = base.double(); + s >>= 1n; + } + return result; + } + + toAffine() { + const inv = modInv(this.Z); + return { x: mod(this.X * inv), y: mod(this.Y * inv) }; + } + + toBytes() { + const { x, y } = this.toAffine(); + const bytes = numberToLEBytes(y, 32); + if (x & 1n) bytes[31] |= 0x80; + return bytes; + } +} + +function numberToLEBytes(n, len) { + const bytes = new Uint8Array(len); + let v = n; + for (let i = 0; i < len; i++) { bytes[i] = Number(v & 0xffn); v >>= 8n; } + return bytes; +} +function bytesToNumberLE(bytes) { + let n = 0n; + for (let i = bytes.length - 1; i >= 0; i--) n = (n << 8n) | BigInt(bytes[i]); + return n; +} + +async function ed25519SignNoble(seed, message) { + // Hash seed to get (scalar, prefix) + const h = await sha512(seed); + const scalar_bytes = h.slice(0, 32); + scalar_bytes[0] &= 248; + scalar_bytes[31] &= 127; + scalar_bytes[31] |= 64; + const scalar = bytesToNumberLE(scalar_bytes); + const prefix = h.slice(32, 64); + + // Public key + const pubPoint = EdPoint.BASE.multiply(scalar); + const pubBytes = pubPoint.toBytes(); + + // r = SHA-512(prefix || message) mod N + const rHash = await sha512(concat(prefix, message)); + const r = modN(bytesToNumberLE(rHash)); + + // R = r * G + const R = EdPoint.BASE.multiply(r); + const RBytes = R.toBytes(); + + // S = (r + SHA-512(R || pubKey || message) * scalar) mod N + const kHash = await sha512(concat(RBytes, pubBytes, message)); + const k = modN(bytesToNumberLE(kHash)); + const S = modN(r + k * scalar); + const SBytes = numberToLEBytes(S, 32); + + // Signature = R || S + return concat(RBytes, SBytes); +} + +function concat(...arrays) { + const len = arrays.reduce((s, a) => s + a.length, 0); + const result = new Uint8Array(len); + let offset = 0; + for (const a of arrays) { result.set(a, offset); offset += a.length; } + return result; +} + +// ─── Device Identity Management ─── +async function getOrCreateDeviceIdentity() { + if (!crypto.subtle) return null; + try { + const stored = localStorage.getItem(DEVICE_STORAGE_KEY); + if (stored) { + const parsed = JSON.parse(stored); + if (parsed?.version === 1 && parsed.deviceId && parsed.publicKey && parsed.privateKey) { + // Verify deviceId matches publicKey + const computedId = await sha256Hex(b64urlDecode(parsed.publicKey)); + if (computedId !== parsed.deviceId) { + parsed.deviceId = computedId; + localStorage.setItem(DEVICE_STORAGE_KEY, JSON.stringify(parsed)); + } + return { deviceId: parsed.deviceId, publicKey: parsed.publicKey, privateKey: parsed.privateKey }; + } + } + } catch {} + + // Generate new keypair using our Ed25519 implementation + const seed = crypto.getRandomValues(new Uint8Array(32)); + const h = await sha512(seed); + const scalar_bytes = h.slice(0, 32); + scalar_bytes[0] &= 248; + scalar_bytes[31] &= 127; + scalar_bytes[31] |= 64; + const scalar = bytesToNumberLE(scalar_bytes); + const pubPoint = EdPoint.BASE.multiply(scalar); + const pubBytes = pubPoint.toBytes(); + const deviceId = await sha256Hex(pubBytes); + + const identity = { + version: 1, + deviceId, + publicKey: b64url(pubBytes), + privateKey: b64url(seed), + createdAtMs: Date.now() + }; + localStorage.setItem(DEVICE_STORAGE_KEY, JSON.stringify(identity)); + return { deviceId, publicKey: identity.publicKey, privateKey: identity.privateKey }; +} + +function getStoredDeviceToken(deviceId, role) { + try { + const stored = localStorage.getItem(DEVICE_AUTH_TOKEN_KEY); + if (!stored) return null; + const parsed = JSON.parse(stored); + if (!parsed || parsed.version !== 1 || parsed.deviceId !== deviceId) return null; + const entry = parsed.tokens[role.trim()]; + return entry?.token || null; + } catch { return null; } +} + +function storeDeviceToken(deviceId, role, token, scopes) { + const key = role.trim(); + let data = { version: 1, deviceId, tokens: {} }; + try { + const existing = JSON.parse(localStorage.getItem(DEVICE_AUTH_TOKEN_KEY)); + if (existing?.version === 1 && existing.deviceId === deviceId) { + data.tokens = { ...existing.tokens }; + } + } catch {} + data.tokens[key] = { token, role: key, scopes, updatedAtMs: Date.now() }; + localStorage.setItem(DEVICE_AUTH_TOKEN_KEY, JSON.stringify(data)); +} + +function clearDeviceToken(deviceId, role) { + try { + const existing = JSON.parse(localStorage.getItem(DEVICE_AUTH_TOKEN_KEY)); + if (!existing || existing.version !== 1 || existing.deviceId !== deviceId) return; + const tokens = { ...existing.tokens }; + delete tokens[role.trim()]; + localStorage.setItem(DEVICE_AUTH_TOKEN_KEY, JSON.stringify({ ...existing, tokens })); + } catch {} +} + +function buildDeviceAuthPayload(opts) { + const version = opts.version || (opts.nonce ? "v2" : "v1"); + const scopeStr = (opts.scopes || []).join(","); + const tokenStr = opts.token || ""; + const parts = [version, opts.deviceId, opts.clientId, opts.clientMode, opts.role, scopeStr, String(opts.signedAtMs), tokenStr]; + if (version === "v2" && opts.nonce) parts.push(opts.nonce); + return parts.join("|"); +} + +async function signPayload(privateKeyB64, payload) { + const seed = b64urlDecode(privateKeyB64); + const msg = new TextEncoder().encode(payload); + // Try native Web Crypto Ed25519 first (Chrome 113+, Firefox 128+) + try { + const pkcs8 = ed25519SeedToPkcs8(seed); + const key = await crypto.subtle.importKey("pkcs8", pkcs8, { name: "Ed25519" }, false, ["sign"]); + const sig = await crypto.subtle.sign("Ed25519", key, msg); + return b64url(new Uint8Array(sig)); + } catch { + // Fall back to noble implementation + const sig = await ed25519SignNoble(seed, msg); + return b64url(sig); + } +} + +function generateUUID() { + if (crypto.randomUUID) return crypto.randomUUID(); + const bytes = crypto.getRandomValues(new Uint8Array(16)); + bytes[6] = (bytes[6] & 0x0f) | 0x40; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + const hex = hexFromBytes(bytes); + return `${hex.slice(0,8)}-${hex.slice(8,12)}-${hex.slice(12,16)}-${hex.slice(16,20)}-${hex.slice(20)}`; +} + +// ─── Gateway Client ─── +class GatewayClient { + constructor(config) { + this.wsUrl = config.wsUrl; + this.token = config.token; + this.ws = null; + this.connected = false; + this.authenticated = false; + this.pendingRpc = new Map(); + this.subscribers = new Map(); + this.rpcIdCounter = 0; + this.reconnectDelay = 2000; + this.maxReconnectDelay = 30000; + this.onStatusChange = null; + this._shouldReconnect = true; + this._connectResolve = null; + this._connectReject = null; + this.serverInfo = null; + this.features = null; + this._connectNonce = null; + this._connectSent = false; + this._authFailed = false; + this._retryCount = 0; + this._maxRetries = 5; + this._retryDelays = [2000, 4000, 8000, 16000, 30000]; + this.lastError = null; + } + + connect() { + return new Promise((resolve, reject) => { + this._setStatus("reconnecting"); + this._connectResolve = resolve; + this._connectReject = reject; + this._connectNonce = null; + this._connectSent = false; + + try { + this.ws = new WebSocket(this.wsUrl); + } catch (e) { + this._setStatus("disconnected"); + this._connectResolve = null; + this._connectReject = null; + reject(e); + return; + } + + this.ws.onopen = () => { + console.log("[GW] WebSocket open"); + this.connected = true; + this._authFailed = false; + // If server doesn't send a challenge within 2s, send connect request anyway + this._challengeTimer = setTimeout(() => { + if (!this._connectSent && this.connected) { + console.log("[GW] No challenge received, sending connect without nonce"); + this._sendConnectRequest(null); + } + }, 2000); + }; + + this.ws.onmessage = (event) => { + let msg; + try { msg = JSON.parse(event.data); } catch { return; } + this._handleMessage(msg); + }; + + this.ws.onerror = () => { + if (!this.authenticated && this._connectReject) { + const rej = this._connectReject; + this._connectResolve = null; + this._connectReject = null; + rej(new Error("WebSocket error")); + } + }; + + this.ws.onclose = (ev) => { + this.connected = false; + const wasAuthenticated = this.authenticated; + this.authenticated = false; + + if (this._challengeTimer) { clearTimeout(this._challengeTimer); this._challengeTimer = null; } + + for (const [, { reject: rej }] of this.pendingRpc) { + rej(new Error("Connection closed")); + } + this.pendingRpc.clear(); + + if (this._connectReject) { + const rej = this._connectReject; + this._connectResolve = null; + this._connectReject = null; + rej(new Error("Connection closed before auth")); + } + + // Don't reconnect on explicit auth rejection + const noReconnectCodes = [4001, 4003, 4008, 4009]; + if (noReconnectCodes.includes(ev.code) || this._authFailed) { + console.warn(`[GW] Close code=${ev.code}, auth failed — NOT reconnecting`); + this._shouldReconnect = false; + this._setStatus("auth_failed"); + return; + } + + // Cap retries at _maxRetries + if (!wasAuthenticated) { + this._retryCount++; + if (this._retryCount >= this._maxRetries) { + console.warn(`[GW] Max retries (${this._maxRetries}) reached, stopping`); + this._shouldReconnect = false; + this._setStatus("max_retries"); + return; + } + } else { + // Successful connection was lost — reset retry count + this._retryCount = 0; + } + + this._setStatus("disconnected"); + + if (this._shouldReconnect) { + const delay = wasAuthenticated ? 2000 : (this._retryDelays[this._retryCount - 1] || 30000); + console.log(`[GW] Reconnecting in ${delay}ms (attempt ${this._retryCount}/${this._maxRetries}, code=${ev.code})`); + setTimeout(() => this._reconnect(), delay); + } else { + console.log(`[GW] Not reconnecting (code=${ev.code})`); + this._setStatus("disconnected"); + } + }; + }); + } + + async _handleMessage(msg) { + // Step 1: Challenge — build and send connect request with device auth + if (msg.type === "event" && msg.event === "connect.challenge") { + if (this._challengeTimer) { clearTimeout(this._challengeTimer); this._challengeTimer = null; } + const nonce = msg.payload?.nonce || null; + this._connectNonce = nonce; + await this._sendConnectRequest(nonce); + return; + } + + // Step 2: Connect response + if (msg.type === "res" && msg.id === "connect") { + if (msg.ok) { + console.log("[GW] Authenticated successfully"); + this.authenticated = true; + this.reconnectDelay = 1000; + this._authFailed = false; + this._setStatus("connected"); + const payload = msg.payload || {}; + this.serverInfo = payload.server; + this.features = payload.features; + + // Store device token if provided + if (payload.auth?.deviceToken) { + try { + const identity = await getOrCreateDeviceIdentity(); + if (identity) { + storeDeviceToken(identity.deviceId, "operator", payload.auth.deviceToken, payload.auth.scopes || []); + } + } catch {} + } + + if (this._connectResolve) { + const res = this._connectResolve; + this._connectResolve = null; + this._connectReject = null; + res(this); + } + } else { + console.error("[GW] Connect REJECTED:", msg.error); + this._authFailed = true; + this.lastError = msg.error?.message || "Connect rejected"; + + // Clear device token on auth failure + try { + const identity = await getOrCreateDeviceIdentity(); + if (identity) clearDeviceToken(identity.deviceId, "operator"); + } catch {} + + if (this._connectReject) { + const rej = this._connectReject; + this._connectResolve = null; + this._connectReject = null; + rej(new Error(this.lastError)); + } + + // Close WebSocket explicitly to prevent lingering connection + try { this.ws?.close(); } catch {} + } + return; + } + + // RPC response + if (msg.type === "res" && msg.id && this.pendingRpc.has(msg.id)) { + const { resolve, reject } = this.pendingRpc.get(msg.id); + this.pendingRpc.delete(msg.id); + if (!msg.ok || msg.error) { + reject(new Error(msg.error?.message || JSON.stringify(msg.error))); + } else { + resolve(msg.payload ?? msg); + } + return; + } + + // Event frames + if (msg.type === "event" && msg.event) { + if (msg.event === "tick") return; + + const listeners = this.subscribers.get(msg.event) || []; + for (const cb of listeners) { + try { cb(msg.payload ?? msg); } catch {} + } + const wildcardListeners = this.subscribers.get("*") || []; + for (const cb of wildcardListeners) { + try { cb({ event: msg.event, ...(msg.payload ?? {}) }); } catch {} + } + } + } + + async _sendConnectRequest(nonce) { + if (this._connectSent) return; + this._connectSent = true; + + const role = "operator"; + const scopes = ["operator.admin", "operator.read", "operator.write", "operator.approvals", "operator.pairing"]; + const clientId = "webchat-ui"; + const clientMode = "webchat"; + let authToken = this.token; + + // Build device identity for Ed25519 auth (required for scopes) + let deviceObj = null; + const hasSubtleCrypto = typeof crypto !== "undefined" && !!crypto.subtle; + + if (hasSubtleCrypto) { + try { + const identity = await getOrCreateDeviceIdentity(); + if (identity) { + // Try stored device token first (faster reconnect) + const storedToken = getStoredDeviceToken(identity.deviceId, role); + if (storedToken && this.token) { + // Prefer stored device token over shared gateway token + authToken = storedToken; + } + + const signedAtMs = Date.now(); + const payload = buildDeviceAuthPayload({ + deviceId: identity.deviceId, + clientId, + clientMode, + role, + scopes, + signedAtMs, + token: authToken || null, + nonce: nonce || undefined, + version: nonce ? "v2" : "v1", + }); + const signature = await signPayload(identity.privateKey, payload); + + deviceObj = { + id: identity.deviceId, + publicKey: identity.publicKey, + signature, + signedAt: signedAtMs, + nonce: nonce || undefined, + }; + } + } catch (e) { + console.warn("[GW] Device auth setup failed, falling back to token-only:", e); + } + } + + console.log("[GW] Sending connect request, token present:", !!authToken, "nonce:", !!nonce, "device:", !!deviceObj); + + this._send({ + type: "req", + id: "connect", + method: "connect", + params: { + minProtocol: 3, + maxProtocol: 3, + client: { + id: clientId, + version: "1.0.0", + platform: navigator?.platform || "web", + mode: clientMode, + displayName: "Bates Command Center", + instanceId: generateUUID(), + }, + role, + scopes, + device: deviceObj, + auth: { + token: authToken, + }, + caps: ["tool-events"], + userAgent: navigator?.userAgent, + }, + }); + } + + rpc(method, params = {}) { + return new Promise((resolve, reject) => { + if (!this.authenticated) { + reject(new Error("Not authenticated")); + return; + } + const id = `rpc-${++this.rpcIdCounter}`; + this.pendingRpc.set(id, { resolve, reject }); + this._send({ type: "req", id, method, params }); + + setTimeout(() => { + if (this.pendingRpc.has(id)) { + this.pendingRpc.delete(id); + reject(new Error(`RPC timeout: ${method}`)); + } + }, 15000); + }); + } + + subscribe(eventType, callback) { + if (!this.subscribers.has(eventType)) { + this.subscribers.set(eventType, []); + } + this.subscribers.get(eventType).push(callback); + return () => { + const list = this.subscribers.get(eventType); + if (list) { + const idx = list.indexOf(callback); + if (idx >= 0) list.splice(idx, 1); + } + }; + } + + _send(obj) { + if (this.ws && this.ws.readyState === WebSocket.OPEN) { + this.ws.send(JSON.stringify(obj)); + } + } + + _setStatus(status) { + if (this.onStatusChange) { + this.onStatusChange(status); + } + } + + _reconnect() { + if (!this._shouldReconnect) return; + this._setStatus("reconnecting"); + this.connect().catch(() => {}); + } + + disconnect() { + this._shouldReconnect = false; + if (this.ws) { + this.ws.close(); + } + } +} + +window.GatewayClient = GatewayClient; diff --git a/bates-core/plugins/dashboard/static/js/panel-agents.js b/bates-core/plugins/dashboard/static/js/panel-agents.js new file mode 100644 index 0000000..3ecce25 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-agents.js @@ -0,0 +1,230 @@ +/** + * Agents Panel — Org Chart Layout (v4 glassmorphism) + */ +(function () { + const D = window.Dashboard; + let sessionData = [], subagentData = [], agentFleetData = []; + let fastRefreshInterval = null; + + const TIERS = { + coo: [{ id: 'bates', name: 'Bates', role: 'Chief Operating Officer' }], + deputies: [ + { id: 'conrad', name: 'Conrad', role: 'Deputy Director, Project A Operations' }, + { id: 'soren', name: 'Soren', role: 'Deputy Director, Project B Operations' }, + { id: 'amara', name: 'Amara', role: 'Deputy Director, Project C Operations' }, + { id: 'jules', name: 'Jules', role: 'Deputy Director, Private Affairs' }, + { id: 'dash', name: 'Dash', role: 'Deputy Director, OpenClaw/Bates Rollout' }, + { id: 'mira', name: 'Mira', role: 'Deputy Director, Technology & Infrastructure' }, + ], + specialists: [ + { id: 'mercer', name: 'Mercer', role: 'Legal & Compliance Specialist' }, + { id: 'kira', name: 'Kira', role: 'Social Media & Content Specialist' }, + { id: 'nova', name: 'Nova', role: 'Research & Discovery Specialist' }, + { id: 'paige', name: 'Paige', role: 'Finance Specialist' }, + { id: 'quinn', name: 'Quinn', role: 'HR & People Specialist' }, + { id: 'archer', name: 'Archer', role: 'Documentation Specialist' }, + ], + }; + + async function fetchWithFallback(gatewayPath) { + return fetch(gatewayPath); + } + + window.AGENT_AVATARS = { + bates: '/dashboard/assets/avatar-transparent.png', + conrad: '/dashboard/assets/agent-baby_bolt.png', + soren: '/dashboard/assets/agent-baby_core.png', + amara: '/dashboard/assets/agent-baby_aqua.png', + jules: '/dashboard/assets/agent-baby_frost.png', + dash: '/dashboard/assets/agent-baby_Ember.png', + mercer: '/dashboard/assets/agent-baby_Dark.png', + kira: '/dashboard/assets/agent-baby_pixel.png', + nova: '/dashboard/assets/agent-baby_nova.png', + paige: '/dashboard/assets/agent-baby_Sage.png', + quinn: '/dashboard/assets/agent-baby_sky.png', + mira: '/dashboard/assets/agent-baby_Sage.png', + archer: '/dashboard/assets/agent-baby_sky.png', + }; + + const MODEL_FALLBACK = { + bates: 'Sonnet 4.6', conrad: 'Sonnet 4.6', mira: 'Opus 4.6', mercer: 'Opus 4.6', + soren: 'Sonnet 4.6', amara: 'Sonnet 4.6', jules: 'Sonnet 4.6', dash: 'Sonnet 4.6', kira: 'Sonnet 4.6', paige: 'Sonnet 4.6', + nova: 'Gemini Flash', quinn: 'Gemini Flash', archer: 'Gemini Flash', + }; + function mbClass(m) { if (!m) return 'other'; const l = m.toLowerCase(); return l.includes('opus') ? 'opus' : l.includes('sonnet') ? 'sonnet' : l.includes('gemini') ? 'gemini' : 'other'; } + function ago(ep) { if (!ep) return 'never'; const d = Date.now()/1000-ep; return d<0?'now':d<60?((d|0)+'s ago'):d<3600?((d/60|0)+'m ago'):d<86400?((d/3600|0)+'h ago'):((d/86400|0)+'d ago'); } + function find(n) { return agentFleetData.find(a => a.name?.toLowerCase() === n.toLowerCase()); } + + // Map TIERS id to filesystem/API id + const API_ID_MAP = { bates: 'main' }; + function apiId(id) { return API_ID_MAP[id] || id; } + + function openAgentDetail(id, name) { + const ov = document.getElementById('soul-modal-overlay'); if (!ov) return; + const def = [...TIERS.coo, ...TIERS.deputies, ...TIERS.specialists].find(a => a.id === id) || {}; + const fleetAgent = find(name) || {}; + const avatarSrc = window.AGENT_AVATARS[id] || ''; + const m = fleetAgent.model || MODEL_FALLBACK[id] || '', cls = mbClass(m); + const st = fleetAgent.status || 'idle'; + + // Build modal header + body + const titleEl = document.getElementById('soul-modal-title'); + const bodyEl = document.getElementById('soul-modal-body'); + titleEl.textContent = name + ' — Agent Detail'; + + bodyEl.innerHTML = ` +
+
+ ${avatarSrc ? `` : ''} +
+
${D.esc(name)}
+
${D.esc(def.role || fleetAgent.role || '')}
+
+ ${m ? `${D.esc(m.split('/').pop())}` : ''} + + ${D.esc(st)} + · ${D.esc(ago(fleetAgent.last_activity_epoch))} +
+
📥 ${fleetAgent.inbox_count||0}   📤 ${fleetAgent.outbox_count||0}
+
+
+
+
Recent Activity
+
Loading...
+
+
+
Recent Memory
+
Loading...
+
+
+
SOUL.md
+
Loading...
+
+
`; + + ov.classList.add('visible'); + + // Fetch agent API data + fetchWithFallback('/dashboard/api/agents') + .then(r => r.ok ? r.json() : null) + .then(agents => { + const agents2 = Array.isArray(agents) ? agents : (agents?.agents || []); + const aid = apiId(id); + const a = agents2.find(x => x.id === aid || x.id === id || x.name?.toLowerCase() === name.toLowerCase()); + const el = document.getElementById('agent-detail-activity'); + if (a && el) { + const hb = a.heartbeat_interval || '—'; + const lastAct = a.last_activity ? new Date(a.last_activity).toLocaleString() : 'never'; + el.innerHTML = `
Last activity: ${D.esc(lastAct)}
+
Heartbeat interval: ${D.esc(hb)}
+
Layer: ${a.layer || '—'}
`; + } + }).catch(() => { const el = document.getElementById('agent-detail-activity'); if (el) el.textContent = 'Could not load'; }); + + // Fetch SOUL.md + fetchWithFallback(`/dashboard/api/agents/${encodeURIComponent(apiId(id))}/soul`) + .then(r => r.ok ? r.json() : { content: null }) + .then(d => { const el = document.getElementById('agent-detail-soul'); if (el) el.textContent = d.content || 'No SOUL.md found.'; }) + .catch(() => { const el = document.getElementById('agent-detail-soul'); if (el) el.textContent = 'Error loading SOUL.md'; }); + + // Fetch today's memory + const today = new Date().toISOString().slice(0, 10); + fetchWithFallback(`/dashboard/api/agents/${encodeURIComponent(apiId(id))}/memory?date=${today}`) + .then(r => r.ok ? r.json() : {}) + .then(d => { + const el = document.getElementById('agent-detail-memory'); + if (el) { + const content = d.content || d.text || ''; + if (content) { + const lines = content.split('\n'); + el.textContent = lines.slice(-5).join('\n') || 'No entries today.'; + } else { el.textContent = 'No memory entries today.'; } + } + }) + .catch(() => { const el = document.getElementById('agent-detail-memory'); if (el) el.textContent = 'No memory available.'; }); + } + window._openSoulModal = openAgentDetail; + + function card(def, isCoo) { + const d = find(def.name), st = d?.status || 'idle', m = d?.model || MODEL_FALLBACK[def.id] || '', cls = mbClass(m); + const avatarSrc = window.AGENT_AVATARS[def.id] || ''; + const avatarHtml = avatarSrc ? `` : ''; + return `
+ ${avatarHtml} +
${D.esc(def.name)}
+
${D.esc(d?.role || def.role)}
+ ${m ? `${D.esc(m.split('/').pop())}` : ''} +
${D.esc(ago(d?.last_activity_epoch))}
+
📥 ${d?.inbox_count||0}📤 ${d?.outbox_count||0}
+
💓 ${D.esc(d?.heartbeat_interval||'—')}
+
`; + } + + function render() { + const el = document.getElementById('panel-agents'); if (!el) return; + let h = ''; + h += '
Layer 1 — COO
' + TIERS.coo.map(a => card(a, true)).join('') + '
'; + h += '
'; + h += '
Layer 2 — Deputies
' + TIERS.deputies.map(a => card(a, false)).join('') + '
'; + h += '
'; + h += '
Layer 3 — Specialists
' + TIERS.specialists.map(a => card(a, false)).join('') + '
'; + + el.innerHTML = h; + } + + async function refreshSub() { try { const d = await D.fetchApi('sessions'); if (Array.isArray(d)) subagentData = d; } catch {} } + async function refreshFleet() { try { const r = await fetchWithFallback('/dashboard/api/agents'); if (r.ok) { const d = await r.json(); agentFleetData = Array.isArray(d) ? d : (d.agents || []); } } catch {} } + + async function refresh(gw) { + if (gw?.authenticated) try { const r = await gw.rpc('sessions.list', {}); sessionData = r?.sessions || r?.items || (Array.isArray(r) ? r : []); } catch { sessionData = []; } + await Promise.all([refreshSub(), refreshFleet()]); + const a = agentFleetData.filter(x => x.status === 'active').length; + const ready = agentFleetData.filter(x => x.status === 'ready' || x.status === 'active').length; + window._updateOverviewMetrics?.({ activeAgents: a + '/' + ready }); + render(); + } + + async function init(gw) { + render(); + if (gw?.authenticated) await refresh(gw); else await Promise.all([refreshSub(), refreshFleet()]); + render(); + gw?.subscribe('agent', () => refresh(gw)); + gw?.subscribe('agent.lifecycle', () => refresh(gw)); + } + + let _refreshInterval = null; + let _lastUpdated = null; + + function updateTimestamp() { + const el = document.getElementById('panel-agents'); + if (!el) return; + let ts = el.querySelector('.panel-last-updated'); + if (!ts) { ts = document.createElement('div'); ts.className = 'panel-last-updated'; el.appendChild(ts); } + if (_lastUpdated) { + const s = ((Date.now() - _lastUpdated) / 1000) | 0; + ts.textContent = `last updated: ${s}s ago`; + } + } + + const _origRefresh = refresh; + refresh = async function(gw) { + await _origRefresh(gw); + _lastUpdated = Date.now(); + updateTimestamp(); + }; + + function startAutoRefresh(gw) { + stopAutoRefresh(); + _refreshInterval = setInterval(() => { refresh(gw); }, 60000); + setInterval(updateTimestamp, 10000); + } + function stopAutoRefresh() { if (_refreshInterval) { clearInterval(_refreshInterval); _refreshInterval = null; } } + + const _origInit = init; + init = async function(gw) { + await _origInit(gw); + startAutoRefresh(gw); + }; + + D.registerPanel('agents', { init, refresh, stopAutoRefresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-ceo.js b/bates-core/plugins/dashboard/static/js/panel-ceo.js new file mode 100644 index 0000000..bb0b90c --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-ceo.js @@ -0,0 +1,91 @@ +/** + * CEO Dashboard Panel — Tasks + project data + metrics (v4) + */ +(function () { + const D = window.Dashboard; + + function priClass(p) { return p === 'high' || p === 1 ? 'high' : p === 'medium' || p === 5 ? 'medium' : p === 'low' || p === 9 ? 'low' : 'none'; } + + function renderTasks(tasks) { + const el = document.getElementById('panel-ceo-tasks'); + if (!el) return; + if (!tasks?.length) { + el.innerHTML = '
No tasks found
No tasks loaded
'; + return; + } + let h = ''; + for (const t of tasks) { + const done = t.status === 'completed' || t.completed; + h += `
+
+
+
+
${D.esc(t.title || t.subject || '—')}
+
+ ${t.dueDate ? `Due: ${D.esc(t.dueDate)}` : ''} + ${t.planName ? `${D.esc(t.planName)}` : ''} + ${t.source ? `${D.esc(t.source)}` : ''} +
+
+
`; + } + el.innerHTML = h; + const pending = tasks.filter(t => !t.completed && t.status !== 'completed').length; + window._updateOverviewMetrics?.({ tasks: pending }); + } + + function renderProjectBodies(agents, tasksData) { + const projects = [ + { el: 'project-project_a', agent: 'conrad', key: 'project_a' }, + { el: 'project-project_b', agent: 'soren', key: 'project_b' }, + { el: 'project-private', agent: 'jules', key: 'private' }, + { el: 'project-project_c', agent: 'amara', key: 'project_c' }, + { el: 'project-bates', agent: 'dash', key: 'bates' }, + ]; + const byProject = tasksData?.byProject || {}; + for (const p of projects) { + const container = document.getElementById(p.el); + if (!container) continue; + const a = agents?.find(x => x.name?.toLowerCase() === p.agent); + const proj = byProject[p.key]; + let html = ''; + if (a) { + html += ` ${D.esc(a.status||'idle')} · Last: ${D.esc(D.timeAgo(a.lastHeartbeat||a.last_heartbeat||a.last_activity))}`; + } + if (proj) { + const pending = (proj.tasks || []).filter(t => !t.completed).length; + html += `
📋 ${proj.count || 0} tasks (${pending} pending)
`; + } + container.innerHTML = html || 'No data'; + } + } + + async function refresh() { + let tasks = null, status = null, agents = null; + try { + const [tR, sR, aR] = await Promise.allSettled([ + D.fetchApi('tasks'), + D.fetchApi('status'), + D.fetchApi('agents'), + ]); + tasks = tR.status === 'fulfilled' ? tR.value : null; + status = sR.status === 'fulfilled' ? sR.value : null; + agents = aR.status === 'fulfilled' ? aR.value : null; + } catch {} + + let list = tasks ? (Array.isArray(tasks) ? tasks : (tasks.tasks || tasks.items || [])) : []; + // Only render in CEO panel if tasks panel isn't handling it + if (list.length) { + // Update metrics from real data + const pending = list.filter(t => !t.completed && t.status !== 'completed').length; + window._updateOverviewMetrics?.({ tasks: pending }); + } + + if (status?.unread_emails !== undefined) window._updateOverviewMetrics?.({ emails: status.unread_emails }); + + const agentList = agents ? (Array.isArray(agents) ? agents : (agents.agents || [])) : []; + renderProjectBodies(agentList, tasks); + } + + D.registerPanel('ceo', { init: refresh, refresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-chat.js b/bates-core/plugins/dashboard/static/js/panel-chat.js new file mode 100644 index 0000000..2824ed4 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-chat.js @@ -0,0 +1,421 @@ +/** + * Chat Panel + * Interactive chat with agent sessions via WebSocket RPC + */ +(function () { + const D = window.Dashboard; + + let sessions = []; + let activeSessionKey = null; + let messages = []; + let streamingText = ""; + let activeRunId = null; + let isStreaming = false; + let unsubChat = null; + let gwRef = null; + + function generateUUID() { + if (crypto.randomUUID) return crypto.randomUUID(); + return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => + (+c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> +c / 4))).toString(16) + ); + } + + function extractText(content) { + if (!content) return ""; + if (typeof content === "string") return content; + if (Array.isArray(content)) { + const texts = content + .filter((b) => b && b.type === "text" && b.text) + .map((b) => b.text); + if (texts.length) return texts.join("\n"); + // Fallback: try to extract any string values from array items + return content + .map((b) => (typeof b === "string" ? b : b && b.text ? b.text : "")) + .filter(Boolean) + .join("\n"); + } + // Handle nested content (e.g., {content: "text"} or {content: [{type:"text", text:"..."}]}) + if (content.content !== undefined) return extractText(content.content); + if (content.text) return String(content.text); + if (content.message) return String(content.message); + // Last resort: try JSON but never return [object Object] + try { + const s = JSON.stringify(content); + return s !== "{}" ? s : ""; + } catch { + return ""; + } + } + + function renderSessionTabs() { + const bar = document.getElementById("chat-session-bar"); + if (!bar) return; + if (!sessions.length) { + bar.innerHTML = 'No sessions available'; + return; + } + const sorted = [...sessions].sort((a, b) => { + const aIsSub = (a.key || "").startsWith("subagent:"); + const bIsSub = (b.key || "").startsWith("subagent:"); + if (aIsSub !== bIsSub) return aIsSub ? 1 : -1; + return (b.updatedAt || 0) - (a.updatedAt || 0); + }); + let html = ""; + for (const s of sorted) { + const key = s.key || ""; + const label = s.displayName || s.label || key.split(":").pop() || "Unknown"; + const isActive = key === activeSessionKey; + const isSub = key.startsWith("subagent:"); + const isRunning = s.updatedAt && Date.now() - s.updatedAt < 300000; + html += ``; + } + bar.innerHTML = html; + } + + function renderMessages() { + const el = document.getElementById("chat-messages"); + if (!el) return; + + if (!messages.length && !streamingText && !isStreaming) { + el.innerHTML = + '
💬Select a session to begin
'; + return; + } + + let html = ""; + for (const msg of messages) { + const text = extractText(msg.content); + if (!text) continue; + const role = msg.role || "system"; + const ts = msg.timestamp + ? new Date(typeof msg.timestamp === "number" ? msg.timestamp : msg.timestamp).toLocaleTimeString("en-GB", { + hour: "2-digit", + minute: "2-digit", + }) + : ""; + html += `
`; + html += `
${D.esc(text)}
`; + if (ts) html += `
${ts}
`; + html += `
`; + } + + if (isStreaming && streamingText) { + html += `
`; + html += `
${D.esc(streamingText)}
`; + html += `
`; + } else if (isStreaming) { + html += `
`; + html += `
Thinking...
`; + html += `
`; + } + + el.innerHTML = html; + + const scrollContainer = document.getElementById("chat-messages-scroll"); + if (scrollContainer) scrollContainer.scrollTop = scrollContainer.scrollHeight; + + updateInputBar(); + } + + function updateInputBar() { + const sendBtn = document.getElementById("chat-send-btn"); + const stopBtn = document.getElementById("chat-stop-btn"); + if (sendBtn) sendBtn.style.display = isStreaming ? "none" : ""; + if (stopBtn) stopBtn.style.display = isStreaming ? "" : "none"; + } + + async function loadHistory(gw) { + if (!gw || !gw.authenticated || !activeSessionKey) { + messages = []; + renderMessages(); + return; + } + try { + console.log("[Chat] Requesting chat.history for session:", activeSessionKey); + const result = await gw.rpc("chat.history", { sessionKey: activeSessionKey, limit: 200 }); + console.log("[Chat] chat.history result keys:", result ? Object.keys(result) : "null"); + const raw = result?.messages || []; + // Filter to user and assistant messages with actual text content + messages = raw.filter(m => { + const text = extractText(m.content); + return text && text.trim().length > 0 && (m.role === "user" || m.role === "assistant"); + }); + console.log("[Chat] Loaded", raw.length, "raw messages,", messages.length, "after filtering"); + if (raw.length > 0 && messages.length === 0) { + console.log("[Chat] All messages filtered out. Sample roles:", raw.slice(0, 5).map(m => m.role)); + console.log("[Chat] Sample message:", JSON.stringify(raw[0]).slice(0, 300)); + } + } catch (e) { + console.error("[Chat] chat.history failed:", e); + messages = []; + } + streamingText = ""; + isStreaming = false; + activeRunId = null; + renderMessages(); + } + + function subscribeToChatEvents(gw) { + if (unsubChat) { + unsubChat(); + unsubChat = null; + } + if (!gw) return; + unsubChat = gw.subscribe("chat", (payload) => { + if (payload.sessionKey !== activeSessionKey) return; + const state = payload.state; + + if (state === "delta") { + isStreaming = true; + activeRunId = payload.runId || activeRunId; + const text = extractText(payload.message); + // Deltas from gateway are CUMULATIVE (full text so far) — always replace + if (text) streamingText = text; + renderMessages(); + } else if (state === "final") { + isStreaming = false; + streamingText = ""; + activeRunId = null; + loadHistory(gw); + } else if (state === "aborted" || state === "error") { + isStreaming = false; + streamingText = ""; + activeRunId = null; + if (state === "error" && payload.errorMessage) { + messages.push({ role: "system", content: "Error: " + payload.errorMessage }); + } + loadHistory(gw); + } + }); + } + + async function selectSession(gw, sessionKey) { + activeSessionKey = sessionKey; + streamingText = ""; + isStreaming = false; + activeRunId = null; + renderSessionTabs(); + await loadHistory(gw); + subscribeToChatEvents(gw); + } + + async function sendMessage(gw) { + const input = document.getElementById("chat-input"); + if (!input) return; + const text = input.value.trim(); + if (!text || !activeSessionKey || !gw || !gw.authenticated) return; + + input.value = ""; + input.style.height = "auto"; + + // Optimistic local append + messages.push({ role: "user", content: text, timestamp: Date.now() }); + isStreaming = true; + streamingText = ""; + renderMessages(); + + try { + const result = await gw.rpc("chat.send", { + sessionKey: activeSessionKey, + message: text, + deliver: false, + idempotencyKey: generateUUID(), + }); + activeRunId = result?.runId || null; + } catch (e) { + console.error("chat.send failed:", e); + isStreaming = false; + messages.push({ role: "system", content: "Failed to send: " + e.message }); + renderMessages(); + } + } + + async function abortAgent(gw) { + if (!gw || !gw.authenticated || !activeSessionKey) return; + try { + await gw.rpc("chat.abort", { + sessionKey: activeSessionKey, + runId: activeRunId || undefined, + }); + } catch (e) { + console.error("chat.abort failed:", e); + } + isStreaming = false; + streamingText = ""; + activeRunId = null; + renderMessages(); + } + + async function refreshSessions(gw) { + if (!gw || !gw.authenticated) { + console.log("[Chat] refreshSessions skipped — gw:", !!gw, "authenticated:", gw?.authenticated); + return; + } + try { + console.log("[Chat] Calling sessions.list..."); + const result = await gw.rpc("sessions.list", {}); + console.log("[Chat] sessions.list result keys:", result ? Object.keys(result) : "null"); + const payload = result?.sessions || result?.items || (Array.isArray(result) ? result : []); + sessions = Array.isArray(payload) ? payload : []; + console.log("[Chat] Got", sessions.length, "sessions"); + } catch (e) { + console.error("[Chat] sessions.list failed:", e); + sessions = []; + } + // Always ensure main session is available for chat + if (!sessions.find(s => s.key === "agent:main:main")) { + sessions.unshift({ key: "agent:main:main", displayName: "Main", label: "main", updatedAt: Date.now() }); + } + renderSessionTabs(); + + // If selected session disappeared, clear + if (activeSessionKey && !sessions.find((s) => s.key === activeSessionKey)) { + activeSessionKey = null; + messages = []; + streamingText = ""; + isStreaming = false; + activeRunId = null; + renderMessages(); + const input = document.getElementById("chat-input"); + const sendBtn = document.getElementById("chat-send-btn"); + if (input) input.disabled = true; + if (sendBtn) sendBtn.disabled = true; + } + } + + function showConnStatus(msg, type) { + const el = document.getElementById("chat-conn-status"); + if (!el) return; + el.textContent = msg; + el.className = "chat-conn-status chat-conn-" + (type || "info"); + el.style.display = msg ? "block" : "none"; + } + + async function init(gw) { + gwRef = gw; + const el = document.getElementById("panel-chat"); + if (!el) return; + + el.innerHTML = ` + +
+
+
+
💬Select a session to begin
+
+
+
+ + + +
+ `; + + // Session tab click handler + const bar = document.getElementById("chat-session-bar"); + bar.addEventListener("click", (e) => { + const tab = e.target.closest(".chat-session-tab"); + if (!tab) return; + const key = tab.dataset.sessionKey; + if (key) { + selectSession(gw, key); + const input = document.getElementById("chat-input"); + const sendBtn = document.getElementById("chat-send-btn"); + if (input) input.disabled = false; + if (sendBtn) sendBtn.disabled = false; + } + }); + + // Send button + document.getElementById("chat-send-btn").addEventListener("click", () => sendMessage(gw)); + + // Stop button + document.getElementById("chat-stop-btn").addEventListener("click", () => abortAgent(gw)); + + // Textarea: Enter to send, Shift+Enter for newline, auto-resize + const input = document.getElementById("chat-input"); + input.addEventListener("keydown", (e) => { + if (e.key === "Enter" && !e.shiftKey) { + e.preventDefault(); + sendMessage(gw); + } + }); + input.addEventListener("input", () => { + input.style.height = "auto"; + input.style.height = Math.min(input.scrollHeight, 120) + "px"; + }); + + // Track connection status in chat panel + if (gw) { + const origOnStatus = gw.onStatusChange; + gw.onStatusChange = function(status) { + if (origOnStatus) origOnStatus(status); + if (status === "connected") { + showConnStatus("Connected", "ok"); + setTimeout(() => showConnStatus("", "ok"), 2000); + // Re-initialize chat on connect/reconnect + loadAndAutoSelect().catch(() => {}); + if (activeSessionKey) subscribeToChatEvents(gw); + } else if (status === "reconnecting") { + showConnStatus("Reconnecting... (attempt " + (gw._retryCount + 1) + "/" + gw._maxRetries + ")", "warn"); + } else if (status === "auth_failed") { + showConnStatus("WebSocket auth failed. Connection paused. " + (gw.lastError || ""), "error"); + } else if (status === "max_retries") { + showConnStatus("Connection failed after " + gw._maxRetries + " attempts. Refresh page to retry.", "error"); + } else if (status === "disconnected") { + showConnStatus("Disconnected", "warn"); + } + }; + } + + // Load sessions and auto-select main (with retry for auth timing) + async function loadAndAutoSelect() { + console.log("[Chat] loadAndAutoSelect — gw:", !!gw, "authenticated:", gw?.authenticated, "connected:", gw?.connected); + if (!gw || !gw.authenticated) return false; + showConnStatus("Connected", "ok"); + setTimeout(() => showConnStatus("", "ok"), 2000); + await refreshSessions(gw); + if (!activeSessionKey && sessions.length > 0) { + const main = sessions.find((s) => s.key === "agent:main:main") || sessions[0]; + if (main) { + await selectSession(gw, main.key); + input.disabled = false; + document.getElementById("chat-send-btn").disabled = false; + } + } + return true; + } + + showConnStatus("Connecting to gateway...", "info"); + + if (!(await loadAndAutoSelect())) { + // Auth not ready yet — retry up to 10 times + let retries = 0; + const retryInterval = setInterval(async () => { + retries++; + if (await loadAndAutoSelect() || retries >= 10) { + clearInterval(retryInterval); + if (retries >= 10 && (!gw || !gw.authenticated)) { + showConnStatus("Connection failed — retrying in background", "error"); + } + } + }, 500); + } + + // Subscribe to lifecycle events + if (gw) { + gw.subscribe("agent", () => refreshSessions(gw)); + } + } + + async function refresh(gw) { + gwRef = gw; + await refreshSessions(gw); + if (activeSessionKey) subscribeToChatEvents(gw); + } + + D.registerPanel("chat", { init, refresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-costs.js b/bates-core/plugins/dashboard/static/js/panel-costs.js new file mode 100644 index 0000000..08fd50d --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-costs.js @@ -0,0 +1,153 @@ +/** + * Costs Panel — Real-time Token Usage & Operational Costs + */ +(function () { + const D = window.Dashboard; + + function fmt(n) { + if (n >= 1e9) return (n / 1e9).toFixed(1) + 'B'; + if (n >= 1e6) return (n / 1e6).toFixed(1) + 'M'; + if (n >= 1e3) return (n / 1e3).toFixed(1) + 'K'; + return String(n); + } + + function fmtDollar(n) { return '$' + n.toFixed(2); } + + function todayKey() { + const d = new Date(); + return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0'); + } + + function render(data) { + const el = document.getElementById('panel-costs'); + if (!el) return; + + if (!data || data.error) { + el.innerHTML = '
⏳ Awaiting data...
'; + return; + } + + const today = todayKey(); + const todayData = data[today]; + + // 7-day aggregation + let tokens7 = 0, cost7 = 0, interactions7 = 0; + const now = new Date(); + for (let i = 0; i < 7; i++) { + const d = new Date(now); + d.setDate(d.getDate() - i); + const k = d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0'); + if (data[k]) { + tokens7 += data[k].totalTokens || 0; + cost7 += data[k].totalCost || 0; + interactions7 += data[k].interactions || 0; + } + } + + let h = ''; + + // Today's summary + if (todayData) { + h += `
+
Today's Usage
+
${fmt(todayData.totalTokens)} tokens
+
${(todayData.interactions || 0).toLocaleString()} interactions · Notional: ${fmtDollar(todayData.totalCost || 0)}
+
`; + } else { + h += `
+
Today's Usage
+
No data yet
+
`; + } + + // 7-day summary + h += `
+
7-Day Total
+
${fmt(tokens7)} tokens
+
${interactions7.toLocaleString()} interactions · Notional: ${fmtDollar(cost7)}
+
`; + + // Non-Anthropic cost note (only if there are non-Anthropic costs) + const nonAnthCost = todayData ? getNonAnthropicCost(todayData) : 0; + if (nonAnthCost > 0) { + h += `
+ 💰 Non-Anthropic API cost today: ${fmtDollar(nonAnthCost)} +
`; + } + + // Model breakdown for today + if (todayData && todayData.byModel) { + h += '
'; + h += '
ModelTokensNotional
'; + const models = Object.entries(todayData.byModel) + .filter(([, v]) => v.tokens > 0 || v.count > 0) + .sort((a, b) => b[1].tokens - a[1].tokens); + for (const [name, v] of models) { + const badge = `${fmtDollar(v.cost)}`; + h += `
+
+
${D.esc(name)}
+
${v.count} calls
+
+
${fmt(v.tokens)}
+
${badge}
+
`; + } + h += '
'; + } + + el.innerHTML = h; + } + + function getNonAnthropicCost(dayData) { + if (!dayData || !dayData.byModel) return 0; + let cost = 0; + for (const [name, v] of Object.entries(dayData.byModel)) { + if (!name.startsWith('claude-')) cost += v.cost || 0; + } + return cost; + } + + async function refresh() { + try { + const r = await fetch('/dashboard/api/costs'); + if (r.ok) { render(await r.json()); return; } + } catch {} + render(null); + } + + let _refreshInterval = null; + let _lastUpdated = null; + + function updateTimestamp() { + const el = document.getElementById('panel-costs'); + if (!el) return; + let ts = el.querySelector('.panel-last-updated'); + if (!ts) { ts = document.createElement('div'); ts.className = 'panel-last-updated'; el.appendChild(ts); } + if (_lastUpdated) { + const s = ((Date.now() - _lastUpdated) / 1000) | 0; + ts.textContent = `last updated: ${s}s ago`; + } + } + + const _origRefresh = refresh; + async function autoRefresh() { + await _origRefresh(); + _lastUpdated = Date.now(); + updateTimestamp(); + } + + function startAutoRefresh() { + stopAutoRefresh(); + _refreshInterval = setInterval(autoRefresh, 60000); + setInterval(updateTimestamp, 10000); + } + function stopAutoRefresh() { if (_refreshInterval) { clearInterval(_refreshInterval); _refreshInterval = null; } } + + async function initPanel() { + await autoRefresh(); + startAutoRefresh(); + } + + D.registerPanel('costs', { init: initPanel, refresh: autoRefresh, stopAutoRefresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-crons.js b/bates-core/plugins/dashboard/static/js/panel-crons.js new file mode 100644 index 0000000..b96ed48 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-crons.js @@ -0,0 +1,144 @@ +/** + * Cron Jobs Panel — Categorized card grid (v4) + * Excludes heartbeats from upcoming section on overview + */ +(function () { + const D = window.Dashboard; + + function cronH(e) { + if (!e) return ''; const p = e.split(' '); if (p.length < 5) return e; + const [m, h, , , d] = p; + if (e.startsWith('0 */')) return `Every ${p[1].replace('*/','')}h`; + if (e.startsWith('*/')) return `Every ${m.replace('*/','')}m`; + if (d === '1-5') return `Weekdays ${h}:${m.padStart(2,'0')}`; + if (d === '1') return `Mon ${h}:${m.padStart(2,'0')}`; + if (d === '5') return `Fri ${h}:${m.padStart(2,'0')}`; + if (d === '*') { if (h.includes('-')) return `Daily ${h} at :${m.padStart(2,'0')}`; return `Daily ${h}:${m.padStart(2,'0')}`; } + return e; + } + function evH(ms) { if (!ms) return ''; const s = Math.round(ms/1000); return s<60?`Every ${s}s`:s<3600?`Every ${Math.round(s/60)}m`:`Every ${(s/3600).toFixed(1).replace(/\.0$/,'')}h`; } + function fmtTs(ms) { + if (!ms) return '—'; const d = new Date(ms), pad = n => String(n).padStart(2,'0'); + const ds = `${pad(d.getDate())}/${pad(d.getMonth()+1)} ${pad(d.getHours())}:${pad(d.getMinutes())}`; + const diff = ms - Date.now(), a = Math.abs(diff); + if (a < 864e5) { const h = (a/36e5)|0, m = ((a%36e5)/6e4)|0; return `${ds} (${diff>0?'in ':''}${h}h${m}m${diff<=0?' ago':''})`; } + return ds; + } + function isHeartbeat(j) { + const n = (j.name||j.id||'').toLowerCase(); + return n.includes('heartbeat') || n.includes('hb-') || n.includes('checkin'); + } + function cat(j) { + if (isHeartbeat(j)) return 'Agent Heartbeats'; + const n = (j.name||j.id||'').toLowerCase(); + if (n.includes('report')||n.includes('standup')||n.includes('digest')) return 'Scheduled Reports'; + return 'System Tasks'; + } + + function renderCard(j) { + const name = j.name||j.id, s = j.schedule, st = j.state||{}; + const dis = !j.enabled, run = st.lastStatus === 'running'; + let sched = ''; + if (s?.kind === 'cron') sched = cronH(s.expr); + else if (s?.kind === 'every' || s?.everyMs) sched = evH(s.everyMs); + else if (s?.expr) sched = cronH(s.expr); + const runCount = st.runCount != null ? st.runCount : '—'; + return `
+
${D.esc(name)}
+
${D.esc(sched)}
+
+ Last: ${D.esc(st.lastRunAtMs ? fmtTs(st.lastRunAtMs) : 'never')}${st.lastStatus?' ('+D.esc(st.lastStatus)+')':''} + ${st.nextRunAtMs ? `Next: ${D.esc(fmtTs(st.nextRunAtMs))}` : ''} +
+
▸ click for details
+
+ ⏱ Last run: ${D.esc(st.lastRunAtMs ? fmtTs(st.lastRunAtMs) : 'never')} + ⏭ Next run: ${D.esc(st.nextRunAtMs ? fmtTs(st.nextRunAtMs) : '—')} + 📊 Status: ${D.esc(st.lastStatus || 'unknown')} + 🔢 Run count: ${D.esc(String(runCount))} + ${j.target ? `🎯 Target: ${D.esc(j.target)}` : ''} + ${j.channel ? `📡 Channel: ${D.esc(j.channel)}` : ''} +
+
+ + +
+
`; + } + + function render(jobs) { + const el = document.getElementById('panel-crons'); + if (!el) return; + if (!jobs?.length) { el.innerHTML = '
No cron jobs
'; return; } + + const groups = {}; + for (const j of jobs) { const c = cat(j); (groups[c] = groups[c] || []).push(j); } + + let h = '
'; + for (const [c, cj] of Object.entries(groups)) { + cj.sort((a,b) => (a.state?.lastStatus==='running'?-1:0)-(b.state?.lastStatus==='running'?-1:0) || (a.state?.nextRunAtMs||Infinity)-(b.state?.nextRunAtMs||Infinity)); + h += `
${c} ${cj.length}
`; + h += cj.map(renderCard).join(''); + } + h += '
'; + el.innerHTML = h; + renderUpcoming(jobs); + } + + function renderUpcoming(jobs) { + const el = document.getElementById('panel-crons-upcoming'); if (!el) return; + // Exclude heartbeats from upcoming on overview + const up = jobs + .filter(j => j.enabled && j.state?.nextRunAtMs && !isHeartbeat(j)) + .sort((a,b) => a.state.nextRunAtMs - b.state.nextRunAtMs) + .slice(0,5); + if (!up.length) { el.innerHTML = '
No upcoming crons
'; return; } + el.innerHTML = up.map(j => `
${D.esc(j.name||j.id)}
${D.esc(fmtTs(j.state.nextRunAtMs))}
`).join(''); + if (up[0]) { + const d = up[0].state.nextRunAtMs - Date.now(); + if (d > 0) { const m = (d/6e4)|0; window._updateOverviewMetrics?.({ nextCron: m >= 60 ? `${(m/60)|0}h ${m%60}m` : `${m}m` }); } + } + } + + async function refresh(gw) { + let jobs = null; + if (gw?.authenticated) try { const r = await gw.rpc('cron.list', {}); jobs = r?.jobs || r?.items || (Array.isArray(r) ? r : null); } catch {} + if (!jobs) { const d = await D.fetchApi('crons'); jobs = d?.jobs || []; } + render(jobs || []); + } + + let _refreshInterval = null; + let _lastUpdated = null; + + function updateTimestamp() { + const el = document.getElementById('panel-crons'); + if (!el) return; + let ts = el.querySelector('.panel-last-updated'); + if (!ts) { ts = document.createElement('div'); ts.className = 'panel-last-updated'; el.appendChild(ts); } + if (_lastUpdated) { + const s = ((Date.now() - _lastUpdated) / 1000) | 0; + ts.textContent = `last updated: ${s}s ago`; + } + } + + const _origRefresh = refresh; + async function autoRefresh(gw) { + await _origRefresh(gw); + _lastUpdated = Date.now(); + updateTimestamp(); + } + + function startAutoRefresh(gw) { + stopAutoRefresh(); + _refreshInterval = setInterval(() => autoRefresh(gw), 60000); + setInterval(updateTimestamp, 10000); + } + function stopAutoRefresh() { if (_refreshInterval) { clearInterval(_refreshInterval); _refreshInterval = null; } } + + async function initPanel(gw) { + await autoRefresh(gw); + startAutoRefresh(gw); + } + + D.registerPanel('crons', { init: initPanel, refresh: autoRefresh, stopAutoRefresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-delegations.js b/bates-core/plugins/dashboard/static/js/panel-delegations.js new file mode 100644 index 0000000..2020564 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-delegations.js @@ -0,0 +1,122 @@ +/** + * Claude Code Delegations Panel + * Shows running and recent Claude Code delegations with status tracking. + */ +(function () { + const D = window.Dashboard; + let delegations = []; + let fastRefreshInterval = null; + + function statusBadge(status) { + const cls = { + running: "agent-status-running", + completed: "agent-status-completed", + failed: "agent-status-failed", + }; + const labels = { + running: "\u25CF Running", + completed: "\u2713 Done", + failed: "\u2717 Failed", + }; + return '' + (labels[status] || status) + ""; + } + + function formatDuration(ms) { + if (!ms) return ""; + var s = Math.floor(ms / 1000); + if (s < 60) return s + "s"; + var m = Math.floor(s / 60); + if (m < 60) return m + "m " + (s % 60) + "s"; + var h = Math.floor(m / 60); + return h + "h " + (m % 60) + "m"; + } + + function renderCard(d) { + var elapsed = d.durationMs || (Date.now() - d.startedAt); + var duration = formatDuration(elapsed); + var started = D.timeAgo(new Date(d.startedAt).toISOString()); + var desc = (d.description || "").slice(0, 120); + if (d.description && d.description.length > 120) desc += "..."; + var promptName = (d.promptPath || "").split("/").pop() || ""; + var logName = (d.logPath || "").split("/").pop() || ""; + var isRunning = d.status === "running"; + + return '
' + + '
' + (isRunning ? "\u{1F4BB}" : d.status === "completed" ? "\u2705" : "\u274C") + "
" + + '
' + + '
' + D.esc(d.name) + "
" + + '
' + D.esc(started) + + (duration ? " \u00B7 " + duration : "") + + (d.exitCode !== undefined && d.exitCode !== null ? " \u00B7 exit " + d.exitCode : "") + + "
" + + (desc ? '
' + D.esc(desc) + "
" : "") + + '
' + + (promptName ? '\u{1F4C4} ' + D.esc(promptName) + "" : "") + + (logName ? '\u{1F4CB} ' + D.esc(logName) + "" : "") + + "
" + + "
" + + statusBadge(d.status) + + "
"; + } + + function render() { + var el = document.getElementById("panel-delegations"); + if (!el) return; + + if (delegations.length === 0) { + el.innerHTML = '
\u{1F4BB}No Claude Code delegations
'; + manageFastRefresh(false); + return; + } + + var running = delegations.filter(function (d) { return d.status === "running"; }); + var completed = delegations.filter(function (d) { return d.status === "completed"; }).slice(0, 10); + var failed = delegations.filter(function (d) { return d.status === "failed"; }).slice(0, 5); + + var html = '
'; + if (running.length > 0) { + html += '
Running
'; + html += running.map(renderCard).join(""); + } + if (completed.length > 0) { + html += (running.length > 0 ? '
Recent
' : ""); + html += completed.map(renderCard).join(""); + } + if (failed.length > 0) { + html += '
Failed
'; + html += failed.map(renderCard).join(""); + } + html += "
"; + el.innerHTML = html; + + manageFastRefresh(running.length > 0); + } + + function manageFastRefresh(hasRunning) { + if (hasRunning && !fastRefreshInterval) { + fastRefreshInterval = setInterval(refresh, 5000); + } else if (!hasRunning && fastRefreshInterval) { + clearInterval(fastRefreshInterval); + fastRefreshInterval = null; + } + } + + async function refresh() { + try { + var data = await D.fetchApi("delegations"); + if (data && Array.isArray(data.delegations)) { + delegations = data.delegations; + } + } catch (e) { + // Keep existing data + } + render(); + } + + async function init() { + render(); + await refresh(); + } + + D.registerPanel("delegations", { init: init, refresh: refresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-files.js b/bates-core/plugins/dashboard/static/js/panel-files.js new file mode 100644 index 0000000..055753c --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-files.js @@ -0,0 +1,163 @@ +/** + * File Explorer Panel + * Shows recently modified files in the workspace + */ +(function () { + const D = window.Dashboard; + + function fileIcon(name) { + if (name.endsWith(".md")) return "📄"; + if (name.endsWith(".json")) return "{"; + if (name.endsWith(".sh")) return "⚙"; + if (name.endsWith(".ts") || name.endsWith(".js")) return "✎"; + if (name.endsWith(".py")) return "🐍"; + if (name.endsWith(".pptx")) return "📊"; + if (name.endsWith(".html") || name.endsWith(".css")) return "🌐"; + return "📄"; + } + + function render(files) { + const el = document.getElementById("panel-files"); + if (!el) return; + + if (!files || files.length === 0) { + el.innerHTML = '
📁No recent files
'; + return; + } + + let html = '
'; + for (const file of files) { + const dir = file.path.includes("/") ? file.path.substring(0, file.path.lastIndexOf("/")) : ""; + // Configure your OneDrive base URL here (tenant-my.sharepoint.com/personal/user_tenant_com/...) + const oneDriveBase = 'https://TENANT-my.sharepoint.com/personal/USER_TENANT_COM/_layouts/15/onedrive.aspx?id=/personal/USER_TENANT_COM/Documents/'; + const isDraft = file.path && file.path.startsWith('drafts/'); + const webUrl = file.webUrl || (isDraft ? oneDriveBase + encodeURIComponent(file.path) : ''); + const nameHtml = webUrl + ? `${D.esc(file.name)}` + : `${D.esc(file.name)}`; + html += ` +
+ ${fileIcon(file.name)} +
+
${nameHtml}
+ ${dir ? `
${D.esc(dir)}
` : ""} +
+
+
${D.timeAgo(file.modified)}
+
${D.formatSize(file.size)}
+
+
`; + } + html += "
"; + el.innerHTML = html; + } + + const SHOW_EXTS = new Set(['.docx','.xlsx','.pptx','.pdf','.md','.html','.png','.jpg','.jpeg','.txt','.gif','.webp','.csv']); + + function isUserFile(name) { + const dot = name.lastIndexOf('.'); + if (dot < 0) return false; + return SHOW_EXTS.has(name.substring(dot).toLowerCase()); + } + + async function refresh() { + const files = await D.fetchApi("files"); + const all = Array.isArray(files) ? files : []; + render(all.filter(f => isUserFile(f.name || ''))); + } + + let _refreshInterval = null; + let _lastUpdated = null; + + function updateTimestamp() { + const el = document.getElementById("panel-files"); + if (!el) return; + let ts = el.querySelector('.panel-last-updated'); + if (!ts) { ts = document.createElement('div'); ts.className = 'panel-last-updated'; el.appendChild(ts); } + if (_lastUpdated) { + const s = ((Date.now() - _lastUpdated) / 1000) | 0; + ts.textContent = `last updated: ${s}s ago`; + } + } + + const _origRefresh = refresh; + async function autoRefresh() { + await _origRefresh(); + _lastUpdated = Date.now(); + updateTimestamp(); + } + + function startAutoRefresh() { + stopAutoRefresh(); + _refreshInterval = setInterval(autoRefresh, 120000); + setInterval(updateTimestamp, 10000); + } + function stopAutoRefresh() { if (_refreshInterval) { clearInterval(_refreshInterval); _refreshInterval = null; } } + + async function initPanel() { + await autoRefresh(); + startAutoRefresh(); + } + + window._showFileContent = async function(path) { + const ov = document.getElementById('soul-modal-overlay'); + if (!ov) return; + const titleEl = document.getElementById('soul-modal-title'); + const bodyEl = document.getElementById('soul-modal-body'); + titleEl.textContent = '📄 ' + path; + const absPath = '~/.openclaw/workspace/' + path; + const ext = path.split('.').pop().toLowerCase(); + const typeMap = {md:'Markdown',json:'JSON',ts:'TypeScript',js:'JavaScript',py:'Python',sh:'Shell',html:'HTML',css:'CSS',txt:'Text',csv:'CSV',yaml:'YAML',yml:'YAML'}; + const fileType = typeMap[ext] || ext.toUpperCase(); + + // Try to fetch file content from the API + let contentHtml = ''; + try { + const resp = await D.fetchApi('file?path=' + encodeURIComponent(path)); + if (resp && !resp.error) { + const text = resp.content || ''; + if (text && text !== 'Not found') { + contentHtml = ` +
+
Contents
+
${Dashboard.esc(text)}
+
+
+ ⬇ Download + +
`; + } + } + } catch(e) {} + + if (!contentHtml) { + contentHtml = ` +
+
+ 📂 Full path: +
+ ${Dashboard.esc(absPath)} + +
`; + } + + bodyEl.innerHTML = ` +
+
+
File Details
+
+
Path: ${Dashboard.esc(path)}
+
Type: ${Dashboard.esc(fileType)}
+
+
+ ${contentHtml} +
`; + ov.classList.add('visible'); + }; + + D.registerPanel("files", { + init: initPanel, + refresh: autoRefresh, + stopAutoRefresh, + }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-integrations.js b/bates-core/plugins/dashboard/static/js/panel-integrations.js new file mode 100644 index 0000000..8bf6060 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-integrations.js @@ -0,0 +1,88 @@ +/** + * Integrations Panel — MCP Servers & External Services (Live Data Only) + */ +(function () { + const D = window.Dashboard; + + function render(healthData) { + const el = document.getElementById('panel-integrations'); + if (!el) return; + + if (!healthData || !healthData.servers || !healthData.servers.length) { + el.innerHTML = '
⏳ Checking MCP server health...
'; + return; + } + + let h = '
MCP Servers (Live Health)
'; + h += '
'; + + const servers = healthData.servers.sort((a, b) => { + if (a.healthy !== b.healthy) return a.healthy ? -1 : 1; + return a.name.localeCompare(b.name); + }); + + for (const s of servers) { + const statusColor = s.healthy ? 'var(--green)' : 'var(--red, #ef4444)'; + const statusText = s.healthy + ? `✓ ${s.tools} tool${s.tools !== 1 ? 's' : ''} · ${s.responseTime}s` + : '✗ Unhealthy'; + h += `
+
+
+
${D.esc(s.name)}
+
${statusText}
+
+
`; + } + h += '
'; + + const healthy = servers.filter(s => s.healthy).length; + h += `
${healthy}/${servers.length} servers healthy
`; + + el.innerHTML = h; + } + + async function refresh() { + let healthData = null; + try { + const res = await fetch('/dashboard/api/integrations/health'); + if (res.ok) healthData = await res.json(); + } catch {} + render(healthData); + } + + let _refreshInterval = null; + let _lastUpdated = null; + + function updateTimestamp() { + const el = document.getElementById('panel-integrations'); + if (!el) return; + let ts = el.querySelector('.panel-last-updated'); + if (!ts) { ts = document.createElement('div'); ts.className = 'panel-last-updated'; el.appendChild(ts); } + if (_lastUpdated) { + const s = ((Date.now() - _lastUpdated) / 1000) | 0; + ts.textContent = `last updated: ${s}s ago`; + } + } + + const _origRefresh = refresh; + async function autoRefresh() { + await _origRefresh(); + _lastUpdated = Date.now(); + updateTimestamp(); + } + + function startAutoRefresh() { + stopAutoRefresh(); + _refreshInterval = setInterval(autoRefresh, 120000); + setInterval(updateTimestamp, 10000); + } + function stopAutoRefresh() { if (_refreshInterval) { clearInterval(_refreshInterval); _refreshInterval = null; } } + + async function initPanel() { + await autoRefresh(); + startAutoRefresh(); + } + + D.registerPanel('integrations', { init: initPanel, refresh: autoRefresh, stopAutoRefresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-memory.js b/bates-core/plugins/dashboard/static/js/panel-memory.js new file mode 100644 index 0000000..2548f16 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-memory.js @@ -0,0 +1,177 @@ +/** + * Live Memory Feed Panel + * Shows observation data + real-time agent events + */ +(function () { + const D = window.Dashboard; + let entries = []; + let activeFilter = null; + const MAX_ENTRIES = 100; + + const CATEGORIES = ["goal", "fact", "preference", "deadline", "decision", "contact", "pattern", "agent"]; + + function parseObservations(data) { + const items = []; + if (!data) return items; + + for (const [filename, content] of Object.entries(data)) { + if (filename.endsWith(".json")) { + // Parse JSON observations (like last-checkin.json) + try { + const obj = JSON.parse(content); + if (obj.last_run) { + items.push({ + timestamp: obj.last_run, + tag: "agent", + content: `Check-in: ${obj.items_reported_today || 0} items reported, ${obj.skipped_runs || 0} skipped`, + }); + } + } catch {} + continue; + } + + // Parse markdown observations + const category = filename.replace(".md", "").replace("file-index", "fact"); + if (!CATEGORIES.includes(category) && category !== "file-index") continue; + + const lines = content.split("\n"); + let currentEntry = null; + + for (const line of lines) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#") || trimmed.startsWith("|") || trimmed.startsWith("---")) continue; + + // Date-prefixed entry: "- 2026-02-07: Something" + const dateMatch = trimmed.match(/^-\s*(\d{4}-\d{2}-\d{2}):\s*(.+)/); + if (dateMatch) { + items.push({ + timestamp: dateMatch[1] + "T12:00:00Z", + tag: category, + content: dateMatch[2], + }); + continue; + } + + // Bullet entry without date + const bulletMatch = trimmed.match(/^[-*]\s+(.+)/); + if (bulletMatch) { + items.push({ + timestamp: null, + tag: category, + content: bulletMatch[1], + }); + } + } + } + + return items; + } + + function addAgentEvent(data) { + const content = data.text || data.message || data.delta || JSON.stringify(data).slice(0, 200); + if (!content || content === "{}") return; + + entries.unshift({ + timestamp: new Date().toISOString(), + tag: "agent", + content: String(content).slice(0, 300), + }); + + if (entries.length > MAX_ENTRIES) { + entries = entries.slice(0, MAX_ENTRIES); + } + + render(); + } + + function render() { + const el = document.getElementById("panel-memory"); + if (!el) return; + + const filtered = activeFilter ? entries.filter((e) => e.tag === activeFilter) : entries; + + if (filtered.length === 0) { + el.innerHTML = '
No observations yet
'; + return; + } + + let html = '
'; + for (const entry of filtered) { + const ts = entry.timestamp + ? new Date(entry.timestamp).toLocaleDateString("en-GB", { month: "short", day: "numeric" }) + : ""; + html += ` +
+ ${D.esc(ts)} + ${D.esc(entry.tag)} + ${D.esc(entry.content)} +
`; + } + html += "
"; + el.innerHTML = html; + } + + function setupFilters() { + const bar = document.getElementById("memory-filters"); + if (!bar) return; + + let html = ``; + for (const cat of CATEGORIES) { + html += ``; + } + bar.innerHTML = html; + + bar.addEventListener("click", (e) => { + const btn = e.target.closest(".filter-btn"); + if (!btn) return; + const filter = btn.dataset.filter; + activeFilter = filter === "all" ? null : filter; + bar.querySelectorAll(".filter-btn").forEach((b) => b.classList.remove("active")); + btn.classList.add("active"); + render(); + }); + } + + async function refresh() { + const data = await D.fetchApi("observations"); + if (data && !data.error) { + const parsed = parseObservations(data); + // Merge new observations, keeping agent events from WebSocket + const agentEntries = entries.filter((e) => e.tag === "agent" && e.timestamp); + entries = [...agentEntries, ...parsed]; + // Sort: dated entries by date desc, undated at the end + entries.sort((a, b) => { + if (!a.timestamp && !b.timestamp) return 0; + if (!a.timestamp) return 1; + if (!b.timestamp) return -1; + return new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime(); + }); + if (entries.length > MAX_ENTRIES) entries = entries.slice(0, MAX_ENTRIES); + } + render(); + } + + async function init(gw) { + setupFilters(); + await refresh(); + + // Subscribe to real-time agent events + if (gw) { + gw.subscribe("agent", (data) => { + if (data.event === "agent.assistant" || data.type === "assistant") { + addAgentEvent(data); + } + }); + gw.subscribe("*", (data) => { + if (data.event && data.event.includes("memory")) { + addAgentEvent(data); + } + }); + } + } + + D.registerPanel("memory", { + init, + refresh, + }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-rollout.js b/bates-core/plugins/dashboard/static/js/panel-rollout.js new file mode 100644 index 0000000..346c4b6 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-rollout.js @@ -0,0 +1,113 @@ +/** + * Bates Rollout Panel — Agent deployment status by layer + * Fetches from gateway API + */ +(function () { + const D = window.Dashboard; + + const LAYERS = [ + { name: 'Layer 1 — COO', agents: [{ name: 'Bates', role: 'Chief Operating Officer' }] }, + { name: 'Layer 2 — Deputies', agents: [ + { name: 'Conrad', role: 'Project A Deputy' }, + { name: 'Soren', role: 'Project B Deputy' }, + { name: 'Amara', role: 'Project C Deputy' }, + { name: 'Jules', role: 'Personal Deputy' }, + { name: 'Dash', role: 'DevOps Deputy' }, + ]}, + { name: 'Layer 3 — Specialists', agents: [ + { name: 'Mercer', role: 'Finance Specialist' }, + { name: 'Kira', role: 'Content Specialist' }, + { name: 'Nova', role: 'Research Specialist' }, + { name: 'Paige', role: 'Documentation Specialist' }, + { name: 'Quinn', role: 'QA Specialist' }, + { name: 'Archer', role: 'Architecture Specialist' }, + ]}, + ]; + + const ALL_AGENTS = LAYERS.flatMap(l => l.agents); + + function findAgent(apiAgents, name) { + if (!apiAgents) return null; + return apiAgents.find(a => a.name && a.name.toLowerCase() === name.toLowerCase()); + } + + function render(apiAgents) { + const el = document.getElementById('panel-rollout'); + if (!el) return; + + const deployed = ALL_AGENTS.filter(a => findAgent(apiAgents, a.name)).length; + const total = ALL_AGENTS.length; + const pct = Math.round((deployed / total) * 100); + + let html = ''; + + // Progress bar + html += `
+
+ + ${deployed}/${total} agents (${pct}%) +
+
+
`; + + // Layers + for (const layer of LAYERS) { + html += `
+ +
`; + + for (const agentDef of layer.agents) { + const data = findAgent(apiAgents, agentDef.name); + const exists = !!data; + const model = data && data.model ? data.model : '—'; + const workspace = data && data.workspace !== undefined ? (data.workspace ? '✓' : '✗') : (exists ? '✓' : '✗'); + const wsClass = workspace === '✓' ? 'ok' : 'error'; + const heartbeat = data && data.heartbeat ? data.heartbeat : null; + const hbActive = heartbeat && (heartbeat.active || heartbeat.enabled || heartbeat.cron); + const hbTime = data && (data.lastHeartbeat || data.last_heartbeat || (heartbeat && heartbeat.last)) ? D.timeAgo(data.lastHeartbeat || data.last_heartbeat || heartbeat.last) : '—'; + const statusIcon = exists ? '☑' : '☐'; + const statusClass = exists ? 'rollout-deployed' : 'rollout-pending'; + + // Model badge + let modelClass = 'other'; + const ml = model.toLowerCase(); + if (ml.includes('opus')) modelClass = 'opus'; + else if (ml.includes('sonnet')) modelClass = 'sonnet'; + else if (ml.includes('gemini')) modelClass = 'gemini'; + + html += `
+ ${statusIcon} +
+
${D.esc(agentDef.name)} ${D.esc(data && data.role ? data.role : agentDef.role)}
+
+ ${D.esc(model)} + + ${hbActive ? '⏱ Active' : '⏱ Inactive'} + Last: ${D.esc(hbTime)} +
+
+
`; + } + + html += '
'; + } + + el.innerHTML = html; + } + + async function refresh() { + try { + const res = await fetch('/dashboard/api/agents'); + if (res.ok) { + const data = await res.json(); + const agents = Array.isArray(data) ? data : (data && data.agents ? data.agents : []); + render(agents); + return; + } + } catch {} + const el = document.getElementById('panel-rollout'); + if (el) el.innerHTML = '
🚀No data available
Could not reach gateway API
'; + } + + D.registerPanel('rollout', { init: refresh, refresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-settings.js b/bates-core/plugins/dashboard/static/js/panel-settings.js new file mode 100644 index 0000000..a29b303 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-settings.js @@ -0,0 +1,43 @@ +/** + * Settings Panel — Read-only config summary + * Fetches from gateway API + */ +(function () { + const D = window.Dashboard; + + function card(title, items) { + let html = `
${D.esc(title)}
`; + for (const [k, v] of items) { + html += `
${D.esc(k)}${D.esc(String(v))}
`; + } + return html + '
'; + } + + function render(data) { + const el = document.getElementById("panel-settings"); + if (!el) return; + + if (!data || data.error) { + el.innerHTML = '
Settings unavailable
Could not reach gateway API
'; + return; + } + + el.innerHTML = '
' + + card('Model', [['Primary', data.default_model || '—'], ['Fallbacks', (data.model_fallbacks || []).join(', ') || '—']]) + + card('Heartbeat', [['Interval', data.heartbeat_interval || '—'], ['Active Hours', data.heartbeat_hours || '—']]) + + card('Compaction', [['Mode', data.compaction_mode || '—'], ['Reserve Tokens', data.compaction_reserve_tokens || '—'], ['Max History', data.compaction_max_history || '—']]) + + card('Fleet', [['Agents', data.num_agents || '—'], ['Cron Jobs', data.num_cron_jobs || '—'], ['Enabled', data.num_cron_enabled || '—']]) + + card('Session', [['Reset Mode', data.session_reset_mode || '—'], ['Idle Timeout', (data.session_idle_minutes || '?') + 'm'], ['Gateway Port', data.gateway_port || '—']]) + + '
'; + } + + async function refresh() { + try { + const res = await fetch("/dashboard/api/settings"); + if (res.ok) { render(await res.json()); return; } + } catch {} + render(null); + } + + D.registerPanel("settings", { init: refresh, refresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-standup.js b/bates-core/plugins/dashboard/static/js/panel-standup.js new file mode 100644 index 0000000..4fe5b2b --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-standup.js @@ -0,0 +1,73 @@ +/** + * Standup Panel — Conversation-style standup view + */ +(function () { + const D = window.Dashboard; + + const AGENT_EMOJIS = { + bates: '🐧', conrad: '🏦', soren: '⚡', amara: '🏫', jules: '🏠', + dash: '🚀', mercer: '⚖️', kira: '✍️', nova: '🔬', paige: '💰', + quinn: '👥', archer: '📝', + }; + + function getEmoji(name) { + return AGENT_EMOJIS[(name || '').toLowerCase()] || '🤖'; + } + + function renderStandups(data) { + const el = document.getElementById('panel-standup'); + if (!el) return; + + const standups = Array.isArray(data) ? data : (data?.standups || data?.items || []); + + let h = `
+

📋 Daily Standup

+
+ + +
+
`; + + if (!standups.length) { + h += `
+
📋
+
No standups yet
+
Standups will appear here after the first daily collection.
+
`; + el.innerHTML = h; + return; + } + + h += '
'; + for (const msg of standups) { + const name = msg.agent || msg.name || 'Unknown'; + const role = msg.role || ''; + const text = msg.message || msg.content || msg.text || ''; + const time = msg.timestamp ? new Date(msg.timestamp).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' }) : ''; + + h += `
+
${getEmoji(name)}
+
+
+ ${D.esc(name)} + ${D.esc(role)} + ${time ? `${time}` : ''} +
+
${D.esc(text)}
+
+
`; + } + h += '
'; + el.innerHTML = h; + } + + async function refresh() { + try { + const res = await fetch(`/dashboard/api/standups`); + if (res.ok) { renderStandups(await res.json()); return; } + } catch {} + renderStandups([]); + } + + D.registerPanel('standup', { init: refresh, refresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-status.js b/bates-core/plugins/dashboard/static/js/panel-status.js new file mode 100644 index 0000000..2bc19e1 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-status.js @@ -0,0 +1,93 @@ +/** + * System Status Panel + * Shows gateway, telegram, MCP, disk usage from health.json + */ +(function () { + const D = window.Dashboard; + + function render(health) { + const el = document.getElementById("panel-status"); + if (!el) return; + + if (!health || health.error) { + el.innerHTML = '
Health data unavailable
'; + return; + } + + const services = health.services || {}; + const gwStatus = services.openclaw_gateway || "unknown"; + const tgStatus = services.telegram_bot || "unknown"; + const disk = health.disk_usage_percent ?? -1; + const uptime = health.uptime_hours ?? 0; + const ts = health.timestamp; + const checkin = health.checkin_summary || {}; + + const gwClass = gwStatus === "running" ? "ok" : "down"; + const tgClass = tgStatus === "connected" ? "ok" : "error"; + const diskClass = disk > 80 ? "danger" : disk > 60 ? "warning" : ""; + const diskBarClass = disk > 80 ? "danger" : disk > 60 ? "warning" : ""; + + // MCP servers + const mcpEntries = Object.entries(services).filter(([k]) => k.startsWith("mcp_")); + let mcpHtml = ""; + if (mcpEntries.length > 0 && !services.mcp_note) { + for (const [key, val] of mcpEntries) { + const name = key.replace("mcp_", "").replace(/_/g, "-"); + const cls = val === "ok" ? "ok" : "error"; + mcpHtml += ` +
+ +
+ ${D.esc(name)} + ${D.esc(String(val))} +
+
`; + } + } + + el.innerHTML = ` +
+
+ +
+ Gateway + ${D.esc(gwStatus)}${uptime > 0 ? ` (${uptime}h)` : ""} +
+
+
+ +
+ Telegram + ${D.esc(tgStatus)} +
+
+
+ +
+ Disk + ${disk >= 0 ? disk + "%" : "N/A"} + ${disk >= 0 ? `
` : ""} +
+
+
+
+ Check-ins Today + ${checkin.items_reported_today ?? "N/A"} reported · ${checkin.skipped_runs ?? 0} skipped +
+
+ ${mcpHtml} +
+ ${ts ? `
Last health check: ${D.timeAgo(ts)}
` : ""} + `; + } + + async function refresh() { + const health = await D.fetchApi("health"); + render(health); + } + + D.registerPanel("status", { + init: refresh, + refresh: refresh, + }); +})(); diff --git a/bates-core/plugins/dashboard/static/js/panel-tasks.js b/bates-core/plugins/dashboard/static/js/panel-tasks.js new file mode 100644 index 0000000..3753236 --- /dev/null +++ b/bates-core/plugins/dashboard/static/js/panel-tasks.js @@ -0,0 +1,130 @@ +/** + * Tasks Panel — Aggregated Planner + To Do tasks + */ +(function () { + const D = window.Dashboard; + let lastData = null; + let sortMode = 'priority'; // priority | due | project + let filterProject = 'all'; + let showCompleted = false; + + const PRI_COLORS = { urgent: '#ff4757', important: '#ffa502', medium: '#00d4ff', low: '#747d8c' }; + const PRI_ORDER = { urgent: 0, important: 1, medium: 2, low: 3 }; + + function priDot(p) { + return ``; + } + + function renderControls(container) { + return `
+ + + +
`; + } + + function sortTasks(tasks) { + const sorted = [...tasks]; + switch (sortMode) { + case 'due': + sorted.sort((a, b) => { + if (a.completed !== b.completed) return a.completed ? 1 : -1; + if (a.dueDate && b.dueDate) return a.dueDate.localeCompare(b.dueDate); + if (a.dueDate) return -1; + return b.dueDate ? 1 : 0; + }); + break; + case 'project': + sorted.sort((a, b) => (a.project || '').localeCompare(b.project || '') || (a.priorityNum ?? 5) - (b.priorityNum ?? 5)); + break; + default: // priority + sorted.sort((a, b) => { + if (a.completed !== b.completed) return a.completed ? 1 : -1; + return (a.priorityNum ?? 5) - (b.priorityNum ?? 5) || (a.dueDate || 'z').localeCompare(b.dueDate || 'z'); + }); + } + return sorted; + } + + function renderTaskRow(t) { + return D.renderTaskRow(t); + } + + function render() { + const el = document.getElementById('panel-tasks-body'); + if (!el || !lastData) return; + + let tasks = lastData.tasks || []; + if (filterProject !== 'all') tasks = tasks.filter(t => t.project === filterProject); + if (!showCompleted) tasks = tasks.filter(t => !t.completed); + tasks = sortTasks(tasks); + + let html = renderControls(); + + if (!tasks.length) { + html += '
No tasks to display
'; + } else if (sortMode === 'project') { + // Group by project + const groups = {}; + for (const t of tasks) { + const k = t.project || 'other'; + if (!groups[k]) groups[k] = { name: t.planName || k, tasks: [] }; + groups[k].tasks.push(t); + } + for (const [k, g] of Object.entries(groups)) { + html += `
${D.esc(g.name)} (${g.tasks.length})
`; + for (const t of g.tasks) html += renderTaskRow(t); + html += '
'; + } + } else { + for (const t of tasks) html += renderTaskRow(t); + } + + html += `
Updated ${D.timeAgo(lastData.updated)} · ${lastData.tasks?.length || 0} total tasks
`; + el.innerHTML = html; + + // Wire controls + document.getElementById('tasks-filter-project')?.addEventListener('change', e => { filterProject = e.target.value; render(); }); + document.getElementById('tasks-sort')?.addEventListener('change', e => { sortMode = e.target.value; render(); }); + document.getElementById('tasks-show-done')?.addEventListener('change', e => { showCompleted = e.target.checked; render(); }); + + // Wire click-to-open and complete buttons + D.wireTaskRows(el, () => { setTimeout(refresh, 1000); }); + } + + async function refresh() { + const el = document.getElementById('panel-tasks-body'); + if (el && !lastData) el.innerHTML = '
Loading tasks from Planner & To Do…
'; + try { + const data = await D.fetchApi('tasks'); + if (data && !data.error && !data['jwt-auth-error'] && data.tasks) { + lastData = data; + // Update overview metrics badge with pending task count + const pending = data.tasks.filter(t => !t.completed).length; + window._updateOverviewMetrics?.({ tasks: pending }); + render(); + } else { + if (el) el.innerHTML = `
⚠ ${D.esc(data?.error || 'Failed to load tasks')}
`; + } + } catch (e) { + if (el) el.innerHTML = `
⚠ ${D.esc(e.message)}
`; + } + } + + // Expose for project detail modals + window._getProjectTasks = function (projectKey) { + if (!lastData?.byProject?.[projectKey]) return null; + return lastData.byProject[projectKey]; + }; + + D.registerPanel('tasks', { init: refresh, refresh }); +})(); diff --git a/bates-core/plugins/dashboard/static/styles.css b/bates-core/plugins/dashboard/static/styles.css new file mode 100644 index 0000000..6e29df3 --- /dev/null +++ b/bates-core/plugins/dashboard/static/styles.css @@ -0,0 +1,1553 @@ +/* ═══════════════════════════════════════════════════════════ + OpenClaw Command Center — Glassmorphism Design System v5 + Inspired by: Crypto Wallet glassmorphism aesthetic + ═══════════════════════════════════════════════════════════ */ + +:root { + --bg: #060a14; + --glass-bg: rgba(12, 20, 45, 0.2); + --glass-bg-hover: rgba(20, 35, 70, 0.3); + --glass-border: rgba(90, 200, 232, 0.6); + --glass-border-hover: rgba(90, 200, 232, 0.85); + --glass-blur: blur(24px); + --nav-bg: rgba(8, 12, 25, 0.4); + + --blue: #1F4E8C; + --blue-lt: #3B7DD8; + --blue-glow: 0 0 20px rgba(31, 78, 140, 0.3); + --orange: #F08C2E; + --red: #D6452A; + --green: #22C55E; + --teal: #14B8A6; + --purple: #8B5CF6; + + --text: #E8EAED; + --text2: rgba(255, 255, 255, 0.5); + --text3: rgba(255, 255, 255, 0.3); + --text-muted: rgba(255, 255, 255, 0.25); + + --font: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; + --font-mono: 'JetBrains Mono', 'Fira Code', monospace; + --mono: var(--font-mono); + --r: 12px; + --r-sm: 8px; + --topbar: 56px; + --chat-w: 380px; +} + +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + +html, body { + height: 100%; + background-color: #060a14; + background-image: url('/dashboard/assets/bg.png'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + background-attachment: fixed; + color: var(--text); + font: 13px/1.5 var(--font); + -webkit-font-smoothing: antialiased; + overflow: hidden; +} + +/* Dark overlay on top of background image — disabled, bg already blurred/matte */ +#bg-overlay { + display: none; +} + +/* Scrollbar */ +::-webkit-scrollbar { width: 5px; } +::-webkit-scrollbar-track { background: transparent; } +::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.1); border-radius: 4px; } +::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.2); } + +/* ─── Glass Card (core component) ─── */ +.glass-card { + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-top: 1px solid rgba(90, 200, 232, 0.5); + border-radius: var(--r); + box-shadow: 0 0 8px rgba(90, 200, 232, 0.25), 0 0 20px rgba(90, 200, 232, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.06); + transition: border-color 0.3s, box-shadow 0.3s; +} +.glass-card:hover { + border-color: var(--glass-border-hover); + box-shadow: 0 0 12px rgba(90, 200, 232, 0.35), 0 0 30px rgba(90, 200, 232, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.08); +} + +.glass-panel { + background: rgba(10, 18, 40, 0.25); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-top: 1px solid rgba(255, 255, 255, 0.15); + border-radius: var(--r); + box-shadow: 0 0 8px rgba(90, 200, 232, 0.25), 0 0 20px rgba(90, 200, 232, 0.1); +} + +.glass-nav { + background: var(--nav-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border-bottom: 1px solid rgba(90, 200, 232, 0.4); + box-shadow: 0 0 10px rgba(90, 200, 232, 0.15), 0 4px 20px rgba(0, 0, 0, 0.3); +} + +/* ═══════════════ TOP BAR ═══════════════ */ +.topbar { + position: fixed; + top: 0; + left: 0; + right: 0; + height: var(--topbar); + display: flex; + align-items: center; + padding: 0 16px; + z-index: 100; + background: var(--nav-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border-bottom: 1px solid var(--glass-border); + gap: 12px; +} + +.topbar-left { + display: flex; + align-items: center; + flex-shrink: 0; +} + +.topbar-logo { + height: 36px; + width: auto; + object-fit: contain; +} + +.topbar-logo-fallback { + font-weight: 700; + font-size: 16px; + letter-spacing: 1px; + color: var(--blue-lt); + display: flex; + align-items: center; + gap: 6px; +} + +.topbar-nav { + display: flex; + align-items: center; + gap: 4px; + margin: 0 auto; + flex-shrink: 0; +} + +.nav-tab { + display: flex; + align-items: center; + gap: 6px; + padding: 7px 14px; + border: none; + border-radius: 8px; + background: transparent; + color: var(--text2); + font: 12px/1 var(--font); + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + white-space: nowrap; +} +.nav-tab:hover { + background: rgba(255, 255, 255, 0.06); + color: var(--text); +} +.nav-tab.active { + background: rgba(31, 78, 140, 0.3); + color: #fff; + box-shadow: var(--blue-glow), inset 0 0 0 1px rgba(31, 78, 140, 0.3); +} +.nav-icon { font-size: 14px; } +.nav-label { font-size: 12px; } + +.topbar-right { + display: flex; + align-items: center; + gap: 12px; + flex-shrink: 0; + margin-left: auto; +} + +.topbar-clock { + font: 500 13px/1 var(--font-mono); + color: var(--text2); + letter-spacing: 0.5px; +} + +.conn-badge { + display: flex; + align-items: center; + gap: 6px; +} +.conn-dot { + width: 8px; + height: 8px; + border-radius: 50%; + background: #555; + transition: background 0.3s; +} +.conn-dot.connected { background: var(--green); box-shadow: 0 0 8px rgba(34, 197, 94, 0.5); } +.conn-dot.disconnected { background: var(--red); } +.conn-dot.reconnecting { background: var(--orange); animation: pulse 1.5s infinite; } +.conn-label { + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1px; + color: var(--text3); +} + +.chat-toggle-btn { + display: none; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + border: 1px solid var(--glass-border); + border-radius: 8px; + background: rgba(255, 255, 255, 0.04); + color: var(--text2); + font-size: 16px; + cursor: pointer; + transition: all 0.2s; +} +.topbar-avatar { + height: 36px; + width: auto; + object-fit: contain; + filter: drop-shadow(0 0 6px rgba(90, 200, 232, 0.3)); +} +.topbar-title { + font-size: 14px; + font-weight: 700; + letter-spacing: 2px; + color: #fff; + text-shadow: 0 0 15px rgba(90, 200, 232, 0.4); +} +.chat-toggle-btn:hover { background: rgba(255, 255, 255, 0.08); } +.chat-toggle-btn.active { background: rgba(31, 78, 140, 0.3); border-color: rgba(31, 78, 140, 0.4); } + +/* ═══════════════ APP SHELL ═══════════════ */ +.app-shell { + position: fixed; + top: var(--topbar); + left: 0; + right: 0; + bottom: 0; + display: flex; + z-index: 1; +} + +.content-area { + flex: 1; + overflow-y: auto; + overflow-x: hidden; + padding: 20px 24px; + padding-right: calc(var(--chat-w) + 24px); +} + +/* ─── Views ─── */ +.view { display: none; } +.view.active { display: block; } + +/* ─── Sections ─── */ +.section-label { + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1.5px; + color: var(--text3); + margin: 24px 0 12px; +} + +/* ─── Cards ─── */ +.card { + margin-bottom: 16px; +} +.card-head { + display: flex; + align-items: center; + justify-content: space-between; + padding: 14px 18px; + border-bottom: 1px solid var(--glass-border); +} +.card-head h3 { + font-size: 13px; + font-weight: 600; + color: var(--text); + margin: 0; + text-shadow: 0 0 20px rgba(59, 125, 216, 0.15); +} +.card-body { + padding: 14px 18px; +} +.card-body.scroll-y { + max-height: 360px; + overflow-y: auto; +} + +.refresh-btn { + background: transparent; + border: 1px solid var(--glass-border); + color: var(--text2); + border-radius: 6px; + padding: 3px 8px; + font-size: 13px; + cursor: pointer; + transition: all 0.2s; +} +.refresh-btn:hover { + background: rgba(255, 255, 255, 0.06); + border-color: var(--glass-border-hover); + color: var(--text); +} + +/* ─── Grid layouts ─── */ +.grid-2col { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; +} + +/* ═══════════════ OVERVIEW TAB ═══════════════ */ + +/* Metric strip */ +.metric-strip { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 12px; + margin-bottom: 8px; +} +.metric { + padding: 18px 16px; + text-align: center; + position: relative; + overflow: hidden; +} +.metric::before { + content: ''; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 40%; + height: 2px; + background: linear-gradient(90deg, transparent, var(--blue-lt), transparent); + opacity: 0.6; +} +.metric-val { + display: block; + font-size: 24px; + font-weight: 700; + color: #fff; + margin-bottom: 4px; + font-variant-numeric: tabular-nums; +} +.metric-lbl { + display: block; + font-size: 10px; + font-weight: 500; + text-transform: uppercase; + letter-spacing: 1px; + color: var(--text3); +} + +/* Projects row */ +.projects-row { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 12px; + margin-bottom: 20px; +} +.project-box { + padding: 16px; + cursor: pointer; + transition: all 0.25s; + position: relative; + overflow: hidden; +} +.project-box::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: var(--accent, var(--blue)); + opacity: 0.9; + box-shadow: 0 0 12px var(--accent, var(--blue)), 0 0 4px var(--accent, var(--blue)); +} +.project-box:hover { + border-color: var(--glass-border-hover); + transform: translateY(-2px); + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4), 0 0 20px color-mix(in srgb, var(--accent, var(--blue)) 25%, transparent); +} +.project-header { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 8px; +} +.project-icon { font-size: 18px; } +.project-name { + font-size: 13px; + font-weight: 600; + color: var(--text); +} +.project-deputy { + font-size: 11px; + color: var(--text2); + margin-bottom: 8px; +} +.project-deputy strong { + color: var(--text); + font-weight: 500; +} +.project-body { + font-size: 11px; + color: var(--text3); + line-height: 1.6; + max-height: 80px; + overflow-y: auto; +} + +/* ─── Tasks ─── */ +.task-item { + display: flex; + align-items: flex-start; + gap: 10px; + padding: 10px 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.04); +} +.task-item:last-child { border-bottom: none; } +.priority-dot { + width: 6px; + height: 6px; + border-radius: 50%; + margin-top: 6px; + flex-shrink: 0; +} +.priority-dot.high { background: var(--red); box-shadow: 0 0 6px rgba(214, 69, 42, 0.4); } +.priority-dot.medium { background: var(--orange); } +.priority-dot.low { background: var(--green); } +.priority-dot.none { background: var(--text3); } +.task-check { + width: 14px; + height: 14px; + border: 1.5px solid var(--text3); + border-radius: 4px; + margin-top: 2px; + flex-shrink: 0; +} +.task-check.done { + background: var(--green); + border-color: var(--green); +} +.task-info { flex: 1; min-width: 0; } +.task-title { + font-size: 12px; + font-weight: 500; + color: var(--text); + line-height: 1.4; +} +.task-title.done { text-decoration: line-through; color: var(--text3); } +.task-meta { + display: flex; + gap: 10px; + font-size: 10px; + color: var(--text3); + margin-top: 2px; +} + +/* ─── Upcoming crons ─── */ +.upcoming-card { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.04); + font-size: 12px; +} +.upcoming-card:last-child { border-bottom: none; } +.upcoming-name { color: var(--text); font-weight: 500; } +.upcoming-time { color: var(--text3); font-size: 11px; font-family: var(--font-mono); } + +/* ═══════════════ AGENTS TAB ═══════════════ */ +.org-chart { + max-width: 900px; + margin: 0 auto; + padding: 8px 0; +} + +.org-tier { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 12px; + position: relative; +} +.org-tier-label { + width: 100%; + text-align: center; + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1.5px; + color: var(--text3); + margin-bottom: 8px; +} + +.org-line { + width: 2px; + height: 28px; + background: linear-gradient(to bottom, rgba(31, 78, 140, 0.4), rgba(31, 78, 140, 0.1)); + margin: 12px auto; + position: relative; +} +.org-line::before { + content: ''; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 6px; + height: 6px; + border-radius: 50%; + background: var(--blue); + box-shadow: 0 0 8px rgba(31, 78, 140, 0.5); +} + +.acard { + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: var(--r); + padding: 16px; + text-align: center; + min-width: 130px; + max-width: 160px; + cursor: pointer; + transition: all 0.25s; +} +.acard:hover { + border-color: var(--glass-border-hover); + transform: translateY(-3px); + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4); +} +.acard.coo { + border-color: rgba(31, 78, 140, 0.4); + box-shadow: var(--blue-glow); + min-width: 170px; + max-width: 200px; + padding: 20px; +} +.acard.coo:hover { + border-color: rgba(31, 78, 140, 0.6); +} + +.aname { + font-size: 13px; + font-weight: 600; + color: var(--text); + margin-bottom: 2px; +} +.arole { + font-size: 10px; + color: var(--text2); + margin-bottom: 8px; +} +.ameta { + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + font-size: 10px; + color: var(--text3); + margin-top: 6px; +} +.agent-counts { + display: flex; + justify-content: center; + gap: 10px; + font-size: 10px; + color: var(--text3); + margin-top: 4px; +} + +/* Model badges */ +.model-badge { + display: inline-block; + padding: 2px 8px; + border-radius: 4px; + font-size: 9px; + font-weight: 600; + font-family: var(--font-mono); + text-transform: uppercase; + letter-spacing: 0.5px; +} +.model-badge.opus { background: rgba(31, 78, 140, 0.2); color: var(--blue-lt); border: 1px solid rgba(31, 78, 140, 0.3); } +.model-badge.sonnet { background: rgba(240, 140, 46, 0.15); color: var(--orange); border: 1px solid rgba(240, 140, 46, 0.25); } +.model-badge.gemini { background: rgba(34, 197, 94, 0.15); color: var(--green); border: 1px solid rgba(34, 197, 94, 0.25); } +.model-badge.other { background: rgba(255, 255, 255, 0.05); color: var(--text3); border: 1px solid rgba(255, 255, 255, 0.08); } + +/* Status dots */ +.status-dot { + display: inline-block; + width: 8px; + height: 8px; + border-radius: 50%; + background: #555; + flex-shrink: 0; +} +.status-dot.active, .status-dot.running, .status-dot.ok, .status-dot.connected { background: var(--green); box-shadow: 0 0 6px rgba(34, 197, 94, 0.4); } +.status-dot.idle { background: var(--text3); } +.status-dot.error, .status-dot.down, .status-dot.failed { background: var(--red); } + +/* Sub-agent sections */ +.agent-section-header { + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1.2px; + color: var(--text3); + margin-bottom: 8px; + padding-bottom: 6px; + border-bottom: 1px solid var(--glass-border); +} + +.agent-list { + display: flex; + flex-direction: column; + gap: 6px; +} + +.agent-card { + display: flex; + align-items: center; + gap: 12px; + padding: 10px 14px; + border-radius: var(--r-sm); + background: rgba(255, 255, 255, 0.02); + border: 1px solid transparent; + transition: all 0.2s; +} +.agent-card:hover { + background: rgba(255, 255, 255, 0.04); + border-color: var(--glass-border); +} +.agent-card.subagent-running { + border-color: rgba(34, 197, 94, 0.2); + background: rgba(34, 197, 94, 0.04); +} + +.agent-avatar { font-size: 20px; flex-shrink: 0; } +.agent-info { flex: 1; min-width: 0; } +.agent-name { font-size: 12px; font-weight: 600; color: var(--text); } +.agent-role { font-size: 11px; color: var(--text2); } +.agent-detail { font-size: 11px; color: var(--text3); } +.subagent-task { font-size: 11px; color: var(--text2); margin-top: 4px; line-height: 1.4; } + +.agent-status { + font-size: 10px; + font-weight: 600; + padding: 3px 8px; + border-radius: 4px; + white-space: nowrap; +} +.agent-status-running { background: rgba(34, 197, 94, 0.12); color: var(--green); } +.agent-status-completed { background: rgba(255, 255, 255, 0.06); color: var(--text3); } +.agent-status-failed { background: rgba(214, 69, 42, 0.12); color: var(--red); } + +/* ═══════════════ OPERATIONS TAB ═══════════════ */ + +/* Cron grid */ +.cron-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 12px; +} +.cron-cat-label { + grid-column: 1 / -1; + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1.5px; + color: var(--text3); + padding: 12px 0 4px; + border-bottom: 1px solid var(--glass-border); + margin-bottom: 4px; +} +.cron-cat-label .cnt { + font-size: 10px; + font-weight: 400; + color: var(--text3); + background: rgba(255, 255, 255, 0.06); + padding: 1px 6px; + border-radius: 4px; + margin-left: 6px; +} + +.cron-card { + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: var(--r-sm); + padding: 14px; + transition: all 0.2s; +} +.cron-card:hover { + border-color: var(--glass-border-hover); + transform: translateY(-1px); +} +.cron-card.running { + border-color: rgba(34, 197, 94, 0.3); +} +.cron-card.disabled { + opacity: 0.4; +} + +.cron-name { + font-size: 12px; + font-weight: 600; + color: var(--text); + margin-bottom: 4px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.cron-schedule { + font-size: 11px; + font-family: var(--font-mono); + color: var(--blue-lt); + margin-bottom: 8px; +} +.cron-meta { + font-size: 10px; + color: var(--text3); + line-height: 1.6; +} +.cron-meta span { display: block; } +.cron-actions { + display: flex; + gap: 6px; + margin-top: 10px; +} +.cron-action-btn { + flex: 1; + padding: 5px 0; + border: 1px solid var(--glass-border); + border-radius: 6px; + background: transparent; + color: var(--text2); + font-size: 10px; + cursor: pointer; + transition: all 0.2s; +} +.cron-action-btn:hover { + background: rgba(255, 255, 255, 0.06); + color: var(--text); +} + +/* Delegations */ +.deleg-paths { + display: flex; + gap: 8px; + margin-top: 4px; + font-size: 10px; +} +.deleg-path { + color: var(--text3); + font-family: var(--font-mono); + font-size: 10px; +} + +/* ═══════════════ STANDUP TAB ═══════════════ */ +.standup-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; +} +.standup-header h2 { + font-size: 18px; + font-weight: 600; + color: var(--text); +} +.standup-actions { + display: flex; + gap: 8px; +} +.standup-btn { + padding: 7px 16px; + border-radius: 8px; + font-size: 12px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + border: none; +} +.standup-btn-primary { + background: rgba(31, 78, 140, 0.3); + color: var(--blue-lt); + border: 1px solid rgba(31, 78, 140, 0.3); +} +.standup-btn-primary:hover { background: rgba(31, 78, 140, 0.45); } +.standup-btn-secondary { + background: rgba(255, 255, 255, 0.05); + color: var(--text2); + border: 1px solid var(--glass-border); +} +.standup-btn-secondary:hover { background: rgba(255, 255, 255, 0.08); } + +.standup-empty { + text-align: center; + padding: 48px 0; +} +.standup-empty-icon { font-size: 36px; margin-bottom: 12px; } +.standup-empty-text { font-size: 14px; color: var(--text2); margin-bottom: 6px; } +.standup-empty-sub { font-size: 12px; color: var(--text3); } + +.standup-thread { + display: flex; + flex-direction: column; + gap: 12px; +} +.standup-msg { + display: flex; + gap: 12px; + padding: 14px 16px; + border-radius: var(--r); + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); +} +.standup-avatar { + font-size: 24px; + flex-shrink: 0; + width: 36px; + height: 36px; + display: flex; + align-items: center; + justify-content: center; +} +.standup-msg-body { flex: 1; min-width: 0; } +.standup-msg-header { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 6px; +} +.standup-msg-name { font-size: 13px; font-weight: 600; color: var(--text); } +.standup-msg-role { + font-size: 10px; + padding: 2px 8px; + border-radius: 4px; + background: rgba(255, 255, 255, 0.06); + color: var(--text3); +} +.standup-msg-time { font-size: 10px; color: var(--text3); margin-left: auto; font-family: var(--font-mono); } +.standup-msg-text { + font-size: 12px; + color: var(--text2); + line-height: 1.6; + white-space: pre-wrap; +} + +/* ═══════════════ MEMORY TAB ═══════════════ */ +.memory-feed { display: flex; flex-direction: column; gap: 4px; } +.memory-entry { + display: flex; + align-items: flex-start; + gap: 10px; + padding: 8px 4px; + border-bottom: 1px solid rgba(255, 255, 255, 0.03); + font-size: 12px; +} +.memory-timestamp { + font-size: 10px; + font-family: var(--font-mono); + color: var(--text3); + min-width: 50px; + flex-shrink: 0; +} +.memory-tag { + display: inline-block; + padding: 2px 8px; + border-radius: 4px; + font-size: 9px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + flex-shrink: 0; +} +.memory-tag.goal { background: rgba(31, 78, 140, 0.15); color: var(--blue-lt); } +.memory-tag.fact { background: rgba(34, 197, 94, 0.1); color: var(--green); } +.memory-tag.preference { background: rgba(139, 92, 246, 0.1); color: var(--purple); } +.memory-tag.deadline { background: rgba(240, 140, 46, 0.1); color: var(--orange); } +.memory-tag.decision { background: rgba(20, 184, 166, 0.1); color: var(--teal); } +.memory-tag.contact { background: rgba(255, 255, 255, 0.06); color: var(--text2); } +.memory-tag.pattern { background: rgba(59, 125, 216, 0.1); color: var(--blue-lt); } +.memory-tag.agent { background: rgba(240, 140, 46, 0.1); color: var(--orange); } +.memory-content { color: var(--text2); line-height: 1.5; } + +.filter-bar { + display: flex; + gap: 4px; + flex-wrap: wrap; +} +.filter-btn { + padding: 4px 10px; + border: 1px solid transparent; + border-radius: 6px; + background: rgba(255, 255, 255, 0.04); + color: var(--text3); + font-size: 10px; + font-weight: 500; + text-transform: capitalize; + cursor: pointer; + transition: all 0.2s; +} +.filter-btn:hover { background: rgba(255, 255, 255, 0.08); color: var(--text2); } +.filter-btn.active { + background: rgba(31, 78, 140, 0.25); + color: var(--blue-lt); + border-color: rgba(31, 78, 140, 0.3); +} + +/* ═══════════════ COSTS & SETTINGS ═══════════════ */ +/* Integrations panel */ +.integ-section-title { + font-size: 10px; font-weight: 600; text-transform: uppercase; + letter-spacing: 1px; color: var(--text3); margin-bottom: 8px; margin-top: 4px; +} +.integ-list { display: flex; flex-direction: column; gap: 4px; } +.integ-row { + display: flex; align-items: center; gap: 10px; + padding: 6px 8px; border-radius: 6px; + background: rgba(255,255,255,0.02); + transition: background .15s; +} +.integ-row:hover { background: rgba(255,255,255,0.05); } +.integ-status-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; } +.integ-info { min-width: 0; } +.integ-name { font-size: 12px; font-weight: 500; color: var(--text); display: flex; align-items: center; gap: 6px; } +.integ-detail { font-size: 10px; color: var(--text3); margin-top: 1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.integ-badge { + font-size: 8px; padding: 1px 5px; border-radius: 3px; font-weight: 600; letter-spacing: .5px; +} +.integ-badge-read { background: rgba(34,197,94,.12); color: var(--green); } +.integ-badge-write { background: rgba(240,140,46,.12); color: var(--orange); } + +/* Costs panel */ +.cost-summary { + text-align: center; padding: 12px 0 14px; + border-bottom: 1px solid rgba(255,255,255,0.05); margin-bottom: 12px; +} +.cost-summary-label { font-size: 10px; text-transform: uppercase; letter-spacing: 1px; color: var(--text3); } +.cost-summary-value { font-size: 22px; font-weight: 700; color: var(--text); margin: 4px 0 2px; } +.cost-summary-sub { font-size: 10px; color: var(--text3); } +.cost-table { display: flex; flex-direction: column; gap: 2px; } +.cost-table-head { + display: grid; grid-template-columns: 1fr auto auto; gap: 8px; + font-size: 9px; text-transform: uppercase; letter-spacing: .8px; + color: var(--text3); padding: 0 4px 6px; border-bottom: 1px solid rgba(255,255,255,0.05); +} +.cost-table-row { + display: grid; grid-template-columns: 1fr auto auto; gap: 8px; align-items: center; + padding: 6px 4px; border-bottom: 1px solid rgba(255,255,255,0.02); +} +.cost-svc-name { font-size: 12px; font-weight: 500; color: var(--text); } +.cost-svc-plan { font-size: 10px; color: var(--text3); } +.cost-amount { font-size: 12px; font-weight: 500; color: var(--text); white-space: nowrap; } +.cost-type-badge { + font-size: 8px; padding: 2px 6px; border-radius: 3px; font-weight: 600; white-space: nowrap; +} +.cost-type-flat { background: rgba(31,78,140,.15); color: var(--blue-lt); } +.cost-type-usage { background: rgba(240,140,46,.12); color: var(--orange); } +.cost-note { + font-size: 11px; color: var(--text3); margin-top: 10px; + padding: 8px; border-radius: 6px; background: rgba(255,255,255,0.03); +} + +/* Settings */ +.settings-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 12px; +} +.settings-card { + padding: 12px; + border-radius: var(--r-sm); + background: rgba(255, 255, 255, 0.02); + border: 1px solid rgba(255, 255, 255, 0.04); +} +.settings-card-title { + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1px; + color: var(--text3); + margin-bottom: 8px; +} +.settings-row { + display: flex; + justify-content: space-between; + padding: 4px 0; + font-size: 11px; +} +.settings-row-label { color: var(--text2); } +.settings-row-value { color: var(--text); font-family: var(--font-mono); font-size: 10px; } + +/* ═══════════════ INTEGRATIONS ═══════════════ */ +.data-table-simple { + width: 100%; + border-collapse: collapse; + font-size: 12px; +} +.data-table-simple th { + text-align: left; + padding: 8px 10px; + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1px; + color: var(--text3); + border-bottom: 1px solid var(--glass-border); +} +.data-table-simple td { + padding: 8px 10px; + border-bottom: 1px solid rgba(255, 255, 255, 0.03); + color: var(--text); +} +.data-table-simple tr:last-child td { border-bottom: none; } + +/* ═══════════════ FILES ═══════════════ */ +.file-list { display: flex; flex-direction: column; } +.file-item { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 4px; + border-bottom: 1px solid rgba(255, 255, 255, 0.03); +} +.file-item:last-child { border-bottom: none; } +.file-icon { font-size: 16px; flex-shrink: 0; width: 24px; text-align: center; } +.file-info { flex: 1; min-width: 0; } +.file-name { font-size: 12px; font-weight: 500; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.file-link { color: rgba(90, 200, 232, 0.9); text-decoration: none; transition: color 0.2s; } +.file-link:hover { color: #fff; text-shadow: 0 0 8px rgba(90, 200, 232, 0.4); } +.file-item.clickable { cursor: pointer; } +.file-item.clickable:hover { background: rgba(90, 200, 232, 0.05); border-radius: 6px; } +.file-path { font-size: 10px; color: var(--text3); font-family: var(--font-mono); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.file-meta { text-align: right; font-size: 10px; color: var(--text3); flex-shrink: 0; } + +/* ═══════════════ ROLLOUT ═══════════════ */ +.rollout-progress-wrap { margin-bottom: 16px; } +.rollout-progress-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; } +.rollout-progress-pct { font-size: 12px; font-weight: 600; color: var(--text); } +.rollout-progress-bar { height: 6px; border-radius: 3px; background: rgba(255, 255, 255, 0.06); overflow: hidden; } +.rollout-progress-fill { height: 100%; border-radius: 3px; background: linear-gradient(90deg, var(--blue), var(--blue-lt)); transition: width 0.5s; } +.cron-section-label { + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1.2px; + color: var(--text3); +} +.cron-section-label .count { + font-weight: 400; + color: var(--text3); + font-size: 10px; +} + +.rollout-layer { margin-bottom: 16px; } +.rollout-agent-list { display: flex; flex-direction: column; gap: 4px; margin-top: 8px; } +.rollout-agent { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 10px; + border-radius: var(--r-sm); + background: rgba(255, 255, 255, 0.02); +} +.rollout-agent.rollout-deployed { border-left: 2px solid var(--green); } +.rollout-agent.rollout-pending { border-left: 2px solid var(--text3); opacity: 0.6; } +.rollout-check { font-size: 14px; flex-shrink: 0; } +.rollout-agent-info { flex: 1; } +.rollout-agent-name { font-size: 12px; font-weight: 500; color: var(--text); } +.rollout-agent-role { font-size: 10px; color: var(--text3); font-weight: 400; margin-left: 6px; } +.rollout-agent-meta { + display: flex; + align-items: center; + gap: 8px; + margin-top: 4px; +} +.rollout-hb-badge { + font-size: 9px; + padding: 1px 6px; + border-radius: 3px; +} +.rollout-hb-badge.hb-active { background: rgba(34, 197, 94, 0.1); color: var(--green); } +.rollout-hb-badge.hb-inactive { background: rgba(255, 255, 255, 0.04); color: var(--text3); } +.rollout-hb-time { font-size: 10px; color: var(--text3); font-family: var(--font-mono); } + +/* ═══════════════ CHAT DRAWER ═══════════════ */ +.chat-drawer { + position: fixed; + top: var(--topbar); + right: 0; + bottom: 0; + width: var(--chat-w); + display: flex; + flex-direction: column; + border-left: 1px solid var(--glass-border); + transform: translateX(100%); + transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); + z-index: 90; +} +.chat-drawer.open { + transform: translateX(0); +} + +.chat-drawer-head { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 16px; + border-bottom: 1px solid var(--glass-border); + flex-shrink: 0; +} +.chat-drawer-title { + font-size: 13px; + font-weight: 600; + color: var(--text); +} +.chat-drawer-close { + background: none; + border: none; + color: var(--text3); + font-size: 16px; + cursor: pointer; + padding: 4px 8px; + border-radius: 4px; + transition: all 0.2s; +} +.chat-drawer-close:hover { color: var(--text); background: rgba(255, 255, 255, 0.06); } + +.chat-drawer-body { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; +} + +/* Chat sessions */ +.chat-conn-status { + padding: 6px 12px; + font-size: 11px; + font-weight: 500; + text-align: center; + border-radius: 4px; + margin: 4px 8px; +} +.chat-conn-info { background: rgba(0,150,255,0.15); color: #60a5fa; } +.chat-conn-ok { background: rgba(0,200,100,0.15); color: #4ade80; } +.chat-conn-warn { background: rgba(255,180,0,0.15); color: #fbbf24; } +.chat-conn-error { background: rgba(255,60,60,0.15); color: #f87171; } + +.chat-session-bar { + display: flex; + gap: 4px; + padding: 8px 12px; + overflow-x: auto; + flex-shrink: 0; + border-bottom: 1px solid var(--glass-border); +} +.chat-session-tab { + padding: 5px 12px; + border: 1px solid var(--glass-border); + border-radius: 6px; + background: rgba(255, 255, 255, 0.03); + color: var(--text2); + font-size: 11px; + font-weight: 500; + cursor: pointer; + white-space: nowrap; + transition: all 0.2s; + display: flex; + align-items: center; +} +.chat-session-tab:hover { background: rgba(255, 255, 255, 0.06); } +.chat-session-tab.active { + background: rgba(31, 78, 140, 0.25); + border-color: rgba(31, 78, 140, 0.4); + color: var(--blue-lt); +} +.chat-session-tab.subagent { font-size: 10px; opacity: 0.7; } +.chat-no-sessions { font-size: 11px; color: var(--text3); padding: 4px; } + +/* Messages */ +.chat-messages-scroll { + flex: 1; + overflow-y: auto; + padding: 12px; +} +.chat-msg { + margin-bottom: 10px; + max-width: 92%; +} +.chat-msg-user { + margin-left: auto; +} +.chat-msg-user .chat-msg-content { + background: rgba(31, 78, 140, 0.25); + border: 1px solid rgba(31, 78, 140, 0.3); + border-radius: 12px 12px 4px 12px; + padding: 8px 12px; + font-size: 12px; + color: var(--text); + line-height: 1.5; +} +.chat-msg-assistant .chat-msg-content { + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--glass-border); + border-radius: 12px 12px 12px 4px; + padding: 8px 12px; + font-size: 12px; + color: var(--text2); + line-height: 1.5; +} +.chat-msg-system .chat-msg-content { + background: rgba(240, 140, 46, 0.08); + border: 1px solid rgba(240, 140, 46, 0.15); + border-radius: 8px; + padding: 6px 10px; + font-size: 11px; + color: var(--orange); + text-align: center; +} +.chat-msg-time { + font-size: 9px; + color: var(--text3); + margin-top: 3px; + padding: 0 4px; +} +.chat-msg-streaming { + opacity: 0.8; +} + +.chat-cursor { + display: inline-block; + width: 2px; + height: 14px; + background: var(--blue-lt); + margin-left: 2px; + vertical-align: middle; + animation: blink 1s infinite; +} +.chat-typing { color: var(--text3); font-style: italic; } + +/* Input bar */ +.chat-input-bar { + display: flex; + align-items: flex-end; + gap: 6px; + padding: 10px 12px; + border-top: 1px solid var(--glass-border); + flex-shrink: 0; +} +.chat-input { + flex: 1; + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--glass-border); + border-radius: 8px; + padding: 8px 12px; + color: var(--text); + font: 12px/1.4 var(--font); + resize: none; + outline: none; + transition: border-color 0.2s; +} +.chat-input:focus { border-color: rgba(31, 78, 140, 0.5); } +.chat-input::placeholder { color: var(--text3); } +.chat-input:disabled { opacity: 0.4; } + +.chat-btn { + width: 36px; + height: 36px; + border: 1px solid var(--glass-border); + border-radius: 8px; + background: transparent; + color: var(--text2); + font-size: 14px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s; + flex-shrink: 0; +} +.chat-btn:hover:not(:disabled) { background: rgba(255, 255, 255, 0.06); color: var(--text); } +.chat-btn:disabled { opacity: 0.3; cursor: default; } +.chat-btn-send { color: var(--blue-lt); border-color: rgba(31, 78, 140, 0.3); } +.chat-btn-stop { color: var(--red); border-color: rgba(214, 69, 42, 0.3); } + +/* ═══════════════ MODAL ═══════════════ */ +.modal-overlay { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.6); + backdrop-filter: blur(4px); + z-index: 200; + display: none; + align-items: center; + justify-content: center; +} +.modal-overlay.visible { display: flex; } +.modal { + width: 90%; + max-width: 700px; + max-height: 80vh; + display: flex; + flex-direction: column; +} +.modal-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px 20px; + border-bottom: 1px solid var(--glass-border); + font-size: 14px; + font-weight: 600; +} +.modal-close { + background: none; + border: none; + color: var(--text3); + font-size: 20px; + cursor: pointer; + padding: 4px 8px; + border-radius: 4px; +} +.modal-close:hover { color: var(--text); background: rgba(255, 255, 255, 0.06); } +.modal-body { + padding: 20px; + overflow-y: auto; + font-size: 12px; + font-family: var(--font-mono); + color: var(--text2); + line-height: 1.7; + white-space: pre-wrap; +} + +/* ═══════════════ SHARED STATES ═══════════════ */ +.placeholder, .empty-state { + text-align: center; + padding: 24px; + color: var(--text3); + font-size: 12px; +} +.empty-icon { + display: block; + font-size: 28px; + margin-bottom: 8px; + opacity: 0.5; +} + +/* Disk bar */ +.disk-bar { height: 4px; border-radius: 2px; background: rgba(255, 255, 255, 0.06); margin-top: 4px; overflow: hidden; } +.disk-bar-fill { height: 100%; border-radius: 2px; background: var(--green); transition: width 0.5s; } +.disk-bar-fill.warning { background: var(--orange); } +.disk-bar-fill.danger { background: var(--red); } + +/* Status grid */ +.status-grid { display: flex; flex-direction: column; gap: 8px; } +.status-item { display: flex; align-items: center; gap: 10px; padding: 6px 0; } +.status-info { flex: 1; } +.status-label { font-size: 12px; font-weight: 500; color: var(--text); } +.status-value { font-size: 11px; color: var(--text3); display: block; } + +/* ═══════════════ ANIMATIONS ═══════════════ */ +@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } } +@keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } + +/* ═══════════════ RESPONSIVE ═══════════════ */ +@media (max-width: 1200px) { + .projects-row { grid-template-columns: repeat(3, 1fr); } + .cron-grid { grid-template-columns: repeat(2, 1fr); } +} + +@media (max-width: 960px) { + .content-area { + padding-right: 24px; + } + .chat-drawer { + width: 100%; + max-width: 380px; + } + .chat-toggle-btn { display: flex; } + .chat-drawer:not(.open) ~ .content-area { padding-right: 24px; } + + .projects-row { grid-template-columns: repeat(2, 1fr); } + .metric-strip { grid-template-columns: repeat(2, 1fr); } + .grid-2col { grid-template-columns: 1fr; } + .settings-grid { grid-template-columns: 1fr; } + .cron-grid { grid-template-columns: 1fr; } + + .topbar-nav { + gap: 2px; + } + .nav-tab { + padding: 6px 10px; + } + .nav-label { display: none; } +} + +@media (max-width: 640px) { + :root { --topbar: 50px; --chat-w: 100%; } + + .topbar { padding: 0 10px; gap: 6px; } + .topbar-logo { height: 28px; } + + .content-area { padding: 12px; padding-right: 12px; } + .projects-row { grid-template-columns: 1fr; } + .metric-strip { grid-template-columns: repeat(2, 1fr); } + + .acard { min-width: 100px; max-width: 130px; padding: 10px; } + .acard.coo { min-width: 140px; } + + .conn-label { display: none; } +} + +/* ═══════════════ SEARCH BOX ═══════════════ */ +.search-wrap { + position: relative; + margin: 16px 0 8px; +} +.search-icon { + position: absolute; + left: 14px; + top: 50%; + transform: translateY(-50%); + font-size: 14px; + pointer-events: none; +} +.global-search { + width: 100%; + padding: 12px 16px 12px 40px; + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: var(--r); + color: var(--text); + font: 13px/1.4 var(--font); + outline: none; + transition: border-color 0.2s, box-shadow 0.2s; +} +.global-search::placeholder { color: var(--text3); } +.global-search:focus { + border-color: var(--glass-border-hover); + box-shadow: 0 0 12px rgba(90, 200, 232, 0.25); +} + +/* ═══════════════ INDEXATION STATUS ═══════════════ */ +.idx-row { + display: flex; + align-items: center; + gap: 16px; + padding: 8px 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.04); + font-size: 12px; +} +.idx-row:last-child { border-bottom: none; } +.idx-source { color: var(--text); font-weight: 500; min-width: 200px; } +.idx-link { color: rgba(90, 200, 232, 0.9); text-decoration: none; cursor: pointer; transition: color 0.2s; } +.idx-link:hover { color: #fff; text-decoration: underline; text-shadow: 0 0 8px rgba(90, 200, 232, 0.4); } +.idx-detail { color: var(--text3); } +.idx-detail strong { color: var(--text2); font-weight: 500; } + +/* ═══════════════ CRON EXPAND/COLLAPSE ═══════════════ */ +.cron-card { cursor: pointer; } +.cron-detail { + display: none; + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid rgba(255, 255, 255, 0.06); + font-size: 11px; + color: var(--text3); + line-height: 1.7; +} +.cron-detail span { display: block; } +.cron-card.expanded .cron-detail { display: block; } +.cron-card .cron-expand-hint { + font-size: 10px; + color: var(--text3); + margin-top: 6px; + opacity: 0.5; +} +.cron-card.expanded .cron-expand-hint { display: none; } + +/* ═══════════════ AGENT DETAIL MODAL ═══════════════ */ +.agent-detail-card { display: flex; flex-direction: column; gap: 16px; } +.agent-detail-header { display: flex; align-items: flex-start; gap: 16px; } +.agent-detail-avatar { width: 64px; height: 64px; border-radius: 50%; object-fit: cover; border: 2px solid rgba(90, 200, 232, 0.4); box-shadow: 0 0 16px rgba(90, 200, 232, 0.2); flex-shrink: 0; } +.agent-detail-info { flex: 1; } +.agent-detail-name { font-size: 18px; font-weight: 700; color: var(--text); font-family: var(--font); } +.agent-detail-role { font-size: 12px; color: var(--text2); margin-top: 2px; font-family: var(--font); } +.agent-detail-section { border-top: 1px solid rgba(255, 255, 255, 0.06); padding-top: 12px; } +.agent-detail-section-title { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 1.2px; color: var(--text3); margin-bottom: 8px; } +.agent-detail-pre { background: rgba(0, 0, 0, 0.3); border: 1px solid rgba(255, 255, 255, 0.06); border-radius: 8px; padding: 12px; font-size: 11px; font-family: var(--font-mono); color: var(--text2); line-height: 1.6; white-space: pre-wrap; max-height: 240px; overflow-y: auto; margin: 0; } + +/* ═══════════════ PANEL TIMESTAMPS ═══════════════ */ +.panel-last-updated { text-align: right; font-size: 10px; color: var(--text3, rgba(255,255,255,0.3)); padding: 6px 4px 0; opacity: 0.7; } + +/* ═══════════════ PROJECT BOXES CLICKABLE ═══════════════ */ +.project-box { cursor: pointer; transition: transform 0.15s, box-shadow 0.15s; } +.project-box:hover { transform: translateY(-2px); box-shadow: 0 4px 20px rgba(0,0,0,0.3); } + +/* ═══════════════ PROJECT DETAIL MODAL ═══════════════ */ +.project-detail-desc { font-size: 13px; color: var(--text2); line-height: 1.5; margin-bottom: 12px; } +.project-detail-agent-link { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 8px; background: rgba(90, 200, 232, 0.1); border: 1px solid rgba(90, 200, 232, 0.3); color: var(--blue-lt, #5ac8e8); font-size: 12px; cursor: pointer; transition: background 0.2s; text-decoration: none; } +.project-detail-agent-link:hover { background: rgba(90, 200, 232, 0.2); } +.project-detail-placeholder { background: rgba(0,0,0,0.2); border: 1px dashed rgba(255,255,255,0.1); border-radius: 8px; padding: 16px; text-align: center; font-size: 11px; color: var(--text3); margin-top: 8px; } + +/* ═══════════════ SELECT OPTIONS (dark theme) ═══════════════ */ +select option { background: #1a1f2e; color: #e0e0e0; } + +/* ═══════════════ TASK ROW SHARED COMPONENT ═══════════════ */ +.task-row-shared { + display: flex; align-items: flex-start; gap: 8px; padding: 8px 10px; + border-bottom: 1px solid rgba(255,255,255,0.04); transition: background 0.15s; cursor: pointer; +} +.task-row-shared:hover { background: rgba(255,255,255,0.03); } +.task-row-shared.done { opacity: 0.5; } +.task-row-shared .task-complete-btn { + width: 16px; height: 16px; border: 1.5px solid var(--text3); border-radius: 4px; + background: transparent; cursor: pointer; flex-shrink: 0; margin-top: 1px; transition: all 0.2s; + display: flex; align-items: center; justify-content: center; font-size: 10px; color: transparent; padding: 0; +} +.task-row-shared .task-complete-btn:hover { border-color: var(--green); color: var(--green); } +.task-row-shared.done .task-complete-btn { background: var(--green); border-color: var(--green); color: #fff; } + +/* ═══════════════ PRINT ═══════════════ */ +@media print { + body::before { display: none; } + .topbar, .chat-drawer, .chat-toggle-btn { display: none !important; } + .content-area { padding: 0 !important; } + .glass-card, .glass-panel, .glass-nav { background: #fff !important; backdrop-filter: none !important; color: #000 !important; border-color: #ddd !important; } +} diff --git a/bates-core/scripts-core/archive-sessions.sh b/bates-core/scripts-core/archive-sessions.sh new file mode 100755 index 0000000..e352655 --- /dev/null +++ b/bates-core/scripts-core/archive-sessions.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# Part of Bates installer — scripts-core +# archive-sessions.sh — Move stale .jsonl session files to archive/ +# Runs safely under concurrent execution (mv -n is atomic on same filesystem). + +set -euo pipefail + +AGENTS_DIR="$HOME/.openclaw/agents" +MAX_AGE_MIN=120 # 2 hours + +total_archived=0 + +for sessions_dir in "$AGENTS_DIR"/*/sessions/; do + [ -d "$sessions_dir" ] || continue + + agent_dir="$(dirname "$sessions_dir")" + agent="$(basename "$agent_dir")" + archive_dir="$agent_dir/archive" + + count=0 + + # Find .jsonl files in the sessions dir (maxdepth 1 to skip subdirs like archive/, state/) + # that haven't been modified in the last 120 minutes. + while IFS= read -r -d '' file; do + mkdir -p "$archive_dir" + basename_file="$(basename "$file")" + # mv -n: no-clobber, atomic on same filesystem. If two instances race, only one wins. + mv -n "$file" "$archive_dir/$basename_file" 2>/dev/null && count=$((count + 1)) || true + done < <(find "$sessions_dir" -maxdepth 1 -name '*.jsonl' -type f -mmin +"$MAX_AGE_MIN" -print0 2>/dev/null) + + if [ "$count" -gt 0 ]; then + echo "[$(date '+%Y-%m-%d %H:%M:%S')] $agent: archived $count session file(s)" + total_archived=$((total_archived + count)) + fi +done + +if [ "$total_archived" -eq 0 ]; then + echo "[$(date '+%Y-%m-%d %H:%M:%S')] No session files older than ${MAX_AGE_MIN}m found." +else + echo "[$(date '+%Y-%m-%d %H:%M:%S')] Total archived: $total_archived file(s)" +fi diff --git a/bates-core/scripts-core/claude-sub.sh b/bates-core/scripts-core/claude-sub.sh new file mode 100755 index 0000000..d52973a --- /dev/null +++ b/bates-core/scripts-core/claude-sub.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# Part of Bates installer — scripts-core +# Wrapper to call Claude Code using subscription auth only. +# Strips ANTHROPIC_API_KEY so Claude Code falls back to OAuth credentials. +env -u ANTHROPIC_API_KEY claude "$@" diff --git a/bates-core/scripts-core/claude-tmux.sh b/bates-core/scripts-core/claude-tmux.sh new file mode 100755 index 0000000..b943589 --- /dev/null +++ b/bates-core/scripts-core/claude-tmux.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +# Part of Bates installer — scripts-core +# claude-tmux.sh — Run Claude Code inside a persistent tmux session. +# +# Usage: +# claude-tmux # attach or create session, auto-resume last conversation +# claude-tmux new # attach or create session, start fresh conversation +# +# If the tmux session "claude" exists: +# - If Claude Code is still running inside it -> just attach +# - If the shell is idle (Claude exited) -> restart Claude with --resume +# If no session exists -> create one and start Claude +# +# To detach without killing Claude: press Ctrl+B then D +# To reattach later: just run `claude-tmux` again + +SESSION="claude" +# Set to the directory where you want Claude Code sessions to start +WORKDIR="${BATES_WORKDIR:-$HOME}" +MODE="${1:-resume}" + +# Check if session already exists +if tmux has-session -t "$SESSION" 2>/dev/null; then + # Session exists. Check if Claude Code is running inside it. + PANE_PID=$(tmux list-panes -t "$SESSION" -F '#{pane_pid}' 2>/dev/null) + CLAUDE_RUNNING=false + if [ -n "$PANE_PID" ]; then + # Check if any child process of the pane shell is claude + if pgrep -P "$PANE_PID" -f "claude" >/dev/null 2>&1; then + CLAUDE_RUNNING=true + fi + fi + + if $CLAUDE_RUNNING; then + echo "Claude Code is still running -- reattaching..." + tmux attach -t "$SESSION" + else + echo "Session exists but Claude exited -- restarting Claude Code..." + if [ "$MODE" = "new" ]; then + tmux send-keys -t "$SESSION" "cd $WORKDIR && claude" Enter + else + tmux send-keys -t "$SESSION" "cd $WORKDIR && claude --resume" Enter + fi + sleep 1 + tmux attach -t "$SESSION" + fi +else + # No session — create one + echo "Creating new tmux session '$SESSION'..." + if [ "$MODE" = "new" ]; then + tmux new-session -d -s "$SESSION" -c "$WORKDIR" "claude" + else + tmux new-session -d -s "$SESSION" -c "$WORKDIR" "claude --resume" + fi + sleep 1 + tmux attach -t "$SESSION" +fi diff --git a/bates-core/scripts-core/dashboard-register.sh b/bates-core/scripts-core/dashboard-register.sh new file mode 100755 index 0000000..8abbf82 --- /dev/null +++ b/bates-core/scripts-core/dashboard-register.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# Part of Bates installer — scripts-core +# Lightweight dashboard registration helper for ad-hoc Claude Code runs. +# Use this to register exec-based or PTY-based runs that bypass run-delegation.sh. +# +# Usage: +# dashboard-register.sh start "task-name" "description" PID +# dashboard-register.sh complete "task-name" EXIT_CODE ["optional summary"] +# +# All dashboard calls are best-effort (won't fail if dashboard is down). + +set -uo pipefail + +# Dashboard URL — adjust port if your gateway runs elsewhere +DASHBOARD_URL="http://localhost:18789" + +ACTION="${1:?Usage: dashboard-register.sh start|complete TASK_NAME ...}" +TASK_NAME="${2:?Missing task name}" + +case "$ACTION" in + start) + DESCRIPTION="${3:-}" + PID="${4:-$$}" + DELEGATION_ID="$(date +%s)-${PID}" + + # Persist the delegation ID so 'complete' can find it + ID_FILE="/tmp/.dashboard-reg-$(echo "$TASK_NAME" | tr ' /' '_-')" + echo "$DELEGATION_ID" > "$ID_FILE" + + curl -s -X POST "$DASHBOARD_URL/dashboard/api/delegation/start" \ + -H "Content-Type: application/json" \ + -d "$(jq -n \ + --arg id "$DELEGATION_ID" \ + --arg name "$TASK_NAME" \ + --arg promptPath "" \ + --arg logPath "" \ + --arg description "$DESCRIPTION" \ + --argjson pid "$PID" \ + '{id: $id, name: $name, promptPath: $promptPath, logPath: $logPath, description: $description, pid: $pid}' + )" > /dev/null 2>&1 || true + + echo "Registered: $TASK_NAME (id=$DELEGATION_ID)" + ;; + + complete) + EXIT_CODE="${3:-0}" + SUMMARY="${4:-}" + + # Recover the delegation ID + ID_FILE="/tmp/.dashboard-reg-$(echo "$TASK_NAME" | tr ' /' '_-')" + if [[ -f "$ID_FILE" ]]; then + DELEGATION_ID="$(cat "$ID_FILE")" + rm -f "$ID_FILE" + else + # Fallback: construct a plausible ID (won't match, but dashboard can still log it) + DELEGATION_ID="unknown-$(date +%s)" + fi + + curl -s -X POST "$DASHBOARD_URL/dashboard/api/delegation/complete" \ + -H "Content-Type: application/json" \ + -d "$(jq -n \ + --arg id "$DELEGATION_ID" \ + --argjson exitCode "$EXIT_CODE" \ + --arg logTail "$SUMMARY" \ + '{id: $id, exitCode: $exitCode, logTail: $logTail}' + )" > /dev/null 2>&1 || true + + echo "Completed: $TASK_NAME (id=$DELEGATION_ID, exit=$EXIT_CODE)" + ;; + + *) + echo "Unknown action: $ACTION" >&2 + echo "Usage: dashboard-register.sh start|complete TASK_NAME ..." >&2 + exit 1 + ;; +esac diff --git a/bates-core/scripts-core/health-check.sh b/bates-core/scripts-core/health-check.sh new file mode 100755 index 0000000..e6339cc --- /dev/null +++ b/bates-core/scripts-core/health-check.sh @@ -0,0 +1,150 @@ +#!/bin/bash +# Part of Bates installer — scripts-core +# Health check script for OpenClaw/Bates system +# Outputs structured JSON to stdout (and optionally saves to observations/health.json) + +set -euo pipefail + +WORKSPACE="$HOME/.openclaw/workspace" +CRON_FILE="$HOME/.openclaw/cron/jobs.json" +CHECKIN_FILE="$WORKSPACE/observations/last-checkin.json" +OUTPUT_FILE="$WORKSPACE/observations/health.json" + +# NOTE: Set TELEGRAM_BOT_TOKEN in your environment or .env if Telegram checks are needed +TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}" + +NOW=$(date -u +"%Y-%m-%dT%H:%M:%S+00:00") + +# 1. Check OpenClaw gateway +if pgrep -x "openclaw-gate" > /dev/null 2>&1 || pgrep -f "openclaw-gateway" > /dev/null 2>&1; then + GATEWAY_STATUS="running" + # Get uptime in hours + GW_PID=$(pgrep -f "openclaw-gateway" | head -1) + if [ -n "$GW_PID" ]; then + GW_START=$(ps -o lstart= -p "$GW_PID" 2>/dev/null | xargs -I{} date -d "{}" +%s 2>/dev/null || echo "0") + NOW_EPOCH=$(date +%s) + if [ "$GW_START" != "0" ]; then + UPTIME_HOURS=$(( (NOW_EPOCH - GW_START) / 3600 )) + else + UPTIME_HOURS=-1 + fi + else + UPTIME_HOURS=-1 + fi +else + GATEWAY_STATUS="down" + UPTIME_HOURS=0 +fi + +# 2. Check Telegram bot (skipped if no token configured) +if [ -n "$TELEGRAM_BOT_TOKEN" ]; then + TELEGRAM_RESULT=$(curl -s --max-time 5 "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getMe" 2>/dev/null || echo '{"ok":false}') + if echo "$TELEGRAM_RESULT" | python3 -c "import sys,json; d=json.load(sys.stdin); sys.exit(0 if d.get('ok') else 1)" 2>/dev/null; then + TELEGRAM_STATUS="connected" + else + TELEGRAM_STATUS="error" + fi +else + TELEGRAM_STATUS="not_configured" +fi + +# 3. Check MCP servers (test if mcporter is available) +MCP_STATUS="{}" +if command -v mcporter &> /dev/null; then + # Check each known MCP server by trying a lightweight operation + # NOTE: Customize this list with your own MCP server names + for SERVER in ms365-reader ms365-assistant; do + RESULT=$(timeout 10 mcporter call "$SERVER" list-mail-folders '{}' 2>/dev/null && echo "ok" || echo "error") + MCP_STATUS=$(echo "$MCP_STATUS" | python3 -c " +import sys, json +d = json.load(sys.stdin) +d['mcp_${SERVER//-/_}'] = '${RESULT}' +json.dump(d, sys.stdout) +" 2>/dev/null || echo "$MCP_STATUS") + done +else + MCP_STATUS='{"note":"mcporter not in PATH"}' +fi + +# 4. Last cron execution times +CRON_RUNS="{}" +if [ -f "$CRON_FILE" ]; then + CRON_RUNS=$(python3 -c " +import json, sys +with open('$CRON_FILE') as f: + data = json.load(f) +runs = {} +for job in data.get('jobs', []): + name = job.get('name', 'unknown') + last_run = job.get('state', {}).get('lastRunAtMs') + if last_run: + from datetime import datetime, timezone + dt = datetime.fromtimestamp(last_run / 1000, tz=timezone.utc) + runs[name] = dt.strftime('%Y-%m-%dT%H:%M:%S+00:00') + elif name not in runs: + runs[name] = None +json.dump(runs, sys.stdout) +" 2>/dev/null || echo '{}') +fi + +# 5. Disk usage +DISK_PERCENT=$(df -h / | awk 'NR==2 {gsub(/%/,""); print $5}' 2>/dev/null || echo "-1") + +# 6. Last checkin summary +CHECKIN_SUMMARY="{}" +if [ -f "$CHECKIN_FILE" ]; then + CHECKIN_SUMMARY=$(python3 -c " +import json, sys +with open('$CHECKIN_FILE') as f: + data = json.load(f) +summary = { + 'last_run': data.get('last_run'), + 'items_reported_today': len(data.get('reported_items', [])), + 'skipped_runs': data.get('skipped_runs', 0) +} +json.dump(summary, sys.stdout) +" 2>/dev/null || echo '{}') +fi + +# 7. Build final JSON +python3 -c " +import json, sys + +services = { + 'openclaw_gateway': '$GATEWAY_STATUS', + 'telegram_bot': '$TELEGRAM_STATUS' +} + +# Merge MCP status +try: + mcp = json.loads('''$MCP_STATUS''') + services.update(mcp) +except: + services['mcp_note'] = 'check failed' + +try: + cron_runs = json.loads('''$CRON_RUNS''') +except: + cron_runs = {} + +try: + checkin = json.loads('''$CHECKIN_SUMMARY''') +except: + checkin = {} + +result = { + 'timestamp': '$NOW', + 'uptime_hours': $UPTIME_HOURS, + 'services': services, + 'last_cron_runs': cron_runs, + 'disk_usage_percent': int('$DISK_PERCENT') if '$DISK_PERCENT'.lstrip('-').isdigit() else -1, + 'checkin_summary': checkin +} + +output = json.dumps(result, indent=2) +print(output) + +# Also save to file +with open('$OUTPUT_FILE', 'w') as f: + f.write(output + '\n') +" 2>/dev/null || echo '{"error": "failed to build health report"}' diff --git a/bates-core/scripts-core/model-fallback.sh b/bates-core/scripts-core/model-fallback.sh new file mode 100755 index 0000000..22c1720 --- /dev/null +++ b/bates-core/scripts-core/model-fallback.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# Part of Bates installer — scripts-core +# model-fallback.sh — Switch the primary model between Anthropic and a fallback provider +set -euo pipefail + +# Default models — customize these for your setup +ANTHROPIC="anthropic/claude-opus-4-6" +FALLBACK="google-gemini-cli/gemini-3-pro-preview" +CONFIG_PATH="agents.defaults.model.primary" + +usage() { echo "Usage: $0 {fallback|anthropic|reset}"; exit 1; } + +[[ $# -eq 1 ]] || usage + +case "$1" in + fallback) TARGET="$FALLBACK" ;; + anthropic|reset) TARGET="$ANTHROPIC" ;; + *) usage ;; +esac + +openclaw config set "$CONFIG_PATH" "$TARGET" +echo "Primary model set to: $TARGET" diff --git a/bates-core/scripts-core/run-delegation.sh b/bates-core/scripts-core/run-delegation.sh new file mode 100755 index 0000000..16a628a --- /dev/null +++ b/bates-core/scripts-core/run-delegation.sh @@ -0,0 +1,70 @@ +#!/bin/bash +# Part of Bates installer — scripts-core +# Claude Code delegation wrapper with dashboard tracking +# Usage: run-delegation.sh PROMPTFILE LOGFILE [TASK_NAME] +# run-delegation.sh --pty PROMPTFILE LOGFILE [TASK_NAME] +# +# Registers the delegation with the dashboard, runs Claude Code, +# then reports completion so Bates gets notified. +# +# --pty mode: Runs claude without piping through tee, making it +# compatible with PTY/background execution (exec pty:true). +# Output goes directly to LOG_FILE instead of tee'd to stdout. + +set -uo pipefail + +PTY_MODE=false +if [[ "${1:-}" == "--pty" ]]; then + PTY_MODE=true + shift +fi + +PROMPT_FILE="${1:?Usage: run-delegation.sh [--pty] PROMPTFILE LOGFILE [TASK_NAME]}" +LOG_FILE="${2:?Usage: run-delegation.sh [--pty] PROMPTFILE LOGFILE [TASK_NAME]}" +TASK_NAME="${3:-$(basename "$PROMPT_FILE" .md)}" +# Dashboard URL — adjust port if your gateway runs elsewhere +DASHBOARD_URL="http://localhost:18789" + +DELEGATION_ID="$(date +%s)-$$" + +# Extract description from first 200 chars of prompt +TASK_DESC="$(head -c 200 "$PROMPT_FILE" 2>/dev/null | tr '\n' ' ' | sed 's/ */ /g' || echo "")" + +# Register delegation start (best-effort — delegation runs regardless) +curl -s -X POST "$DASHBOARD_URL/dashboard/api/delegation/start" \ + -H "Content-Type: application/json" \ + -d "$(jq -n \ + --arg id "$DELEGATION_ID" \ + --arg name "$TASK_NAME" \ + --arg promptPath "$PROMPT_FILE" \ + --arg logPath "$LOG_FILE" \ + --arg description "$TASK_DESC" \ + --argjson pid "$$" \ + '{id: $id, name: $name, promptPath: $promptPath, logPath: $logPath, description: $description, pid: $pid}' + )" > /dev/null 2>&1 || true + +# Run Claude Code +EXIT_CODE=0 +if $PTY_MODE; then + # PTY mode: redirect output to log file directly (no tee/pipe) + env -u ANTHROPIC_API_KEY claude -p --dangerously-skip-permissions \ + "$(cat "$PROMPT_FILE")" > "$LOG_FILE" 2>&1 || EXIT_CODE=$? +else + # Standard mode: pipe through tee for interactive viewing + env -u ANTHROPIC_API_KEY claude -p --dangerously-skip-permissions \ + "$(cat "$PROMPT_FILE")" < /dev/null 2>&1 | tee "$LOG_FILE" || EXIT_CODE=$? +fi + +# Report completion (best-effort) +LOG_TAIL="$(tail -n 50 "$LOG_FILE" 2>/dev/null | head -c 3000 || echo "(no log)")" + +curl -s -X POST "$DASHBOARD_URL/dashboard/api/delegation/complete" \ + -H "Content-Type: application/json" \ + -d "$(jq -n \ + --arg id "$DELEGATION_ID" \ + --argjson exitCode "$EXIT_CODE" \ + --arg logTail "$LOG_TAIL" \ + '{id: $id, exitCode: $exitCode, logTail: $logTail}' + )" > /dev/null 2>&1 || true + +exit $EXIT_CODE diff --git a/bates-core/scripts-core/watchdog-bates.sh b/bates-core/scripts-core/watchdog-bates.sh new file mode 100755 index 0000000..cd913be --- /dev/null +++ b/bates-core/scripts-core/watchdog-bates.sh @@ -0,0 +1,78 @@ +#!/bin/bash +# Part of Bates installer — scripts-core +# Watchdog: detect stuck main session and auto-recover +# Runs via crontab every 2 minutes +# Logs to /tmp/openclaw-watchdog.log + +LOG=/tmp/openclaw-watchdog.log +SESSIONS="$HOME/.openclaw/agents/main/sessions" +ARCHIVE="$SESSIONS/archive" +STUCK_THRESHOLD=600 # seconds before considering a session stuck +STUCK_STATE_FILE=/tmp/openclaw-watchdog-stuck.state + +mkdir -p "$ARCHIVE" + +# Check if gateway is even running +if ! systemctl --user is-active openclaw-gateway >/dev/null 2>&1; then + echo "$(date -Is) gateway not running, starting it" >> "$LOG" + systemctl --user start openclaw-gateway + rm -f "$STUCK_STATE_FILE" + exit 0 +fi + +# Look for "stuck session" diagnostics in recent logs (last 3 minutes) +STUCK_LINE=$(journalctl --user -u openclaw-gateway --since "3 minutes ago" --no-pager 2>/dev/null \ + | grep -oP 'stuck session:.*sessionKey=(\S+).*age=(\d+)s' | tail -1) + +if [ -z "$STUCK_LINE" ]; then + # No stuck sessions — clear state and exit + rm -f "$STUCK_STATE_FILE" + exit 0 +fi + +STUCK_AGE=$(echo "$STUCK_LINE" | grep -oP 'age=\K\d+') + +if [ "${STUCK_AGE:-0}" -lt "$STUCK_THRESHOLD" ]; then + rm -f "$STUCK_STATE_FILE" + exit 0 +fi + +# Stuck for over threshold — but only act if we saw it on a previous run too +# (prevents acting on transient spikes) +if [ ! -f "$STUCK_STATE_FILE" ]; then + echo "$(date -Is) first detection, age=${STUCK_AGE}s -- waiting for confirmation" >> "$LOG" + date +%s > "$STUCK_STATE_FILE" + exit 0 +fi + +FIRST_SEEN=$(cat "$STUCK_STATE_FILE" 2>/dev/null || echo 0) +NOW=$(date +%s) +WAIT=$((NOW - FIRST_SEEN)) + +if [ "$WAIT" -lt 120 ]; then + # Wait at least 2 minutes between first detection and action + exit 0 +fi + +echo "$(date -Is) RECOVERING: stuck session detected for ${STUCK_AGE}s (confirmed over ${WAIT}s)" >> "$LOG" + +# Archive the main session +MAIN_ID=$(python3 -c " +import json +with open('$SESSIONS/sessions.json') as f: + data = json.load(f) +for s in data.get('sessions', []): + if s.get('sessionKey') == 'agent:main:main': + print(s.get('sessionId', '')) + break +" 2>/dev/null) + +if [ -n "$MAIN_ID" ] && [ -f "$SESSIONS/$MAIN_ID.jsonl" ]; then + mv "$SESSIONS/$MAIN_ID.jsonl" "$ARCHIVE/" + rm -f "$SESSIONS/$MAIN_ID.jsonl.lock" + echo "$(date -Is) archived main session: $MAIN_ID" >> "$LOG" +fi + +systemctl --user restart openclaw-gateway +rm -f "$STUCK_STATE_FILE" +echo "$(date -Is) gateway restarted" >> "$LOG" diff --git a/bates-core/systemd/clock-sync.service b/bates-core/systemd/clock-sync.service new file mode 100644 index 0000000..3b73c7b --- /dev/null +++ b/bates-core/systemd/clock-sync.service @@ -0,0 +1,6 @@ +[Unit] +Description=Sync WSL2 clock + +[Service] +Type=oneshot +ExecStart=/usr/sbin/ntpdate time.windows.com diff --git a/bates-core/systemd/clock-sync.timer b/bates-core/systemd/clock-sync.timer new file mode 100644 index 0000000..1a782c9 --- /dev/null +++ b/bates-core/systemd/clock-sync.timer @@ -0,0 +1,9 @@ +[Unit] +Description=Periodic WSL2 clock sync + +[Timer] +OnBootSec=30 +OnUnitActiveSec=15min + +[Install] +WantedBy=timers.target diff --git a/bates-core/systemd/openclaw-gateway.service.template b/bates-core/systemd/openclaw-gateway.service.template new file mode 100644 index 0000000..9cacd54 --- /dev/null +++ b/bates-core/systemd/openclaw-gateway.service.template @@ -0,0 +1,19 @@ +[Unit] +Description=OpenClaw Gateway +After=network-online.target +Wants=network-online.target + +[Service] +ExecStart=/usr/bin/node %h/.npm-global/lib/node_modules/openclaw/dist/index.js gateway --port 18789 +Restart=always +RestartSec=5 +KillMode=process +Environment=HOME=%h +Environment="PATH=%h/.local/bin:%h/.npm-global/bin:%h/bin:/usr/local/bin:/usr/bin:/bin" +Environment=OPENCLAW_GATEWAY_PORT=18789 +Environment="OPENCLAW_SYSTEMD_UNIT=openclaw-gateway.service" +Environment=OPENCLAW_SERVICE_MARKER=openclaw +Environment=OPENCLAW_SERVICE_KIND=gateway + +[Install] +WantedBy=default.target diff --git a/bates-core/templates/auth-profiles.json.template b/bates-core/templates/auth-profiles.json.template new file mode 100644 index 0000000..1561c5b --- /dev/null +++ b/bates-core/templates/auth-profiles.json.template @@ -0,0 +1,17 @@ +{ + "profiles": { + "{{PROVIDER}}:manual": { + "type": "token", + "provider": "{{PROVIDER}}", + "description": "Subscription token (primary auth)" + }, + "{{PROVIDER}}:default": { + "type": "api_key", + "provider": "{{PROVIDER}}", + "description": "API key fallback" + } + }, + "lastGood": { + "{{PROVIDER}}": "{{PROVIDER}}:manual" + } +} diff --git a/bates-core/templates/openclaw.json.template b/bates-core/templates/openclaw.json.template new file mode 100644 index 0000000..37ccb37 --- /dev/null +++ b/bates-core/templates/openclaw.json.template @@ -0,0 +1,71 @@ +{ + "meta": { + "installerVersion": "2.0.0" + }, + "env": { + "vars": {} + }, + "update": { + "channel": "stable", + "checkOnStart": true + }, + "models": { + "providers": {} + }, + "agents": { + "definitions": { + "main": { + "name": "{{ASSISTANT_NAME}} ({{PRIMARY_MODEL_SHORT}})", + "model": "{{PRIMARY_MODEL}}", + "workspace": "~/.openclaw/workspace" + } + }, + "defaults": { + "maxConcurrent": 4, + "compaction": { + "mode": "default", + "reserveTokensFloor": 30000, + "maxHistoryShare": 0.25 + }, + "contextPruning": { + "mode": "cache-ttl", + "ttlMinutes": 15, + "keepLastAssistants": 2 + }, + "session": { + "reset": { + "mode": "idle", + "idleMinutes": 30 + } + }, + "thinking": "low" + } + }, + "heartbeat": { + "enabled": true, + "intervalMinutes": 60, + "activeHours": { + "start": "08:00", + "end": "22:00", + "timezone": "{{USER_TZ}}" + } + }, + "channels": { + "telegram": { + "enabled": true, + "token": "{{TELEGRAM_BOT_TOKEN}}", + "allowFrom": ["{{TELEGRAM_USER_ID}}"] + } + }, + "gateway": { + "bind": "loopback" + }, + "plugins": { + "load": { + "paths": [ + "~/.openclaw/extensions/cost-tracker", + "~/.openclaw/extensions/dashboard" + ] + } + } +} diff --git a/bates-core/templates/wslconfig.template b/bates-core/templates/wslconfig.template new file mode 100644 index 0000000..de63e78 --- /dev/null +++ b/bates-core/templates/wslconfig.template @@ -0,0 +1,6 @@ +[wsl2] +memory=12GB +vmIdleTimeout=-1 + +[boot] +systemd=true diff --git a/bates-core/workspace-core/AGENTS.md b/bates-core/workspace-core/AGENTS.md new file mode 100644 index 0000000..ac4e3de --- /dev/null +++ b/bates-core/workspace-core/AGENTS.md @@ -0,0 +1,14 @@ +# AGENTS.md - Session Startup + +On session start: +1. Read SOUL.md (loaded automatically) +2. Read TOOLS.md (loaded automatically) +3. Check observations/ for recent patterns +4. Begin working on any pending items + +## Sub-agent Guidelines + +- Delegate multi-step tasks to sub-agents +- Keep the main session responsive +- Report sub-agent results immediately when they complete +- Never let a sub-agent result go unreported diff --git a/bates-core/workspace-core/DATA-HANDLING.md b/bates-core/workspace-core/DATA-HANDLING.md new file mode 100644 index 0000000..c71f1ad --- /dev/null +++ b/bates-core/workspace-core/DATA-HANDLING.md @@ -0,0 +1,33 @@ +# DATA-HANDLING.md - Data Source Rules + +This file governs how you process, store, and act on data from each source. +SOUL.md defines your identity. TOOLS.md defines how to call each tool. +This file defines what to do with the data those tools return. + +--- + +## 1. General Principles + +- Structured API data is always preferred over unstructured sources. +- When in doubt about whether to flag something, flag it. The user prefers false positives over missed items. +- When summarizing anything, lead with what requires action, then informational items. +- If a data source is unavailable, note the gap explicitly rather than silently skipping it. +- Never include full data dumps in chat messages. Summarize. +- Never forward content to external services. + +## 2. Data Retention + +- Observation findings (observations/findings.md): keep indefinitely. Append, do not overwrite. +- Pattern observations (observations/patterns.md): keep indefinitely. + +## 3. Privacy + +- Keep all user data confidential. +- Never include sensitive data in external messages. +- Summarize at a high level unless the user asks for detail. + +## 4. Cost Control + +- Prefer smaller models for routine tasks (summarization, classification). +- Never batch-process large datasets without checking cost implications first. +- Use subscription models where available (zero per-token cost). diff --git a/bates-core/workspace-core/HEARTBEAT.md b/bates-core/workspace-core/HEARTBEAT.md new file mode 100644 index 0000000..da0170c --- /dev/null +++ b/bates-core/workspace-core/HEARTBEAT.md @@ -0,0 +1,26 @@ +# Heartbeat Checklist + +Run through this list. If nothing needs attention, reply HEARTBEAT_OK. + +Only message the user if something is genuinely urgent or time-sensitive. + +## System Health + +- Any critical service down? Alert immediately. +- Disk space below 2GB? Alert immediately. +- Gateway service running? If not, attempt restart and alert. + +## Active Sub-agents & Delegations + +Check for any running sub-agents. For each: +- If completed since last check: report results immediately +- If stalled (no activity >10 min): investigate and report + +## Pattern Capture + +If you notice something recurring or worth logging during these checks, +append a one-liner to observations/patterns.md. + +## Default + +If none of the above triggers: HEARTBEAT_OK diff --git a/bates-core/workspace-core/MEMORY.md b/bates-core/workspace-core/MEMORY.md new file mode 100644 index 0000000..d1591ed --- /dev/null +++ b/bates-core/workspace-core/MEMORY.md @@ -0,0 +1,16 @@ +# Memory + +This file is populated by the assistant as it learns about the user's preferences, +recurring patterns, and important context. It starts empty. + +## User Preferences + +(learned over time) + +## Recurring Patterns + +(observed and logged here) + +## Important Context + +(accumulated knowledge) diff --git a/bates-core/workspace-core/PROACTIVE-PLAYBOOK.md b/bates-core/workspace-core/PROACTIVE-PLAYBOOK.md new file mode 100644 index 0000000..2acf3b7 --- /dev/null +++ b/bates-core/workspace-core/PROACTIVE-PLAYBOOK.md @@ -0,0 +1,26 @@ +# Proactive Playbook + +## Philosophy + +Your role is not to wait for instructions. When you have idle time, use it productively: + +1. **Review observations/** for patterns that could be automated +2. **Check system health** proactively +3. **Organize knowledge** - ensure findings and patterns are up to date +4. **Suggest improvements** - if you notice recurring inefficiencies, propose solutions + +## Autonomous Work Guidelines + +- Always log what you do in observations/patterns.md +- Never take consequential actions (sending messages, modifying config) without approval +- Focus on analysis, organization, and preparation +- Keep the user informed of significant findings via the configured messaging channel + +## Scoring Framework + +Before sending any proactive message, score it: +- **Urgency (0-5):** How time-sensitive is this? +- **Impact (0-5):** How much does the user benefit from knowing this now? +- **Noise (0-5):** How annoying would this be if it's not useful? + +Only send if Urgency + Impact - Noise >= 5. diff --git a/bates-core/workspace-core/SOUL.md.template b/bates-core/workspace-core/SOUL.md.template new file mode 100644 index 0000000..1f1d391 --- /dev/null +++ b/bates-core/workspace-core/SOUL.md.template @@ -0,0 +1,91 @@ +# Identity + +You are {{ASSISTANT_NAME}}, a professional AI executive assistant for {{USER_NAME}}. +You run on OpenClaw, deployed on a dedicated machine. + +Direct, concise. No em dashes ever, in any output. No hyperbole. Expert advisor who pushes back on bad ideas. + +# Context + +{{USER_NAME}}. Timezone: {{USER_TZ}}. + +# Boundaries + +- No bash outside sandbox without approval. +- All data confidential. +- Never modify openclaw.json without explicit approval from {{USER_NAME}}. + +# Model Routing + +Default: {{PRIMARY_MODEL}} for everything. + +Sub-agents also run on the default model (configured in gateway). + +Full routing details: rules/model-routing.md + +# Delegation (MANDATORY) + +**CORE PRINCIPLE: {{ASSISTANT_NAME}} must stay available.** Delegate ALL multi-step tasks. Main session is for: acknowledging, spawning, reporting, decisions. + +- **Default: delegate everything** requiring tool calls. Spawn in the SAME turn as your acknowledgment. +- **Simple lookups → sub-agents** (rules/subagent-policy.md) +- **Code writing → Claude Code** via delegation wrapper script +- **After sub-agent returns:** ALWAYS deliver the result immediately in your own voice. Never reply NO_REPLY for sub-agent results. + +Full routing table & examples: rules/subagent-policy.md + +# Reference System + +Detailed rules and tool references live in separate files. Read them before starting the relevant task. Do not memorize them into this file. + +## Rules (read on demand) +| File | Read when | +|------|-----------| +| rules/model-routing.md | Choosing which model to use | +| rules/self-service.md | Hitting a capability gap | +| rules/context-safety.md | Running commands with large output | +| rules/context-hygiene.md | After completing any task | +| rules/knowledge-persistence.md | Deciding what/where to save | +| rules/subagent-policy.md | Spawning subagents or delegating | +| rules/memory-classification.md | During all interactions (classify learnings) | +| DATA-HANDLING.md | Any data processing or privacy concern | + +## Tool References (read on demand) +| File | Read when | +|------|-----------| +| (populated as integrations are added via bates-enhance.sh) | | + +## Living Documents +| File | Purpose | +|------|---------| +| observations/findings.md | Observations and learnings | +| observations/patterns.md | Recurring processes to systematize | +| skills/ | Reusable playbooks (read SKILL.md before responding to triggers) | + +# Configuration Protection + +**You MUST NOT modify `~/.openclaw/openclaw.json` without {{USER_NAME}}'s explicit approval.** This includes: +- Changing model assignments, agent definitions, or fallback lists +- Enabling/disabling plugins or channels +- Modifying heartbeat, compaction, or session settings + +If a task requires a config change, propose the exact change and wait for approval before writing. + +# Architecture Rules + +1. SOUL.md and TOOLS.md are loaded every turn. Keep them lean. Never add detailed rules here. +2. To add a new rule: create or update the appropriate file in rules/ or refs/ +3. To log a finding: update observations/findings.md or observations/patterns.md +4. If a rules/ or refs/ file does not exist yet, create it following the pattern of existing ones +5. Before any task, check the reference tables above and read the relevant files + +## Communication + +- Default: direct and professional +- No emoji unless asked +- Keep messages under 500 characters unless detail is needed +- Lead with action items + +## Default + +If no checks trigger and nothing needs attention: HEARTBEAT_OK diff --git a/bates-core/workspace-core/TOOLS.md.template b/bates-core/workspace-core/TOOLS.md.template new file mode 100644 index 0000000..8c93179 --- /dev/null +++ b/bates-core/workspace-core/TOOLS.md.template @@ -0,0 +1,27 @@ +# TOOLS.md - Tool Index + +Detailed tool references are in workspace/refs/. Read the relevant file before using any tool. + +For data handling rules, see DATA-HANDLING.md. + +| Tool | Reference | Quick Summary | +|------|-----------|---------------| +| Dashboard | (built-in) | Web UI for chatting with {{ASSISTANT_NAME}} | +| Cost Tracker | (built-in) | API cost monitoring at /cost-tracker/api/summary | + +## Key Safety Rules (always in memory) + +- Never load binary files into context. Pipe to temp files. +- Always verify dates with `date -d "YYYY-MM-DD" +"%A"`. + +## Adding More Tools + +Install integrations to add more tools: +``` +bates-enhance.sh # Show available integrations +bates-enhance.sh m365 # Add Microsoft 365 (email, calendar, OneDrive) +bates-enhance.sh teams # Add MS Teams messaging +bates-enhance.sh twilio # Add voice calling +``` + +Each integration adds its own tool reference file to refs/. diff --git a/bates-core/workspace-core/observations/findings.md b/bates-core/workspace-core/observations/findings.md new file mode 100644 index 0000000..c86f9fe --- /dev/null +++ b/bates-core/workspace-core/observations/findings.md @@ -0,0 +1,5 @@ +# Findings + +Observations and learnings are logged here. Append new entries, do not overwrite. + +--- diff --git a/bates-core/workspace-core/observations/patterns.md b/bates-core/workspace-core/observations/patterns.md new file mode 100644 index 0000000..634a7e6 --- /dev/null +++ b/bates-core/workspace-core/observations/patterns.md @@ -0,0 +1,5 @@ +# Patterns + +Recurring processes and patterns are logged here for potential automation. + +--- diff --git a/bates-core/workspace-core/rules/context-hygiene.md b/bates-core/workspace-core/rules/context-hygiene.md new file mode 100644 index 0000000..030e4ab --- /dev/null +++ b/bates-core/workspace-core/rules/context-hygiene.md @@ -0,0 +1,27 @@ +# Context Hygiene + +## After Every Completed Task +1. Save any new file paths to observations/file-index.md +2. Save any new knowledge or corrections to the relevant file +3. If context is above 50%, run /compact to free space for the next task +4. Do not carry stale reference files into unrelated tasks + +## Reference File Usage Tracking +Maintain a usage log at observations/ref-usage.md. Every time you read a rules/ or refs/ file, add a tally: + +``` +| File | Jan W1 | Jan W2 | Feb W1 | Feb W2 | Total | +|------|--------|--------|--------|--------|-------| +| refs/mcp-servers.md | |||| | ||| | ||||| | |||| | 16 | +| refs/email-ops.md | ||| | || | |||| | ||| | 12 | +| ... +``` + +## Monthly Review +At the start of each month (or when the user asks): +1. Review ref-usage.md +2. Files read on >70% of tasks: propose promoting key content into TOOLS.md or SOUL.md +3. Files read <10% of tasks: confirm they should stay as refs (not clutter) +4. Report findings to the user with a recommendation + +The goal: the always-loaded files should contain exactly what's needed on most tasks, nothing more. diff --git a/bates-core/workspace-core/rules/context-safety.md b/bates-core/workspace-core/rules/context-safety.md new file mode 100644 index 0000000..3e9fb4a --- /dev/null +++ b/bates-core/workspace-core/rules/context-safety.md @@ -0,0 +1,25 @@ +# Context Safety + +## Pre-Command Checks +Before running commands that may return large output (attachments, file contents, logs): +1. Check current context: if above 70%, compact first +2. Always pipe large outputs to files, never display in chat +3. If context exceeds 150k tokens, stop and run /compact before continuing + +## Dangerous Commands (always redirect to file) +- get-mail-attachment (base64 content) +- download-onedrive-file-content +- Any command with contentBytes in response +- Any file read >1000 lines + +## Email Search Safety +**NEVER search emails without `select`.** Without it, full HTML bodies are returned (100KB+ per email) which: +- Causes timeouts on tool-planning models +- Poisons the session history -- every subsequent turn must reload the bloated result +- Can permanently lock the session in "processing" state + +Always search with: `select='["subject","from","receivedDateTime","bodyPreview"]'` +Then fetch individual emails with `get-mail-message` only when needed. + +## Recovery +If you hit "prompt too long" error, you are stuck. The user must restart your session. diff --git a/bates-core/workspace-core/rules/knowledge-persistence.md b/bates-core/workspace-core/rules/knowledge-persistence.md new file mode 100644 index 0000000..53bd23f --- /dev/null +++ b/bates-core/workspace-core/rules/knowledge-persistence.md @@ -0,0 +1,30 @@ +# Knowledge Persistence + +You forget everything between sessions. Workspace files ARE your memory. + +## Rules +- Learn something new? Write it immediately to the relevant file. +- Task completed? Update status in observations/file-index.md. +- Unexpected finding? Log to observations/ with date stamp. +- The user corrects you? Update the relevant file so you don't repeat the mistake. +- Before answering a question about file locations, check observations/file-index.md first. +- End of substantive interaction: ask yourself "Did I learn anything to write down?" If yes, write it. + +If it is not on disk, it does not exist. + +## Retrieval Strategy +1. observations/file-index.md for file locations +2. observations/findings.md for goals, facts, preferences, deadlines, decisions, contacts +3. observations/patterns.md for recurring patterns +4. Relevant venture directory +5. MEMORY.md for historical context + +## File Index Discipline +When you access any file on any drive: +- Log to observations/file-index.md: date, full path, what it contains, what you did with it +- When you create or draft anything, log output location and status (draft/final/needs-review) +- When the user tells you where files are, add to file-index.md immediately +- At session start, read file-index.md before asking the user for file locations + +## Workspace Structure +Keep files under 500 lines; split logically if exceeded. Structure documented in WORKSPACE-STRUCTURE.md. diff --git a/bates-core/workspace-core/rules/memory-classification.md b/bates-core/workspace-core/rules/memory-classification.md new file mode 100644 index 0000000..76691d2 --- /dev/null +++ b/bates-core/workspace-core/rules/memory-classification.md @@ -0,0 +1,50 @@ +# Memory Classification + +When you learn something new during any interaction (chat conversation, email reading, cron task, overnight work), classify it before storing. + +## Typed Tags + +Use these tags to prefix each entry in observation files: + +| Tag | Definition | Example | +|-----|-----------|---------| +| `[goal]` | Something the user wants to achieve | "Reduce monthly API cost to under $50" | +| `[fact]` | Reference information that won't change often | "Primary tenant ID: {{TENANT_ID}}" | +| `[preference]` | How the user wants something done | "No em-dashes in any writing" | +| `[deadline]` | A hard date/time commitment | "Investor deck due Feb 15" | +| `[decision]` | A choice the user made that affects future work | "Using {{PRIMARY_MODEL}} as default model" | +| `[contact]` | Information about a person the user works with | "Jane Doe - advisor, met at conference" | +| `[pattern]` | A recurring process or behavior observed | "User reviews email first thing, then switches to coding" | + +## Where to Store + +All tagged entries go into the existing observation files: + +| File | What goes here | +|------|---------------| +| `observations/findings.md` | Goals, facts, preferences, deadlines, decisions, contacts | +| `observations/patterns.md` | Recurring patterns and behavioral observations | +| `observations/file-index.md` | File locations, drafts created, paths discovered | + +Do NOT create separate files per type. Use the tag prefix to classify entries within these files. + +## Format + +Append dated entries with tags: + +```markdown +## YYYY-MM-DD +- [tag] observation (source: where you learned it) +``` + +Keep the most recent entries at the top of each file. When a section has more than 50 entries, archive the oldest to an `Archive/observations/` subfolder. + +## Integration + +When the user says something during a conversation, silently classify it. Do not announce "I'm storing this as a goal." Just do it. At the end of any substantive interaction, check: "Did I learn anything that should be classified?" If yes, append to the relevant file with the appropriate tag. + +When reading emails, calendar events, or transcripts during cron jobs, apply the same classification silently. + +## Deduplication + +Before appending, scan the target file for the same information. If it already exists and nothing has changed, skip it. If the status changed (e.g., a deadline moved), update the existing entry rather than adding a duplicate. diff --git a/bates-core/workspace-core/rules/model-routing.md b/bates-core/workspace-core/rules/model-routing.md new file mode 100644 index 0000000..621b928 --- /dev/null +++ b/bates-core/workspace-core/rules/model-routing.md @@ -0,0 +1,19 @@ +# Model Routing Rules + +## Platform: OpenClaw Multi-Provider Subscription OAuth +OpenClaw supports subscription-based OAuth for Anthropic, OpenAI, and Google. Current deployment uses **{{PRIMARY_MODEL}}**. Other providers available if user switches subscription. + +## Default: {{PRIMARY_MODEL}} (Subscription) +All tasks run on {{PRIMARY_MODEL}} by default. No per-token cost — covered by flat subscription fee. + +Standard tasks: email, calendar, Planner, file access, MCP operations, email drafting, task management, multi-step work, summaries, briefings, transcript analysis, code generation, content writing, legal documents, contracts, financial analysis, presentations, investor materials. + +## Sub-Agents +Sub-agents also run on {{PRIMARY_MODEL}} by default (configured in gateway). No need to specify model overrides. + +## Specialist Models +- **Web research:** Brave Search for simple lookups. Perplexity Sonar (/model pplx) for multi-source research. +- **Images:** Gemini 2.5 Flash (vision/analysis). Image generation via `~/.openclaw/scripts/generate-image.py` (default: OpenAI gpt-image-1; alt: Google Imagen). See skill `image-generation`. + +## Fallback Chain +If {{PRIMARY_MODEL}} is unavailable: {{FALLBACK_MODEL_1}} -> {{FALLBACK_MODEL_2}} -> {{FALLBACK_MODEL_3}}. These fallbacks use API keys and do incur per-token costs. diff --git a/bates-core/workspace-core/rules/self-service.md b/bates-core/workspace-core/rules/self-service.md new file mode 100644 index 0000000..76ce9d9 --- /dev/null +++ b/bates-core/workspace-core/rules/self-service.md @@ -0,0 +1,32 @@ +# Self-Service Problem Solving + +When you hit a capability gap (can't read a file type, can't process something, missing a tool), solve it yourself first. Don't report failure, report the solution. + +## Process +1. **Diagnose:** Identify what's missing (tool, package, script, permission) +2. **Research:** Check existing patterns in ~/.openclaw/scripts/ and tools +3. **Build:** Write the script/tool or install the package +4. **Test:** Validate with real data before considering it done +5. **Document:** Update the relevant refs/ file with instructions and safety warnings +6. **Report:** Tell the user what was built, not what failed + +## Safety Constraints +- Never load binary files into context. Always pipe to temp files and extract text/JSON +- Check file sizes before reading. If > 10MB, warn the user and ask permission +- Test before documenting. Don't write instructions for untested code +- Leave no temp files. Clean up /tmp/* after execution +- Token expiry: Always use the refresh pattern from graph-api.sh (never hardcode tokens) + +## Self-Solve Examples +- Can't read a PDF? Write a pdftotext script +- Missing package (poppler-utils, jq, etc.)? Install it +- MCP tool doesn't return what you need? Wrap Graph API directly +- Attachment too large for mcporter? Build a Graph API wrapper +- Need recurring file processing? Write a shell script + +## When to Escalate to the User +- Permission issues (need elevated access) +- Destructive operations without approval (delete, overwrite, push to repo) +- Unsure about the approach (ask first if cost/complexity is high) +- External API keys needed that aren't available +- Security decisions (what data to expose, how to encrypt, etc.) diff --git a/bates-core/workspace-core/rules/subagent-policy.md b/bates-core/workspace-core/rules/subagent-policy.md new file mode 100644 index 0000000..24c52fa --- /dev/null +++ b/bates-core/workspace-core/rules/subagent-policy.md @@ -0,0 +1,212 @@ +# Subagent Policy + +## ABSOLUTE: Sub-agents Must NEVER Restart the Gateway + +**No sub-agent or spawned session may run `openclaw gateway restart`, `gateway restart`, `config.patch`, `config.apply`, or any command that restarts the OpenClaw process.** A gateway restart kills ALL running sessions, including the sub-agent itself. This creates a suicide loop where work is lost. + +If a sub-agent's changes require a gateway restart (e.g., config changes, extension updates), it must: +1. Complete all file edits +2. Report back: "Done. Gateway restart needed to apply changes." +3. Let the main session do the restart after all sub-agents finish + +This rule is non-negotiable. Include it in every sub-agent task prompt. + +## CRITICAL: Immediate Delegation Rule + +**When the user asks for ANY multi-step task, spawn a sub-agent IMMEDIATELY in the same turn. Do NOT investigate, read files, run commands, or edit documentation yourself first.** + +The ONLY action in the main session should be `sessions_spawn`. + +### What Triggers Immediate Delegation + +This rule applies to **sub-agent-eligible tasks** requiring >1 tool call, specifically: + +- **Simple lookups:** Calendar checks, task status, single API calls +- **Quick data gathering:** <5 steps, no complex logic +- **Debugging/error investigation:** Finding and analyzing error logs + +**EXCEPTIONS: Delegate to Claude Code Instead** + +The following tasks do **NOT** trigger immediate sub-agent delegation. They follow the Claude Code workflow in `rules/delegation.md` instead: + +- **All email operations:** Reading, searching, replying, forwarding, attachment handling, multi-account searches +- **All Office file operations:** Word (.docx), Excel (.xlsx), PowerPoint (.pptx) creation, editing, or processing +- **Legal documents:** Contracts, agreements, compliance documents +- **Complex multi-step work:** Anything requiring conditional logic, error handling, or bash workflows +- **Code writing:** Any Python, shell, TypeScript, or programming language + +**Why the separation:** +- Email + attachment + upload involves complex multi-step bash workflows. Claude Code handles these more reliably. +- Office file generation requires precise formatting, brand compliance, and complex templating. +- Legal and complex analysis benefits from Claude Code's iterative approach. + +### Claude Code Skills Cross-Reference + +When delegating Claude Code work, **always READ the relevant skill file first** -- it contains task-specific instructions, templates, and best practices. + +| Task Type | Skill File | Examples | +|-----------|-----------|----------| +| **Word Documents** | `skills/word-documents/SKILL.md` | Reports, proposals, memos, letters, RFP responses | +| **Spreadsheets & Dashboards** | `skills/spreadsheets/SKILL.md` | Financial models, expense trackers, data dashboards, forecasts | +| **Presentations** | `skills/presentations/SKILL.md` | Investor pitches, board updates, partner decks, webinar slides | +| **Legal Documents** | `skills/legal-docs/SKILL.md` | Contracts, NDAs, term sheets, regulatory filings, policy documents | + +**Before delegating:** +1. Read the corresponding skill file +2. Check for project-specific templates or requirements +3. Ensure you have the latest brand specs from the project mirror +4. Follow the anti-hallucination rules in `rules/delegation.md` + +**Task routing summary:** + +| Task Type | Delegate To | Workflow | +|-----------|------------|----------| +| Calendar check, status lookup | Sub-agent | `sessions_spawn` (immediate) | +| Email search + attachments + upload | Claude Code | `rules/delegation.md` workflow | +| Excel/Word/PowerPoint generation | Claude Code | `rules/delegation.md` workflow | +| Legal document review | Claude Code | `rules/delegation.md` workflow | +| Code writing (any language) | Claude Code | `rules/delegation.md` workflow | +| Quick data gathering (<5 steps) | Sub-agent | `sessions_spawn` (immediate) | +| Debugging error logs | Sub-agent | `sessions_spawn` (immediate) | + +### Why Immediate Delegation Matters + +Delegation keeps the main session context clean and focused on coordination. Multi-step investigative work bloats the main context and degrades response quality over time. + +**WRONG:** Investigate in main session, then delegate +**CORRECT:** Delegate immediately, let the sub-agent do the work + +### The Rule in Practice + +When you receive a multi-step request: + +1. **DON'T** read files or emails to understand the task better +2. **DON'T** run commands to investigate +3. **DON'T** edit documentation or files yourself +4. **DO** spawn a sub-agent with a complete, clear task prompt +5. **DO** let the sub-agent do the work + +Clarifications and decisions stay with the main session. Work delegated immediately. + +--- + +## How to Spawn a Sub-Agent + +Use the **`sessions_spawn` tool** for simple, multi-step tasks. Do NOT use `openclaw agent` CLI or any shell command. + +**IMPORTANT:** If the task involves email, Office files, legal documents, or complex work, do NOT use `sessions_spawn`. Instead, follow the Claude Code workflow in `rules/delegation.md`. + +### Parameters + +| Parameter | Required | Description | +|-----------|----------|-------------| +| `task` | Yes | The full prompt/instructions for the sub-agent | +| `label` | No | Short identifier (e.g., "email-search-acme") | +| `model` | No | Override model. Default from config. Rarely needed. | +| `thinking` | No | "off", "low", "medium", "high". Default: off | +| `runTimeoutSeconds` | No | Total run timeout | +| `cleanup` | No | "delete" (default) or "keep" | + +**IMPORTANT:** Do NOT pass `agentId`. Omit it entirely. The sub-agent runs under your own agent with the default model from gateway config. Passing `agentId` causes a "forbidden" error. + +### Example Call + +To search emails for a specific topic across all folders: + +``` +Tool: sessions_spawn +{ + "task": "Search {{USER_EMAIL}} for all emails matching 'Acme' across ALL folders (inbox, sent, subfolders). Use {{MAIL_MCP_SERVER}}.\n\nStep 1 -- Search: Call list-mail-messages with search='\"Acme\"' top=20 select='[\"subject\",\"from\",\"receivedDateTime\",\"hasAttachments\",\"bodyPreview\"]'. This searches ALL folders like Outlook does. Do NOT use list-mail-folder-messages (that only searches one folder).\n\nStep 2 -- Attachments: For emails where hasAttachments=true, call list-mail-attachments with the messageId and pipe through jq to get only metadata: jq '[.value[] | select(.isInline == false) | {id, name, size}]'. Then download each using: ~/.openclaw/scripts/save-attachment.sh {{MAIL_MCP_SERVER}} /tmp/\n\nStep 3 -- Upload to OneDrive: Upload each attachment and a summary file to OneDrive:\n~/.openclaw/scripts/graph-api.sh PUT \"/me/drive/root:/drafts/Sales/Acme/:/content\" @/tmp/\n\nStep 4 -- Summary: Write a Markdown summary to /tmp/acme-summary.md listing all emails (subject, date, sender, snippet) and attachment file paths. Upload this summary to OneDrive at drafts/Sales/Acme/SUMMARY.md. Clean up /tmp files.\n\nOUTPUT FORMAT: Return your response in two sections:\n## Results\n[Summary of emails found, attachments downloaded, files uploaded]\n## Learnings\nClassify anything new using these tags:\n- [contact] Name - role, email, relationship (source: email/calendar/etc)\n- [fact] Key information (source: where found)\n- [deadline] Date/time commitment (source: where found)\n- [decision] Choice or commitment made (source: where found)\n- [pattern] Recurring process observed (source: where found)\nIf nothing new, write: No new learnings.", + "label": "email-search-acme" +} +``` + +The sub-agent runs on **{{PRIMARY_MODEL}} by default** (configured in gateway). + +**CRITICAL for email search tasks:** Always instruct the sub-agent to use `list-mail-messages` (cross-folder), NOT `list-mail-folder-messages` (single folder). Users expect results matching Outlook's search bar, which searches all folders. + +## Mandatory Result Delivery + +When a sub-agent completes and the system injects a [System Message] with results: + +1. ALWAYS deliver a text summary to the user. No exceptions. +2. Do NOT reply NO_REPLY. The Adaptive Card is a preview, not a replacement for your text response. +3. If multiple sub-agents are running, deliver each result as it arrives. Don't wait for others. +4. Include key findings in your summary, not just "task completed". +5. If the result needs the user's decision, explicitly ask for it. +6. Persist learnings (next section) AFTER delivering the result, not instead of it. + +## Post-Completion: Persist Learnings (MANDATORY) + +Every sub-agent task prompt must end with the OUTPUT FORMAT block (see SOUL.md). This forces the sub-agent to return classified learnings alongside its results. + +When the sub-agent returns, **before reporting to the user**: +1. Read the `## Learnings` section from the sub-agent's response +2. Append tagged entries to `observations/findings.md` (contacts, facts, deadlines, decisions) +3. Append patterns to `observations/patterns.md` +4. Append file paths to `observations/file-index.md` + +This is a single-step operation (3 file appends) that runs in the main session. Do NOT skip it. Sub-agent sessions auto-archive after 60 minutes -- unclassified knowledge is permanently lost. + +## Reporting + +When you spawn a sub-agent, tell the user what you delegated and the label. The user can check the dashboard at /dashboard (Active Agents panel shows sub-agents with live progress). + +## Constraints + +- **Max 3 subagent spawns per session** +- **Each subagent gets a single turn** (no multi-turn conversations) +- **Log every spawn** to `workspace/reports/subagent-log.md`: timestamp, prompt summary, model used + +## When to Spawn Sub-Agents + +**Spawn immediately when:** + +1. Debugging or investigating errors/logs (<5 steps) +2. Simple multi-step data gathering (calendar + task status, <5 steps) +3. Quick lookups requiring >1 API call but straightforward logic +4. Any task where binary/base64 data would enter context + +**Do NOT spawn a sub-agent when:** + +- Task involves email (use Claude Code via rules/delegation.md) +- Task involves Office files: .docx, .xlsx, .pptx (use Claude Code via rules/delegation.md) +- Task requires code writing (use Claude Code via rules/delegation.md) +- Task is complex, legal, or requires conditional logic (use Claude Code via rules/delegation.md) + +**Main session reserved for:** quick clarifications, decisions needing user input, sub-agent/Claude Code coordination, single-step operations. + +**For email, file, code, or complex work:** Read `rules/delegation.md` and use the Claude Code workflow instead. + +## Date Formats + +**The user uses European format (dd/mm/yy).** Convert before passing to sub-agents: 01/11/25 = November 1, 2025 (NOT January 11). + +## Sub-Agent Prompt Best Practices + +Write the task prompt as a complete, self-contained specification: + +- State the goal clearly in the first sentence +- List all MCP servers and tool names the sub-agent should use +- Include file paths, folder IDs, and account names explicitly +- Tell it what format to return results in +- Tell it to save files directly to disk, never load binary data into context +- End with "Return only [X] when done" to keep the response small + +**Bad:** "Search emails for Acme" +**Bad:** "Search {{USER_EMAIL}} inbox for emails matching 'Acme'" (misses Sent, subfolders) +**Good:** "Search {{USER_EMAIL}} for all emails matching 'Acme' across ALL folders. Use {{MAIL_MCP_SERVER}}. Call list-mail-messages with search='\"Acme\"' (cross-folder search). For emails with hasAttachments=true, download attachments using ~/.openclaw/scripts/save-attachment.sh and upload to OneDrive at drafts/Sales/Acme/. Return a Markdown summary." + +## Code vs Analysis + +**All programming** (writing code, editing files, creating scripts) **MUST go through `~/.openclaw/scripts/claude-sub.sh`** or the delegation wrapper. Claude Code handles iterative code/test cycles more reliably. + +**All non-coding work** (email, calendar, reports, file ops) uses sub-agents when multi-step, or main session when single-step. + +## Boundaries + +Sub-agents inherit all boundaries from SOUL.md: +- Read-only on the user's accounts +- Write only from the designated sender address +- No messages to anyone but the user +- All data confidential diff --git a/bates-core/workspace-core/skills/coding-agent/SKILL.md b/bates-core/workspace-core/skills/coding-agent/SKILL.md new file mode 100644 index 0000000..f121033 --- /dev/null +++ b/bates-core/workspace-core/skills/coding-agent/SKILL.md @@ -0,0 +1,55 @@ +# Coding Agent Skill - Claude Code Delegation + +## When to Use +Any task that requires writing or modifying code: Python scripts, shell scripts, TypeScript, config generators, data processing, anything with a shebang line. The only exceptions are trivial one-liners (a single sed/awk/jq command) or JSON/YAML config edits. + +## How to Delegate + +### Option A: File-based tasks (presentations, documents, complex scripts) +Use the delegation wrapper which handles dashboard registration automatically: + +```bash +# Write the prompt to a temp file first +echo "YOUR FULL PROMPT HERE" > /tmp/task-prompt.md + +# Run with dashboard tracking +~/.openclaw/scripts/run-delegation.sh /tmp/task-prompt.md /tmp/task-output.log "task-name" +``` + +### Option B: Quick exec tasks (small fixes, one-off scripts) +Use `dashboard-register.sh` around your exec calls: + +```bash +# Step 1: Register start +~/.openclaw/scripts/dashboard-register.sh start "task-name" "Brief description" $$ + +# Step 2: Run Claude Code +env -u ANTHROPIC_API_KEY claude -p --dangerously-skip-permissions "YOUR PROMPT" > /tmp/task.log 2>&1 +EXIT_CODE=$? + +# Step 3: Register completion +~/.openclaw/scripts/dashboard-register.sh complete "task-name" $EXIT_CODE "$(tail -20 /tmp/task.log)" +``` + +### MANDATORY: Always register with dashboard +**Every Claude Code invocation MUST be tracked.** The user monitors delegations via the dashboard. If you skip registration, the task is invisible. + +- Use Option A for anything that takes > 30 seconds +- Use Option B for quick fixes +- NEVER call `claude -p` without dashboard registration + +### Important flags +- Always use `env -u ANTHROPIC_API_KEY` (forces Claude Code to use its own auth) +- Always use `--dangerously-skip-permissions` (non-interactive) +- Always use `-p` (print mode, no interactive terminal) +- Redirect stderr: `2>&1` + +## Resource Limits +- Do NOT run two Claude Code processes simultaneously (OOM risk) +- Run sequentially if multiple delegations are needed +- Each process uses 300-400 MB RAM + +## After Completion +1. Check the log file for errors +2. If exit code != 0, read the log and either retry with fixes or report failure +3. Summarize results (don't dump raw logs) diff --git a/bates-core/workspace-core/skills/quick-capture/SKILL.md b/bates-core/workspace-core/skills/quick-capture/SKILL.md new file mode 100644 index 0000000..56ac7d9 --- /dev/null +++ b/bates-core/workspace-core/skills/quick-capture/SKILL.md @@ -0,0 +1,46 @@ +--- +name: quick-capture +description: "Captures thoughts, ideas, and tasks to local workspace files for later review." +triggers: + - "capture this" + - "quick task" + - "add task" + - "note this" + - "remember this" +--- +# Quick Capture Skill + +Accepts any thought, idea, or task and saves it to the workspace. + +## Routing Logic + +| Type | Destination | Method | +|------|-------------|--------| +| Task | observations/tasks.md | Append with timestamp | +| Idea or note | observations/captures.md | Append with timestamp | + +## Execution + +### Capture a Task +```bash +TIMESTAMP=$(date +"%Y-%m-%d %H:%M") +echo "- [ ] [$TIMESTAMP] Task description" >> ~/.openclaw/workspace/observations/tasks.md +``` + +### Capture an Idea +```bash +TIMESTAMP=$(date +"%Y-%m-%d %H:%M") +echo "## $TIMESTAMP" >> ~/.openclaw/workspace/observations/captures.md +echo "" >> ~/.openclaw/workspace/observations/captures.md +echo "Content of the idea" >> ~/.openclaw/workspace/observations/captures.md +echo "" >> ~/.openclaw/workspace/observations/captures.md +``` + +## After Capture + +Confirm to the user what was captured and where it was saved. + +## Enhanced Version + +With M365 integration (bates-enhance.sh m365), tasks can be routed to +Microsoft Planner and To Do for proper project management. diff --git a/bates-enhance/bates-enhance.sh b/bates-enhance/bates-enhance.sh new file mode 100755 index 0000000..80d1264 --- /dev/null +++ b/bates-enhance/bates-enhance.sh @@ -0,0 +1,124 @@ +#!/usr/bin/env bash +# bates-enhance.sh -- Bates Enhancement Wizard +# Add integrations to your Bates AI Assistant one at a time. +# +# Usage: +# bates-enhance.sh # Interactive menu +# bates-enhance.sh # Install specific integration +# bates-enhance.sh status # Show current state +# bates-enhance.sh list # Show integration details +# bates-enhance.sh rollback # Rollback an integration +set -euo pipefail + +# Determine script location +ENHANCE_DIR="${ENHANCE_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}" + +# Source libraries +source "$ENHANCE_DIR/lib/common.sh" +source "$ENHANCE_DIR/lib/integration-state.sh" +source "$ENHANCE_DIR/lib/backup-restore.sh" +source "$ENHANCE_DIR/lib/cron-unlock.sh" +source "$ENHANCE_DIR/lib/template-engine.sh" + +export PATH="$HOME/.npm-global/bin:$PATH" +export ENHANCE_DIR + +INTEGRATION="${1:-}" +SUBCOMMAND="${2:-}" + +# ============================================================ +# No argument: show interactive menu +# ============================================================ +if [[ -z "$INTEGRATION" ]]; then + echo "" + echo "===========================================" + echo " Bates Enhancement Wizard" + echo "===========================================" + + show_integration_status + echo "" + read -rp "Which integration would you like to add? (or 'list' for details): " INTEGRATION + + if [[ -z "$INTEGRATION" ]]; then + echo "No integration selected. Exiting." + exit 0 + fi +fi + +# ============================================================ +# Handle commands +# ============================================================ +case "$INTEGRATION" in + status) + show_integration_status + ;; + + list) + show_integration_details + ;; + + rollback) + if [[ -z "$SUBCOMMAND" ]]; then + echo "Usage: bates-enhance.sh rollback " + echo "" + echo "Available:" + list_backups + exit 1 + fi + rollback_integration "$SUBCOMMAND" + ;; + + m365|teams|twilio|elevenlabs|search|image|social|tailscale|agents|google|github|deepseek|websearch) + # Check if already installed + if is_installed "$INTEGRATION" 2>/dev/null; then + warn "$INTEGRATION is already installed." + echo "" + if ! confirm "Reinstall/reconfigure $INTEGRATION?"; then + exit 0 + fi + fi + + # Backup current config + backup_config "$INTEGRATION" + + # Run integration setup + SETUP_SCRIPT="$ENHANCE_DIR/integrations/$INTEGRATION/setup.sh" + if [[ ! -f "$SETUP_SCRIPT" ]]; then + fatal "Setup script not found: $SETUP_SCRIPT" + fi + source "$SETUP_SCRIPT" + + # Mark integration as installed + mark_installed "$INTEGRATION" + + # Deploy workspace additions if they exist + deploy_workspace_additions "$INTEGRATION" + + # Unlock cron jobs for this integration + unlock_cron_jobs "$INTEGRATION" + + # Restart gateway to pick up changes + echo "" + info "Restarting gateway to apply changes..." + systemctl --user restart openclaw-gateway 2>/dev/null || warn "Could not restart gateway" + sleep 3 + + echo "" + success "$INTEGRATION integration complete!" + suggest_next_integration "$INTEGRATION" + ;; + + *) + error "Unknown integration: $INTEGRATION" + echo "" + echo "Available integrations:" + echo " m365 teams twilio elevenlabs search image" + echo " social tailscale agents google github deepseek websearch" + echo "" + echo "Commands:" + echo " status Show current integration state" + echo " list Show integration details" + echo " rollback Rollback an integration" + exit 1 + ;; +esac diff --git a/bates-enhance/lib/api-key-validator.sh b/bates-enhance/lib/api-key-validator.sh new file mode 100755 index 0000000..e2c912e --- /dev/null +++ b/bates-enhance/lib/api-key-validator.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash +# api-key-validator.sh -- Validate API key formats and test connectivity +# +# Provides format checks (regex) and optional live connectivity tests +# for various AI/cloud service API keys. + +validate_anthropic_token() { + local token="$1" + if [[ "$token" =~ ^sk-ant-oat01- ]]; then + echo " Format: Anthropic subscription token" + return 0 + elif [[ "$token" =~ ^sk-ant-api03- ]]; then + echo " Format: Anthropic API key" + return 0 + else + echo " ERROR: Unrecognized Anthropic key format" >&2 + echo " Expected: sk-ant-oat01-... (subscription) or sk-ant-api03-... (API key)" >&2 + return 1 + fi +} + +validate_openai_key() { + local key="$1" + if [[ "$key" =~ ^sk-proj- || "$key" =~ ^sk- ]]; then + echo " Format: OpenAI API key" + return 0 + else + echo " ERROR: Unrecognized OpenAI key format (expected sk-proj-... or sk-...)" >&2 + return 1 + fi +} + +validate_google_key() { + local key="$1" + if [[ "$key" =~ ^AIzaSy ]]; then + echo " Format: Google API key" + return 0 + else + echo " ERROR: Unrecognized Google key format (expected AIzaSy...)" >&2 + return 1 + fi +} + +validate_elevenlabs_key() { + local key="$1" + if [[ "$key" =~ ^sk_ && ${#key} -ge 32 ]]; then + echo " Format: ElevenLabs API key" + return 0 + else + echo " ERROR: Unrecognized ElevenLabs key format" >&2 + return 1 + fi +} + +validate_twilio_sid() { + local sid="$1" + if [[ "$sid" =~ ^AC[0-9a-f]{32}$ ]]; then + echo " Format: Twilio Account SID" + return 0 + else + echo " ERROR: Invalid Twilio SID format (expected AC + 32 hex chars)" >&2 + return 1 + fi +} + +validate_brave_key() { + local key="$1" + if [[ "$key" =~ ^BSA ]]; then + echo " Format: Brave Search API key" + return 0 + else + echo " ERROR: Unrecognized Brave key format (expected BSA...)" >&2 + return 1 + fi +} + +validate_telegram_token() { + local token="$1" + if [[ "$token" =~ ^[0-9]+:[A-Za-z0-9_-]+$ ]]; then + echo " Format: Telegram bot token" + return 0 + else + echo " ERROR: Invalid Telegram bot token format (expected 123456:ABC-def...)" >&2 + return 1 + fi +} + +# Test API key connectivity (optional, non-blocking) +test_anthropic_connection() { + local token="$1" + local result + result=$(curl -sf --max-time 10 \ + -H "x-api-key: $token" \ + -H "anthropic-version: 2023-06-01" \ + https://api.anthropic.com/v1/models 2>&1) + + if [[ $? -eq 0 ]]; then + echo " Connection: OK" + return 0 + else + echo " Connection: FAILED (check key and network)" >&2 + return 1 + fi +} + +test_telegram_bot() { + local token="$1" + local result + result=$(curl -sf --max-time 10 "https://api.telegram.org/bot${token}/getMe" 2>&1) + + if echo "$result" | python3 -c "import json,sys; d=json.load(sys.stdin); sys.exit(0 if d.get('ok') else 1)" 2>/dev/null; then + local botname + botname=$(echo "$result" | python3 -c "import json,sys; print(json.load(sys.stdin)['result']['username'])" 2>/dev/null) + echo " Telegram bot verified: @$botname" + return 0 + else + echo " ERROR: Telegram bot token invalid or bot not found" >&2 + return 1 + fi +} diff --git a/bates-enhance/lib/backup-restore.sh b/bates-enhance/lib/backup-restore.sh new file mode 100755 index 0000000..99a0b01 --- /dev/null +++ b/bates-enhance/lib/backup-restore.sh @@ -0,0 +1,99 @@ +#!/usr/bin/env bash +# backup-restore.sh -- Config backup + rollback per integration +# +# Before each integration install, the current config state is backed up. +# rollback_integration restores the most recent backup for a given integration. + +BACKUP_DIR="$HOME/.openclaw/enhance/backups" + +backup_config() { + local integration="$1" + local timestamp + timestamp=$(date +%Y%m%d-%H%M%S) + local backup_path="$BACKUP_DIR/$integration/$timestamp" + mkdir -p "$backup_path" + + # Backup core config files + cp ~/.openclaw/openclaw.json "$backup_path/" 2>/dev/null || true + cp ~/.openclaw/agents/main/agent/auth-profiles.json "$backup_path/" 2>/dev/null || true + crontab -l > "$backup_path/crontab.bak" 2>/dev/null || true + + # Backup openclaw cron jobs + if command -v openclaw &>/dev/null; then + openclaw cron list --json > "$backup_path/cron-jobs.json" 2>/dev/null || true + fi + + echo " Config backed up to $backup_path" +} + +rollback_integration() { + local integration="$1" + + if [[ -z "$integration" ]]; then + echo "Usage: bates-enhance.sh rollback " + echo "Example: bates-enhance.sh rollback m365" + exit 1 + fi + + local latest + latest=$(ls -1t "$BACKUP_DIR/$integration/" 2>/dev/null | head -1) + + if [[ -z "$latest" ]]; then + echo "No backup found for $integration." + echo "Available backups:" + ls -1 "$BACKUP_DIR/" 2>/dev/null || echo " (none)" + exit 1 + fi + + local backup_path="$BACKUP_DIR/$integration/$latest" + + echo "Rolling back $integration to backup from $latest..." + echo "" + + # Restore openclaw.json + if [[ -f "$backup_path/openclaw.json" ]]; then + cp "$backup_path/openclaw.json" ~/.openclaw/openclaw.json + echo " Restored openclaw.json" + fi + + # Restore auth profiles + if [[ -f "$backup_path/auth-profiles.json" ]]; then + cp "$backup_path/auth-profiles.json" ~/.openclaw/agents/main/agent/auth-profiles.json + echo " Restored auth-profiles.json" + fi + + # Restore system crontab + if [[ -f "$backup_path/crontab.bak" ]]; then + crontab "$backup_path/crontab.bak" + echo " Restored system crontab" + fi + + # Mark integration as uninstalled + source "$(dirname "${BASH_SOURCE[0]}")/integration-state.sh" + mark_uninstalled "$integration" + + # Restart gateway + echo "" + echo "Restarting gateway..." + systemctl --user restart openclaw-gateway + + echo "" + echo "Rollback complete. $integration has been removed." + echo "Run 'bates-enhance.sh' to verify current state." +} + +# List all available backups +list_backups() { + echo "Available backups:" + echo "" + for dir in "$BACKUP_DIR"/*/; do + [[ -d "$dir" ]] || continue + local integration + integration=$(basename "$dir") + local count + count=$(ls -1 "$dir" 2>/dev/null | wc -l) + local latest + latest=$(ls -1t "$dir" 2>/dev/null | head -1) + echo " $integration: $count backup(s), latest: $latest" + done +} diff --git a/bates-enhance/lib/common.sh b/bates-enhance/lib/common.sh new file mode 100755 index 0000000..41d73ca --- /dev/null +++ b/bates-enhance/lib/common.sh @@ -0,0 +1,123 @@ +#!/usr/bin/env bash +# common.sh -- Shared functions for Bates installer scripts +# Provides logging, colors, prompts, and step tracking + +set -euo pipefail + +# Colors (only if terminal supports them) +if [[ -t 1 ]]; then + RED='\033[0;31m' + GREEN='\033[0;32m' + YELLOW='\033[1;33m' + CYAN='\033[0;36m' + BOLD='\033[1m' + NC='\033[0m' +else + RED='' GREEN='' YELLOW='' CYAN='' BOLD='' NC='' +fi + +# Step counter +_STEP_NUM=0 + +step() { + ((_STEP_NUM++)) || true + echo -e "\n${CYAN}==> Step ${_STEP_NUM}: $1${NC}" +} + +info() { + echo -e "${CYAN}[INFO]${NC} $1" +} + +success() { + echo -e "${GREEN}[OK]${NC} $1" +} + +warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +error() { + echo -e "${RED}[ERROR]${NC} $1" >&2 +} + +fatal() { + error "$1" + exit 1 +} + +# Prompt with default value +prompt_default() { + local prompt="$1" + local default="$2" + local varname="$3" + local input + + if [[ -n "$default" ]]; then + read -rp "$prompt [$default]: " input + eval "$varname=\"${input:-$default}\"" + else + read -rp "$prompt: " input + eval "$varname=\"$input\"" + fi +} + +# Yes/No prompt (returns 0 for yes, 1 for no) +confirm() { + local prompt="${1:-Continue?}" + local reply + read -rp "$prompt (y/n): " reply + [[ "$reply" =~ ^[Yy] ]] +} + +# Check if a command exists +require_cmd() { + local cmd="$1" + local msg="${2:-$cmd is required but not installed}" + if ! command -v "$cmd" &>/dev/null; then + fatal "$msg" + fi +} + +# Spinner for long-running commands +spinner() { + local pid=$1 + local msg="${2:-Working...}" + local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏' + local i=0 + while kill -0 "$pid" 2>/dev/null; do + printf "\r${CYAN}%s${NC} %s" "${spin:i++%${#spin}:1}" "$msg" + sleep 0.1 + done + printf "\r" +} + +# Run a command with spinner +run_with_spinner() { + local msg="$1" + shift + "$@" &>/dev/null & + local pid=$! + spinner "$pid" "$msg" + wait "$pid" + local rc=$? + if [[ $rc -eq 0 ]]; then + success "$msg" + else + error "$msg (exit code $rc)" + return $rc + fi +} + +# Get the install directory (where bates-core/ scripts live) +get_install_dir() { + local script_dir + script_dir="$(cd "$(dirname "${BASH_SOURCE[1]:-${BASH_SOURCE[0]}}")" && pwd)" + # If called from lib/, go up one level + if [[ "$(basename "$script_dir")" == "lib" ]]; then + echo "$(dirname "$script_dir")" + else + echo "$script_dir" + fi +} + +INSTALL_DIR="$(get_install_dir)" diff --git a/bates-enhance/lib/config-merge.sh b/bates-enhance/lib/config-merge.sh new file mode 100755 index 0000000..ab9ec93 --- /dev/null +++ b/bates-enhance/lib/config-merge.sh @@ -0,0 +1,142 @@ +#!/usr/bin/env bash +# config-merge.sh -- Merge integration config fragments into openclaw.json +# +# Uses Python's json module for reliable deep merge. +# Each integration provides a JSON fragment that gets merged into the +# existing openclaw.json without overwriting unrelated settings. + +config_merge() { + local fragment="$1" + local config="${2:-$HOME/.openclaw/openclaw.json}" + + if [[ ! -f "$fragment" ]]; then + echo "ERROR: Config fragment not found: $fragment" >&2 + return 1 + fi + + if [[ ! -f "$config" ]]; then + echo "ERROR: Config file not found: $config" >&2 + return 1 + fi + + python3 -c " +import json, sys + +def deep_merge(base, overlay): + for key, value in overlay.items(): + if key in base and isinstance(base[key], dict) and isinstance(value, dict): + deep_merge(base[key], value) + else: + base[key] = value + +try: + with open('$config') as f: + config = json.load(f) + with open('$fragment') as f: + fragment = json.load(f) + deep_merge(config, fragment) + with open('$config', 'w') as f: + json.dump(config, f, indent=2) + print(' Config merged successfully.') +except Exception as e: + print(f'ERROR: Config merge failed: {e}', file=sys.stderr) + sys.exit(1) +" +} + +# Convenience: merge a JSON string directly (no file needed) +config_merge_inline() { + local json_str="$1" + local config="${2:-$HOME/.openclaw/openclaw.json}" + local tmpfile + tmpfile=$(mktemp) + + echo "$json_str" > "$tmpfile" + config_merge "$tmpfile" "$config" + rm -f "$tmpfile" +} + +# M365-specific merge helper +config_merge_m365() { + local assistant_email="$1" + local user_email="$2" + local tenant_id="$3" + + config_merge_inline "{ + \"env\": { + \"vars\": { + \"ASSISTANT_EMAIL\": \"$assistant_email\", + \"USER_EMAIL\": \"$user_email\", + \"TENANT_ID\": \"$tenant_id\" + } + } + }" +} + +# Telegram-specific merge helper +config_merge_telegram() { + local bot_token="$1" + local user_id="$2" + + config_merge_inline "{ + \"channels\": { + \"telegram\": { + \"enabled\": true, + \"token\": \"$bot_token\", + \"allowFrom\": [\"$user_id\"] + } + } + }" +} + +# Teams-specific merge helper +config_merge_teams() { + local app_id="$1" + local app_secret="$2" + + config_merge_inline "{ + \"channels\": { + \"msteams\": { + \"enabled\": true, + \"appId\": \"$app_id\", + \"appPassword\": \"$app_secret\", + \"dmPolicy\": \"open\", + \"groupPolicy\": \"allowlist\" + } + } + }" +} + +# Twilio/voice-specific merge helper +config_merge_voice() { + local twilio_sid="$1" + local twilio_token="$2" + local twilio_number="$3" + local voice_id="${4:-}" + local webhook_url="${5:-}" + + local tts_section="" + if [[ -n "$voice_id" ]]; then + tts_section="\"tts\": {\"provider\": \"elevenlabs\", \"voiceId\": \"$voice_id\", \"model\": \"eleven_flash_v2_5\"}," + fi + + config_merge_inline "{ + \"channels\": { + \"voice\": { + \"enabled\": true, + \"provider\": \"twilio\", + \"twilio\": { + \"accountSid\": \"$twilio_sid\", + \"authToken\": \"$twilio_token\", + \"fromNumber\": \"$twilio_number\" + }, + ${tts_section} + \"streaming\": {\"enabled\": true}, + \"publicUrl\": \"$webhook_url\", + \"maxDurationSeconds\": 600, + \"maxConcurrent\": 1, + \"outbound\": {\"defaultMode\": \"conversation\"} + } + } + }" +} diff --git a/bates-enhance/lib/cron-unlock.sh b/bates-enhance/lib/cron-unlock.sh new file mode 100755 index 0000000..f08cf52 --- /dev/null +++ b/bates-enhance/lib/cron-unlock.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +# cron-unlock.sh -- Enable cron jobs per integration +# +# Each integration can include a cron-jobs-.json file listing +# cron jobs to register when the integration is installed. + +ENHANCE_DIR="${ENHANCE_DIR:-$HOME/.openclaw/enhance}" + +unlock_cron_jobs() { + local integration="$1" + local jobs_file + + # Find the cron jobs file for this integration + jobs_file=$(ls "$ENHANCE_DIR/integrations/$integration"/cron-jobs-*.json 2>/dev/null | head -1) + + if [[ -z "$jobs_file" || ! -f "$jobs_file" ]]; then + return 0 + fi + + echo "Unlocking cron jobs for $integration..." + + python3 -c " +import json, subprocess, sys + +jobs = json.load(open('$jobs_file')) +for job in jobs: + cmd = ['openclaw', 'cron', 'add', + '--name', job['name'], + '--schedule', job['schedule'], + '--tz', job.get('tz', 'Europe/Lisbon'), + '--message', job['message']] + + if 'delivery' in job: + d = job['delivery'] + if 'channel' in d: + cmd.extend(['--delivery-channel', d['channel']]) + if 'to' in d: + cmd.extend(['--delivery-to', d['to']]) + + if 'sessionTarget' in job: + cmd.extend(['--session-target', job['sessionTarget']]) + + if 'agentId' in job: + cmd.extend(['--agent-id', job['agentId']]) + + try: + subprocess.run(cmd, check=True, capture_output=True, text=True) + print(f' [x] {job[\"name\"]}') + except subprocess.CalledProcessError as e: + # Job may already exist + if 'already exists' in (e.stderr or ''): + print(f' [=] {job[\"name\"]} (already exists)') + else: + print(f' [!] {job[\"name\"]} FAILED: {e.stderr}', file=sys.stderr) +" +} diff --git a/bates-enhance/lib/integration-state.sh b/bates-enhance/lib/integration-state.sh new file mode 100755 index 0000000..bc61f05 --- /dev/null +++ b/bates-enhance/lib/integration-state.sh @@ -0,0 +1,133 @@ +#!/usr/bin/env bash +# integration-state.sh -- Track installed integrations in state.json + +STATE_FILE="$HOME/.openclaw/enhance/state.json" + +init_state() { + if [[ ! -f "$STATE_FILE" ]]; then + mkdir -p "$(dirname "$STATE_FILE")" + echo '{"installed":{},"version":"2.0.0"}' > "$STATE_FILE" + fi +} + +is_installed() { + local name="$1" + init_state + python3 -c " +import json, sys +s = json.load(open('$STATE_FILE')) +sys.exit(0 if '$name' in s['installed'] else 1) +" +} + +mark_installed() { + local name="$1" + init_state + python3 -c " +import json, datetime +s = json.load(open('$STATE_FILE')) +s['installed']['$name'] = { + 'date': datetime.datetime.now().isoformat(), + 'version': '2.0.0' +} +json.dump(s, open('$STATE_FILE', 'w'), indent=2) +" + echo " Marked $name as installed." +} + +mark_uninstalled() { + local name="$1" + init_state + python3 -c " +import json +s = json.load(open('$STATE_FILE')) +s['installed'].pop('$name', None) +json.dump(s, open('$STATE_FILE', 'w'), indent=2) +" + echo " Marked $name as uninstalled." +} + +show_integration_status() { + init_state + echo "" + echo "Bates Enhancement Status" + echo "========================" + echo "" + echo " [x] Core (AI subscription, dashboard, cost-tracker, Telegram)" + + local integrations=(m365 teams twilio elevenlabs search image social tailscale agents google github deepseek websearch) + local labels=("Microsoft 365" "MS Teams" "Voice Calling (Twilio)" "Voice Clone (ElevenLabs)" "Search Index" "Image Generation" "Social Media (MixPost)" "Tailscale Remote Access" "Deputy Agents" "Google Calendar" "GitHub" "DeepSeek" "Web Search") + + for i in "${!integrations[@]}"; do + local name="${integrations[$i]}" + local label="${labels[$i]}" + if is_installed "$name" 2>/dev/null; then + echo " [x] $label" + else + echo " [ ] $label" + fi + done +} + +show_integration_details() { + show_integration_status + echo "" + echo "Integration details:" + echo " m365 Microsoft 365 (email, calendar, OneDrive, Planner)" + echo " teams MS Teams messaging (DM and group chat)" + echo " twilio Voice calling (inbound/outbound via Twilio)" + echo " elevenlabs Voice clone TTS (requires ElevenLabs account)" + echo " search Local email/file search index (SQLite FTS5 + Ollama)" + echo " image AI image generation (OpenAI/Google)" + echo " social Social media management (MixPost + Docker)" + echo " tailscale Remote access via Tailscale VPN" + echo " agents Deputy agent system (12 specialists)" + echo " google Google Calendar + Gmail integration" + echo " github GitHub repository access via MCP" + echo " deepseek DeepSeek model for overnight code review" + echo " websearch Brave + Perplexity web search" +} + +suggest_next_integration() { + local current="$1" + echo "" + case "$current" in + m365) + echo "Recommended next: bates-enhance.sh teams (Teams messaging)" + ;; + teams) + echo "Recommended next: bates-enhance.sh twilio (voice calling)" + ;; + twilio) + echo "Recommended next: bates-enhance.sh elevenlabs (voice clone TTS)" + ;; + elevenlabs) + echo "Recommended next: bates-enhance.sh tailscale (remote access)" + ;; + *) + echo "Run 'bates-enhance.sh' to see available integrations." + ;; + esac +} + +deploy_workspace_additions() { + local integration="$1" + local additions_dir="$ENHANCE_DIR/integrations/$integration/workspace-additions" + + if [[ ! -d "$additions_dir" ]]; then + return 0 + fi + + echo "Deploying workspace files for $integration..." + + # Copy all workspace additions preserving directory structure + if [[ -d "$additions_dir/rules" ]]; then + cp "$additions_dir"/rules/* ~/.openclaw/workspace/rules/ 2>/dev/null || true + fi + if [[ -d "$additions_dir/refs" ]]; then + cp "$additions_dir"/refs/* ~/.openclaw/workspace/refs/ 2>/dev/null || true + fi + if [[ -d "$additions_dir/skills" ]]; then + cp -r "$additions_dir"/skills/* ~/.openclaw/workspace/skills/ 2>/dev/null || true + fi +} diff --git a/bates-enhance/lib/template-engine.sh b/bates-enhance/lib/template-engine.sh new file mode 100755 index 0000000..9f74275 --- /dev/null +++ b/bates-enhance/lib/template-engine.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +# template-engine.sh -- Replace {{PLACEHOLDER}} variables in template files +# +# Usage: +# source lib/template-engine.sh +# export ASSISTANT_NAME="Bates" USER_NAME="Robert" +# template_render "input.template" "output.conf" +# +# Placeholders use the format {{VAR_NAME}} where VAR_NAME matches +# an exported environment variable. Unset variables are left as-is. + +template_render() { + local template="$1" + local output="$2" + + if [[ ! -f "$template" ]]; then + echo "ERROR: Template not found: $template" >&2 + return 1 + fi + + cp "$template" "$output" + + # Find all {{VAR}} placeholders in the output file + local vars + vars=$(grep -oP '\{\{[A-Z_][A-Z0-9_]*\}\}' "$output" 2>/dev/null | sort -u) || true + + for var_with_braces in $vars; do + # Strip {{ and }} + local var_name="${var_with_braces#\{\{}" + var_name="${var_name%\}\}}" + + # Get the value from the environment + local var_value="${!var_name:-}" + + if [[ -n "$var_value" ]]; then + # Escape special sed characters in the value + local escaped_value + escaped_value=$(printf '%s' "$var_value" | sed 's/[&/\]/\\&/g') + sed -i "s|{{${var_name}}}|${escaped_value}|g" "$output" + fi + done +} + +# Render a template string (stdin) to stdout +template_render_string() { + local content + content=$(cat) + + local vars + vars=$(echo "$content" | grep -oP '\{\{[A-Z_][A-Z0-9_]*\}\}' 2>/dev/null | sort -u) || true + + for var_with_braces in $vars; do + local var_name="${var_with_braces#\{\{}" + var_name="${var_name%\}\}}" + local var_value="${!var_name:-}" + if [[ -n "$var_value" ]]; then + local escaped_value + escaped_value=$(printf '%s' "$var_value" | sed 's/[&/\]/\\&/g') + content=$(echo "$content" | sed "s|{{${var_name}}}|${escaped_value}|g") + fi + done + + echo "$content" +} diff --git a/build/build-package.sh b/build/build-package.sh new file mode 100755 index 0000000..8b0e104 --- /dev/null +++ b/build/build-package.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +# build-package.sh -- Build the Bates installer packages +# Creates distributable archives for Step 1 (Core) and Step 2 (Enhance) +set -euo pipefail + +REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +BUILD_DIR="$REPO_DIR/build/output" +VERSION="2.0.0" + +echo "Bates Installer Build" +echo "=====================" +echo "Version: $VERSION" +echo "" + +# --- Sanitization Check --- +echo "Step 1: Running sanitization check..." +bash "$REPO_DIR/build/sanitize-check.sh" "$REPO_DIR" +echo "" + +# --- Create Build Output Directory --- +mkdir -p "$BUILD_DIR" + +# --- Build Core Package --- +echo "Step 2: Building Core package..." +CORE_PKG="$BUILD_DIR/bates-core-$VERSION" +rm -rf "$CORE_PKG" +mkdir -p "$CORE_PKG" + +# Copy core files +cp -r "$REPO_DIR/bates-core/"* "$CORE_PKG/" + +# Remove any data directories or temp files +find "$CORE_PKG" -name "node_modules" -type d -exec rm -rf {} + 2>/dev/null || true +find "$CORE_PKG" -name "data" -type d -exec rm -rf {} + 2>/dev/null || true +find "$CORE_PKG" -name "*.tmp" -delete 2>/dev/null || true +find "$CORE_PKG" -name "*.bak" -delete 2>/dev/null || true + +# Make scripts executable +find "$CORE_PKG" -name "*.sh" -exec chmod +x {} + + +# Create tar.gz +(cd "$BUILD_DIR" && tar czf "bates-core-$VERSION.tar.gz" "bates-core-$VERSION/") +echo " Created: bates-core-$VERSION.tar.gz" + +# --- Build Enhance Package --- +echo "Step 3: Building Enhance package..." +ENHANCE_PKG="$BUILD_DIR/bates-enhance-$VERSION" +rm -rf "$ENHANCE_PKG" +mkdir -p "$ENHANCE_PKG" + +# Copy enhance files +cp -r "$REPO_DIR/bates-enhance/"* "$ENHANCE_PKG/" + +# Resolve symlinks (replace with actual files for distribution) +find "$ENHANCE_PKG" -type l | while read -r link; do + target="$(readlink -f "$link")" + if [[ -f "$target" ]]; then + rm "$link" + cp "$target" "$link" + fi +done + +# Clean up +find "$ENHANCE_PKG" -name "node_modules" -type d -exec rm -rf {} + 2>/dev/null || true +find "$ENHANCE_PKG" -name "*.tmp" -delete 2>/dev/null || true + +# Make scripts executable +find "$ENHANCE_PKG" -name "*.sh" -exec chmod +x {} + + +# Create tar.gz +(cd "$BUILD_DIR" && tar czf "bates-enhance-$VERSION.tar.gz" "bates-enhance-$VERSION/") +echo " Created: bates-enhance-$VERSION.tar.gz" + +# --- Summary --- +echo "" +echo "Build Complete" +echo "==============" +ls -lh "$BUILD_DIR"/*.tar.gz +echo "" +echo "To compile the Windows installer (.exe):" +echo " 1. Install Inno Setup 6 on Windows" +echo " 2. Open bates-core/BatesCore.iss in Inno Setup" +echo " 3. Compile (Ctrl+F9)" +echo " 4. Output: build/output/BatesCore-$VERSION.exe" diff --git a/build/sanitize-check.sh b/build/sanitize-check.sh new file mode 100755 index 0000000..5d0b71d --- /dev/null +++ b/build/sanitize-check.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# sanitize-check.sh -- Scan package for forbidden patterns (secrets, personal data) +# Run this before committing or releasing any package. +set -euo pipefail + +SCAN_DIR="${1:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}" + +echo "Sanitization Check" +echo "==================" +echo "Scanning: $SCAN_DIR" +echo "" + +FAILURES=0 + +# Patterns that must NOT appear in the package +declare -A FORBIDDEN=( + ["sk-ant-api03-"]="Anthropic API key" + ["sk-ant-oat01-"]="Anthropic subscription token" + ["sk-proj-"]="OpenAI API key" + ["pplx-"]="Perplexity API key" + ["AIzaSy"]="Google API key" + ["@vernot.com"]="Personal domain (vernot.com)" + ["@fdesk.tech"]="Company domain (fdesk.tech)" + ["22e1a92c"]="Microsoft Graph user ID" + ["8518923276"]="Telegram user ID" + ["a523f509"]="Entra tenant ID" + ["100.80.245"]="Tailscale IP range" + ["openclawgateway-1"]="Tailscale hostname" + ["tail0e82c9"]="Tailscale network" + ["7a4a278f76f15475"]="Gateway token" + ["fmXCTJRKqHL4c7ycPvMH"]="ElevenLabs voice ID" +) + +for pattern in "${!FORBIDDEN[@]}"; do + label="${FORBIDDEN[$pattern]}" + matches=$(grep -r --include="*.sh" --include="*.ps1" --include="*.iss" \ + --include="*.json" --include="*.md" --include="*.ts" \ + --include="*.js" --include="*.html" --include="*.css" \ + --include="*.template" --include="*.yaml" --include="*.yml" \ + -l "$pattern" "$SCAN_DIR" 2>/dev/null | grep -v ".git/" | grep -v "sanitize-check.sh" | grep -v "api-key-validator.sh" || true) + + if [[ -n "$matches" ]]; then + echo "[FAIL] $label ($pattern) found in:" + echo "$matches" | sed 's/^/ /' + ((FAILURES++)) + else + echo "[OK] $label" + fi +done + +echo "" +echo "======================================" +if [[ $FAILURES -eq 0 ]]; then + echo "PASS: No forbidden patterns found." + echo "Package is clean for distribution." +else + echo "FAIL: $FAILURES forbidden pattern(s) found!" + echo "Fix these before committing or releasing." + exit 1 +fi From 67672a0c3fa3fe9091abec7f99df85d699964b65 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 17 Feb 2026 22:35:33 +0000 Subject: [PATCH 02/63] Add Step 2 Enhancement Wizard: 14 integrations, patches, docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Complete bates-enhance package with all 14 integration setup scripts: - m365: 22 files (6 refs, 3 rules, 6 skills, 4 scripts, 14 cron jobs) - agents: 15 files (12 deputy configs, 8 scripts, 15 cron jobs, delegation rules) - search: 11 files (6 Python scripts, config.yaml template, Ollama setup) - teams, twilio, social, tailscale, google: medium integrations with configs - telegram, elevenlabs, image, github, deepseek, websearch: simple integrations Also includes: - Patch management: cost-footer, adaptive-cards, channel-bridge, reapply-patches.sh - 8 documentation guides (manual-steps for each integration + troubleshooting) - All sanitized — 0/15 forbidden patterns detected Co-Authored-By: Claude Opus 4.6 --- bates-enhance/docs/manual-steps-elevenlabs.md | 244 +++++ bates-enhance/docs/manual-steps-google.md | 270 +++++ bates-enhance/docs/manual-steps-m365.md | 245 +++++ bates-enhance/docs/manual-steps-tailscale.md | 287 ++++++ bates-enhance/docs/manual-steps-teams.md | 269 +++++ bates-enhance/docs/manual-steps-telegram.md | 211 ++++ bates-enhance/docs/manual-steps-twilio.md | 215 ++++ bates-enhance/docs/troubleshooting.md | 965 ++++++++++++++++++ .../integrations/agents/config-fragment.json | 11 + .../integrations/agents/cron-jobs-agents.json | 122 +++ .../integrations/agents/scripts/agent-ctl.sh | 160 +++ .../agents/scripts/agent-idle-watcher.sh | 64 ++ .../agents/scripts/agent-message.sh | 72 ++ .../agents/scripts/agent-supervisor.sh | 119 +++ .../agents/scripts/collect-standups.sh | 113 ++ .../agents/scripts/compile-briefing.sh | 79 ++ .../agents/scripts/generate-agent-configs.sh | 116 +++ .../agents/scripts/route-messages.sh | 85 ++ bates-enhance/integrations/agents/setup.sh | 178 ++++ .../templates/agent-openclaw.json.template | 13 + .../agents/templates/agent-soul.md.template | 18 + .../openclaw-agent@.service.template | 15 + .../workspace-additions/rules/delegation.md | 86 ++ .../deepseek/config-fragment.json | 9 + .../deepseek/cron-jobs-deepseek.json | 9 + bates-enhance/integrations/deepseek/setup.sh | 85 ++ .../elevenlabs/config-fragment.json | 11 + .../integrations/elevenlabs/setup.sh | 98 ++ .../workspace-additions/refs/tts.md | 38 + .../integrations/github/config-fragment.json | 13 + bates-enhance/integrations/github/setup.sh | 89 ++ .../github/workspace-additions/refs/github.md | 50 + .../integrations/google/config-fragment.json | 15 + .../google/scripts/google-auth.sh | 88 ++ .../google/scripts/google-refresh.sh | 106 ++ bates-enhance/integrations/google/setup.sh | 178 ++++ .../workspace-additions/refs/google-api.md | 117 +++ .../integrations/image/config-fragment.json | 8 + .../image/scripts/generate-image.py | 157 +++ bates-enhance/integrations/image/setup.sh | 147 +++ .../refs/image-generation.md | 63 ++ .../skills/image-generation/SKILL.md | 47 + .../integrations/m365/config-fragment.json | 17 + .../integrations/m365/cron-jobs-m365.json | 115 +++ .../integrations/m365/scripts/graph-api.sh | 73 ++ .../m365/scripts/read-pdf-attachment.sh | 110 ++ .../m365/scripts/save-attachment.sh | 98 ++ .../m365/scripts/upload-to-onedrive.sh | 142 +++ bates-enhance/integrations/m365/setup.sh | 232 +++++ .../workspace-additions/refs/attachments.md | 130 +++ .../workspace-additions/refs/email-ops.md | 180 ++++ .../workspace-additions/refs/graph-api.md | 180 ++++ .../workspace-additions/refs/mcp-servers.md | 102 ++ .../m365/workspace-additions/refs/onedrive.md | 156 +++ .../workspace-additions/refs/planner-todo.md | 152 +++ .../rules/daily-routine.md | 80 ++ .../rules/email-drafting.md | 150 +++ .../rules/proactive-checkins.md | 115 +++ .../skills/calendar-unified/SKILL.md | 102 ++ .../skills/efficiency-audit/SKILL.md | 142 +++ .../skills/email-file-search/SKILL.md | 94 ++ .../skills/managers-report/SKILL.md | 110 ++ .../skills/project-brief/SKILL.md | 93 ++ .../skills/project-sync/SKILL.md | 101 ++ .../integrations/search/config-fragment.json | 9 + .../integrations/search/cron-jobs-search.json | 9 + .../integrations/search/requirements.txt | 7 + .../search/scripts/ingest-email.py | 446 ++++++++ .../search/scripts/rebuild-index.py | 222 ++++ .../search/scripts/search-query.py | 260 +++++ .../search/scripts/search-stats.py | 158 +++ .../integrations/search/scripts/setup-venv.sh | 68 ++ .../search/scripts/sync-monitor.py | 211 ++++ bates-enhance/integrations/search/setup.sh | 204 ++++ .../search/templates/config.yaml.template | 45 + .../integrations/social/config-fragment.json | 9 + .../social/docker/docker-compose.yml | 83 ++ .../integrations/social/docker/env.template | 15 + bates-enhance/integrations/social/setup.sh | 132 +++ bates-enhance/integrations/tailscale/setup.sh | 142 +++ .../integrations/tailscale/verify.sh | 129 +++ .../integrations/teams/config-fragment.json | 11 + bates-enhance/integrations/teams/setup.sh | 106 ++ .../workspace-additions/refs/file-sharing.md | 64 ++ .../telegram/config-fragment.json | 9 + bates-enhance/integrations/telegram/setup.sh | 71 ++ .../integrations/twilio/config-fragment.json | 22 + bates-enhance/integrations/twilio/setup.sh | 134 +++ .../workspace-additions/refs/voice-calling.md | 83 ++ .../websearch/config-fragment.json | 13 + bates-enhance/integrations/websearch/setup.sh | 145 +++ bates-enhance/patches/README.md | 42 + bates-enhance/patches/adaptive-cards.patch.js | 111 ++ bates-enhance/patches/channel-bridge.patch.ts | 46 + bates-enhance/patches/cost-footer.patch.js | 104 ++ bates-enhance/patches/reapply-patches.sh | 189 ++++ 96 files changed, 11258 insertions(+) create mode 100644 bates-enhance/docs/manual-steps-elevenlabs.md create mode 100644 bates-enhance/docs/manual-steps-google.md create mode 100644 bates-enhance/docs/manual-steps-m365.md create mode 100644 bates-enhance/docs/manual-steps-tailscale.md create mode 100644 bates-enhance/docs/manual-steps-teams.md create mode 100644 bates-enhance/docs/manual-steps-telegram.md create mode 100644 bates-enhance/docs/manual-steps-twilio.md create mode 100644 bates-enhance/docs/troubleshooting.md create mode 100644 bates-enhance/integrations/agents/config-fragment.json create mode 100644 bates-enhance/integrations/agents/cron-jobs-agents.json create mode 100644 bates-enhance/integrations/agents/scripts/agent-ctl.sh create mode 100644 bates-enhance/integrations/agents/scripts/agent-idle-watcher.sh create mode 100644 bates-enhance/integrations/agents/scripts/agent-message.sh create mode 100644 bates-enhance/integrations/agents/scripts/agent-supervisor.sh create mode 100644 bates-enhance/integrations/agents/scripts/collect-standups.sh create mode 100644 bates-enhance/integrations/agents/scripts/compile-briefing.sh create mode 100644 bates-enhance/integrations/agents/scripts/generate-agent-configs.sh create mode 100644 bates-enhance/integrations/agents/scripts/route-messages.sh create mode 100644 bates-enhance/integrations/agents/setup.sh create mode 100644 bates-enhance/integrations/agents/templates/agent-openclaw.json.template create mode 100644 bates-enhance/integrations/agents/templates/agent-soul.md.template create mode 100644 bates-enhance/integrations/agents/templates/openclaw-agent@.service.template create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/delegation.md create mode 100644 bates-enhance/integrations/deepseek/config-fragment.json create mode 100644 bates-enhance/integrations/deepseek/cron-jobs-deepseek.json create mode 100644 bates-enhance/integrations/deepseek/setup.sh create mode 100644 bates-enhance/integrations/elevenlabs/config-fragment.json create mode 100644 bates-enhance/integrations/elevenlabs/setup.sh create mode 100644 bates-enhance/integrations/elevenlabs/workspace-additions/refs/tts.md create mode 100644 bates-enhance/integrations/github/config-fragment.json create mode 100644 bates-enhance/integrations/github/setup.sh create mode 100644 bates-enhance/integrations/github/workspace-additions/refs/github.md create mode 100644 bates-enhance/integrations/google/config-fragment.json create mode 100644 bates-enhance/integrations/google/scripts/google-auth.sh create mode 100644 bates-enhance/integrations/google/scripts/google-refresh.sh create mode 100644 bates-enhance/integrations/google/setup.sh create mode 100644 bates-enhance/integrations/google/workspace-additions/refs/google-api.md create mode 100644 bates-enhance/integrations/image/config-fragment.json create mode 100644 bates-enhance/integrations/image/scripts/generate-image.py create mode 100644 bates-enhance/integrations/image/setup.sh create mode 100644 bates-enhance/integrations/image/workspace-additions/refs/image-generation.md create mode 100644 bates-enhance/integrations/image/workspace-additions/skills/image-generation/SKILL.md create mode 100644 bates-enhance/integrations/m365/config-fragment.json create mode 100644 bates-enhance/integrations/m365/cron-jobs-m365.json create mode 100755 bates-enhance/integrations/m365/scripts/graph-api.sh create mode 100755 bates-enhance/integrations/m365/scripts/read-pdf-attachment.sh create mode 100755 bates-enhance/integrations/m365/scripts/save-attachment.sh create mode 100755 bates-enhance/integrations/m365/scripts/upload-to-onedrive.sh create mode 100644 bates-enhance/integrations/m365/setup.sh create mode 100644 bates-enhance/integrations/m365/workspace-additions/refs/attachments.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/refs/email-ops.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/refs/graph-api.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/refs/mcp-servers.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/refs/onedrive.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/refs/planner-todo.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/rules/daily-routine.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/rules/email-drafting.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/rules/proactive-checkins.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/skills/calendar-unified/SKILL.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/skills/efficiency-audit/SKILL.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/skills/email-file-search/SKILL.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/skills/managers-report/SKILL.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/skills/project-brief/SKILL.md create mode 100644 bates-enhance/integrations/m365/workspace-additions/skills/project-sync/SKILL.md create mode 100644 bates-enhance/integrations/search/config-fragment.json create mode 100644 bates-enhance/integrations/search/cron-jobs-search.json create mode 100644 bates-enhance/integrations/search/requirements.txt create mode 100755 bates-enhance/integrations/search/scripts/ingest-email.py create mode 100755 bates-enhance/integrations/search/scripts/rebuild-index.py create mode 100755 bates-enhance/integrations/search/scripts/search-query.py create mode 100755 bates-enhance/integrations/search/scripts/search-stats.py create mode 100755 bates-enhance/integrations/search/scripts/setup-venv.sh create mode 100755 bates-enhance/integrations/search/scripts/sync-monitor.py create mode 100644 bates-enhance/integrations/search/setup.sh create mode 100644 bates-enhance/integrations/search/templates/config.yaml.template create mode 100644 bates-enhance/integrations/social/config-fragment.json create mode 100644 bates-enhance/integrations/social/docker/docker-compose.yml create mode 100644 bates-enhance/integrations/social/docker/env.template create mode 100644 bates-enhance/integrations/social/setup.sh create mode 100644 bates-enhance/integrations/tailscale/setup.sh create mode 100644 bates-enhance/integrations/tailscale/verify.sh create mode 100644 bates-enhance/integrations/teams/config-fragment.json create mode 100644 bates-enhance/integrations/teams/setup.sh create mode 100644 bates-enhance/integrations/teams/workspace-additions/refs/file-sharing.md create mode 100644 bates-enhance/integrations/telegram/config-fragment.json create mode 100644 bates-enhance/integrations/telegram/setup.sh create mode 100644 bates-enhance/integrations/twilio/config-fragment.json create mode 100644 bates-enhance/integrations/twilio/setup.sh create mode 100644 bates-enhance/integrations/twilio/workspace-additions/refs/voice-calling.md create mode 100644 bates-enhance/integrations/websearch/config-fragment.json create mode 100644 bates-enhance/integrations/websearch/setup.sh create mode 100644 bates-enhance/patches/README.md create mode 100644 bates-enhance/patches/adaptive-cards.patch.js create mode 100644 bates-enhance/patches/channel-bridge.patch.ts create mode 100644 bates-enhance/patches/cost-footer.patch.js create mode 100644 bates-enhance/patches/reapply-patches.sh diff --git a/bates-enhance/docs/manual-steps-elevenlabs.md b/bates-enhance/docs/manual-steps-elevenlabs.md new file mode 100644 index 0000000..8a3f93a --- /dev/null +++ b/bates-enhance/docs/manual-steps-elevenlabs.md @@ -0,0 +1,244 @@ +# ElevenLabs Voice Clone Setup + +This guide covers creating an ElevenLabs account, recording voice samples, creating a voice clone, and integrating it with the OpenClaw gateway for text-to-speech in voice calls. + +--- + +## Prerequisites + +- An ElevenLabs account (free tier works for testing; paid plan recommended for production) +- A microphone for recording voice samples +- The OpenClaw gateway installed and running + +--- + +## Step 1: Create an ElevenLabs Account + +1. Go to [elevenlabs.io](https://elevenlabs.io) and sign up. +2. Verify your email address. +3. Choose a plan: + + | Plan | Characters/month | Voice Clones | Best For | + |---|---|---|---| + | Free | 10,000 | 3 instant | Testing | + | Starter | 30,000 | 10 instant | Light usage | + | Creator | 100,000 | 30 instant, 1 professional | Regular usage | + | Pro | 500,000+ | Unlimited instant, 3 professional | Production | + +> **Tip:** Instant voice clones require only a short sample. Professional voice clones require 30+ minutes of audio but produce significantly better results. Start with an instant clone for testing. + +--- + +## Step 2: Record Voice Samples + +The quality of your voice clone depends heavily on the quality of your recordings. + +### Recording Guidelines + +- **Environment**: Record in a quiet room with minimal echo. Avoid rooms with hard surfaces (use a carpeted room or add soft furnishings). +- **Microphone**: Use a decent USB microphone or headset. Built-in laptop microphones produce poor results. +- **Distance**: Keep the microphone 6-12 inches from your mouth. +- **Duration**: + - Instant clone: Minimum 30 seconds, recommended 1-3 minutes + - Professional clone: Minimum 30 minutes of clean audio +- **Content**: Read naturally. Mix short and long sentences. Include questions, statements, and varied emotional tones. Reading a book chapter or news article works well. +- **Consistency**: Maintain a consistent volume, pace, and distance from the microphone throughout. + +### Recording Tips + +1. Do a test recording first and listen back for background noise or distortion. +2. Speak at your natural pace. Do not read too fast or too slow. +3. Avoid filler words ("um", "uh") as much as possible. +4. Take natural pauses between sentences. +5. If you make a mistake, pause for 2 seconds, then re-read the sentence from the beginning. + +### Recommended Recording Tools + +- **Audacity** (free, cross-platform): Good for recording and cleaning up audio +- **Voice Memos** (macOS/iOS): Quick and easy for short samples +- **OBS Studio** (free): If you already have it set up + +### File Format + +- WAV or MP3, minimum 22050 Hz sample rate +- Mono channel preferred +- No background music or effects + +--- + +## Step 3: Create a Voice Clone + +### Instant Voice Clone + +1. Log in to [elevenlabs.io](https://elevenlabs.io). +2. Go to **Voices** (or **Voice Library** > **My Voices**). +3. Click **Add Voice** > **Instant Voice Cloning**. +4. Give the voice a name (e.g., "Bates Voice"). +5. Upload your audio samples (you can upload multiple files). +6. Add a description of the voice characteristics (e.g., "Male, mid-30s, professional, calm and articulate"). +7. Review and accept the terms. +8. Click **Add Voice**. + +The clone is created almost instantly and appears in your voice library. + +### Professional Voice Clone (Optional) + +For higher quality, especially important for phone calls where audio fidelity matters: + +1. Go to **Voices** > **Add Voice** > **Professional Voice Cloning**. +2. Follow the guided process to upload 30+ minutes of clean audio. +3. The professional clone takes several hours to train. +4. You will receive an email when it is ready. + +--- + +## Step 4: Get the Voice ID + +1. Go to **Voices** in the ElevenLabs dashboard. +2. Find your cloned voice and click on it. +3. The **Voice ID** is displayed in the voice settings panel. It looks like: + + ``` + AbCdEfGhIjKlMnOpQrSt + ``` + + You can also click the copy icon next to the ID. + +### Alternative: Get Voice ID via API + +```bash +curl -s "https://api.elevenlabs.io/v1/voices" \ + -H "xi-api-key: " | python3 -m json.tool +``` + +Look for your voice in the response and note the `voice_id` field. + +--- + +## Step 5: Get Your API Key + +1. Click your profile icon in the top-right corner of the ElevenLabs dashboard. +2. Go to **Profile + API key**. +3. Your API key is shown (click to reveal). It looks like: + + ``` + sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6 + ``` + +> **Warning:** Treat this API key as a secret. Do not share it or commit it to version control. + +--- + +## Step 6: Test TTS Output + +Before integrating with the gateway, test the voice clone directly via the API: + +```bash +curl -X POST "https://api.elevenlabs.io/v1/text-to-speech/" \ + -H "xi-api-key: " \ + -H "Content-Type: application/json" \ + -d '{ + "text": "Hello, this is Bates. How can I help you today?", + "model_id": "eleven_multilingual_v2", + "voice_settings": { + "stability": 0.5, + "similarity_boost": 0.75, + "style": 0.0, + "use_speaker_boost": true + } + }' \ + --output test_output.mp3 +``` + +Play the resulting `test_output.mp3` to verify the voice sounds correct. + +### Voice Settings Explained + +| Setting | Range | Description | +|---|---|---| +| `stability` | 0.0 - 1.0 | Higher = more consistent but potentially monotone. Lower = more expressive but less predictable. Start at 0.5. | +| `similarity_boost` | 0.0 - 1.0 | Higher = closer to the original voice. Lower = more creative variation. Start at 0.75. | +| `style` | 0.0 - 1.0 | Exaggerates the style of the voice. 0.0 recommended for natural speech. | +| `use_speaker_boost` | boolean | Boosts clarity of the cloned voice. Recommended `true`. | + +--- + +## Step 7: Configure OpenClaw + +Add the ElevenLabs configuration to your OpenClaw voice call settings: + +```json +{ + "voiceCall": { + "tts": { + "provider": "elevenlabs", + "elevenlabs": { + "apiKey": "", + "voiceId": "", + "model": "eleven_multilingual_v2" + } + } + } +} +``` + +### Model Options + +| Model | Quality | Latency | Languages | +|---|---|---|---| +| `eleven_multilingual_v2` | Highest | Higher | 29 languages | +| `eleven_turbo_v2_5` | Good | Lower | 32 languages | +| `eleven_turbo_v2` | Good | Lowest | English only | + +For voice calls, `eleven_multilingual_v2` is recommended for the best quality. If latency is a concern, try `eleven_turbo_v2_5`. + +Restart the gateway: + +```bash +systemctl --user restart openclaw-gateway +``` + +--- + +## Step 8: Verify End-to-End + +1. Make a test voice call (see the [Twilio setup guide](manual-steps-twilio.md)). +2. Bates should respond using the cloned voice. +3. Verify the voice sounds natural and the audio quality is acceptable. + +--- + +## Maintaining Your Voice Clone + +- **Update samples**: If the voice quality degrades or you want to change the voice characteristics, you can delete and recreate the clone with new samples. +- **Monitor usage**: Check your ElevenLabs dashboard for character usage. Voice calls can consume characters quickly (roughly 150 characters per sentence). +- **Plan ahead**: If you approach your monthly character limit, consider upgrading your plan or reducing the verbosity of Bates's spoken responses. + +--- + +## Troubleshooting + +### Voice Sounds Robotic or Unnatural + +- Upload longer, higher-quality audio samples. +- Increase `similarity_boost` to 0.8 or higher. +- Ensure the recording has no background noise. +- Try a professional voice clone for better results. + +### Audio Clipping or Distortion + +- Check that the original recording is not clipping (audio peaks hitting maximum). +- Reduce the input volume in your recording software. +- Re-record problematic samples. + +### High Latency in Voice Calls + +- Switch to `eleven_turbo_v2_5` or `eleven_turbo_v2` for lower latency. +- Ensure your internet connection is stable. +- Consider the geographic distance between your server and ElevenLabs API endpoints. + +### API Rate Limits + +- Free and lower-tier plans have concurrent request limits. +- If you receive 429 errors, wait a moment and retry. +- Upgrade your plan for higher rate limits. diff --git a/bates-enhance/docs/manual-steps-google.md b/bates-enhance/docs/manual-steps-google.md new file mode 100644 index 0000000..ee523b9 --- /dev/null +++ b/bates-enhance/docs/manual-steps-google.md @@ -0,0 +1,270 @@ +# Google Calendar and Gmail Integration Setup + +This guide covers creating a Google Cloud project, configuring OAuth, and connecting Google services to the OpenClaw gateway. + +--- + +## Prerequisites + +- A Google account (personal or Google Workspace) +- Access to the [Google Cloud Console](https://console.cloud.google.com) +- The OpenClaw gateway installed and running + +--- + +## Step 1: Create a Google Cloud Project + +1. Go to the [Google Cloud Console](https://console.cloud.google.com). +2. Click the project selector in the top bar. +3. Click **New Project**. +4. Enter a project name (e.g., `bates-integration`). +5. Select your organization (if applicable) or leave as "No organization." +6. Click **Create**. +7. Wait for the project to be created, then select it from the project selector. + +--- + +## Step 2: Enable Required APIs + +1. Go to **APIs & Services** > **Library**. +2. Search for and enable each of the following APIs: + + | API | Purpose | + |---|---| + | Google Calendar API | Read and manage calendar events | + | Gmail API | Read and manage email | + | Google People API | Read contacts (optional) | + +3. Click on each API and press **Enable**. + +--- + +## Step 3: Configure the OAuth Consent Screen + +Before creating credentials, you must configure the OAuth consent screen. + +1. Go to **APIs & Services** > **OAuth consent screen**. +2. Select **User type**: + - **Internal**: Only available for Google Workspace accounts. Users within your organization can use the app without review. + - **External**: Available to any Google account. Requires verification for production use (but unverified apps can be used by up to 100 test users). +3. Click **Create**. + +### Fill in App Information + +- **App name:** `Bates Integration` +- **User support email:** Your email address +- **App logo:** Optional +- **Developer contact information:** Your email address + +### Configure Scopes + +Click **Add or remove scopes** and add: + +| Scope | Description | +|---|---| +| `https://www.googleapis.com/auth/calendar.readonly` | View calendar events | +| `https://www.googleapis.com/auth/calendar.events` | Create/edit/delete calendar events (if needed) | +| `https://www.googleapis.com/auth/gmail.readonly` | View email messages and settings | +| `https://www.googleapis.com/auth/gmail.send` | Send email (if needed) | +| `https://www.googleapis.com/auth/gmail.modify` | View and modify emails (mark read, label, etc.) | +| `https://www.googleapis.com/auth/contacts.readonly` | View contacts (optional) | + +> **Tip:** Start with read-only scopes. Add write scopes later if needed. The fewer scopes you request, the simpler the consent flow and the easier any future verification process. + +Click **Update**, then **Save and continue**. + +### Add Test Users (External only) + +If you selected External, add your Google account email as a test user. This allows you to complete the OAuth flow before the app is verified. + +Click **Save and continue**, then **Back to dashboard**. + +--- + +## Step 4: Create OAuth 2.0 Credentials + +1. Go to **APIs & Services** > **Credentials**. +2. Click **Create credentials** > **OAuth client ID**. +3. Application type: **Desktop app** (or **Web application** if the gateway handles the redirect). +4. Name: `bates-oauth-client` + +### For Desktop App + +No additional configuration needed. Click **Create**. + +### For Web Application + +Add the following authorized redirect URI: + +``` +http://localhost:18789/auth/google/callback +``` + +Click **Create**. + +### Download the Credentials + +After creation, a dialog shows the **Client ID** and **Client secret**. Click **Download JSON** to save the credentials file (usually named `client_secret_XXXXX.json`). + +> **Warning:** Store this file securely. Do not commit it to version control. + +--- + +## Step 5: Configure OpenClaw + +Add the Google OAuth credentials to your OpenClaw configuration: + +```json +{ + "google": { + "clientId": ".apps.googleusercontent.com", + "clientSecret": "", + "redirectUri": "http://localhost:18789/auth/google/callback", + "scopes": [ + "https://www.googleapis.com/auth/calendar.readonly", + "https://www.googleapis.com/auth/gmail.readonly" + ] + } +} +``` + +--- + +## Step 6: Run the Auth Flow + +The first time you connect, you need to complete the OAuth consent flow to obtain a refresh token. + +### Using the Gateway's Built-in Auth Flow + +1. Restart the gateway: + + ```bash + systemctl --user restart openclaw-gateway + ``` + +2. Open your browser and navigate to: + + ``` + http://localhost:18789/auth/google + ``` + +3. You will be redirected to Google's consent screen. + +4. Sign in with your Google account and grant the requested permissions. + +5. If you see a "This app isn't verified" warning (External apps only): + - Click **Advanced** + - Click **Go to Bates Integration (unsafe)** + - This is normal for unverified test apps + +6. After granting consent, you will be redirected back to the gateway with an authorization code. + +7. The gateway exchanges the code for access and refresh tokens automatically. + +### Manual Auth Flow (Alternative) + +If the gateway does not have a built-in auth endpoint, you can use a standalone script: + +```bash +# Generate the auth URL +python3 << 'PYEOF' +from urllib.parse import urlencode + +params = { + "client_id": ".apps.googleusercontent.com", + "redirect_uri": "http://localhost:18789/auth/google/callback", + "response_type": "code", + "scope": "https://www.googleapis.com/auth/calendar.readonly https://www.googleapis.com/auth/gmail.readonly", + "access_type": "offline", + "prompt": "consent" +} +print(f"https://accounts.google.com/o/oauth2/v2/auth?{urlencode(params)}") +PYEOF +``` + +1. Open the printed URL in your browser. +2. Complete the consent flow. +3. Copy the `code` parameter from the redirect URL. +4. Exchange it for tokens: + +```bash +curl -X POST "https://oauth2.googleapis.com/token" \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "code=" \ + -d "client_id=.apps.googleusercontent.com" \ + -d "client_secret=" \ + -d "redirect_uri=http://localhost:18789/auth/google/callback" \ + -d "grant_type=authorization_code" +``` + +The response contains `access_token`, `refresh_token`, and `expires_in`. Store the refresh token in your configuration. + +> **Important:** Include `access_type=offline` and `prompt=consent` in the auth URL. Without `access_type=offline`, Google will not issue a refresh token. Without `prompt=consent`, Google may skip the consent screen on subsequent authorizations and not return a new refresh token. + +--- + +## Step 7: Token Refresh Setup + +Google access tokens expire after 1 hour. The refresh token is used to obtain new access tokens automatically. + +### Automatic Refresh + +The OpenClaw gateway handles token refresh automatically. When an API call fails with a 401 status, the gateway: + +1. Uses the stored refresh token to request a new access token. +2. Retries the failed API call with the new token. +3. Stores the new access token for subsequent requests. + +### Manual Refresh (Testing) + +```bash +curl -X POST "https://oauth2.googleapis.com/token" \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "refresh_token=" \ + -d "client_id=.apps.googleusercontent.com" \ + -d "client_secret=" \ + -d "grant_type=refresh_token" +``` + +### Token Expiry and Revocation + +- **Access tokens** expire after 1 hour. +- **Refresh tokens** do not expire unless: + - The user revokes access in their [Google Account permissions](https://myaccount.google.com/permissions) + - The app is unverified and the refresh token has not been used for 7 days + - The project's OAuth consent screen is set to "Testing" and the token is older than 7 days + - The user's password is changed (in some configurations) + +> **Tip:** If token refresh fails unexpectedly, re-run the auth flow from Step 6 to obtain a new refresh token. + +--- + +## Verifying the Integration + +Test that the Google integration is working: + +### Calendar Test + +```bash +curl -s "https://www.googleapis.com/calendar/v3/calendars/primary/events?maxResults=5" \ + -H "Authorization: Bearer " | python3 -m json.tool +``` + +### Gmail Test + +```bash +curl -s "https://www.googleapis.com/gmail/v1/users/me/messages?maxResults=5" \ + -H "Authorization: Bearer " | python3 -m json.tool +``` + +If both return data, the integration is working correctly. + +--- + +## Security Considerations + +- **Minimal scopes**: Only request the scopes you actually need. +- **Secure storage**: Store client secrets and refresh tokens encrypted or in a secrets manager. +- **Regular review**: Periodically review connected apps in your [Google Account permissions](https://myaccount.google.com/permissions). +- **Verified apps**: For production use with multiple users, submit the app for Google's verification process. +- **Rotate secrets**: If a client secret is compromised, delete the credential in the Cloud Console and create a new one. All users will need to re-authenticate. diff --git a/bates-enhance/docs/manual-steps-m365.md b/bates-enhance/docs/manual-steps-m365.md new file mode 100644 index 0000000..616558a --- /dev/null +++ b/bates-enhance/docs/manual-steps-m365.md @@ -0,0 +1,245 @@ +# Microsoft 365 Integration Setup + +This guide walks through setting up the three Entra (Azure AD) app registrations required for Bates to interact with Microsoft 365 services: reading mail/calendars, accessing company-wide resources, and sending mail on behalf of the assistant. + +--- + +## Prerequisites + +- A Microsoft 365 tenant with admin access (or access to request admin consent) +- Access to the [Microsoft Entra admin center](https://entra.microsoft.com) +- The OpenClaw gateway installed and running + +--- + +## Overview of App Registrations + +| App Name | Purpose | Permission Type | +|---|---|---| +| `bates-reader` | Read user mail, calendars, contacts | Delegated | +| `bates-company-reader` | Read organization-wide resources (shared mailboxes, directory) | Application | +| `bates-assistant` | Send mail, manage calendar events, write to mailboxes | Application | + +--- + +## Step 1: Create the Reader App Registration + +The reader app uses **delegated permissions** so it acts on behalf of the signed-in user. + +1. Go to **Entra admin center** > **App registrations** > **New registration**. +2. Name: `bates-reader` +3. Supported account types: **Accounts in this organizational directory only** (single tenant). +4. Redirect URI: Select **Web** and enter your gateway callback URL (e.g., `https://localhost:18789/auth/callback`). +5. Click **Register**. + +### Configure API Permissions (Reader) + +Navigate to **API permissions** > **Add a permission** > **Microsoft Graph** > **Delegated permissions**. + +Add the following: + +| Permission | Description | +|---|---| +| `Mail.Read` | Read user mail | +| `Mail.ReadBasic` | Read basic mail properties | +| `Calendars.Read` | Read user calendars | +| `Calendars.Read.Shared` | Read shared calendars | +| `Contacts.Read` | Read user contacts | +| `User.Read` | Sign in and read user profile | +| `offline_access` | Maintain access to data (refresh tokens) | + +### Create a Client Secret + +1. Go to **Certificates & secrets** > **New client secret**. +2. Description: `bates-reader-secret` +3. Expiry: Choose 12 or 24 months. +4. Copy the **Value** immediately (it will not be shown again). + +### Record These Values + +- **Application (client) ID** +- **Directory (tenant) ID** +- **Client secret value** + +--- + +## Step 2: Create the Company Reader App Registration + +The company reader uses **application permissions** to access organization-wide data without a signed-in user. + +1. Go to **App registrations** > **New registration**. +2. Name: `bates-company-reader` +3. Supported account types: **Single tenant**. +4. No redirect URI needed. +5. Click **Register**. + +### Configure API Permissions (Company Reader) + +Navigate to **API permissions** > **Add a permission** > **Microsoft Graph** > **Application permissions**. + +Add the following: + +| Permission | Description | +|---|---| +| `Mail.Read` | Read mail in all mailboxes | +| `Calendars.Read` | Read calendars in all mailboxes | +| `User.Read.All` | Read all users' full profiles | +| `Group.Read.All` | Read all groups | +| `Directory.Read.All` | Read directory data | +| `MailboxSettings.Read` | Read all users' mailbox settings | + +### Grant Admin Consent + +Click the **Grant admin consent for [Your Tenant]** button. This is required because application permissions need admin approval. + +> **Warning:** Application permissions grant broad access. Only grant what is strictly needed and review periodically. + +### Create a Client Secret + +Follow the same steps as the reader app. Record the client ID, tenant ID, and secret. + +--- + +## Step 3: Create the Assistant App Registration + +The assistant app uses **application permissions** and is the most privileged registration. It can send mail, create events, and modify mailbox contents. + +1. Go to **App registrations** > **New registration**. +2. Name: `bates-assistant` +3. Supported account types: **Single tenant**. +4. No redirect URI needed. +5. Click **Register**. + +### Configure API Permissions (Assistant) + +Navigate to **API permissions** > **Add a permission** > **Microsoft Graph** > **Application permissions**. + +Add the following: + +| Permission | Description | +|---|---| +| `Mail.ReadWrite` | Read and write mail in all mailboxes | +| `Mail.Send` | Send mail as any user | +| `Calendars.ReadWrite` | Read and write calendars in all mailboxes | +| `Contacts.ReadWrite` | Read and write contacts in all mailboxes | +| `User.Read.All` | Read all users' full profiles | +| `Files.ReadWrite.All` | Read and write all files (OneDrive/SharePoint) | + +### Grant Admin Consent + +Click **Grant admin consent for [Your Tenant]**. + +### Create a Client Secret + +Follow the same steps as above. Record all three values. + +--- + +## Step 4: Restrict the Assistant Email via Exchange Transport Rule + +To prevent the assistant from sending mail as arbitrary users, create an Exchange transport rule that restricts which sender address it can use. + +1. Open the [Exchange admin center](https://admin.exchange.microsoft.com). +2. Go to **Mail flow** > **Rules** > **Add a rule** > **Create a new rule**. +3. Configure the rule: + + - **Name:** `Restrict Bates Assistant Sender` + - **Apply this rule if:** The sender is `bates-assistant@yourdomain.com` + - **Except if:** The sender address includes `bates-assistant@yourdomain.com` + - **Do the following:** Reject the message with the explanation "Only the designated assistant address may send via this app." + +Alternatively, use **application access policies** in Exchange Online to scope the app registration to specific mailboxes: + +```powershell +# Connect to Exchange Online PowerShell +Connect-ExchangeOnline + +# Create an application access policy +New-ApplicationAccessPolicy ` + -AppId "" ` + -PolicyScopeGroupId "bates-allowed-mailboxes@yourdomain.com" ` + -AccessRight RestrictAccess ` + -Description "Restrict Bates assistant to specific mailboxes" +``` + +> **Tip:** Create a mail-enabled security group (e.g., `bates-allowed-mailboxes`) containing only the mailboxes the assistant should access. This is more secure than transport rules. + +--- + +## Step 5: Configure OpenClaw + +Add the app registration details to your OpenClaw configuration. The exact field names depend on your config schema, but typically: + +```json +{ + "m365": { + "reader": { + "clientId": "", + "tenantId": "", + "clientSecret": "" + }, + "companyReader": { + "clientId": "", + "tenantId": "", + "clientSecret": "" + }, + "assistant": { + "clientId": "", + "tenantId": "", + "clientSecret": "" + } + } +} +``` + +--- + +## Step 6: Test with mcporter + +[mcporter](https://github.com/nicolgit/mcporter) is a handy tool for testing Microsoft Graph API calls directly. + +1. Install mcporter: + + ```bash + npm install -g mcporter + ``` + +2. Test the reader app (delegated flow): + + ```bash + mcporter login --client-id --tenant-id --scope "Mail.Read Calendars.Read" + mcporter get "https://graph.microsoft.com/v1.0/me/messages?\$top=5" + ``` + +3. Test the company reader app (client credentials flow): + + ```bash + mcporter login --client-id --tenant-id --client-secret --grant-type client_credentials + mcporter get "https://graph.microsoft.com/v1.0/users?\$top=5" + ``` + +4. Test the assistant app (send a test email): + + ```bash + mcporter login --client-id --tenant-id --client-secret --grant-type client_credentials + mcporter post "https://graph.microsoft.com/v1.0/users/bates-assistant@yourdomain.com/sendMail" --body '{ + "message": { + "subject": "Test from Bates Assistant", + "body": { "contentType": "Text", "content": "This is a test." }, + "toRecipients": [{ "emailAddress": { "address": "you@yourdomain.com" } }] + } + }' + ``` + +5. Verify the email arrives and check the sender address is correct. + +--- + +## Security Checklist + +- [ ] Reader app uses **delegated** permissions only +- [ ] Company reader and assistant use **application** permissions with admin consent +- [ ] Application access policies restrict assistant to designated mailboxes +- [ ] Client secrets are stored securely (not in version control) +- [ ] Secret expiry dates are tracked and rotated before expiry +- [ ] Permissions are reviewed quarterly for least-privilege compliance diff --git a/bates-enhance/docs/manual-steps-tailscale.md b/bates-enhance/docs/manual-steps-tailscale.md new file mode 100644 index 0000000..1c1c38b --- /dev/null +++ b/bates-enhance/docs/manual-steps-tailscale.md @@ -0,0 +1,287 @@ +# Tailscale Remote Access Setup + +This guide covers installing Tailscale, joining a tailnet, configuring HTTPS access via Tailscale Serve, and exposing the OpenClaw gateway and voice webhook to the internet. + +--- + +## Prerequisites + +- A Tailscale account ([login.tailscale.com](https://login.tailscale.com)) +- The OpenClaw gateway installed and running on a Linux machine (WSL2 or native) +- Root/sudo access for installing Tailscale + +--- + +## Step 1: Install Tailscale + +### On Ubuntu / Debian (including WSL2) + +```bash +curl -fsSL https://tailscale.com/install.sh | sh +``` + +### On Other Distributions + +Follow the [official installation guide](https://tailscale.com/download/linux) for your distribution. + +### Verify Installation + +```bash +tailscale version +``` + +--- + +## Step 2: Authenticate and Join the Tailnet + +1. Start the Tailscale daemon (if not already running): + + ```bash + sudo tailscaled & + ``` + + On systemd-based systems: + + ```bash + sudo systemctl enable --now tailscaled + ``` + +2. Authenticate: + + ```bash + sudo tailscale up + ``` + +3. A URL will be printed. Open it in your browser and log in to your Tailscale account. + +4. Approve the device when prompted. + +5. Verify the connection: + + ```bash + tailscale status + ``` + + You should see your machine listed with an IP address (usually in the `100.x.x.x` range). + +### Machine Name + +By default, Tailscale uses your hostname. You can rename the machine in the [Tailscale admin console](https://login.tailscale.com/admin/machines) for a cleaner URL. + +--- + +## Step 3: Enable HTTPS Certificates + +Tailscale can automatically provision TLS certificates for machines in your tailnet via [Tailscale HTTPS](https://tailscale.com/kb/1153/enabling-https/). + +1. Go to the [Tailscale admin console](https://login.tailscale.com/admin/dns). +2. Under **DNS**, ensure you have a **tailnet name** configured (e.g., `your-tailnet.ts.net`). +3. Enable **HTTPS Certificates** if not already enabled. + +Your machine will be accessible at: + +``` +https://..ts.net +``` + +--- + +## Step 4: Configure Tailscale Serve + +Tailscale Serve allows you to expose local HTTP services over HTTPS to your tailnet (and optionally to the public internet via Tailscale Funnel). + +### Expose the Dashboard on Port 443 + +The main gateway dashboard and API can be served over the default HTTPS port: + +```bash +sudo tailscale serve https / http://localhost:18789 +``` + +This makes the gateway accessible at: + +``` +https://..ts.net/ +``` + +### Expose Voice Webhooks on Port 8443 + +Twilio voice webhooks need a separate port to avoid conflicting with the main dashboard: + +```bash +sudo tailscale serve https:8443 / http://localhost:18789 +``` + +This makes the voice webhook accessible at: + +``` +https://..ts.net:8443/webhook +``` + +### Verify Serve Configuration + +```bash +sudo tailscale serve status +``` + +Expected output: + +``` +https://..ts.net (Tailscale Serve) +|-- / proxy http://127.0.0.1:18789 + +https://..ts.net:8443 (Tailscale Serve) +|-- / proxy http://127.0.0.1:18789 +``` + +--- + +## Step 5: Enable Tailscale Funnel (Public Access) + +By default, Tailscale Serve only exposes services **within your tailnet**. For external services like Twilio webhooks and Teams bot messages, you need **Tailscale Funnel** to make them publicly accessible. + +1. Enable Funnel in the [Tailscale admin console](https://login.tailscale.com/admin/acls): + + Add to your ACL policy: + + ```json + { + "nodeAttrs": [ + { + "target": ["autogroup:member"], + "attr": ["funnel"] + } + ] + } + ``` + +2. Turn on Funnel for your serve configurations: + + ```bash + sudo tailscale funnel 443 on + sudo tailscale funnel 8443 on + ``` + +3. Verify: + + ```bash + sudo tailscale funnel status + ``` + +> **Warning:** Funnel exposes your services to the entire internet. Ensure your gateway has proper authentication and rate limiting before enabling Funnel. + +--- + +## Step 6: Verify External Access + +### From Another Device on Your Tailnet + +```bash +curl -s https://..ts.net/ +``` + +### From the Public Internet (Funnel) + +Open in any browser: + +``` +https://..ts.net/ +``` + +### Test Voice Webhook + +```bash +curl -s -X POST https://..ts.net:8443/webhook \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "test=true" +``` + +--- + +## Step 7: Make Serve Configuration Persistent + +By default, `tailscale serve` configurations persist across restarts. Verify with: + +```bash +sudo tailscale serve status +``` + +If the configuration is lost after a reboot, you can add the serve commands to a startup script: + +```bash +# /etc/systemd/system/tailscale-serve.service +[Unit] +Description=Tailscale Serve Configuration +After=tailscaled.service + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/bin/tailscale serve https / http://localhost:18789 +ExecStartPost=/usr/bin/tailscale serve https:8443 / http://localhost:18789 + +[Install] +WantedBy=multi-user.target +``` + +Enable: + +```bash +sudo systemctl enable tailscale-serve +``` + +--- + +## Port Summary + +| Port | Protocol | Purpose | Access | +|---|---|---|---| +| 443 | HTTPS | Gateway dashboard, APIs, Teams webhook, Telegram webhook | Tailnet or Funnel | +| 8443 | HTTPS | Twilio voice webhooks | Funnel (public) | +| 18789 | HTTP | Local gateway (not exposed directly) | localhost only | + +--- + +## Security Considerations + +### Tailnet ACLs + +Control which devices can access your machine via [Access Control Lists](https://tailscale.com/kb/1018/acls/): + +```json +{ + "acls": [ + { + "action": "accept", + "src": ["autogroup:member"], + "dst": [":443", ":8443"] + } + ] +} +``` + +### Funnel Exposure + +- Funnel makes services publicly accessible. Only enable it for endpoints that need external access (webhooks). +- The gateway should validate incoming webhook requests (e.g., Twilio signature validation, Bot Framework authentication). +- Monitor access logs for unexpected traffic. + +### WSL2 Considerations + +- Tailscale in WSL2 runs in userspace networking mode by default. +- The WSL2 VM's IP changes on restart. Tailscale handles this automatically. +- If Tailscale fails to start in WSL2, ensure `tailscaled` is running: + + ```bash + sudo tailscaled --state=/var/lib/tailscale/tailscaled.state --tun=userspace-networking & + ``` + +### Key Rotation + +- Tailscale node keys expire by default (180 days). Either: + - Disable key expiry for the machine in the admin console (for servers) + - Set up a cron job to run `tailscale up --auth-key=` before expiry + +### MagicDNS + +Tailscale enables [MagicDNS](https://tailscale.com/kb/1081/magicdns/) by default. This means you can access machines by name (e.g., `my-machine`) within the tailnet without the full `.ts.net` domain. However, for webhooks and external services, always use the full FQDN. diff --git a/bates-enhance/docs/manual-steps-teams.md b/bates-enhance/docs/manual-steps-teams.md new file mode 100644 index 0000000..f973fcb --- /dev/null +++ b/bates-enhance/docs/manual-steps-teams.md @@ -0,0 +1,269 @@ +# Microsoft Teams Integration Setup + +This guide covers creating a Bot Framework registration in Azure, building a Teams app manifest, uploading it to the Teams Admin Center, and connecting it to the OpenClaw gateway. + +--- + +## Prerequisites + +- A Microsoft 365 tenant with Teams enabled +- Admin access to the [Azure portal](https://portal.azure.com) and [Teams Admin Center](https://admin.teams.microsoft.com) +- The OpenClaw gateway installed and running +- A publicly accessible HTTPS endpoint for the bot (e.g., via Tailscale Serve) + +--- + +## Step 1: Create a Bot Registration in Azure / Entra + +1. Go to the [Azure portal](https://portal.azure.com). +2. Search for **Azure Bot** in the top search bar and select **Azure Bot** under Services. +3. Click **Create**. +4. Fill in the details: + + - **Bot handle:** `bates-teams-bot` + - **Subscription:** Select your Azure subscription + - **Resource group:** Create new or select existing + - **Pricing tier:** F0 (Free) for development, S1 for production + - **Microsoft App ID:** Select **Create new Microsoft App ID** + +5. Click **Review + create**, then **Create**. + +### Get the App ID and Password + +1. Once deployed, go to the bot resource. +2. Navigate to **Configuration**. +3. Note the **Microsoft App ID**. +4. Click **Manage Password** to go to the app registration. +5. Under **Certificates & secrets**, create a **New client secret**. +6. Copy the secret **Value** immediately. + +--- + +## Step 2: Configure the Bot Framework Channel + +1. In the Azure Bot resource, go to **Channels**. +2. Click **Microsoft Teams** to enable the Teams channel. +3. Accept the terms of service. +4. Under **Messaging**, ensure the messaging endpoint is set to your gateway URL: + + ``` + https://your-machine.your-tailnet.ts.net:443/teams/messages + ``` + + Replace with your actual public HTTPS endpoint. + +5. Click **Apply**. + +--- + +## Step 3: Configure OpenClaw + +Add the Teams bot credentials to your OpenClaw configuration: + +```json +{ + "msteams": { + "appId": "", + "appPassword": "", + "tenantId": "" + } +} +``` + +Restart the gateway: + +```bash +systemctl --user restart openclaw-gateway +``` + +--- + +## Step 4: Create the Teams App Manifest + +The Teams app manifest is a ZIP file containing a `manifest.json` and two icon files. + +### Directory Structure + +``` +teams-app/ + manifest.json + color.png (192x192 full-color icon) + outline.png (32x32 transparent outline icon) +``` + +### manifest.json + +```json +{ + "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.16/MicrosoftTeams.schema.json", + "manifestVersion": "1.16", + "version": "1.0.0", + "id": "", + "developer": { + "name": "Your Organization", + "websiteUrl": "https://example.com", + "privacyUrl": "https://example.com/privacy", + "termsOfUseUrl": "https://example.com/terms" + }, + "name": { + "short": "Bates", + "full": "Bates AI Assistant" + }, + "description": { + "short": "AI-powered executive assistant", + "full": "Bates is an AI-powered executive assistant that helps manage email, calendar, tasks, and more through natural conversation in Microsoft Teams." + }, + "icons": { + "color": "color.png", + "outline": "outline.png" + }, + "accentColor": "#4F6BED", + "bots": [ + { + "botId": "", + "scopes": ["personal", "team", "groupChat"], + "supportsFiles": false, + "isNotificationOnly": false, + "commandLists": [ + { + "scopes": ["personal"], + "commands": [ + { + "title": "help", + "description": "Show available commands" + }, + { + "title": "status", + "description": "Check system status" + } + ] + } + ] + } + ], + "permissions": ["identity", "messageTeamMembers"], + "validDomains": [] +} +``` + +> **Tip:** Replace `` with the actual App ID from Step 1. The `id` field and `botId` must match. + +### Create the ZIP Package + +```bash +cd teams-app +zip -r ../bates-teams-app.zip manifest.json color.png outline.png +``` + +### Icon Requirements + +- **color.png**: 192x192 pixels, full-color, PNG format. Used in the Teams app store and app bar. +- **outline.png**: 32x32 pixels, transparent background with a single color (white recommended), PNG format. Used in the Teams activity bar. + +--- + +## Step 5: Upload to Teams Admin Center + +1. Go to the [Teams Admin Center](https://admin.teams.microsoft.com). +2. Navigate to **Teams apps** > **Manage apps**. +3. Click **Upload new app** (or **Upload** in the toolbar). +4. Select the ZIP file you created. +5. The app should appear in the list as "Bates." + +### Assign the App to Users + +By default, uploaded custom apps may not be available to users. To enable: + +1. Go to **Teams apps** > **Setup policies**. +2. Edit the **Global (Org-wide default)** policy or create a new one. +3. Under **Installed apps**, click **Add apps** and search for "Bates." +4. Add it to the installed apps list. +5. Optionally, pin the app for easy access. + +Alternatively, individual users can find the app under **Apps** > **Built for your org** in the Teams client. + +--- + +## Step 6: Test in Teams + +1. Open Microsoft Teams. +2. Go to **Apps** and search for "Bates" under **Built for your org**. +3. Click on the app and select **Add** (or it may already be installed via policy). +4. Open a chat with the bot. +5. Send a test message: + + ``` + Hello, Bates! + ``` + +6. The bot should respond. If not, check: + + ```bash + journalctl --user -u openclaw-gateway -n 50 --no-pager + ``` + +--- + +## NODE_PATH Systemd Drop-in + +If the Teams plugin is installed as an npm global package, Node.js may not resolve its dependencies correctly when running under systemd. This is because systemd services do not inherit the same environment as your interactive shell. + +### The Problem + +The `msteams` plugin requires `botbuilder` and related packages. When the gateway starts via systemd, Node.js cannot find these packages because `NODE_PATH` is not set. + +### The Solution + +Create a systemd drop-in to set `NODE_PATH`: + +1. Create the drop-in directory: + + ```bash + mkdir -p ~/.config/systemd/user/openclaw-gateway.service.d/ + ``` + +2. Create the drop-in file: + + ```bash + cat > ~/.config/systemd/user/openclaw-gateway.service.d/msteams-deps.conf << 'EOF' + [Service] + Environment=NODE_PATH=/home/YOUR_USER/.npm-global/lib/node_modules + EOF + ``` + + Replace `YOUR_USER` with your actual username. + +3. Reload systemd and restart: + + ```bash + systemctl --user daemon-reload + systemctl --user restart openclaw-gateway + ``` + +### Why Not Use extensions/? + +You might wonder why the Teams plugin is not simply placed in `~/.openclaw/extensions/msteams/`. The extension auto-discovery glob (`~/.openclaw/extensions/*/index.ts`) can cause duplicate plugin loading if the plugin is also installed globally. The drop-in approach avoids this conflict by keeping the plugin in the npm global location and simply ensuring its dependencies are resolvable. + +> **Warning:** If you ever see duplicate message handling or "plugin already registered" errors, check that the plugin does not exist in both `~/.openclaw/extensions/` and the npm global path simultaneously. + +--- + +## Troubleshooting + +### Bot Not Responding in Teams + +1. Verify the messaging endpoint in Azure Bot > Configuration matches your gateway URL. +2. Check that the gateway is receiving requests (look for Teams-related log entries). +3. Ensure the app ID and password in your OpenClaw config match the Azure Bot registration. + +### Manifest Upload Fails + +- Ensure the `id` field in `manifest.json` is a valid GUID matching the Microsoft App ID. +- Validate icons meet size requirements (192x192 color, 32x32 outline). +- Use the [Teams App Validator](https://dev.teams.microsoft.com/appvalidation.html) to check for issues. + +### Messages Delayed or Lost + +- Check your HTTPS endpoint is consistently reachable. +- The Bot Framework retries failed deliveries, but long outages may cause message loss. +- Ensure the gateway is not being rate-limited (check HTTP 429 responses in logs). diff --git a/bates-enhance/docs/manual-steps-telegram.md b/bates-enhance/docs/manual-steps-telegram.md new file mode 100644 index 0000000..b947214 --- /dev/null +++ b/bates-enhance/docs/manual-steps-telegram.md @@ -0,0 +1,211 @@ +# Telegram Bot Setup + +This guide walks through creating a Telegram bot for Bates, obtaining the necessary credentials, and verifying the integration. + +--- + +## Prerequisites + +- A Telegram account +- The Telegram app (desktop or mobile) +- The OpenClaw gateway installed and running + +--- + +## Step 1: Create a Bot via BotFather + +1. Open Telegram and search for **@BotFather** (the official bot for managing bots). +2. Start a conversation and send the command: + + ``` + /newbot + ``` + +3. BotFather will ask for a **display name** for your bot. This is what users see in chats. Example: + + ``` + Bates Assistant + ``` + +4. Next, BotFather asks for a **username**. This must end in `bot` and be globally unique. Example: + + ``` + my_bates_assistant_bot + ``` + +5. On success, BotFather responds with a message containing your **bot token**. It looks like: + + ``` + 7123456789:AAH1bCdEfGhIjKlMnOpQrStUvWxYz12345 + ``` + +> **Warning:** Never share your bot token publicly. Anyone with this token can control your bot. If compromised, use `/revoke` with BotFather to generate a new one. + +--- + +## Step 2: Get Your Numeric User ID + +Bates needs your Telegram numeric user ID to restrict who can interact with the bot. + +1. Search for **@userinfobot** in Telegram and start a conversation. +2. Send any message (e.g., `/start`). +3. The bot replies with your account details, including your numeric **ID**: + + ``` + Id: 123456789 + First: Robert + Lang: en + ``` + +4. Record this number. You will configure it as the allowed user. + +> **Tip:** You can also forward a message from yourself to @userinfobot to see the sender's ID. + +--- + +## Step 3: Configure OpenClaw + +Add the Telegram bot credentials to your OpenClaw configuration: + +```json +{ + "telegram": { + "botToken": "", + "allowedUsers": [123456789] + } +} +``` + +The `allowedUsers` array restricts which Telegram user IDs can interact with the bot. Messages from other users will be ignored. + +--- + +## Step 4: Test the Bot + +1. Restart the OpenClaw gateway to pick up the new configuration: + + ```bash + systemctl --user restart openclaw-gateway + ``` + +2. Open Telegram and find your bot by its username (e.g., `@my_bates_assistant_bot`). + +3. Send `/start` to initiate a conversation. + +4. Send a test message like: + + ``` + Hello, Bates! + ``` + +5. Verify the bot responds. Check gateway logs if there is no response: + + ```bash + journalctl --user -u openclaw-gateway -n 50 --no-pager + ``` + +--- + +## Step 5: Customize the Bot Profile + +Go back to **@BotFather** to customize your bot's appearance. + +### Set the Bot Description + +The description appears when users first open a chat with the bot (before sending any messages): + +``` +/setdescription +``` + +Then select your bot and enter a description, for example: + +``` +Bates is your AI-powered executive assistant. Send a message to get started. +``` + +### Set the About Text + +This appears in the bot's profile page: + +``` +/setabouttext +``` + +Example: + +``` +AI executive assistant powered by OpenClaw. Manages email, calendar, tasks, and more. +``` + +### Set the Bot Profile Picture + +``` +/setuserpic +``` + +Select your bot, then upload a square image (minimum 150x150 pixels). A professional-looking avatar or logo works well. + +### Set Bot Commands (Menu) + +Define slash commands that appear in the Telegram command menu: + +``` +/setcommands +``` + +Select your bot and enter commands in the format `command - description`: + +``` +start - Start a conversation +status - Check system status +help - Show available commands +``` + +--- + +## Optional: Webhook vs Polling + +By default, OpenClaw uses **long polling** to receive Telegram updates. For production use, you may want to switch to **webhooks** for lower latency. + +### Set Up Webhook + +The gateway must be accessible over HTTPS. If you are using Tailscale Serve, your webhook URL would be: + +``` +https://your-machine.your-tailnet.ts.net:443/telegram/webhook +``` + +Configure in OpenClaw: + +```json +{ + "telegram": { + "botToken": "", + "allowedUsers": [123456789], + "webhook": { + "enabled": true, + "url": "https://your-machine.your-tailnet.ts.net:443/telegram/webhook" + } + } +} +``` + +### Verify Webhook + +After restarting the gateway, verify the webhook is set: + +```bash +curl "https://api.telegram.org/bot/getWebhookInfo" | python3 -m json.tool +``` + +You should see your URL in the response along with `"has_custom_certificate": false` and no pending errors. + +--- + +## Security Considerations + +- **Restrict allowed users**: Always set `allowedUsers` to prevent unauthorized access. +- **Rotate the bot token** periodically using `/revoke` with BotFather. +- **Do not embed the token** in version-controlled files. Use environment variables or a secrets manager. +- **Monitor activity**: Check gateway logs periodically for unexpected user IDs attempting to interact with the bot. diff --git a/bates-enhance/docs/manual-steps-twilio.md b/bates-enhance/docs/manual-steps-twilio.md new file mode 100644 index 0000000..8be680d --- /dev/null +++ b/bates-enhance/docs/manual-steps-twilio.md @@ -0,0 +1,215 @@ +# Twilio Voice Calling Setup + +This guide covers creating a Twilio account, acquiring a phone number, configuring webhooks, and setting up voice calling with the OpenClaw gateway. + +--- + +## Prerequisites + +- The OpenClaw gateway installed and running +- A publicly accessible HTTPS endpoint (e.g., via Tailscale Serve on port 8443) +- A payment method for Twilio (trial accounts work for testing) + +--- + +## Step 1: Create a Twilio Account + +1. Go to [twilio.com](https://www.twilio.com) and sign up for an account. +2. Complete the verification process (phone number and email). +3. Once in the console, note your: + + - **Account SID** (starts with `AC`) + - **Auth Token** + + These are on the main [Console Dashboard](https://console.twilio.com). + +> **Tip:** Trial accounts provide a small credit for testing. You can make calls to verified numbers only. Upgrade to a paid account for full functionality. + +--- + +## Step 2: Get a Phone Number + +1. In the Twilio Console, go to **Phone Numbers** > **Manage** > **Buy a number**. +2. Search for a number in your preferred country/area code. +3. Ensure the number has **Voice** capability enabled. +4. Click **Buy** and confirm. +5. Note the phone number (e.g., `+15551234567`). + +### Number Configuration + +After purchasing, go to **Phone Numbers** > **Manage** > **Active Numbers** and click on your number. + +Under **Voice Configuration**: + +- **Configure with:** Webhooks, TwiML Bins, Functions, etc. +- **A call comes in:** Set to **Webhook** (configured in Step 3) +- **HTTP method:** POST + +--- + +## Step 3: Set Up the Webhook URL + +The gateway needs to receive incoming call notifications from Twilio. This requires a publicly accessible HTTPS URL. + +### Using Tailscale Serve + +If you use Tailscale for remote access, configure Tailscale Serve to expose the voice webhook port: + +```bash +# Expose port 8443 for voice webhooks +tailscale serve https:8443 / http://localhost:18789 +``` + +Your webhook URL will be: + +``` +https://your-machine.your-tailnet.ts.net:8443/webhook +``` + +### Configure the Webhook in Twilio + +1. Go to your active phone number in the Twilio Console. +2. Under **Voice Configuration** > **A call comes in**: + + - **Webhook URL:** `https://your-machine.your-tailnet.ts.net:8443/webhook` + - **HTTP Method:** POST + +3. Under **Call status changes** (optional but recommended): + + - **Status callback URL:** `https://your-machine.your-tailnet.ts.net:8443/webhook/status` + - **HTTP Method:** POST + +4. Click **Save configuration**. + +--- + +## Step 4: Configure OpenClaw + +Add the Twilio credentials and voice settings to your OpenClaw configuration: + +```json +{ + "voiceCall": { + "provider": "twilio", + "twilio": { + "accountSid": "", + "authToken": "", + "phoneNumber": "+15551234567" + }, + "streaming": { + "enabled": true + }, + "outbound": { + "defaultMode": "conversation" + }, + "webhook": { + "publicUrl": "https://your-machine.your-tailnet.ts.net:8443/webhook" + } + } +} +``` + +### Configuration Options + +| Key | Description | +|---|---| +| `streaming.enabled` | Enable real-time audio streaming (recommended for natural conversation) | +| `outbound.defaultMode` | `"conversation"` for interactive calls, `"announcement"` for one-way messages | +| `webhook.publicUrl` | The publicly accessible URL that Twilio will call | + +Restart the gateway after updating the configuration: + +```bash +systemctl --user restart openclaw-gateway +``` + +--- + +## Step 5: Configure TTS (Text-to-Speech) + +Voice calls require a TTS engine to convert Bates's text responses to speech. ElevenLabs is the recommended provider (see the [ElevenLabs setup guide](manual-steps-elevenlabs.md) for creating a voice clone). + +```json +{ + "voiceCall": { + "tts": { + "provider": "elevenlabs", + "elevenlabs": { + "apiKey": "", + "voiceId": "", + "model": "eleven_multilingual_v2" + } + } + } +} +``` + +--- + +## Step 6: Test Inbound Calls + +1. Call your Twilio phone number from any phone. +2. You should hear the gateway answer and Bates respond via TTS. +3. Check the gateway logs for activity: + + ```bash + journalctl --user -u openclaw-gateway -n 50 --no-pager + ``` + +4. If the call does not connect, check: + - The webhook URL is reachable from the internet + - Twilio can reach your endpoint (check [Twilio Debugger](https://console.twilio.com/us1/monitor/logs/debugger)) + - The gateway is running and listening + +### Twilio Debugger + +The [Twilio Debugger](https://console.twilio.com/us1/monitor/logs/debugger) is invaluable for troubleshooting. Common errors: + +| Error Code | Meaning | +|---|---| +| 11200 | HTTP retrieval failure (webhook unreachable) | +| 11205 | HTTP connection failure | +| 12100 | Document parse failure (invalid TwiML response) | +| 12200 | Schema validation warning | + +--- + +## Step 7: Test Outbound Calls + +Outbound calls are initiated by Bates (e.g., to notify you of something urgent). + +1. Trigger an outbound call via the gateway API or by asking Bates to call you. +2. Your phone should ring with the Twilio number as the caller ID. + +> **Warning:** On trial accounts, outbound calls can only reach **verified** phone numbers. Add your phone number under **Phone Numbers** > **Verified Caller IDs** in the Twilio Console. + +### Testing from the Command Line + +You can test outbound calling with a curl request to the gateway: + +```bash +curl -X POST http://localhost:18789/api/voice/call \ + -H "Content-Type: application/json" \ + -d '{ + "to": "+15559876543", + "message": "Hello, this is a test call from Bates." + }' +``` + +--- + +## Audio Quality Tips + +- **Use streaming mode** (`streaming.enabled: true`) for more natural conversation flow. +- **Minimize latency**: Ensure your Tailscale connection is stable. Voice calls are sensitive to latency above 300ms. +- **TTS quality**: The `eleven_multilingual_v2` model provides the best quality. Avoid cheaper models for production voice calls. +- **Background noise**: If Bates picks up background noise during calls, this is a Twilio-side issue. Consider enabling noise suppression in your Twilio settings. + +--- + +## Security Considerations + +- **Validate Twilio signatures**: The gateway should verify that incoming webhook requests are genuinely from Twilio using the `X-Twilio-Signature` header. This prevents spoofed requests. +- **Restrict outbound calling**: Configure an allow-list of phone numbers that Bates can call to prevent misuse. +- **Rate limiting**: Set reasonable limits on outbound calls per hour/day. +- **Store credentials securely**: Never commit Twilio Account SID or Auth Token to version control. diff --git a/bates-enhance/docs/troubleshooting.md b/bates-enhance/docs/troubleshooting.md new file mode 100644 index 0000000..c22e280 --- /dev/null +++ b/bates-enhance/docs/troubleshooting.md @@ -0,0 +1,965 @@ +# Troubleshooting Guide + +This document covers common issues and their solutions, organized by category. For each issue, the **Symptom**, **Cause**, and **Fix** are provided. + +--- + +## Table of Contents + +- [Installation](#installation) +- [Gateway](#gateway) +- [Authentication](#authentication) +- [Telegram](#telegram) +- [Microsoft Teams](#microsoft-teams) +- [Voice Calling](#voice-calling) +- [Dashboard](#dashboard) +- [Search and Embeddings](#search-and-embeddings) +- [Agents](#agents) +- [Cron Jobs](#cron-jobs) +- [Patches](#patches) + +--- + +## Installation + +### WSL2 Not Enabled + +**Symptom:** You cannot run Linux commands or `wsl` returns "WSL2 is not installed." + +**Cause:** Windows Subsystem for Linux is not enabled or not set to version 2. + +**Fix:** + +1. Open PowerShell as Administrator. +2. Run: + + ```powershell + wsl --install + ``` + +3. Restart your computer. +4. Verify: + + ```powershell + wsl --list --verbose + ``` + + Ensure your distribution shows VERSION 2. + +--- + +### Node.js Version Incorrect + +**Symptom:** The gateway fails to start with syntax errors or "Unexpected token" messages. Or `npm install` fails with compatibility warnings. + +**Cause:** OpenClaw requires Node.js 20 or later. An older version is installed. + +**Fix:** + +1. Check your current version: + + ```bash + node --version + ``` + +2. Install the correct version using nvm: + + ```bash + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash + source ~/.bashrc + nvm install 20 + nvm use 20 + nvm alias default 20 + ``` + +3. Verify: + + ```bash + node --version # Should show v20.x.x or later + ``` + +--- + +### npm Global Path Issues + +**Symptom:** Globally installed packages (e.g., `openclaw`) are not found, or you get EACCES permission errors when running `npm install -g`. + +**Cause:** The default npm global directory requires root permissions, or `~/.npm-global` is not in your PATH. + +**Fix:** + +1. Configure npm to use a user-writable directory: + + ```bash + mkdir -p ~/.npm-global + npm config set prefix '~/.npm-global' + ``` + +2. Add to your `~/.bashrc` or `~/.profile`: + + ```bash + export PATH="$HOME/.npm-global/bin:$PATH" + ``` + +3. Reload: + + ```bash + source ~/.bashrc + ``` + +4. Test: + + ```bash + npm install -g openclaw + openclaw --version + ``` + +--- + +## Gateway + +### Gateway Will Not Start + +**Symptom:** `systemctl --user status openclaw-gateway` shows "failed" or "inactive." + +**Cause:** Configuration error, port conflict, or missing dependencies. + +**Fix:** + +1. Check logs for the specific error: + + ```bash + journalctl --user -u openclaw-gateway -n 100 --no-pager + ``` + +2. Validate your configuration file: + + ```bash + cat ~/.openclaw/openclaw.json | python3 -m json.tool + ``` + + Fix any JSON syntax errors. + +3. Ensure no other process is using port 18789: + + ```bash + ss -tlnp | grep 18789 + ``` + +4. Try starting manually to see errors in real time: + + ```bash + openclaw gateway + ``` + +--- + +### Port Already in Use + +**Symptom:** Gateway logs show "EADDRINUSE: address already in use :::18789." + +**Cause:** Another process is already bound to port 18789, possibly a previous gateway instance that did not shut down cleanly. + +**Fix:** + +1. Find the process: + + ```bash + ss -tlnp | grep 18789 + ``` + +2. Kill it: + + ```bash + kill + ``` + +3. Restart the gateway: + + ```bash + systemctl --user restart openclaw-gateway + ``` + +--- + +### Systemd Service Errors + +**Symptom:** `systemctl --user start openclaw-gateway` silently fails or shows "degraded." + +**Cause:** The systemd user instance may not be running, or the service file has errors. + +**Fix:** + +1. Ensure lingering is enabled (allows user services to run without an active login session): + + ```bash + sudo loginctl enable-linger $(whoami) + ``` + +2. Check the service file for errors: + + ```bash + systemctl --user cat openclaw-gateway + ``` + +3. Reload after any changes: + + ```bash + systemctl --user daemon-reload + systemctl --user restart openclaw-gateway + ``` + +--- + +## Authentication + +### Token Expired + +**Symptom:** API calls fail with 401 Unauthorized. Logs show "token expired" or "invalid session." + +**Cause:** The Claude authentication token has expired and needs to be refreshed. + +**Fix:** + +1. Re-run the token setup: + + ```bash + claude setup-token + ``` + +2. Update OpenClaw: + + ```bash + openclaw models auth setup-token --provider anthropic + ``` + +3. Restart the gateway: + + ```bash + systemctl --user restart openclaw-gateway + ``` + +--- + +### API Key Invalid + +**Symptom:** Requests fail with "Invalid API key" or 403 Forbidden. + +**Cause:** The API key is incorrect, expired, or associated with a deactivated account. + +**Fix:** + +1. Verify the key: + + ```bash + curl -s https://api.anthropic.com/v1/messages \ + -H "x-api-key: $ANTHROPIC_API_KEY" \ + -H "anthropic-version: 2023-06-01" \ + -H "content-type: application/json" \ + -d '{"model":"claude-sonnet-4-20250514","max_tokens":10,"messages":[{"role":"user","content":"hi"}]}' + ``` + +2. If invalid, generate a new key from the [Anthropic Console](https://console.anthropic.com/settings/keys). + +3. Update the key in your auth profiles: + + ```bash + cat ~/.openclaw/agents/main/agent/auth-profiles.json + ``` + + Update the relevant profile and restart. + +--- + +### Subscription Issues + +**Symptom:** The token profile works initially but fails intermittently. Logs mention "subscription" or "rate limit." + +**Cause:** The subscription may have lapsed, or you have exceeded the subscription's usage limits. + +**Fix:** + +1. Check subscription status at [claude.ai/settings](https://claude.ai/settings). +2. If the subscription is active, wait for rate limits to reset. +3. If the subscription has lapsed, either renew it or switch to the API key fallback profile by updating `auth-profiles.json`. + +--- + +## Telegram + +### Bot Not Responding + +**Symptom:** You send messages to the Telegram bot but receive no response. + +**Cause:** Multiple possible causes: gateway not running, bot token incorrect, user ID not in allowedUsers, or webhook/polling not working. + +**Fix:** + +1. Verify the gateway is running: + + ```bash + systemctl --user status openclaw-gateway + ``` + +2. Check logs for Telegram-related errors: + + ```bash + journalctl --user -u openclaw-gateway -n 50 --no-pager | grep -i telegram + ``` + +3. Verify your user ID is in the `allowedUsers` array in the configuration. + +4. Test the bot token directly: + + ```bash + curl "https://api.telegram.org/bot/getMe" + ``` + + If this fails, the token is invalid. Get a new one from @BotFather. + +--- + +### Webhook Errors + +**Symptom:** Telegram webhook is set but the bot does not receive messages. `getWebhookInfo` shows errors. + +**Cause:** The webhook URL is unreachable, SSL certificate issues, or Telegram cannot connect. + +**Fix:** + +1. Check webhook status: + + ```bash + curl "https://api.telegram.org/bot/getWebhookInfo" | python3 -m json.tool + ``` + +2. Look for `last_error_message` in the response. + +3. If SSL errors: ensure your HTTPS certificate is valid (Tailscale Serve handles this automatically). + +4. If connection errors: verify Tailscale Funnel is enabled and your endpoint is publicly accessible. + +5. To reset to polling mode: + + ```bash + curl "https://api.telegram.org/bot/deleteWebhook" + ``` + +--- + +### User ID Mismatch + +**Symptom:** Bot receives messages (visible in logs) but does not respond to you. May respond to other users. + +**Cause:** Your numeric Telegram user ID does not match what is configured in `allowedUsers`. + +**Fix:** + +1. Send a message to @userinfobot to confirm your numeric ID. +2. Update the `allowedUsers` array in your configuration. +3. Restart the gateway. + +--- + +## Microsoft Teams + +### Manifest Upload Fails + +**Symptom:** The Teams Admin Center rejects the app ZIP file with validation errors. + +**Cause:** Invalid manifest structure, wrong icon sizes, or missing required fields. + +**Fix:** + +1. Validate the manifest using the [Teams App Validator](https://dev.teams.microsoft.com/appvalidation.html). +2. Ensure icons are exactly 192x192 (color) and 32x32 (outline) in PNG format. +3. Verify the `id` field is a valid GUID matching your Azure Bot App ID. +4. Check that `manifestVersion` matches the schema version. + +--- + +### Bot Not Responding in Teams + +**Symptom:** Messages sent to the bot in Teams show as delivered but no response comes back. + +**Cause:** Messaging endpoint misconfigured, credentials wrong, or gateway not processing Teams messages. + +**Fix:** + +1. Verify the messaging endpoint in Azure Bot > Configuration matches your gateway URL. +2. Check that `appId` and `appPassword` in the OpenClaw config match the Azure registration. +3. Look for Teams-related errors in gateway logs: + + ```bash + journalctl --user -u openclaw-gateway -n 50 --no-pager | grep -i teams + ``` + +4. Test the endpoint is reachable: + + ```bash + curl -s https://your-endpoint/teams/messages + ``` + +--- + +### NODE_PATH Issues + +**Symptom:** Gateway starts but Teams integration fails with "Cannot find module 'botbuilder'" or similar import errors. + +**Cause:** When running under systemd, the `NODE_PATH` environment variable is not set, so Node.js cannot find globally installed packages. + +**Fix:** + +1. Create the systemd drop-in: + + ```bash + mkdir -p ~/.config/systemd/user/openclaw-gateway.service.d/ + ``` + +2. Create the environment file: + + ```bash + cat > ~/.config/systemd/user/openclaw-gateway.service.d/msteams-deps.conf << 'EOF' + [Service] + Environment=NODE_PATH=/home/YOUR_USER/.npm-global/lib/node_modules + EOF + ``` + + Replace `YOUR_USER` with your username. + +3. Reload and restart: + + ```bash + systemctl --user daemon-reload + systemctl --user restart openclaw-gateway + ``` + +--- + +## Voice Calling + +### Twilio Webhook Not Reachable + +**Symptom:** Incoming calls ring but immediately disconnect or play Twilio's default error message. The Twilio Debugger shows error 11200. + +**Cause:** Twilio cannot reach your webhook URL. + +**Fix:** + +1. Verify the webhook URL is correct in the Twilio Console. +2. Test the URL from outside your network: + + ```bash + curl -s -o /dev/null -w "%{http_code}" https://your-endpoint:8443/webhook + ``` + +3. Ensure Tailscale Funnel is enabled for port 8443: + + ```bash + sudo tailscale funnel status + ``` + +4. Check the gateway is running and listening: + + ```bash + ss -tlnp | grep 18789 + ``` + +--- + +### TTS Not Working + +**Symptom:** Voice calls connect but Bates does not speak, or you hear silence/static instead of speech. + +**Cause:** ElevenLabs API key invalid, voice ID wrong, or TTS endpoint unreachable. + +**Fix:** + +1. Test TTS directly: + + ```bash + curl -s -X POST "https://api.elevenlabs.io/v1/text-to-speech/" \ + -H "xi-api-key: " \ + -H "Content-Type: application/json" \ + -d '{"text":"Test","model_id":"eleven_multilingual_v2"}' \ + -o test.mp3 + ``` + +2. If this fails, verify the API key and voice ID in the ElevenLabs dashboard. +3. Check your ElevenLabs character quota has not been exceeded. + +--- + +### Audio Quality Issues + +**Symptom:** Voice is choppy, delayed, or has echo. + +**Cause:** High latency, network issues, or incorrect streaming configuration. + +**Fix:** + +1. Enable streaming if not already: + + ```json + { "streaming": { "enabled": true } } + ``` + +2. Check network latency to ElevenLabs: + + ```bash + curl -o /dev/null -s -w "Time: %{time_total}s\n" https://api.elevenlabs.io/v1/voices + ``` + +3. If latency is above 300ms consistently, consider using a faster TTS model (`eleven_turbo_v2_5`). +4. Ensure your internet connection is stable (run a speed test). + +--- + +## Dashboard + +### Dashboard Not Loading + +**Symptom:** Navigating to `http://localhost:18789/dashboard` returns a blank page, 404, or connection refused. + +**Cause:** Dashboard plugin not loaded, gateway not running, or port mismatch. + +**Fix:** + +1. Verify the gateway is running: + + ```bash + systemctl --user status openclaw-gateway + ``` + +2. Check that the dashboard plugin is loaded: + + ```bash + journalctl --user -u openclaw-gateway -n 100 --no-pager | grep -i dashboard + ``` + +3. Ensure the dashboard extension exists: + + ```bash + ls ~/.openclaw/extensions/dashboard/ + ``` + +4. Try accessing directly: + + ```bash + curl -s http://localhost:18789/dashboard | head -20 + ``` + +--- + +### WebSocket Connection Failed + +**Symptom:** Dashboard loads but shows "Disconnected" or panels do not update in real time. + +**Cause:** WebSocket upgrade failed, usually due to a proxy or reverse proxy stripping the Upgrade header. + +**Fix:** + +1. If accessing through Tailscale Serve, WebSocket should work natively. Verify: + + ```bash + curl -s -i -N \ + -H "Connection: Upgrade" \ + -H "Upgrade: websocket" \ + -H "Sec-WebSocket-Version: 13" \ + -H "Sec-WebSocket-Key: dGVzdA==" \ + http://localhost:18789/ws + ``` + + You should see a 101 Switching Protocols response. + +2. If using nginx or another reverse proxy, ensure WebSocket headers are forwarded: + + ```nginx + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + ``` + +--- + +### Blank Panels + +**Symptom:** Dashboard loads and WebSocket connects, but individual panels show no data. + +**Cause:** The data source for the panel is not available (e.g., cost tracker not running, no session data yet). + +**Fix:** + +1. Check which panels are blank and what data they require. +2. For cost panels: verify the cost tracker plugin is loaded and `data/daily-costs.json` exists. +3. For session panels: ensure at least one agent session has run. +4. For delegation panels: check `delegations.json` exists and the wrapper script `run-delegation.sh` is being used. +5. Wait for a data refresh cycle (typically 5-60 seconds depending on the panel). + +--- + +## Search and Embeddings + +### Ollama Not Running + +**Symptom:** Search index scripts fail with "Connection refused" when trying to generate embeddings. + +**Cause:** The Ollama service is not running or not listening on the expected port. + +**Fix:** + +1. Start Ollama: + + ```bash + ollama serve & + ``` + + Or via systemd: + + ```bash + sudo systemctl start ollama + ``` + +2. Verify it is running: + + ```bash + curl http://localhost:11434/api/tags + ``` + +3. Ensure the embedding model is downloaded: + + ```bash + ollama pull nomic-embed-text + ``` + +--- + +### Embedding Failures + +**Symptom:** Search index sync runs but logs show embedding errors or documents are indexed without embeddings. + +**Cause:** Ollama out of memory, model not loaded, or text too long. + +**Fix:** + +1. Check Ollama logs for OOM errors. +2. Verify the embedding model is available: + + ```bash + ollama list + ``` + +3. If memory is an issue, close other applications or restart Ollama. +4. Check the document being indexed. Very long documents may need chunking. + +--- + +### Sync Stuck + +**Symptom:** The search index sync starts but makes no progress, or gets stuck processing the same batch. + +**Cause:** Database lock, network timeout, or a single problematic document blocking the pipeline. + +**Fix:** + +1. Check for database locks: + + ```bash + python3 -c " + import sqlite3 + conn = sqlite3.connect('$HOME/.openclaw/search-index/db/search.db') + print(conn.execute('PRAGMA journal_mode').fetchone()) + conn.close() + " + ``` + +2. If stuck on a specific document, check the scan offsets: + + ```bash + python3 -c " + import json + with open('$HOME/.openclaw/search-index/data/scan-offsets.json') as f: + print(json.dumps(json.load(f), indent=2)) + " + ``` + +3. Try running with `--resume` to skip past the problematic batch: + + ```bash + ~/.openclaw/search-index/scripts/sync.sh --resume + ``` + +4. As a last resort, delete offsets to force a rescan (this re-processes everything): + + ```bash + rm ~/.openclaw/search-index/data/scan-offsets.json + ``` + +--- + +## Agents + +### Deputy Not Starting + +**Symptom:** A deputy agent is requested but does not start. Logs show "agent not found" or "failed to spawn." + +**Cause:** The agent configuration is missing, or the on-demand system is not configured correctly. + +**Fix:** + +1. Verify the agent exists: + + ```bash + ls ~/.openclaw/agents/ + ``` + +2. Check the agent's configuration files are valid. +3. Use the agent control script to check status: + + ```bash + ~/.openclaw/scripts/agent-ctl.sh status + ``` + +4. Try starting manually: + + ```bash + ~/.openclaw/scripts/agent-ctl.sh start + ``` + +--- + +### Spawn Depth Errors + +**Symptom:** A sub-agent task fails with "maximum spawn depth exceeded" or similar. + +**Cause:** The `maxSpawnDepth` setting (default: 2) limits how deeply agents can delegate to other agents. A chain like main -> deputy -> sub-deputy exceeds the limit. + +**Fix:** + +1. Restructure the task to reduce delegation depth. +2. If deeper delegation is genuinely needed, increase `maxSpawnDepth` in the gateway configuration (not recommended for most setups). +3. Check that deputies are not unnecessarily spawning sub-agents for tasks they could handle directly. + +--- + +### Idle Watcher Issues + +**Symptom:** Agents are stopped prematurely, or idle agents are not being stopped (consuming memory). + +**Cause:** The idle watcher cron job is misconfigured or not running. + +**Fix:** + +1. Verify the cron job is active: + + ```bash + crontab -l | grep idle-watcher + ``` + +2. Test manually: + + ```bash + ~/.openclaw/scripts/agent-idle-watcher.sh + ``` + +3. Check the idle timeout setting (default: 10 minutes). Adjust if agents need more time. + +--- + +## Cron Jobs + +### Jobs Not Firing + +**Symptom:** Scheduled cron jobs are not executing at the expected times. + +**Cause:** The cron configuration is incorrect, the gateway is not running, or the job is in an error state. + +**Fix:** + +1. Check job status: + + ```bash + python3 -c " + import json + with open('$HOME/.openclaw/cron/jobs.json') as f: + jobs = json.load(f) + for job in jobs: + print(f\"{job.get('id', 'unknown')}: {job.get('status', 'unknown')} - {job.get('schedule', 'no schedule')}\") + " + ``` + +2. Verify the gateway cron engine is running by checking logs: + + ```bash + journalctl --user -u openclaw-gateway -n 100 --no-pager | grep -i cron + ``` + +3. Check that the schedule expression is valid (uses standard cron syntax). + +--- + +### Delivery Target Missing + +**Symptom:** Cron jobs run but fail with "cron delivery target is missing" in logs. + +**Cause:** Jobs with `delivery.channel: "msteams"` (or other channels) do not have an explicit `delivery.to` field. The gateway tries to resolve the target from the last interaction, which may not be available after a restart. + +**Fix:** + +Add an explicit `delivery.to` field to every cron job that has a delivery section: + +```json +{ + "delivery": { + "channel": "msteams", + "to": "user:" + } +} +``` + +> **Tip:** Find your Teams user ID by running a Graph API query or checking the Teams admin center. Do not use display names or email addresses. + +--- + +### Timezone Issues + +**Symptom:** Cron jobs fire at unexpected times (e.g., 5 hours early or late). + +**Cause:** The cron schedule is interpreted in UTC, but you expected local time, or the system timezone is incorrect. + +**Fix:** + +1. Check the system timezone: + + ```bash + timedatectl + ``` + +2. Set the correct timezone: + + ```bash + sudo timedatectl set-timezone America/New_York # or your timezone + ``` + +3. Adjust cron schedules if needed. If the gateway uses UTC internally, convert your local time to UTC for the schedule expression. + +--- + +## Patches + +### Patch Failed After Update + +**Symptom:** After running `openclaw update`, customizations (cost footer, Adaptive Cards, etc.) stop working. + +**Cause:** Updates overwrite the dist files that contain your patches. File names change with each release (hash suffixes), so patches must be reapplied at new locations. + +**Fix:** + +1. Check the post-update checklist for the full repair procedure. +2. Identify the new dist file names: + + ```bash + ls ~/.npm-global/lib/node_modules/openclaw/dist/reply-*.js + ls ~/.npm-global/lib/node_modules/openclaw/dist/deliver-*.js + ``` + +3. Compare with your patch backups to understand what needs to be reapplied: + + ```bash + ls ~/.openclaw/patch-backup/ + ``` + +4. Reapply each patch to the new files, adjusting for any code changes in the update. + +> **Warning:** Always back up the new dist files before patching, in case you need to start over. + +--- + +### How to Restore from Backups + +**Symptom:** A patch goes wrong and you need to revert to the unpatched version. + +**Cause:** Manual edits to dist files introduced syntax errors or logic bugs. + +**Fix:** + +1. Check available backups: + + ```bash + ls ~/.openclaw/patch-backup/ + ``` + +2. Backups are organized by version. Copy the original files back: + + ```bash + cp ~/.openclaw/patch-backup//.js \ + ~/.npm-global/lib/node_modules/openclaw/dist/.js + ``` + +3. Restart the gateway: + + ```bash + systemctl --user restart openclaw-gateway + ``` + +4. If no backup exists for the current version, reinstall: + + ```bash + npm install -g openclaw@ + ``` + + Then carefully reapply patches one at a time, testing after each. + +--- + +## General Debugging Tips + +### Enable Verbose Logging + +Set the `DEBUG` environment variable for more detailed output: + +```bash +DEBUG=openclaw:* systemctl --user restart openclaw-gateway +``` + +Or for a specific component: + +```bash +DEBUG=openclaw:cron,openclaw:msteams systemctl --user restart openclaw-gateway +``` + +### Check Resource Usage + +```bash +# Memory usage +ps aux --sort=-%mem | head -20 + +# Disk usage +df -h + +# Open file descriptors (can cause "too many open files" errors) +ls /proc/$(pgrep -f openclaw)/fd | wc -l +``` + +### Restart Everything Cleanly + +When in doubt, a clean restart often resolves transient issues: + +```bash +# Stop the gateway +systemctl --user stop openclaw-gateway + +# Kill any zombie processes +pkill -f openclaw-cron 2>/dev/null +pkill -f "openclaw agent" 2>/dev/null + +# Wait a moment +sleep 2 + +# Start fresh +systemctl --user start openclaw-gateway + +# Verify +systemctl --user status openclaw-gateway +journalctl --user -u openclaw-gateway -n 20 --no-pager +``` diff --git a/bates-enhance/integrations/agents/config-fragment.json b/bates-enhance/integrations/agents/config-fragment.json new file mode 100644 index 0000000..908a829 --- /dev/null +++ b/bates-enhance/integrations/agents/config-fragment.json @@ -0,0 +1,11 @@ +{ + "agents": { + "defaults": { + "subagents": { + "maxSpawnDepth": 2, + "maxConcurrent": 8, + "maxChildrenPerAgent": 5 + } + } + } +} diff --git a/bates-enhance/integrations/agents/cron-jobs-agents.json b/bates-enhance/integrations/agents/cron-jobs-agents.json new file mode 100644 index 0000000..6422212 --- /dev/null +++ b/bates-enhance/integrations/agents/cron-jobs-agents.json @@ -0,0 +1,122 @@ +[ + { + "name": "mira-heartbeat", + "schedule": "0 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for mira. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "conrad-heartbeat", + "schedule": "5 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for conrad. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "soren-heartbeat", + "schedule": "10 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for soren. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "amara-heartbeat", + "schedule": "15 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for amara. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "jules-heartbeat", + "schedule": "20 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for jules. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "dash-heartbeat", + "schedule": "25 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for dash. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "mercer-heartbeat", + "schedule": "30 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for mercer. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "kira-heartbeat", + "schedule": "35 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for kira. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "nova-heartbeat", + "schedule": "40 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for nova. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "paige-heartbeat", + "schedule": "45 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for paige. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "quinn-heartbeat", + "schedule": "50 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for quinn. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "archer-heartbeat", + "schedule": "55 */4 * * *", + "tz": "{{USER_TZ}}", + "message": "Heartbeat check for archer. Review workspace, check pending messages, update observations.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "daily-standup-compile", + "schedule": "0 9 * * 1-5", + "tz": "{{USER_TZ}}", + "message": "Compile the daily standup from all deputies. Collect recent observations, summarize status, flag blockers, and deliver a unified briefing.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "message-router", + "schedule": "*/15 * * * *", + "tz": "{{USER_TZ}}", + "message": "Route inter-agent messages. Check the message queue, deliver pending messages to target agents, and log delivery status.", + "agentId": "main", + "sessionTarget": "isolated" + }, + { + "name": "weekly-strategy-review", + "schedule": "0 10 * * 1", + "tz": "{{USER_TZ}}", + "message": "Weekly strategy alignment check. Review all deputy observations from the past week, identify cross-cutting themes, flag misalignments, and produce a strategic summary.", + "agentId": "main", + "sessionTarget": "isolated" + } +] diff --git a/bates-enhance/integrations/agents/scripts/agent-ctl.sh b/bates-enhance/integrations/agents/scripts/agent-ctl.sh new file mode 100644 index 0000000..9c4aaba --- /dev/null +++ b/bates-enhance/integrations/agents/scripts/agent-ctl.sh @@ -0,0 +1,160 @@ +#!/usr/bin/env bash +# agent-ctl.sh -- Control deputy agents via systemd +# +# Usage: +# agent-ctl.sh start Enable and start an agent +# agent-ctl.sh stop Stop an agent +# agent-ctl.sh restart Restart an agent +# agent-ctl.sh status [agent-name|all] Show agent status +# agent-ctl.sh wake Send a wake-up message to an idle agent +# +# Agents run as systemd user units: openclaw-agent@.service + +set -euo pipefail + +# All known deputy names +DEPUTIES=(mira conrad soren amara jules dash mercer kira nova paige quinn archer) + +UNIT_PREFIX="openclaw-agent@" + +usage() { + echo "Usage: $(basename "$0") [agent-name|all]" + echo "" + echo "Commands:" + echo " start Enable and start agent(s)" + echo " stop Stop agent(s)" + echo " restart Restart agent(s)" + echo " status [name|all] Show status (defaults to all)" + echo " wake Send a wake-up message to an idle agent" + echo "" + echo "Deputies: ${DEPUTIES[*]}" + exit 1 +} + +# Resolve target list: single agent name, or all deputies +resolve_targets() { + local target="${1:-all}" + if [[ "$target" == "all" ]]; then + echo "${DEPUTIES[@]}" + else + # Validate agent name + local found=0 + for d in "${DEPUTIES[@]}"; do + if [[ "$d" == "$target" ]]; then + found=1 + break + fi + done + if [[ $found -eq 0 ]]; then + echo "ERROR: Unknown agent '$target'. Known deputies: ${DEPUTIES[*]}" >&2 + exit 1 + fi + echo "$target" + fi +} + +cmd_start() { + local targets + read -ra targets <<< "$(resolve_targets "${1:-all}")" + for name in "${targets[@]}"; do + echo "Starting ${name}..." + systemctl --user enable "${UNIT_PREFIX}${name}.service" 2>/dev/null || true + systemctl --user start "${UNIT_PREFIX}${name}.service" + echo " [OK] ${name} started." + done +} + +cmd_stop() { + local targets + read -ra targets <<< "$(resolve_targets "${1:-all}")" + for name in "${targets[@]}"; do + echo "Stopping ${name}..." + systemctl --user stop "${UNIT_PREFIX}${name}.service" 2>/dev/null || true + echo " [OK] ${name} stopped." + done +} + +cmd_restart() { + local targets + read -ra targets <<< "$(resolve_targets "${1:-all}")" + for name in "${targets[@]}"; do + echo "Restarting ${name}..." + systemctl --user restart "${UNIT_PREFIX}${name}.service" 2>/dev/null || true + echo " [OK] ${name} restarted." + done +} + +cmd_status() { + local targets + read -ra targets <<< "$(resolve_targets "${1:-all}")" + printf "%-12s %-12s %s\n" "AGENT" "STATUS" "MEMORY" + printf "%-12s %-12s %s\n" "-----" "------" "------" + for name in "${targets[@]}"; do + local state + state=$(systemctl --user is-active "${UNIT_PREFIX}${name}.service" 2>/dev/null || echo "inactive") + local mem="-" + if [[ "$state" == "active" ]]; then + # Try to get memory usage from systemd + mem=$(systemctl --user show "${UNIT_PREFIX}${name}.service" \ + --property=MemoryCurrent 2>/dev/null | cut -d= -f2 || echo "-") + if [[ "$mem" != "-" && "$mem" != "[not set]" && "$mem" =~ ^[0-9]+$ ]]; then + mem="$(( mem / 1048576 ))MB" + else + mem="-" + fi + fi + printf "%-12s %-12s %s\n" "$name" "$state" "$mem" + done +} + +cmd_wake() { + local name="${1:-}" + if [[ -z "$name" ]]; then + echo "ERROR: wake requires an agent name." >&2 + usage + fi + resolve_targets "$name" >/dev/null # validate + + local msg_dir="$HOME/.openclaw/agents/${name}/inbox" + mkdir -p "$msg_dir" + + local ts + ts=$(date +%s) + local msg_file="${msg_dir}/${ts}-wake.json" + + cat > "$msg_file" </dev/null || echo "inactive") + if [[ "$state" != "active" ]]; then + echo "Agent ${name} is ${state}. Starting..." + cmd_start "$name" + fi +} + +# -- Main -- +if [[ $# -lt 1 ]]; then + usage +fi + +COMMAND="$1" +TARGET="${2:-}" + +case "$COMMAND" in + start) cmd_start "$TARGET" ;; + stop) cmd_stop "$TARGET" ;; + restart) cmd_restart "$TARGET" ;; + status) cmd_status "$TARGET" ;; + wake) cmd_wake "$TARGET" ;; + *) usage ;; +esac diff --git a/bates-enhance/integrations/agents/scripts/agent-idle-watcher.sh b/bates-enhance/integrations/agents/scripts/agent-idle-watcher.sh new file mode 100644 index 0000000..fa4ee00 --- /dev/null +++ b/bates-enhance/integrations/agents/scripts/agent-idle-watcher.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +# agent-idle-watcher.sh -- Stop idle deputy agents to save memory +# +# Designed to run from cron every 5 minutes: +# */5 * * * * ~/.openclaw/scripts/agent-idle-watcher.sh +# +# Checks all running deputy agents. If a deputy's session has been idle +# for longer than IDLE_THRESHOLD seconds (default: 600 = 10 minutes), +# the agent is stopped via systemd. + +set -euo pipefail + +IDLE_THRESHOLD="${IDLE_THRESHOLD:-600}" # seconds (10 minutes) +DEPUTIES=(mira conrad soren amara jules dash mercer kira nova paige quinn archer) +UNIT_PREFIX="openclaw-agent@" +LOG_FILE="$HOME/.openclaw/logs/agent-idle-watcher.log" + +mkdir -p "$(dirname "$LOG_FILE")" + +log() { + echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOG_FILE" +} + +now=$(date +%s) + +for name in "${DEPUTIES[@]}"; do + # Only check running agents + state=$(systemctl --user is-active "${UNIT_PREFIX}${name}.service" 2>/dev/null || echo "inactive") + if [[ "$state" != "active" ]]; then + continue + fi + + # Determine last activity time from the session transcript + session_dir="$HOME/.openclaw/agents/${name}/sessions" + if [[ ! -d "$session_dir" ]]; then + continue + fi + + # Find the most recently modified .jsonl file + latest_file="" + latest_mtime=0 + for f in "$session_dir"/*.jsonl; do + [[ -f "$f" ]] || continue + mtime=$(stat -c %Y "$f" 2>/dev/null || echo 0) + if [[ "$mtime" -gt "$latest_mtime" ]]; then + latest_mtime=$mtime + latest_file=$f + fi + done + + if [[ -z "$latest_file" || "$latest_mtime" -eq 0 ]]; then + # No session files -- agent might be freshly started, skip + continue + fi + + idle_seconds=$(( now - latest_mtime )) + + if [[ "$idle_seconds" -gt "$IDLE_THRESHOLD" ]]; then + log "Stopping idle agent: ${name} (idle ${idle_seconds}s, threshold ${IDLE_THRESHOLD}s)" + systemctl --user stop "${UNIT_PREFIX}${name}.service" 2>/dev/null || { + log "WARNING: Failed to stop ${name}" + } + fi +done diff --git a/bates-enhance/integrations/agents/scripts/agent-message.sh b/bates-enhance/integrations/agents/scripts/agent-message.sh new file mode 100644 index 0000000..b1b04ae --- /dev/null +++ b/bates-enhance/integrations/agents/scripts/agent-message.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +# agent-message.sh -- Send a message to a specific deputy agent +# +# Usage: +# agent-message.sh "Your message here" +# agent-message.sh nova "Research the latest trends in AI governance" +# +# Messages are written as JSON files to the agent's inbox directory. +# The agent picks them up on its next heartbeat or wake cycle. + +set -euo pipefail + +DEPUTIES=(mira conrad soren amara jules dash mercer kira nova paige quinn archer) + +usage() { + echo "Usage: $(basename "$0") \"message\"" + echo "" + echo "Send a message to a deputy agent's inbox." + echo "" + echo "Deputies: ${DEPUTIES[*]}" + exit 1 +} + +if [[ $# -lt 2 ]]; then + usage +fi + +AGENT_ID="$1" +MESSAGE="$2" +SENDER="${3:-main}" +PRIORITY="${4:-normal}" + +# Validate agent name +valid=0 +for d in "${DEPUTIES[@]}"; do + if [[ "$d" == "$AGENT_ID" ]]; then + valid=1 + break + fi +done + +if [[ $valid -eq 0 ]]; then + echo "ERROR: Unknown agent '${AGENT_ID}'." >&2 + echo "Known deputies: ${DEPUTIES[*]}" >&2 + exit 1 +fi + +# Create inbox directory if needed +INBOX_DIR="$HOME/.openclaw/agents/${AGENT_ID}/inbox" +mkdir -p "$INBOX_DIR" + +# Generate message file +TIMESTAMP=$(date +%s) +MSG_ID="${TIMESTAMP}-$(head -c 4 /dev/urandom | od -An -tx1 | tr -d ' \n')" +MSG_FILE="${INBOX_DIR}/${MSG_ID}.json" + +cat > "$MSG_FILE" </dev/null || echo "\"${MESSAGE}\"") +} +EOF + +echo "Message sent to ${AGENT_ID}: ${MSG_FILE}" +echo " From: ${SENDER}" +echo " Priority: ${PRIORITY}" +echo " ID: ${MSG_ID}" diff --git a/bates-enhance/integrations/agents/scripts/agent-supervisor.sh b/bates-enhance/integrations/agents/scripts/agent-supervisor.sh new file mode 100644 index 0000000..30dcbb5 --- /dev/null +++ b/bates-enhance/integrations/agents/scripts/agent-supervisor.sh @@ -0,0 +1,119 @@ +#!/usr/bin/env bash +# agent-supervisor.sh -- Monitor agent health and restart failed agents +# +# Usage: +# agent-supervisor.sh Run a single health check pass +# agent-supervisor.sh --watch Continuous monitoring (run in tmux/screen) +# +# Checks: +# - Are enabled agents running? If not, restart them. +# - Are agents consuming excessive memory? Log a warning. +# - Has an agent been restarting in a loop? Disable it and alert. +# +# Designed to be called from cron or run as a long-lived watcher. + +set -euo pipefail + +DEPUTIES=(mira conrad soren amara jules dash mercer kira nova paige quinn archer) +UNIT_PREFIX="openclaw-agent@" +LOG_FILE="$HOME/.openclaw/logs/agent-supervisor.log" +MAX_RESTARTS=5 # Max restarts within the window before disabling +RESTART_WINDOW=3600 # 1 hour window for restart counting +MEM_WARN_MB=512 # Warn if an agent exceeds this memory usage +WATCH_INTERVAL=60 # Seconds between checks in --watch mode + +mkdir -p "$(dirname "$LOG_FILE")" + +log() { + echo "$(date '+%Y-%m-%d %H:%M:%S') [SUPERVISOR] $1" >> "$LOG_FILE" +} + +log_warn() { + echo "$(date '+%Y-%m-%d %H:%M:%S') [SUPERVISOR] WARNING: $1" >> "$LOG_FILE" + echo "WARNING: $1" >&2 +} + +# Check a single agent +check_agent() { + local name="$1" + local unit="${UNIT_PREFIX}${name}.service" + + # Only supervise agents that are enabled (user intentionally started them) + local enabled + enabled=$(systemctl --user is-enabled "$unit" 2>/dev/null || echo "disabled") + if [[ "$enabled" != "enabled" ]]; then + return 0 + fi + + local active + active=$(systemctl --user is-active "$unit" 2>/dev/null || echo "inactive") + + if [[ "$active" == "failed" ]]; then + # Check restart count to avoid restart loops + local restart_count + restart_count=$(systemctl --user show "$unit" --property=NRestarts 2>/dev/null | cut -d= -f2 || echo "0") + + if [[ "$restart_count" -ge "$MAX_RESTARTS" ]]; then + log_warn "${name} has restarted ${restart_count} times. Disabling to prevent loop." + systemctl --user disable "$unit" 2>/dev/null || true + systemctl --user stop "$unit" 2>/dev/null || true + # Write alert to main inbox + local alert_dir="$HOME/.openclaw/agents/main/inbox" + mkdir -p "$alert_dir" + local ts + ts=$(date +%s) + cat > "${alert_dir}/${ts}-supervisor-alert.json" </dev/null || { + log_warn "Failed to restart ${name}" + } + return 0 + fi + + if [[ "$active" != "active" ]]; then + log "Agent ${name} is ${active} but enabled. Starting..." + systemctl --user start "$unit" 2>/dev/null || { + log_warn "Failed to start ${name}" + } + return 0 + fi + + # Check memory usage + local mem_bytes + mem_bytes=$(systemctl --user show "$unit" --property=MemoryCurrent 2>/dev/null | cut -d= -f2 || echo "0") + if [[ "$mem_bytes" =~ ^[0-9]+$ && "$mem_bytes" -gt 0 ]]; then + local mem_mb=$(( mem_bytes / 1048576 )) + if [[ "$mem_mb" -gt "$MEM_WARN_MB" ]]; then + log_warn "${name} using ${mem_mb}MB (threshold: ${MEM_WARN_MB}MB)" + fi + fi +} + +# Run one pass of all agents +run_check() { + for name in "${DEPUTIES[@]}"; do + check_agent "$name" + done +} + +# -- Main -- +if [[ "${1:-}" == "--watch" ]]; then + log "Supervisor started in watch mode (interval: ${WATCH_INTERVAL}s)" + while true; do + run_check + sleep "$WATCH_INTERVAL" + done +else + run_check +fi diff --git a/bates-enhance/integrations/agents/scripts/collect-standups.sh b/bates-enhance/integrations/agents/scripts/collect-standups.sh new file mode 100644 index 0000000..ee0d8d5 --- /dev/null +++ b/bates-enhance/integrations/agents/scripts/collect-standups.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash +# collect-standups.sh -- Collect standup updates from all active deputies +# +# Usage: +# collect-standups.sh Print standups to stdout +# collect-standups.sh --output FILE Write standups to a file +# +# Reads each deputy's recent observations (last 24 hours) and produces +# a per-agent summary. Used by compile-briefing.sh and the daily-standup +# cron job. + +set -euo pipefail + +DEPUTIES=(mira conrad soren amara jules dash mercer kira nova paige quinn archer) +ROLES=( + "Technology & Infrastructure" + "Operations A" + "Operations B" + "Operations C" + "Personal Affairs" + "DevOps & Rollout" + "Legal & Compliance" + "Content & Social Media" + "Research & Discovery" + "Finance" + "HR & People" + "Documentation" +) + +OUTPUT_FILE="" +HOURS="${HOURS:-24}" + +# Parse arguments +while [[ $# -gt 0 ]]; do + case "$1" in + --output) + OUTPUT_FILE="$2" + shift 2 + ;; + --hours) + HOURS="$2" + shift 2 + ;; + *) + echo "Unknown argument: $1" >&2 + exit 1 + ;; + esac +done + +cutoff=$(date -d "${HOURS} hours ago" +%s 2>/dev/null || date -v-${HOURS}H +%s 2>/dev/null || echo 0) +now_fmt=$(date '+%Y-%m-%d %H:%M') + +# Collect output +output="" +output+="# Deputy Standup Collection\n" +output+="Generated: ${now_fmt}\n" +output+="Window: last ${HOURS} hours\n" +output+="\n" + +active_count=0 +idle_count=0 + +for i in "${!DEPUTIES[@]}"; do + name="${DEPUTIES[$i]}" + role="${ROLES[$i]}" + obs_dir="$HOME/.openclaw/agents/${name}/workspace/observations" + + output+="## ${name} (${role})\n" + + if [[ ! -d "$obs_dir" ]]; then + output+=" No observations directory.\n\n" + (( idle_count++ )) || true + continue + fi + + # Find recent observation files + recent_found=0 + for f in "$obs_dir"/*.md "$obs_dir"/*.txt "$obs_dir"/*.json; do + [[ -f "$f" ]] || continue + mtime=$(stat -c %Y "$f" 2>/dev/null || echo 0) + if [[ "$mtime" -ge "$cutoff" ]]; then + fname=$(basename "$f") + output+=" - ${fname}:\n" + # Include first 10 lines of each observation + head_content=$(head -10 "$f" 2>/dev/null || true) + while IFS= read -r line; do + output+=" ${line}\n" + done <<< "$head_content" + output+="\n" + (( recent_found++ )) || true + fi + done + + if [[ "$recent_found" -eq 0 ]]; then + output+=" No recent observations.\n\n" + (( idle_count++ )) || true + else + (( active_count++ )) || true + fi +done + +output+="---\n" +output+="Summary: ${active_count} active, ${idle_count} idle out of ${#DEPUTIES[@]} deputies.\n" + +# Output +if [[ -n "$OUTPUT_FILE" ]]; then + mkdir -p "$(dirname "$OUTPUT_FILE")" + printf "%b" "$output" > "$OUTPUT_FILE" + echo "Standup collection written to: ${OUTPUT_FILE}" +else + printf "%b" "$output" +fi diff --git a/bates-enhance/integrations/agents/scripts/compile-briefing.sh b/bates-enhance/integrations/agents/scripts/compile-briefing.sh new file mode 100644 index 0000000..c7ba91b --- /dev/null +++ b/bates-enhance/integrations/agents/scripts/compile-briefing.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +# compile-briefing.sh -- Compile a unified briefing from deputy standups +# +# Usage: +# compile-briefing.sh Print briefing to stdout +# compile-briefing.sh --output FILE Write briefing to a file +# +# Collects standups from all deputies, then produces a concise summary +# organized by status, highlights, blockers, and next steps. +# Intended for delivery to the main session. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BRIEFING_DIR="$HOME/.openclaw/workspace/briefings" +OUTPUT_FILE="" + +# Parse arguments +while [[ $# -gt 0 ]]; do + case "$1" in + --output) + OUTPUT_FILE="$2" + shift 2 + ;; + *) + echo "Unknown argument: $1" >&2 + exit 1 + ;; + esac +done + +mkdir -p "$BRIEFING_DIR" + +# Step 1: Collect raw standups into a temp file +RAW_STANDUPS=$(mktemp) +trap 'rm -f "$RAW_STANDUPS"' EXIT + +"$SCRIPT_DIR/collect-standups.sh" --output "$RAW_STANDUPS" + +# Step 2: Build the briefing +now_fmt=$(date '+%Y-%m-%d %H:%M') +date_label=$(date '+%A, %B %d, %Y') + +briefing="" +briefing+="# Daily Briefing -- ${date_label}\n" +briefing+="Compiled: ${now_fmt}\n\n" + +# Extract summary line from standups +summary_line=$(tail -1 "$RAW_STANDUPS" 2>/dev/null || echo "No summary available.") +briefing+="## Overview\n" +briefing+="${summary_line}\n\n" + +# Include the full standup data +briefing+="## Deputy Reports\n\n" +briefing+="$(cat "$RAW_STANDUPS")\n\n" + +# Step 3: Add action items section (placeholder for AI processing) +briefing+="## Action Items\n" +briefing+="Review the deputy reports above and extract:\n" +briefing+="- Blockers requiring main-session intervention\n" +briefing+="- Cross-deputy coordination needs\n" +briefing+="- Decisions pending approval\n" +briefing+="- Items that can be acknowledged and closed\n\n" + +briefing+="---\n" +briefing+="End of briefing.\n" + +# Output +if [[ -n "$OUTPUT_FILE" ]]; then + mkdir -p "$(dirname "$OUTPUT_FILE")" + printf "%b" "$briefing" > "$OUTPUT_FILE" + echo "Briefing written to: ${OUTPUT_FILE}" +else + printf "%b" "$briefing" +fi + +# Also archive the briefing +archive_file="${BRIEFING_DIR}/briefing-$(date '+%Y%m%d-%H%M').md" +printf "%b" "$briefing" > "$archive_file" diff --git a/bates-enhance/integrations/agents/scripts/generate-agent-configs.sh b/bates-enhance/integrations/agents/scripts/generate-agent-configs.sh new file mode 100644 index 0000000..9a7bc7e --- /dev/null +++ b/bates-enhance/integrations/agents/scripts/generate-agent-configs.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash +# generate-agent-configs.sh -- Generate per-agent openclaw.json and SOUL.md +# +# Usage: +# generate-agent-configs.sh [--templates-dir DIR] +# +# Reads the deputy roster and generates configuration files for each agent +# from the provided templates. Called by setup.sh during initial installation. +# +# Templates used: +# agent-openclaw.json.template -> ~/.openclaw/agents//agent/openclaw.json +# agent-soul.md.template -> ~/.openclaw/agents//agent/SOUL.md + +set -euo pipefail + +# Default templates directory (sibling to scripts/) +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +TEMPLATES_DIR="${TEMPLATES_DIR:-$(dirname "$SCRIPT_DIR")/templates}" + +# Parse arguments +while [[ $# -gt 0 ]]; do + case "$1" in + --templates-dir) + TEMPLATES_DIR="$2" + shift 2 + ;; + *) + echo "Unknown argument: $1" >&2 + exit 1 + ;; + esac +done + +# Validate templates +CONFIG_TEMPLATE="$TEMPLATES_DIR/agent-openclaw.json.template" +SOUL_TEMPLATE="$TEMPLATES_DIR/agent-soul.md.template" + +if [[ ! -f "$CONFIG_TEMPLATE" ]]; then + echo "ERROR: Config template not found: $CONFIG_TEMPLATE" >&2 + exit 1 +fi + +if [[ ! -f "$SOUL_TEMPLATE" ]]; then + echo "ERROR: Soul template not found: $SOUL_TEMPLATE" >&2 + exit 1 +fi + +# Deputy roster: id|name|role|layer +ROSTER=( + "mira|Mira|Technology & Infrastructure|2" + "conrad|Conrad|Operations A|2" + "soren|Soren|Operations B|2" + "amara|Amara|Operations C|2" + "jules|Jules|Personal Affairs|2" + "dash|Dash|DevOps & Rollout|2" + "mercer|Mercer|Legal & Compliance|2" + "kira|Kira|Content & Social Media|2" + "nova|Nova|Research & Discovery|2" + "paige|Paige|Finance|2" + "quinn|Quinn|HR & People|2" + "archer|Archer|Documentation|2" +) + +# Configurable defaults +AGENT_MODEL="${AGENT_MODEL:-{{DEFAULT_MODEL}}}" +ASSISTANT_NAME="${ASSISTANT_NAME:-{{ASSISTANT_NAME}}}" + +echo "Generating agent configurations..." +echo " Templates: $TEMPLATES_DIR" +echo " Model: $AGENT_MODEL" +echo "" + +for entry in "${ROSTER[@]}"; do + IFS='|' read -r agent_id agent_name agent_role agent_layer <<< "$entry" + + agent_dir="$HOME/.openclaw/agents/${agent_id}/agent" + workspace_dir="$HOME/.openclaw/agents/${agent_id}/workspace/observations" + inbox_dir="$HOME/.openclaw/agents/${agent_id}/inbox" + + mkdir -p "$agent_dir" "$workspace_dir" "$inbox_dir" + + # Export template variables + export AGENT_ID="$agent_id" + export AGENT_NAME="$agent_name" + export AGENT_ROLE="$agent_role" + export AGENT_LAYER="$agent_layer" + export AGENT_MODEL + export ASSISTANT_NAME + export HOME + + # Generate openclaw.json + config_output="$agent_dir/openclaw.json" + cp "$CONFIG_TEMPLATE" "$config_output" + + # Replace placeholders using sed (compatible with template_render pattern) + sed -i "s|{{AGENT_ID}}|${agent_id}|g" "$config_output" + sed -i "s|{{AGENT_NAME}}|${agent_name}|g" "$config_output" + sed -i "s|{{AGENT_ROLE}}|${agent_role}|g" "$config_output" + sed -i "s|{{AGENT_LAYER}}|${agent_layer}|g" "$config_output" + sed -i "s|{{AGENT_MODEL}}|${AGENT_MODEL}|g" "$config_output" + sed -i "s|{{HOME}}|${HOME}|g" "$config_output" + + # Generate SOUL.md + soul_output="$agent_dir/SOUL.md" + cp "$SOUL_TEMPLATE" "$soul_output" + + sed -i "s|{{AGENT_NAME}}|${agent_name}|g" "$soul_output" + sed -i "s|{{AGENT_ROLE}}|${agent_role}|g" "$soul_output" + sed -i "s|{{AGENT_LAYER}}|${agent_layer}|g" "$soul_output" + sed -i "s|{{ASSISTANT_NAME}}|${ASSISTANT_NAME}|g" "$soul_output" + + echo " [OK] ${agent_name} (${agent_id}) -- ${agent_role}" +done + +echo "" +echo "All ${#ROSTER[@]} agent configurations generated." diff --git a/bates-enhance/integrations/agents/scripts/route-messages.sh b/bates-enhance/integrations/agents/scripts/route-messages.sh new file mode 100644 index 0000000..6b1919d --- /dev/null +++ b/bates-enhance/integrations/agents/scripts/route-messages.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +# route-messages.sh -- Route inter-agent messages +# +# Usage: +# route-messages.sh Process the message queue once +# route-messages.sh --watch Continuous routing (poll every 30s) +# +# Reads messages from the central message queue directory and delivers +# them to the target agent's inbox. Processed messages are moved to +# an archive directory. + +set -euo pipefail + +QUEUE_DIR="$HOME/.openclaw/message-queue" +ARCHIVE_DIR="$HOME/.openclaw/message-queue/archive" +LOG_FILE="$HOME/.openclaw/logs/message-router.log" +WATCH_INTERVAL=30 + +mkdir -p "$QUEUE_DIR" "$ARCHIVE_DIR" "$(dirname "$LOG_FILE")" + +log() { + echo "$(date '+%Y-%m-%d %H:%M:%S') [ROUTER] $1" >> "$LOG_FILE" +} + +# Process a single message file +process_message() { + local msg_file="$1" + local filename + filename=$(basename "$msg_file") + + # Parse the target agent from the message JSON + local target + target=$(python3 -c " +import json, sys +try: + msg = json.load(open('${msg_file}')) + print(msg.get('to', '')) +except Exception: + print('') +" 2>/dev/null) + + if [[ -z "$target" ]]; then + log "WARNING: No 'to' field in ${filename}. Moving to archive." + mv "$msg_file" "$ARCHIVE_DIR/${filename}.undeliverable" + return 0 + fi + + # Deliver to target agent's inbox + local inbox_dir="$HOME/.openclaw/agents/${target}/inbox" + if [[ ! -d "$HOME/.openclaw/agents/${target}" ]]; then + log "WARNING: Unknown agent '${target}' in ${filename}. Moving to archive." + mv "$msg_file" "$ARCHIVE_DIR/${filename}.unknown-target" + return 0 + fi + + mkdir -p "$inbox_dir" + cp "$msg_file" "$inbox_dir/${filename}" + mv "$msg_file" "$ARCHIVE_DIR/${filename}" + log "Delivered ${filename} to ${target}" +} + +# Process all pending messages +process_queue() { + local count=0 + for msg_file in "$QUEUE_DIR"/*.json; do + [[ -f "$msg_file" ]] || continue + process_message "$msg_file" + (( count++ )) || true + done + + if [[ "$count" -gt 0 ]]; then + log "Processed ${count} message(s)." + fi +} + +# -- Main -- +if [[ "${1:-}" == "--watch" ]]; then + log "Message router started in watch mode (interval: ${WATCH_INTERVAL}s)" + while true; do + process_queue + sleep "$WATCH_INTERVAL" + done +else + process_queue +fi diff --git a/bates-enhance/integrations/agents/setup.sh b/bates-enhance/integrations/agents/setup.sh new file mode 100644 index 0000000..3693977 --- /dev/null +++ b/bates-enhance/integrations/agents/setup.sh @@ -0,0 +1,178 @@ +# setup.sh -- Deputy Agent System integration for Bates +# Sourced by bates-enhance.sh -- do NOT run directly. +# +# Installs the 12-deputy agent system with on-demand startup, +# idle watching, and inter-agent message routing. +# +# Prerequisites: +# - OpenClaw gateway running +# - systemd --user available (loginctl enable-linger) + +AGENTS_DIR="$ENHANCE_DIR/integrations/agents" + +# ------------------------------------------------------------------- +# Step 1 -- Generate agent configurations +# ------------------------------------------------------------------- +step "Generate deputy agent configurations" + +info "Setting up 12 deputy agents with on-demand activation." +echo "" + +# Deputy roster: id|name|role|layer +DEPUTY_ROSTER=( + "mira|Mira|Technology & Infrastructure|2" + "conrad|Conrad|Operations A|2" + "soren|Soren|Operations B|2" + "amara|Amara|Operations C|2" + "jules|Jules|Personal Affairs|2" + "dash|Dash|DevOps & Rollout|2" + "mercer|Mercer|Legal & Compliance|2" + "kira|Kira|Content & Social Media|2" + "nova|Nova|Research & Discovery|2" + "paige|Paige|Finance|2" + "quinn|Quinn|HR & People|2" + "archer|Archer|Documentation|2" +) + +CONFIG_TEMPLATE="$AGENTS_DIR/templates/agent-openclaw.json.template" +SOUL_TEMPLATE="$AGENTS_DIR/templates/agent-soul.md.template" + +if [[ ! -f "$CONFIG_TEMPLATE" ]]; then + fatal "Config template not found: $CONFIG_TEMPLATE" +fi +if [[ ! -f "$SOUL_TEMPLATE" ]]; then + fatal "Soul template not found: $SOUL_TEMPLATE" +fi + +# Use AGENT_MODEL from environment or fall back to placeholder +AGENT_MODEL="${AGENT_MODEL:-{{DEFAULT_MODEL}}}" +ASSISTANT_NAME="${ASSISTANT_NAME:-{{ASSISTANT_NAME}}}" + +for entry in "${DEPUTY_ROSTER[@]}"; do + IFS='|' read -r agent_id agent_name agent_role agent_layer <<< "$entry" + + agent_dir="$HOME/.openclaw/agents/${agent_id}/agent" + workspace_dir="$HOME/.openclaw/agents/${agent_id}/workspace/observations" + inbox_dir="$HOME/.openclaw/agents/${agent_id}/inbox" + sessions_dir="$HOME/.openclaw/agents/${agent_id}/sessions" + + mkdir -p "$agent_dir" "$workspace_dir" "$inbox_dir" "$sessions_dir" + + # Generate openclaw.json from template + config_output="$agent_dir/openclaw.json" + export AGENT_ID="$agent_id" AGENT_NAME="$agent_name" AGENT_ROLE="$agent_role" + export AGENT_LAYER="$agent_layer" AGENT_MODEL ASSISTANT_NAME HOME + template_render "$CONFIG_TEMPLATE" "$config_output" + + # Generate SOUL.md from template + soul_output="$agent_dir/SOUL.md" + template_render "$SOUL_TEMPLATE" "$soul_output" + + info " ${agent_name} (${agent_id}) -- ${agent_role}" +done + +# Create shared directories +mkdir -p "$HOME/.openclaw/message-queue/archive" +mkdir -p "$HOME/.openclaw/workspace/briefings" +mkdir -p "$HOME/.openclaw/logs" + +success "All ${#DEPUTY_ROSTER[@]} deputy configurations generated." + +# ------------------------------------------------------------------- +# Step 2 -- Install systemd template unit +# ------------------------------------------------------------------- +step "Install systemd template unit for deputy agents" + +SYSTEMD_USER_DIR="$HOME/.config/systemd/user" +mkdir -p "$SYSTEMD_USER_DIR" + +SERVICE_TEMPLATE="$AGENTS_DIR/templates/openclaw-agent@.service.template" +SERVICE_TARGET="$SYSTEMD_USER_DIR/openclaw-agent@.service" + +if [[ ! -f "$SERVICE_TEMPLATE" ]]; then + fatal "Service template not found: $SERVICE_TEMPLATE" +fi + +cp "$SERVICE_TEMPLATE" "$SERVICE_TARGET" +chmod 644 "$SERVICE_TARGET" +info "Installed template unit: $SERVICE_TARGET" + +systemctl --user daemon-reload 2>/dev/null || warn "Could not reload systemd daemon." + +success "Systemd template unit installed." + +# ------------------------------------------------------------------- +# Step 3 -- Install agent management scripts +# ------------------------------------------------------------------- +step "Install agent management scripts" + +SCRIPTS_SRC="$AGENTS_DIR/scripts" +SCRIPTS_DST="$HOME/.openclaw/scripts" +mkdir -p "$SCRIPTS_DST" + +SCRIPT_FILES=( + agent-ctl.sh + agent-idle-watcher.sh + agent-message.sh + agent-supervisor.sh + collect-standups.sh + compile-briefing.sh + route-messages.sh + generate-agent-configs.sh +) + +for script in "${SCRIPT_FILES[@]}"; do + if [[ -f "$SCRIPTS_SRC/$script" ]]; then + cp "$SCRIPTS_SRC/$script" "$SCRIPTS_DST/$script" + chmod +x "$SCRIPTS_DST/$script" + info " Installed: $script" + else + warn " Script not found: $SCRIPTS_SRC/$script" + fi +done + +success "All ${#SCRIPT_FILES[@]} scripts installed to $SCRIPTS_DST." + +# ------------------------------------------------------------------- +# Step 4 -- Set up idle watcher cron and agent limits +# ------------------------------------------------------------------- +step "Configure idle watcher and agent spawn limits" + +# Add crontab entry for idle watcher (if not already present) +CRON_LINE="*/5 * * * * $HOME/.openclaw/scripts/agent-idle-watcher.sh" + +if (crontab -l 2>/dev/null || true) | grep -qF "agent-idle-watcher.sh"; then + info "Idle watcher cron already installed." +else + (crontab -l 2>/dev/null || true; echo "$CRON_LINE") | crontab - + success "Idle watcher cron installed (runs every 5 minutes)." +fi + +# Set agent spawn limits via config merge +info "Setting agent spawn limits: maxSpawnDepth=2, maxConcurrent=8, maxChildrenPerAgent=5" + +FRAGMENT_DIR="$AGENTS_DIR" +RENDERED_FRAGMENT=$(mktemp) +cp "$FRAGMENT_DIR/config-fragment.json" "$RENDERED_FRAGMENT" +config_merge "$RENDERED_FRAGMENT" +rm -f "$RENDERED_FRAGMENT" + +success "Agent spawn limits configured." + +# ------------------------------------------------------------------- +# Summary +# ------------------------------------------------------------------- +echo "" +success "Deputy Agent System setup complete." +info "12 deputies configured as on-demand agents (none auto-started)." +info "Use agent-ctl.sh to start/stop/wake individual deputies." +info "Idle agents are automatically stopped after 10 minutes." +echo "" +info "Management scripts installed to: $SCRIPTS_DST" +info "Agent configs stored in: $HOME/.openclaw/agents//agent/" +echo "" +info "Key commands:" +info " agent-ctl.sh status Show all agent statuses" +info " agent-ctl.sh start Start a specific deputy" +info " agent-ctl.sh wake Wake an idle deputy" +info " agent-message.sh msg Send a message to a deputy" diff --git a/bates-enhance/integrations/agents/templates/agent-openclaw.json.template b/bates-enhance/integrations/agents/templates/agent-openclaw.json.template new file mode 100644 index 0000000..534a448 --- /dev/null +++ b/bates-enhance/integrations/agents/templates/agent-openclaw.json.template @@ -0,0 +1,13 @@ +{ + "agent": { + "name": "{{AGENT_NAME}}", + "role": "{{AGENT_ROLE}}", + "layer": {{AGENT_LAYER}} + }, + "models": { + "default": "{{AGENT_MODEL}}" + }, + "workspace": { + "root": "{{HOME}}/.openclaw/agents/{{AGENT_ID}}/workspace" + } +} diff --git a/bates-enhance/integrations/agents/templates/agent-soul.md.template b/bates-enhance/integrations/agents/templates/agent-soul.md.template new file mode 100644 index 0000000..9784555 --- /dev/null +++ b/bates-enhance/integrations/agents/templates/agent-soul.md.template @@ -0,0 +1,18 @@ +# {{AGENT_NAME}} -- {{AGENT_ROLE}} + +You are {{AGENT_NAME}}, a deputy in the {{ASSISTANT_NAME}} organization. +Your role is: {{AGENT_ROLE}}. + +## Reporting +- Report to: {{ASSISTANT_NAME}} (main session) +- Layer: {{AGENT_LAYER}} + +## Communication +- Use sessions_spawn on main to delegate sub-tasks +- Post updates to your observations file +- Respond to messages in your inbox + +## Rules +- Follow all workspace rules +- Stay within your role scope +- Escalate decisions outside your authority diff --git a/bates-enhance/integrations/agents/templates/openclaw-agent@.service.template b/bates-enhance/integrations/agents/templates/openclaw-agent@.service.template new file mode 100644 index 0000000..edde38f --- /dev/null +++ b/bates-enhance/integrations/agents/templates/openclaw-agent@.service.template @@ -0,0 +1,15 @@ +[Unit] +Description=OpenClaw Agent - %i +After=openclaw-gateway.service +Requires=openclaw-gateway.service + +[Service] +Type=simple +ExecStart=%h/.npm-global/bin/openclaw agent start --id %i +Restart=on-failure +RestartSec=10 +Environment="NODE_PATH=%h/.npm-global/lib/node_modules" +WorkingDirectory=%h/.openclaw/agents/%i + +[Install] +WantedBy=default.target diff --git a/bates-enhance/integrations/agents/workspace-additions/rules/delegation.md b/bates-enhance/integrations/agents/workspace-additions/rules/delegation.md new file mode 100644 index 0000000..11c8de8 --- /dev/null +++ b/bates-enhance/integrations/agents/workspace-additions/rules/delegation.md @@ -0,0 +1,86 @@ +# Delegation Rules + +Guidelines for delegating work to deputy agents and managing the deputy system. + +## When to Delegate + +Delegate to a deputy when: +- The task falls clearly within a deputy's defined role scope +- The task requires sustained focus and would interrupt the main session's flow +- Parallel execution across multiple deputies would speed up delivery +- The task involves domain-specific knowledge that a deputy specializes in + +Handle directly (do NOT delegate) when: +- The task is simple and can be completed in under 2 minutes +- The user explicitly asks the main session to handle it +- The task requires real-time conversational back-and-forth with the user +- Sensitive decisions that require main-session authority (e.g., config changes, payments) + +## Choosing the Right Deputy + +Match tasks to deputies by role: + +| Deputy | Role | Delegate when... | +|---------|-----------------------------|-----------------------------------------------------| +| mira | Technology & Infrastructure | Infrastructure issues, system architecture, tech research | +| conrad | Operations A | Operational tasks, process management, workflow A | +| soren | Operations B | Operational tasks, process management, workflow B | +| amara | Operations C | Operational tasks, process management, workflow C | +| jules | Personal Affairs | Personal scheduling, errands, lifestyle tasks | +| dash | DevOps & Rollout | Deployments, CI/CD, release management, monitoring | +| mercer | Legal & Compliance | Contract review, regulatory questions, compliance | +| kira | Content & Social Media | Content creation, social posts, marketing copy | +| nova | Research & Discovery | Research tasks, market analysis, competitive intel | +| paige | Finance | Financial analysis, budgets, invoicing, expense tracking | +| quinn | HR & People | HR processes, recruitment support, people questions | +| archer | Documentation | Documentation writing, knowledge base updates, SOPs | + +If a task spans multiple roles, assign it to the most relevant deputy and instruct +them to coordinate with others via the message queue. + +## Sub-Agent Spawn Limits + +- **maxSpawnDepth**: 2 -- deputies can spawn one level of sub-agents on main +- **maxConcurrent**: 8 -- no more than 8 agent sessions running at once +- **maxChildrenPerAgent**: 5 -- a single deputy can spawn at most 5 sub-tasks + +These limits prevent resource exhaustion. If a task requires more parallelism, +break it into sequential batches. + +## Result Collection and Quality Checks + +After delegating: +1. **Monitor**: Check the deputy's observations file for progress updates +2. **Timeout**: If no update within 30 minutes, send a follow-up message +3. **Review**: When the deputy reports completion, review the output for: + - Completeness -- does it address the full scope of the request? + - Accuracy -- are facts and figures correct? + - Format -- is the output in the expected format? +4. **Consolidate**: Merge deputy results into a unified response for the user +5. **Attribute**: Note which deputy handled the work in the response + +## Escalation Paths + +Deputies should escalate to the main session when: +- A decision is outside their role scope or authority level +- They encounter an error they cannot resolve after two attempts +- The task requires access to tools or credentials they do not have +- Conflicting instructions from multiple sources need resolution +- The user explicitly asks to speak with the main session + +Escalation method: +1. Post an observation tagged `[ESCALATION]` with context and the specific question +2. Send a message to the main session inbox via the message queue +3. Pause work on the escalated item until the main session responds + +## Anti-Patterns (Avoid These) + +- **Delegation ping-pong**: Do not delegate a task to a deputy who then delegates + it back. If the first deputy cannot handle it, escalate to main. +- **Over-delegation**: Do not delegate trivial tasks (e.g., "what time is it?"). +- **Blind delegation**: Always include clear instructions, context, and expected + output format when delegating. +- **Ignoring results**: Always review and acknowledge deputy outputs. Unread + observations accumulate and create confusion. +- **Parallel overload**: Do not spawn all 12 deputies simultaneously. Stagger + work to stay within resource limits. diff --git a/bates-enhance/integrations/deepseek/config-fragment.json b/bates-enhance/integrations/deepseek/config-fragment.json new file mode 100644 index 0000000..86cfcb8 --- /dev/null +++ b/bates-enhance/integrations/deepseek/config-fragment.json @@ -0,0 +1,9 @@ +{ + "models": { + "providers": { + "deepseek": { + "enabled": true + } + } + } +} diff --git a/bates-enhance/integrations/deepseek/cron-jobs-deepseek.json b/bates-enhance/integrations/deepseek/cron-jobs-deepseek.json new file mode 100644 index 0000000..18d00ae --- /dev/null +++ b/bates-enhance/integrations/deepseek/cron-jobs-deepseek.json @@ -0,0 +1,9 @@ +[ + { + "name": "overnight-code-review", + "schedule": "0 3 * * *", + "tz": "{{USER_TZ}}", + "message": "Run overnight code review on recent commits. Use DeepSeek for initial analysis, then verify findings with primary model. Report significant issues only.", + "sessionTarget": "isolated" + } +] diff --git a/bates-enhance/integrations/deepseek/setup.sh b/bates-enhance/integrations/deepseek/setup.sh new file mode 100644 index 0000000..4f6e7c2 --- /dev/null +++ b/bates-enhance/integrations/deepseek/setup.sh @@ -0,0 +1,85 @@ +# setup.sh -- DeepSeek integration for Bates +# Sourced by bates-enhance.sh; has access to common.sh and config-merge.sh functions. +# +# Configures DeepSeek as an additional model provider for cost-effective +# tasks like overnight code review. + +step "DeepSeek Model Provider Configuration" + +info "DeepSeek provides cost-effective AI models for tasks like code review." +info "Get your API key from: https://platform.deepseek.com/api_keys" +echo "" + +# --- API Key --- +local api_key="" +while [[ -z "$api_key" ]]; do + read -rp "DeepSeek API key: " api_key + if [[ -z "$api_key" ]]; then + warn "API key cannot be empty." + continue + fi +done +info "API key accepted." + +# --- Store in systemd drop-in --- +step "Storing DeepSeek API key" + +local dropin_dir="$HOME/.config/systemd/user/openclaw-gateway.service.d" +mkdir -p "$dropin_dir" + +local dropin_file="$dropin_dir/deepseek.conf" +cat > "$dropin_file" </dev/null; then + info "Attempting to register DeepSeek provider with openclaw..." + openclaw models auth --provider deepseek --key "$api_key" 2>/dev/null || { + warn "Could not register via CLI. Key is stored in environment; provider will be configured via config." + } +fi + +# --- Timezone for cron job --- +local user_tz="" +local detected_tz="" +detected_tz=$(timedatectl show -p Timezone --value 2>/dev/null || echo "") + +if [[ -n "$detected_tz" ]]; then + info "Detected timezone: $detected_tz" + if confirm "Use $detected_tz for cron schedules?"; then + user_tz="$detected_tz" + fi +fi + +if [[ -z "$user_tz" ]]; then + read -rp "Enter your timezone (e.g., Europe/Lisbon, America/New_York): " user_tz + if [[ -z "$user_tz" ]]; then + user_tz="UTC" + warn "No timezone provided. Defaulting to UTC." + fi +fi + +export USER_TZ="$user_tz" + +# --- Merge config --- +step "Applying DeepSeek configuration" + +local fragment_dir +fragment_dir="$(dirname "${BASH_SOURCE[0]}")" +config_merge "$fragment_dir/config-fragment.json" +success "DeepSeek model provider configured in openclaw.json" + +# --- Cron job info --- +echo "" +info "DeepSeek includes an overnight code review cron job (3:00 AM $user_tz)." +info "The job uses DeepSeek for initial analysis, then verifies with the primary model." +info "Cron jobs will be registered automatically after setup completes." diff --git a/bates-enhance/integrations/elevenlabs/config-fragment.json b/bates-enhance/integrations/elevenlabs/config-fragment.json new file mode 100644 index 0000000..1b2dd9e --- /dev/null +++ b/bates-enhance/integrations/elevenlabs/config-fragment.json @@ -0,0 +1,11 @@ +{ + "channels": { + "voice": { + "tts": { + "provider": "elevenlabs", + "voiceId": "{{ELEVENLABS_VOICE_ID}}", + "model": "eleven_flash_v2_5" + } + } + } +} diff --git a/bates-enhance/integrations/elevenlabs/setup.sh b/bates-enhance/integrations/elevenlabs/setup.sh new file mode 100644 index 0000000..666701f --- /dev/null +++ b/bates-enhance/integrations/elevenlabs/setup.sh @@ -0,0 +1,98 @@ +# setup.sh -- ElevenLabs Voice Clone integration for Bates +# Sourced by bates-enhance.sh; has access to common.sh and config-merge.sh functions. +# +# Configures ElevenLabs TTS with a cloned or selected voice for Bates voice output. + +step "ElevenLabs Voice Clone Configuration" + +info "You'll need an ElevenLabs API key and a voice ID." +info "Get your API key from: https://elevenlabs.io/app/settings/api-keys" +info "Find voice IDs in the ElevenLabs Voice Library or from your cloned voices." +echo "" + +# --- API Key --- +local api_key="" +while [[ -z "$api_key" ]]; do + read -rp "ElevenLabs API key: " api_key + if [[ -z "$api_key" ]]; then + warn "API key cannot be empty." + continue + fi + if ! validate_elevenlabs_key "$api_key"; then + warn "Key format looks unexpected (usually starts with sk_ and is 32+ chars)." + if ! confirm "Use this key anyway?"; then + api_key="" + continue + fi + fi +done + +# --- Voice ID --- +local voice_id="" +while [[ -z "$voice_id" ]]; do + read -rp "ElevenLabs voice ID (from voice clone or library): " voice_id + if [[ -z "$voice_id" ]]; then + warn "Voice ID cannot be empty." + continue + fi +done + +# --- Voice model selection --- +echo "" +info "Available TTS models:" +echo " 1) eleven_flash_v2_5 (fast, low latency -- recommended for calls)" +echo " 2) eleven_multilingual_v2 (higher quality, multilingual)" +echo " 3) eleven_turbo_v2_5 (balanced speed and quality)" +local model_choice="" +read -rp "Select model [1]: " model_choice +local tts_model="eleven_flash_v2_5" +case "$model_choice" in + 2) tts_model="eleven_multilingual_v2" ;; + 3) tts_model="eleven_turbo_v2_5" ;; + *) tts_model="eleven_flash_v2_5" ;; +esac +info "Using TTS model: $tts_model" + +# --- Store API key in systemd drop-in --- +step "Storing ElevenLabs API key" + +local dropin_dir="$HOME/.config/systemd/user/openclaw-gateway.service.d" +mkdir -p "$dropin_dir" + +local dropin_file="$dropin_dir/elevenlabs.conf" +cat > "$dropin_file" < "$dropin_file" </dev/null; then + info "mcporter found. Registering GitHub server..." + mcporter add github --token "$github_token" 2>/dev/null || true + success "GitHub MCP server registered via mcporter" +else + info "mcporter not found. Configuring MCP server directly in openclaw.json." +fi + +# --- Merge config --- +local fragment_dir +fragment_dir="$(dirname "${BASH_SOURCE[0]}")" + +# Render template with actual token for config +config_merge_inline "{ + \"mcp\": { + \"servers\": { + \"github\": { + \"command\": \"mcporter\", + \"args\": [\"run\", \"github\"], + \"env\": { + \"GITHUB_TOKEN\": \"$github_token\" + } + } + } + } +}" +success "GitHub MCP server configured in openclaw.json" + +echo "" +info "GitHub integration is ready. Bates can now access repositories, issues, and PRs." +info "Try asking Bates to list your repositories or check recent issues." diff --git a/bates-enhance/integrations/github/workspace-additions/refs/github.md b/bates-enhance/integrations/github/workspace-additions/refs/github.md new file mode 100644 index 0000000..9e2fec9 --- /dev/null +++ b/bates-enhance/integrations/github/workspace-additions/refs/github.md @@ -0,0 +1,50 @@ +# GitHub Integration Reference + +## Overview +Bates has access to GitHub repositories via an MCP (Model Context Protocol) server. +This enables direct interaction with repositories, issues, pull requests, and code. + +## Authentication +- Uses a Personal Access Token (PAT) stored in the gateway environment +- Token is available as `GITHUB_TOKEN` + +## Available Operations + +### Repositories +- List repositories for authenticated user or organization +- Get repository details (description, language, stars, etc.) +- Browse repository contents and file trees +- Read file contents at any branch or commit + +### Issues +- List open/closed issues for a repository +- Create new issues with labels and assignees +- Comment on existing issues +- Search issues across repositories + +### Pull Requests +- List open/closed PRs +- Get PR details, diffs, and review status +- Create pull requests +- Add review comments + +### Code Search +- Search code across repositories +- Find files by name or content +- Search commits by message + +### Branches & Commits +- List branches and tags +- Get commit history and details +- Compare branches + +## Usage Examples +- "List my open PRs across all repos" +- "Show recent issues in the main project" +- "Find all files that reference the config schema" +- "Create an issue for the bug we discussed" + +## Limitations +- Rate limits apply (5000 requests/hour for authenticated users) +- File content reads are limited to files under 1MB via the API +- Large diffs may be truncated diff --git a/bates-enhance/integrations/google/config-fragment.json b/bates-enhance/integrations/google/config-fragment.json new file mode 100644 index 0000000..227b8e5 --- /dev/null +++ b/bates-enhance/integrations/google/config-fragment.json @@ -0,0 +1,15 @@ +{ + "mcp": { + "servers": { + "google-calendar": { + "command": "mcporter", + "args": ["run", "google-calendar"], + "env": { + "GOOGLE_CLIENT_ID": "{{GOOGLE_CLIENT_ID}}", + "GOOGLE_CLIENT_SECRET": "{{GOOGLE_CLIENT_SECRET}}", + "GOOGLE_REFRESH_TOKEN": "{{GOOGLE_REFRESH_TOKEN}}" + } + } + } + } +} diff --git a/bates-enhance/integrations/google/scripts/google-auth.sh b/bates-enhance/integrations/google/scripts/google-auth.sh new file mode 100644 index 0000000..bb66234 --- /dev/null +++ b/bates-enhance/integrations/google/scripts/google-auth.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env bash +# google-auth.sh -- Google OAuth 2.0 authorization flow +# +# Opens a browser for the user to grant consent, captures the authorization +# code, and exchanges it for access + refresh tokens. +# +# Can be sourced (exports GOOGLE_REFRESH_TOKEN) or run directly. +# +# Required environment variables: +# GOOGLE_CLIENT_ID +# GOOGLE_CLIENT_SECRET + +set -euo pipefail + +# ── Validate inputs ─────────────────────────────────────────────── +if [[ -z "${GOOGLE_CLIENT_ID:-}" ]]; then + echo "ERROR: GOOGLE_CLIENT_ID is not set." >&2 + return 1 2>/dev/null || exit 1 +fi +if [[ -z "${GOOGLE_CLIENT_SECRET:-}" ]]; then + echo "ERROR: GOOGLE_CLIENT_SECRET is not set." >&2 + return 1 2>/dev/null || exit 1 +fi + +# ── Build the authorization URL ─────────────────────────────────── +REDIRECT_URI="urn:ietf:wg:oauth:2.0:oob" +SCOPES="https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/gmail.modify" +SCOPES_ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$SCOPES'))") + +AUTH_URL="https://accounts.google.com/o/oauth2/v2/auth?client_id=${GOOGLE_CLIENT_ID}&redirect_uri=${REDIRECT_URI}&response_type=code&scope=${SCOPES_ENCODED}&access_type=offline&prompt=consent" + +echo "" +echo "Opening browser for Google OAuth consent..." +echo "" +echo "If the browser does not open, visit this URL manually:" +echo " $AUTH_URL" +echo "" + +# Try to open the browser (works on Linux with xdg-open, macOS with open) +if command -v xdg-open &>/dev/null; then + xdg-open "$AUTH_URL" 2>/dev/null || true +elif command -v open &>/dev/null; then + open "$AUTH_URL" 2>/dev/null || true +fi + +# ── Capture the authorization code ──────────────────────────────── +read -rp "Paste the authorization code here: " AUTH_CODE + +if [[ -z "${AUTH_CODE:-}" ]]; then + echo "ERROR: No authorization code provided." >&2 + return 1 2>/dev/null || exit 1 +fi + +# ── Exchange code for tokens ────────────────────────────────────── +echo "Exchanging authorization code for tokens..." + +TOKEN_RESPONSE=$(curl -s -X POST "https://oauth2.googleapis.com/token" \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "code=${AUTH_CODE}" \ + -d "client_id=${GOOGLE_CLIENT_ID}" \ + -d "client_secret=${GOOGLE_CLIENT_SECRET}" \ + -d "redirect_uri=${REDIRECT_URI}" \ + -d "grant_type=authorization_code") + +# Parse tokens +ACCESS_TOKEN=$(echo "$TOKEN_RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('access_token',''))" 2>/dev/null || echo "") +GOOGLE_REFRESH_TOKEN=$(echo "$TOKEN_RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('refresh_token',''))" 2>/dev/null || echo "") +TOKEN_ERROR=$(echo "$TOKEN_RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('error_description',''))" 2>/dev/null || echo "") + +if [[ -n "$TOKEN_ERROR" ]]; then + echo "ERROR: Token exchange failed: $TOKEN_ERROR" >&2 + return 1 2>/dev/null || exit 1 +fi + +if [[ -z "$GOOGLE_REFRESH_TOKEN" ]]; then + echo "WARNING: No refresh token in response. You may need to revoke and re-authorize." >&2 + echo " Visit: https://myaccount.google.com/permissions" >&2 + return 1 2>/dev/null || exit 1 +fi + +if [[ -n "$ACCESS_TOKEN" ]]; then + echo "Access token obtained (valid for ~1 hour)." +fi + +echo "Refresh token obtained." + +# Export for the caller (if sourced) +export GOOGLE_REFRESH_TOKEN diff --git a/bates-enhance/integrations/google/scripts/google-refresh.sh b/bates-enhance/integrations/google/scripts/google-refresh.sh new file mode 100644 index 0000000..b7a125b --- /dev/null +++ b/bates-enhance/integrations/google/scripts/google-refresh.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash +# google-refresh.sh -- Refresh the Google OAuth token +# +# Reads the current refresh token, exchanges it for a new access token, +# and updates the stored refresh token if Google rotates it. +# +# Intended to be run as a daily cron job. +# Logs to stdout (redirect to a log file in crontab). + +set -euo pipefail + +CREDS_FILE="$HOME/.openclaw/google-credentials.json" +TOKEN_FILE="$HOME/.openclaw/google-refresh-token" +DROPIN_FILE="$HOME/.config/systemd/user/openclaw-gateway.service.d/google-oauth.conf" + +LOG_PREFIX="[google-refresh $(date -Iseconds)]" + +# ── Load credentials ────────────────────────────────────────────── +if [[ ! -f "$CREDS_FILE" ]]; then + echo "$LOG_PREFIX ERROR: Credentials file not found: $CREDS_FILE" + exit 1 +fi + +GOOGLE_CLIENT_ID=$(python3 -c "import json; print(json.load(open('$CREDS_FILE'))['client_id'])") +GOOGLE_CLIENT_SECRET=$(python3 -c "import json; print(json.load(open('$CREDS_FILE'))['client_secret'])") + +if [[ ! -f "$TOKEN_FILE" ]]; then + echo "$LOG_PREFIX ERROR: Refresh token file not found: $TOKEN_FILE" + exit 1 +fi + +CURRENT_REFRESH_TOKEN=$(cat "$TOKEN_FILE") + +if [[ -z "$CURRENT_REFRESH_TOKEN" ]]; then + echo "$LOG_PREFIX ERROR: Refresh token is empty." + exit 1 +fi + +# ── Exchange refresh token ──────────────────────────────────────── +echo "$LOG_PREFIX Refreshing Google OAuth token..." + +TOKEN_RESPONSE=$(curl -s -X POST "https://oauth2.googleapis.com/token" \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "client_id=${GOOGLE_CLIENT_ID}" \ + -d "client_secret=${GOOGLE_CLIENT_SECRET}" \ + -d "refresh_token=${CURRENT_REFRESH_TOKEN}" \ + -d "grant_type=refresh_token") + +ACCESS_TOKEN=$(echo "$TOKEN_RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('access_token',''))" 2>/dev/null || echo "") +NEW_REFRESH_TOKEN=$(echo "$TOKEN_RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('refresh_token',''))" 2>/dev/null || echo "") +TOKEN_ERROR=$(echo "$TOKEN_RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('error_description',''))" 2>/dev/null || echo "") + +if [[ -n "$TOKEN_ERROR" ]]; then + echo "$LOG_PREFIX ERROR: Token refresh failed: $TOKEN_ERROR" + exit 1 +fi + +if [[ -z "$ACCESS_TOKEN" ]]; then + echo "$LOG_PREFIX ERROR: No access token in response." + exit 1 +fi + +echo "$LOG_PREFIX Access token refreshed successfully." + +# ── Update stored refresh token if rotated ──────────────────────── +if [[ -n "$NEW_REFRESH_TOKEN" && "$NEW_REFRESH_TOKEN" != "$CURRENT_REFRESH_TOKEN" ]]; then + echo "$LOG_PREFIX Refresh token was rotated. Updating stored token." + echo "$NEW_REFRESH_TOKEN" > "$TOKEN_FILE" + chmod 600 "$TOKEN_FILE" + + # Update the systemd drop-in + if [[ -f "$DROPIN_FILE" ]]; then + cat > "$DROPIN_FILE" </dev/null || true + echo "$LOG_PREFIX Systemd drop-in updated." + fi + + # Update openclaw.json MCP env + python3 -c " +import json +config_path = '$HOME/.openclaw/openclaw.json' +try: + with open(config_path) as f: + config = json.load(f) + servers = config.get('mcp', {}).get('servers', {}) + if 'google-calendar' in servers: + servers['google-calendar']['env']['GOOGLE_REFRESH_TOKEN'] = '$NEW_REFRESH_TOKEN' + with open(config_path, 'w') as f: + json.dump(config, f, indent=2) + print('$LOG_PREFIX openclaw.json updated with new refresh token.') +except Exception as e: + print(f'$LOG_PREFIX WARNING: Could not update openclaw.json: {e}') +" 2>&1 + + echo "$LOG_PREFIX Token rotation complete." +else + echo "$LOG_PREFIX Refresh token unchanged (no rotation)." +fi + +echo "$LOG_PREFIX Done." diff --git a/bates-enhance/integrations/google/setup.sh b/bates-enhance/integrations/google/setup.sh new file mode 100644 index 0000000..98b3ab0 --- /dev/null +++ b/bates-enhance/integrations/google/setup.sh @@ -0,0 +1,178 @@ +# setup.sh -- Google Calendar / Gmail integration for Bates +# Sourced by bates-enhance.sh -- do NOT run directly. +# +# Configures Google OAuth credentials and registers an MCP server so Bates +# can access Google Calendar and Gmail via the mcporter bridge. +# +# Prerequisites: +# - A Google Cloud project with Calendar and Gmail APIs enabled +# - An OAuth 2.0 Client ID (Desktop or Web type) +# - mcporter installed (npm i -g mcporter) + +# ------------------------------------------------------------------- +# Step 1 -- Check mcporter +# ------------------------------------------------------------------- +step "Check mcporter installation" + +if command -v mcporter &>/dev/null; then + success "mcporter is installed." +else + warn "mcporter is not installed." + info "Install it with: npm install -g mcporter" + if ! confirm "Continue anyway (you can install mcporter later)?"; then + fatal "Aborted. Install mcporter first." + fi +fi + +# ------------------------------------------------------------------- +# Step 2 -- Collect Google Cloud project details +# ------------------------------------------------------------------- +step "Collect Google Cloud credentials" + +info "You need a Google Cloud project with the Calendar and Gmail APIs enabled." +info "Create OAuth credentials at: https://console.cloud.google.com/apis/credentials" +echo "" + +prompt_default "Google Cloud Project ID" "" GOOGLE_PROJECT_ID +if [[ -z "${GOOGLE_PROJECT_ID:-}" ]]; then + fatal "Google Cloud Project ID is required." +fi + +prompt_default "OAuth Client ID" "" GOOGLE_CLIENT_ID +if [[ -z "${GOOGLE_CLIENT_ID:-}" ]]; then + fatal "OAuth Client ID is required." +fi + +prompt_default "OAuth Client Secret" "" GOOGLE_CLIENT_SECRET +if [[ -z "${GOOGLE_CLIENT_SECRET:-}" ]]; then + fatal "OAuth Client Secret is required." +fi + +success "Credentials collected." + +# ------------------------------------------------------------------- +# Step 3 -- Save credentials file (chmod 600) +# ------------------------------------------------------------------- +step "Save Google credentials" + +CREDS_FILE="$HOME/.openclaw/google-credentials.json" + +cat > "$CREDS_FILE" < "$TOKEN_FILE" + chmod 600 "$TOKEN_FILE" + success "Refresh token saved to $TOKEN_FILE (mode 600)." +fi + +# ------------------------------------------------------------------- +# Step 5 -- Store secrets in systemd drop-in (chmod 600) +# ------------------------------------------------------------------- +step "Store Google secrets in systemd environment" + +DROPIN_DIR="$HOME/.config/systemd/user/openclaw-gateway.service.d" +mkdir -p "$DROPIN_DIR" + +SECRETS_DROPIN="$DROPIN_DIR/google-oauth.conf" +cat > "$SECRETS_DROPIN" </dev/null || warn "Could not reload systemd daemon." + +# ------------------------------------------------------------------- +# Step 6 -- Merge MCP server config +# ------------------------------------------------------------------- +step "Register Google MCP server in openclaw.json" + +FRAGMENT_DIR="$ENHANCE_DIR/integrations/google" +RENDERED_FRAGMENT=$(mktemp) + +export GOOGLE_CLIENT_ID GOOGLE_CLIENT_SECRET GOOGLE_REFRESH_TOKEN +template_render "$FRAGMENT_DIR/config-fragment.json" "$RENDERED_FRAGMENT" +config_merge "$RENDERED_FRAGMENT" +rm -f "$RENDERED_FRAGMENT" + +success "MCP server config merged." + +# ------------------------------------------------------------------- +# Step 7 -- Set up token refresh cron +# ------------------------------------------------------------------- +step "Set up token refresh schedule" + +REFRESH_SCRIPT="$ENHANCE_DIR/integrations/google/scripts/google-refresh.sh" + +if [[ -f "$REFRESH_SCRIPT" ]]; then + info "Installing daily cron job to refresh the Google OAuth token." + + CRON_LINE="0 4 * * * bash $REFRESH_SCRIPT >> $HOME/.openclaw/logs/google-refresh.log 2>&1" + + # Add to crontab if not already present + (crontab -l 2>/dev/null || true) | grep -qF "google-refresh.sh" || { + (crontab -l 2>/dev/null || true; echo "$CRON_LINE") | crontab - + success "Token refresh cron installed (runs daily at 04:00)." + } +else + warn "Refresh script not found. Token refresh cron not installed." +fi + +# ------------------------------------------------------------------- +# Summary +# ------------------------------------------------------------------- +echo "" +success "Google Calendar / Gmail integration setup complete." +info "Bates can now access Google Calendar and Gmail through the MCP server." +if [[ -z "${GOOGLE_REFRESH_TOKEN:-}" ]]; then + warn "No refresh token was set. Run the OAuth flow to enable access:" + info " bash $ENHANCE_DIR/integrations/google/scripts/google-auth.sh" +fi diff --git a/bates-enhance/integrations/google/workspace-additions/refs/google-api.md b/bates-enhance/integrations/google/workspace-additions/refs/google-api.md new file mode 100644 index 0000000..5e630a7 --- /dev/null +++ b/bates-enhance/integrations/google/workspace-additions/refs/google-api.md @@ -0,0 +1,117 @@ +# Google Calendar and Gmail Integration + +Reference documentation for Bates's Google Calendar and Gmail capabilities, +provided through the `google-calendar` MCP server via mcporter. + +## Overview + +The Google integration gives Bates read/write access to: + +- **Google Calendar** -- View, create, update, and delete calendar events. +- **Gmail** -- Read, search, compose, and send email messages. + +Access is granted through OAuth 2.0 with offline (refresh token) access. +Tokens are refreshed automatically by a daily cron job. + +## Google Calendar Operations + +### List Events + +Retrieve upcoming events from a calendar. + +| Parameter | Description | +|---------------|-----------------------------------------------| +| `calendarId` | Calendar ID (default: `primary`) | +| `timeMin` | Start of time range (RFC 3339) | +| `timeMax` | End of time range (RFC 3339) | +| `maxResults` | Maximum number of events to return | +| `q` | Free-text search term | + +### Create Event + +Create a new calendar event. + +| Parameter | Description | +|---------------|-----------------------------------------------| +| `calendarId` | Calendar ID (default: `primary`) | +| `summary` | Event title | +| `description` | Event description / notes | +| `start` | Start date/time (with timezone) | +| `end` | End date/time (with timezone) | +| `attendees` | List of attendee email addresses | +| `location` | Event location (physical or virtual) | +| `reminders` | Custom reminder overrides | + +### Update Event + +Modify an existing event by its event ID. + +### Delete Event + +Remove an event from the calendar. + +## Gmail Operations + +### Search Messages + +Search the mailbox using Gmail's query syntax. + +| Query Example | Description | +|---------------------------|------------------------------------| +| `from:someone` | Messages from a sender | +| `subject:meeting` | Messages with subject containing | +| `has:attachment` | Messages with attachments | +| `newer_than:7d` | Messages from the last 7 days | +| `is:unread` | Unread messages only | +| `label:inbox` | Messages in the inbox | + +### Read Message + +Retrieve the full content of a message by its ID, including headers, +body (plain text and HTML), and attachment metadata. + +### Send Message + +Compose and send an email. + +| Parameter | Description | +|---------------|-----------------------------------------------| +| `to` | Recipient email address(es) | +| `cc` | CC recipients | +| `bcc` | BCC recipients | +| `subject` | Email subject line | +| `body` | Email body (plain text or HTML) | +| `attachments` | List of file attachments | + +### Reply to Message + +Reply to an existing message thread, preserving threading headers. + +### Draft Management + +Create, list, update, and send draft messages. + +## Authentication + +- **OAuth 2.0** with `offline` access type (refresh token). +- Scopes: `calendar`, `gmail.modify`. +- Credentials stored at `~/.openclaw/google-credentials.json` (mode 600). +- Refresh token stored at `~/.openclaw/google-refresh-token` (mode 600). +- Daily cron job refreshes the token at 04:00 to prevent expiry. +- If the token is rotated by Google, the cron job updates all stored + copies (token file, systemd drop-in, openclaw.json). + +## Troubleshooting + +- **"Token has been expired or revoked"**: The refresh token is invalid. + Re-run the OAuth flow: + ``` + bash ~/.openclaw/enhance/integrations/google/scripts/google-auth.sh + ``` +- **"Access Not Configured"**: Enable the Calendar API and Gmail API in + the Google Cloud Console for your project. +- **"Insufficient Permission"**: The OAuth consent may not have included + the required scopes. Revoke access at + https://myaccount.google.com/permissions and re-authorize. +- **MCP server not starting**: Verify `mcporter` is installed globally: + `npm list -g mcporter`. diff --git a/bates-enhance/integrations/image/config-fragment.json b/bates-enhance/integrations/image/config-fragment.json new file mode 100644 index 0000000..1fc66ef --- /dev/null +++ b/bates-enhance/integrations/image/config-fragment.json @@ -0,0 +1,8 @@ +{ + "features": { + "imageGeneration": { + "enabled": true, + "providers": [] + } + } +} diff --git a/bates-enhance/integrations/image/scripts/generate-image.py b/bates-enhance/integrations/image/scripts/generate-image.py new file mode 100644 index 0000000..e85d3e6 --- /dev/null +++ b/bates-enhance/integrations/image/scripts/generate-image.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +"""generate-image.py -- Unified image generation for OpenAI and Google Imagen. + +Generates images via the OpenAI (gpt-image-1) or Google (Imagen 4.0) API +and writes the result to a file. Outputs JSON metadata to stdout. + +Environment variables: + OPENAI_API_KEY - Required for --provider openai + GOOGLE_GENERATIVE_AI_API_KEY - Required for --provider google + +Usage: + python3 generate-image.py --provider openai --prompt "a sunset over mountains" --output /tmp/sunset.png + python3 generate-image.py --provider google --prompt "a cat in a hat" --output /tmp/cat.png +""" + +import argparse +import base64 +import json +import os +import sys +from pathlib import Path + + +DEFAULT_MODELS = { + "openai": "gpt-image-1", + "google": "imagen-4.0-generate-001", +} + + +def generate_openai(prompt: str, output: str, model: str) -> dict: + """Generate an image using the OpenAI API.""" + try: + from openai import OpenAI + except ImportError: + print("ERROR: openai package not installed. Run: pip install openai", file=sys.stderr) + sys.exit(1) + + api_key = os.environ.get("OPENAI_API_KEY") + if not api_key: + print("ERROR: OPENAI_API_KEY environment variable is not set.", file=sys.stderr) + sys.exit(1) + + client = OpenAI(api_key=api_key) + + response = client.images.generate( + model=model, + prompt=prompt, + n=1, + size="1024x1024", + ) + + image_data = response.data[0] + + # gpt-image-1 returns b64_json by default + if hasattr(image_data, "b64_json") and image_data.b64_json: + img_bytes = base64.b64decode(image_data.b64_json) + Path(output).write_bytes(img_bytes) + elif hasattr(image_data, "url") and image_data.url: + import urllib.request + urllib.request.urlretrieve(image_data.url, output) + else: + print("ERROR: No image data in OpenAI response.", file=sys.stderr) + sys.exit(1) + + return { + "file": str(Path(output).resolve()), + "prompt": prompt, + "provider": "openai", + "model": model, + } + + +def generate_google(prompt: str, output: str, model: str) -> dict: + """Generate an image using the Google Generative AI API.""" + try: + from google import genai + from google.genai import types + except ImportError: + print( + "ERROR: google-genai package not installed. Run: pip install google-genai", + file=sys.stderr, + ) + sys.exit(1) + + api_key = os.environ.get("GOOGLE_GENERATIVE_AI_API_KEY") + if not api_key: + print( + "ERROR: GOOGLE_GENERATIVE_AI_API_KEY environment variable is not set.", + file=sys.stderr, + ) + sys.exit(1) + + client = genai.Client(api_key=api_key) + + response = client.models.generate_images( + model=model, + prompt=prompt, + config=types.GenerateImagesConfig(number_of_images=1), + ) + + if not response.generated_images: + print("ERROR: No images returned by Google API.", file=sys.stderr) + sys.exit(1) + + image = response.generated_images[0] + Path(output).write_bytes(image.image.image_bytes) + + return { + "file": str(Path(output).resolve()), + "prompt": prompt, + "provider": "google", + "model": model, + } + + +def main(): + parser = argparse.ArgumentParser(description="Generate images via OpenAI or Google Imagen") + parser.add_argument( + "--provider", + choices=["openai", "google"], + default="openai", + help="Image generation provider (default: openai)", + ) + parser.add_argument( + "--prompt", + required=True, + help="Text prompt for image generation", + ) + parser.add_argument( + "--output", + required=True, + help="Output file path for the generated image", + ) + parser.add_argument( + "--model", + default=None, + help="Model name (default: provider-specific)", + ) + + args = parser.parse_args() + + model = args.model or DEFAULT_MODELS[args.provider] + + # Ensure output directory exists + Path(args.output).parent.mkdir(parents=True, exist_ok=True) + + if args.provider == "openai": + result = generate_openai(args.prompt, args.output, model) + else: + result = generate_google(args.prompt, args.output, model) + + # Output JSON to stdout + print(json.dumps(result)) + + +if __name__ == "__main__": + main() diff --git a/bates-enhance/integrations/image/setup.sh b/bates-enhance/integrations/image/setup.sh new file mode 100644 index 0000000..055077e --- /dev/null +++ b/bates-enhance/integrations/image/setup.sh @@ -0,0 +1,147 @@ +# setup.sh -- Image Generation integration for Bates +# Sourced by bates-enhance.sh; has access to common.sh and config-merge.sh functions. +# +# Configures AI image generation with OpenAI (DALL-E / gpt-image-1) and/or +# Google (Imagen) providers. + +step "Image Generation Configuration" + +info "Bates can generate images using OpenAI and/or Google Imagen." +info "You can enable one or both providers." +echo "" + +local use_openai=false +local use_google=false +local providers_json="[]" +local dropin_dir="$HOME/.config/systemd/user/openclaw-gateway.service.d" +mkdir -p "$dropin_dir" + +# --- Provider selection --- +echo "Which image generation providers would you like to enable?" +echo " 1) OpenAI only (gpt-image-1 / DALL-E)" +echo " 2) Google only (Imagen 4.0)" +echo " 3) Both OpenAI and Google" +echo "" +local provider_choice="" +read -rp "Select [3]: " provider_choice + +case "$provider_choice" in + 1) + use_openai=true + providers_json='["openai"]' + ;; + 2) + use_google=true + providers_json='["google"]' + ;; + *) + use_openai=true + use_google=true + providers_json='["openai", "google"]' + ;; +esac + +# --- OpenAI setup --- +if $use_openai; then + step "OpenAI API Key for Image Generation" + + info "Get your API key from: https://platform.openai.com/api-keys" + echo "" + + local openai_key="" + while [[ -z "$openai_key" ]]; do + read -rp "OpenAI API key: " openai_key + if [[ -z "$openai_key" ]]; then + warn "API key cannot be empty." + continue + fi + if ! validate_openai_key "$openai_key"; then + warn "Key format looks unexpected (usually starts with sk-)." + if ! confirm "Use this key anyway?"; then + openai_key="" + continue + fi + fi + done + + # Store in systemd drop-in + local dropin_file="$dropin_dir/openai.conf" + cat > "$dropin_file" < "$dropin_file" < \ + --prompt "" \ + --output "" +``` + +### Parameters +- `--provider`: `openai` (default) or `google` +- `--prompt`: Detailed text description of the desired image +- `--output`: Full path where the image should be saved +- `--model`: Optional override (default: `gpt-image-1` for OpenAI, `imagen-4.0-generate-001` for Google) + +## Prompt Best Practices +1. Be specific and detailed about the desired output +2. Include style direction (photorealistic, watercolor, minimalist, etc.) +3. Specify composition elements (foreground, background, lighting) +4. Mention color palette if relevant +5. For professional use, add "high quality, professional" to the prompt + +## Output +- The script outputs JSON to stdout with file path, prompt, provider, and model +- Parse the JSON to get the file path for further operations (upload, share, etc.) + +## File Naming +- Use descriptive, kebab-case filenames: `sunset-mountain-landscape.png` +- General images go to: `drafts/images/` +- Venture-specific images go to: `drafts/Sales/{Company}/images/` + +## Error Handling +- If a provider fails, try the other provider +- Check that the required API key environment variable is set +- Ensure the output directory exists (script creates it automatically) diff --git a/bates-enhance/integrations/m365/config-fragment.json b/bates-enhance/integrations/m365/config-fragment.json new file mode 100644 index 0000000..c2661ba --- /dev/null +++ b/bates-enhance/integrations/m365/config-fragment.json @@ -0,0 +1,17 @@ +{ + "assistant": { + "email": "{{ASSISTANT_EMAIL}}" + }, + "mcp": { + "servers": { + "ms365-reader": { + "command": "mcporter", + "args": ["run", "ms365-reader"] + }, + "ms365-assistant": { + "command": "mcporter", + "args": ["run", "ms365-assistant"] + } + } + } +} diff --git a/bates-enhance/integrations/m365/cron-jobs-m365.json b/bates-enhance/integrations/m365/cron-jobs-m365.json new file mode 100644 index 0000000..587cada --- /dev/null +++ b/bates-enhance/integrations/m365/cron-jobs-m365.json @@ -0,0 +1,115 @@ +[ + { + "name": "morning-briefing", + "schedule": "30 8 * * 1-5", + "tz": "{{USER_TZ}}", + "message": "Morning briefing: Check email inbox for urgent items, review today's calendar, summarize top 5 priorities. Deliver via chat.", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}" + } + }, + { + "name": "email-draft-prep", + "schedule": "0 9 * * 1-5", + "tz": "{{USER_TZ}}", + "message": "Review flagged/starred emails. Draft responses for any that need replies. Save drafts.", + "sessionTarget": "isolated" + }, + { + "name": "daily-health-check", + "schedule": "0 10 * * *", + "tz": "{{USER_TZ}}", + "message": "Run full system health check: gateway, MCP servers, disk, memory, cron status. Report issues only.", + "sessionTarget": "isolated" + }, + { + "name": "daily-review", + "schedule": "0 18 * * 1-5", + "tz": "{{USER_TZ}}", + "message": "End of day review: summarize what was accomplished today, flag items for tomorrow, update observations.", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}" + } + }, + { + "name": "stale-email-chaser", + "schedule": "0 11 * * 1-5", + "tz": "{{USER_TZ}}", + "message": "Check for emails older than 3 days without response. List them with suggested actions.", + "sessionTarget": "isolated" + }, + { + "name": "daily-task-inbox-zero", + "schedule": "0 9,14 * * 1-5", + "tz": "{{USER_TZ}}", + "message": "Review task lists (Planner/To-Do). Identify overdue items. Suggest priorities.", + "sessionTarget": "isolated" + }, + { + "name": "daily-cost-review", + "schedule": "0 22 * * *", + "tz": "{{USER_TZ}}", + "message": "Check today's API costs via /cost command. Compare with 7-day average. Alert if above threshold.", + "sessionTarget": "isolated" + }, + { + "name": "weekly-project-reports", + "schedule": "0 9 * * 1", + "tz": "{{USER_TZ}}", + "message": "Generate weekly project status reports for all active projects. Include metrics, blockers, next steps.", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}" + } + }, + { + "name": "weekly-managers-report", + "schedule": "0 16 * * 5", + "tz": "{{USER_TZ}}", + "message": "Compile weekly manager's report: key achievements, metrics, issues, plan for next week.", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}" + } + }, + { + "name": "project-staleness-check", + "schedule": "0 14 * * 3", + "tz": "{{USER_TZ}}", + "message": "Check all projects for staleness: no updates in 7+ days, no recent commits, stale PRs. Report findings.", + "sessionTarget": "isolated" + }, + { + "name": "overnight-code-review", + "schedule": "0 2 * * *", + "tz": "{{USER_TZ}}", + "message": "Review recent git commits across all repos. Check for issues, security concerns, style violations. Report significant findings only.", + "sessionTarget": "isolated" + }, + { + "name": "receipt-processor", + "schedule": "0 20 * * *", + "tz": "{{USER_TZ}}", + "message": "Search recent emails for receipts and invoices. Extract amounts, vendors, dates. Update expense tracking.", + "sessionTarget": "isolated" + }, + { + "name": "monday-weekly-briefing", + "schedule": "0 8 * * 1", + "tz": "{{USER_TZ}}", + "message": "Monday morning briefing: week ahead calendar, pending tasks, project deadlines, key meetings.", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}" + } + }, + { + "name": "search-index-monitor", + "schedule": "0 */2 * * *", + "tz": "{{USER_TZ}}", + "message": "Check search index health: document count, last sync time, any errors. Report issues only.", + "sessionTarget": "isolated" + } +] diff --git a/bates-enhance/integrations/m365/scripts/graph-api.sh b/bates-enhance/integrations/m365/scripts/graph-api.sh new file mode 100755 index 0000000..f9362ca --- /dev/null +++ b/bates-enhance/integrations/m365/scripts/graph-api.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +set -euo pipefail + +# graph-api.sh — Helper for direct Microsoft Graph API calls via mcporter +# +# Usage: +# graph-api.sh [BODY_JSON] +# +# Examples: +# graph-api.sh GET "/me/messages?\$top=10" +# graph-api.sh POST "/me/sendMail" '{"message":{"subject":"Test","body":{"content":"Hello"},"toRecipients":[{"emailAddress":{"address":"{{USER_EMAIL}}"}}]}}' +# graph-api.sh PATCH "/me/events/AAMk..." '{"subject":"Updated title"}' +# +# The script uses mcporter to handle authentication automatically. +# The MCP server name defaults to ms365-assistant (write access). +# Set MCP_SERVER=ms365-reader for read-only calls. + +# --------------------------------------------------------------------------- +# Configuration +# --------------------------------------------------------------------------- +MCP_SERVER="${MCP_SERVER:-ms365-assistant}" +GRAPH_BASE="https://graph.microsoft.com/v1.0" + +# --------------------------------------------------------------------------- +# Argument parsing +# --------------------------------------------------------------------------- +if [[ $# -lt 2 ]]; then + echo "Usage: graph-api.sh [BODY_JSON]" >&2 + echo "" >&2 + echo " METHOD — HTTP method: GET, POST, PATCH, PUT, DELETE" >&2 + echo " ENDPOINT — Graph API path, e.g. /me/messages" >&2 + echo " BODY_JSON — Optional JSON body for POST/PATCH/PUT" >&2 + echo "" >&2 + echo "Environment:" >&2 + echo " MCP_SERVER — MCP server to use (default: ms365-assistant)" >&2 + exit 1 +fi + +METHOD="${1^^}" # uppercase +ENDPOINT="$2" +BODY="${3:-}" + +# Strip leading slash for consistency, then re-add +ENDPOINT="${ENDPOINT#/}" + +# --------------------------------------------------------------------------- +# Build the mcporter call +# --------------------------------------------------------------------------- +# Construct the arguments JSON for the graph-api-call tool +CALL_ARGS=$(cat <>> $METHOD $GRAPH_BASE/$ENDPOINT" >&2 + +RESULT=$(mcporter call "$MCP_SERVER" graph-api-call "$CALL_ARGS") + +# --------------------------------------------------------------------------- +# Output +# --------------------------------------------------------------------------- +# Pretty-print if jq is available, otherwise raw output +if command -v jq &>/dev/null; then + echo "$RESULT" | jq . +else + echo "$RESULT" +fi diff --git a/bates-enhance/integrations/m365/scripts/read-pdf-attachment.sh b/bates-enhance/integrations/m365/scripts/read-pdf-attachment.sh new file mode 100755 index 0000000..1702766 --- /dev/null +++ b/bates-enhance/integrations/m365/scripts/read-pdf-attachment.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +set -euo pipefail + +# read-pdf-attachment.sh — Download and extract text from a PDF email attachment +# +# Usage: +# read-pdf-attachment.sh +# +# Examples: +# read-pdf-attachment.sh "AAMkAD..." "AAMkAT..." +# +# Downloads the PDF attachment to a temporary file, extracts text using +# pdftotext (from poppler-utils), and outputs the text to stdout. +# The temporary file is cleaned up automatically. +# +# Requirements: +# - poppler-utils (apt install poppler-utils) for pdftotext +# - mcporter with ms365-reader configured + +# --------------------------------------------------------------------------- +# Configuration +# --------------------------------------------------------------------------- +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +MCP_SERVER="${MCP_SERVER:-ms365-reader}" + +# --------------------------------------------------------------------------- +# Argument parsing +# --------------------------------------------------------------------------- +if [[ $# -lt 2 ]]; then + echo "Usage: read-pdf-attachment.sh " >&2 + echo "" >&2 + echo "Downloads a PDF attachment from an email and extracts its text." >&2 + echo "Text is written to stdout; status messages go to stderr." >&2 + exit 1 +fi + +MESSAGE_ID="$1" +ATTACHMENT_ID="$2" + +# --------------------------------------------------------------------------- +# Check dependencies +# --------------------------------------------------------------------------- +if ! command -v pdftotext &>/dev/null; then + echo "Error: pdftotext not found. Install poppler-utils:" >&2 + echo " sudo apt install poppler-utils" >&2 + exit 1 +fi + +# --------------------------------------------------------------------------- +# Create temp file with automatic cleanup +# --------------------------------------------------------------------------- +TEMP_PDF=$(mktemp /tmp/pdf-attachment-XXXXXX.pdf) +trap 'rm -f "$TEMP_PDF"' EXIT + +# --------------------------------------------------------------------------- +# Download the attachment +# --------------------------------------------------------------------------- +echo "Downloading PDF attachment..." >&2 + +# Use the save-attachment helper if available, otherwise do it inline +if [[ -x "$SCRIPT_DIR/save-attachment.sh" ]]; then + "$SCRIPT_DIR/save-attachment.sh" "$MESSAGE_ID" "$ATTACHMENT_ID" "$TEMP_PDF" +else + # Inline download + RESULT=$(mcporter call "$MCP_SERVER" get-mail-attachment "$(cat <&2 + exit 1 +fi + +FILE_TYPE=$(file -b --mime-type "$TEMP_PDF" 2>/dev/null || echo "unknown") +if [[ "$FILE_TYPE" != "application/pdf" ]]; then + echo "Warning: File type is '$FILE_TYPE', not application/pdf. Attempting extraction anyway..." >&2 +fi + +# --------------------------------------------------------------------------- +# Extract text +# --------------------------------------------------------------------------- +echo "Extracting text from PDF..." >&2 + +# pdftotext with "-" outputs to stdout +# -layout preserves the visual layout of the PDF +pdftotext -layout "$TEMP_PDF" - + +echo "" >&2 +echo "Text extraction complete." >&2 diff --git a/bates-enhance/integrations/m365/scripts/save-attachment.sh b/bates-enhance/integrations/m365/scripts/save-attachment.sh new file mode 100755 index 0000000..5bc6d49 --- /dev/null +++ b/bates-enhance/integrations/m365/scripts/save-attachment.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +set -euo pipefail + +# save-attachment.sh — Save an email attachment to a local file +# +# Usage: +# save-attachment.sh +# +# Examples: +# save-attachment.sh "AAMkAD..." "AAMkAT..." /tmp/invoice.pdf +# save-attachment.sh "AAMkAD..." "AAMkAT..." ~/Downloads/report.xlsx +# +# Downloads the specified attachment from an email message and saves it +# to the given local path. Uses mcporter with ms365-reader for auth. + +# --------------------------------------------------------------------------- +# Configuration +# --------------------------------------------------------------------------- +MCP_SERVER="${MCP_SERVER:-ms365-reader}" + +# --------------------------------------------------------------------------- +# Argument parsing +# --------------------------------------------------------------------------- +if [[ $# -lt 3 ]]; then + echo "Usage: save-attachment.sh " >&2 + echo "" >&2 + echo " message-id — The email message ID (from list-mail-messages)" >&2 + echo " attachment-id — The attachment ID (from list-mail-attachments)" >&2 + echo " output-path — Local path to save the attachment to" >&2 + exit 1 +fi + +MESSAGE_ID="$1" +ATTACHMENT_ID="$2" +OUTPUT_PATH="$3" + +# --------------------------------------------------------------------------- +# Validation +# --------------------------------------------------------------------------- +OUTPUT_DIR=$(dirname "$OUTPUT_PATH") +if [[ ! -d "$OUTPUT_DIR" ]]; then + echo "Creating output directory: $OUTPUT_DIR" >&2 + mkdir -p "$OUTPUT_DIR" +fi + +# --------------------------------------------------------------------------- +# Download the attachment +# --------------------------------------------------------------------------- +echo "Downloading attachment..." >&2 +echo " Message: $MESSAGE_ID" >&2 +echo " Attachment: $ATTACHMENT_ID" >&2 +echo " Output: $OUTPUT_PATH" >&2 + +RESULT=$(mcporter call "$MCP_SERVER" get-mail-attachment "$(cat </dev/null || stat -f%z "$OUTPUT_PATH" 2>/dev/null) + echo "Success: $OUTPUT_PATH ($FILE_SIZE bytes)" >&2 +else + echo "Error: File was not created." >&2 + exit 1 +fi diff --git a/bates-enhance/integrations/m365/scripts/upload-to-onedrive.sh b/bates-enhance/integrations/m365/scripts/upload-to-onedrive.sh new file mode 100755 index 0000000..5e94403 --- /dev/null +++ b/bates-enhance/integrations/m365/scripts/upload-to-onedrive.sh @@ -0,0 +1,142 @@ +#!/usr/bin/env bash +set -euo pipefail + +# upload-to-onedrive.sh — Upload a local file to OneDrive +# +# Usage: +# upload-to-onedrive.sh +# +# Examples: +# upload-to-onedrive.sh /tmp/report.pdf "drafts/documents/report.pdf" +# upload-to-onedrive.sh ./image.png "drafts/images/screenshot.png" +# +# For files > 4 MB, this script uses an upload session (chunked upload). +# For files <= 4 MB, it uses a simple PUT request. +# +# Uses mcporter with ms365-assistant for authentication. + +# --------------------------------------------------------------------------- +# Configuration +# --------------------------------------------------------------------------- +MCP_SERVER="${MCP_SERVER:-ms365-assistant}" +CHUNK_SIZE=$((3 * 1024 * 1024 + 768 * 1024)) # 3.75 MB in bytes +SIMPLE_LIMIT=$((4 * 1024 * 1024)) # 4 MB threshold + +# --------------------------------------------------------------------------- +# Argument parsing +# --------------------------------------------------------------------------- +if [[ $# -lt 2 ]]; then + echo "Usage: upload-to-onedrive.sh " >&2 + echo "" >&2 + echo " local-path — Path to the local file to upload" >&2 + echo " onedrive-path — Destination path in OneDrive (e.g. drafts/docs/file.pdf)" >&2 + exit 1 +fi + +LOCAL_PATH="$1" +ONEDRIVE_PATH="$2" + +# --------------------------------------------------------------------------- +# Validation +# --------------------------------------------------------------------------- +if [[ ! -f "$LOCAL_PATH" ]]; then + echo "Error: File not found: $LOCAL_PATH" >&2 + exit 1 +fi + +FILE_SIZE=$(stat -c%s "$LOCAL_PATH" 2>/dev/null || stat -f%z "$LOCAL_PATH" 2>/dev/null) +FILE_NAME=$(basename "$LOCAL_PATH") + +# Strip leading slash from OneDrive path +ONEDRIVE_PATH="${ONEDRIVE_PATH#/}" + +echo "Uploading: $LOCAL_PATH ($FILE_SIZE bytes)" >&2 +echo " To: OneDrive:/$ONEDRIVE_PATH" >&2 + +# --------------------------------------------------------------------------- +# Simple upload (< 4 MB) +# --------------------------------------------------------------------------- +if [[ "$FILE_SIZE" -le "$SIMPLE_LIMIT" ]]; then + echo "Using simple upload..." >&2 + + # Base64-encode the file content for the MCP call + CONTENT_B64=$(base64 -w0 "$LOCAL_PATH" 2>/dev/null || base64 "$LOCAL_PATH" 2>/dev/null) + + RESULT=$(mcporter call "$MCP_SERVER" upload-drive-item "$(cat <&2 + exit 0 +fi + +# --------------------------------------------------------------------------- +# Chunked upload (> 4 MB) via upload session +# --------------------------------------------------------------------------- +echo "File exceeds 4 MB — using chunked upload session..." >&2 + +# Step 1: Create upload session +SESSION_RESULT=$(mcporter call "$MCP_SERVER" create-upload-session "$(cat </dev/null) + +if [[ -z "$UPLOAD_URL" ]]; then + echo "Error: Failed to create upload session." >&2 + echo "Response: $SESSION_RESULT" >&2 + exit 1 +fi + +echo "Upload session created." >&2 + +# Step 2: Upload in chunks +OFFSET=0 +REMAINING="$FILE_SIZE" + +while [[ "$REMAINING" -gt 0 ]]; do + # Determine chunk size + if [[ "$REMAINING" -lt "$CHUNK_SIZE" ]]; then + THIS_CHUNK="$REMAINING" + else + THIS_CHUNK="$CHUNK_SIZE" + fi + + END_BYTE=$((OFFSET + THIS_CHUNK - 1)) + + echo " Uploading bytes $OFFSET-$END_BYTE of $FILE_SIZE..." >&2 + + # Extract chunk and base64-encode it + CHUNK_B64=$(dd if="$LOCAL_PATH" bs=1 skip="$OFFSET" count="$THIS_CHUNK" 2>/dev/null | base64 -w0 2>/dev/null || \ + dd if="$LOCAL_PATH" bs=1 skip="$OFFSET" count="$THIS_CHUNK" 2>/dev/null | base64 2>/dev/null) + + mcporter call "$MCP_SERVER" upload-chunk "$(cat </dev/null + + OFFSET=$((OFFSET + THIS_CHUNK)) + REMAINING=$((REMAINING - THIS_CHUNK)) +done + +echo "Upload complete: OneDrive:/$ONEDRIVE_PATH" >&2 diff --git a/bates-enhance/integrations/m365/setup.sh b/bates-enhance/integrations/m365/setup.sh new file mode 100644 index 0000000..5c6115b --- /dev/null +++ b/bates-enhance/integrations/m365/setup.sh @@ -0,0 +1,232 @@ +# m365 integration setup — sourced by bates-enhance installer, no shebang +# Requires: mcporter, config_merge (from parent installer), interactive terminal + +M365_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- +_prompt() { # _prompt VAR "prompt text" [default] + local __var=$1 __prompt=$2 __default=${3:-} + local __val + if [[ -n "$__default" ]]; then + read -rp "$__prompt [$__default]: " __val + __val="${__val:-$__default}" + else + read -rp "$__prompt: " __val + fi + printf -v "$__var" '%s' "$__val" +} + +_prompt_secret() { # _prompt_secret VAR "prompt text" + local __var=$1 __prompt=$2 __val + read -rsp "$__prompt: " __val + echo + printf -v "$__var" '%s' "$__val" +} + +_confirm() { # _confirm "question" → 0=yes 1=no + local ans + read -rp "$1 [y/N]: " ans + [[ "$ans" =~ ^[Yy] ]] +} + +_step() { # _step N "Title" + echo "" + echo "======================================================================" + echo " Step $1: $2" + echo "======================================================================" + echo "" +} + +# ========================================================================= +# Step 1 — Collect account info +# ========================================================================= +_step 1 "Collect account information" + +_prompt ASSISTANT_EMAIL "Assistant email address (the email Bates sends from)" +_prompt USER_EMAIL "Your personal email address" +_prompt COMPANY_EMAIL "Company/shared mailbox email (leave blank to skip)" "" +_prompt TENANT_ID "Entra (Azure AD) tenant ID" + +export ASSISTANT_EMAIL USER_EMAIL COMPANY_EMAIL TENANT_ID + +echo "" +echo " Assistant email : $ASSISTANT_EMAIL" +echo " Personal email : $USER_EMAIL" +echo " Company email : ${COMPANY_EMAIL:-}" +echo " Tenant ID : $TENANT_ID" +echo "" + +if ! _confirm "Continue with these values?"; then + echo "Aborted." >&2 + return 1 +fi + +# ========================================================================= +# Step 2 — Register personal reader MCP server +# ========================================================================= +_step 2 "Register personal reader MCP server (read-only)" + +echo "You need an Entra app registration with DELEGATED permissions for:" +echo " Mail.Read, Calendars.Read, Contacts.Read, Files.Read, Tasks.Read" +echo "" +echo "See: ${M365_DIR}/manual-steps-m365.md for detailed instructions." +echo "" + +_prompt READER_APP_ID "Personal reader App (Client) ID" +_prompt_secret READER_SECRET "Personal reader Client Secret" + +echo "Registering ms365-reader with mcporter..." +mcporter add ms365-reader \ + --app-id "$READER_APP_ID" \ + --client-secret "$READER_SECRET" \ + --tenant "$TENANT_ID" + +echo "" +echo "Testing connection..." +if mcporter call ms365-reader list-mail-folders '{}' >/dev/null 2>&1; then + echo " ms365-reader OK" +else + echo " WARNING: ms365-reader test failed. You may need to complete consent." + echo " You can re-test later with: mcporter call ms365-reader list-mail-folders '{}'" +fi + +# ========================================================================= +# Step 3 — Register company reader (optional) +# ========================================================================= +if [[ -n "$COMPANY_EMAIL" ]]; then + _step 3 "Register company reader MCP server (read-only)" + + echo "This reader accesses the company/shared mailbox: $COMPANY_EMAIL" + echo "It needs a separate Entra app registration (or the same app with" + echo "additional permissions for the shared mailbox)." + echo "" + + _prompt COMPANY_APP_ID "Company reader App (Client) ID" + _prompt_secret COMPANY_SECRET "Company reader Client Secret" + + echo "Registering ms365-company-reader with mcporter..." + mcporter add ms365-company-reader \ + --app-id "$COMPANY_APP_ID" \ + --client-secret "$COMPANY_SECRET" \ + --tenant "$TENANT_ID" + + echo "" + echo "Testing connection..." + if mcporter call ms365-company-reader list-mail-folders '{}' >/dev/null 2>&1; then + echo " ms365-company-reader OK" + else + echo " WARNING: ms365-company-reader test failed." + echo " Re-test later: mcporter call ms365-company-reader list-mail-folders '{}'" + fi +else + echo "" + echo "--- Step 3: Skipped (no company email provided) ---" +fi + +# ========================================================================= +# Step 4 — Register assistant MCP server (write access) +# ========================================================================= +_step 4 "Register assistant MCP server (write access)" + +echo "The assistant needs a SEPARATE Entra app registration with APPLICATION" +echo "permissions for sending mail, managing calendars, and creating tasks:" +echo " Mail.Send, Mail.ReadWrite, Calendars.ReadWrite, Tasks.ReadWrite," +echo " Files.ReadWrite.All, User.Read.All" +echo "" +echo "See: ${M365_DIR}/manual-steps-m365.md for detailed instructions." +echo "" + +_prompt ASST_APP_ID "Assistant App (Client) ID" +_prompt_secret ASST_SECRET "Assistant Client Secret" + +echo "Registering ms365-assistant with mcporter..." +mcporter add ms365-assistant \ + --app-id "$ASST_APP_ID" \ + --client-secret "$ASST_SECRET" \ + --tenant "$TENANT_ID" \ + --org-mode + +echo "" +echo "Testing connection..." +if mcporter call ms365-assistant list-mail-folders '{}' >/dev/null 2>&1; then + echo " ms365-assistant OK" +else + echo " WARNING: ms365-assistant test failed. You may need to grant admin consent." + echo " Re-test later: mcporter call ms365-assistant list-mail-folders '{}'" +fi + +# ========================================================================= +# Step 5 — Exchange transport rule reminder +# ========================================================================= +_step 5 "Exchange transport rule (safety guardrail)" + +echo "IMPORTANT: Before the assistant can send mail, you MUST set up an" +echo "Exchange Online transport rule to restrict the assistant email" +echo "($ASSISTANT_EMAIL) to approved recipients only." +echo "" +echo "This prevents the assistant from sending mail to arbitrary addresses." +echo "" +echo "Options:" +echo " 1. Exchange Admin Center -> Mail flow -> Rules" +echo " 2. PowerShell: New-TransportRule (see manual-steps-m365.md)" +echo "" +echo "See: ${M365_DIR}/manual-steps-m365.md (section: Transport Rule)" +echo "" + +if _confirm "Have you set up the transport rule (or will do so before enabling send)?"; then + echo " Acknowledged." +else + echo " WARNING: Proceeding without transport rule. The assistant will NOT" + echo " attempt to send mail until you confirm the rule is in place." +fi + +# ========================================================================= +# Step 6 — Deploy config + workspace additions +# ========================================================================= +_step 6 "Deploy configuration and workspace additions" + +echo "Merging M365 config fragment into openclaw.json..." + +# Substitute placeholders in config fragment +_m365_fragment=$(sed \ + -e "s|{{ASSISTANT_EMAIL}}|${ASSISTANT_EMAIL}|g" \ + "$M365_DIR/config-fragment.json") + +config_merge "$_m365_fragment" + +echo " Config merged." + +# Copy workspace additions +if [[ -d "$M365_DIR/workspace-additions" ]]; then + echo "Copying workspace additions..." + cp -r "$M365_DIR/workspace-additions/refs/"* "${WORKSPACE_DIR:-$HOME/.openclaw/workspace}/refs/" 2>/dev/null || true + cp -r "$M365_DIR/workspace-additions/rules/"* "${WORKSPACE_DIR:-$HOME/.openclaw/workspace}/rules/" 2>/dev/null || true + cp -r "$M365_DIR/workspace-additions/skills/"* "${WORKSPACE_DIR:-$HOME/.openclaw/workspace}/skills/" 2>/dev/null || true + echo " Workspace files deployed." +fi + +# Copy scripts +if [[ -d "$M365_DIR/scripts" ]]; then + echo "Installing helper scripts..." + cp "$M365_DIR/scripts/"*.sh "${SCRIPTS_DIR:-$HOME/.openclaw/scripts}/" 2>/dev/null || true + chmod +x "${SCRIPTS_DIR:-$HOME/.openclaw/scripts}/"graph-api.sh \ + "${SCRIPTS_DIR:-$HOME/.openclaw/scripts}/"upload-to-onedrive.sh \ + "${SCRIPTS_DIR:-$HOME/.openclaw/scripts}/"save-attachment.sh \ + "${SCRIPTS_DIR:-$HOME/.openclaw/scripts}/"read-pdf-attachment.sh 2>/dev/null || true + echo " Scripts installed." +fi + +echo "" +echo "======================================================================" +echo " M365 integration setup complete!" +echo "======================================================================" +echo "" +echo "Next steps:" +echo " 1. Restart the gateway: systemctl --user restart openclaw-gateway" +echo " 2. Merge cron jobs from: ${M365_DIR}/cron-jobs-m365.json" +echo " (review and customize schedules / delivery targets first)" +echo " 3. Test: mcporter call ms365-reader list-mail-messages '{\"top\": 5}'" +echo " 4. Test: mcporter call ms365-assistant list-mail-folders '{}'" +echo "" diff --git a/bates-enhance/integrations/m365/workspace-additions/refs/attachments.md b/bates-enhance/integrations/m365/workspace-additions/refs/attachments.md new file mode 100644 index 0000000..19fe468 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/refs/attachments.md @@ -0,0 +1,130 @@ +# Attachment Handling Reference + +## Downloading Attachments from Emails + +### Step 1: List attachments on a message + +``` +list-mail-attachments messageId="AAMk..." +``` + +Returns an array of attachment objects with: +- `id` — attachment ID +- `name` — filename +- `contentType` — MIME type +- `size` — size in bytes +- `isInline` — whether it is an inline image + +### Step 2: Download a specific attachment + +``` +get-mail-attachment messageId="AAMk..." attachmentId="AAMk..." +``` + +Returns the attachment content (base64-encoded for binary files). + +### Helper script + +```bash +# Save attachment to a local file +~/.openclaw/scripts/save-attachment.sh /tmp/output.pdf +``` + +--- + +## Saving Attachments to OneDrive + +After downloading an attachment locally, upload it to OneDrive: + +```bash +# Upload to OneDrive +~/.openclaw/scripts/upload-to-onedrive.sh /tmp/output.pdf "drafts/documents/output.pdf" +``` + +Or use the MCP server directly: + +``` +upload-drive-item localPath="/tmp/output.pdf" remotePath="drafts/documents/output.pdf" +``` + +### Recommended OneDrive paths + +| Content type | Path | +|--------------------|-------------------------------------------| +| General documents | `drafts/documents/` | +| Images | `drafts/images/` | +| Venture/sales docs | `drafts/Sales/{{COMPANY_NAME}}/` | +| Receipts/invoices | `drafts/finance/receipts/` | +| Reports | `drafts/reports/` | + +--- + +## PDF Attachments + +### Read text from a PDF attachment + +```bash +# Download and extract text in one step +~/.openclaw/scripts/read-pdf-attachment.sh +``` + +This downloads the PDF to a temp file, extracts text using `pdftotext` +(from poppler-utils), and outputs the text to stdout. + +### Requirements + +- `poppler-utils` must be installed (`apt install poppler-utils`) +- For scanned PDFs (image-only), OCR via `tesseract` may be needed + +### Reading local PDFs + +If you already have a PDF file locally: + +```bash +pdftotext /path/to/file.pdf - # outputs text to stdout +pdftotext /path/to/file.pdf /path/to/output.txt +``` + +--- + +## Image Attachments + +### Inline images + +Inline images (embedded in HTML body) have `isInline: true` and a +`contentId` that corresponds to `cid:` references in the HTML body. + +### Regular image attachments + +Download as any other attachment. Common types: +- `image/png` +- `image/jpeg` +- `image/gif` + +### Processing images + +Use the image generation or analysis tools if you need to process +downloaded images. + +--- + +## Size Limits + +| Limit | Value | +|------------------------------|----------------| +| Single attachment (Graph API)| 3 MB inline | +| Upload session (large files) | up to 150 MB | +| Total message size | 25 MB | +| OneDrive upload (simple) | 4 MB | +| OneDrive upload (session) | up to 250 GB | + +### Large attachments (> 3 MB) + +For attachments larger than 3 MB, use an upload session: + +1. Create an upload session via Graph API +2. Upload the file in chunks (typically 3.75 MB each) +3. The Graph API returns the final attachment object + +The `upload-to-onedrive.sh` helper handles chunked uploads automatically +for files over 4 MB. diff --git a/bates-enhance/integrations/m365/workspace-additions/refs/email-ops.md b/bates-enhance/integrations/m365/workspace-additions/refs/email-ops.md new file mode 100644 index 0000000..dd7d151 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/refs/email-ops.md @@ -0,0 +1,180 @@ +# Email Operations Reference + +## Searching Emails + +### Search all folders + +Use `list-mail-messages` with the `search` parameter. This searches across +ALL mail folders (Inbox, Sent Items, Archive, etc.). + +``` +list-mail-messages search='"quarterly report"' +``` + +The search term must be wrapped in double quotes inside single quotes. +This uses Microsoft Graph's `$search` parameter which supports KQL syntax. + +### Search a specific folder + +Use `list-mail-folder-messages` to search within ONE folder only: + +``` +list-mail-folder-messages folderId="inbox" filter="contains(subject, 'budget')" +``` + +### Common search patterns + +| Goal | Approach | +|---------------------------|----------------------------------------------------| +| Find by keyword | `list-mail-messages search='"keyword"'` | +| Find by sender | `list-mail-messages search='"from:jane@example.com"'` | +| Find by subject | `list-mail-messages search='"subject:invoice"'` | +| Find by date range | Use `filter` with `receivedDateTime` | +| Find with attachment | `filter="hasAttachments eq true"` | +| Find unread | `filter="isRead eq false"` | + +### Pagination + +Results are paginated. Use `top` (page size) and `skip` (offset): + +``` +list-mail-messages search='"report"' top=25 skip=0 +list-mail-messages search='"report"' top=25 skip=25 +``` + +--- + +## Reading a Specific Email + +``` +get-mail-message messageId="AAMk..." +``` + +Returns the full message including body (HTML or text), headers, and metadata. + +--- + +## Drafting and Sending Emails + +### Step 1: Create a draft (preferred) + +``` +create-draft subject="Re: Project update" body="..." toRecipients='["{{USER_EMAIL}}"]' +``` + +### Step 2: Review the draft + +The draft will appear in the Drafts folder. Review it before sending. + +### Step 3: Send + +``` +send-mail messageId="AAMk..." +``` + +Or send directly (only when explicitly instructed): + +``` +send-mail subject="Meeting notes" body="Here are the notes..." toRecipients='["{{USER_EMAIL}}"]' +``` + +### Important rules + +- Always draft first, never send without review (unless user explicitly says so) +- Only send to approved recipients (transport rule enforces this) +- Match the tone of previous correspondence +- Include proper greeting and sign-off + +--- + +## Email Threading and Reply Chains + +### Reply to a message + +``` +reply-mail messageId="AAMk..." comment="Thanks for the update. I'll review by EOD." +``` + +### Reply all + +``` +reply-mail messageId="AAMk..." comment="Noted, thanks." replyAll=true +``` + +### Forward a message + +``` +forward-mail messageId="AAMk..." toRecipients='["{{USER_EMAIL}}"]' comment="FYI — see below." +``` + +### Thread identification + +- Messages in the same thread share `conversationId`. +- Use `conversationId` to find all messages in a thread. +- Sort by `receivedDateTime` to reconstruct the conversation order. + +--- + +## Attachment Handling + +### List attachments + +``` +list-mail-attachments messageId="AAMk..." +``` + +### Download an attachment + +``` +get-mail-attachment messageId="AAMk..." attachmentId="AAMk..." +``` + +### Send with attachments + +Attachments must be base64-encoded: + +```json +{ + "subject": "Report attached", + "body": "Please find the report attached.", + "toRecipients": ["{{USER_EMAIL}}"], + "attachments": [ + { + "name": "report.pdf", + "contentType": "application/pdf", + "contentBytes": "" + } + ] +} +``` + +For large attachments (>3 MB), use the upload session endpoint. + +See also: `refs/attachments.md` for more detail on attachment workflows. + +--- + +## Folder Navigation + +### List all folders + +``` +list-mail-folders +``` + +### Common folder names + +| Display Name | Well-known ID | +|----------------|-------------------| +| Inbox | `inbox` | +| Sent Items | `sentitems` | +| Drafts | `drafts` | +| Deleted Items | `deleteditems` | +| Archive | `archive` | +| Junk Email | `junkemail` | + +### Move a message + +``` +move-mail-message messageId="AAMk..." destinationId="archive" +``` diff --git a/bates-enhance/integrations/m365/workspace-additions/refs/graph-api.md b/bates-enhance/integrations/m365/workspace-additions/refs/graph-api.md new file mode 100644 index 0000000..8c9af07 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/refs/graph-api.md @@ -0,0 +1,180 @@ +# Microsoft Graph API Reference + +## Overview + +Microsoft Graph is the unified API for Microsoft 365 services. All M365 +integration MCP servers use Graph API endpoints internally. This reference +covers patterns useful when making direct API calls via the `graph-api.sh` +helper script. + +--- + +## Common Endpoints + +### Mail + +| Method | Endpoint | Description | +|--------|---------------------------------------------------|--------------------------| +| GET | `/me/messages` | List messages | +| GET | `/me/messages/{id}` | Get a message | +| GET | `/me/mailFolders` | List mail folders | +| GET | `/me/mailFolders/{id}/messages` | Messages in a folder | +| POST | `/me/sendMail` | Send a message | +| POST | `/me/messages` | Create a draft | +| POST | `/me/messages/{id}/reply` | Reply to a message | +| POST | `/me/messages/{id}/forward` | Forward a message | +| POST | `/me/messages/{id}/move` | Move a message | +| GET | `/me/messages/{id}/attachments` | List attachments | +| GET | `/me/messages/{id}/attachments/{aid}` | Get an attachment | + +### Calendar + +| Method | Endpoint | Description | +|--------|---------------------------------------------------|--------------------------| +| GET | `/me/events` | List events | +| GET | `/me/events/{id}` | Get an event | +| POST | `/me/events` | Create an event | +| PATCH | `/me/events/{id}` | Update an event | +| DELETE | `/me/events/{id}` | Delete an event | +| GET | `/me/calendarView?startDateTime=...&endDateTime=...` | Events in date range | + +### OneDrive + +| Method | Endpoint | Description | +|--------|---------------------------------------------------|--------------------------| +| GET | `/me/drive/root/children` | List root items | +| GET | `/me/drive/root:/{path}:/children` | List folder contents | +| GET | `/me/drive/root:/{path}:/content` | Download file | +| PUT | `/me/drive/root:/{path}:/content` | Upload file (< 4 MB) | +| POST | `/me/drive/root:/{path}:/createUploadSession` | Large file upload | +| POST | `/me/drive/root/children` | Create folder | + +### Planner + +| Method | Endpoint | Description | +|--------|---------------------------------------------------|--------------------------| +| GET | `/me/planner/plans` | List plans | +| GET | `/planner/plans/{id}/tasks` | List tasks in a plan | +| GET | `/planner/plans/{id}/buckets` | List buckets in a plan | +| POST | `/planner/tasks` | Create a task | +| PATCH | `/planner/tasks/{id}` | Update a task | + +### To-Do + +| Method | Endpoint | Description | +|--------|---------------------------------------------------|--------------------------| +| GET | `/me/todo/lists` | List task lists | +| GET | `/me/todo/lists/{id}/tasks` | List tasks in a list | +| POST | `/me/todo/lists/{id}/tasks` | Create a task | +| PATCH | `/me/todo/lists/{id}/tasks/{tid}` | Update a task | + +--- + +## Authentication Flow + +The MCP servers handle authentication automatically. When making direct +Graph API calls via `graph-api.sh`, authentication is handled by mcporter. + +### Token flow (for reference) + +1. Application credentials (client ID + secret) are stored by mcporter +2. mcporter requests a token from `https://login.microsoftonline.com/{{TENANT_ID}}/oauth2/v2.0/token` +3. Token is cached and refreshed automatically +4. All API calls include `Authorization: Bearer ` header + +### Scopes + +- **Delegated** (ms365-reader): acts as the user, limited to user's data +- **Application** (ms365-assistant): acts as the app, can access org-wide data + +--- + +## Pagination + +Graph API uses OData-style pagination: + +```json +{ + "value": [...], + "@odata.nextLink": "https://graph.microsoft.com/v1.0/me/messages?$skip=10" +} +``` + +- Always check for `@odata.nextLink` in responses +- Follow the link to get the next page +- Use `$top` to control page size (default varies by endpoint, max 999) +- Use `$skip` to offset results + +### Example: Fetching all messages + +```bash +# Page 1 +graph-api.sh GET "/me/messages?\$top=50" +# Page 2 (use the nextLink from page 1) +graph-api.sh GET "/me/messages?\$top=50&\$skip=50" +``` + +--- + +## Search Syntax (KQL) + +The `$search` parameter uses Keyword Query Language: + +``` +$search="quarterly report" # contains both words +$search="from:jane@example.com" # from specific sender +$search="subject:budget" # in subject line +$search="hasAttachment:true" # has attachments +$search="received>=2026-01-01" # received after date +``` + +### Combining search terms + +``` +$search="from:jane@example.com AND subject:report" +$search="quarterly OR annual report" +``` + +Note: `$search` and `$filter` cannot always be combined. When both are +needed, prefer `$search` for text matching and post-filter results in code. + +--- + +## Error Handling + +### Common error codes + +| Code | HTTP | Meaning | +|-------------------------|------|--------------------------------------| +| `invalidAuthenticationToken` | 401 | Token expired or invalid | +| `accessDenied` | 403 | Insufficient permissions | +| `itemNotFound` | 404 | Resource does not exist | +| `activityLimitReached` | 429 | Rate limit exceeded | +| `generalException` | 500 | Server error | +| `serviceNotAvailable` | 503 | Service temporarily unavailable | + +### Retry strategy + +- **429 (rate limit)**: Honor `Retry-After` header, back off exponentially +- **503 (service unavailable)**: Retry after 30 seconds +- **500 (server error)**: Retry once, then report failure +- **401 (auth)**: Refresh token and retry once + +--- + +## Rate Limits + +Microsoft Graph enforces per-app and per-tenant rate limits: + +| Resource | Limit | +|------------------|--------------------------| +| General | 10,000 requests / 10 min | +| Mail send | 10,000 messages / day | +| OneDrive upload | Varies by file size | +| Search | 10 concurrent requests | + +Best practices: +- Batch requests when possible (`/$batch` endpoint) +- Cache responses that do not change frequently +- Use `$select` to request only needed fields +- Use `$top` to limit result set size diff --git a/bates-enhance/integrations/m365/workspace-additions/refs/mcp-servers.md b/bates-enhance/integrations/m365/workspace-additions/refs/mcp-servers.md new file mode 100644 index 0000000..c6bc745 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/refs/mcp-servers.md @@ -0,0 +1,102 @@ +# MCP Servers — Microsoft 365 + +## ms365-reader (Personal Mail — Read-Only) + +Reads the user's personal mailbox, calendar, contacts, and OneDrive files. +Registered with delegated permissions scoped to the user's account. + +### Key operations + +| Tool | Description | +|-----------------------------|------------------------------------------| +| `list-mail-folders` | List all mail folders and their IDs | +| `list-mail-messages` | List/search messages (supports `search`, `filter`, `top`, `skip`) | +| `list-mail-folder-messages` | List messages in a specific folder only | +| `get-mail-message` | Get a single message by ID (full body) | +| `list-mail-attachments` | List attachments on a message | +| `get-mail-attachment` | Download a specific attachment | +| `list-calendar-events` | List calendar events (supports date range) | +| `get-calendar-event` | Get a single calendar event | +| `list-contacts` | List contacts | +| `list-drive-items` | List OneDrive files and folders | +| `get-drive-item-content` | Download a file from OneDrive | + +### Usage examples + +```bash +# Search all folders for a keyword +mcporter call ms365-reader list-mail-messages '{"search": "\"quarterly report\""}' + +# List recent inbox messages +mcporter call ms365-reader list-mail-folder-messages '{"folderId": "inbox", "top": 10}' + +# Get today's calendar events +mcporter call ms365-reader list-calendar-events '{"startDateTime": "2026-01-01T00:00:00Z", "endDateTime": "2026-01-02T00:00:00Z"}' +``` + +### Notes + +- `list-mail-messages` with `search` searches ALL folders (Inbox, Sent, etc.). +- `list-mail-folder-messages` searches only ONE specific folder. +- Always prefer `list-mail-messages search='"keyword"'` for broad searches. + +--- + +## ms365-company-reader (Company Mailbox — Read-Only, Optional) + +Reads a company or shared mailbox. Same operations as ms365-reader but scoped +to the company mailbox. Only available if a company email was configured during +setup. + +### Key operations + +Same tool set as ms365-reader above. All calls are scoped to the company +mailbox automatically. + +--- + +## ms365-assistant (Write Access) + +The assistant's own identity for sending mail, managing calendars, creating +tasks, and writing files. Uses application permissions with org-mode. + +### Key operations + +| Tool | Description | +|-----------------------------|------------------------------------------| +| `send-mail` | Send an email (subject, body, recipients)| +| `create-draft` | Create a draft email | +| `reply-mail` | Reply to an existing message | +| `forward-mail` | Forward a message | +| `move-mail-message` | Move a message to a different folder | +| `create-calendar-event` | Create a calendar event | +| `update-calendar-event` | Update an existing event | +| `delete-calendar-event` | Delete a calendar event | +| `create-task` | Create a Planner/To-Do task | +| `update-task` | Update a task (status, due date, etc.) | +| `upload-drive-item` | Upload a file to OneDrive | +| `create-drive-folder` | Create a folder in OneDrive | +| `list-mail-messages` | Read messages (also has read access) | +| `list-calendar-events` | Read calendar (also has read access) | + +### Usage examples + +```bash +# Send an email +mcporter call ms365-assistant send-mail '{"subject": "Report ready", "body": "The weekly report is attached.", "toRecipients": ["{{USER_EMAIL}}"]}' + +# Create a calendar event +mcporter call ms365-assistant create-calendar-event '{"subject": "Team standup", "start": "2026-01-15T09:00:00", "end": "2026-01-15T09:30:00"}' + +# Create a task +mcporter call ms365-assistant create-task '{"title": "Review Q4 numbers", "dueDateTime": "2026-01-20"}' +``` + +### Safety + +- A transport rule MUST be in place restricting the assistant email to approved + recipients only. Never bypass this. +- Always draft emails first, then send after review — unless explicitly + instructed otherwise. +- The assistant uses `--org-mode` which grants application-level permissions. + This is necessary for sending mail on behalf of the assistant identity. diff --git a/bates-enhance/integrations/m365/workspace-additions/refs/onedrive.md b/bates-enhance/integrations/m365/workspace-additions/refs/onedrive.md new file mode 100644 index 0000000..d259b6b --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/refs/onedrive.md @@ -0,0 +1,156 @@ +# OneDrive Operations Reference + +## Upload Files + +### Simple upload (< 4 MB) + +Use the `/me/drive/root:/{path}:/content` endpoint pattern: + +``` +upload-drive-item localPath="/tmp/report.pdf" remotePath="drafts/documents/report.pdf" +``` + +Or via the helper script: + +```bash +~/.openclaw/scripts/upload-to-onedrive.sh /tmp/report.pdf "drafts/documents/report.pdf" +``` + +### Important: Correct endpoint format + +Always use the path-based endpoint: +``` +/me/drive/root:/{path}:/content +``` + +Do NOT use the drive-ID-based endpoint (`/drives/b!.../root:/`). The +path-based endpoint resolves correctly for the authenticated user's +OneDrive. + +### Large file upload (> 4 MB) + +For files larger than 4 MB, use an upload session: + +1. Create upload session: `POST /me/drive/root:/{path}:/createUploadSession` +2. Upload in chunks (3.75 MB recommended) +3. Final chunk returns the completed DriveItem + +The `upload-to-onedrive.sh` script handles this automatically. + +--- + +## Download Files + +``` +get-drive-item-content path="drafts/documents/report.pdf" +``` + +Or by item ID: + +``` +get-drive-item-content itemId="01ABCDEF..." +``` + +--- + +## List Folder Contents + +``` +list-drive-items path="drafts/documents/" +``` + +Returns an array of DriveItem objects with: +- `id` — item ID +- `name` — filename or folder name +- `size` — size in bytes +- `lastModifiedDateTime` — last modified timestamp +- `folder` — present if item is a folder (contains `childCount`) +- `file` — present if item is a file (contains `mimeType`) + +### Pagination + +Large folders return paginated results. Follow `@odata.nextLink` for +additional pages. + +--- + +## Create Folders + +``` +create-drive-folder parentPath="drafts/" name="new-project" +``` + +Creates `drafts/new-project/` in OneDrive. + +### Nested folder creation + +Create parent folders first, then children: + +``` +create-drive-folder parentPath="drafts/" name="Sales" +create-drive-folder parentPath="drafts/Sales/" name="Acme Corp" +``` + +--- + +## Share Links + +### Create a sharing link + +``` +create-sharing-link itemId="01ABCDEF..." type="view" scope="anonymous" +``` + +Link types: +- `view` — read-only +- `edit` — read-write + +Scopes: +- `anonymous` — anyone with the link +- `organization` — anyone in the organization + +### Get existing sharing links + +``` +list-sharing-links itemId="01ABCDEF..." +``` + +--- + +## Path Conventions + +Standard OneDrive folder structure: + +``` +drafts/ + documents/ — general documents, reports + images/ — generated images, screenshots + Sales/ + {{COMPANY_NAME}}/ + images/ — venture-specific images + documents/ — venture-specific docs + finance/ + receipts/ — receipts and invoices + reports/ — generated reports + weekly/ + monthly/ +``` + +### Rules + +- Always use forward slashes in paths +- Paths are case-insensitive on OneDrive but preserve case +- Do not include leading slash (use `drafts/file.pdf` not `/drafts/file.pdf`) +- The `drafts/` prefix keeps AI-generated content separate from user files + +--- + +## Error Handling + +| Error | Cause | Fix | +|------------------------|-----------------------------|------------------------------| +| `itemNotFound` | Path does not exist | Create parent folders first | +| `nameAlreadyExists` | File/folder already exists | Use `@microsoft.graph.conflictBehavior: "replace"` | +| `accessDenied` | Insufficient permissions | Check app registration perms | +| `activityLimitReached` | Too many requests | Back off and retry | +| `invalidRange` | Bad upload chunk range | Restart upload session | diff --git a/bates-enhance/integrations/m365/workspace-additions/refs/planner-todo.md b/bates-enhance/integrations/m365/workspace-additions/refs/planner-todo.md new file mode 100644 index 0000000..92d7d6b --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/refs/planner-todo.md @@ -0,0 +1,152 @@ +# Microsoft Planner / To-Do Reference + +## Overview + +Microsoft Planner and To-Do are task management services accessible via +the Graph API through the ms365-assistant MCP server. + +- **Planner** — team-level task boards associated with Microsoft 365 Groups +- **To-Do** — personal task lists + +--- + +## Planner + +### List plans + +``` +list-planner-plans +``` + +Returns all Planner plans the assistant has access to. Each plan has: +- `id` — plan ID +- `title` — plan name +- `owner` — the group ID that owns the plan + +### List tasks in a plan + +``` +list-planner-tasks planId="PLAN_ID" +``` + +Returns tasks with: +- `id` — task ID +- `title` — task title +- `bucketId` — which bucket/column the task is in +- `percentComplete` — 0, 50, or 100 +- `priority` — 0 (urgent) to 9 (low), default 5 +- `dueDateTime` — ISO 8601 due date +- `assignments` — object mapping user IDs to assignment info +- `createdDateTime` — when the task was created + +### List buckets + +``` +list-planner-buckets planId="PLAN_ID" +``` + +Buckets are the columns on the Planner board (e.g., "To Do", "In Progress", "Done"). + +### Create a task + +``` +create-task planId="PLAN_ID" title="Review quarterly report" bucketId="BUCKET_ID" dueDateTime="2026-02-20" priority=3 +``` + +### Update a task + +``` +update-task taskId="TASK_ID" percentComplete=100 +update-task taskId="TASK_ID" title="Updated title" priority=1 +update-task taskId="TASK_ID" dueDateTime="2026-02-25" +``` + +### Priority levels + +| Value | Label | +|-------|----------| +| 0 | Urgent | +| 1 | Important| +| 3 | Medium | +| 5 | Low | +| 9 | Deferred | + +### Task completion + +| percentComplete | Meaning | +|-----------------|-------------| +| 0 | Not started | +| 50 | In progress | +| 100 | Completed | + +### Assign a task + +``` +update-task taskId="TASK_ID" assignments='{"{{USER_ID}}": {"orderHint": " !"}}' +``` + +--- + +## To-Do + +### List task lists + +``` +list-todo-lists +``` + +Returns personal task lists: +- `id` — list ID +- `displayName` — list name +- `isOwner` — whether the assistant owns this list + +### List tasks in a list + +``` +list-todo-tasks listId="LIST_ID" +``` + +Returns tasks with: +- `id` — task ID +- `title` — task title +- `status` — `notStarted`, `inProgress`, `completed`, `deferred` +- `importance` — `low`, `normal`, `high` +- `dueDateTime` — due date object with `dateTime` and `timeZone` +- `body` — task body/notes +- `reminderDateTime` — reminder date + +### Create a To-Do task + +``` +create-todo-task listId="LIST_ID" title="Follow up with client" importance="high" dueDateTime='{"dateTime": "2026-02-20T09:00:00", "timeZone": "{{USER_TZ}}"}' +``` + +### Update a To-Do task + +``` +update-todo-task listId="LIST_ID" taskId="TASK_ID" status="completed" +update-todo-task listId="LIST_ID" taskId="TASK_ID" importance="high" +``` + +--- + +## Common Patterns + +### Morning task review + +1. `list-planner-plans` to get all plans +2. For each plan, `list-planner-tasks` with filter for overdue or due today +3. `list-todo-lists` then `list-todo-tasks` for personal tasks +4. Compile into prioritized summary + +### Mark task complete + +1. Find the task (by title search or list browsing) +2. `update-task taskId="..." percentComplete=100` (Planner) +3. Or `update-todo-task ... status="completed"` (To-Do) + +### Create follow-up task from email + +1. Read the email to understand the action item +2. Create a task with appropriate title, due date, and priority +3. Include the email subject or ID in the task body for reference diff --git a/bates-enhance/integrations/m365/workspace-additions/rules/daily-routine.md b/bates-enhance/integrations/m365/workspace-additions/rules/daily-routine.md new file mode 100644 index 0000000..b407b63 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/rules/daily-routine.md @@ -0,0 +1,80 @@ +# Daily Routine Rules + +## Morning Routine (8:00 - 9:30) + +### 1. Email triage (8:30) +- Check inbox for urgent or time-sensitive messages +- Flag emails requiring action today +- Identify emails that can be batched for later +- Note any emails from VIP senders (executives, key clients, partners) + +### 2. Calendar review (8:30) +- Review today's meetings and events +- Check for scheduling conflicts +- Identify meetings that need preparation materials +- Note any meetings with external participants + +### 3. Morning briefing (8:30) +- Compile the top 5 priorities for the day +- Include: urgent emails, upcoming meetings, overdue tasks, deadlines +- Deliver briefing to user via primary channel + +### 4. Draft preparation (9:00) +- Review flagged/starred emails from previous day +- Draft responses for emails that need replies +- Save drafts for user review + +--- + +## Midday Routine (11:00 - 14:00) + +### 5. Stale email check (11:00) +- Identify emails older than 3 days without a response +- List them with suggested actions (reply, delegate, archive) +- Escalate anything truly urgent + +### 6. Task review (9:00, 14:00) +- Review Planner and To-Do task lists +- Identify overdue items +- Suggest priority adjustments based on new information +- Update task status for completed items + +--- + +## Evening Routine (18:00 - 22:00) + +### 7. End-of-day review (18:00) +- Summarize what was accomplished today +- Flag items that need attention tomorrow +- Update observations with new learnings +- Note any patterns or recurring issues + +### 8. Cost review (22:00) +- Check today's API costs +- Compare with 7-day rolling average +- Alert if costs are above threshold + +--- + +## Proactive Behavior Guidelines + +### Do proactively: +- Flag urgent emails immediately (do not wait for cron) +- Warn about upcoming deadlines (24-48 hours ahead) +- Note scheduling conflicts as soon as they appear +- Surface relevant context before meetings (prep materials, related emails) +- Track email threads that have gone quiet + +### Do NOT proactively: +- Send emails without explicit approval +- Modify calendar events without asking +- Delete or archive emails +- Change task priorities without consulting the user +- Interrupt the user for low-priority items during focus time + +### Prioritization framework +When multiple items compete for attention: +1. Time-critical items (meetings starting soon, deadlines today) +2. People-critical items (VIP senders, escalations) +3. Impact-critical items (revenue, legal, compliance) +4. Routine items (status updates, newsletters, FYIs) diff --git a/bates-enhance/integrations/m365/workspace-additions/rules/email-drafting.md b/bates-enhance/integrations/m365/workspace-additions/rules/email-drafting.md new file mode 100644 index 0000000..b168652 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/rules/email-drafting.md @@ -0,0 +1,150 @@ +# Email Drafting Rules + +## Core Principle + +**Always draft first, never send without review** — unless the user +explicitly says "send it" or "go ahead and send." + +--- + +## Drafting Workflow + +### Step 1: Create the draft +- Use `create-draft` via ms365-assistant +- Include subject, body, and recipients +- Save as a draft in the Drafts folder + +### Step 2: Present for review +- Show the user: recipients, subject, and a summary of the body +- Ask: "Ready to send, or would you like changes?" + +### Step 3: Send after approval +- Only send after explicit user confirmation +- Use `send-mail` with the draft message ID + +### Exception: Pre-approved templates +If the user has pre-approved a specific response pattern (e.g., "always +confirm receipt of invoices"), drafting can be skipped. Document these +exceptions in observations. + +--- + +## Tone Matching + +### External communications +- **Formal**: proper greeting, full sentences, professional sign-off +- Match the formality level of the incoming email +- When in doubt, err on the side of more formal +- Include the assistant's signature block + +### Internal communications +- **Casual but professional**: can use first names, shorter sentences +- Match the team's communication style +- Skip formal greetings for ongoing threads + +### Tone signals to detect +| Signal | Tone | +|----------------------------|-------------| +| "Dear Mr./Ms." | Very formal | +| "Hi [Name]," | Professional| +| "Hey," | Casual | +| No greeting | Brief/busy | +| Emojis in body | Informal | + +### Reply tone rule +Always match or be slightly more formal than the incoming message. +Never be significantly more casual than the sender. + +--- + +## Reply vs. Reply-All Guidelines + +### Use Reply (to sender only) when: +- The response is only relevant to the sender +- You are asking a clarifying question +- The response contains sensitive information +- The thread has many CC recipients who do not need the update + +### Use Reply-All when: +- The response contains information everyone needs +- You are answering a question asked to the group +- The user explicitly says "reply all" +- Status updates or deliverables the whole team should see + +### When uncertain +Default to Reply (not Reply-All). It is better to under-share than to +spam a thread. The user can always forward if needed. + +--- + +## Subject Line Conventions + +### New emails +- Keep under 60 characters +- Lead with the action or topic: "Q4 Report — Review by Friday" +- Use prefixes sparingly: "FYI:", "Action:", "Urgent:" (only when truly urgent) + +### Replies +- Keep the original subject line (RE: ...) +- Do NOT modify the subject unless the topic has changed +- If the topic changes significantly, start a new thread + +### Forwarding +- Keep the original subject (FW: ...) +- Add context at the top of the body, not in the subject + +--- + +## Signature Handling + +- The assistant has its own email signature configured in Exchange +- Do NOT manually add a signature to drafts (Exchange appends it) +- If the user asks to customize the signature, direct them to Exchange settings + +--- + +## Transport Rule Compliance + +### Approved recipients +The assistant email is restricted by an Exchange transport rule to send +only to approved recipients. This is a safety guardrail. + +### Before sending, verify: +1. All recipients are on the approved list +2. No BCC recipients that might bypass the transport rule +3. No distribution lists that expand to unapproved addresses + +### If a recipient is not approved: +- Inform the user: "I cannot send to [address] — it is not on the approved list." +- Suggest: the user sends from their own account, or adds the recipient to the approved list + +--- + +## Attachment Rules + +### Including attachments +- Reference attachments in the body: "Please find attached..." +- Verify the attachment exists and is the correct file before sending +- For large files (> 10 MB), prefer sharing a OneDrive link instead + +### OneDrive links vs. attachments +| Size | Method | +|------------|-----------------| +| < 5 MB | Direct attachment| +| 5-25 MB | Either works | +| > 25 MB | OneDrive link | + +--- + +## Quality Checklist + +Before presenting a draft to the user: + +- [ ] Recipients are correct (To, CC, BCC) +- [ ] Subject line is clear and concise +- [ ] Tone matches the context +- [ ] No spelling or grammar errors +- [ ] Attachments are referenced and included +- [ ] Reply threading is correct (reply vs. new message) +- [ ] All recipients are on the approved list +- [ ] No confidential information sent to wrong audience diff --git a/bates-enhance/integrations/m365/workspace-additions/rules/proactive-checkins.md b/bates-enhance/integrations/m365/workspace-additions/rules/proactive-checkins.md new file mode 100644 index 0000000..2212f56 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/rules/proactive-checkins.md @@ -0,0 +1,115 @@ +# Proactive Check-in Rules + +## Scoring System + +Before sending a proactive check-in, calculate a notification score: + +``` +Score = Urgency + Impact - Noise +``` + +**Only notify if Score >= 5.** + +### Urgency (0-5) + +| Value | Criteria | +|-------|-------------------------------------------------------| +| 5 | Immediate action required (< 1 hour) | +| 4 | Action required today | +| 3 | Action required this week | +| 2 | Upcoming deadline (next week) | +| 1 | General awareness / FYI | +| 0 | No time pressure | + +### Impact (0-5) + +| Value | Criteria | +|-------|-------------------------------------------------------| +| 5 | Revenue, legal, or compliance implications | +| 4 | Affects external stakeholders (clients, partners) | +| 3 | Affects team or project delivery | +| 2 | Affects personal productivity | +| 1 | Minor convenience | +| 0 | No meaningful impact | + +### Noise (-3 to 0) + +| Value | Criteria | +|-------|-------------------------------------------------------| +| 0 | First notification on this topic today | +| -1 | Second notification on same topic today | +| -2 | User has already acknowledged this topic | +| -3 | User explicitly said "stop" or "not now" on topic | + +--- + +## Email Triggers + +### Immediate notification (Urgency 5) +- Subject contains: "urgent", "ASAP", "emergency", "critical", "action required" +- From a VIP sender AND flagged as high importance +- Reply to a thread the user started with no response in 24h+ from external party + +### Same-day notification (Urgency 4) +- From a VIP sender (executives, key clients — see observations) +- Contains deadline language: "by EOD", "by end of day", "today" +- Calendar invite requiring response (accept/decline) +- Email thread with 3+ unread replies (active discussion happening without user) + +### Awareness notification (Urgency 2-3) +- Emails mentioning the user by name (but not addressed to them) +- Automated alerts from monitored systems +- Invoices or receipts above a threshold amount + +### Do NOT notify +- Marketing emails, newsletters +- Automated notifications already handled by other systems +- CC-only emails with no action required +- Duplicate notifications (same thread, already notified) + +--- + +## Calendar Triggers + +### Immediate notification (Urgency 5) +- Meeting starts in < 15 minutes AND user hasn't responded to invite +- Double-booking detected with external participants + +### Same-day notification (Urgency 4) +- Meeting in < 2 hours that needs preparation materials +- Meeting organizer sent pre-read materials +- Attendee cancellation on a meeting the user organized + +### Awareness notification (Urgency 2-3) +- New meeting invite for this week +- Meeting rescheduled +- Recurring meeting cancelled + +--- + +## Delivery Rules + +### Channel selection +- Use the primary delivery channel configured in cron jobs +- For Score >= 8: consider multi-channel (chat + email summary) +- Never wake the user between 22:00 and 07:00 (respect quiet hours) + +### Message format +- Lead with the action needed, not the source +- Include enough context to decide without opening the email +- Example: "Jane from Acme needs your sign-off on the SOW by EOD. Reply or I can draft an acknowledgment." + +### Batching +- If multiple items arrive within a 10-minute window, batch them +- Present as a numbered list sorted by score (highest first) +- Exception: Score >= 8 items always send immediately + +--- + +## Learning and Adaptation + +- Track which notifications the user acts on vs. ignores +- After 2 weeks, review notification patterns in observations +- Adjust VIP sender list based on interaction frequency +- Raise noise penalty for topics the user consistently ignores +- Lower notification threshold for topics the user consistently acts on quickly diff --git a/bates-enhance/integrations/m365/workspace-additions/skills/calendar-unified/SKILL.md b/bates-enhance/integrations/m365/workspace-additions/skills/calendar-unified/SKILL.md new file mode 100644 index 0000000..8471f7b --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/skills/calendar-unified/SKILL.md @@ -0,0 +1,102 @@ +# Skill: Unified Calendar View + +## Trigger + +User asks about their schedule, calendar, or availability. Examples: +- "What's on my calendar today?" +- "Am I free Thursday afternoon?" +- "Show me next week's schedule" +- "When is my next meeting with Jane?" +- "Find a time slot for a 1-hour meeting this week" + +## Inputs + +- **date_range**: The time period to display. Default: today +- **filter**: Optional filter (person, keyword, type) +- **action**: view / find-slot / check-availability + +## Steps + +### 1. Determine the date range + +Parse the user's request into a concrete date range: +- "today" -> today 00:00 to 23:59 +- "tomorrow" -> tomorrow 00:00 to 23:59 +- "this week" -> Monday to Friday of current week +- "next week" -> Monday to Friday of next week +- Specific date -> that day 00:00 to 23:59 + +### 2. Pull events from personal calendar + +``` +list-calendar-events startDateTime="" endDateTime="" +``` + +### 3. Pull events from company calendar (if configured) + +If ms365-company-reader is available: + +``` +# Via company reader +list-calendar-events startDateTime="" endDateTime="" +``` + +### 4. Merge and deduplicate + +Combine events from all sources: +- Deduplicate by subject + time (same event appearing in multiple calendars) +- Mark the source calendar for each event +- Sort by start time + +### 5. Present the unified view + +#### For "view" action: + +```markdown +## Schedule for {{DATE}} + +| Time | Event | Location | Calendar | +|---------------|--------------------------|--------------|----------| +| 09:00 - 09:30 | Team standup | Teams call | Personal | +| 10:00 - 11:00 | Client review | Room 3A | Company | +| 13:00 - 14:00 | Lunch with Jane | The Bistro | Personal | +| 15:00 - 15:30 | 1:1 with Manager | Teams call | Personal | +``` + +Include: +- Free time blocks (gaps > 30 minutes) +- All-day events at the top +- Travel time if location changes between meetings + +#### For "find-slot" action: + +Find available time slots matching the requested duration: +- List all free blocks of sufficient length +- Prefer morning slots if no preference stated +- Avoid fragmenting existing focus time blocks +- Consider buffer time between meetings (15 min default) + +#### For "check-availability" action: + +Simply report whether the requested time is free or occupied: +- "You're free Thursday 14:00-15:00" +- "Thursday 14:00 is blocked by 'Client review' (14:00-15:30)" + +### 6. Offer follow-up actions + +Depending on context: +- "Want me to schedule something in that slot?" +- "Should I send a meeting invite?" +- "Want me to decline this meeting?" +- "Need me to find an alternative time?" + +## Output + +A formatted calendar view, available time slots, or availability check +response, with follow-up action options. + +## Error handling + +- If one calendar source fails, show available data with a note +- If no events found, confirm the date range and report "no events scheduled" +- For ambiguous dates, ask the user to clarify diff --git a/bates-enhance/integrations/m365/workspace-additions/skills/efficiency-audit/SKILL.md b/bates-enhance/integrations/m365/workspace-additions/skills/efficiency-audit/SKILL.md new file mode 100644 index 0000000..82ec16e --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/skills/efficiency-audit/SKILL.md @@ -0,0 +1,142 @@ +# Skill: Efficiency Audit + +## Trigger + +On-demand when user asks for an efficiency or productivity audit. Examples: +- "How efficient am I with email?" +- "Run an efficiency audit" +- "Analyze my response times" +- "Where am I losing time?" + +## Inputs + +- **period**: Analysis period. Default: last 30 days +- **focus**: What to analyze (email / tasks / calendar / all). Default: all + +## Steps + +### 1. Email efficiency analysis + +#### Response time analysis + +Search sent messages for the analysis period: + +``` +list-mail-messages filter="sentDateTime ge " top=200 +``` + +For each sent reply, find the original message and calculate response time. +Categorize: +- < 1 hour: fast +- 1-4 hours: normal +- 4-24 hours: slow +- > 24 hours: delayed +- No response: dropped + +#### Email volume analysis + +``` +list-mail-messages filter="receivedDateTime ge " top=500 +``` + +Calculate: +- Emails received per day (average) +- Emails sent per day (average) +- Ratio of sent to received +- Peak email hours +- Top senders (by volume) + +#### Thread analysis + +Identify: +- Longest email threads (most back-and-forth) +- Threads with most participants +- Threads that could have been resolved faster + +### 2. Task efficiency analysis + +For each Planner plan: + +``` +list-planner-tasks planId="" +``` + +Calculate: +- Average time from creation to completion +- Tasks completed on time vs. overdue +- Tasks that sat in "In Progress" for > 5 days +- Tasks that were created and completed same day +- Tasks that have been open for > 14 days + +### 3. Calendar efficiency analysis + +``` +list-calendar-events startDateTime="" endDateTime="" +``` + +Calculate: +- Total hours in meetings per week +- Average meeting duration +- Meetings with > 5 attendees (potential "could be an email") +- Back-to-back meeting streaks +- Focus time blocks (2+ hours without meetings) +- Recurring meetings percentage + +### 4. Identify bottlenecks + +Based on the analysis, identify: +- **Email bottlenecks**: senders or threads consuming disproportionate time +- **Task bottlenecks**: tasks stuck in progress, dependencies blocking others +- **Calendar bottlenecks**: overloaded days, lack of focus time +- **Response gaps**: areas where response times are consistently slow + +### 5. Generate recommendations + +Produce actionable recommendations: +- Emails to unsubscribe from or filter +- Meetings to decline or shorten +- Tasks to delegate or defer +- Time blocks to protect for focus work +- Communication patterns to change + +### 6. Compile the audit report + +```markdown +# Efficiency Audit — {{PERIOD}} + +## Email +- Avg response time: X hours +- Volume: X received / X sent per day +- Response rate: X% +- Top time sinks: [list] + +## Tasks +- Avg completion time: X days +- On-time rate: X% +- Currently overdue: X tasks +- Longest open: [task name] (X days) + +## Calendar +- Meeting hours/week: X +- Focus time/week: X hours +- Meetings that could be emails: X + +## Top Recommendations +1. [Most impactful suggestion] +2. [Second suggestion] +3. [Third suggestion] + +## Detailed Findings +[Full analysis with charts/tables] +``` + +## Output + +A structured efficiency audit report with metrics, bottleneck analysis, +and actionable recommendations. + +## Error handling + +- If data is insufficient for meaningful analysis, note the minimum period needed +- If specific data sources are unavailable, analyze what is available +- Always provide at least qualitative observations even with limited data diff --git a/bates-enhance/integrations/m365/workspace-additions/skills/email-file-search/SKILL.md b/bates-enhance/integrations/m365/workspace-additions/skills/email-file-search/SKILL.md new file mode 100644 index 0000000..acb77a7 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/skills/email-file-search/SKILL.md @@ -0,0 +1,94 @@ +# Skill: Email & File Search + +## Trigger + +User asks to find an email, attachment, document, or file. Examples: +- "Find the email from Jane about the budget" +- "Search for the quarterly report PDF" +- "Did anyone send me an invoice this week?" +- "Find the SOW in OneDrive" + +## Inputs + +- **query**: The search term or description of what to find +- **scope**: Where to search (email, files, or both). Default: both +- **date_range**: Optional date constraint (e.g., "this week", "last month") +- **sender**: Optional sender filter + +## Steps + +### 1. Determine search scope + +Based on the user's request, decide whether to search: +- Emails only (mentions "email", "message", "sent", "received") +- Files only (mentions "file", "document", "OneDrive", "drive") +- Both (ambiguous or mentions both) + +### 2. Search emails (if in scope) + +Use ms365-reader to search emails: + +``` +list-mail-messages search='""' top=20 +``` + +If a sender is specified: +``` +list-mail-messages search='"from: "' +``` + +If a date range is specified, add a filter: +``` +list-mail-messages search='""' filter="receivedDateTime ge 2026-01-01" +``` + +### 3. Search OneDrive files (if in scope) + +Use ms365-reader to search files: + +``` +list-drive-items search="" +``` + +Or browse known locations: +``` +list-drive-items path="drafts/documents/" +list-drive-items path="drafts/reports/" +``` + +### 4. Search local search index (if available) + +If the search index is available, query it for broader results: + +```bash +python3 -c " +import sqlite3, json +conn = sqlite3.connect('{{SEARCH_INDEX_DB}}') +cur = conn.execute(\"SELECT id, subject, sender, date FROM emails_fts WHERE emails_fts MATCH ? LIMIT 20\", ['']) +print(json.dumps([dict(zip(['id','subject','sender','date'], r)) for r in cur.fetchall()])) +" +``` + +### 5. Present results + +Format results as a clear list: +- For emails: sender, subject, date, snippet +- For files: name, path, last modified, size +- Sort by relevance (most recent first for ties) +- Indicate which source each result came from + +### 6. Offer follow-up actions + +- "Want me to open any of these?" +- "Should I download the attachment?" +- "Want me to draft a reply?" + +## Output + +A formatted list of search results with source indicators and follow-up options. + +## Error handling + +- If ms365-reader is unavailable, fall back to search index only +- If no results found, suggest broadening the search terms +- If too many results, suggest narrowing with date range or sender filter diff --git a/bates-enhance/integrations/m365/workspace-additions/skills/managers-report/SKILL.md b/bates-enhance/integrations/m365/workspace-additions/skills/managers-report/SKILL.md new file mode 100644 index 0000000..3ef20c3 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/skills/managers-report/SKILL.md @@ -0,0 +1,110 @@ +# Skill: Manager's Report + +## Trigger + +Weekly cron job (Friday 16:00) or on-demand when user asks for a +manager's report. Examples: +- "Compile the weekly report" +- "Manager's update for this week" +- "Weekly summary for leadership" + +## Inputs + +- **period**: The reporting period. Default: current week (Monday-Friday) +- **format**: Output format (chat / email-draft / document). Default: chat +- **include_metrics**: Whether to include quantitative metrics. Default: true + +## Steps + +### 1. Gather metrics from all projects + +For each tracked project: + +``` +list-planner-tasks planId="" +``` + +Calculate: +- Tasks completed this week +- Tasks added this week +- Net task change (completed minus added) +- Overdue task count +- Completion rate (completed / total open at week start) + +### 2. Review email activity + +Search for key email threads from this week: + +``` +list-mail-messages filter="receivedDateTime ge " top=100 +``` + +Identify: +- Key decisions made via email +- Important external communications +- Escalations or issues raised + +### 3. Review calendar (meetings and events) + +``` +list-calendar-events startDateTime="" endDateTime="" +``` + +Note: +- Key meetings held and their outcomes (if noted in observations) +- Meetings scheduled for next week that need prep + +### 4. Check observations for achievements + +Review recent observation entries for: +- Completed milestones +- Resolved blockers +- Process improvements +- Learnings + +### 5. Compile the report + +Structure: + +```markdown +# Weekly Report — Week of {{DATE}} + +## Key Achievements +- [Bullet list of top 3-5 accomplishments] + +## Metrics +| Project | Tasks Done | Tasks Open | Overdue | Status | +|---------|-----------|------------|---------|--------| +| ... | ... | ... | ... | ... | + +## Issues & Blockers +- [Any unresolved issues, with proposed resolution] + +## Key Decisions +- [Decisions made this week and their context] + +## Plan for Next Week +- [Top priorities for next week] +- [Key meetings or deadlines] + +## Risks +- [Any emerging risks or concerns] +``` + +### 6. Deliver the report + +Based on `format`: +- **chat**: Send via primary delivery channel +- **email-draft**: Create a draft email with the report content +- **document**: Upload to OneDrive at `drafts/reports/weekly/` + +## Output + +A structured weekly manager's report with metrics, achievements, issues, +and plan. + +## Error handling + +- If Planner data is unavailable, note it and compile from email/calendar only +- If no observations exist for the period, note "no recorded observations" +- Always produce a report even if some data sources are incomplete diff --git a/bates-enhance/integrations/m365/workspace-additions/skills/project-brief/SKILL.md b/bates-enhance/integrations/m365/workspace-additions/skills/project-brief/SKILL.md new file mode 100644 index 0000000..d7a04d0 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/skills/project-brief/SKILL.md @@ -0,0 +1,93 @@ +# Skill: Project Brief + +## Trigger + +User asks for a project status, update, or brief. Examples: +- "What's the status of Project Alpha?" +- "Give me a brief on the website redesign" +- "Project update for the Q1 launch" +- "How is the migration project going?" + +## Inputs + +- **project_name**: The name or identifier of the project +- **depth**: How detailed the brief should be (quick / standard / deep). Default: standard + +## Steps + +### 1. Gather project context from observations + +Check observations for any stored project context: +- Project team members +- Key milestones and deadlines +- Previous status notes +- Related Planner plan IDs + +### 2. Search recent emails + +Search for project-related emails from the last 7 days: + +``` +list-mail-messages search='""' top=30 +``` + +Filter for the most relevant: +- Emails to/from project team members +- Status update emails +- Emails with action items or decisions + +### 3. Check Planner tasks + +If a Planner plan is associated with the project: + +``` +list-planner-tasks planId="" +``` + +Summarize: +- Total tasks, completed vs. open +- Overdue tasks +- Tasks due this week +- Recently completed tasks + +### 4. Check calendar events + +Look for recent and upcoming project meetings: + +``` +list-calendar-events filter="contains(subject, '')" startDateTime="..." endDateTime="..." +``` + +### 5. Compile the brief + +**Quick brief** (1-2 sentences): +- Overall status (on track / at risk / blocked) +- Next key milestone + +**Standard brief** (structured): +- **Status**: on track / at risk / blocked +- **Recent activity**: key emails, completed tasks, meetings +- **Open items**: count of open tasks, overdue items +- **Blockers**: anything preventing progress +- **Next steps**: upcoming milestones, due dates + +**Deep brief** (comprehensive): +- Everything in standard, plus: +- Full email thread summaries +- Task-by-task breakdown +- Risk analysis +- Recommendations + +### 6. Update observations + +Store the current project status in observations for future reference. + +## Output + +A structured project brief matching the requested depth level. + +## Error handling + +- If no Planner plan found, skip task section and note it +- If no emails found, note "no recent email activity" +- If project name is ambiguous, ask for clarification diff --git a/bates-enhance/integrations/m365/workspace-additions/skills/project-sync/SKILL.md b/bates-enhance/integrations/m365/workspace-additions/skills/project-sync/SKILL.md new file mode 100644 index 0000000..e0bc102 --- /dev/null +++ b/bates-enhance/integrations/m365/workspace-additions/skills/project-sync/SKILL.md @@ -0,0 +1,101 @@ +# Skill: Project Sync + +## Trigger + +Scheduled (via cron) or on-demand when user asks to sync project data. +Examples: +- "Sync all project boards" +- "Update project tracking" +- Triggered by `project-staleness-check` cron job + +## Inputs + +- **scope**: Which projects to sync (all / specific project name). Default: all +- **update_observations**: Whether to update observation files. Default: true + +## Steps + +### 1. Load known projects + +Read the project list from observations: +- Project names +- Associated Planner plan IDs +- Team members +- Key repositories (if any) + +### 2. Sync Planner boards + +For each project with a Planner plan: + +``` +list-planner-plans +``` + +For each plan: + +``` +list-planner-tasks planId="" +list-planner-buckets planId="" +``` + +Collect: +- Task counts by bucket (To Do, In Progress, Done) +- Overdue tasks +- Tasks completed since last sync +- New tasks since last sync + +### 3. Sync email activity + +For each project, search recent emails: + +``` +list-mail-messages search='""' filter="receivedDateTime ge " top=50 +``` + +Summarize: +- Number of new emails +- Key threads and topics +- Any urgent items + +### 4. Sync calendar events + +Check for upcoming project meetings: + +``` +list-calendar-events filter="contains(subject, '')" +``` + +Note: +- Next scheduled meeting +- Any cancelled or rescheduled meetings + +### 5. Check for staleness + +A project is considered stale if: +- No Planner task updates in 7+ days +- No related emails in 7+ days +- No commits in associated repos in 7+ days (if repo is tracked) + +Flag stale projects for attention. + +### 6. Update observations + +If `update_observations` is true, update the project observation files with: +- Current task counts and status +- Last sync timestamp +- Staleness flags +- Key changes since last sync + +## Output + +A sync summary for each project: +- Task status snapshot +- Recent activity count +- Staleness indicator +- Any items requiring attention + +## Error handling + +- If a Planner plan is inaccessible, log warning and continue with other projects +- If email search fails, note the gap and continue +- Never fail the entire sync due to one project's error diff --git a/bates-enhance/integrations/search/config-fragment.json b/bates-enhance/integrations/search/config-fragment.json new file mode 100644 index 0000000..2ed8976 --- /dev/null +++ b/bates-enhance/integrations/search/config-fragment.json @@ -0,0 +1,9 @@ +{ + "features": { + "searchIndex": { + "enabled": true, + "dbPath": "~/.openclaw/search-index/db/search.db", + "embeddingModel": "nomic-embed-text" + } + } +} diff --git a/bates-enhance/integrations/search/cron-jobs-search.json b/bates-enhance/integrations/search/cron-jobs-search.json new file mode 100644 index 0000000..4dda3ad --- /dev/null +++ b/bates-enhance/integrations/search/cron-jobs-search.json @@ -0,0 +1,9 @@ +[ + { + "name": "search-index-monitor", + "schedule": "0 */2 * * *", + "tz": "{{USER_TZ}}", + "message": "Check search index health: document count, last sync time, errors. Report issues only.", + "sessionTarget": "isolated" + } +] diff --git a/bates-enhance/integrations/search/requirements.txt b/bates-enhance/integrations/search/requirements.txt new file mode 100644 index 0000000..ee49b80 --- /dev/null +++ b/bates-enhance/integrations/search/requirements.txt @@ -0,0 +1,7 @@ +httpx>=0.24.0 +numpy>=1.24.0 +sqlite-utils>=3.30 +pyyaml>=6.0 +tqdm>=4.65.0 +python-dateutil>=2.8.2 +tiktoken>=0.5.0 diff --git a/bates-enhance/integrations/search/scripts/ingest-email.py b/bates-enhance/integrations/search/scripts/ingest-email.py new file mode 100755 index 0000000..0f3fa3f --- /dev/null +++ b/bates-enhance/integrations/search/scripts/ingest-email.py @@ -0,0 +1,446 @@ +#!/usr/bin/env python3 +""" +ingest-email.py -- Email ingestion for Bates local search index + +Usage: + ingest-email.py --incremental # Sync new emails since last run + ingest-email.py --bulk # Full re-sync + ingest-email.py --stagger-phase N # Sync specific phase (1-5) + ingest-email.py --resume # Resume interrupted sync + ingest-email.py --backfill-attachments # Download attachment text + +Reads config from ~/.openclaw/search-index/config.yaml +Stores data in SQLite FTS5 database with WAL mode. +""" + +import argparse +import json +import logging +import os +import sqlite3 +import subprocess +import sys +import time +from datetime import datetime, timedelta, timezone +from pathlib import Path + +import httpx +import yaml +from tqdm import tqdm + +# --------------------------------------------------------------------------- +# Paths and defaults +# --------------------------------------------------------------------------- +CONFIG_PATH = Path.home() / ".openclaw" / "search-index" / "config.yaml" +DEFAULT_DB_PATH = Path.home() / ".openclaw" / "search-index" / "db" / "search.db" +OLLAMA_ENDPOINT = "http://localhost:11434" +EMBEDDING_MODEL = "nomic-embed-text" +BATCH_SIZE = 50 + +# --------------------------------------------------------------------------- +# Logging +# --------------------------------------------------------------------------- +log_dir = Path.home() / ".openclaw" / "search-index" / "logs" +log_dir.mkdir(parents=True, exist_ok=True) + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(message)s", + handlers=[ + logging.StreamHandler(sys.stderr), + logging.FileHandler(log_dir / "ingestion.log"), + ], +) +logger = logging.getLogger("ingest-email") + + +def load_config(): + """Load config.yaml and return parsed dict.""" + if not CONFIG_PATH.exists(): + logger.error("Config not found: %s", CONFIG_PATH) + sys.exit(1) + with open(CONFIG_PATH) as f: + return yaml.safe_load(f) + + +def get_db_path(config): + """Resolve database path from config, expanding ~.""" + raw = config.get("database", {}).get("path", str(DEFAULT_DB_PATH)) + return Path(os.path.expanduser(raw)) + + +def init_db(db_path): + """Create the database and tables if they don't exist.""" + db_path.parent.mkdir(parents=True, exist_ok=True) + conn = sqlite3.connect(str(db_path)) + conn.execute("PRAGMA journal_mode=WAL") + conn.execute("PRAGMA synchronous=NORMAL") + + # Main FTS5 virtual table for full-text search + conn.execute(""" + CREATE VIRTUAL TABLE IF NOT EXISTS documents USING fts5( + doc_id, + doc_type, + subject, + body, + sender, + recipients, + folder, + received_at, + source_server, + content='', + tokenize='porter unicode61' + ) + """) + + # Sync state tracking per folder per server + conn.execute(""" + CREATE TABLE IF NOT EXISTS sync_state ( + server TEXT NOT NULL, + folder_id TEXT NOT NULL, + folder_name TEXT, + last_sync TEXT, + last_id TEXT, + doc_count INTEGER DEFAULT 0, + phase INTEGER DEFAULT 1, + PRIMARY KEY (server, folder_id) + ) + """) + + # Embeddings stored as BLOBs (numpy arrays serialized) + conn.execute(""" + CREATE TABLE IF NOT EXISTS embeddings ( + doc_id TEXT PRIMARY KEY, + embedding BLOB NOT NULL, + model TEXT NOT NULL, + created_at TEXT NOT NULL + ) + """) + + # Metadata for tracking ingestion runs + conn.execute(""" + CREATE TABLE IF NOT EXISTS ingestion_runs ( + run_id INTEGER PRIMARY KEY AUTOINCREMENT, + started_at TEXT NOT NULL, + finished_at TEXT, + mode TEXT NOT NULL, + phase INTEGER, + docs_added INTEGER DEFAULT 0, + docs_failed INTEGER DEFAULT 0, + status TEXT DEFAULT 'running' + ) + """) + + conn.commit() + return conn + + +def call_mcp(server, tool, params=None): + """Call an MCP server tool via mcporter and return parsed JSON.""" + cmd = ["mcporter", "call", server, tool] + if params: + cmd.append(json.dumps(params)) + try: + result = subprocess.run( + cmd, capture_output=True, text=True, timeout=120 + ) + if result.returncode != 0: + logger.error( + "mcporter call %s %s failed: %s", server, tool, result.stderr.strip() + ) + return None + return json.loads(result.stdout) if result.stdout.strip() else None + except subprocess.TimeoutExpired: + logger.error("mcporter call %s %s timed out", server, tool) + return None + except json.JSONDecodeError: + logger.error("mcporter call %s %s returned invalid JSON", server, tool) + return None + + +def get_folders(server): + """Retrieve mail folders from an MCP server.""" + result = call_mcp(server, "list-mail-folders", {}) + if not result: + return [] + # Normalize: the response may be a list or have a 'value' key + if isinstance(result, list): + return result + return result.get("value", result.get("folders", [])) + + +def get_messages(server, folder_id=None, top=50, skip=0, since=None): + """Retrieve mail messages from an MCP server with pagination.""" + params = {"top": top, "skip": skip} + if folder_id: + params["folderId"] = folder_id + if since: + params["filter"] = f"receivedDateTime ge {since}" + # Try folder-specific tool first, fall back to general + tool = "list-mail-folder-messages" if folder_id else "list-mail-messages" + if not folder_id: + # General search does not use folderId + params.pop("folderId", None) + result = call_mcp(server, tool, params) + if not result: + return [] + if isinstance(result, list): + return result + return result.get("value", result.get("messages", [])) + + +def generate_embedding(text, config): + """Generate an embedding vector via Ollama API.""" + endpoint = config.get("embedding", {}).get("endpoint", OLLAMA_ENDPOINT) + model = config.get("embedding", {}).get("model", EMBEDDING_MODEL) + # Truncate to avoid excessive token usage + text = text[:8000] + try: + resp = httpx.post( + f"{endpoint}/api/embeddings", + json={"model": model, "prompt": text}, + timeout=30.0, + ) + resp.raise_for_status() + data = resp.json() + return data.get("embedding") + except Exception as e: + logger.warning("Embedding generation failed: %s", e) + return None + + +def store_document(conn, doc, server, folder_name, config): + """Store a single email document in FTS5 and generate its embedding.""" + import numpy as np + + doc_id = doc.get("id", doc.get("internetMessageId", "")) + if not doc_id: + return False + + # Check for duplicates + existing = conn.execute( + "SELECT doc_id FROM documents WHERE doc_id = ?", (doc_id,) + ).fetchone() + if existing: + return False + + subject = doc.get("subject", "") + body_preview = doc.get("bodyPreview", doc.get("body", {}).get("content", "")) + sender_obj = doc.get("from", {}).get("emailAddress", {}) + sender = f"{sender_obj.get('name', '')} <{sender_obj.get('address', '')}>" + recipients_list = doc.get("toRecipients", []) + recipients = "; ".join( + r.get("emailAddress", {}).get("address", "") for r in recipients_list + ) + received = doc.get("receivedDateTime", "") + + # Insert into FTS5 + conn.execute( + "INSERT INTO documents(doc_id, doc_type, subject, body, sender, recipients, folder, received_at, source_server) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", + (doc_id, "email", subject, body_preview, sender, recipients, folder_name, received, server), + ) + + # Generate and store embedding + embed_text = f"{subject}\n{sender}\n{body_preview}" + embedding = generate_embedding(embed_text, config) + if embedding: + embedding_blob = np.array(embedding, dtype=np.float32).tobytes() + conn.execute( + "INSERT OR REPLACE INTO embeddings(doc_id, embedding, model, created_at) " + "VALUES (?, ?, ?, ?)", + (doc_id, embedding_blob, config.get("embedding", {}).get("model", EMBEDDING_MODEL), + datetime.now(timezone.utc).isoformat()), + ) + + return True + + +def get_phase_folders(folders, phase, server): + """Filter folders based on stagger phase.""" + if phase >= 5: + return folders + inbox_names = {"inbox", "Inbox", "INBOX"} + if phase == 1: + return [f for f in folders if f.get("displayName", "") in inbox_names] + if phase == 2: + # All personal folders + return folders + # Phase 3+ includes company mailboxes (handled at server level) + return folders + + +def get_sync_timestamp(conn, server, folder_id): + """Get the last sync timestamp for a server/folder pair.""" + row = conn.execute( + "SELECT last_sync FROM sync_state WHERE server = ? AND folder_id = ?", + (server, folder_id), + ).fetchone() + return row[0] if row else None + + +def update_sync_state(conn, server, folder_id, folder_name, doc_count, phase): + """Update sync state after processing a folder.""" + now = datetime.now(timezone.utc).isoformat() + conn.execute( + "INSERT OR REPLACE INTO sync_state(server, folder_id, folder_name, last_sync, doc_count, phase) " + "VALUES (?, ?, ?, ?, ?, ?)", + (server, folder_id, folder_name, now, doc_count, phase), + ) + conn.commit() + + +def ingest_folder(conn, server, folder, config, phase, incremental=True): + """Ingest all messages from a single folder.""" + folder_id = folder.get("id", "") + folder_name = folder.get("displayName", "Unknown") + batch_size = config.get("sources", {}).get("email", {}).get("batch_size", BATCH_SIZE) + max_age = config.get("sources", {}).get("email", {}).get("max_age_days", 365) + + logger.info(" Syncing folder: %s (server: %s)", folder_name, server) + + since = None + if incremental: + since = get_sync_timestamp(conn, server, folder_id) + if not since and max_age: + cutoff = datetime.now(timezone.utc) - timedelta(days=max_age) + since = cutoff.isoformat() + + total_added = 0 + total_skipped = 0 + skip = 0 + + while True: + messages = get_messages(server, folder_id, top=batch_size, skip=skip, since=since) + if not messages: + break + + for msg in messages: + try: + added = store_document(conn, msg, server, folder_name, config) + if added: + total_added += 1 + else: + total_skipped += 1 + except Exception as e: + logger.warning("Failed to store message %s: %s", msg.get("id", "?"), e) + + conn.commit() + + if len(messages) < batch_size: + break + skip += batch_size + # Brief pause to avoid hammering the API + time.sleep(0.5) + + update_sync_state(conn, server, folder_id, folder_name, total_added, phase) + logger.info(" %s: +%d new, %d skipped (duplicates)", folder_name, total_added, total_skipped) + return total_added + + +def run_ingestion(config, mode, phase, resume=False): + """Main ingestion loop.""" + db_path = get_db_path(config) + conn = init_db(db_path) + + incremental = mode == "incremental" + effective_phase = phase or config.get("ingestion", {}).get("current_phase", 1) + + # Record this run + now = datetime.now(timezone.utc).isoformat() + cursor = conn.execute( + "INSERT INTO ingestion_runs(started_at, mode, phase, status) VALUES (?, ?, ?, 'running')", + (now, mode, effective_phase), + ) + run_id = cursor.lastrowid + conn.commit() + + logger.info("=== Ingestion run #%d: mode=%s, phase=%d ===", run_id, mode, effective_phase) + + email_cfg = config.get("sources", {}).get("email", {}) + servers = email_cfg.get("mcp_servers", []) + if not servers: + logger.error("No MCP servers configured in sources.email.mcp_servers") + conn.execute( + "UPDATE ingestion_runs SET finished_at = ?, status = 'error' WHERE run_id = ?", + (datetime.now(timezone.utc).isoformat(), run_id), + ) + conn.commit() + conn.close() + return + + total_docs = 0 + total_errors = 0 + max_retries = config.get("ingestion", {}).get("retry", {}).get("max_attempts", 3) + backoff = config.get("ingestion", {}).get("retry", {}).get("backoff_seconds", 60) + + for server in servers: + logger.info("Processing server: %s", server) + + for attempt in range(1, max_retries + 1): + try: + folders = get_folders(server) + if not folders: + logger.warning("No folders returned from %s (attempt %d/%d)", server, attempt, max_retries) + if attempt < max_retries: + time.sleep(backoff * attempt) + continue + break + break + except Exception as e: + logger.error("Error fetching folders from %s: %s (attempt %d/%d)", server, e, attempt, max_retries) + if attempt < max_retries: + time.sleep(backoff * attempt) + continue + else: + total_errors += 1 + continue + + phase_folders = get_phase_folders(folders, effective_phase, server) + logger.info(" Phase %d: %d folders to sync (of %d total)", effective_phase, len(phase_folders), len(folders)) + + for folder in tqdm(phase_folders, desc=f" {server}", unit="folder", file=sys.stderr): + try: + added = ingest_folder(conn, server, folder, config, effective_phase, incremental) + total_docs += added + except Exception as e: + logger.error("Error ingesting folder %s: %s", folder.get("displayName", "?"), e) + total_errors += 1 + + # Finalize run record + conn.execute( + "UPDATE ingestion_runs SET finished_at = ?, docs_added = ?, docs_failed = ?, status = ? WHERE run_id = ?", + (datetime.now(timezone.utc).isoformat(), total_docs, total_errors, + "complete" if total_errors == 0 else "partial", run_id), + ) + conn.commit() + conn.close() + + logger.info("=== Ingestion complete: %d docs added, %d errors ===", total_docs, total_errors) + + +def main(): + parser = argparse.ArgumentParser(description="Email ingestion for Bates local search index") + group = parser.add_mutually_exclusive_group() + group.add_argument("--incremental", action="store_true", help="Sync new emails since last run") + group.add_argument("--bulk", action="store_true", help="Full re-sync of all messages") + parser.add_argument("--stagger-phase", type=int, choices=[1, 2, 3, 4, 5], + help="Sync specific phase (1=inbox, 2=all personal, 3=company, 4=shared, 5=all)") + parser.add_argument("--resume", action="store_true", help="Resume interrupted sync") + parser.add_argument("--backfill-attachments", action="store_true", help="Download attachment text for existing docs") + parser.add_argument("--config", type=str, default=str(CONFIG_PATH), help="Path to config.yaml") + + args = parser.parse_args() + + config = load_config() + + if args.backfill_attachments: + logger.info("Attachment backfill not yet implemented") + sys.exit(0) + + mode = "bulk" if args.bulk else "incremental" + run_ingestion(config, mode, args.stagger_phase, resume=args.resume) + + +if __name__ == "__main__": + main() diff --git a/bates-enhance/integrations/search/scripts/rebuild-index.py b/bates-enhance/integrations/search/scripts/rebuild-index.py new file mode 100755 index 0000000..b31f254 --- /dev/null +++ b/bates-enhance/integrations/search/scripts/rebuild-index.py @@ -0,0 +1,222 @@ +#!/usr/bin/env python3 +""" +rebuild-index.py -- Drop and rebuild the FTS5 index from raw data + +This script is for recovery situations where the FTS5 index has become +corrupted or inconsistent. It: + 1. Reads all existing documents from the content tables + 2. Drops the FTS5 virtual table + 3. Recreates the FTS5 table with the same schema + 4. Re-inserts all documents + +Usage: + rebuild-index.py # Rebuild FTS5 index + rebuild-index.py --embeddings # Also regenerate all embeddings + rebuild-index.py --dry-run # Show what would be done without changes +""" + +import argparse +import json +import os +import sqlite3 +import sys +import time +from datetime import datetime, timezone +from pathlib import Path + +import httpx +import yaml +from tqdm import tqdm + +CONFIG_PATH = Path.home() / ".openclaw" / "search-index" / "config.yaml" +DEFAULT_DB_PATH = Path.home() / ".openclaw" / "search-index" / "db" / "search.db" +OLLAMA_ENDPOINT = "http://localhost:11434" +EMBEDDING_MODEL = "nomic-embed-text" + + +def load_config(): + """Load config.yaml.""" + if not CONFIG_PATH.exists(): + return {} + with open(CONFIG_PATH) as f: + return yaml.safe_load(f) or {} + + +def get_db_path(config): + """Resolve database path from config.""" + raw = config.get("database", {}).get("path", str(DEFAULT_DB_PATH)) + return Path(os.path.expanduser(raw)) + + +def generate_embedding(text, config): + """Generate an embedding vector via Ollama API.""" + endpoint = config.get("embedding", {}).get("endpoint", OLLAMA_ENDPOINT) + model = config.get("embedding", {}).get("model", EMBEDDING_MODEL) + text = text[:8000] + try: + resp = httpx.post( + f"{endpoint}/api/embeddings", + json={"model": model, "prompt": text}, + timeout=30.0, + ) + resp.raise_for_status() + return resp.json().get("embedding") + except Exception as e: + print(f" Warning: Embedding failed: {e}", file=sys.stderr) + return None + + +def main(): + parser = argparse.ArgumentParser(description="Rebuild the FTS5 search index") + parser.add_argument("--embeddings", action="store_true", + help="Also regenerate all embeddings") + parser.add_argument("--dry-run", action="store_true", + help="Show what would be done without making changes") + + args = parser.parse_args() + config = load_config() + db_path = get_db_path(config) + + if not db_path.exists(): + print(f"Database not found: {db_path}") + sys.exit(1) + + conn = sqlite3.connect(str(db_path)) + conn.execute("PRAGMA journal_mode=WAL") + + # Check if there's a backup table from a previous rebuild + tables = [row[0] for row in conn.execute( + "SELECT name FROM sqlite_master WHERE type='table'" + ).fetchall()] + + # Count existing documents + try: + doc_count = conn.execute("SELECT COUNT(*) FROM documents").fetchone()[0] + except sqlite3.OperationalError: + doc_count = 0 + + print() + print("=" * 60) + print(" FTS5 Index Rebuild") + print("=" * 60) + print() + print(f" Database : {db_path}") + print(f" Documents : {doc_count:,}") + print(f" Embeddings : {'will regenerate' if args.embeddings else 'preserved'}") + print(f" Mode : {'DRY RUN' if args.dry_run else 'LIVE'}") + print() + + if args.dry_run: + print(" Dry run complete. No changes made.") + conn.close() + return + + if doc_count == 0: + print(" No documents to rebuild. Exiting.") + conn.close() + return + + # Step 1: Read all documents into memory + print(" Step 1: Reading existing documents...") + try: + rows = conn.execute( + "SELECT doc_id, doc_type, subject, body, sender, recipients, folder, received_at, source_server " + "FROM documents" + ).fetchall() + except sqlite3.OperationalError as e: + print(f" Error reading documents: {e}") + print(" Cannot rebuild -- the documents table may already be corrupted.") + conn.close() + sys.exit(1) + + print(f" Read {len(rows):,} documents into memory.") + + # Step 2: Create backup of sync_state and ingestion_runs (they're not FTS) + print(" Step 2: Backing up metadata tables...") + # These are safe -- they're regular tables + + # Step 3: Drop and recreate FTS5 table + print(" Step 3: Dropping FTS5 index...") + conn.execute("DROP TABLE IF EXISTS documents") + + print(" Step 4: Recreating FTS5 index...") + conn.execute(""" + CREATE VIRTUAL TABLE documents USING fts5( + doc_id, + doc_type, + subject, + body, + sender, + recipients, + folder, + received_at, + source_server, + content='', + tokenize='porter unicode61' + ) + """) + + # Step 4: Re-insert all documents + print(" Step 5: Re-inserting documents...") + inserted = 0 + failed = 0 + + for row in tqdm(rows, desc=" Rebuilding", unit="doc", file=sys.stderr): + try: + conn.execute( + "INSERT INTO documents(doc_id, doc_type, subject, body, sender, recipients, folder, received_at, source_server) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", + row, + ) + inserted += 1 + except Exception as e: + print(f" Warning: Failed to insert doc {row[0]}: {e}", file=sys.stderr) + failed += 1 + + conn.commit() + print(f" Inserted: {inserted:,}, Failed: {failed:,}") + + # Step 5: Optionally regenerate embeddings + if args.embeddings: + import numpy as np + + print(" Step 6: Regenerating embeddings...") + conn.execute("DELETE FROM embeddings") + conn.commit() + + model = config.get("embedding", {}).get("model", EMBEDDING_MODEL) + embedded = 0 + + for row in tqdm(rows, desc=" Embeddings", unit="doc", file=sys.stderr): + doc_id, doc_type, subject, body = row[0], row[1], row[2], row[3] + embed_text = f"{subject}\n{body}" if body else subject or "" + if not embed_text.strip(): + continue + + embedding = generate_embedding(embed_text, config) + if embedding: + blob = np.array(embedding, dtype=np.float32).tobytes() + conn.execute( + "INSERT OR REPLACE INTO embeddings(doc_id, embedding, model, created_at) " + "VALUES (?, ?, ?, ?)", + (doc_id, blob, model, datetime.now(timezone.utc).isoformat()), + ) + embedded += 1 + + # Commit in batches and pause to avoid overloading Ollama + if embedded % 100 == 0: + conn.commit() + time.sleep(0.1) + + conn.commit() + print(f" Embeddings regenerated: {embedded:,}") + + conn.close() + + print() + print(" Rebuild complete!") + print() + + +if __name__ == "__main__": + main() diff --git a/bates-enhance/integrations/search/scripts/search-query.py b/bates-enhance/integrations/search/scripts/search-query.py new file mode 100755 index 0000000..93babb9 --- /dev/null +++ b/bates-enhance/integrations/search/scripts/search-query.py @@ -0,0 +1,260 @@ +#!/usr/bin/env python3 +""" +search-query.py -- Search the Bates local search index + +Usage: + search-query.py "query text" + search-query.py "query text" --limit 20 + search-query.py "query text" --type email + search-query.py "query text" --semantic # Include semantic (embedding) search + search-query.py "query text" --json # Output as JSON (default) + search-query.py "query text" --pretty # Human-readable output + +Returns results as JSON to stdout. +""" + +import argparse +import json +import os +import sqlite3 +import sys +from pathlib import Path + +import httpx +import yaml + +CONFIG_PATH = Path.home() / ".openclaw" / "search-index" / "config.yaml" +DEFAULT_DB_PATH = Path.home() / ".openclaw" / "search-index" / "db" / "search.db" +OLLAMA_ENDPOINT = "http://localhost:11434" +EMBEDDING_MODEL = "nomic-embed-text" + + +def load_config(): + """Load config.yaml.""" + if not CONFIG_PATH.exists(): + return {} + with open(CONFIG_PATH) as f: + return yaml.safe_load(f) or {} + + +def get_db_path(config): + """Resolve database path from config.""" + raw = config.get("database", {}).get("path", str(DEFAULT_DB_PATH)) + return Path(os.path.expanduser(raw)) + + +def fts_search(conn, query, doc_type=None, limit=10): + """Perform FTS5 full-text search.""" + # Escape special FTS5 characters + safe_query = query.replace('"', '""') + + sql = "SELECT doc_id, doc_type, subject, body, sender, recipients, folder, received_at, source_server" + sql += " FROM documents WHERE documents MATCH ?" + + params = [f'"{safe_query}"'] + + if doc_type: + sql += " AND doc_type = ?" + params.append(doc_type) + + sql += " ORDER BY rank LIMIT ?" + params.append(limit) + + try: + rows = conn.execute(sql, params).fetchall() + except sqlite3.OperationalError: + # Fall back to simpler query if FTS match syntax fails + sql = ( + "SELECT doc_id, doc_type, subject, body, sender, recipients, folder, received_at, source_server" + " FROM documents WHERE documents MATCH ? LIMIT ?" + ) + rows = conn.execute(sql, [safe_query, limit]).fetchall() + + results = [] + for row in rows: + results.append({ + "doc_id": row[0], + "doc_type": row[1], + "subject": row[2], + "body": row[3][:500] if row[3] else "", + "sender": row[4], + "recipients": row[5], + "folder": row[6], + "received_at": row[7], + "source_server": row[8], + }) + return results + + +def semantic_search(conn, query, config, limit=10): + """Perform semantic search using embeddings.""" + import numpy as np + + endpoint = config.get("embedding", {}).get("endpoint", OLLAMA_ENDPOINT) + model = config.get("embedding", {}).get("model", EMBEDDING_MODEL) + + # Generate query embedding + try: + resp = httpx.post( + f"{endpoint}/api/embeddings", + json={"model": model, "prompt": query[:8000]}, + timeout=30.0, + ) + resp.raise_for_status() + query_embedding = np.array(resp.json().get("embedding", []), dtype=np.float32) + except Exception as e: + print(f"Warning: Could not generate query embedding: {e}", file=sys.stderr) + return [] + + if query_embedding.size == 0: + return [] + + # Load all embeddings and compute cosine similarity + rows = conn.execute("SELECT doc_id, embedding FROM embeddings").fetchall() + if not rows: + return [] + + scores = [] + for doc_id, emb_blob in rows: + emb = np.frombuffer(emb_blob, dtype=np.float32) + if emb.size != query_embedding.size: + continue + # Cosine similarity + dot = np.dot(query_embedding, emb) + norm = np.linalg.norm(query_embedding) * np.linalg.norm(emb) + similarity = float(dot / norm) if norm > 0 else 0.0 + scores.append((doc_id, similarity)) + + # Sort by similarity descending + scores.sort(key=lambda x: x[1], reverse=True) + top_ids = scores[:limit] + + # Fetch full documents for top results + results = [] + for doc_id, score in top_ids: + row = conn.execute( + "SELECT doc_id, doc_type, subject, body, sender, recipients, folder, received_at, source_server" + " FROM documents WHERE doc_id = ?", + (doc_id,), + ).fetchone() + if row: + results.append({ + "doc_id": row[0], + "doc_type": row[1], + "subject": row[2], + "body": row[3][:500] if row[3] else "", + "sender": row[4], + "recipients": row[5], + "folder": row[6], + "received_at": row[7], + "source_server": row[8], + "similarity": round(score, 4), + }) + return results + + +def merge_results(fts_results, semantic_results): + """Merge FTS and semantic results, deduplicating by doc_id.""" + seen = set() + merged = [] + + # FTS results first (they are more precise for keyword matches) + for r in fts_results: + if r["doc_id"] not in seen: + r["match_type"] = "fts" + merged.append(r) + seen.add(r["doc_id"]) + + # Then semantic results + for r in semantic_results: + if r["doc_id"] not in seen: + r["match_type"] = "semantic" + merged.append(r) + seen.add(r["doc_id"]) + else: + # Update existing entry with similarity score + for m in merged: + if m["doc_id"] == r["doc_id"]: + m["similarity"] = r.get("similarity") + m["match_type"] = "both" + break + + return merged + + +def format_pretty(results): + """Format results for human-readable output.""" + if not results: + print("No results found.") + return + + print(f"\n{'='*70}") + print(f" {len(results)} result(s) found") + print(f"{'='*70}\n") + + for i, r in enumerate(results, 1): + match_info = r.get("match_type", "fts") + sim = f" (similarity: {r['similarity']})" if r.get("similarity") else "" + print(f" [{i}] {r['subject']}") + print(f" From: {r['sender']}") + print(f" Date: {r['received_at']}") + print(f" Folder: {r['folder']} | Match: {match_info}{sim}") + if r["body"]: + preview = r["body"][:200].replace("\n", " ") + print(f" Preview: {preview}...") + print() + + +def main(): + parser = argparse.ArgumentParser(description="Search the Bates local search index") + parser.add_argument("query", help="Search query text") + parser.add_argument("--limit", "-n", type=int, default=10, help="Max results (default: 10)") + parser.add_argument("--type", "-t", choices=["email", "calendar", "file"], + help="Filter by document type") + parser.add_argument("--semantic", "-s", action="store_true", + help="Include semantic (embedding) search") + parser.add_argument("--pretty", "-p", action="store_true", + help="Human-readable output instead of JSON") + parser.add_argument("--json", action="store_true", default=True, + help="Output as JSON (default)") + + args = parser.parse_args() + config = load_config() + db_path = get_db_path(config) + + if not db_path.exists(): + print(json.dumps({"error": "Database not found. Run ingest-email.py first.", "results": []})) + sys.exit(1) + + conn = sqlite3.connect(str(db_path)) + conn.execute("PRAGMA journal_mode=WAL") + + # FTS search + fts_results = fts_search(conn, args.query, doc_type=args.type, limit=args.limit) + + # Semantic search (optional) + semantic_results = [] + if args.semantic: + semantic_results = semantic_search(conn, args.query, config, limit=args.limit) + + # Merge results + if semantic_results: + results = merge_results(fts_results, semantic_results)[:args.limit] + else: + results = fts_results + + conn.close() + + if args.pretty: + format_pretty(results) + else: + output = { + "query": args.query, + "total": len(results), + "results": results, + } + print(json.dumps(output, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/bates-enhance/integrations/search/scripts/search-stats.py b/bates-enhance/integrations/search/scripts/search-stats.py new file mode 100755 index 0000000..ff7979c --- /dev/null +++ b/bates-enhance/integrations/search/scripts/search-stats.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python3 +""" +search-stats.py -- Show statistics for the Bates local search index + +Displays: + - Total document count (by type) + - Database file size + - Last sync times per server/folder + - Stagger phase status + - Embedding coverage + - Recent ingestion runs +""" + +import json +import os +import sqlite3 +import sys +from datetime import datetime, timezone +from pathlib import Path + +import yaml + +CONFIG_PATH = Path.home() / ".openclaw" / "search-index" / "config.yaml" +DEFAULT_DB_PATH = Path.home() / ".openclaw" / "search-index" / "db" / "search.db" + + +def load_config(): + """Load config.yaml.""" + if not CONFIG_PATH.exists(): + return {} + with open(CONFIG_PATH) as f: + return yaml.safe_load(f) or {} + + +def get_db_path(config): + """Resolve database path from config.""" + raw = config.get("database", {}).get("path", str(DEFAULT_DB_PATH)) + return Path(os.path.expanduser(raw)) + + +def format_size(size_bytes): + """Format file size in human-readable form.""" + for unit in ["B", "KB", "MB", "GB"]: + if abs(size_bytes) < 1024.0: + return f"{size_bytes:.1f} {unit}" + size_bytes /= 1024.0 + return f"{size_bytes:.1f} TB" + + +def format_age(iso_timestamp): + """Format a timestamp as a human-readable age string.""" + if not iso_timestamp: + return "never" + try: + ts = datetime.fromisoformat(iso_timestamp.replace("Z", "+00:00")) + now = datetime.now(timezone.utc) + delta = now - ts + if delta.days > 0: + return f"{delta.days}d ago" + hours = delta.seconds // 3600 + if hours > 0: + return f"{hours}h ago" + minutes = delta.seconds // 60 + return f"{minutes}m ago" + except (ValueError, TypeError): + return iso_timestamp + + +def main(): + config = load_config() + db_path = get_db_path(config) + + if not db_path.exists(): + print("Database not found. Run ingest-email.py first.") + print(f"Expected at: {db_path}") + sys.exit(1) + + # Database size + db_size = db_path.stat().st_size + wal_path = db_path.with_suffix(".db-wal") + wal_size = wal_path.stat().st_size if wal_path.exists() else 0 + + conn = sqlite3.connect(str(db_path)) + conn.execute("PRAGMA journal_mode=WAL") + + # Document counts by type + doc_counts = conn.execute( + "SELECT doc_type, COUNT(*) FROM documents GROUP BY doc_type" + ).fetchall() + total_docs = sum(c for _, c in doc_counts) + + # Embedding count + embedding_count = conn.execute("SELECT COUNT(*) FROM embeddings").fetchone()[0] + + # Sync state + sync_states = conn.execute( + "SELECT server, folder_name, last_sync, doc_count, phase FROM sync_state ORDER BY server, folder_name" + ).fetchall() + + # Recent ingestion runs + recent_runs = conn.execute( + "SELECT run_id, started_at, finished_at, mode, phase, docs_added, docs_failed, status " + "FROM ingestion_runs ORDER BY run_id DESC LIMIT 5" + ).fetchall() + + conn.close() + + # Current phase from config + current_phase = config.get("ingestion", {}).get("current_phase", 1) + phase_labels = config.get("ingestion", {}).get("stagger_phases", {}) + + # Output + print() + print("=" * 60) + print(" Bates Search Index Statistics") + print("=" * 60) + print() + + print(f" Database path : {db_path}") + print(f" Database size : {format_size(db_size)} (WAL: {format_size(wal_size)})") + print(f" Total docs : {total_docs:,}") + print() + + if doc_counts: + print(" Documents by type:") + for doc_type, count in doc_counts: + print(f" {doc_type:12s} : {count:,}") + print() + + print(f" Embeddings : {embedding_count:,} ({embedding_count*100//max(total_docs,1)}% coverage)") + print() + + print(f" Current phase : {current_phase} - {phase_labels.get(current_phase, phase_labels.get(str(current_phase), 'Unknown'))}") + print() + + if sync_states: + print(" Sync state per folder:") + print(f" {'Server':<20s} {'Folder':<25s} {'Last Sync':<15s} {'Docs':>8s}") + print(f" {'-'*20} {'-'*25} {'-'*15} {'-'*8}") + for server, folder_name, last_sync, doc_count, phase in sync_states: + age = format_age(last_sync) + print(f" {server:<20s} {(folder_name or 'unknown'):<25s} {age:<15s} {doc_count:>8,}") + print() + + if recent_runs: + print(" Recent ingestion runs:") + print(f" {'ID':>4s} {'Mode':<12s} {'Phase':>5s} {'Added':>6s} {'Errors':>6s} {'Status':<10s} {'When':<15s}") + print(f" {'-'*4} {'-'*12} {'-'*5} {'-'*6} {'-'*6} {'-'*10} {'-'*15}") + for run_id, started, finished, mode, phase, added, failed, status in recent_runs: + age = format_age(started) + print(f" {run_id:>4d} {mode:<12s} {phase or '-':>5} {added:>6,} {failed:>6,} {status:<10s} {age:<15s}") + print() + + print("=" * 60) + + +if __name__ == "__main__": + main() diff --git a/bates-enhance/integrations/search/scripts/setup-venv.sh b/bates-enhance/integrations/search/scripts/setup-venv.sh new file mode 100755 index 0000000..45a200a --- /dev/null +++ b/bates-enhance/integrations/search/scripts/setup-venv.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +# setup-venv.sh -- Create or update the Python virtual environment for search index +# +# Usage: +# setup-venv.sh # Create/update venv and install requirements +# setup-venv.sh --force # Delete existing venv and recreate from scratch + +set -euo pipefail + +SEARCH_INDEX_DIR="$HOME/.openclaw/search-index" +VENV_DIR="$SEARCH_INDEX_DIR/venv" +REQUIREMENTS="$SEARCH_INDEX_DIR/requirements.txt" +FORCE=false + +if [[ "${1:-}" == "--force" ]]; then + FORCE=true +fi + +echo "Search Index Python Environment Setup" +echo "======================================" +echo "" + +# Ensure directory structure exists +mkdir -p "$SEARCH_INDEX_DIR/scripts" +mkdir -p "$SEARCH_INDEX_DIR/db" +mkdir -p "$SEARCH_INDEX_DIR/cache" +mkdir -p "$SEARCH_INDEX_DIR/logs" + +# Check requirements file +if [[ ! -f "$REQUIREMENTS" ]]; then + echo "ERROR: Requirements file not found: $REQUIREMENTS" + echo "Copy requirements.txt to $SEARCH_INDEX_DIR/ first." + exit 1 +fi + +# Remove existing venv if --force +if $FORCE && [[ -d "$VENV_DIR" ]]; then + echo "Removing existing virtual environment..." + rm -rf "$VENV_DIR" +fi + +# Create venv if it doesn't exist +if [[ ! -d "$VENV_DIR" ]]; then + echo "Creating Python virtual environment..." + python3 -m venv "$VENV_DIR" + echo " Created: $VENV_DIR" +else + echo "Virtual environment already exists: $VENV_DIR" +fi + +# Upgrade pip +echo "Upgrading pip..." +"$VENV_DIR/bin/pip" install --quiet --upgrade pip + +# Install requirements +echo "Installing dependencies..." +"$VENV_DIR/bin/pip" install --quiet -r "$REQUIREMENTS" + +# Verify key packages +echo "" +echo "Installed packages:" +"$VENV_DIR/bin/pip" list --format=columns 2>/dev/null | grep -E "httpx|numpy|sqlite-utils|pyyaml|tqdm|python-dateutil|tiktoken" || true + +echo "" +echo "Python: $("$VENV_DIR/bin/python3" --version)" +echo "Venv: $VENV_DIR" +echo "" +echo "Setup complete." diff --git a/bates-enhance/integrations/search/scripts/sync-monitor.py b/bates-enhance/integrations/search/scripts/sync-monitor.py new file mode 100755 index 0000000..adece68 --- /dev/null +++ b/bates-enhance/integrations/search/scripts/sync-monitor.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python3 +""" +sync-monitor.py -- Monitor search index health for cron job delivery + +Checks: + - Database exists and is accessible + - Last sync was recent (within 2 hours) + - No persistent errors in recent runs + - Document count is growing (not stalled) + - Ollama embedding service is reachable + - Disk space is sufficient + +Output goes to stdout for the cron job to deliver to the user. +Exits 0 if healthy, 1 if issues found. +""" + +import json +import os +import sqlite3 +import sys +from datetime import datetime, timedelta, timezone +from pathlib import Path + +import httpx +import yaml + +CONFIG_PATH = Path.home() / ".openclaw" / "search-index" / "config.yaml" +DEFAULT_DB_PATH = Path.home() / ".openclaw" / "search-index" / "db" / "search.db" +OLLAMA_ENDPOINT = "http://localhost:11434" + +# Thresholds +MAX_SYNC_AGE_HOURS = 2 +MIN_DOCS_EXPECTED = 10 +MAX_CONSECUTIVE_ERRORS = 3 +MIN_DISK_FREE_MB = 500 + + +def load_config(): + """Load config.yaml.""" + if not CONFIG_PATH.exists(): + return {} + with open(CONFIG_PATH) as f: + return yaml.safe_load(f) or {} + + +def get_db_path(config): + """Resolve database path from config.""" + raw = config.get("database", {}).get("path", str(DEFAULT_DB_PATH)) + return Path(os.path.expanduser(raw)) + + +def check_database(db_path): + """Check database accessibility and basic health.""" + issues = [] + + if not db_path.exists(): + return ["Database file not found: {}".format(db_path)], {} + + try: + conn = sqlite3.connect(str(db_path), timeout=5) + conn.execute("PRAGMA journal_mode=WAL") + except sqlite3.Error as e: + return ["Cannot open database: {}".format(e)], {} + + stats = {} + + # Document count + try: + total = conn.execute("SELECT COUNT(*) FROM documents").fetchone()[0] + stats["total_docs"] = total + if total < MIN_DOCS_EXPECTED: + issues.append("Low document count: {} (expected at least {})".format(total, MIN_DOCS_EXPECTED)) + except sqlite3.OperationalError as e: + issues.append("Cannot query documents table: {}".format(e)) + + # Embedding count + try: + emb_count = conn.execute("SELECT COUNT(*) FROM embeddings").fetchone()[0] + stats["embeddings"] = emb_count + except sqlite3.OperationalError: + stats["embeddings"] = 0 + + # Last sync time + try: + row = conn.execute( + "SELECT MAX(last_sync) FROM sync_state" + ).fetchone() + if row and row[0]: + last_sync = datetime.fromisoformat(row[0].replace("Z", "+00:00")) + age = datetime.now(timezone.utc) - last_sync + stats["last_sync_age_hours"] = round(age.total_seconds() / 3600, 1) + if age > timedelta(hours=MAX_SYNC_AGE_HOURS): + issues.append("Last sync was {:.1f} hours ago (threshold: {}h)".format( + age.total_seconds() / 3600, MAX_SYNC_AGE_HOURS)) + else: + issues.append("No sync has ever completed") + except sqlite3.OperationalError: + issues.append("Cannot read sync_state table") + + # Recent ingestion errors + try: + error_runs = conn.execute( + "SELECT COUNT(*) FROM ingestion_runs WHERE status IN ('error', 'partial') " + "AND started_at > datetime('now', '-24 hours')" + ).fetchone()[0] + stats["errors_24h"] = error_runs + if error_runs >= MAX_CONSECUTIVE_ERRORS: + issues.append("{} error/partial runs in last 24 hours".format(error_runs)) + except sqlite3.OperationalError: + pass + + # Check for stalled ingestion (running for > 1 hour) + try: + stalled = conn.execute( + "SELECT run_id, started_at FROM ingestion_runs WHERE status = 'running' " + "AND started_at < datetime('now', '-1 hour')" + ).fetchall() + if stalled: + for run_id, started in stalled: + issues.append("Stalled ingestion run #{} (started {})".format(run_id, started)) + except sqlite3.OperationalError: + pass + + # DB file size + db_size = db_path.stat().st_size + stats["db_size_mb"] = round(db_size / (1024 * 1024), 1) + + conn.close() + return issues, stats + + +def check_ollama(config): + """Check if Ollama embedding service is reachable.""" + endpoint = config.get("embedding", {}).get("endpoint", OLLAMA_ENDPOINT) + issues = [] + + try: + resp = httpx.get(f"{endpoint}/api/tags", timeout=5.0) + if resp.status_code != 200: + issues.append("Ollama returned HTTP {}".format(resp.status_code)) + return issues + + models = resp.json().get("models", []) + model_names = [m.get("name", "").split(":")[0] for m in models] + expected_model = config.get("embedding", {}).get("model", "nomic-embed-text") + if expected_model not in model_names: + issues.append("Embedding model '{}' not found in Ollama (available: {})".format( + expected_model, ", ".join(model_names) or "none")) + except httpx.ConnectError: + issues.append("Cannot connect to Ollama at {}".format(endpoint)) + except httpx.TimeoutException: + issues.append("Ollama connection timed out at {}".format(endpoint)) + except Exception as e: + issues.append("Ollama check failed: {}".format(e)) + + return issues + + +def check_disk(db_path): + """Check available disk space.""" + issues = [] + try: + stat = os.statvfs(str(db_path.parent)) + free_mb = (stat.f_bavail * stat.f_frsize) / (1024 * 1024) + if free_mb < MIN_DISK_FREE_MB: + issues.append("Low disk space: {:.0f} MB free (minimum: {} MB)".format(free_mb, MIN_DISK_FREE_MB)) + except OSError: + pass + return issues + + +def main(): + config = load_config() + db_path = get_db_path(config) + + all_issues = [] + stats = {} + + # Check database + db_issues, db_stats = check_database(db_path) + all_issues.extend(db_issues) + stats.update(db_stats) + + # Check Ollama + ollama_issues = check_ollama(config) + all_issues.extend(ollama_issues) + + # Check disk space + disk_issues = check_disk(db_path) + all_issues.extend(disk_issues) + + # Report + if all_issues: + print("Search Index Health Check: {} issue(s) found".format(len(all_issues))) + print() + for i, issue in enumerate(all_issues, 1): + print(" {}. {}".format(i, issue)) + print() + if stats: + print("Stats: {} docs, {} embeddings, DB size {:.1f} MB".format( + stats.get("total_docs", "?"), + stats.get("embeddings", "?"), + stats.get("db_size_mb", 0))) + sys.exit(1) + else: + # Healthy -- output nothing (cron job only reports issues) + sys.exit(0) + + +if __name__ == "__main__": + main() diff --git a/bates-enhance/integrations/search/setup.sh b/bates-enhance/integrations/search/setup.sh new file mode 100644 index 0000000..83627c1 --- /dev/null +++ b/bates-enhance/integrations/search/setup.sh @@ -0,0 +1,204 @@ +# search integration setup -- sourced by bates-enhance installer, no shebang +# Requires: m365 integration installed, common.sh functions available +# Sets up local search index with SQLite FTS5 + Ollama embeddings + +SEARCH_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SEARCH_INDEX_DIR="$HOME/.openclaw/search-index" + +# ========================================================================= +# Step 1 -- Check m365 dependency +# ========================================================================= +step "Check Microsoft 365 dependency" + +if ! is_installed "m365" 2>/dev/null; then + fatal "Microsoft 365 integration must be installed first. Run: bates-enhance.sh m365" +fi + +success "Microsoft 365 integration is installed" + +# ========================================================================= +# Step 2 -- Install Ollama +# ========================================================================= +step "Install Ollama (local embedding engine)" + +if command -v ollama &>/dev/null; then + info "Ollama is already installed: $(ollama --version 2>/dev/null || echo 'unknown version')" +else + info "Installing Ollama..." + curl -fsSL https://ollama.com/install.sh | sh + if ! command -v ollama &>/dev/null; then + fatal "Ollama installation failed. Install manually from https://ollama.com" + fi + success "Ollama installed" +fi + +# Ensure Ollama service is running +if ! ollama list &>/dev/null 2>&1; then + info "Starting Ollama service..." + ollama serve &>/dev/null & + sleep 3 +fi + +# Pull embedding model +info "Pulling nomic-embed-text embedding model (this may take a few minutes)..." +if ollama list 2>/dev/null | grep -q "nomic-embed-text"; then + info "nomic-embed-text model already available" +else + ollama pull nomic-embed-text +fi + +# Verify the model is available +if ollama list 2>/dev/null | grep -q "nomic-embed-text"; then + success "nomic-embed-text model is ready" +else + warn "Could not verify nomic-embed-text model. You may need to pull it manually:" + warn " ollama pull nomic-embed-text" +fi + +# ========================================================================= +# Step 3 -- Set up Python environment +# ========================================================================= +step "Set up Python environment and scripts" + +# Create directory structure +info "Creating search index directory structure..." +mkdir -p "$SEARCH_INDEX_DIR/scripts" +mkdir -p "$SEARCH_INDEX_DIR/db" +mkdir -p "$SEARCH_INDEX_DIR/cache" +mkdir -p "$SEARCH_INDEX_DIR/logs" + +# Copy scripts from integration package +info "Installing search index scripts..." +cp "$SEARCH_DIR/scripts/"*.py "$SEARCH_INDEX_DIR/scripts/" +cp "$SEARCH_DIR/scripts/"*.sh "$SEARCH_INDEX_DIR/scripts/" +chmod +x "$SEARCH_INDEX_DIR/scripts/"*.py +chmod +x "$SEARCH_INDEX_DIR/scripts/"*.sh + +# Copy requirements +cp "$SEARCH_DIR/requirements.txt" "$SEARCH_INDEX_DIR/requirements.txt" + +# Create Python venv +info "Creating Python virtual environment..." +if [[ -d "$SEARCH_INDEX_DIR/venv" ]]; then + info "Virtual environment already exists, updating..." +else + python3 -m venv "$SEARCH_INDEX_DIR/venv" +fi + +# Install requirements +info "Installing Python dependencies..." +"$SEARCH_INDEX_DIR/venv/bin/pip" install --quiet --upgrade pip +"$SEARCH_INDEX_DIR/venv/bin/pip" install --quiet -r "$SEARCH_INDEX_DIR/requirements.txt" + +success "Python environment ready at $SEARCH_INDEX_DIR/venv/" + +# ========================================================================= +# Step 4 -- Configure search index +# ========================================================================= +step "Configure search index" + +info "The search index needs to know which MCP server to use for reading email." +info "This should match the reader server registered during m365 setup." +echo "" + +local mcp_reader_server="" +prompt_default "MCP reader server name" "ms365-reader" mcp_reader_server + +export MCP_READER_SERVER="$mcp_reader_server" + +# Render config template +info "Generating config.yaml..." +template_render "$SEARCH_DIR/templates/config.yaml.template" "$SEARCH_INDEX_DIR/config.yaml" + +success "Config written to $SEARCH_INDEX_DIR/config.yaml" +info "Initial stagger phase set to 1 (personal inbox only)" +info "Increase with: edit ~/.openclaw/search-index/config.yaml (current_phase)" + +# ========================================================================= +# Step 5 -- Initial sync option +# ========================================================================= +step "Initial email sync" + +echo "" +info "The search index needs to perform an initial email ingestion." +info "Phase 1 syncs your personal inbox only (safest starting point)." +echo "" +echo " 1) Start initial sync now (runs in background)" +echo " 2) Schedule for tonight at 02:00" +echo "" + +local sync_choice="" +read -rp "Select [1]: " sync_choice +sync_choice="${sync_choice:-1}" + +local venv_python="$SEARCH_INDEX_DIR/venv/bin/python3" +local ingest_script="$SEARCH_INDEX_DIR/scripts/ingest-email.py" + +case "$sync_choice" in + 2) + info "Scheduling initial sync for 02:00 tonight..." + # Add one-shot crontab entry (self-removing) + local cron_cmd="$venv_python $ingest_script --stagger-phase 1 --incremental >> $SEARCH_INDEX_DIR/logs/initial-sync.log 2>&1; crontab -l 2>/dev/null | grep -v 'initial-search-sync' | crontab -" + (crontab -l 2>/dev/null; echo "0 2 * * * $cron_cmd # initial-search-sync") | crontab - + success "Initial sync scheduled for 02:00" + ;; + *) + info "Starting initial sync in background..." + nohup "$venv_python" "$ingest_script" --stagger-phase 1 --incremental \ + >> "$SEARCH_INDEX_DIR/logs/initial-sync.log" 2>&1 & + local sync_pid=$! + success "Initial sync started (PID: $sync_pid)" + info "Monitor progress: tail -f $SEARCH_INDEX_DIR/logs/initial-sync.log" + ;; +esac + +# Add recurring crontab: ingestion every 30 min during 06:00-22:00 +info "Adding recurring sync crontab (every 30 min, 06:00-22:00)..." +local recurring_cmd="$venv_python $ingest_script --incremental >> $SEARCH_INDEX_DIR/logs/ingestion.log 2>&1" +# Remove old entry if it exists, then add new one +(crontab -l 2>/dev/null | grep -v 'search-index-sync'; echo "*/30 6-22 * * * $recurring_cmd # search-index-sync") | crontab - +success "Recurring sync crontab installed" + +# --- Merge config fragment --- +info "Merging search index config into openclaw.json..." +config_merge "$SEARCH_DIR/config-fragment.json" +success "Search index configured in openclaw.json" + +# --- Deploy workspace additions --- +if [[ -d "$SEARCH_DIR/workspace-additions" ]]; then + info "Deploying workspace files..." + local ws_dir="${WORKSPACE_DIR:-$HOME/.openclaw/workspace}" + if [[ -d "$SEARCH_DIR/workspace-additions/refs" ]]; then + cp "$SEARCH_DIR/workspace-additions/refs/"* "$ws_dir/refs/" 2>/dev/null || true + fi + if [[ -d "$SEARCH_DIR/workspace-additions/rules" ]]; then + cp "$SEARCH_DIR/workspace-additions/rules/"* "$ws_dir/rules/" 2>/dev/null || true + fi + if [[ -d "$SEARCH_DIR/workspace-additions/skills" ]]; then + cp -r "$SEARCH_DIR/workspace-additions/skills/"* "$ws_dir/skills/" 2>/dev/null || true + fi + success "Workspace files deployed" +fi + +echo "" +echo "======================================================================" +echo " Search Index integration setup complete!" +echo "======================================================================" +echo "" +echo "Key paths:" +echo " Config : $SEARCH_INDEX_DIR/config.yaml" +echo " Database : $SEARCH_INDEX_DIR/db/search.db" +echo " Scripts : $SEARCH_INDEX_DIR/scripts/" +echo " Logs : $SEARCH_INDEX_DIR/logs/" +echo "" +echo "Useful commands:" +echo " Check stats : $venv_python $SEARCH_INDEX_DIR/scripts/search-stats.py" +echo " Search : $venv_python $SEARCH_INDEX_DIR/scripts/search-query.py \"your query\"" +echo " Manual sync : $venv_python $ingest_script --incremental" +echo " Monitor : $venv_python $SEARCH_INDEX_DIR/scripts/sync-monitor.py" +echo "" +echo "Next steps:" +echo " 1. Wait for initial sync to complete" +echo " 2. Verify: $venv_python $SEARCH_INDEX_DIR/scripts/search-stats.py" +echo " 3. Increase stagger phase in config.yaml as you're comfortable" +echo "" diff --git a/bates-enhance/integrations/search/templates/config.yaml.template b/bates-enhance/integrations/search/templates/config.yaml.template new file mode 100644 index 0000000..ba30526 --- /dev/null +++ b/bates-enhance/integrations/search/templates/config.yaml.template @@ -0,0 +1,45 @@ +# Search Index Configuration +# Generated by Bates Enhancement Wizard + +database: + path: ~/.openclaw/search-index/db/search.db + wal_mode: true + +embedding: + provider: ollama + model: nomic-embed-text + endpoint: http://localhost:11434 + +sources: + email: + enabled: true + mcp_servers: + - {{MCP_READER_SERVER}} + sync_interval: 1800 # 30 minutes + batch_size: 50 + max_age_days: 365 + + calendar: + enabled: true + mcp_servers: + - {{MCP_READER_SERVER}} + +ingestion: + stagger_phases: + 1: "Personal inbox" + 2: "All personal folders" + 3: "Company mailbox" + 4: "Shared mailboxes" + 5: "All sources" + + current_phase: 1 + + retry: + max_attempts: 3 + backoff_seconds: 60 + +logging: + level: INFO + file: ~/.openclaw/search-index/logs/ingestion.log + max_size_mb: 50 + rotate_count: 5 diff --git a/bates-enhance/integrations/social/config-fragment.json b/bates-enhance/integrations/social/config-fragment.json new file mode 100644 index 0000000..1e5d4c2 --- /dev/null +++ b/bates-enhance/integrations/social/config-fragment.json @@ -0,0 +1,9 @@ +{ + "features": { + "socialMedia": { + "enabled": true, + "provider": "mixpost", + "url": "{{MIXPOST_URL}}" + } + } +} diff --git a/bates-enhance/integrations/social/docker/docker-compose.yml b/bates-enhance/integrations/social/docker/docker-compose.yml new file mode 100644 index 0000000..b7e8324 --- /dev/null +++ b/bates-enhance/integrations/social/docker/docker-compose.yml @@ -0,0 +1,83 @@ +version: "3.8" + +# MixPost -- Self-hosted social media management +# Deployed by bates-enhance.sh social integration +# +# Services: +# mixpost -- MixPost application (Laravel) +# mysql -- MySQL 8 database +# redis -- Redis for queue and cache + +services: + mixpost: + image: inovector/mixpost:latest + container_name: mixpost-app + restart: unless-stopped + ports: + - "${MIXPOST_PORT:-9000}:80" + depends_on: + mysql: + condition: service_healthy + redis: + condition: service_started + environment: + APP_NAME: "MixPost" + APP_KEY: "${APP_KEY}" + APP_URL: "${MIXPOST_URL:-http://localhost:9000}" + DB_CONNECTION: mysql + DB_HOST: mysql + DB_PORT: 3306 + DB_DATABASE: mixpost + DB_USERNAME: mixpost + DB_PASSWORD: "${DB_PASSWORD}" + REDIS_HOST: redis + REDIS_PORT: 6379 + REDIS_PASSWORD: "${REDIS_PASSWORD}" + CACHE_DRIVER: redis + QUEUE_CONNECTION: redis + SESSION_DRIVER: redis + volumes: + - mixpost-storage:/var/www/html/storage/app + - mixpost-logs:/var/www/html/storage/logs + networks: + - mixpost-net + + mysql: + image: mysql:8.0 + container_name: mixpost-mysql + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}" + MYSQL_DATABASE: mixpost + MYSQL_USER: mixpost + MYSQL_PASSWORD: "${DB_PASSWORD}" + volumes: + - mixpost-mysql-data:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_ROOT_PASSWORD}"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + networks: + - mixpost-net + + redis: + image: redis:7-alpine + container_name: mixpost-redis + restart: unless-stopped + command: redis-server --requirepass "${REDIS_PASSWORD}" + volumes: + - mixpost-redis-data:/data + networks: + - mixpost-net + +volumes: + mixpost-storage: + mixpost-logs: + mixpost-mysql-data: + mixpost-redis-data: + +networks: + mixpost-net: + driver: bridge diff --git a/bates-enhance/integrations/social/docker/env.template b/bates-enhance/integrations/social/docker/env.template new file mode 100644 index 0000000..90ccb30 --- /dev/null +++ b/bates-enhance/integrations/social/docker/env.template @@ -0,0 +1,15 @@ +# MixPost Docker environment +# Generated by bates-enhance.sh social integration +# This file contains secrets -- do not commit to version control. + +# Application +APP_KEY={{APP_KEY}} +MIXPOST_URL=http://{{MIXPOST_DOMAIN}}:{{MIXPOST_PORT}} +MIXPOST_PORT={{MIXPOST_PORT}} + +# MySQL +DB_PASSWORD={{DB_PASSWORD}} +DB_ROOT_PASSWORD={{DB_ROOT_PASSWORD}} + +# Redis +REDIS_PASSWORD={{REDIS_PASSWORD}} diff --git a/bates-enhance/integrations/social/setup.sh b/bates-enhance/integrations/social/setup.sh new file mode 100644 index 0000000..b7e6b5d --- /dev/null +++ b/bates-enhance/integrations/social/setup.sh @@ -0,0 +1,132 @@ +# setup.sh -- Social Media (MixPost) integration for Bates +# Sourced by bates-enhance.sh -- do NOT run directly. +# +# Deploys MixPost (self-hosted social media management) via Docker Compose, +# then configures the gateway to use it for scheduling and publishing posts. +# +# Prerequisites: +# - Docker and Docker Compose installed +# - Ports 9000 (MixPost UI) available on the host + +# ------------------------------------------------------------------- +# Step 1 -- Check Docker +# ------------------------------------------------------------------- +step "Check Docker installation" + +if ! command -v docker &>/dev/null; then + fatal "Docker is not installed. Install Docker first: https://docs.docker.com/engine/install/" +fi + +if ! docker info &>/dev/null 2>&1; then + warn "Docker daemon is not running or current user lacks permissions." + info "Try: sudo systemctl start docker && sudo usermod -aG docker \$USER" + if ! confirm "Continue anyway (you can start Docker later)?"; then + fatal "Aborted." + fi +fi + +success "Docker is available." + +# ------------------------------------------------------------------- +# Step 2 -- Collect MixPost settings +# ------------------------------------------------------------------- +step "Configure MixPost" + +prompt_default "Domain or hostname for MixPost (e.g. localhost or mixpost.example.com)" "localhost" MIXPOST_DOMAIN + +MIXPOST_PORT="9000" +prompt_default "MixPost HTTP port" "$MIXPOST_PORT" MIXPOST_PORT + +if [[ "$MIXPOST_DOMAIN" == "localhost" || "$MIXPOST_DOMAIN" == "127.0.0.1" ]]; then + MIXPOST_URL="http://${MIXPOST_DOMAIN}:${MIXPOST_PORT}" +else + MIXPOST_URL="https://${MIXPOST_DOMAIN}" + info "For production, set up a reverse proxy with TLS in front of port $MIXPOST_PORT." +fi + +info "MixPost will be accessible at: $MIXPOST_URL" + +# ------------------------------------------------------------------- +# Step 3 -- Generate passwords +# ------------------------------------------------------------------- +step "Generate database credentials" + +DB_PASSWORD=$(python3 -c "import secrets; print(secrets.token_urlsafe(24))") +DB_ROOT_PASSWORD=$(python3 -c "import secrets; print(secrets.token_urlsafe(24))") +APP_KEY=$(python3 -c "import secrets; print('base64:' + __import__('base64').b64encode(secrets.token_bytes(32)).decode())") +REDIS_PASSWORD=$(python3 -c "import secrets; print(secrets.token_urlsafe(16))") + +success "Credentials generated (stored in .env, not displayed)." + +# ------------------------------------------------------------------- +# Step 4 -- Deploy Docker Compose files +# ------------------------------------------------------------------- +step "Deploy Docker Compose stack" + +DOCKER_DIR="$HOME/.openclaw/docker/mixpost" +mkdir -p "$DOCKER_DIR" + +# Copy docker-compose.yml +COMPOSE_SRC="$ENHANCE_DIR/integrations/social/docker/docker-compose.yml" +if [[ -f "$COMPOSE_SRC" ]]; then + cp "$COMPOSE_SRC" "$DOCKER_DIR/docker-compose.yml" +else + fatal "docker-compose.yml template not found at $COMPOSE_SRC" +fi + +# Render .env from template +ENV_TEMPLATE="$ENHANCE_DIR/integrations/social/docker/env.template" +if [[ -f "$ENV_TEMPLATE" ]]; then + export DB_PASSWORD DB_ROOT_PASSWORD APP_KEY REDIS_PASSWORD MIXPOST_DOMAIN MIXPOST_PORT + template_render "$ENV_TEMPLATE" "$DOCKER_DIR/.env" + chmod 600 "$DOCKER_DIR/.env" +else + fatal "env.template not found at $ENV_TEMPLATE" +fi + +success "Docker Compose files deployed to $DOCKER_DIR" + +# ------------------------------------------------------------------- +# Step 5 -- Offer to start containers +# ------------------------------------------------------------------- +step "Start MixPost containers" + +echo "" +info "Ready to start MixPost containers." +info "This will pull images and start MySQL, Redis, and MixPost." +echo "" + +if confirm "Start containers now?"; then + info "Pulling images and starting containers (this may take a few minutes)..." + if docker compose -f "$DOCKER_DIR/docker-compose.yml" --env-file "$DOCKER_DIR/.env" up -d 2>&1; then + success "MixPost containers started." + echo "" + info "MixPost UI: $MIXPOST_URL" + info "Default admin credentials are set on first visit." + else + warn "Docker Compose failed. You can start manually later:" + info " cd $DOCKER_DIR && docker compose up -d" + fi +else + info "Skipped. Start containers later with:" + info " cd $DOCKER_DIR && docker compose up -d" +fi + +# ------------------------------------------------------------------- +# Step 6 -- Merge config fragment +# ------------------------------------------------------------------- +step "Merge social media config into openclaw.json" + +FRAGMENT_DIR="$ENHANCE_DIR/integrations/social" +RENDERED_FRAGMENT=$(mktemp) + +export MIXPOST_URL +template_render "$FRAGMENT_DIR/config-fragment.json" "$RENDERED_FRAGMENT" +config_merge "$RENDERED_FRAGMENT" +rm -f "$RENDERED_FRAGMENT" + +success "Config merged." + +echo "" +success "Social media (MixPost) integration setup complete." +info "Connect your social accounts in the MixPost UI at $MIXPOST_URL" diff --git a/bates-enhance/integrations/tailscale/setup.sh b/bates-enhance/integrations/tailscale/setup.sh new file mode 100644 index 0000000..308434d --- /dev/null +++ b/bates-enhance/integrations/tailscale/setup.sh @@ -0,0 +1,142 @@ +# setup.sh -- Tailscale Remote Access integration for Bates +# Sourced by bates-enhance.sh -- do NOT run directly. +# +# Installs Tailscale (if needed), authenticates the node, and sets up +# Tailscale Serve to expose the gateway dashboard and (optionally) the +# voice webhook over HTTPS on the tailnet. +# +# Prerequisites: +# - sudo access (for Tailscale install and configuration) +# - A Tailscale account (free tier is fine) + +# ------------------------------------------------------------------- +# Step 1 -- Check / install Tailscale +# ------------------------------------------------------------------- +step "Check Tailscale installation" + +if command -v tailscale &>/dev/null; then + TS_VERSION=$(tailscale version 2>/dev/null | head -1 || echo "unknown") + success "Tailscale is already installed (version: $TS_VERSION)." +else + info "Tailscale is not installed. Installing now..." + echo "" + + if ! confirm "Install Tailscale via the official install script?"; then + fatal "Tailscale installation is required for this integration." + fi + + if curl -fsSL https://tailscale.com/install.sh | sh; then + success "Tailscale installed." + else + fatal "Tailscale installation failed. Check network connectivity and try again." + fi +fi + +# ------------------------------------------------------------------- +# Step 2 -- Authenticate / bring up Tailscale +# ------------------------------------------------------------------- +step "Authenticate with Tailscale" + +TS_STATUS=$(tailscale status --json 2>/dev/null | python3 -c "import json,sys; print(json.load(sys.stdin).get('BackendState',''))" 2>/dev/null || echo "") + +if [[ "$TS_STATUS" == "Running" ]]; then + success "Tailscale is already connected." +else + info "Starting Tailscale. You will need to authenticate in your browser." + echo "" + + if sudo tailscale up; then + success "Tailscale authenticated and connected." + else + fatal "Tailscale authentication failed. Run 'sudo tailscale up' manually." + fi +fi + +# Wait a moment for DNS to propagate +sleep 2 + +# Get the hostname +TS_HOSTNAME=$(tailscale status --json 2>/dev/null | python3 -c "import json,sys; print(json.load(sys.stdin).get('Self',{}).get('DNSName','').rstrip('.'))" 2>/dev/null || echo "") +TS_IP=$(tailscale ip -4 2>/dev/null || echo "") + +if [[ -n "$TS_HOSTNAME" ]]; then + info "Tailscale hostname: $TS_HOSTNAME" + info "Tailscale IPv4: $TS_IP" +else + warn "Could not determine Tailscale hostname. Check 'tailscale status'." +fi + +# ------------------------------------------------------------------- +# Step 3 -- Set up Tailscale Serve for dashboard +# ------------------------------------------------------------------- +step "Configure Tailscale Serve (dashboard)" + +info "Exposing gateway dashboard (port 18789) on Tailscale HTTPS port 443." +echo "" + +if sudo tailscale serve --bg --https=443 18789; then + success "Dashboard available at: https://${TS_HOSTNAME}" +else + warn "Failed to configure Tailscale Serve for dashboard." + info "You can try manually: sudo tailscale serve --bg --https=443 18789" +fi + +# ------------------------------------------------------------------- +# Step 4 -- Set up Tailscale Serve for voice webhook (if twilio installed) +# ------------------------------------------------------------------- +step "Configure Tailscale Serve (voice webhook)" + +if is_installed "twilio" 2>/dev/null; then + info "Twilio integration detected. Exposing voice webhook on port 8443." + echo "" + + if sudo tailscale serve --bg --https=8443 18789; then + success "Voice webhook available at: https://${TS_HOSTNAME}:8443/webhook" + echo "" + info "Update your Twilio phone number webhook to:" + info " https://${TS_HOSTNAME}:8443/webhook" + else + warn "Failed to configure Tailscale Serve for voice webhook." + info "You can try manually: sudo tailscale serve --bg --https=8443 18789" + fi +else + info "Twilio integration not installed -- skipping voice webhook." + info "If you add Twilio later, re-run this integration to set up the webhook." +fi + +# ------------------------------------------------------------------- +# Step 5 -- Enable Tailscale auth in gateway +# ------------------------------------------------------------------- +step "Enable Tailscale authentication in gateway" + +if command -v openclaw &>/dev/null; then + if openclaw config set gateway.auth.allowTailscale true 2>/dev/null; then + success "Tailscale auth enabled in gateway config." + else + warn "Could not set gateway.auth.allowTailscale via CLI." + info "You may need to add it manually to ~/.openclaw/openclaw.json" + fi +else + warn "openclaw CLI not found. Set gateway.auth.allowTailscale manually." +fi + +# ------------------------------------------------------------------- +# Summary +# ------------------------------------------------------------------- +step "Summary" + +echo "" +info "Tailscale setup complete. Your endpoints:" +echo "" +if [[ -n "$TS_HOSTNAME" ]]; then + info " Dashboard: https://${TS_HOSTNAME}" + if is_installed "twilio" 2>/dev/null; then + info " Voice webhook: https://${TS_HOSTNAME}:8443/webhook" + fi + info " Tailscale IP: ${TS_IP}" +else + info " Run 'tailscale status' to see your hostname." +fi +echo "" + +success "Tailscale remote access integration setup complete." diff --git a/bates-enhance/integrations/tailscale/verify.sh b/bates-enhance/integrations/tailscale/verify.sh new file mode 100644 index 0000000..380bdb6 --- /dev/null +++ b/bates-enhance/integrations/tailscale/verify.sh @@ -0,0 +1,129 @@ +#!/usr/bin/env bash +# verify.sh -- Quick verification for Tailscale integration +# Run this script to check that Tailscale is working correctly +# with the Bates gateway. + +set -euo pipefail + +# Colors +if [[ -t 1 ]]; then + RED='\033[0;31m' + GREEN='\033[0;32m' + YELLOW='\033[1;33m' + CYAN='\033[0;36m' + NC='\033[0m' +else + RED='' GREEN='' YELLOW='' CYAN='' NC='' +fi + +PASS=0 +FAIL=0 +WARN_COUNT=0 + +check_pass() { echo -e " ${GREEN}[PASS]${NC} $1"; ((PASS++)); } +check_fail() { echo -e " ${RED}[FAIL]${NC} $1"; ((FAIL++)); } +check_warn() { echo -e " ${YELLOW}[WARN]${NC} $1"; ((WARN_COUNT++)); } + +echo "" +echo "Tailscale Integration Verification" +echo "===================================" +echo "" + +# 1. Tailscale installed +echo "${CYAN}Checking Tailscale installation...${NC}" +if command -v tailscale &>/dev/null; then + TS_VERSION=$(tailscale version 2>/dev/null | head -1 || echo "unknown") + check_pass "Tailscale installed (version: $TS_VERSION)" +else + check_fail "Tailscale is not installed" +fi + +# 2. Tailscale running +echo "${CYAN}Checking Tailscale status...${NC}" +TS_STATE=$(tailscale status --json 2>/dev/null | python3 -c "import json,sys; print(json.load(sys.stdin).get('BackendState',''))" 2>/dev/null || echo "") +if [[ "$TS_STATE" == "Running" ]]; then + check_pass "Tailscale daemon is running" +else + check_fail "Tailscale daemon is not running (state: ${TS_STATE:-unknown})" +fi + +# 3. Get hostname and IP +TS_HOSTNAME=$(tailscale status --json 2>/dev/null | python3 -c "import json,sys; print(json.load(sys.stdin).get('Self',{}).get('DNSName','').rstrip('.'))" 2>/dev/null || echo "") +TS_IP=$(tailscale ip -4 2>/dev/null || echo "") + +if [[ -n "$TS_HOSTNAME" ]]; then + check_pass "Tailscale hostname: $TS_HOSTNAME" +else + check_fail "Could not determine Tailscale hostname" +fi + +if [[ -n "$TS_IP" ]]; then + check_pass "Tailscale IPv4: $TS_IP" +else + check_fail "Could not determine Tailscale IP" +fi + +# 4. Check Tailscale Serve +echo "${CYAN}Checking Tailscale Serve...${NC}" +SERVE_OUTPUT=$(sudo tailscale serve status 2>/dev/null || echo "") +if [[ -n "$SERVE_OUTPUT" && "$SERVE_OUTPUT" != *"No serve config"* ]]; then + check_pass "Tailscale Serve is configured" + + if echo "$SERVE_OUTPUT" | grep -q "443"; then + check_pass "HTTPS :443 -> gateway (dashboard)" + else + check_warn "HTTPS :443 not configured for dashboard" + fi + + if echo "$SERVE_OUTPUT" | grep -q "8443"; then + check_pass "HTTPS :8443 -> gateway (voice webhook)" + else + check_warn "HTTPS :8443 not configured (voice webhook -- only needed if Twilio is installed)" + fi +else + check_fail "Tailscale Serve is not configured" +fi + +# 5. Check gateway is running +echo "${CYAN}Checking gateway connectivity...${NC}" +if systemctl --user is-active openclaw-gateway &>/dev/null; then + check_pass "Gateway service is active" +else + check_fail "Gateway service is not running" +fi + +# 6. Try to reach the gateway via Tailscale IP +if [[ -n "$TS_IP" ]]; then + if curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 "http://${TS_IP}:18789/" 2>/dev/null | grep -qE "^(200|302|401|403)"; then + check_pass "Gateway reachable via Tailscale IP (http://${TS_IP}:18789)" + else + check_warn "Gateway not reachable via Tailscale IP (may need auth)" + fi +fi + +# 7. Check gateway Tailscale auth setting +echo "${CYAN}Checking gateway auth config...${NC}" +if command -v openclaw &>/dev/null; then + TS_AUTH=$(openclaw config get gateway.auth.allowTailscale 2>/dev/null || echo "") + if [[ "$TS_AUTH" == "true" ]]; then + check_pass "Gateway Tailscale auth is enabled" + else + check_warn "Gateway Tailscale auth may not be enabled (got: ${TS_AUTH:-empty})" + fi +else + check_warn "openclaw CLI not available -- cannot verify auth config" +fi + +# Summary +echo "" +echo "===================================" +echo -e "Results: ${GREEN}${PASS} passed${NC}, ${RED}${FAIL} failed${NC}, ${YELLOW}${WARN_COUNT} warnings${NC}" +echo "===================================" + +if [[ $FAIL -gt 0 ]]; then + echo "" + echo "Some checks failed. Review the output above and fix issues." + exit 1 +fi + +exit 0 diff --git a/bates-enhance/integrations/teams/config-fragment.json b/bates-enhance/integrations/teams/config-fragment.json new file mode 100644 index 0000000..d9f522e --- /dev/null +++ b/bates-enhance/integrations/teams/config-fragment.json @@ -0,0 +1,11 @@ +{ + "channels": { + "msteams": { + "enabled": true, + "appId": "{{TEAMS_APP_ID}}", + "appPassword": "{{TEAMS_SECRET}}", + "dmPolicy": "open", + "groupPolicy": "allowlist" + } + } +} diff --git a/bates-enhance/integrations/teams/setup.sh b/bates-enhance/integrations/teams/setup.sh new file mode 100644 index 0000000..ed0cd68 --- /dev/null +++ b/bates-enhance/integrations/teams/setup.sh @@ -0,0 +1,106 @@ +# setup.sh -- Microsoft Teams integration for Bates +# Sourced by bates-enhance.sh -- do NOT run directly. +# +# Configures the MS Teams channel (Bot Framework) so Bates can send and +# receive messages in Teams DMs and group chats. +# +# Prerequisites: +# - An Azure / Entra Bot registration (App ID + Secret) +# - The openclaw msteams extension installed via npm +# - The openclaw gateway running + +# ------------------------------------------------------------------- +# Step 1 -- Collect credentials +# ------------------------------------------------------------------- +step "Collect Teams Bot credentials" + +info "You need an Azure / Entra ID Bot registration." +info "Go to https://portal.azure.com -> App registrations -> your bot app." +echo "" + +prompt_default "Teams App ID (Entra Bot App ID)" "" TEAMS_APP_ID +if [[ -z "${TEAMS_APP_ID:-}" ]]; then + fatal "Teams App ID is required." +fi + +prompt_default "Teams App Secret (client secret value)" "" TEAMS_SECRET +if [[ -z "${TEAMS_SECRET:-}" ]]; then + fatal "Teams App Secret is required." +fi + +success "Credentials collected." + +# ------------------------------------------------------------------- +# Step 2 -- Install NODE_PATH systemd drop-in +# ------------------------------------------------------------------- +step "Install NODE_PATH systemd drop-in" + +DROPIN_DIR="$HOME/.config/systemd/user/openclaw-gateway.service.d" +DROPIN_FILE="$DROPIN_DIR/msteams-deps.conf" + +mkdir -p "$DROPIN_DIR" + +if [[ -f "$DROPIN_FILE" ]]; then + info "Drop-in already exists at $DROPIN_FILE -- overwriting." +fi + +cat > "$DROPIN_FILE" </dev/null || warn "Could not reload systemd daemon." + +# ------------------------------------------------------------------- +# Step 3 -- Store secret in a systemd credential drop-in (chmod 600) +# ------------------------------------------------------------------- +step "Store Teams secret securely" + +SECRETS_DROPIN="$DROPIN_DIR/msteams-secret.conf" + +cat > "$SECRETS_DROPIN" < Teams apps -> Manage apps." +info "3. Click 'Upload new app' and select the manifest ZIP." +info "4. Approve the app for your organisation." +echo "" +info "For a step-by-step guide, see:" +info " https://learn.microsoft.com/en-us/microsoftteams/platform/concepts/deploy-and-publish/apps-publish-overview" +echo "" + +success "Teams integration setup complete." diff --git a/bates-enhance/integrations/teams/workspace-additions/refs/file-sharing.md b/bates-enhance/integrations/teams/workspace-additions/refs/file-sharing.md new file mode 100644 index 0000000..a44b124 --- /dev/null +++ b/bates-enhance/integrations/teams/workspace-additions/refs/file-sharing.md @@ -0,0 +1,64 @@ +# File Sharing via Teams + +Reference documentation for sharing files through Microsoft Teams, OneDrive +links, and handling attachments in conversations with Bates. + +## Sending Files to Users + +When Bates needs to share a file with a user through Teams: + +1. **OneDrive links (preferred)** -- Upload the file to the user's OneDrive + (or a shared location) and send a link in the Teams message. This avoids + size limits and keeps the file accessible later. + + - Use the Graph API endpoint + `PUT /me/drive/root:/{path}:/content` to upload. + - Then share the link in the Teams reply. + +2. **Inline attachments** -- Small files (< 4 MB) can be sent as inline + attachments via the Bot Framework. The file is embedded directly in the + message payload. This is suitable for quick exports, small CSVs, or + generated images. + +3. **Adaptive Card file cards** -- For a richer experience, wrap the download + link in an Adaptive Card with a preview thumbnail and an "Open" action + button. + +## Receiving Files from Users + +When a user sends a file to Bates in a Teams chat: + +- The Bot Framework delivers a `fileConsent` or `attachment` activity. +- The attachment includes a `contentUrl` pointing to the Teams/SharePoint + blob storage. +- Bates should download the file from the `contentUrl` using the bot's + bearer token before processing. + +### Supported Attachment Types + +| Type | Notes | +|----------|--------------------------------------------| +| Images | JPEG, PNG, GIF, WEBP -- displayed inline | +| PDFs | Rendered as a preview card in Teams | +| Office | Word, Excel, PowerPoint -- preview via link | +| Archives | ZIP, TAR -- download only, no preview | +| Other | Any file type can be sent as an attachment | + +## OneDrive Folder Conventions + +| Purpose | Path | +|----------------------|---------------------------------------------| +| General drafts | `drafts/` | +| Generated images | `drafts/images/` | +| Venture files | `drafts/Sales/{Company}/` | +| Venture images | `drafts/Sales/{Company}/images/` | +| Shared documents | `shared/` | + +## Tips + +- Always prefer OneDrive links over inline attachments for files larger than + 1 MB. Teams has a 4 MB per-message payload limit for bot messages. +- When sharing sensitive documents, ensure the OneDrive sharing permission is + scoped to the intended recipient only. +- Use the `@microsoft.graph.downloadUrl` property from the Graph response for + time-limited direct download links (useful in Adaptive Cards). diff --git a/bates-enhance/integrations/telegram/config-fragment.json b/bates-enhance/integrations/telegram/config-fragment.json new file mode 100644 index 0000000..b190b00 --- /dev/null +++ b/bates-enhance/integrations/telegram/config-fragment.json @@ -0,0 +1,9 @@ +{ + "channels": { + "telegram": { + "enabled": true, + "token": "{{TELEGRAM_BOT_TOKEN}}", + "allowFrom": ["{{TELEGRAM_USER_ID}}"] + } + } +} diff --git a/bates-enhance/integrations/telegram/setup.sh b/bates-enhance/integrations/telegram/setup.sh new file mode 100644 index 0000000..0817c22 --- /dev/null +++ b/bates-enhance/integrations/telegram/setup.sh @@ -0,0 +1,71 @@ +# setup.sh -- Telegram integration for Bates +# Sourced by bates-enhance.sh; has access to common.sh and config-merge.sh functions. +# +# Configures Telegram as a messaging channel for Bates via BotFather bot token. + +step "Telegram Bot Configuration" + +info "You'll need a Telegram bot token from @BotFather and your Telegram user ID." +info "To create a bot: open Telegram, search for @BotFather, send /newbot." +info "To find your user ID: search for @userinfobot and send /start." +echo "" + +# --- Bot Token --- +local bot_token="" +while [[ -z "$bot_token" ]]; do + read -rp "Telegram bot token (from @BotFather): " bot_token + if [[ -z "$bot_token" ]]; then + warn "Bot token cannot be empty." + continue + fi + if ! validate_telegram_token "$bot_token"; then + warn "Token format looks incorrect. Expected format: 123456789:ABCdefGHI-jklMNOpqr..." + if ! confirm "Use this token anyway?"; then + bot_token="" + continue + fi + fi +done + +# --- User ID --- +local user_id="" +while [[ -z "$user_id" ]]; do + read -rp "Your Telegram user ID (numeric): " user_id + if [[ -z "$user_id" ]]; then + warn "User ID cannot be empty." + continue + fi + if ! [[ "$user_id" =~ ^[0-9]+$ ]]; then + warn "User ID should be numeric." + if ! confirm "Use this value anyway?"; then + user_id="" + continue + fi + fi +done + +# --- Optional: Test bot token --- +echo "" +if confirm "Test the bot token now?"; then + if test_telegram_bot "$bot_token"; then + success "Bot token verified!" + else + warn "Could not verify bot token. You can continue and fix later." + if ! confirm "Continue anyway?"; then + fatal "Aborted by user." + fi + fi +fi + +# --- Export for template engine --- +export TELEGRAM_BOT_TOKEN="$bot_token" +export TELEGRAM_USER_ID="$user_id" + +# --- Merge config --- +step "Applying Telegram configuration" + +config_merge_telegram "$bot_token" "$user_id" +success "Telegram channel configured in openclaw.json" + +echo "" +info "After the gateway restarts, send a message to your bot to verify." diff --git a/bates-enhance/integrations/twilio/config-fragment.json b/bates-enhance/integrations/twilio/config-fragment.json new file mode 100644 index 0000000..6683993 --- /dev/null +++ b/bates-enhance/integrations/twilio/config-fragment.json @@ -0,0 +1,22 @@ +{ + "channels": { + "voice": { + "enabled": true, + "provider": "twilio", + "twilio": { + "accountSid": "{{TWILIO_SID}}", + "authToken": "{{TWILIO_TOKEN}}", + "fromNumber": "{{TWILIO_NUMBER}}" + }, + "streaming": { + "enabled": true + }, + "publicUrl": "{{VOICE_WEBHOOK_URL}}", + "maxDurationSeconds": 600, + "maxConcurrent": 1, + "outbound": { + "defaultMode": "conversation" + } + } + } +} diff --git a/bates-enhance/integrations/twilio/setup.sh b/bates-enhance/integrations/twilio/setup.sh new file mode 100644 index 0000000..86118e1 --- /dev/null +++ b/bates-enhance/integrations/twilio/setup.sh @@ -0,0 +1,134 @@ +# setup.sh -- Twilio Voice Calling integration for Bates +# Sourced by bates-enhance.sh -- do NOT run directly. +# +# Configures inbound and outbound voice calls through Twilio so Bates can +# speak with users over the phone. Streaming (real-time speech) is enabled +# by default. +# +# Prerequisites: +# - A Twilio account with a phone number +# - A publicly reachable webhook URL (Tailscale Serve or ngrok) +# - (Optional) ElevenLabs integration for high-quality TTS + +# ------------------------------------------------------------------- +# Step 1 -- Collect Twilio credentials +# ------------------------------------------------------------------- +step "Collect Twilio credentials" + +info "You need your Twilio Account SID, Auth Token, and a phone number." +info "Find them at https://console.twilio.com -> Account Info." +echo "" + +prompt_default "Twilio Account SID (starts with AC)" "" TWILIO_SID +if [[ -z "${TWILIO_SID:-}" ]]; then + fatal "Twilio Account SID is required." +fi +if [[ ! "$TWILIO_SID" =~ ^AC ]]; then + warn "Account SID usually starts with 'AC'. Double-check your value." + if ! confirm "Continue anyway?"; then + fatal "Aborted." + fi +fi + +prompt_default "Twilio Auth Token" "" TWILIO_TOKEN +if [[ -z "${TWILIO_TOKEN:-}" ]]; then + fatal "Twilio Auth Token is required." +fi + +prompt_default "Twilio phone number (E.164 format, e.g. +15551234567)" "" TWILIO_NUMBER +if [[ -z "${TWILIO_NUMBER:-}" ]]; then + fatal "Twilio phone number is required." +fi +if [[ ! "$TWILIO_NUMBER" =~ ^\+[0-9]{7,15}$ ]]; then + warn "Phone number does not look like valid E.164 format." + if ! confirm "Continue anyway?"; then + fatal "Aborted." + fi +fi + +success "Twilio credentials collected." + +# ------------------------------------------------------------------- +# Step 2 -- Determine webhook URL +# ------------------------------------------------------------------- +step "Configure webhook URL" + +DEFAULT_WEBHOOK="" +if command -v tailscale &>/dev/null; then + TS_HOSTNAME=$(tailscale status --json 2>/dev/null | python3 -c "import json,sys; print(json.load(sys.stdin).get('Self',{}).get('DNSName','').rstrip('.'))" 2>/dev/null || true) + if [[ -n "$TS_HOSTNAME" ]]; then + DEFAULT_WEBHOOK="https://${TS_HOSTNAME}:8443/webhook" + info "Tailscale detected. Suggested webhook URL: $DEFAULT_WEBHOOK" + fi +fi + +prompt_default "Webhook URL (publicly reachable)" "${DEFAULT_WEBHOOK}" VOICE_WEBHOOK_URL +if [[ -z "${VOICE_WEBHOOK_URL:-}" ]]; then + warn "No webhook URL provided. Inbound calls will not work until you set one." + VOICE_WEBHOOK_URL="" +fi + +# ------------------------------------------------------------------- +# Step 3 -- Check for ElevenLabs TTS +# ------------------------------------------------------------------- +step "Check TTS provider" + +if is_installed "elevenlabs" 2>/dev/null; then + success "ElevenLabs integration detected -- high-quality TTS will be used." +else + warn "ElevenLabs is not installed." + info "Voice calls will use the default (basic) TTS engine." + info "For a natural-sounding voice, run: bates-enhance.sh elevenlabs" +fi + +# ------------------------------------------------------------------- +# Step 4 -- Store secret in systemd drop-in (chmod 600) +# ------------------------------------------------------------------- +step "Store Twilio credentials securely" + +DROPIN_DIR="$HOME/.config/systemd/user/openclaw-gateway.service.d" +mkdir -p "$DROPIN_DIR" + +SECRETS_DROPIN="$DROPIN_DIR/twilio-secret.conf" +cat > "$SECRETS_DROPIN" </dev/null || warn "Could not reload systemd daemon." + +# ------------------------------------------------------------------- +# Step 5 -- Merge config fragment +# ------------------------------------------------------------------- +step "Merge Twilio config into openclaw.json" + +FRAGMENT_DIR="$ENHANCE_DIR/integrations/twilio" +RENDERED_FRAGMENT=$(mktemp) + +export TWILIO_SID TWILIO_TOKEN TWILIO_NUMBER VOICE_WEBHOOK_URL +template_render "$FRAGMENT_DIR/config-fragment.json" "$RENDERED_FRAGMENT" +config_merge "$RENDERED_FRAGMENT" +rm -f "$RENDERED_FRAGMENT" + +success "Config merged." + +# ------------------------------------------------------------------- +# Step 6 -- Reminder +# ------------------------------------------------------------------- +step "Configure Twilio webhook" + +echo "" +info "Point your Twilio phone number's Voice webhook to:" +info " ${VOICE_WEBHOOK_URL:-/webhook}" +echo "" +info "In the Twilio Console:" +info " 1. Go to Phone Numbers -> Manage -> Active Numbers." +info " 2. Select your number (${TWILIO_NUMBER})." +info " 3. Under Voice Configuration, set 'A CALL COMES IN' webhook to the URL above." +info " 4. Set HTTP method to POST." +echo "" + +success "Twilio voice integration setup complete." diff --git a/bates-enhance/integrations/twilio/workspace-additions/refs/voice-calling.md b/bates-enhance/integrations/twilio/workspace-additions/refs/voice-calling.md new file mode 100644 index 0000000..6a50463 --- /dev/null +++ b/bates-enhance/integrations/twilio/workspace-additions/refs/voice-calling.md @@ -0,0 +1,83 @@ +# Voice Calling + +Reference documentation for the Twilio voice integration with Bates. +Covers inbound calls, outbound calls, webhook configuration, and the +real-time streaming call flow. + +## Overview + +Bates can make and receive phone calls through Twilio. Calls use +WebSocket-based streaming so that speech is transcribed and responses are +synthesised in real time, providing a natural conversational experience. + +## Call Flow + +### Inbound Calls + +1. A caller dials the Twilio phone number. +2. Twilio sends an HTTP POST to the configured webhook URL. +3. The gateway responds with TwiML that opens a WebSocket stream. +4. Audio flows bidirectionally over the WebSocket: + - Caller speech is transcribed (STT). + - Bates generates a reply. + - The reply is synthesised (TTS) and streamed back to the caller. +5. The call ends when either party hangs up or `maxDurationSeconds` is + reached. + +### Outbound Calls + +1. Bates initiates a call via `make_voice_call` tool with a destination + number and an opening message. +2. The gateway creates a Twilio outbound call using the REST API. +3. When the callee answers, the same WebSocket streaming flow begins. + +## Configuration + +| Setting | Description | +|-------------------------|------------------------------------------| +| `twilio.accountSid` | Twilio Account SID (starts with AC) | +| `twilio.authToken` | Twilio Auth Token | +| `twilio.fromNumber` | The Twilio phone number (E.164) | +| `streaming.enabled` | Enable real-time WebSocket streaming | +| `publicUrl` | Publicly reachable URL for webhooks | +| `maxDurationSeconds` | Maximum call duration (default: 600) | +| `maxConcurrent` | Maximum simultaneous calls (default: 1) | +| `outbound.defaultMode` | Default outbound mode ("conversation") | + +## Webhook Setup + +The webhook URL must be reachable from the public internet. Two common +approaches: + +1. **Tailscale Serve** -- Expose the gateway port (18789) via Tailscale + Funnel on port 8443. The URL will look like + `https://:8443/webhook`. + +2. **Reverse proxy / ngrok** -- Use a reverse proxy or ngrok tunnel + pointed at `localhost:18789/webhook`. + +In the Twilio Console, configure: +- **Voice webhook URL**: `https://:8443/webhook` +- **HTTP method**: POST + +## TTS Providers + +| Provider | Quality | Notes | +|---------------|----------|------------------------------------| +| ElevenLabs | High | Natural voice, requires API key | +| Default/basic | Low | Built-in fallback, robotic tone | + +If the ElevenLabs integration is installed, Bates will use it +automatically for voice synthesis. Otherwise, the built-in basic TTS +engine is used. + +## Troubleshooting + +- **No audio / one-way audio**: Check that the `publicUrl` is reachable + from the internet and that the WebSocket upgrade succeeds. +- **Call drops immediately**: Verify the webhook returns valid TwiML. + Check gateway logs with `journalctl --user -u openclaw-gateway`. +- **TTS sounds robotic**: Install the ElevenLabs integration for better + quality: `bates-enhance.sh elevenlabs`. +- **Concurrent call limit**: Increase `maxConcurrent` if needed, but be + aware of API rate limits and resource usage. diff --git a/bates-enhance/integrations/websearch/config-fragment.json b/bates-enhance/integrations/websearch/config-fragment.json new file mode 100644 index 0000000..8feb896 --- /dev/null +++ b/bates-enhance/integrations/websearch/config-fragment.json @@ -0,0 +1,13 @@ +{ + "mcp": { + "servers": { + "brave-search": { + "command": "mcporter", + "args": ["run", "brave-search"], + "env": { + "BRAVE_API_KEY": "{{BRAVE_API_KEY}}" + } + } + } + } +} diff --git a/bates-enhance/integrations/websearch/setup.sh b/bates-enhance/integrations/websearch/setup.sh new file mode 100644 index 0000000..6dccdfc --- /dev/null +++ b/bates-enhance/integrations/websearch/setup.sh @@ -0,0 +1,145 @@ +# setup.sh -- Web Search integration for Bates +# Sourced by bates-enhance.sh; has access to common.sh and config-merge.sh functions. +# +# Configures web search capabilities via Brave Search and/or Perplexity MCP servers. + +step "Web Search Configuration" + +info "Bates can search the web using Brave Search and/or Perplexity." +info "You can enable one or both providers." +echo "" + +local use_brave=false +local use_perplexity=false +local dropin_dir="$HOME/.config/systemd/user/openclaw-gateway.service.d" +mkdir -p "$dropin_dir" + +# --- Provider selection --- +echo "Which web search providers would you like to enable?" +echo " 1) Brave Search only" +echo " 2) Perplexity only" +echo " 3) Both Brave Search and Perplexity" +echo "" +local provider_choice="" +read -rp "Select [1]: " provider_choice + +case "$provider_choice" in + 2) + use_perplexity=true + ;; + 3) + use_brave=true + use_perplexity=true + ;; + *) + use_brave=true + ;; +esac + +# --- Brave Search setup --- +if $use_brave; then + step "Brave Search API Key" + + info "Get your API key from: https://brave.com/search/api/" + echo "" + + local brave_key="" + while [[ -z "$brave_key" ]]; do + read -rp "Brave Search API key: " brave_key + if [[ -z "$brave_key" ]]; then + warn "API key cannot be empty." + continue + fi + if ! validate_brave_key "$brave_key"; then + warn "Key format looks unexpected (usually starts with BSA)." + if ! confirm "Use this key anyway?"; then + brave_key="" + continue + fi + fi + done + + # Store in systemd drop-in + local dropin_file="$dropin_dir/brave-search.conf" + cat > "$dropin_file" < "$dropin_file" </` +2. Discovers patch targets via grep (filenames include hash suffixes that change per release) +3. Applies patches using Node.js AST manipulation +4. Restarts the gateway to pick up changes + +## Warning + +These patches modify OpenClaw internal dist files. They are fragile and may +break with major OpenClaw refactors. Always keep backups. diff --git a/bates-enhance/patches/adaptive-cards.patch.js b/bates-enhance/patches/adaptive-cards.patch.js new file mode 100644 index 0000000..63d163b --- /dev/null +++ b/bates-enhance/patches/adaptive-cards.patch.js @@ -0,0 +1,111 @@ +#!/usr/bin/env node +/** + * adaptive-cards.patch.js -- Inject Adaptive Card rendering for sub-agent results + * + * Usage: node adaptive-cards.patch.js + * + * This patch modifies the sub-agent announce flow to send styled Adaptive Cards + * in Teams channels when a sub-agent completes its work. Non-Teams channels + * are unaffected. + * + * The patch injects a call to globalThis.__openclawSendTeamsCard (set up by + * the channel-bridge.patch.ts in the Teams extension). + */ +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +const targetFile = process.argv[2]; +if (!targetFile) { + console.error('Usage: node adaptive-cards.patch.js '); + process.exit(1); +} + +if (!fs.existsSync(targetFile)) { + console.error(`File not found: ${targetFile}`); + process.exit(1); +} + +let code = fs.readFileSync(targetFile, 'utf8'); + +// Check if already patched +if (code.includes('__openclawSendTeamsCard')) { + console.log(`Already patched: ${path.basename(targetFile)}`); + process.exit(0); +} + +// Find the sub-agent announce flow +// Look for: runSubagentAnnounceFlow or similar pattern where sub-agent results are dispatched +const announcePattern = /((?:runSubagentAnnounce|announceSubagent|subagent.*?announce)\w*\s*=\s*async\s+(?:function\s*)?\([^)]*\)\s*(?:=>)?\s*\{)/; + +let patched = false; + +if (announcePattern.test(code)) { + // Find where the result text is available and delivery happens + // Insert Adaptive Card send before the normal delivery paths + const deliveryPattern = /((?:const|let|var)\s+(?:targetRequesterOrigin|requesterOrigin)\s*=\s*[^;]+;)/; + + if (deliveryPattern.test(code)) { + code = code.replace(deliveryPattern, (match, originAssign) => { + patched = true; + return `${originAssign} + // [Bates patch] Send Adaptive Card for Teams sub-agent results + if (typeof globalThis.__openclawSendTeamsCard === 'function') { + try { + const _origin = targetRequesterOrigin || requesterOrigin; + if (_origin?.channel === 'msteams' && _origin?.conversationId) { + const _resultText = (typeof result === 'string' ? result : result?.text || result?.message || '').slice(0, 3000); + if (_resultText.length > 0) { + const _card = { + type: 'AdaptiveCard', + version: '1.4', + body: [ + { + type: 'Container', + style: 'emphasis', + items: [{ + type: 'ColumnSet', + columns: [ + { type: 'Column', width: 'auto', items: [{ type: 'TextBlock', text: '\\ud83e\\udd16', size: 'Medium' }] }, + { type: 'Column', width: 'stretch', items: [{ type: 'TextBlock', text: '**Sub-Agent Result**', wrap: true }] } + ] + }] + }, + { + type: 'Container', + style: 'accent', + items: [{ type: 'TextBlock', text: _resultText, wrap: true, size: 'Small' }] + } + ] + }; + await globalThis.__openclawSendTeamsCard(_origin.conversationId, _card).catch(() => {}); + } + } + } catch {} + }`; + }); + } +} + +if (!patched) { + // Fallback: search for any function containing "subagent" and "announce" or "result" + const fallbackPattern = /(async\s+function[^{]*subagent[^{]*\{|subagent[^=]*=\s*async[^{]*\{)/i; + if (fallbackPattern.test(code)) { + code = code.replace(fallbackPattern, (match) => { + patched = true; + return `${match} + // [Bates patch] Adaptive Card for sub-agent results (fallback insertion) + // Note: This is a fallback patch point. Verify the card is sent correctly.`; + }); + } +} + +if (patched) { + fs.writeFileSync(targetFile, code, 'utf8'); + console.log(`Patched: ${path.basename(targetFile)}`); +} else { + console.warn(`Could not find patch insertion point in: ${path.basename(targetFile)}`); + console.warn('The sub-agent announce flow may have changed. Manual patching may be required.'); + process.exit(1); +} diff --git a/bates-enhance/patches/channel-bridge.patch.ts b/bates-enhance/patches/channel-bridge.patch.ts new file mode 100644 index 0000000..1ef2f32 --- /dev/null +++ b/bates-enhance/patches/channel-bridge.patch.ts @@ -0,0 +1,46 @@ +/** + * channel-bridge.patch.ts -- Teams channel bridge for Adaptive Cards + * + * This code should be inserted into the Teams extension's channel.ts file, + * inside the startAccount() function, after the bot adapter is initialized. + * + * It exposes globalThis.__openclawSendTeamsCard so other patches (like + * adaptive-cards.patch.js) can send Adaptive Cards to Teams conversations. + * + * MANUAL PATCH: Insert this block into: + * ~/.npm-global/lib/node_modules/openclaw/extensions/msteams/src/channel.ts + * Inside startAccount(), after `adapter` is defined. + */ + +// --- BEGIN PATCH --- +// [Bates patch] Expose Teams card sender for sub-agent Adaptive Cards +(globalThis as any).__openclawSendTeamsCard = async ( + conversationId: string, + card: Record +) => { + if (!adapter || !conversationId) return; + try { + const conversationReference = { + channelId: 'msteams', + conversation: { id: conversationId }, + serviceUrl: (adapter as any).serviceUrl || 'https://smba.trafficmanager.net/teams/', + }; + await adapter.continueConversation( + conversationReference as any, + async (turnContext: any) => { + await turnContext.sendActivity({ + type: 'message', + attachments: [ + { + contentType: 'application/vnd.microsoft.card.adaptive', + content: card, + }, + ], + }); + } + ); + } catch (err) { + // Silently fail — non-critical enhancement + } +}; +// --- END PATCH --- diff --git a/bates-enhance/patches/cost-footer.patch.js b/bates-enhance/patches/cost-footer.patch.js new file mode 100644 index 0000000..6285561 --- /dev/null +++ b/bates-enhance/patches/cost-footer.patch.js @@ -0,0 +1,104 @@ +#!/usr/bin/env node +/** + * cost-footer.patch.js -- Inject cost footer transform into OpenClaw dist files + * + * Usage: node cost-footer.patch.js + * + * This patch adds a call to globalThis.__openclawMessageTransform (if defined) + * before messages are dispatched to channels. The cost-tracker plugin sets up + * this transform to append daily cost summaries to outgoing messages. + * + * Target files are discovered by grepping for specific function signatures + * in the OpenClaw dist directory. + */ +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +const targetFile = process.argv[2]; +if (!targetFile) { + console.error('Usage: node cost-footer.patch.js '); + process.exit(1); +} + +if (!fs.existsSync(targetFile)) { + console.error(`File not found: ${targetFile}`); + process.exit(1); +} + +let code = fs.readFileSync(targetFile, 'utf8'); + +// Check if already patched +if (code.includes('__openclawMessageTransform')) { + console.log(`Already patched: ${path.basename(targetFile)}`); + process.exit(0); +} + +// Pattern 1: Reply dispatcher — find where message text is finalized before send +// Look for the pattern where `text` or `body` is assigned before channel dispatch +const replyPattern = /(\btext\s*=\s*[^;]+;)(\s*(?:await\s+)?(?:deliver|dispatch|send))/g; +let patched = false; + +if (replyPattern.test(code)) { + code = code.replace(replyPattern, (match, textAssign, deliverCall) => { + patched = true; + return `${textAssign} + if (typeof globalThis.__openclawMessageTransform === 'function') { + try { text = await globalThis.__openclawMessageTransform(text, { channel: channel?.name || 'unknown' }); } catch {} + } + ${deliverCall}`; + }); +} + +// Pattern 2: Proactive delivery — similar pattern in deliver files +const proactivePattern = /((?:message|msg|body)\s*(?:\.text)?\s*=\s*[^;]+;)(\s*(?:await\s+)?(?:this\.)?(?:deliver|send|dispatch|forward))/g; + +if (!patched && proactivePattern.test(code)) { + code = code.replace(proactivePattern, (match, msgAssign, sendCall) => { + patched = true; + return `${msgAssign} + if (typeof globalThis.__openclawMessageTransform === 'function') { + try { + const _txt = typeof message === 'string' ? message : (message?.text || msg?.text || body); + const _transformed = await globalThis.__openclawMessageTransform(_txt, { channel: 'proactive' }); + if (typeof message === 'string') message = _transformed; + else if (message?.text) message.text = _transformed; + else if (msg?.text) msg.text = _transformed; + } catch {} + } + ${sendCall}`; + }); +} + +if (!patched) { + // Fallback: insert transform hook before any function that looks like a message sender + const fallbackPattern = /(async\s+function\s+(?:deliver|dispatch|send)\w*\s*\([^)]*\)\s*\{)/; + if (fallbackPattern.test(code)) { + code = code.replace(fallbackPattern, (match, funcDecl) => { + patched = true; + return `${funcDecl} + // [Bates patch] Cost footer transform + if (typeof globalThis.__openclawMessageTransform === 'function') { + try { + const _args = Array.from(arguments); + for (let i = 0; i < _args.length; i++) { + if (typeof _args[i] === 'string' && _args[i].length > 10) { + arguments[i] = await globalThis.__openclawMessageTransform(_args[i], {}); + break; + } + } + } catch {} + }`; + }); + } +} + +if (patched) { + fs.writeFileSync(targetFile, code, 'utf8'); + console.log(`Patched: ${path.basename(targetFile)}`); +} else { + console.warn(`Could not find patch insertion point in: ${path.basename(targetFile)}`); + console.warn('The file structure may have changed. Manual patching may be required.'); + process.exit(1); +} diff --git a/bates-enhance/patches/reapply-patches.sh b/bates-enhance/patches/reapply-patches.sh new file mode 100644 index 0000000..9b0611a --- /dev/null +++ b/bates-enhance/patches/reapply-patches.sh @@ -0,0 +1,189 @@ +#!/usr/bin/env bash +# reapply-patches.sh -- Re-apply all Bates patches after an OpenClaw update +# +# Usage: +# ./reapply-patches.sh # Apply all patches +# ./reapply-patches.sh --dry # Show what would be patched without applying +# +# Run this after every `openclaw update`. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DIST_DIR="$HOME/.npm-global/lib/node_modules/openclaw/dist" +TEAMS_DIR="$HOME/.npm-global/lib/node_modules/openclaw/extensions/msteams/src" +BACKUP_DIR="$HOME/.openclaw/patch-backup" +DRY_RUN="${1:-}" + +# Colors +RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m' + +info() { echo -e "${CYAN}[INFO]${NC} $*"; } +success() { echo -e "${GREEN}[OK]${NC} $*"; } +warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } +error() { echo -e "${RED}[ERROR]${NC} $*"; } + +# ── Get current OpenClaw version ── +OC_VERSION="unknown" +if command -v openclaw &>/dev/null; then + OC_VERSION=$(openclaw --version 2>/dev/null | head -1 | grep -oP '[\d.]+' | head -1 || echo "unknown") +fi +info "OpenClaw version: $OC_VERSION" + +# ── Verify dist directory ── +if [[ ! -d "$DIST_DIR" ]]; then + error "OpenClaw dist directory not found: $DIST_DIR" + exit 1 +fi + +# ── Create backup ── +BACKUP_PATH="$BACKUP_DIR/$OC_VERSION" +if [[ "$DRY_RUN" != "--dry" ]]; then + mkdir -p "$BACKUP_PATH" + info "Backup directory: $BACKUP_PATH" +fi + +# ============================================================ +# 1. Cost Footer Patches +# ============================================================ +echo "" +info "=== Cost Footer Patches ===" + +# Find target files: reply dispatcher + proactive delivery files +COST_TARGETS=() +while IFS= read -r f; do + COST_TARGETS+=("$f") +done < <(grep -rl 'triggerMessage\|deliverProactive\|dispatchReply\|deliver.*Message' "$DIST_DIR"/*.js 2>/dev/null | sort -u) + +if [[ ${#COST_TARGETS[@]} -eq 0 ]]; then + warn "No cost footer targets found. Gateway structure may have changed." +else + info "Found ${#COST_TARGETS[@]} potential target(s)" + for target in "${COST_TARGETS[@]}"; do + basename=$(basename "$target") + if [[ "$DRY_RUN" == "--dry" ]]; then + echo " Would patch: $basename" + else + # Backup original (only if not already backed up) + if [[ ! -f "$BACKUP_PATH/$basename" ]]; then + cp "$target" "$BACKUP_PATH/$basename" + fi + if node "$SCRIPT_DIR/cost-footer.patch.js" "$target"; then + success " $basename" + else + warn " Failed: $basename (may need manual patching)" + fi + fi + done +fi + +# ============================================================ +# 2. Adaptive Cards Patches +# ============================================================ +echo "" +info "=== Adaptive Cards Patches ===" + +# Find the sub-agent announce file +ANNOUNCE_TARGETS=() +while IFS= read -r f; do + ANNOUNCE_TARGETS+=("$f") +done < <(grep -rl 'runSubagentAnnounce\|subagent.*announce\|announceSubagent' "$DIST_DIR"/*.js 2>/dev/null | sort -u) + +if [[ ${#ANNOUNCE_TARGETS[@]} -eq 0 ]]; then + warn "No adaptive card targets found in dist." +else + info "Found ${#ANNOUNCE_TARGETS[@]} target(s)" + for target in "${ANNOUNCE_TARGETS[@]}"; do + basename=$(basename "$target") + if [[ "$DRY_RUN" == "--dry" ]]; then + echo " Would patch: $basename" + else + if [[ ! -f "$BACKUP_PATH/$basename" ]]; then + cp "$target" "$BACKUP_PATH/$basename" + fi + if node "$SCRIPT_DIR/adaptive-cards.patch.js" "$target"; then + success " $basename" + else + warn " Failed: $basename" + fi + fi + done +fi + +# ============================================================ +# 3. Teams Channel Bridge +# ============================================================ +echo "" +info "=== Teams Channel Bridge ===" + +CHANNEL_TS="$TEAMS_DIR/channel.ts" +if [[ ! -f "$CHANNEL_TS" ]]; then + warn "Teams channel.ts not found at: $CHANNEL_TS" + warn "Teams extension may not be installed. Skipping." +else + if grep -q '__openclawSendTeamsCard' "$CHANNEL_TS"; then + success "channel.ts already patched" + elif [[ "$DRY_RUN" == "--dry" ]]; then + echo " Would patch: channel.ts" + else + if [[ ! -f "$BACKUP_PATH/channel.ts" ]]; then + cp "$CHANNEL_TS" "$BACKUP_PATH/channel.ts" + fi + + # Find insertion point: after adapter initialization in startAccount() + # Look for a line like: const adapter = or this.adapter = + PATCH_CONTENT=$(sed -n '/^\/\/ --- BEGIN PATCH ---$/,/^\/\/ --- END PATCH ---$/p' "$SCRIPT_DIR/channel-bridge.patch.ts") + + if [[ -z "$PATCH_CONTENT" ]]; then + warn "Could not extract patch content from channel-bridge.patch.ts" + else + # Insert after the adapter assignment + if grep -q 'adapter\s*=' "$CHANNEL_TS"; then + # Use Python for reliable insertion + python3 -c " +import re, sys +with open('$CHANNEL_TS', 'r') as f: + content = f.read() +if '__openclawSendTeamsCard' in content: + print('Already patched') + sys.exit(0) +# Find adapter assignment and insert after the statement +pattern = r'((?:const|let|var)\s+adapter\s*=\s*[^;]+;)' +match = re.search(pattern, content) +if match: + insert_pos = match.end() + patch = ''' +$PATCH_CONTENT +''' + content = content[:insert_pos] + patch + content[insert_pos:] + with open('$CHANNEL_TS', 'w') as f: + f.write(content) + print('Patched successfully') +else: + print('Could not find adapter assignment', file=sys.stderr) + sys.exit(1) +" + if [[ $? -eq 0 ]]; then + success "channel.ts" + else + warn "Could not auto-patch channel.ts. Apply channel-bridge.patch.ts manually." + fi + else + warn "Could not find adapter assignment in channel.ts. Manual patching required." + fi + fi + fi +fi + +# ============================================================ +# Summary +# ============================================================ +echo "" +if [[ "$DRY_RUN" == "--dry" ]]; then + info "Dry run complete. No files were modified." +else + success "Patch application complete!" + info "Backups saved to: $BACKUP_PATH" + echo "" + info "Restart the gateway to apply changes:" + echo " systemctl --user restart openclaw-gateway" +fi From 92167da96b44273e79d2900b2c24121f97d6fa37 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Wed, 18 Feb 2026 14:01:45 +0000 Subject: [PATCH 03/63] Fix openclaw.json template to match actual OpenClaw v2026.2 config schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Found via Option B testing (fresh user install). 8 schema errors prevented gateway startup: wrong key names (definitions→list, token→botToken, ttlMinutes→ttl), misplaced sections (heartbeat, session), and missing required fields (gateway.mode, model object format, subagents config). Co-Authored-By: Claude Opus 4.6 --- bates-core/templates/openclaw.json.template | 64 ++++++++++++--------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/bates-core/templates/openclaw.json.template b/bates-core/templates/openclaw.json.template index 37ccb37..42cd9b3 100644 --- a/bates-core/templates/openclaw.json.template +++ b/bates-core/templates/openclaw.json.template @@ -1,7 +1,4 @@ { - "meta": { - "installerVersion": "2.0.0" - }, "env": { "vars": {} }, @@ -13,14 +10,11 @@ "providers": {} }, "agents": { - "definitions": { - "main": { - "name": "{{ASSISTANT_NAME}} ({{PRIMARY_MODEL_SHORT}})", - "model": "{{PRIMARY_MODEL}}", - "workspace": "~/.openclaw/workspace" - } - }, "defaults": { + "model": { + "primary": "{{PRIMARY_MODEL}}" + }, + "workspace": "~/.openclaw/workspace", "maxConcurrent": 4, "compaction": { "mode": "default", @@ -29,35 +23,51 @@ }, "contextPruning": { "mode": "cache-ttl", - "ttlMinutes": 15, + "ttl": "15m", "keepLastAssistants": 2 }, - "session": { - "reset": { - "mode": "idle", - "idleMinutes": 30 - } + "heartbeat": { + "every": "60m", + "model": "{{PRIMARY_MODEL}}" }, - "thinking": "low" - } + "subagents": { + "maxConcurrent": 4, + "maxSpawnDepth": 2, + "maxChildrenPerAgent": 3, + "archiveAfterMinutes": 60, + "model": "{{PRIMARY_MODEL}}" + }, + "sandbox": { + "mode": "off" + } + }, + "list": [ + { + "id": "main", + "name": "{{ASSISTANT_NAME}} ({{PRIMARY_MODEL_SHORT}})", + "model": { + "primary": "{{PRIMARY_MODEL}}" + } + } + ] }, - "heartbeat": { - "enabled": true, - "intervalMinutes": 60, - "activeHours": { - "start": "08:00", - "end": "22:00", - "timezone": "{{USER_TZ}}" + "session": { + "reset": { + "mode": "idle", + "idleMinutes": 30 } }, "channels": { "telegram": { "enabled": true, - "token": "{{TELEGRAM_BOT_TOKEN}}", - "allowFrom": ["{{TELEGRAM_USER_ID}}"] + "botToken": "{{TELEGRAM_BOT_TOKEN}}", + "dmPolicy": "pairing", + "streamMode": "partial" } }, "gateway": { + "port": 18789, + "mode": "local", "bind": "loopback" }, "plugins": { From 71e2f4c3f2d6effb1f369fef40a7eec1e5c45023 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Wed, 18 Feb 2026 14:14:02 +0000 Subject: [PATCH 04/63] Add disclaimer and fix auth setup for non-interactive terminals - Add prominent disclaimer to README: experimental software, no warranty, use at your own risk, not affiliated with any third-party services - Fix core-configure.sh: openclaw models auth setup-token requires an interactive TTY. Now falls back to manual credential storage when piped input is detected, with instructions to complete setup later. Co-Authored-By: Claude Opus 4.6 --- README.md | 16 ++++++++++++++++ bates-core/core-configure.sh | 14 ++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5def77f..d056a89 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,22 @@ Built on [OpenClaw](https://openclaw.ai) · Open Source · Apache 2.0 --- +> **DISCLAIMER -- PLEASE READ BEFORE PROCEEDING** +> +> This software is provided **"AS IS"**, without warranty of any kind, express or implied. This is an **experimental, pre-release project** under active development. By using this software, you acknowledge and accept the following: +> +> - **USE AT YOUR OWN RISK.** The authors, contributors, and maintainers of this project accept **no responsibility or liability** for any damage, data loss, system instability, security incidents, unexpected costs, or any other harm resulting from the use or misuse of this software. +> - This installer **modifies your system configuration**, including enabling WSL2, installing packages, creating systemd services, setting up cron jobs, and configuring network services. These changes may affect your system's stability, security, and performance. +> - This software interacts with **third-party APIs and services** (Anthropic, OpenAI, Google, Telegram, Twilio, Microsoft 365, etc.). You are solely responsible for any costs, terms of service violations, or consequences arising from the use of these services. +> - **No guarantee of correctness, security, or fitness for any particular purpose.** The installer scripts have been tested on specific hardware and software configurations. Your results may vary. +> - This software manages **AI agents that can take autonomous actions** including sending messages, making API calls, reading and writing files, and executing commands. You are responsible for supervising and configuring these agents appropriately. +> - **Back up your data before running the installer.** We strongly recommend testing on a dedicated or non-critical machine first. +> - This project is **not affiliated with, endorsed by, or supported by** OpenClaw, Anthropic, OpenAI, Google, Microsoft, Telegram, Twilio, ElevenLabs, or any other third-party service mentioned herein. +> +> **BY PROCEEDING WITH THE INSTALLATION, YOU ACCEPT FULL RESPONSIBILITY FOR ANY AND ALL CONSEQUENCES.** + +--- + ## What Bates Does Bates runs 24/7 on your Windows PC and handles your operational workflow autonomously: diff --git a/bates-core/core-configure.sh b/bates-core/core-configure.sh index 0c3b2d3..559f2e5 100755 --- a/bates-core/core-configure.sh +++ b/bates-core/core-configure.sh @@ -43,8 +43,18 @@ case "$PROVIDER_CHOICE" in if [[ -z "$SUB_TOKEN" ]]; then fatal "Subscription token is required." fi - openclaw models auth setup-token --provider anthropic <<< "$SUB_TOKEN" - success "Anthropic subscription configured." + # Try the interactive openclaw CLI first; fall back to manual credential + # storage if no TTY is available (e.g. piped input, automation). + if openclaw models auth setup-token --provider anthropic <<< "$SUB_TOKEN" 2>/dev/null; then + success "Anthropic subscription configured." + else + warn "openclaw CLI auth requires an interactive terminal. Storing token manually..." + mkdir -p "$HOME/.openclaw/credentials" + chmod 700 "$HOME/.openclaw/credentials" + echo -n "$SUB_TOKEN" > "$HOME/.openclaw/credentials/anthropic-token" + chmod 600 "$HOME/.openclaw/credentials/anthropic-token" + success "Anthropic token stored manually. Run 'openclaw models auth setup-token --provider anthropic' later to complete interactive setup." + fi echo "" read -rp "Optional: API key as fallback (or Enter to skip): " API_KEY From 0054fa83a29d2551b1e769ceccc0958e55485e5f Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Wed, 18 Feb 2026 16:12:55 +0000 Subject: [PATCH 05/63] Add Claude Code and tmux to core-setup.sh Claude Code is essential for delegation (run-delegation.sh, claude-tmux.sh, coding-agent skill) but was never installed. Also adds tmux which is needed for the claude-tmux.sh persistent session wrapper. Co-Authored-By: Claude Opus 4.6 --- bates-core/core-setup.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/bates-core/core-setup.sh b/bates-core/core-setup.sh index 710e102..756748c 100755 --- a/bates-core/core-setup.sh +++ b/bates-core/core-setup.sh @@ -21,7 +21,7 @@ run_all_checks step "Updating system packages..." sudo apt-get update -qq sudo apt-get install -y -qq \ - build-essential curl git jq ntpdate poppler-utils \ + build-essential curl git jq ntpdate poppler-utils tmux \ python3 python3-pip python3-venv # --- Node.js 22 --- @@ -61,6 +61,15 @@ else success "mcporter installed" fi +# --- Claude Code --- +step "Installing Claude Code..." +if command -v claude &>/dev/null; then + success "Claude Code already installed ($(claude --version 2>/dev/null || echo 'unknown version'))" +else + npm install -g @anthropic-ai/claude-code + success "Claude Code installed" +fi + # --- systemd linger --- step "Enabling systemd linger..." if loginctl show-user "$(whoami)" 2>/dev/null | grep -q "Linger=yes"; then From e60bd33b57b6c6d7cf7d2ce5392e4f036c569213 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Wed, 18 Feb 2026 17:41:15 +0000 Subject: [PATCH 06/63] Fix 22 config schema mismatches in bates-enhance integrations All config fragments and setup scripts were using non-existent OpenClaw config keys (mcp, features, assistant) and wrong key names/paths. Fixed to match actual OpenClaw v2026.2 schema: - telegram: token -> botToken, removed allowFrom, added dmPolicy/streamMode - twilio: channels.voice -> plugins.entries.voice-call.config, maxConcurrent -> maxConcurrentCalls - elevenlabs: channels.voice.tts -> plugins.entries.voice-call.config.tts.elevenlabs, model -> modelId, added talk section - m365: removed assistant/mcp keys, use env.vars; fixed config_merge -> config_merge_inline - github: removed mcp key, store token in env.vars - google: removed mcp key, store credentials in env.vars - websearch: removed mcp key, use tools.web.search for Brave, models.providers for Perplexity - image: removed features key, store API keys in env.vars - search: removed features key (search index uses own config.yaml) - social: removed features key, store MixPost URL in env.vars - deepseek: replaced {enabled:true} with full provider structure (baseUrl, apiKey, api, models array), added template rendering - agents: added archiveAfterMinutes and model to subagents config - config-merge.sh: fixed telegram and voice helper functions Co-Authored-By: Claude Opus 4.6 --- .../integrations/agents/config-fragment.json | 4 +- bates-enhance/integrations/agents/setup.sh | 3 +- .../deepseek/config-fragment.json | 25 +++++++- bates-enhance/integrations/deepseek/setup.sh | 7 +- .../elevenlabs/config-fragment.json | 22 +++++-- .../integrations/elevenlabs/setup.sh | 28 ++++++-- .../integrations/github/config-fragment.json | 12 +--- bates-enhance/integrations/github/setup.sh | 16 ++--- .../integrations/google/config-fragment.json | 16 ++--- bates-enhance/integrations/google/setup.sh | 4 +- .../integrations/image/config-fragment.json | 7 +- bates-enhance/integrations/image/setup.sh | 23 +++++-- .../integrations/m365/config-fragment.json | 16 +---- bates-enhance/integrations/m365/setup.sh | 2 +- .../integrations/search/config-fragment.json | 7 -- .../integrations/social/config-fragment.json | 8 +-- .../telegram/config-fragment.json | 5 +- .../integrations/twilio/config-fragment.json | 38 ++++++----- .../websearch/config-fragment.json | 17 ++--- bates-enhance/integrations/websearch/setup.sh | 64 +++++++++++++++---- bates-enhance/lib/config-merge.sh | 41 ++++++------ 21 files changed, 222 insertions(+), 143 deletions(-) diff --git a/bates-enhance/integrations/agents/config-fragment.json b/bates-enhance/integrations/agents/config-fragment.json index 908a829..f815e36 100644 --- a/bates-enhance/integrations/agents/config-fragment.json +++ b/bates-enhance/integrations/agents/config-fragment.json @@ -4,7 +4,9 @@ "subagents": { "maxSpawnDepth": 2, "maxConcurrent": 8, - "maxChildrenPerAgent": 5 + "maxChildrenPerAgent": 5, + "archiveAfterMinutes": 60, + "model": "{{DEFAULT_MODEL}}" } } } diff --git a/bates-enhance/integrations/agents/setup.sh b/bates-enhance/integrations/agents/setup.sh index 3693977..6588f6e 100644 --- a/bates-enhance/integrations/agents/setup.sh +++ b/bates-enhance/integrations/agents/setup.sh @@ -153,7 +153,8 @@ info "Setting agent spawn limits: maxSpawnDepth=2, maxConcurrent=8, maxChildrenP FRAGMENT_DIR="$AGENTS_DIR" RENDERED_FRAGMENT=$(mktemp) -cp "$FRAGMENT_DIR/config-fragment.json" "$RENDERED_FRAGMENT" +export DEFAULT_MODEL="${AGENT_MODEL:-anthropic/claude-sonnet-4-5-20250929}" +template_render "$FRAGMENT_DIR/config-fragment.json" "$RENDERED_FRAGMENT" config_merge "$RENDERED_FRAGMENT" rm -f "$RENDERED_FRAGMENT" diff --git a/bates-enhance/integrations/deepseek/config-fragment.json b/bates-enhance/integrations/deepseek/config-fragment.json index 86cfcb8..76d4f54 100644 --- a/bates-enhance/integrations/deepseek/config-fragment.json +++ b/bates-enhance/integrations/deepseek/config-fragment.json @@ -2,8 +2,31 @@ "models": { "providers": { "deepseek": { - "enabled": true + "baseUrl": "https://api.deepseek.com/v1", + "apiKey": "{{DEEPSEEK_API_KEY}}", + "api": "openai-completions", + "models": [ + { + "id": "deepseek-chat", + "name": "DeepSeek V3", + "reasoning": false, + "input": ["text"], + "cost": { + "input": 0.27, + "output": 1.1, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 64000, + "maxTokens": 8192 + } + ] } } + }, + "env": { + "vars": { + "DEEPSEEK_API_KEY": "{{DEEPSEEK_API_KEY}}" + } } } diff --git a/bates-enhance/integrations/deepseek/setup.sh b/bates-enhance/integrations/deepseek/setup.sh index 4f6e7c2..820824e 100644 --- a/bates-enhance/integrations/deepseek/setup.sh +++ b/bates-enhance/integrations/deepseek/setup.sh @@ -75,7 +75,12 @@ step "Applying DeepSeek configuration" local fragment_dir fragment_dir="$(dirname "${BASH_SOURCE[0]}")" -config_merge "$fragment_dir/config-fragment.json" +export DEEPSEEK_API_KEY="$api_key" +local rendered_fragment +rendered_fragment=$(mktemp) +template_render "$fragment_dir/config-fragment.json" "$rendered_fragment" +config_merge "$rendered_fragment" +rm -f "$rendered_fragment" success "DeepSeek model provider configured in openclaw.json" # --- Cron job info --- diff --git a/bates-enhance/integrations/elevenlabs/config-fragment.json b/bates-enhance/integrations/elevenlabs/config-fragment.json index 1b2dd9e..8620926 100644 --- a/bates-enhance/integrations/elevenlabs/config-fragment.json +++ b/bates-enhance/integrations/elevenlabs/config-fragment.json @@ -1,11 +1,21 @@ { - "channels": { - "voice": { - "tts": { - "provider": "elevenlabs", - "voiceId": "{{ELEVENLABS_VOICE_ID}}", - "model": "eleven_flash_v2_5" + "plugins": { + "entries": { + "voice-call": { + "config": { + "tts": { + "provider": "elevenlabs", + "elevenlabs": { + "voiceId": "{{ELEVENLABS_VOICE_ID}}", + "modelId": "eleven_flash_v2_5" + } + } + } } } + }, + "talk": { + "voiceId": "{{ELEVENLABS_VOICE_ID}}", + "modelId": "eleven_flash_v2_5" } } diff --git a/bates-enhance/integrations/elevenlabs/setup.sh b/bates-enhance/integrations/elevenlabs/setup.sh index 666701f..3e6e7d5 100644 --- a/bates-enhance/integrations/elevenlabs/setup.sh +++ b/bates-enhance/integrations/elevenlabs/setup.sh @@ -81,14 +81,30 @@ fragment_dir="$(dirname "${BASH_SOURCE[0]}")" # Build the config with selected model config_merge_inline "{ - \"channels\": { - \"voice\": { - \"tts\": { - \"provider\": \"elevenlabs\", - \"voiceId\": \"$voice_id\", - \"model\": \"$tts_model\" + \"plugins\": { + \"entries\": { + \"voice-call\": { + \"config\": { + \"tts\": { + \"provider\": \"elevenlabs\", + \"elevenlabs\": { + \"voiceId\": \"$voice_id\", + \"modelId\": \"$tts_model\" + } + } + } } } + }, + \"talk\": { + \"voiceId\": \"$voice_id\", + \"modelId\": \"$tts_model\" + }, + \"env\": { + \"vars\": { + \"ELEVENLABS_API_KEY\": \"$api_key\", + \"ELEVENLABS_VOICE_ID\": \"$voice_id\" + } } }" success "ElevenLabs TTS configured in openclaw.json" diff --git a/bates-enhance/integrations/github/config-fragment.json b/bates-enhance/integrations/github/config-fragment.json index 26c6d1d..a442db0 100644 --- a/bates-enhance/integrations/github/config-fragment.json +++ b/bates-enhance/integrations/github/config-fragment.json @@ -1,13 +1,7 @@ { - "mcp": { - "servers": { - "github": { - "command": "mcporter", - "args": ["run", "github"], - "env": { - "GITHUB_TOKEN": "{{GITHUB_TOKEN}}" - } - } + "env": { + "vars": { + "GITHUB_TOKEN": "{{GITHUB_TOKEN}}" } } } diff --git a/bates-enhance/integrations/github/setup.sh b/bates-enhance/integrations/github/setup.sh index 3199103..a364f14 100644 --- a/bates-enhance/integrations/github/setup.sh +++ b/bates-enhance/integrations/github/setup.sh @@ -68,21 +68,15 @@ fi local fragment_dir fragment_dir="$(dirname "${BASH_SOURCE[0]}")" -# Render template with actual token for config +# Store token in env.vars (MCP server is registered via mcporter above) config_merge_inline "{ - \"mcp\": { - \"servers\": { - \"github\": { - \"command\": \"mcporter\", - \"args\": [\"run\", \"github\"], - \"env\": { - \"GITHUB_TOKEN\": \"$github_token\" - } - } + \"env\": { + \"vars\": { + \"GITHUB_TOKEN\": \"$github_token\" } } }" -success "GitHub MCP server configured in openclaw.json" +success "GitHub integration configured in openclaw.json" echo "" info "GitHub integration is ready. Bates can now access repositories, issues, and PRs." diff --git a/bates-enhance/integrations/google/config-fragment.json b/bates-enhance/integrations/google/config-fragment.json index 227b8e5..9d85d79 100644 --- a/bates-enhance/integrations/google/config-fragment.json +++ b/bates-enhance/integrations/google/config-fragment.json @@ -1,15 +1,9 @@ { - "mcp": { - "servers": { - "google-calendar": { - "command": "mcporter", - "args": ["run", "google-calendar"], - "env": { - "GOOGLE_CLIENT_ID": "{{GOOGLE_CLIENT_ID}}", - "GOOGLE_CLIENT_SECRET": "{{GOOGLE_CLIENT_SECRET}}", - "GOOGLE_REFRESH_TOKEN": "{{GOOGLE_REFRESH_TOKEN}}" - } - } + "env": { + "vars": { + "GOOGLE_CLIENT_ID": "{{GOOGLE_CLIENT_ID}}", + "GOOGLE_CLIENT_SECRET": "{{GOOGLE_CLIENT_SECRET}}", + "GOOGLE_REFRESH_TOKEN": "{{GOOGLE_REFRESH_TOKEN}}" } } } diff --git a/bates-enhance/integrations/google/setup.sh b/bates-enhance/integrations/google/setup.sh index 98b3ab0..fbe5bd6 100644 --- a/bates-enhance/integrations/google/setup.sh +++ b/bates-enhance/integrations/google/setup.sh @@ -133,7 +133,7 @@ systemctl --user daemon-reload 2>/dev/null || warn "Could not reload systemd dae # ------------------------------------------------------------------- # Step 6 -- Merge MCP server config # ------------------------------------------------------------------- -step "Register Google MCP server in openclaw.json" +step "Store Google credentials in openclaw.json" FRAGMENT_DIR="$ENHANCE_DIR/integrations/google" RENDERED_FRAGMENT=$(mktemp) @@ -143,7 +143,7 @@ template_render "$FRAGMENT_DIR/config-fragment.json" "$RENDERED_FRAGMENT" config_merge "$RENDERED_FRAGMENT" rm -f "$RENDERED_FRAGMENT" -success "MCP server config merged." +success "Google credentials merged into config." # ------------------------------------------------------------------- # Step 7 -- Set up token refresh cron diff --git a/bates-enhance/integrations/image/config-fragment.json b/bates-enhance/integrations/image/config-fragment.json index 1fc66ef..170e9d5 100644 --- a/bates-enhance/integrations/image/config-fragment.json +++ b/bates-enhance/integrations/image/config-fragment.json @@ -1,8 +1,7 @@ { - "features": { - "imageGeneration": { - "enabled": true, - "providers": [] + "env": { + "vars": { + "OPENAI_API_KEY": "{{OPENAI_API_KEY}}" } } } diff --git a/bates-enhance/integrations/image/setup.sh b/bates-enhance/integrations/image/setup.sh index 055077e..f16a78a 100644 --- a/bates-enhance/integrations/image/setup.sh +++ b/bates-enhance/integrations/image/setup.sh @@ -125,12 +125,25 @@ success "Installed generate-image.py to $target_dir/" # --- Merge config --- step "Applying image generation configuration" +# Store API keys in env.vars for the generate-image.py script +local env_vars="{" +local env_first=true + +if $use_openai; then + env_vars+="\"OPENAI_API_KEY\": \"$openai_key\"" + env_first=false +fi + +if $use_google; then + if ! $env_first; then env_vars+=","; fi + env_vars+="\"GOOGLE_GENERATIVE_AI_API_KEY\": \"$google_key\"" +fi + +env_vars+="}" + config_merge_inline "{ - \"features\": { - \"imageGeneration\": { - \"enabled\": true, - \"providers\": $providers_json - } + \"env\": { + \"vars\": $env_vars } }" success "Image generation configured in openclaw.json" diff --git a/bates-enhance/integrations/m365/config-fragment.json b/bates-enhance/integrations/m365/config-fragment.json index c2661ba..03f4426 100644 --- a/bates-enhance/integrations/m365/config-fragment.json +++ b/bates-enhance/integrations/m365/config-fragment.json @@ -1,17 +1,7 @@ { - "assistant": { - "email": "{{ASSISTANT_EMAIL}}" - }, - "mcp": { - "servers": { - "ms365-reader": { - "command": "mcporter", - "args": ["run", "ms365-reader"] - }, - "ms365-assistant": { - "command": "mcporter", - "args": ["run", "ms365-assistant"] - } + "env": { + "vars": { + "ASSISTANT_EMAIL": "{{ASSISTANT_EMAIL}}" } } } diff --git a/bates-enhance/integrations/m365/setup.sh b/bates-enhance/integrations/m365/setup.sh index 5c6115b..1221835 100644 --- a/bates-enhance/integrations/m365/setup.sh +++ b/bates-enhance/integrations/m365/setup.sh @@ -194,7 +194,7 @@ _m365_fragment=$(sed \ -e "s|{{ASSISTANT_EMAIL}}|${ASSISTANT_EMAIL}|g" \ "$M365_DIR/config-fragment.json") -config_merge "$_m365_fragment" +config_merge_inline "$_m365_fragment" echo " Config merged." diff --git a/bates-enhance/integrations/search/config-fragment.json b/bates-enhance/integrations/search/config-fragment.json index 2ed8976..2c63c08 100644 --- a/bates-enhance/integrations/search/config-fragment.json +++ b/bates-enhance/integrations/search/config-fragment.json @@ -1,9 +1,2 @@ { - "features": { - "searchIndex": { - "enabled": true, - "dbPath": "~/.openclaw/search-index/db/search.db", - "embeddingModel": "nomic-embed-text" - } - } } diff --git a/bates-enhance/integrations/social/config-fragment.json b/bates-enhance/integrations/social/config-fragment.json index 1e5d4c2..e18dc9f 100644 --- a/bates-enhance/integrations/social/config-fragment.json +++ b/bates-enhance/integrations/social/config-fragment.json @@ -1,9 +1,7 @@ { - "features": { - "socialMedia": { - "enabled": true, - "provider": "mixpost", - "url": "{{MIXPOST_URL}}" + "env": { + "vars": { + "MIXPOST_URL": "{{MIXPOST_URL}}" } } } diff --git a/bates-enhance/integrations/telegram/config-fragment.json b/bates-enhance/integrations/telegram/config-fragment.json index b190b00..4a131ad 100644 --- a/bates-enhance/integrations/telegram/config-fragment.json +++ b/bates-enhance/integrations/telegram/config-fragment.json @@ -2,8 +2,9 @@ "channels": { "telegram": { "enabled": true, - "token": "{{TELEGRAM_BOT_TOKEN}}", - "allowFrom": ["{{TELEGRAM_USER_ID}}"] + "botToken": "{{TELEGRAM_BOT_TOKEN}}", + "dmPolicy": "pairing", + "streamMode": "partial" } } } diff --git a/bates-enhance/integrations/twilio/config-fragment.json b/bates-enhance/integrations/twilio/config-fragment.json index 6683993..33c0c60 100644 --- a/bates-enhance/integrations/twilio/config-fragment.json +++ b/bates-enhance/integrations/twilio/config-fragment.json @@ -1,21 +1,25 @@ { - "channels": { - "voice": { - "enabled": true, - "provider": "twilio", - "twilio": { - "accountSid": "{{TWILIO_SID}}", - "authToken": "{{TWILIO_TOKEN}}", - "fromNumber": "{{TWILIO_NUMBER}}" - }, - "streaming": { - "enabled": true - }, - "publicUrl": "{{VOICE_WEBHOOK_URL}}", - "maxDurationSeconds": 600, - "maxConcurrent": 1, - "outbound": { - "defaultMode": "conversation" + "plugins": { + "entries": { + "voice-call": { + "enabled": true, + "config": { + "provider": "twilio", + "fromNumber": "{{TWILIO_NUMBER}}", + "twilio": { + "accountSid": "{{TWILIO_SID}}", + "authToken": "{{TWILIO_TOKEN}}" + }, + "streaming": { + "enabled": true + }, + "publicUrl": "{{VOICE_WEBHOOK_URL}}", + "maxDurationSeconds": 600, + "maxConcurrentCalls": 1, + "outbound": { + "defaultMode": "conversation" + } + } } } } diff --git a/bates-enhance/integrations/websearch/config-fragment.json b/bates-enhance/integrations/websearch/config-fragment.json index 8feb896..13eac8f 100644 --- a/bates-enhance/integrations/websearch/config-fragment.json +++ b/bates-enhance/integrations/websearch/config-fragment.json @@ -1,13 +1,14 @@ { - "mcp": { - "servers": { - "brave-search": { - "command": "mcporter", - "args": ["run", "brave-search"], - "env": { - "BRAVE_API_KEY": "{{BRAVE_API_KEY}}" - } + "tools": { + "web": { + "search": { + "apiKey": "{{BRAVE_API_KEY}}" } } + }, + "env": { + "vars": { + "BRAVE_API_KEY": "{{BRAVE_API_KEY}}" + } } } diff --git a/bates-enhance/integrations/websearch/setup.sh b/bates-enhance/integrations/websearch/setup.sh index 6dccdfc..7902d83 100644 --- a/bates-enhance/integrations/websearch/setup.sh +++ b/bates-enhance/integrations/websearch/setup.sh @@ -114,26 +114,62 @@ systemctl --user daemon-reload # --- Merge config --- step "Applying web search configuration" -local mcp_config="{\"mcp\": {\"servers\": {" -local first=true - +# Brave Search uses the built-in tools.web.search config if $use_brave; then - mcp_config+="\"brave-search\": {\"command\": \"mcporter\", \"args\": [\"run\", \"brave-search\"], \"env\": {\"BRAVE_API_KEY\": \"$brave_key\"}}" - first=false + config_merge_inline "{ + \"tools\": { + \"web\": { + \"search\": { + \"apiKey\": \"$brave_key\" + } + } + }, + \"env\": { + \"vars\": { + \"BRAVE_API_KEY\": \"$brave_key\" + } + } + }" + success "Brave Search configured in openclaw.json" fi +# Perplexity is registered as a model provider if $use_perplexity; then - if ! $first; then - mcp_config+="," - fi - mcp_config+="\"perplexity\": {\"command\": \"mcporter\", \"args\": [\"run\", \"perplexity\"], \"env\": {\"PERPLEXITY_API_KEY\": \"$perplexity_key\"}}" + config_merge_inline "{ + \"models\": { + \"providers\": { + \"perplexity\": { + \"baseUrl\": \"https://api.perplexity.ai\", + \"apiKey\": \"$perplexity_key\", + \"api\": \"openai-completions\", + \"models\": [ + { + \"id\": \"sonar-pro\", + \"name\": \"Perplexity Sonar Pro\", + \"reasoning\": false, + \"input\": [\"text\"], + \"cost\": { + \"input\": 3, + \"output\": 15, + \"cacheRead\": 0, + \"cacheWrite\": 0 + }, + \"contextWindow\": 200000, + \"maxTokens\": 8192 + } + ] + } + } + }, + \"env\": { + \"vars\": { + \"PERPLEXITY_API_KEY\": \"$perplexity_key\" + } + } + }" + success "Perplexity configured in openclaw.json" fi -mcp_config+="}}}" - -config_merge_inline "$mcp_config" -success "Web search MCP servers configured in openclaw.json" - echo "" info "Web search is ready. Bates can now search the web for current information." if $use_brave && $use_perplexity; then diff --git a/bates-enhance/lib/config-merge.sh b/bates-enhance/lib/config-merge.sh index ab9ec93..eaf46a6 100755 --- a/bates-enhance/lib/config-merge.sh +++ b/bates-enhance/lib/config-merge.sh @@ -82,8 +82,9 @@ config_merge_telegram() { \"channels\": { \"telegram\": { \"enabled\": true, - \"token\": \"$bot_token\", - \"allowFrom\": [\"$user_id\"] + \"botToken\": \"$bot_token\", + \"dmPolicy\": \"pairing\", + \"streamMode\": \"partial\" } } }" @@ -117,25 +118,29 @@ config_merge_voice() { local tts_section="" if [[ -n "$voice_id" ]]; then - tts_section="\"tts\": {\"provider\": \"elevenlabs\", \"voiceId\": \"$voice_id\", \"model\": \"eleven_flash_v2_5\"}," + tts_section="\"tts\": {\"provider\": \"elevenlabs\", \"elevenlabs\": {\"voiceId\": \"$voice_id\", \"modelId\": \"eleven_flash_v2_5\"}}," fi config_merge_inline "{ - \"channels\": { - \"voice\": { - \"enabled\": true, - \"provider\": \"twilio\", - \"twilio\": { - \"accountSid\": \"$twilio_sid\", - \"authToken\": \"$twilio_token\", - \"fromNumber\": \"$twilio_number\" - }, - ${tts_section} - \"streaming\": {\"enabled\": true}, - \"publicUrl\": \"$webhook_url\", - \"maxDurationSeconds\": 600, - \"maxConcurrent\": 1, - \"outbound\": {\"defaultMode\": \"conversation\"} + \"plugins\": { + \"entries\": { + \"voice-call\": { + \"enabled\": true, + \"config\": { + \"provider\": \"twilio\", + \"fromNumber\": \"$twilio_number\", + \"twilio\": { + \"accountSid\": \"$twilio_sid\", + \"authToken\": \"$twilio_token\" + }, + ${tts_section} + \"streaming\": {\"enabled\": true}, + \"publicUrl\": \"$webhook_url\", + \"maxDurationSeconds\": 600, + \"maxConcurrentCalls\": 1, + \"outbound\": {\"defaultMode\": \"conversation\"} + } + } } } }" From 529e6f1649a0970ee808b203a2f9fe528ce2c6eb Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Wed, 18 Feb 2026 17:41:27 +0000 Subject: [PATCH 07/63] Add brand assets and enable Inno Setup installer branding - bates-icon.ico: Multi-size ICO (256/128/64/48/32/16) from app icon - installer-banner.bmp: 164x314 wizard banner from splash screen - installer-logo.bmp: 55x55 wizard logo from avatar - installer-splash.png: Full splash screen for reference - BatesCore.iss: Enable SetupIconFile, WizardSmallImageFile, WizardImageFile referencing the new assets Co-Authored-By: Claude Opus 4.6 --- bates-core/BatesCore.iss | 11 +++++------ bates-core/assets/bates-icon.ico | Bin 0 -> 56552 bytes bates-core/assets/installer-banner.bmp | Bin 0 -> 154542 bytes bates-core/assets/installer-logo.bmp | Bin 0 -> 9294 bytes bates-core/assets/installer-splash.png | Bin 0 -> 1786027 bytes 5 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 bates-core/assets/bates-icon.ico create mode 100644 bates-core/assets/installer-banner.bmp create mode 100644 bates-core/assets/installer-logo.bmp create mode 100644 bates-core/assets/installer-splash.png diff --git a/bates-core/BatesCore.iss b/bates-core/BatesCore.iss index d7c1158..5e6d131 100644 --- a/bates-core/BatesCore.iss +++ b/bates-core/BatesCore.iss @@ -30,10 +30,9 @@ PrivilegesRequired=admin AllowNoIcons=yes DisableProgramGroupPage=yes LicenseFile=..\LICENSE -; Uncomment when graphics are ready: -; SetupIconFile=assets\bates-icon.ico -; WizardSmallImageFile=assets\installer-logo.bmp -; WizardImageFile=assets\installer-banner.bmp +SetupIconFile=assets\bates-icon.ico +WizardSmallImageFile=assets\installer-logo.bmp +WizardImageFile=assets\installer-banner.bmp WizardStyle=modern ArchitecturesInstallIn64BitMode=x64compatible MinVersion=10.0.19041 @@ -69,8 +68,8 @@ Source: "templates\*"; DestDir: "{app}\templates"; Flags: ignoreversion ; Crontab template Source: "crontab\*"; DestDir: "{app}\crontab"; Flags: ignoreversion -; Assets (when available) -; Source: "assets\*"; DestDir: "{app}\assets"; Flags: ignoreversion +; Brand assets +Source: "assets\*"; DestDir: "{app}\assets"; Flags: ignoreversion [Run] ; Launch the PowerShell bootstrap after installation diff --git a/bates-core/assets/bates-icon.ico b/bates-core/assets/bates-icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fa93e8dbdc7a5159a1e24e01a652a01ef7f60697 GIT binary patch literal 56552 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 literal 0 HcmV?d00001 diff --git a/bates-core/assets/installer-banner.bmp b/bates-core/assets/installer-banner.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2fb15a9a40c978e1c47a7a3eb4d4f98873827802 GIT binary patch literal 154542 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≥gSb!%RJ9&oECu@PRT}+DB3C?mw3NZRhI_WPx}? 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

SgvgL^*VQm0DJvNt4AooYWozR` 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 X3pB*>#@?f9sMz~rjlNeMb@%@V2ay8O literal 0 HcmV?d00001 diff --git a/bates-core/assets/installer-logo.bmp b/bates-core/assets/installer-logo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d5f39f354c51b90767871b47ffcd3e477fe9f6ea GIT binary patch literal 9294 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ⅈ*X? z{H360HmVwu`k-Sk>)sRabi9T?2WI<9>@sM0Hso7Y4aECPfo^46wGwhR&^;ZJ^z^}O zv83Ve7hBm1|6ZtJ!*)y%kY6gFwu`&cVls8G$sSYzPP)d) zp|cuKU3SRxq72QIBZ=czru~;5j<|$NZYxiqP-#Dv8jn2Jed1M~^-vtsj!P2QK=afiV8?y!nLskKMH%f`jPi+DPgC5MaBIv{q$ z5*;SV*peqY7aD)?c{)0ZApq5AlyNW{pGqz3#%UwBmZM80qjvJDigj>@ZqRYtz77{R z_xNe6Jex}is}TZYpXfa0|Ch&Q6rpLC8hN%*Sxyt#5s!OYE7p2eGOc)0NL{=da zjY>BhT|S~*YVC4Ql(9ID<2nzV+#}PoK4|$004d?w+J(Sy+?2Y(Pt+K$L8ypeI3LMI zxw5A$ZD1Dz`#GuYDj87wNCN0tv3;n{MWSDZa3PkD^Fzdmljom*{>hW9WACS)fB*dn zJkRs|Jl*K3W}%W>>Ja3`n{X?kFn$=%0Y(nux}kY@^RUh?Hp-RL#J!*wKWr2U8mIQE zkVl&Fw{%ep4d>Hyr146^+%sg0JCU~5{AP5pbBUw>JF{VGF4qgvg`H^7%Kra2`?qCX zn&mnS8=2K}{h&mVCh2h4^x?+gE8Y3Z@Bb7I%Tzcli$P1GAOZvk?DbWqFUA;I)pM;4 zFg$_1{(0!HyE-cmBM+4su`)Z8Ic-F=3iMQp3WVeMbrT3MiL{kXwaW+G`%C>h0c-Bf zoOor%C@W*}Oj#hZcZETT#p?D{8BFd2#(*R7to;m0gmi!vUQK1|!Plc>X%%2)OIz0Dj6`WCT`2XR$telU;W2 z{rNal(b8)AUc5Yg^Wg$S3Yi3M28j z=E=OjLXU1%>9Y1v>Cs5G3S7;i9+|@=lHqSs1JXoHzE7^F(WSP|BwCLiw%d0#q%(0? z1csE)!j(Cn+n#6k z#VEgf{`br}ZSCbk4XpjXYy$bqd-=YU-#^obg^p#`XHQLr@7K@kgTA`Y$Nb>?ZvOls z&hOV2zx)2%`~7Er%^mvvJ26aXl*IY6jz0a*hGl_p4!F+^wL|x7eqUZ+m_(MkRaqxK z@E2=Lqy(-H&j!3Ks-7!I7x#1#ThDtD+}^X1+S@ql%mEY!q-5CJF7kJxz9i5LdjDEk zz!Su7)KbQkzjBLHz^7?Wf-z(==tF9*DmQM$f=!D6E+R;+Od3po0K`1$s3+-)# zmU(H6vsHc7O#1g1XZUFbB1eJ`msVv)eKsByS5#Hxia7O1_@?w4k-@`#ZJ(A*=vI8~ zWQ9t-GZPvF_H_Nsl~u729lbXY{VIi2v)$3O-XS zE~hD4{t??)f>E2mv_Lk;`_AXpj4Q|pjqa{p%^o1_$F!GCbgSCw%E38oX6^K-%&nI@niL0@+aCZ0DoKYUFb6$5!i3tZ&0HsM} zZC5=qpQ`Ew`XvmZ&S*J5;iSy~0CVCS!vm+d^W6Q*`Vro?&3J(0xK`-M zh&M~e_5Oxn!vu@hzOof zL`l<%1G<}my1h4_4XY+keQjHRY_=6t56vLzas$n}i0PdQYNQBg%*CkmxG8FP=Cu*J zQCOnq8xcNk=izOF$G+b8Ym^`-zAwQzBpRLRDUFl)I71tM{kqOZ2zB3(wN6N)eNh-* z!*X_+9oqJUN0i;7n7HhqZdHahwM}Td0sEzzB`AZf*wk$ zO=koLCfKrQJw~Ijf7niTU6u&|!VQBV6s3Fi=)pLzso%pvx|8{^tAn01(qpY;@1kU9 zCo(ZhzLcR2&HQ0(Yaf?#Xdl`NXSk?EbcvewN49WSVjhgQ+^VR&Z7=f#1J+Edn`n=@7~3Org_}{GQBN~9?MC0dS7IOLX5{1!-F{)!YMielfZMckOsgPLA zYn^E|l3l zcQ3j$-^FloP<0@1n&0bFf$mC?X*8zJR%c^#jj{@(>-73F!QF4*Fv;K{bnUYJKKXR% zCx>80J$8#%t)GE8(a=Cf?-G>{IOGnnu4bN|lE*%;)c`z&q)WY2lT{*ugJA3H%X({L zs0fZ$w}Y#C0= zoh6Ie9Au?3=Q7F!H(0e&!mnRP{M&SxvMiuAXj*^CS(Izci#9!ToC%9NZ-?PUnSA3t z<6Q2xnB>@YM6tdksVKk~MSv41ds-t4WTxs?jDmDtIJ3H-NeCw}Gz=Lfig7Ck{xzF( zFWDot$6<#Y%fjAQ-GP~$xG7YMZwH>`Y3{;DZW;|R40rwJ4uB%UaqaM*wBuycaACYe za4ije=YG&SBXX_9!XJ*u$(2hD&lR*vDaHV2Jw&XDACc9{DdhWLY#<`nlbq4X+#j{a zr*=h0;G;k^_j*tb7;OoiL_*8Y+g(f%7Pvdg<%4W zKydHUE=+4RJ?R_rFb~6;vt!X$p&d=l18dDqo1RL|>;k$Gt9PxnScOW9Kx*vIX6Nay z3bdMj1l-88$o454(AL|g1Qe(27;A)v=0~@UcMP*Z2ik~rr~3bHzOnesD6 zZ)>B+CXLE1;a3QW!tn!dPdnU;qg`HLZBD(<1!fishj&eJ9oGl;Ec4c*W8tn>y?qfazc9+&+Ngq4tYROsMWwJ?sd++XRpTY8%Ye;dXMx0_~u7Jfoo%r zWo)N1;8F|ua)IvJ8l%{)S$)^Dq>et6PQc5uuT1h>X}OMI`e}sW125 zu%lmx9jjKRtq{hck*hAcni<9}%z`63&|4-PA!oWRFYQmoFshyS3AL(j1vB=gZ8(h> zTjj*EM&Zi(i1SwPi(gw}Z03Ep#7z3!<{k-jHP~SeKy^NxleJ^VibSCHW;s0#FLjv; ze-N5WrMKfNhw+)#$!%Y2HKZr04>Pkow-M2qt9P%+(tIdxi>A4^U)bSufygef|8)wKiw%*BKqiv4rc=4I~O3C;BW7?aNQHa9-ceKa)7|ztqPztHb+YrjlZFtAB&tS602)s8$PVMui>46N^}@P5(7k~X9BEgZoYTdb zq-%}r8Fgn8z8}SFTxF(5uUtgjYdz0;7(pvE9>k8STDd;Et7>HuU~3|V8$j6ZK}n$l zv0)`L0Unb1f&$iC@WBiR9Jz-L_Vy(MUKvXV3lvXrB!|}U*MZcX4R)l&0G~j0RkPl9H%Ho7!?N+*o+gZomaAf z35RmjOAZ|Ys@vXHSxkTfwRc8-K0moNUGDcm_tjQw@7<$PDApbd#zZ&k_HD3a69YOH zC;7LU3n6lgHcv!SctyatFpn8+m^oPRHc8HeB58qC^CpJRTo6Vp*m*fiIsp>e2una5 z_}9+PCt!P2W zkjHu+Gl=4t8POHHcOa6py1O|gt-FI0e1L9oLhTPDKiwVKYptMHn9*Z^jzbl-D>HX* z0J|hO=vM86u`;6vOOUJ^rxOqz`Z@1|7T*p7glrV$gWTIU#1h*ddb!eBwIsx5y1WO7 z5fh@l-Q+A<>{!=ezSe0?sf@0UHQ7c(-4-~A46DZ5lwaBs!w<5Syev7oRM!X3gL%f2 zxKhK{^&aKf4Wx6To0C%3)vdfHqiOaw%bqvLIK;bLSqML;;)>&Kl^I+=QqQ#7Sl2W_ zEcJ#*E3)Rd9&-sHh&E_s%w1*7R04H?Xm^g`<|{{33obG{%a=eT@_C+zq4xFlHTshf ztT~K~Oc6k1Ezc4`c64`1ciBvpQ@qbwrY<6St8cMP!TwZ6R6*0spwpC~p7SdsCZT8x zY6tEuxO6Q3HP(ZK0u?f!irnp4JT34WEnw+N*ln0>np0vmPMKC}$%q=2Ft4r^UH5+-Dzr@6JZRUEk*ib`k=Mr6ER)hN? zCa$l8^Y7rjEE+6Y*AcMsZb)E5(qF#Ln&x@&zB=x2#+Cw(jm(4o^S&Ini0{8~z*uVt z|EsE$yS2!*kS25$J!kpi59cv(Up!0j<+^9UH48O`&;jKtj~67}Y5A0$4Fl?74VfRb z%_mjb0?G|1$}Wxl7Gw00lp{;`kAqZghW#@A-U=TXJHFPHn;N@kSU)#6OzWcvq*K)6 zCYWaD{4!dXdEu~&>3FL~=@9fsQ|s#(k2f)rtrFoE8{b9|V((APe|Sir607{3eXpDf z0%iU+bf_D>qPubGMg1I`nCU3d!vg~dn`JPnlDecsTFj>Bo~m&1ftl8U=CidJBF~Fz zz2l2$W9`MYK~XAW#*UIH^9wf0j1|G2BHaw-NhjSvzN-R^5Z?){HP>HfesXJms!B4IS-RwVr9F7?m5Jj5e1zgp%HF19Va)M zSuVKNIC@593l|_}-5EV6MP}z#5v|D%pTLppkr0OINLJH-hRQxdEn!|H&p-qoKY1u4;p>c~__ z$_}fYz%i2FOvh+Dm>aG2Tuc|N{ppCzjD<$&2>Nj*N3W6=gIf_kMhfW<$#+I(KF>1% z9zX)Qo*i4!#SKVO01p!+0$%DFL}^{l2ZT3H>Q8)aKsj7?yp@>$sINreG%SZz|54*M zS8JW)7+^4{%sO-{Ernc9BARfDyy6B(3Ss#q>0v3B5BeZvho=A-zliBD25*>5Yaiz! zP4l(nQ-zUPt8j1wbU&nhGmmn+jB|K{1J25rZ#yEGO^=9N%B#cYh6u8osZO#}bbWSY zklfQFK&?gwff?r?h&Om=cE_nUa`z+4v*^ow~KH3KN&TdFo4Z zd54n^Jn)WmEPwC_74McY#eZ}LEZS*7B))nV0Y=33{)Y!t@w>Qq5;*!!TI0ak9)@Ta zZTT}bv~BnIiI{q8v!e$R_cxIcv8lTTambn&z8>8Zp6{`p>c;r>MgZn9aa^0S5eyh+ zt~Ei_s*2j$6m+2yk-@e+mtJ#wwb57eX5sa5=vPD(IbZFu8mv53g|)_hk?L*f%LuGh zoCx2V_!Ei7Vpl%HQn+|(NPg*GYvzT8dyi~xmHOLyrA;q;LeV)|k zDd#H=9Gx=si_OGacVvX`FgdlD|MeBSJQx7MlF#C~nAK=H>Dw{BG4$Ok4m!UY5E8cP zQo@>9m9xKs4N<*4xL98L7;e>k1+2Y%Jj(5(b>f7vSXvx`mN^_?Y2~UC(+rAy?5=jy zNXg0A@Q%9ZjE89^8q0S~t8mTpii0Z{=gC;l`ufWCJkOI$^ScnJeZ1(dPMs4ETwB^W z+sAaIv3iCl?hRn;sFmqC^}Mk(TTE0@AcaK(2W1`otg5#jHVfE3YuAo81E!l(G&}_P z?cQF@VtjM}jfG{*Bj)9_wVrfthgYb|TmhzJ_*3S3A~;x5QTX(fgKiG?>b2JX`KkWw ztr0OltJsjqdr{q0yEJs1k-nDEDV+tgdhtOL=9v*=*nx3%x4W{vX#voPTi!-g_-uDS&@lH#FR+ zV$ds2#HkPdyP({STL1AcYcAbHPd>H@Xeg1!B|PV19CF~-m-^k8ozH*tT9fxb|JL6> z{hMFj_Wcg{aZSfFZc5D@7U0J;^k>rZ1F6FJ&l@vKI6f~hR>C$e%6AGu#MncIZS(am>Jhnu5EajcbD0G$q_DI7q#SWZXzlos;@-%;TT(1 zz*RMBZmE{7#?*?qMaJ@G!U&|hV{Y7sb|+yzv49v7g7DP)V9iqZFJH0>TZFUe?YFS! zaQHn=2=Duz`i%FRL|!b{VC83;85BM6-;d+aTom}KSi8@u7;!1@lmb-Xm@NDebpM=Q=d zQwUBj)QT#ZR|GSA-7W+;YxBEB9CS81Q=8I_HbiWd0TLc%#u8F4%-I<&Ynm+SA>`q( zYpcqz22w}KK=1^RgV2q&9=m&4^%It|fXn4V!4f&4WpV*immiVnJrx15686Slonk!V7Ulr{7iU*xuUMdLU-@I3Exp&d+(Zl zbJW|VHP(yfqX1&`(500FuDQcm82dDh)g~QkS7c`;G>sl(TmZMUKRZ1xlkXX!YD%E0 zwvxB{y~*XBH}P*wY2(Nn=3E_-GyBFyu7`zzSpYyE`YpcGk`*&#@Kb|B&w;chH=7y-0DLHZpz=gCzhu&!`pfauUj7FTB7+od~`b>96Ca@jPG3%1jxuW8MaD?4Q_H5m=d3 zyK18gfv(!Mc?4{FOLZ6POL+!an-J1AH?ZitZoq8*(m8+b>)hf1gCWMaoI0v=GB>Xs zvm{$#hLq|Rc8N>8FR=^d?d|T(^+)j?TmOww&UI}~KKMMo-{k!vndM_zuRr(ez3%^h zUqHP6)_%$ho1aU?$Lawzi#T;G-@blX+4Yy`y5I3y&-Z2e-v1aI+@FhI*7A+$VfisI zp^Kr{x8^>(8P+OPL+U{&ID_G7nPdu_BM8zPJ(k}47sl!X6PQ4~VwUbWYL@S^MyY&OT)G<#wal>G9@pNl;*`Mcf$+Ow8byC6knv%FOT{X6Os(Iuc(RUXLABI(WT4FOV} zVOBgVLgAnDzr!QqC{0YbV1OnKa>1u5i^b&E{>4Lg2vipy9T^5>Kv(;dyh z!(iO3A-)$HgU&=&r!S6R*`F9HhAG2igb~3(V4bq`=M>oNba zfZk(@+EK;H648_ay=pcNGq-EA!FnOM%4Q_}DiXXT7<4hLm7~?rK_!ws+b@~nJKCBZ z4C!qjeZ@!e8avh3SqanFWp4+pN3iL&Z+AjQp`11lXwGmcGXWes3=uBmTgD0>`EoJG zW-H%WVjMEf%kr5*|H^E`ET;$Mc}4R{q)mSd3acGVDRSM=X^K)$u(6V3ZeBKKNGZF2 zRf$d!-EC7Fd7m58#2l9VkQr?(#ubLLu3YRr|!-Mt+Tha ztw$mv;cnrM0x{}zP0m6@Ebf!v{RD$T&E|~cY}q3z;Wto=VDW&zH+Q%}AtE#*k1XHS zNHVz^sahLeA_<=$L%3UOh}UuoT2%s)xdwcK?li+seeok~5n7KHOucwCCb}Ud8kwP4 zbf$`rYBF^C>Unp8j}xH3j1&1zx`?y1_&P^Nsgi5TgT}Txeeq{-j-Me;HmARUgV{PF zE*vE>X;h%voHS8K;p!OFkvW2?Nrf$i-yL4rV%B2_q;oh zsTOjrzKuD($1n`qo*pRG0B|z*i6^z-U-!ynZz?`Ae0UL;wZ)76XBaDZ{1%-VrTk3< zI*{VZsr_;J55H&MpL`zVqbUkLG}jXE#%vAkvTNIA%)W2?`HdBDI|K$qV54?*Rqfr? zY6sM+oXX7VKnIWJHDj>c-WsQ*4;#Eq=;3DhU1HH(;q{XTaP+X>#b8-)D~IzNOUvn* zj)csXnV+ZsoEihA<#nxmT6!}XcZM~HZrHOntDTI6wa5oaiQe74duK;857N7~CSegl z*Zu(29KrI^0}>`~s+5E!Zi2$c^wUv*UaS&%iTSM-~gp1=I^#P`qN|8_qA{%&Y(@O}R5 zumkQXV3hq|c#?nX>zX@|a6a4p{j+A9;xT{p;FEeHh{Cdt*{RJ^l5 zl{QfG?%Jthc%_l=7~iEEwWF6qf^bl?;aCv_@8Z;dA~Gf^XJBcRq{V(C-Ibsl?Fd;> z6D7`nFJ6qBXJ2;k9e+LW>igyIaD(sG*L9LYrf9CLD2-1Y6{;Xu7b%b~roYbs(6kI! z#k?B9$!@`&Mup3$&?}Wq9rb8$Wjvg@pBfdteN0tT$&ST3VGH4dyklp-#E%VDoPmkk z{Hsn@uFheV!8C)*2gev7*j8LN#CGLUA-|Uh?~M@xEgN*w7>MaSP1IYvboWB$st~%I zZUts)&IumRCmm8}(fF~+Z7UQJ(E0N!HSfX7r;{hhvKR)+<~OZE)AP>i%W#XhbCu&#_GU>2R~W9EnDQy@&+V zA&6(LlnP=?2y|)w5k?9n{})h>hNDS`TlkOOTW{wOkzY#lyd!1-?#YF~45281jvQhU za58{12|}sIQxHzMJ*$@TXq+ts)Qg0zH)!X2S3H2pB%T#cAQILn*uf2 z*+5`><3FF;pK=AzNPD=vzvoCrTWPmWa-Gc^gLy%szGc!}>TVrQpNnM_4wIXpRB_C< zK@n}tJ9SrFg{XD_&!;Rz2Iz|IiSXl$we3_J!$4;@uY%Ca4p0kA5sd`M$_ zWvhAd`L{H@Pp)*bKCCsSfW5H!nWHiMUSUJq6V$I}iBMVWxfec%dD_kB)ul=GVRVEi z%G(o(OUsE?!C;wCUP|>vXxIhIXig1Wgli{ZRad8$cJ^4bBK-!ti+yw+t*^9uo3R~) zJ=y~9GvWp(-Bf#!Jz{2J94@`y(!{_(cT`ymaY3U`u02%-MLapCQ1rI`FrWP55Ne8m z&BQHCIFkG8mlr&^el8j;e{qgha;jUpyLav5W1IOM zKR%zt?P>9?BW1YTTpi~F$4>HKmpaw0K=M2@BDy1U-Bw??cNnqh+pO(lTvC#I5992v z;?%UgyGk_x-EK2CLVf$&PNIYz7h5JwH+3)9{KYZ!7}xa-1Hy(lfPWZ(%*j#;3eVL5|jCywYPSTG< z&7#EAX#5&v8G(;2T&gbaF)E=M~M?itD?iH)M zc^W8m@U1V{-S7R=V*eO#%e@3m&n)G84v=?t}1@6Y*y9NlkS{qv8P%+$7L1nkK`1F>dG~pE0o}C`E|-f z;9i+6Q|R;j?cc3n(Y_tgZw;Ertme5E+ImR)xmlR9h*UzL3iV$heClWiKj^ zD0MTRxxfO4&_M*39uehJE_}dnx_fv6T6M8UCXqL8ITeaMx^c>+gZ+-1nv>kBUtRFn zlwq-VWUQ5$xpc6OIdmS|lf!qOWigMo26jMaP?VHcAT(ZbEe}Re@&?A#VW zt365rL7#4f`ucM(#;cIli{zXHdQhzD7w?f}93}|WNajqdjfll~wEJI( zR2&05oPeMjNqcDFKMlnQB+{*X<_!e1jZ;GfK)da+=j-61CRbYQY}W|w4kO7MIOxY# zQ1+W0tPyYoHiL5#b?~IRbnmm5D%lnJ3j(9xc_-6wk3h;Y|!gMy)R+vjc> zN|G@-G(bA#s%|hIiiqf}@nRVRX`RFjWR|92#e@p_c;rg7`TVUoc2c)}Mo*!RS0oOM zK(d;^YHd^;rWZR~v)ayb!>V^*J>9B1FboCKuKg4!rD6GUWf_s2j*3NKI>FhZtB5&Z z?8iPbVdWxiXX|k|WK=2alWXlPr7A==YB$~GJp4J3$xt{t7_C;2lt~Z141%hlq3Y@B zqB32TauTSmARL_FZ}a)EcL$rQj?&iO*gAy96ph&Ga4bL2EN-lBlxXy5z$#98yHUzl z*|8m=;1Y0n;^YPkjnZT>lYKxqcSM|Bh=?6v9izk7Tx_{Hnow4{!lI%C2&WA(89VaY z%Id?hM@tZRT-L`Vl7y1SH0AA*dsqvevwcc#Nt!p~m{h{;2+o|I=YzQG_ZkdRDB}$hB75Bc;<3IRAv%pJPTf&Mb!k zY+s5)MMXG4!SKwG!miqTN1-b+vao@w?#RfMy)#!A-gi5&^4sSM6-9dtNjxH*=s@~1vira&?J(=nZXwOxz@^9bPfsdN>w!OX={9| zu@=Fp2A{n@2=v~e?4+p*z9a` z7ZL5VGDfgr%abwyIW?zH(YY^eqe%-F><`IYKx`c22@beC8*>|Y3)^9sfAA}WgG8D1 z3)~?LI5(zi`)VAH>$=A4neh+&bOGA%pJNoyy+e?ZdjLDk3?CmwJK9`N>Te5qFH^+@ z-$O{>h%y z{X2k$yKi;fwUpsUbCa*enS{daAaQR%jpeA~PvrR&9wS`P3mrF6n=a8XLrtKyrQ+M} znzL}NjbE}s4uCm=fNm9TG~7^r_(DEmgl{+WRs~|K)mL)(C61*~#*CJjPp+!K%GK4m zV#=+%b|@Z^u~u2j)BF@Ry#)i&W%S6h9D-4W0w$D!laZS4rGZZMRU~a))Z@dk0I-(k zA8`}2a~CInk-XV7`P@*?F9MQBOCni!+jDfB>nL>SoI;?HbQI})Ye5WAHNYWZ9SmlR zYYsGN8y?4E?E5v2uHt(|ln<~)#58SH?1^zG7PTw75YgScKIjMNjOtv^6M@E7I$4Pb zYK-Gjc$It|*GrY{G`s-rBPYa1bY|^{wHOiW-W^C!^*W|64v)iDC7?>(Vum(NaBJv3 zaYvb`a{V?pB`CZ~_e$@XRW`=_0_hV)S3QLUQ>aLjS+b`RoBX54Sqm!U#ApRWg&htf zhs1}Hz1Yz(B33>P_VPd#cBwJgg+ki?WVQ~*1$ zh)A|C&5Xu}iGJ*g&P3)Dwjkp(>eb}cHzAyKYy;q2>h`x=b=446Z4u2r2Xhq~ z1XbYaGx~L^5!uT8pQxWSQ9yD17{wVL)fbk1GhZ2I_Hn2{z}*9(hyHSp8Ed<1WbV&~ zC5xKKC_UhoG~r?uXh(48dcsO0-3)*_D{upv_e)?kGGTYM_Z+OF9tfmO=4pGOWlZTmv$4MFtk|u)>?e-M>}}j6cs>&)3%v zWMXAv%ITG+87d!fj#x{OgCL5yVz{Em+2DjMuvHDmS7q%_GtlsHm|px=-IbA<*`0d_ zG*%2}%LvJgY!7EssT^(&JFq_Z5UjnTW6d>pWU9FSoFORdxWlgEK7B_j7lp8OoE)|o zAxofDh7aD{)z0a$rtU1UTk*78vjC^!<(c4P?FBVk<*q-YTz1w>bQ0B7Wwi zZ%>_#zvB9LV8^_nSE-kdS*IJWM0Y<&%ZddtIhgC-abvbw-N?fU`NT-nCD!Ni`-Zqk zdTq?$Vtq(e4kqvEcB3R7}Te*JL)4hW%54Mf-8YT>1ECMQ38LNNo*+0+~zGp~daWouIo@C6IiB zj0mZ1ZMl7e@bd)Iljo%wB`H3O>uf8LD-L?Co-G*=&6!qQXai`DGvTH*6?ARIu%sHp zoeoOIEnTPyx!)aFaV(8=-R{oWTEd(NAV(}P(AdAQr+Nv_r9XX=VI5j%3)1M9y=K;~ZP5+QVmLt&6>_5G- zHLf?N;nGqxkfC6ub+Na31=;uVhhl8L!;|sa#J;aI>+6pILtUPlTiaU*lXDJvW5ma?Gy#rk(Udpb~Ryy4Tx@c@W$L)q1SVrIaC_SAf^>4{9BK z)W5mZJ8bNlP^uiRIO7_KPNc8-6T+BbVsTdcvlOc;0SQ}bgP-u>1ilQC*%8H2E1*`U zH-Me{_jw8kYywdJ+vNrfSB2?z%;Lp&nCs@%LY5kR0RL2W7}n{RQK7hYc~J*(`aZyv zSe{pA|7j{1&Af+;>O|spE%vau4cj3BFKBP7iDb4J9vB9B`3tjVq4YJdZ7hckwn;Ba z@?RZX%1GJ_=Fh;>qnKEyKdvkSGYSKe=vcZg=;9yfNIlZcbuJ!=P>cQG_fx}p0D8bP z)KtwWEP3w3G*V`?>~I*{TTu?Ng}@Vx3#h=X4Z;v^Jsy$I^PsbHbui2uxj5mg_2;i2 z&({~&^{M~{r*v2q(Shz9`rxRgCbN^<=P}whgV-Y6KSFG|=`>TTP%4)rAk(KS7>rS8palcp`x9G8q|4ER4f_ z#P-(TEi^app_UHmeU%`%#;rS0wTCE|urkEd;fzU)WSVHwRb#)<*{*K3E>>qCi~$Cp zYi1{p#dd(_>_G?*hD%m$0F63am?Y_&nncEAO@BwU2rNeN9{Xj{3>K=jQ&%RBqgI$S zM!;UOO?LBq{kfwyPN5?JbNrhFCd_u#GWa88K;Mxycvm79anMX#$BV%6+Qiu+C#G%y-0wWq z;e}QLna7%TVWk7_vqRnYJGO0JUq{DB2Q>Q)2V7#|K_M48oFEL-_{Gt`ibEVJu_~Jr z`p(~m&rPk!(zw)O@9>Fr^g$cr1g0V&{sl?V-R@Q?0bn>H7Pqj14Z~dnKbW9r`)2Wn z^NzgStmsoq=NE^Kd3mF|Ggj?FBKKx-DI&9|;Zn5745To(>u5yI16-Xh(v1a3rbM=!<+ql%+%RN$CF>;P2mJfxy7s{P?hCQKnfJ11B!H?8BQ9AcD^iH5 z^xN?W4dJ@jr{}#aKj(;0x2$g;hUzIx@`hpH!R1(TO|Aoxu`{fklM8VinwzCXM(LU4 z*7;ia;~~IT)hmKkFoVBcN~v&$utwG{<@Ie^!==Q>U2Tm94*;LxMk#is)%uWxUNPNE z^KuUwxCBRyuyhd4w%o99A@Y3{??v9lIG{G~V}| z^ynCuZXOm={Z@L(3Ww!dF3QfXEv0(7Lyp(nMn{Lg&PpK0?sor6NS2uJQi4Z+AJzHeK2!TokU{gT2PEN8l|z0 zyASz}p?}dOzLOUcZsCu9{hn`@hI5Cns3lY!h1Va&x-H!^Z)Zp&j3N32)Xx8=bi9df zcseGv2dc3+nne>4v72KkyV+vA*^pPEF@An*(7f|&>-{FmRZy7K#t zb9?T4seLPITq<2IO45fnd_3D=lF#bop`OhW+C26VIOhOPy3k7iN(L?)r zpBws|eLC8@N27j&fZj;|CuZgTtKW=;l}7Frk(txq4X|ix zqdhQM)r*RA^`sccMD~rVXAQdun7=(WMKB=zv_9(R7NVG)zIplgJl#M5#L@{wsfQ8zv^*VXm!+Ctjqs={V0Y#z zAZ{R+Epul^Z|%K(9cBSdTiKz+)RkLIUP}G?@zPaNyutS1xguhhcf9RzSmxe%`EYVu z--fFHCg{iXXlAZ4Z7Y@!f5rTN$noh`RtbnGAI~L>0a-{$x}s~dKCqf&zlw36)(Kkh z)M3P>DUKeW7qJofrmlw7qPyJ_!StpRK^l7tc>lf&$ZtZ+cWyZ9YPbTZf_ywLmJs5u zpRrr=b^)yv=HL4e*3~LV`pTPj)})#~f1vN1*}wB&4+Mb&6PVM=UB4x(=?5?|=FB^Y537LlV>X0wmtH zOI9L&x%unozs1j!XUWap>q|6~^q>FYEPsEXTiF%|!JBkt^Fp_3fy@ z1a#sc%7kZpi05?jOy{)GzuR{*hJ6_wMz2HkYwOP-EB6ZYcxW|_|o*bb6KJ!^_CU(d`kj1K@YVXR`t7=Cs?kx``u|Kpy)ZI6# zkDD2o<#9>I5F`OltYBd={IJ2!Qi#b7a(oaEq^OgTbLlJ;BOzHx<_4d(>xUk*xfH(( zfJ!mL-cfZgWrz+E8Nu#b@8@?!GDNbT>Nz8Cjuy9M1`bcY z#EU^jx46G@CfEL0)^t<#rx0z9w&zMxhk5-4Yp_vdqkWW@mgp88?U*YZ*%C!2KMBG& z(G5f9D_RkH7sslou>5N5u+vV{kKqD|*M*(3U+!gt_8B(NF>lWB>W+{I40SV5Djrk` z@$k>?i_WPMO9X0LGbftoAtTVeR`|@_08KgiG92M#k1Ve8X%y~8M_iNLx&ZJvPDrn{ z-3jgbxae^X^mPPB{q_cnRDFNJ*N%IDD~0hr0QISEz9J~EfaZ5F zfKW|b-%kh|+OhvJpRujH%-|>&bAl=QHceci=-c5^DGB`CeX2VT^RsS8k9DE^DYWsXc z^C8gD79!gfRh+G%u}Gs4LtYWQ=4e;9?|JEIrpy>{Y#=%#*jQ|K-Vd5OApp~aLSY&1 z`K}T^a={=CPy`kaFnX%#rBiPOJ_yu`zZJX^f6KZKLQ~U}FkN(rnCBkt&)A-3IJ{}t z;uo{}2RxYUHQ)~DpvT>{Z#R}!^44{LdW3ZsRha+@yCxypqubC|{A^-Iar3-Tlo)=b zz?e!VA}+2W$?kZ&Y|nm?h)QEoa{|Bd~2X&6#<2 zcxJBo^P~2Dqs7g~j{dBS%#}Pb6d9cJmAQNlt^H8lziPL!LE0KLD}A8e*rEL>RsAR< zs^jFuK`2r6R!5h(Uki7rfQ%LLaoVhoSFy$U@{ODvwY0WT>mWcKE2i4jC`58Q0j;$b ztck2FLkYZ8w=;ZW^cVemZqlwyjI&l}`~5qLzZ5cl^L4x-z;)SnL4rZKi4b|XrSSnj zrirK%h54@FUiR^RrM@uj<;B>3`m%@pVy$-b``!Awr@_Ltz@ge%)7jwo_Fvxv$6~#| zwAX##er|c7%5O>idV++)A|Y0skng$FwJ^irM(Xjxg`r*m5su;IO~h;ak3P<+O;9{n z4>Dt)7d{b3^Iovv3wR`Wqfkb>Vo{+0X zMJptIL5H?#9~BZ}&T7Q8uZmOoB9}aB?_3X{5u-lJ-jT^Hk59W0&e$iBf8uoXOM=El z5gc@`AxG`=?R&cTes>;Ro-Xdn*1F`NV&%SMK%)W^D+F69UZ1HoPlk$nq$>oKsrUP~PjTCnGO^f->Cu4CV zRBf-O?Ds?(w7BY$1$nP%Gz5n-K zRyM@2XYkTv=lh6mAEXimCca1VWN$}PLYoyTyWmmW?yljM(EtpILS|@2M!pn>K%hg{ z5w7NdSimunSBfh_g%y0RJH)91BKpSULlom`FVF0Cm@5$NLIYW#NPs&Ve?Fd2Ue#5*A|uz5 z+2z3}HJOg?(uB`rXZcFjewpyFpQ;^d1u)KE8N8jivo}RtG4jIm$o1K?al~WS<+E$h zy)H-q>G$ESM5J&+1~@1n1KsKK+V*W+nJvZI-CHJwg#ghJS>-yY(do6jYqMu~?OhvP zYC|qv`j$bVl#!i2IBi6X?9&oM6`&10DY3Gx8d2w4gGXYO<%OV`KzIV^TKm2kgC@@ z+a_}BVm~tz)p^tNMvZ(pf9nV>eCF5npnd(;uBE79V0w(2Wtg=Rk!Ymq&BhIL6iN6f>tCoou+@-G_bhiLl{A{cyH7Di8;51Yu5u3oIn?D0*{2;RInd zI*NUl*p8nqc3DQxPt`pt%I9KTzh%a-2&Wsl8Z}0Q=T*tiYWG#LqVblc{o$%o5wEg( z1?)yt_KL5yXvPZF%JvRha0AAjjflu*kuxi&)I&DhQklr6QY&TeWK;k<(4B|`HcE*$ z7C93ya=a)xDs;MS$UBU9jzepnOY1KM^KZjjNjQ29g*;TT1f_I2cZqR0kH)p z)cwh9sOSdA)CfYB$iw~qDD)Lk&h#RZrnr>#hFI4H?Zt_lxIsbnqfiLzlo)T-1k6pj9c~%b-2yp&{ zB#v+$*8Le9MkyNO1GGW6Xnn!WBLyd21&Yc1DiWL%7j7au-tCGQ|4(t8dBk+6@#~ve zB0MYt5y57{ai$%S*16Wo+@*841Z>Y*D_7XE06?L9;#n{M3z!}NIeJWVk!W1SVgSHa zdkvh_$atBQRu<=_8aS142z`MimqvU7D-h#NLzO_VtMQS7akKox0D0M_DvM%3=QJ_` z8OwzVKy%E8SUx5t8*|SH?Vw2|Ny*_u@v=uU*iH=#xi32g%_9&4xh|K zKU!)W8xm_}qPo~GRkv`&f_f?{Giz_MM_5ypEn#}LX~eK3N^>M?R;N|fR>w5kXk0Zi z7ntT|T5POj!u;%d=wH8H&ZKVYd&}Eoe8B>hk-cjyuG4^Atvj=E|05z}twrqGcih?5 z)Zrf;D}(IC@q?P!_$;-pU^gvh&M&9A`*D;`=&{*R^Zu0KA-blk+ zfP9|F#f<0k^{lnlvuFm1BzIQ;PcA`~uDH(4#g%H`hsZos%Bq#B+AQR0;PdlO-Cg^` zITHKx>F$i|LM$R-dX6mLrRZR*KjYwkJ%R6@v_`1CKiL(C+FMGz(e4s(>1T+DcDVMI z-=U_a3Oof6E9Rj6+hY}*jh-A-6PmCAH4jyGjd69Ty2&6^U~1qK|HdjzF1U6Tev&uT zTq7g8YcqPLbEz!&D?@TmqcRr}gJrwfFIJBVNkoTHgo-7nG{TAQqC55F;IX?=8G`_ZO?- zhP5`k4GzH_^$qxp$i&l3lb~)-`y&UB{(kkchQ2p9E3^{3=!kgE`%3Sh+|{KeUkdXD zh2rG^zP?)Td(zB?-~40~qt7kvj9_X^;LqIO49ol)hPbT2Yj=;Hz3$W=BNrGHdlOx# zi^JQe>+XOQ3^enW^guwoHV^^ECT7nr_hx(p!)Wx0uzE-2NW`@f6Rg9yslq0Fd<1*c zd0Fj4AF?PzpYan8XWNeQSG>4<+DR8v1Y)AQMA7H1Idh5<8yriVf$pjg&lb_nHK6!) zWOwZfL~iw$nG8now0xV56B)~i(AMM7Sg{(#l693!84cWiquK2sh0+9{hT2Md%EgIY zyZ+EH(fyt&Xp1W;PhhBSW;RjWJmiLfbBCbJ_~ggH||w{F+LR&V2A2%4@rV@P`d zmG~gQlv*ON64ASOv^z6*Z!~T-;4QUQP3ODba(@2fZxwDhYET2v+dT+%&mLUo|Fqqt zyxbwt^5~jA82eY16z*JmLat?XnGrr~ZGp2bRD5aP$U%oTuZHrS6pHJnB z+H-K|VHy>ippp>UR-IQRhE+%t*&+t5Gl{4-dNREYkEVP>x>5W{uvRBZop28 zf<(6WZXX5%eGKsRqQe%k4aMY5dFKkO8si{X8sH|=a@z}<04-Q$A9c^lOXn8|=FyF{ z=s=cmUeMWc+R85w4mY$%pL2JJ;^+qFRDX!u6s1xwT^J+SUtES_YM4eWhJU2bM47P* zm%IH!6>Z}}Uxj>0-r)p86fKbtLf8Oa(V}@->$*e(D<3PF)Z_#iCOU>}5=@1DYH7(K z?PmbUK(2+%udipV^*kB50IbC`#kp2~KKt|Y6UZrFM;)!H$RO-VUVo=BUxfw^ z1jr#Zw;2xVh7IeAjO1Z!esGsFx{O2z&{&HFm`1bhNS*<0@Q6`WMY91g`{Od&&mFda zT>L+4y$T&7;=P%0WWx#$gcckuV7u*CoUkA{vfwTsplS~vFxROjyXBUgxF0LMYLL|0 z(`0tH)jL}vyOkBq_8PUyhE7(Ek1H#5V~Coo0UHkNNA zbztDUWW%`EJc3qLvI(AVrqoZ~Qv~(Dzvq7{2_hG?En3tKH~WnE*bUkoYZZ{rcuMBanK|$mLXEGT0ZHsgQa*_ut2tj_lf%$XqnF z<5rYTo$g&ft4ax2&}#JFyY_iI25Uy9U}hr@wCOba842Ketbq1Guzizrxu0Zu`FD9iv?zq`j`T zd+JAq$<&}_N6)ft%dUjn4ZZasG}Nr!A04mUM#RfFVU)`}U5sWlGZ)3heGZ@m&`(61 zw*6s3@Un5R1x7_~xyIMtyl?+n$wdGWT5$0c@8y+e0jPI9C4RN#m*oryDRAf>Qz)p5ra>9sCg#N zh}xOc*~d$90IqwOH-JcvGEi)|dJ4Q^HYfzy{DVPqlRCMQ^E4UQMj&JF3N%hLGOY?S zmWRF*1?0JqaI)8?VnRM`jiA4K5Yh#PteUG^VTqkUR&7Yx0x~UnH1)nC%Vzrs^*Oo{ z;4Fs)tGD@?$Y@k|tc>PxwA}c}`gA9<(X)g>|KIn#G-ex!K;D z0AfI$zcl@<^N>*gEpSN-!X9hsKgLKZZ!hjeO4sFjCXSml@gfisP zLH42@-?x4{re=6e8!4S=^*73FWayjkaarCY7qW5!aK4=;9^%pr7+->D(dQ%13mo1a z8K?BFm1{lg>v_I@ti@5ov>Mrs%xA5xTA6#T{QQjie5TENV1fyXg3qdlO6`7LGLl>* zw`=F#EVLJ=&TVl)MMlb|DujIOrk z@u~>BM4q?W#VGN^n!|Fiog&NVgm}*ex9w4n81Tu|t<|cUnbS7ptMS+)qpP9*k7eWD z^W525F0!Pn<;9pGs=8wD#_BHCx%hy?=?)u+=vpi7V_ag<)NN|(7)Pl!jqvv#>TxAh z?ZBK9MLd8Y=jWH|zbU->whg`+iGI5rts}{f@?YtPdly-S6qCN1{UmNQD$W%(PGDSh zYM4L-LPtZjXS~Pd1w??Sc2!s&aNm`PvvYyaF$$vyn4{v_Vatm@bZ*#1Y;_c<&eMvj2RAB;9W z;&K_ks~C+E(Sx`S0%>dPQQ=`MbgTct9pl3SjtGY6LHer{@GK)7(@o6SNji{X;>Gm?(gl!X^NP0F zeleTyJ{s=4ruQ)BA;617*Nslv3qoBT2U7uG%!AaPm`t8h^um7Dodf?Kf2zA|-31 zbQU58s1fKj;Y7*Ey_B7iu5WB6!9;0cX6fLo&&eR3F8=2sF5jpT}1ua1OOT;E(w9s+P><=7; zld8hune8KhFXd%6plF}?thK>iF{gcOyOk5T#qfSuWMGRk!pPs03D(!+Wk4frW^#J8 zy*B=GY)yybB3bZDUIB1R7vR%agQC4Ehn@RuBrVRNm!sZ?x5*RkN?-*N(C{>hp13p^ zNs(JUD827zirvR<48-A+=5*x1pcr0{ApwnkqIatR2vr}P%@8!asKWg{=T(oz3iE{Z zfFQMGX?Xp51qw~*v}T?8hSFvMAjho@@KA-5z&`U(-P4Zu?2ELxcdbpj^VQ;z_{JXk z<%E#TKYA&W&dz~$^OAjr09qM2*+Jc~)In1a&+SAtqXn}ku;DZp8^c8=TV1Yv*7I<> za8Ky6Gcs17nH*jFXGZsK{H%8MR@wD6-yV6xD^X}UG4_hfiMnv!Ak*ntB%6I~cOYD>qQOqARNKGhXNI9$*)USe^mJTFG_*EPOJfFb=bUTa$z zM~#ybHU#Ed7_JWYT1du#9DeXyNB~JLyHu7nV<90qcfCZYLw2yMfZ?vzHRVu{v)Gpk zyAh7%@g$V4HwhI0iHD5C!d>HLHCtFS^m-H&$zGW}DXCDp zE<9J!^j~KCAoo-6f3!p6T6;r&V)q4XhL>Tbbsj|isf!tWp`~?beMz=piy@kc(B~J& zRWTyz*Pp&W5RX^q*Bg=tpc=MWoypJ>br_lL@7KJ(4uC(Dy8zhh4(B(w1JmaZW3v1{ zL%GYAUDTd8bKrwN^&!oH2=*|KmY<)hdM!2#%MN5Nv$BLYzJ)}@d+r_Lg0Ukue&TSV zNOVOfLyn~VsCmUUl}=Q_uP!6xqCVZn`Ra&>SUvn&=aGRfcaYVq(FTy%shGVLHs1!gaoIsF23H^YkW66dHgKxRO(NTJ3m%<(-+Fg5RX6@VpS3Kc-bkPwmd*zlnam6L0 zFL>)`C5X*BHa^)4tGi0g9=S&X2}cWC6ndO-Oc6;KCy%am`v3Cqw6l}z12|R+>$JXEWa2DY!55AJh zfzrd)Bw>D%eLTCYGVH@Vm)--Ss*x2wA4l)^r2=L%;?Nl8kj&}&vz})~s&y0@*ICgt z&oBbmKRLJf!*0_Up0p0XVaNQc{qqS9U5Mex=#7zdp%F0#BZ}fZ_hC44Y&{=dT{>qr zKrE!7B_Mh6zfjHXznx7p0V7ULf%vK=DQEkMfAR?RfxDwkXHw{Ouq!DG=+5;>(f0}) zP94a}40X@NR0kV7c1)S%fKj{%Fy={nGgeY^8g6|KU5+#^SB>ydU!y16-~c^?bG?qx zE1JNUZDe2uDyIoj-|>R5Aqvh^mZ6NH7$Ra-RipOanVE>Iu8xtTjUA-+Y zcqLsFiXZ7`Z9@bLg^grd4H?F;g=C3QFuhtJGS_+@AfPJsEJUmoiwC}*ufO=?>+6rN z=b_N;y%{~=Ag_@}<};Msb0xCbaoC*aD39*yUDdnx-uu)0qY+>czy^AHg96QpTKZ_5 zcV1Eg8uw9K!2#N@T$#@b%3e3-P&_n&nT-uHS3FPekBqtkD(39AR&SC=jo30+=@k?C z7}>Ml3t;fP%y48jQuS78Y>?`md2Hw4_Kd(3#hhmWUA3u!IpnKZQRUeQYM<5(z%8xl zGL`Y4nat*YgzA!%Ffko~uP<0{y{iF0o&kZ*po-e#O+(!H-s&X=ik zxW_2{!a<^KT%Y3tsBP=gf^LX2tGgaFHv1qsE1Ean;mcMRJOAGB!~f9&s~~(_g-DF4 z&lPS^AJ=IqlM6m*6VWw8MA4@Zao8yUQ1U zQCOL^uW1(-OVKHsY+a0L^`rA}lQ((Pp}Arrnfx~*$ciMss;#R6*|pi2w*llD(h!dc z1)txoL^dLPP@MaL*x_~sanM6Uk{pK`gOk9GT0=e?r-{wM9CPA7Bw=QBkw1L~)#d0g zhr;3EbEm5^_8rFlUXw%oR1eepAtaXQjEvO}HGt_9;> zS5;(qB3M-8$z5BfiGy(?*T{`y_UJx`8O#v=XJQT9u!yyS!yJ0$-m++$^v~b~kBCr8 z_N8CKYLVYqQyog%E?f#CZpV$uxhh9xx^W;&L|&&zUV3J9*DU6+(j^W4_BI^j(;2*J zy=4kX(MH7Rr9L0L_{cOpqINCeFq{o2)t4Z+kzW{+`{uMgvv;i-z^(oDbHhqX@L_D2 zz|mQ0OMz3Sny;!CbSnq*Ox$ngXT08>@~e>2cxB=6<6L%sIDiNam0QBYFFNx69h}4Y zN|;~nmYAu7-O#8}+CI%|XXgD+MR8z?>P8>&mib76cn+nE8e(xaZA7MuA9uw9^xH5FtmAvC&Xv1ceUx2&ZnLXGZo9qYkxwo-srMcwwIaF zX!a*Q&j~sG^qSUMYfenGI~-3?O)?}*7f<(RS1x4j8TUEhH%hG^B8< zsY}fMO8+)a8?sAM;mD)U&HC*a6)Gp6rd0FF7oKP)Y%1E9k0SEp248|lEoy4kShA{> zdhL#QG>lR&)1XvCWUk1ks2&5*5QgLilPxiVBGs#+%1otVG>eI?M#l|pv)IKyp~78x z@Nx#j$~&%o8M|goXey1$$nJeQIv>_O$`^EiV?G`cmnYf7ztJr?JLs}&<(p=1Z+)au^@#}j*58<9w$-{Uj7F^A+^y<1Xj(v>vMF)UfSxg&rs*$S zKU;H^{aAJ7eLd^IZWqpZiLn&zBF*oX>$0I?irR|PiQ&uyRSNSA46_g6fdkcSYcd-I z1ga~hsGkwf%-RyBz;M}#FO9yO_lWrxSDXlj+z~TnTxXMq(6Q{K#LOl1DML3duNEOav@9opa?q|m?%XZDXyXSZ^dn-jvA|*z+ zfMPRpSNBwPcRlN&v~cj^vz}wstoKH@NmoTUCMUQDbI5SBWdHcu<9kVBsLn&31kt@U z!HJw&EbKkwK4pKEO|SqNJdm;=YyrH?#@*K-8Qw;gpcDw97b*K!Qotg$R^jw?Dv zfLCPN|FtnZup9z&rnCt+Dm%PC-)VPH{keJ|hnUAuHO>bgxa2`ECpgJ>7_<`t1iGt`kkmeQPqUo*KhVl4jH~r56Tl%SOIe(#+k`fLB`7JLZ z`ZSXT5XXyMY1j$CqmV(*P=&h8V*yr3EJ=Fcf&DMlUn(52J8z!C@SVga}`~ zBeDybu;1Gm>(B+kYP61wcp?{=N{J+b!;@8;pNQHWg+i_;_6ES%aTO;7g+^2QHCe|1 z8Uo>*YStsLNV}`h>R{{s$Fv^3lDP-T!NvYoq}DIWhx9=hi0n?a1n59yXn+Dr;g~Y? znxHcOX=i0|d1mCtOB^HtUW{T24dB$Xz+rW6@?lADcXe&fGze7JjwPTBdh+wiE*p6XbvJ~ zMVNe%d7B9I4vpH)h-MziF=d=bNcp*=N5@LR>S#kH(1K#u>%^>%Wwy`^EHWF@Q!Gv?0jX1wky4fC1*xVvJ!SNBHJBRa zSliOf3zexy#{M+9s~eG=V`{bv_tW-6;zSG&5yr9-ps@G|V<>q|bz`C)Q2zp26X_7& zLa0q~8`sJyl7;b19TzlyH8YQ~j0iWHa{14qo3Wl%(CL58`epyfOt+$n04idwl`FHd zGhGm2^`d6uod+mLv?AgdvA7Bw{AK6!ID+Gsc666LKzqNsFU_2f7+HdJLk|@gUs3_7kjGWb=2u@~ZD|M;G*s^!8tXyK& zbWq;K#?)60@LXrW3PI5bBFknDt^ImjV|BNu1$_OUqaGL}-OW^&G=u@kNB8=0FIqT3S+Sz>)n+CJf1T`!7Z;X<=)hiFl(< zy^DmQRrKW;xo06YJU!#c6C!dgbW`_G!mAKrQ0slP-1{X^A#ET$`as3m|N-2H?in&hFgvU@aa(%6}I8cmjZj!U! zpS7O#yDK~7_!(A-Cbq4&N7z%^#0WT zbQNp0Yb)pzotaI0p-__`CWnZq#BPFM=*oP^MLE5(3<(t|>Q zv1DsS=A!)#Ai7p24?2tU0I=2dL3|o&5l~3bdtoaPkHFS_XSc6DSwD%9`1w zi-37R9q|TmX5^w<$iRJ?xpGLAM1zuChKBsCaOFy7I0O_~K)44(t9jfT$I*H>W!*u|S5j-HAAryfF;p!yx>T!;8ARL&-|oAvd}(`Z}jN+b)^G zk_)`9{I zC-ep&M*TFN=UJK6jST=$Fj3~R1UU3yt>RnsN1WXeslrTIj^NSYdHTvMNqB~96e)DK zUZwhRFS9OSMKYsEbpFH&ySO~TzI^Sp27?UM#rkHGV-v4$VC$;)V(8ZW9q6=y-Djl; zLNhc@=;0=YAEX~iu|ii&lZ_s;-%dy2zMFkEz9zRtMLZ8v*E#Z_@$~bgV?%ouc*b&zu9Hd1et{26nd*SG%quwLY$5l6VEeSDorjqt^QMV@L zL8971K6kDqK+nV$g1u?oY{JWoc=eh!)x)m^=kVI@x?WZk;laa5WU(x!BWwJU)+ps0bt9^})0P8! z{x}&7QZ!T*D~1w8O?9$3y~^6iz;YKOeDE>2ONPz*j)IF5&BFR!n{$mn4Il4v$-bCu zmAw(K5XVxHbp@xMa|G(AsMTxl zhEe5N{E=oVkYI*>^p|6P(Mcidy3hC*fR#@=_Q7C;k$vd0U>CLpo=yhVde+xhthIi8 zef{|Hu zc5Sj*Mn1W^HdEq?U5jaLY`DdmL*FJZdsJs{-f9$U*r(%fgbo12%E^_+v5?)+BrIv| zR6qnHDa~ca{`}PDp{sTmlM`K=U9egEqjpi!lT}m28M^m@P8z2v)k@}Qgn?L#i&%9P zo)~geVDsF%qB(JtjjND=zye;V+CBGMkq59BVgm83#fl1{;*4(UD^_M?Ow8P~+t`%*(L=tBy478}##2Vf+S)cr3fB#Zm5%L>D>ray z$b>G^wg35F)CG70nVHoy#4P88oRX zc(fL0QWRg2)@-dRBp&6j3p^PsY+(?@?((owrusQf(JcCKq(o~oY}=H*YEon{_s zvbcJm68bhMc5G%a^W2X2yxGVxc#5?&plr>}n`|j3P^IUJhkp_O`OJU;FTcBM?~h<* zEU1j@)k)}cy$*Ol?KLaHiW8*<-I=}QBvbxX2O z!Rl@%#wtpM1A)nB#*48q>`j+A)pI0A?L=H9E|AF308Eycqcx~JRip{T-bhXBfH9Vf z$LJf5$n z=7XQ9E|+IU1BH(6z~bZ-X=yUN)iq0zj3$|saHPgKs5$hvC%I~PWha5jB=ORvA@ou~ zKk>L)S~L9wSv(Dli<4Bd(qkMgvQyDfvZig*m@H8vk3Mb%kGLdC!o|0^DLyLJMZCi; zI&nh>!W}oln*m$Xum;f3AK#b5Sp8hLKIIlfG!#5XcO>X_3quiFr6bc*GIa4IAu`&idDtsTkJW|<9y-?ge!ihdI9Vq`?*F1Q3$Ld=@tL$u*=>U=`D z%-IZPy%?j+q}%UPD#L-dJ?VLgZ)xWvj&(Nt7<6;FwnyZdY=N?LPGz8D$RYh)K<0PQ zl{rLLv)j-CILgiR8D;?%Ox@(rM2p?EN<)VKnMNBqa*D>Qzx*4ghNOO*R_Ss zs5D19Q=>AP3MiJ7nQJ{}!%Ux`oCjrubt~>T#){=iDA+m$j9RM{AZ1NZ@58o3Sg>TlOy8uUo3 z|KeXPY+VoIg3w{+aHIjWk)JI|Y(T59padd5skZ1m?80;93A&ynQ zs$-chd34fv%F+UC8g;XVU+Soe#^@zF(nq_cN;WDY)d^^SVARDHwQ%8Ri-Fqw7O!1~ z{VU`30G{W8V_)JPc5_89jdE-RqGFJuNox|u?7TVjQe-!s4O2&2_{pHhTgtCzd#)`; z*AblI=p#os!T~p>{$}6L8-4rlpZgj|(d!M1s{Z)G)6ti5yf$|9es3+ z`w*jTA|RGN&(ck+izWSge=r<*7MQMCkY{ka#PjVKY4$E50z_|HYYeP7557P&^vd#5 za`@x@ZrVX~yD*=if#Kt^yF61606Zw&Chwg4ptz7f*;WYxY+tlF1-|SV@@Dv z^lA)49g@XiJl;Ldn%g^i==={@xjQQAOZzbL2?!-pSGIS4EL*%IIJ1@9wov+gK-?Hi z#C36xfUw)-u`Aw6Gmt%;8?7qbV@uQ2Hc%J_>{~=6&~QAcp@UD7^^!^H_9md(ZE?DJ zY==CqZaz3h5OLd)xyCPQ&eW($9?A8aIY>F6*Dqqc9-chaP#9~i#lZSnxxSvSuOH9X zSFZJZeX;rDvmPM!-g^r;?Y-ImSm)^@R<2!OffRbLTpUvsnW*mCNc2_SUsa#a=d*wI z-r_?#DLU)AGFL^_29mSAdD@h@93Ez%wxr3+^x-T})=)rHZ^Wmnp679hl~3P<3S)B@2iD_ftwMtqO8Eksc<9m+C^!UN;X=1IQxYXG2n%f|> z&V2NiyIi}gwh1yta81~|k{=O~%SEQPGCjh3vH$Jx_OPMu%WK3)c4L!qJ8RIpx19-%*o4so>w;N*(Z%!J1IhZ;+2 zyvdc9pR0W~sEQaT!fpdB%5R|MU*q;6FXdz{e{jh6%1T@`pa6h%8_?5^>uq-#fyV%5 z+|9F+>x=Ao=7{=3qo(b5OLt#?nYGVFzyG=jj3YDpl+B_9z?k_WT)%ELuY}iC{R_4A zuz77KKh8BdMd?=8-SH;DMwjMQ(+QtByP6q66===lgsc1Tj4_u z10~wg7|64t0qbCUkch=zFeC#rBe~Q+G<+w@GCc=YZ}aFZHAY3O(9DRCrV})?UiMk& zMpU}GaJc3&{O>%`LGl+;7{sAV9l(i*Y7S62WYQY_T^r@5g;w149YN9F)P<1rDk=B- z240S+9v@JzJ&f;RMB>Z#u~x8cVMO)j$)gkS>QEPX`J=S^FrE_~bS%j5P4Tr60P{*j zzt!l=ai4~L-&!Txu0XEtUFkw-&sLLR8rt@yVhOTy zdI~DR;!yozh7p)cz3LM6EkOKl6M4Q-(GI5%XWZcQFZ;<)G)Ku+(#;|&*v_4 zJ8PvbV!f3<%P7gQbf68alkAMMWJWG{(5pSbCaym>4l^Or^$~8oO$0Z7?8`QVs~A-X zeAH6Tep@%{P33a0WISazPPEZ$7wWAp*|N~NqYL^-na81<3sDV0eBd&b&%44Ir%S?s zTJxFjK+McH=xX&ek@Kd5bHoz~J1J}~(JJ2ox^v1(5);ixb68k=tKO!MoI3Ux(nsu| zfdgE*98xuO+)r)Ftgkv^I!l?ohwUsG0l1jgOoJFBbpS>nGFB`^baMOpVckA@JsA=E zvl-b*7EVW3*IFyx4PY4PsJBZ7B2d6#xXeByMjKZ)@)nk99*p=d9p;QG(AR5?CVciJkscQqVAp8$(=Abd8{ zT3he=au`BM%Ql6F^F%x$9=;#kKH%C230Yh@jPapum@Sq1{peJA*V84UUz?_2u|;2M z(%};CN>3ZO(YGdRk5KuPeMk@J*uOw38tVB1w91vPpu;g_-uJV}S+Z!JHb6F}Qqbbb zt0t?5S3|6M?}%W|fC-80s4#?e0m5M*AMJZ%kjt2z{Xw4J9)&$3Hsdu$J!s7mchyv$ zh~5EG7$r}k6()&Uvxv2OUs_9R$jmwg)n*=m_|WiR!asiZOq`DSFLGDI3=Z_+2^1q_AKFczPP`4n<+g zB@fJkeJ+8_e4dBpmbuoCKmPdowQz=95)E~@sS?DZ^78&e@nBXb3IHCVLU zO&~7PWN6@4HyiBi&!0Y@pZl|^taR)tY_9T)WfGbB`FwN_1Ri#b1{U_Nh+IDV5D`2t zEZ%=GJCL0#lVGOnQ?-%VvK?Sru-OlLd)2pY%9vZzN)v+4x_5_^n;OtkrTv+yROIlQo}{! zu&|_EuKoxofe4&yaEc&|9^1Ddh!r=+IB?bvZm-U2snoxx$Qu}ZK00lH;CR-B>Pn}? zcx_chB3xWV_%c3F3`Q6fK6(xBY8PsPnxC}(_K6uHB^zbw_J(_0y!7J>f3{72Ms`#} zp+DArTip{GTM24w!q#*GLt&gYR{E@;1SU0~(9ndFW}iiJH3#&cw)SBWA5-4C_}ob@3v%7Xt$<4Rl8*R!8@q+np5R*`QETnky7Q8D^k%IY0H-@0&%sI#y_? z4I&U6;y_hK1}L7;nNetLt)@OSfr-1fPoxh$gB!jO=>9-DqS!PJljDgP;Wuy`v#%s% z8x{)3Kyzo+Ul74Sc6$&nw?AM8=gYz>#Y`{uaXb7P!O z0BToh-RB$NB7VTLIs6mvUlT2oHW!m~$$U_tQF{lXq5~xp(v;L;-MJpK2262;)5a4x z@76F8Pp7E0ve`DW3J4ww?=3gp0z0;*h3MXj+OL~qk&hxcUMWcGNRJ%5qGmCB0Z@6p#bU$KQ}{ z=-Q2@9`0&-UI%y_m}lm+#ptoix_^(3;Zpk~sBm;&(@j!1Y*0sxC}5hbH(UK(vNP;G zK|PEqZx@$xzxD14smo%rRK&){pGBx5(^uMYFmyH&ySO4?pHp@yj9|6CQI-?4GVp7w zfqs`%$pVTqF3!ZUo+}4_m9`+P_9TLH8{S2M6*EA&r}I#=rf}F2)vX@7nN*>#We!LS zGuwGToq)`mH4M+$ld&>UXhqXYLT7)5QCvq5BZIqotx$Uz;>N1lpHeKPG_PCSD1>9Q z`GN{Ih!|F|E2bg^H6}*zzL`-~Yo%Qe&C-<{y*zA$I&UpREMPs)*Vm69fBcd8wB$Mf z>|LL|>$A}u$dU-P{~}3qWqmf{@B&q2M$}f^2ZDLMKehK~e}0a&TcE2DE|VE69&sA+On?Ol8Kt}Cx+wW0W8 zC_pAuVhzBe=14@gyV&fBqdTs_Og|SU@kPlTO9gYeZK1{y%4V%F+eY;ifHTD2y~$si@zI?Uc83+{4wwLFV4>p{?IJW0p)^6wtd&{M*ErFNtS?v zYn{QF57uhmm!^1ckVspjTnu^p08=2A@IWKN9jK2`9i@kP-7CUvy@Aoq2xtgxMj$dy zd(_$^m8mexQ6;m>^NWJ8CcZ?mDi0Q@p|`TSD`!zPF_T}Kc?q$3%U5mi@IKN z47DE?*Jhs=IKPeIVS{_z-k+~~xhZ(Pj7?&A=b3oQa5mlTS#jJUcY7qE-@@mU!?^R%lR7)34^6;2O%&DV0arYZ zoe(;G26g)0S0mb5&r1?kJ{B54#pJ{FqMEp+9w@-nm&O@cM8gTe_Yqs$eXoA}Ax`PL zE`sr)d2uYd{>b2niWrfxYiF!HilfjW6r&EljGVH$ttKFjzd%E4eTuanLfEPf?8K_x zQ|m+)VFbn?h(#sC9Vfanu8-W7VsBkUAaW^;A?|34&m>vJSyBUyX)!Vy%^V`~^zrc| z1jXH zB;H0M>>eN9jfq2x(izO;)b5PM{tNC$BhMw6sZROdB%V^5*=V(T&;h8SvC+J{gG&*O z{ZcXsf@lZ0M?`40T#N^*Sk>e%j`-o**Kry<5G%4^Ujpr5Ptdhao~Th52?T3pgG>-8 zA9wP8g+6>lzdc{6qk+!LECtX`eZ*O+ZqjWJ6Ho+=30%LK%jN87W=avc?+u_<2S?m4 zVNKh=wU#5xftWfP5y1K6xI@ z5QIn&(nU6LKmiN#+|V5>RVwIB;ETJHiB4#)AsbA=u(}Nw`@qDG7_&7m)}@)=CbU4L zluQX`5!0TrR)jw)hVb)!OB=tVFvehatZ8z8GjapS^+X`ESJaOu{&?0u`)7abzxxwV zKY#Y${eA!Yzxlfd^{4u*eEN||p|(LNd{r8QBKf$#@!Cwy82KXq^7H}w**UA@#$D5( zM|nTRLahy41$?9CGcN)zx%YmXOLZj)Rqm|L#IA@On*SxB>%L6uxa(+G`1j-d{V zN^%Kh^*P?#&C<;#aP2YvTBq#QbooGVnlvLB z*O&5uFhsPPkdxgBIw6rSOWZs)1FL3lHb~Awn1Kh~Q>z`tH3%A`P9r#dOO*<+Y&Os{ z?+b1RG-46r?>-4dX;lSV2M?G&VUmlWJTxU|FQdTWv%H=yRf|PjXqS!Dso?9I)vk23 zA`WVgJiS1UJU7r)%X)sYR)7a$Xx0L)0{2?Ro><~Y9T4oJ-@O^)Q53{f8z>YG`3<`X zo(Pjssl^!$9ueJBFOb+xgJ|10_4tq+k7t>|;>by`jos&`+bR<}-K5^2fUBV?NTU<)tnUKIvS~!L#lk#RizOfp;_-x zctWQT){2bvJZr5VfBbl!FP>eh?%KU;v!6 zrC##&i4O0<=6@9csvWRuS4~H+5Mn`tg}3a@C#;=8IFV~*E+AqpN;EyVl}r6#Qe`bv zM2C8fCPd96aLvT8#%ATw!2Iz@~tIj&r?pVf#-q0io zMz_m;*T6<)Q#+GBk4o zN_$X}ll3zZXvO24S3@E;8s*{Q{*r#Sh*{$eeGaU4@`lr7BFCf|Mj?P)Yczo2j&IKA z*({3=P^FN3TSMq$Um^P4zRY;^ak4lkfdQNy45_rJ zB$)c{*m6ReQ-Ik41l_T#*nKZUV3E(O;{i5Qt3USiaxI9^48rCOuah~X?-ZZeUv+r&KB?^ z)|%yKnL5&_eVt-7q4||nfSQ6a!CJY-Pw& zV1a71piXaG6QO&pljuBnJ zryGoKMj&Jy7pq~1zj}&Ih+&wo@mq}fildoA-umpb(FuWNAF)zfY;MSpjDPW8{rG2p ztpDPV{QBpA@%MlGcmMOh`;XW^|LOYEfBf{{qj&AaMxKttIu&~0$!yXnWEG^p;L#{D z&PmA8l(wJojYq!=mnzf_yn_fi1{Pq8hr=%-*PAhiQg*PUZ{nI^iZmP`J9l?v2QZEE*Qm+}hITVo=E}(Y`tjp=p7lI{ zPDz6{v}*62vBZ>W8XW6cy^E(K_pa{+hIEO6MC{)6`E*z9{rP-;Rz<|ppq*GNb14G0 z)pgwy?#IwF??|7m!>+`8xKkHM~%O{KwI0vPSsRVJ9{H^Gw=v`6C*v*)dGDjb7kRzwwzGr(e+1*iDZe7!Y zWIQ~`y&zviMtFQU-<@?%M|oQBRBd366E=kL+^~VSGrhi{Oo@)6(NT}x5fXX*Xw+oo zW(PIm#kumSEs~)YKP>W&Dg9%I1Y2stIRNFjSZ1=;n}D;rx@xT@uSHYUE$`HgeHrtS zE~^0i_N%X}#+<=^kCN)=&jiUg;KX%nV*}mAR@Ayqdwn9}zkcz(fCH1M3eIg0NH}j6 zYT@x`7Il!#@4vSPY}IR<~&Y0RR9=L_t&>Rv9#N1w@CTxIS;l;yX2T z2)Ri_GqV7iaH1u?uugow5tScn<#H@sO0+3VCne!4SVqXOY@$1vf-gj~5~p!k$SA_N zxexM*SJ-kkZ)Boxnv;qe*g>SrZpUrkYakp)vle;>A_EJG^HfLJ9SykHDFBYubiGXj zGizX_IwkH;(>@EMPG(T$1_x!3h%R);0kbVb5#vUOA!_t%UvO~-aK-3w0grYAX1TUy ztUYL;ZRvH&MwSFtLt(OV;p$)hir}B+IEzWBWdGR?U0k9)5d`XK#b-yiwtNPsz3omC z`frZdjF<|PHqY?o_-#g1)>;X4JoxlpOC=<=KLo!Sp*4HD_QB!a6h6V*a%3Qm-U>u4 zxBiI+P?@P}GZDd`6v+;ZmqaSA5w0}KK?&0icCFZZTP{xoM^c^{z&hqZY`hQshk?Sl zfsV1f?osjDq!Ye1C0U(zXc5M!c$to)~cvHnT+(|`ZJ{g?mp|M0K>SAYE<{^P&-(|`Q8|KGoi zpMU!Y{z?3o|KzX#Q~%x1%CD#E`stNac-g=%R1D^stq0 ztNWG#oO~^%+e5@>o58^AEvNt>7rgsCX6&M`l!#mT1EBWd*(~wMT;rodI=mrEPC+c= z9IF@9cG^!X>SjNY8XwX!JH~rV$kAi0IBQl0p(86v$|B8G348^kX4~ihlT&A3&y&n= z7yk~#>#^OV&~BXX?<3|P40;(i#jg$4Z3R3r)m4)5@(g&nOS$z}H;aWjm{hX_%yR`g z?Ear^ob8=v|3hj7+ta`@dj8yEhzMjZv%B!~#a6Blw_$Fq^_cf~QflS%xX$-e zF6pG4bwy_&s`>+Wa0~egXy6iCZ(zd;*%5(YXVs$F;^)+M6c^(I9jMyU+#X@MG7pzX z^AK~Vf3q^5To2qxlB!l$I8Sh_L66LWLD^BL2&?PUp@W2jbz`&# zy*59n^~!Mm{xI_k&)J`P%XLd^U)P;KzpVf9sr9?1@9q>)%-_3bjrtvBpsdx0R*bz$ zeAq>IT|^cnDNdC$2K#1DUSBrOgP17$jai(wW>Ag(IUvRzkr*GGN`F08lpNpr_4RU- zDP3(tf3{+%XllolY#nFeR>U$8dV8_+F9D$IrsrAT|2SIEJf+xb|Lz|5FXH!qInSCH zgq7UnDtqwnoT{C-GgSWn=c}(hh2o=O&QRdAo2Q6*By3?9&!ejCOLasy!#3T8T%2Ei zzZYSafE@r>5B8N7bDB-N=(MDCvxH7!3lgP+}MdU-z=boh66# zLu3S&k4o`jA$%@O(_p8Pi;_t9+PFePhbAI?7tfs)D9IsO0kjA_1X2~jnd{Xo@$~U} z{*$;NF#Cp3I~#`uG_DmW)Z;0)RmiM_8t1z(6{j18*iVMm>PMj80vhB5aXs<4{Jn&Nfq?WA-4>q^?ZaU!2g5fCU>(dKX(nj;T&QbR?>(cH9EJc-{O&0;i3L9zzz z?9$P$Lo$f)w~Su|7VmWEjNJr%E(36Fuv~qU%!10+kA4@)lm2DCB2%4f5276~?SRmY zQVvX+b4<=5+&0yVIFanbbC+%)z#nyS!CxtgE~=*4ICDjxLJ3cx`#9-ujS>1$JlymU^SHV;-8(R=rP0w+1%S0Kh-I@zzMdoNzXt8ewH<<6rc z{_z54h)DE4tUUbTQl#|pIzC7}O_a)`x|C+nix(I%9CdLWTOQNZH*b6+5x>dH*g)2{ zyL<1-+}Ih7k}~3|I=Uo)BpFs`M>|w|M>5} z{>%T(AOF=~{B0h08KR%eolZQOgvMm%Y4h<34;*0$oM|j_!s?Ff3-PygJwU+FRdD$Q zZ<)E^28LGYEJk|^zcm`_Nvai~Q6O+0H z;o`_q9z&>BoiJ`_-pZHpPA=QNIN7>V#dqyPQF-yXiRKl@Y+JkDNbJPum?M2qwq5pv zfirKrbOnigp2ZhrJ2NhrOFHPYo#~Q_Q($QrcnEiCa==HZ4&le{7~>sEzudyv({OFm z+@+hxg2dFrX5=~&{vbUWB6~zOrb=z;)jiNh-yAORZKR~U9X;UZjsmLQ=A`n&4x!$l z<>yB@6{en*bGJ~{U5wm}^r?F?x@xZg(`ow4pv_s4D{zOPHU{oOKyC{3E*ZgMM~i>sCO=&uiBr_=kxO?s+zxQrM|0szNKsV)s7craM|uHlnL{4YzYWRhq)asNQG)DWcgTsLkT3cR3Q+)c+3p zG#Tn3C-*n_4WJ$#Y>R^3h*#*MG0Ew;jFAO-ur$@$aC{gHt>D{Lf+=A+slKUd_3eIqB>vJ*Gr!${jUKoW@QA=1KPBc{(FA_#v7;$ zatgP(l8oSlmdxbYN>YBs0yD#U<8#NQL1J+b3K6_$f>nsJ{g z2wM#5+VF*RoTA{~)C6~R8gC+Nx)iV6q=A;XsSAYF!@WEj~iu0n_3 zSz&W=j(tBal^ZwhD%#+5AllR*kgc}Q;U7K6>``HoNZpO<9nIDhYNeKptn|hwfQsna zT3M^;s}0JHdyNXG=ZhujAOLxC7krFPpaO}mtmYsT#aMOQwn>4+1{}7!XwC)iA%ttp z-SG4i#u$f-tTk04JGNQCLvHnP-eldrtKk!NkKu@G-^3?z0~EMt4e7SKmRs8E-v%S0 z+E#ne8Os&3L%XndJ+FgP^=6%xekEHVfe>Gl&=3^Tt;Fpvm+Y~w(?d7S@YA}Z&k5s; z2>Lf7<4o%q$%D1C2vlH2G5sPyv2SyKM5r8fI_0=BV*Cd^@koO4WsHRyYuVkYK6984 z&cDq}S7?!qa|mO;+JMP+6V*D&*$&&8B<)aP4{1WhdJ(GYi86TGy9(88V&W9KGjDbs z**!fPK&~7zD)ZWiw$5=G-dIG8z8uyRc2Q~}yY`Nby<+d^=#B3E^Yb_V;eY7A|LdRs zmw%0_pa1D^|I>f?_x1OG{inbEU-08EzWQH$t*@^i`LTf;kH`B+gdfA7!!6>B9DO|+ zOvm?Nv@b8bm0FCI)ZqqrqvAr2joO{cmjK*l69bf`L+OlgWsw>XUpXv+CDLlCo_v$jE4OC1hKJy`C;B(+3oK zP5h;^H|Lr#52KH{KVP9fOt9lb!F4D@$Lc*;;Cdux{^ej2H`o~{aWc}HY#-i-qiLz2 zYgqK47qOzKG$&w>rs*qVfefkJ!WChOAt)4JIu*+8rCutIUk)6{*+=30(W2zuv(QNM zb2=;wR(5ZUiZfek{SG6^O!jc=n9_!Ny0@&!Q3l<zR)YaX!k18Kl!5m!b!IZM2reIDnB^fppP42*FZyjvo>LbCfUR;J)80cOZ&srUv zo)v4Y=f~IAk1y8Wv?Gvcd_H^cPek&1pgTHM(DdoOS=f@`Sq0mZD!TJ~fA;4S=+Doe zd;i?~6Ri|WsJWv$!mMXK&-1J&5WDNM6#}Z_VM$b1tVC5HR<6!mYcWPbY&g0UhCVTA zw^5sIjnthhG8WqlYG2@(GAy$p&>5;u3S_#Eg}VH(99E^x86+ogl^!;_d)IEX`+Ks6 zcXG4@hOiZRO8H(F}@!s+d8cq8kkU6EaY$5~c&K`8c` zp?bM0Hgf(NT`|ZZuD7)I;H!mS*S>ZPqDj}$UIqIIcoc=68=5P1J)t`$zj7~Wl-6Ym zujN>s_VrJM5$^$4!Tx$+R0u#nJvG)R@*ZR5ytdJlI4-Ff!e$k^h7M9s3Td|VTJ~iX zt*T|7d{*~@3?64VG?k9MdDdp-wQA{}em(D3;^~d<>*oF#%S-*qPU*Q8D;9)v5!J|4 z<%#HVj8~3zgT2A2@4axqO%ayGgyz+WwzltDkn4(P)h-efS|0#;g*gK`U4*FqJz8oa zXc0&>?0OXf$+K2^XUUM?MRk{OaLQ5Dc4B`PczE|XszN~gr@>L}oI?ZUS-Tmb0f3H` zv4AT4jJ2?(4I9wZpDPH}oQbPC5thK?`C84gqd+ElBQx23ziQLZb=8b9Lkqb|O!$C1 z85yKx1T;2cvTnGzN^V$R7qcoSiF4f3?2#$C|T zFb^E;DDUP*%hcQK#-tJTRA8&sI#dbesvQxTD+haZ%Hn7<J!-#Ihl3|$ zF1rB^^HddaOYhCj(sHkvS4ZpQz`SI3Y=G@t)B9jy#%$KOL)InbJTtG5&W zm<;8_fV)BM;gX`ugm?8ea-X(|^AZ!Tn>Ri21@XwlTG}>@wC%Dv?^#E9g!W5(Xcxp6 z!^Dh5Y#}g5Jlhiiy4weG@9^R4U;pL5|NQ;m{_X$#@A1d~ z8tb30%+F^c;2_M(Q_yi+O!KWfAK&bQ1Cjf6LL@N9N~t-C`Ef;nx)G5J{V6q309A z00YqOT?kHN82r$PK+bUnK8He?I=&qY{+!}lVFq;f#x6B{_d$jpl{>g4oLqj3_Spo^ ztZe%ZVTmRhPIz*XoJL8;|zM4jEcLS-W$ z!E55sVUVUlh)wHYzC+EvsGOivmnVlu;$4GEHR=)e?hx__q?p1s&x)|MPPI1*H%1pG zQEo44Xkx0{()f36|4hCKe94tAZ6^!JNY(>KU0-4M&>Xu))35N?KBvIosHP>-se73X zoAqJW^9CYOx%MFNf{5MStYS=NfEv3y8;dYL@H`JzAmYa#e=z#f!6{d{HybWT6$3zP zxu`iKGP8GmK0mu^^;)^mC&*Z}t3KUbpHJ=2-XGMiz4zx+pAY9I*+xNm+>BVydY;Tx z+i_fAcdh67d_GKw(D|>=M!4uAvamxwl|j*^@P7e+WtXiy4g$=qcXwt~!TzTH&B$0m z7fD8qAB&7&F_m1B8C@+cm6L!@y)`qK6`?X5@%^8@oPqTUb^v zIOU^cf^eKK+z$6kTgCL}&6Ck&Kq+Rca})nfOgcRR20=YU!4vxuIUS{ zz}9%K41Ygsh}+{rI8g!&_Z?)Xm`k1rj+cMNtg3VE=_YVWfA|I&`IsYXWp?$_iBF-F znmGjkx--n;nmf|$|2K+8(O-X=-p;qQ1KrVextgJHKqXWXsa-09QJt1tYjsz+ku8jA z8{HL4CavYhslj=6qv`{n-+}vIdN}UbF7(AQ#^`O|io#!os$C1u5+A1lF3{jiw(%Ye z7}Yw!Y5+CC8w7hJR`ps->L@Z2wW|~Rvm!JyjW1{M>KUAEDI0e5Lg7xM<4W3yQ$%Fffv){Y zsV*PF30kzZA{xOF5y1X@{shW}Yi3!QH-39YqE1AF1h?c!Cj|k20!-oq;JI{#13Jqr zir%|Io;D5Dr}kdCBCtDl6$8U7*GlZYrxunYI?eKimVh-^EN3^5sD$xVGIVgJ% zd1`fMsL9}a{DrXvQ?_!R7}t29;mJTxZH}&;0FN+k+C%h}2?W8GYFi^#uF1rrTca(4 zO6AEw(|?IPYtyZ|8BaPpst~1g_KnzmqGTk&YTqRPrujU+Fd(52$`zds7N0MB7<<^*dnUEeuJ9--` z1ufSASq-Cx9iSlHr0ZoE366aRt+xiUGD2-65m32{>Nv_HFH=1%yO5kdX4luSMOww2 z)#_hs?GYy^)E(vetn>xPyoQzcfi*(5LKI+6=ZfC3>sj%4fBiTA{eSo0{ZIe)|Mh?R z-~Frq+yC{y{a!3f@JXMqGLOgD zR;2AGYYq?`>o87^NS-(_G{X#cArhe4j>yPW#a5QV(xBWl{Y|H9>|=M!mjN<^SCTc2E#FGI4>Kzz}09~M%lC+p2?%h-aE{uzoR?H_ zS;Y5|RLFeCm2zxyDRw}#2C#fU0o;Su)nyNKj!W&3Yh;!Y{1PM(!y4QUxPmlK8pDbJ zWG?uTmp5fq%K{kn2txzx(ha8Hs4NG2IM=Npi2YmrFAR8zOKVpeqIgIX3#fJ8hF;C9-7Rf9vw?gTDn6f|#Ncu&P_MlneP=Y3#MuwE z%j=0@?0C)FQb>e$M>?Xqa(a`C`y-}yV2nJPb@^q#I{<|2l`9I?TIo(bHW$`fL>jHG zA2YMwjF!!+@0Py*Is`oIcEnH2Yvb!T!)h7U48L&8XRkdrllS2Og`1-eA z&9)>v3>zcn`gWdE)faY26eY?uB~gMU2(oO*u;3T{eglS|3lt94kKKkiMl6OsCH3s15 z`6`Fnvbk*2w^^J(Fl-+5mfGwm-iiIN=t1@@fep_>))KL{dL;+mJEpU)T zFcWM}XfK`w8pu$%#g5$|yRR?S67MJA20(eL-_#QqDbG$r#feoIowG-_x2P{%jP0`3 ziIrGLXpw13J6KVHF1GR$zG|DqP^~8Q{w{hS2 zCH>Eur91K3{Mu#-yo?8+B~ddxy^BQy#df>M%1|qe7Az)vGj+8Ef+;@?%W{OTGe6lYh9~Lz^>O7 zYcW>c+xaASzQ29HmWPzTuB)37lGWnDs6~o26Eru@B7~O-ute-kx5zh zSw%U+5QqS=GhQEyD?sP|fDy4Je(5Gh`ex?FtmSmnYZ$&7Ey0 z5vyk%f`O>IOM14f;u1Y8DsxY57lj8Hv97gVvX_(=)FsXlyhic1wizi3rOH+}m|If; zllC<1djlHtRkD59?vJirYt{MSvZ@x1s?V*FdNM!^@SLP8^{vc|KoFSeum0dQTXHqKS`;7e!Esjz8QHDn1E?CYd@grT;)5wH>Q5JD z57CyhW}F!)C^HuH81y5hr9qH$)el5xQ%c8IQkFC|sy%rP=H3zeXdm?WO9= zI`XI0Sm^Agk>_X0Y`WT+v{=lPbq0a*?|#Yu^#8ayJjy3zXFv zyiF%+^jlMr)PP2RjWPK^;niyuH5Z(%T&$t~B1(0?2x_pDaem zjy7TW`lx*asA8>3AonftU5D|}_trEu_NEy}pr9Fy7)z-gupQfv=?_WG=Q6edTbqK7M}cSCy_I;7XxfC|6F>$)nqZ<5G;ivkQX<>u}#Yj&43p6iR4 zI~)nn6!6$@Ls&L0uVGQ^dxC4(Gy=JJMPNm&%SqJbYX0{dQRwOkwuJy|0EYr*Ju%jr z@h(qqKoe@4Ic+H!n9$g>-AOv$*;ns;xV~D6&5cyQ^mrOEpEw4OMTVuCtMn!DJTYo5 zpirw@Jxp5fGt&O)#G9(+`AQkk+C;Jo!aEB4WW&dWHm#oT;^?n=OFXzwKUmZ0v1Wgr zN6ZH&Rm9@+T@9$%%+FBE>T%BYG8#0EYh_*CAl*?NV{~>k#q)H`J?I25af5`I7&m7U z0?y|ADzUBOeo7Rv!~HDtakJuZG8pAlv{wohV|NejYpZw#0`k&wYDS_(>8^G-U*OfFCp1mIc)z)~D%@2mlNE~VXgXhWZxPO19^VBZ7rJ(_++$U& z<`KvdjNrAFj}(W7Gc%N##dW~|S`@7UljsgOgD*%F6Es|ATkP7Tj67KH(ei*#9%%yB zdyQDEaomKiJxz_TbkYu}mI0!(OUgMiMGtjWp&8A|L}e{Tu{e{{S|V`p|6%mUI2mD} z1}M&|k5SL(ujbuJ7?iM)XnE96HL9@kJ$hW?MOrqF_;=@^N!BxJl8@d%a#g8#WCZ2I zu;AE}N}TS1U*%K2!I`byPQ_TOj#p`9{HTsDg@jRM%bjzSEt#F!5;1A7q#{fVMj_cu zVzrfEXp}4(NC52iA>;abASRHiNq?xePnynvQ-HNKXeqTsXtu_#ZYZxW>TDA}OahQ= zR{a^-{y0y=QXmn8kK6)htt&HYEmX?qD_QOgy9hAWb*<}qefhXPJ{WO*d|cNRD=Le{ zF8+G!Ajq-d`;Wcq@CVxGf~tMrsN6gEzH`5~YQ8cvGtS+rAp@Em0$_MI9lACpS5?X4 zf8THAh^^&l&2?RsmHXy$vDNrS0CbQ7Xb+3kn3UBpmUqX9m2LIr-YT4+Yd%n5#I<6{ zVnRf5#kzuwwb-38=pB6mD`;$A=+YZPow!LBxM;U~?JR7#Z$hHfwxT;Fn2khQW`WP~ zj1KJ*)ehVtEx45-`%wp3@c>qIREeg>5h+hWq-OKlNU(dNC*`4QzbaQFoY5<76V0M# zA7=F`1oytf@?O%-AE<(2kFnUkUtrvJEwUPWKz*_;U&%H$j~zYgajvTWJOpfzX(lpB z`Rg$2H&}e^w7@|3a5DytwD<0_MJa>USqaLojL z0p*|u&t~3}3mcML8jbj|1@lJUcMGtaA{<3J&pV%u{;2jR7Sw(%X?5lUy7(g56sA>yaJeYhjQzp)9RF+QBW09b;e4$ zr;L08-dcl7J4l03vEX*r^xi>7)7-~yf^tm&&5Q%ZjyHbj`?%!}C-M>J;iLumVNWS{ zL~mbvKjnCTco?g{Y>ugxvkhN*2}H98qcqV?|u+x)>4S6pc0AwN|{}+q@^g@I)h9@9M>)|LP%{yoFeBvXbGs zl-UtlJcQL}IV*22trk1=h`scWhhI9J(z+mUobrd?fl`8B zdw%Cw<_h{K+dJH#OP_VWe_uj3CL@~(`{EuqNL#_CVP|bwlphLaJa0!!or`<|h9C6% z59;o)iG>lzeXmWNwhqmz13O0DJyLz!6*aysC8vOowOfX$Q|;o`~z? z=lw13zx=a*`p^E$-~SSS@wUIATMOgq9UCK)@rwQ&3SQ;*&4QTj9o=dTe zJXi$mwhlw9`csu0uWF<1FcvD^y86_VkWMFVSnsr_BnP+)Uopb$(YbKv9s^x~qxZS) zsRl}vFZskZ{e^uBaMb*0h!Kx{CSxWIJG3M)HT#hA{Od4Io_{{RJzRfK-dtPz0|yuk zgJJHp%w?!u=pKsprZh0|{u@ONENKz(BYr$<>w|E*OLzFfqlHshAL*tV>8S{|&T%y@ zv|;Sie8lH4@T@6H-y1-zXuOLa0xvnYAtxZRO$6=RxhXHw2YYfvUAuRV6ksfQB6_(>2>w ztU<)Q1sx;SS}$j75^llV9|F3^#KTlp9&WQ=XHb-VdsS6Z zSgEp*QsX3H>FxpK@(#~bF(von56OK(y9Qzpl01;79v^FL(0EY7=t0c3na(GN*4$;s zh>)NvF%1$6&bh4z6ZIKCL7T6^%uoe%3XEk2){4wrNB@kH9RHq~U-c?we}S{WNcN4K za@eMTBl+snep@CQpICB~9k^AaM-=}sj%tEM|00P_V>}MEu{!1&j{jf#3f6AnnT?}3 zjcz&j*NJ%vuB@0Jb?3i)|4k3;6;VGk|&P(KHY zNn~j%KKVV&LaH=zxqC5eIP;h@E?_ z1;DP=r3C5KEKHIc0B<;3yHv0>{qlEDFqK>bEPPdvoo$p4&O6GU!%BTo&8`h@By1`x zqZ}Ly0*IFF9r-|Wi*-_32qmAt<}bvLqst;j8CZa`8D(K-WlA} zz_NILE0I7^!|)==%F4ZWgj+1K@$;~_{H0CF76mk92|V6yCl=|EiWzHNB$UJs6lz1p z()f@4jL@JYS1GYacTnL}AkoIZ^?@?*}Rh-YO%748 zh0!OS!|C1wX}!>(&b-UPE zcYJ(%?~PcmwclGVkk%}|psJq7aRlC3E9G2>xHEx#t(E(}P`~+k{q%8td0qQ{-{0Ts zqrU#}-Uu>wu@J%}U=77lqOC(whk>>6CZ2+%m#YXp{JUK$Y6X}MN-)+chm~}aG3QTJ zl~PljRcmSduDcQzHj<7&CQ1eBQ7j_Tw_%B(qFSmm9id4olg%8LaI${hAc(6^OV#K0dzu^yR0YsG;xciWSP-zwgbe+FR?q+}GJ%k$|)0261-Vpj5Jy zsNCuuoqKO}R1l_nDBixx=11i~=+H7E`g%nt%*v4Y*P$^t&Lk7Hb5}cjT_G~RKIWnQ zPJKu`1lqf?Rqwu;kL&lzGa{~t1;)-?TX^3i1Yt+L^gg zySfRqR%NAGsR8QGdp{!iK|3wh?5}uYPG8?>>Bp~Nn3aYfRvi6{{&KW`A4`zI6)RMS zN)BfVwB+*gFx$E{4Ay!o77C?R~ zqO-Rnm+QH(PcY9<9?wA7J~p4CFeb^MWw<8Ywdq0{ z1(p>N*$GjjIi4r^+-w^dUHgZez061EE)H51a>yapYS{bydFL08h3~}0IUE0fX2lvb z-_Egf`OW-%DrKVQV0mAiH{0=F_|r9>_`{RU2Ix#o(M0$t)aLNK++USy3cJgs8Y;RRV6OjOSPWHk5+@+pFcp89`H zqH~d`cFx8RY8ysTBS|If^1(2V*Bq9&7#@H#3we|rcp+iQ)kECXyb$>Gi{}Lxf!n^w zhh&gKQg&{H`+w)aq`i~aTMA)C6;=nW9x~|(S%%(gmLPYG${*&Vu~yc0hSxme z%b{pV!x5eBh$hR9IUfRjYn5kS3|n@QZuSa$XcItOD=VR--|H3E#aLu$(#49Exi{My zuqPBon5GJvOPwiV$;Q^zBrrPuT(9%0^n_G!n?*b*vmRpkhpfs`-=DABnC8KSmcG8N zv0|I5`!$H3&VcqKTGc+T+S_c>Z)Ju2O#cns>8vq6ZsGuqqm{gw=l!*8A3MCk#i(xI z!r{_WL1mgR`PvUWtrOuX%J5VQMjZw*5N`tOzY=h;C?;+Gsb0H6857MpwEuWcRdp4W z*ZBxo&x=bhd!{l~53g)1NGRmtd^9e}Ni@__`*_smeV$`E93FemW0SW`prd|=YUUbG zdL18{z&q4WoE~LkX&{cL6MXyjzJ6N!&UnRjUF*8O{Pc4K@10-2-FL?3E9-*!1-@q# zx(D9?yw9??jG8Q=>^E5~fiaRKmWVG`P={TfB2Vw_lLhl z)w@2v?ZxYLgO$pFQ&*mPDEjdL0k1bT&*a4 z&^4aB9Ir>PwT8O@lv>pw%8~Lb;>GEbRb`*i7zno3CMOF&*l~OB%AN9M^qjTKE%#|w zvPGsAs*K16QJ?IC*<1DPw~cv3;jq>4B+jy0ERoY-YaTyzXn-|b5G!*gr}*5-HISor zxu)+qo~#96Gh=giKA6sStg3@^ErsVhhcU}ziADmGQ0uy0P_-K=w^2|v?~J${i0khi ztcjz0VEH^Q8>=8alaC}4IId8gQi_H>y)TROJso3PiSx9=Y^5KuJ)HVc()9F^02JJ8 z&r@IQpAbgP^&OAHh3CB)R`~anFV|r+!{7(MIQic}NU9Y=L+yF$P|qy6kE0RwVM;z6 z{3uVwseb?9_a_Ad%2a>sufKG&w(R&%sJeYfcMz<>tbVuq$Z3O^%Z2~~UDS-u`5}lh zIICeiIAWGnS2))C&=d1Te{axm>vXMf$hw;&RCTE!fKme|f2L=9c~C_(=9UUM#qdX! z5zw57h_YU+fzS8e7fIRr{iBE=KQedlDx`fqN*FDowop;#M!Ais8f0j>;Uak}Z;Mu0 zt&j>ne(^psHq2@n+pah3RLfRCE~g5z$g0d(>(~RN`3|f!94Et|5S82tsa59Q%!=GM zhQvg(BjASfKQo!VaE%HZk9B)Lxb(e0YcdN)!mvsGqztE?j~NuAOc_IdQQchZql)TS zHACwbNzqi_e~v{~y{ z4T-f@toZo&`10k0#NN5{y{?6b71w>I#&s>G<|+ob75a~$LTpBs1~7woMi^g<`@L(w zfBwRM@MqWWeiQ%XAO8GL|H)td^6PKD{{CNm{r%rwuh-YC*89mcrlYxB8Ng|WR>c#ZPIDV%vw4G0DJE?cu^%|yIG#>ETQU~^-MYi z=SWm;a-lN!UIH1bHk}YekZp7}F=k7+4!x{5B-?M({}sL{iGhTn(q{xjE1;))JByG)AZa<2W`cq!~^y0A5M3gi0#!d$yhjK4Y zqC%uoM;aVQyyaF^b5k4kKS;XVTh?_qp0Nj!baT2A$h4=n*qI9Zdvt&WEzA z)m{NW?yRaA*M?6u7JaPGWMz9j7~#o(eLeidZ;e9AwgeNNE#a2YOxc-=pO9y=fL`*z zZUcK^av!xFP;h{l$7YNx*?kcpk zR%HSa*Gm`(#vDSKjCD0wD!4yI0C$25h>CYrXjnjQMld@e)37hb7`4eQzGBN?wChZ3 zmI-9;F%LE^}y=n0BVXkx2?}x1H>7idVD1s%`?6o`mDO@*G^C9OyXo=ZDmB zV~sL!=@!$XME=dBuD|LAmg*fdGr87cbE46(7Z`&=n^6UrB$@rOOiclARR=|?SD}In z?x3G(X`vBvC|R^!%U}rDZ#w(zJAidbo}+8$LklXOZ)?gX)T+!}7j>s0;|!>MBSRK# zMC`rwJEME073S1G>Fr)xRVhquDS7zGZW?(adT)*ES+>YKB-b0!0lHw4?7NT*aX{UX zy%Es`dCZ+@J%d+_1F`^U_8UpX{0@q(srB?|hNBzX)@~ePNO1&WpGli54{nf{x03i2 zj2ISqivOb(TM=44G@v*0QsNEGkQ%eqmaYDN6i=D;Tyl%a$UWE_0MC?e0sYKlT8w5? zx5(zP4x;o&3b2WNJa@hRh}9`1N>F^91AvN%%pHsEanMR6SKH(swwvPI7D(rwj!w0< zh{Fqqh8vhT5VcxCtJuF)jM~XqURjuwa{i-%m$gEtT5z05_kCYvX!1Al@o`n*``7Q^ zzkZc?-8+>fgS@M1EeBu#xUfhvA)bI2gCGIRctwn^z!&C6eao+3SN`QsE7wQ;?$6?H ze$IdW*T1jp&wu*)AN=wAx42liDzUDp%B&(v!)v&%Y-J()fIa%HaX-kal53c2UFDHB zNp;oAJ%kZg#9AL8uh;A2bzPu3j_tkkzBd43mFjD{RlC4)a22Ej?BWy*4b@GFB=SL% zh|1a;@{mPpOvd0#i*kl4#WFet%%oWfM4c93)BGznITAqSCWxN*TN9QDk!!&1DyyVKUbw^%NE=NxMfS7N-sziV9&@a@w{kV(3x#lMa1?b z&GYA2Wk*o4kHxQ;lRD--*~)0jaoe_OALYmhcB0C#IvT)OY)qCA#!vn5`$O4YUc!hB z-@-}k8N}bZ1wE3WcPd;rC;^Pxz5+C|6p9cCwEc#$9tK@cB98^dqXg_>$2{JQhn3SH zqW51FoEZx(LlsH3+)*HBgKFRMNYgk;$F9+50*swtFpK5eyTX?iBQu+}=_P7Sx(JNLcs zTNl6gR>K<2{!(bER7rU}K5f5syXBD>BZiHZnt_`c%C(2}i60-LK2wNPlh+<=a=z7p&XaBt_y?j6_4oqM-Kz$J9W z;M95v7iS#{E+Uk;(17O$KN@@MMoW+H`>fi_*5}moD=-$u1E1m?Xg}m3llxrV!QJhv zd?*YAJQ1w>SU`z!}tKaZg5Pd>s}wSQr!dai@d0sx{nDs@y%c!0WN( zomeujia+~w@{IxE&$;j60+SJ5m0R-1tS4W0dV(=^@08bMXIpQqBUil|&W~DfM68-I9Y^R~o}dY$~%;K=!x4?su`=c$J>15|jOr zEJE|nvlt;jGp9HH*+WQ#t^JZq(4ay@_g=X~NxR{dmO zhVMc@j1k_A-~e=+`Iawj&RXaQJ6NwB3_&n7e_W?-AH8W@phOU)TDGfK$Ao$m8K} z2m#L1YCp_hraEP*ZT4$fBofe|MmayFMjj-{-6AlfA|Xg#h-uq@+I!~FR{L` z-q-c<4LkR~t`8NGz@C;YCB~|sc#@h{%Y%u|5qB>Ot#^t33&n~R8kDxyx?b0HT^}E> zk1t<7UYD@L{odc-@ArM@ooeU@bPu4%{z+7=ZeWFwOD7S;W>w;P*?iNy`K8vkW2H|NHGE(>3|G0 z9cLDKu>KeU>tJ z#y4yiPJ@6pt&gx8Jot&JJFqJIf8^;yuC?s3Y0$>q!^mhD?Cn3et41kzb;VPHetHPo z1}rG_!;axn{j&?x=ZKzfNKX)p=_~YtZPvpd*SJ@5 z$!E{Dr(k;Q#m~h(erywg?fnU-v=?wK&8WhC?}%8jVujiluj}LW39FWlEOg%_74d>2O&V5zpeplAscjmos6_IV#m5wtryS+5Po~AcW22ax1Z3@0# zOIeQBb*)&$0webup$_o1cT$bdk}D$Dm3y;;QEW!CvBilgisqxG4OBcR|6?#DuEAhj z{aXPB89Nbcp;QkMrd_EPC~2frpC&-4Z?V8Y=1ovJK9G+mw=Vxkg!UfEW7Z~zyzM7( z=E<1#Ag88{YRdFY`2(ggSP6~o$u>3~cJ%}3kMvTjqi9>6Rl6NYJmB&;9-EF^@MyVb zsSkq})Ad>B;M}Xj1rn7yF(6k(#LD+QE2ONqE`N)JCYLrRFap;ZLj0aq`GgBX_)!DeSFpL$$);^CE zr&;YMA=>wQ`QjfEWiIAO9TODrP%2eb=^=cU(e8;P$r#To91r@updRb*XSVr#$hy>E zM46M8>Hw76U~KI@dC$-4{?6h-(zIK=h(>K|Hr%sw3c9dqy`2-5n06?-dLGVbXpQy@8IU}b=XrG^n9H=S0Wu(QzWY)rOgBE4y%tE6T>w~xT;z&Ug+4M<`ND=6p3 z&_nALG)a6~m_b6{T;Z&pKi=yBKyt_U8_i7O5FJ);WtKN?_sLt=j|7bun@9%G^RbSD zqXD?kxcsela#bZypEiqu=xkx7c(qEau@9B6#ON^c^Vq5d>i~<+vV~=oC6M!4AFj#A zi5)#zRh|+sV%vhQl?hB(N{~Nm80*v98qnX&)g)D?#6Z7XRkf}_-iqP|u^6uv1pfHP zzx(#D5i)8J6^Yvx#ECdVga;l?3G&xovGE0-(hrfNY zPq=0U&q6Vlgyhn|;n#ItuaA$9*L7XjwXRiF5x21Hjr+cvyKIh=jepSBoO)f@BCQ02 z5i9RqHp9^F*cyCOErUwtQNxU-pH7>?(e74MwRd8z%5lw2q`0a&32HFRNv#;7XfiHtc}~lAP_1342f~gDEc3h9ImgENY5&53=SQ19zaAXmSJWrd@rMvJpAUK342B{P z(Df%C3S)k5NxgXt8=kZl{Uny_SOGjT)iOkoF01YKGKLxSW||urYw=aHWo!Fcjc>ET zSfZ4H2Af}2t3rvDJ?(Q2Y!opXrhfig>;vHRxCN?*H#M3Nf-*PQvhcYY?LRK1Pv>0O z4C;9G~lQOz?VrFydM(t}7y9Ee14?jHNC#wn1t0q41E*kZZl{S&9YtMAO-CL3Nm6{Kp+%K2@M#JP#2CBo}ttN z@gR4ggCc#0vG2QfRp#F6kd4Z$^uH@JbBoc+bB9xbVbLci8KcJG=Rb-3+}RKIJvHEM zlSD$O=!US(7N1?tjdyC;wTW*`!%udK2+fSr^4}gI90^qqY97(>$*3v+AHbT17}jFp z^Oef5R8w1pq(hYrBWBBI(=~PzTA%_5a(7s&m({R*yt+ps9)t-#^~~AVd{t-T=XX~u zQySeIZ*=qn94VA*Cs-9Sw>&NG4`9sjlo73VeVIp7_JRepj-MFwY2YGiZie0Pr4y-;M?-6Y^r)a7$9X2I3zj~PsR$4FC^D=^C z&VsJ9?#i9EVV@g&V&CVLHh7nv(kiP<$>vY18#diNAdN3r!FWG0{Ry*Qo7=sV8s_9| zjS4%Aab5^AWtVk_ev;6%pcrqI^^O0f3QYoPJaLQ@GD3|fLB@*UT0Mk2yHZIJlwfRB z!341P28j)>fWU4jMJVkjXfwE_K#f__C)`~3F#7si{jsrE+L|?%%ybyAlX^?>o2shJ z=}Fd+8s(M2pJcgU01mLA)ZJd(cprM)RH zz@-Zvj@c+~Jsu()@jCpCk}|QgzPfYnWRn~ zA*+HVNx@6*#BeaNi9GF7$seB2htjooz~pOoRF!;-Ai2Y1h5*1WyH za}dbmX6KH~gPnT7=J$v8w^~=P0pNE zENM*-T~YNbEM7uol}`g>G=7U&6LCypvhxw7u3C~fH<186^J_wFof#)TYNngSl2Kvf zo~bMZMYf*IXpj;u$I!sYw^Z^BCV2S4w-&9qgYc=gc!(&viK-?dOF-wiM*ycj+TN(g z<6(I29yAV_^o7=F?W3BGOKf=e1Q_P2=N1lre*AgLlHtI|56>g}OQlda`2nm1*Hf2q zMvJuQbPZ0m?K97h{^v*!eJoLgLJW&O5vLomNlAZ#K!;m}MjX7IrWmuyT@} z50VtwSF}OeXVXUgyjDwS;?$`mK({LCf*_q#)szf3wr^B>jMWF?P~|j8_3EoJ$_E$q z-ljgUqPuX#3IefSs%=`=x?Zmp*SbP1nH+1aSXqVO-X%qOXTIOx#eJ`9k-c`G5r^b5$dvA#hRJ9Xm>uVC@T_9NDB&p{1;#j)#$KKi2x@}KNx4Ku_!9wFu zZog_vq+@z>d;~=-S?vSrdc45EWry0^g9h~2rIx57`zM(0Wudu4B#{hO--;aO#&12_p zMWJW47Prsjs3FY9WAMpIG{^1~r>7okb)%m*)u0Jqj*9bmi~3Q^pJ4rC9UY;vN+cRz zI`mrYK5&S<3hGPJo&TRpXOp|{uoE<3)3lYQ%ONI1jfTj|YFTo_Cx|O9mBw6d1#iAk zPG%w-SUxGM`uNdk<+;pB%Jx5p+Vbo>>+$&Rx zVKhmN{p_X;wWVHLl$$f2e?4WdoGhI*R?SnLe8H%~TGy@wxHd2{!x&WIoSF9Z z&<#zQ51Rb(52c{0TV9~li)5qr-nlM<`xcOL&6hl zRCK3QWvm3TR?fshuYCkVS^&@u_>L-d(ey+b#N#VsQ*$i@4ch`hK~6n6N!oO82w~oe zi8)0ut4S4dUFa}X_}R4ZWJ18*_bgazj8CWt$OvPCjYqUJPucpmI-QTz91L6Lw?2~o zZ+if!Q~_pAqVZZCl#%ZnncFH^D_v_1z!2X=IKjNlr$W=C@cQ7+;|gu|SE)#W#5Ne1 z2A}O+@0%toF>;{hhB5kx$8Y1HrXlnLAAjHKu9JUOn;XB$EYf#K8BTKb+#{n0bT z4n?EU`(!0|`yL_?gxYJy^fj$d3c`8lEe0QgY6^2W!U!>)B{bBtNt!rmgLoj6I;6s# zIfB#%HY8~$BN1>2t2AJn}@~=DM)w~leYmXTGbY-Kn zCSFwo@LW{_@-)q4=dbyh0o!{K4SPsd#9G%C5!dxvv4nV)^21>5U735|jzFee;)Ohz zP=ehof+}@>*qK{tEL(nz`xXS!ur6dalNLOYxd1FpP0hS>pNArM?)Cccxnd;{YXFAtJF8KL89|GZC~n+Xv95D# zuwYSlKRw@#P!1KH1N7bp;&po&!C2cGsJa>sr+ryyLYnVC^4aO^q{|qZ5u9T(0coFVgc?SQ!=9Ae?#LR79E;r%%W|GniL)b6sWFyP z$I|ntT4j82SiarEutPS$0wdNc7Dv-;b(yZpWas&l*lux0rP&0fcS(eBhCF4fHi#l> zZ#zncUT}GUf-Y}Mlfrcbx2a__6lT}T`JX{pl>s|A3im5-nr*P7w8GGZAnm^jN(-OamhcJpyY zpti(_5c?qOAF>+zeG-zs{l^8&MYKb%GFDKD;hA#9JN(s0khvF$;3BhXk-LfkHKltP zT_bOs0@-)(YwxQyHLY07Q+{Gm#-QS&ozYdpo?2f#=5xvC za8w{1JLy(*qgocBb7i*ea4F(<7Pv{?N&Qx z`WD?HK+B3~K|`7?o~9W_l%9(@h^kuV(0z+Ymh%}u={i8A7k-qEF^E9EuJz@$s_rje zUSBR&)%)A8ta@E4a)@omMK9qq0oldbEN{_0*QVQC>$*NFza#3;{^B3}um3my+yD4~ z@sIx5fBYZ*cmLi0;cx!t@BZ%Q|KtDpKmMct;2;0PfBe6!>!(a2!9@j0XXI0{@hsb^ zqBv$m&onuI8l;>#*YJ{g~-=D!O)msCLUVwJ+|>wHC@2g?t^AN!2n* zezjjlhe+b6!;jMg;JL(+6^H+D>AVb9owDyFFXY9aga?; zee>sT1}8K!v2`JgMv@9Rg#oahrR0#dAbe&uZ)FRYsZf5nPy+7H8-~fH_Fn}$)a2Xj z9Dzc+kkqKV9#Iwtr5;!jC5!7?OGycp2vLCCMg=%&d_)PRxI%|8<^cTa)=ljklqcHp z6g9M)a-jAtaS(m$+S$$^;r4v_TY3e-P}+>pay{}fK_{-vY=NL)!|U~mi1oV2$Vvtn ztnHqGxwnW#Za2|>qpP!Vy=31zYiIX+wla}ak{GE!wK#>DeGi;nk##rk6I|U&@lptGcOOrE)h#j zpxcrk>^O31coyhbFrx8*T=?DjMC&XdTJ_AE(DpbD8se$Hj?vJfIHS7NU^butdKVAF zp|O3{05*Jr2;B~)-*$9=%lyiwu0c!se%Jk=fgu$OsTj|RtX0uGsv_VaO4)s7bOfVr zo8hP)+pGg9)U{*z5nWF4$w^9`zeZ5$7d=zB)pD2rD?}bW8F1vTO`~eRmZNKeZmk^} zumSueCyrywmam9IOkw}e;+AOfQhWAKplTmE(kh{!Y;{?sNlzI0Uan&p1u@TiVl<&S zf@Fjmdgw(RoSayfX4h4O-2a>t=t|ctO-gSY#v0n~c{R~9+YLAh#_=x6>h|+)G8$S{ zYb&k8;2>+qjAQHA&#t_<=y5abhLKhzv99*HQtj>w2(DdDBy8m>?-F-yrKiiiy{-!z z(g8i}MUJCwM=b$_M$E_bEE zio4`#q3X*7@?xz*1?o2FR38=Wymc25i|ul4C1kl$z+#Jn(uu-R!xlxBS?K6SkzCv3 zB|PSXRi@^>s~qD>G8i(Ic5UHMHDxUzYZIZubz^En0Gro2o$whEOUiex7a6HS;+Foc zReM}0>~9u}?%b(@IEBlUpfyC@O2ZPW2Y0pHlgX4*L@Obwd^W3R6bf;WW3=(pnu66G zx#jv>ZF@*`3klzS?`0AOueI(i41Hzg&V6jK1c((EE%z)uo!-)jV#E*VrBzMfAPKjN zfn~It0ZR;O)OIis%O_?=WoI_prZmNIg~6^g zorR~nuJ!r1jR^a$OmQP9yAjI}W1>QqRf~El{i@8xx)x&JFT};XSigD2BKCXVzy7i+ z7w}qF)^eM=eP?G=Gf4F$c5;w&Bij%Iy76NhmQ}fP-|zeTpZz9&_q*Ty)z9%?{ICAm zKl%56_wWD1-~Ctr)qle;zx(o=zvNGU_U$`wH*aJNM4+8G&lIBk2IX!6c$87t!OuQGh8jLWLZM zW@K)G0JHWO(N(#m=(YIDSfPprfkrNk@07pU9<6EjrSw79Akxez(lP8L07%=n8fntakanXC#H z7Ym{sQR}W_3RHD!wgFO=5Myn_>)bF{^8Xhy0<6fMf>cw0X<~116+ME()Xl0==^$Kt zsm15Q0%PZ{O0{dKz7X2rgyf#$Mz4<#*N#e_1Ok!w-tRZTdn+R)39KuSP*Yb&^nE{S z3rzwV>2=@t-dpsObt8A~yzlp9vIq|{+;kOy#%E}=chy6+uy z74Uw)D{(RI`>pC|NdO6LRHBls%3D{n_YP{Hp?%7!$^akM+6Xz#icw^&iwv%-7*M!W z#b;m%Q0+8Yu38bAHF&KMy@Z_`weLjb?TK%@GELA%mWKA}Mlb*6{J#|P?7P1fVKUZ!U;)6x{@(NY0Cjp zWFx(S_PzF!bUu&%YwaFEFG)@m4+XOB(9i5RG1#RYe+C|fY(t4~^qEfsuF*FNc!dl3EjV+_iD2(IP_^B| zA+UFeo^o$HTq>)h=1OUl@d}jZ7gie(tu_R=0Q5kLn!&Q1*sj5jY3s5An9DkjqM=x8 zfNGmazsVRqFDox<=H0Zp)nAX^w$G=O6J=7U#sgi7yXjt-_I8wu`x97A{Z$>;sx|~#EGE%@ws(WuTBtj1}m3I^DQN82KW;G)MRDJR|O88ewe?BXb*sb77XLg~9TPzk7%Xq#%E z0M#mZ#k!V9YA!BM2v+8XboBeaBQtZ$pK`?|C}Vn+=#=cAe**-1QX8l7s!2@vqq`JU zWl+K8T-WN1p4xj~YdzXQjr$s1L_w6#g@N&2v$O3argNvF7}s^7kg@Ad66>{UGr+~D z%3HJz0u{Eo^JGr471ocU!Y-H=F2+%ZSdPoNVhP@o zhYa33wE;bB1)+nNRTRx}OaXuDd8Ah^lEvzWk z4&-ls{)t3ozQ4a2T-Qa$LWHDx^conLvCw39WhNEFY}SM0kzq3obzQ;D6~NvB{`}=j zX8rnY--+M;*H8arSXZcn=UN`q%FZHeY;u4}C*YK&jGZ9P8(1r{92hXA6Klna z@SKfq?o(C!z4x66?(IZC$%Y!tQ0c@}3W9uZ6_Rc2)xhMKa8K8b~W!pTL z-W;(;FF%%3v20e;psqW0b;z)RF5SwdPHmb9B}QM&f1O5|BLvJ};`B+q?EWuR6{?r- zRJh$1nAo$UZFJnb+R4?lY67$GQY+|mUFEnq{C{$I?b46XtOjaui0vi8$T5Dvprhng zeQlo|slz!_ur)?GoZs5?b2$mXRzKD9TwlRwH$n&Ppz_0wg!KE8yg;9!>+rq@p)0 zgH|6?Gy<%u`@UDKg{94}SSY(wHPv_DdGGgqze%-X%y+tPS7>Ni(z7e*8&XEK+N8$1 z)LPN;Z!ULxu>345OgRwkr!7Y&lsJUK=(;ZH%Izs&sKTx)-0!t?Ik$B2(Q8U3bx#;F#$UI1zb%thl(D5j+F9MRlnFKC`ZLk z{})f3&IdF;g#DSUdp!@8^LWr`wf;}F9n;U@r>Fe=e=Kxn^Y!Bg9&A;u z)mq_XZnQoT0JmlUs?>%%q0$Wt;b~8W(A|;Z(Y&X9n6V|9ifZe zl7K+=+)z@= z)rt(&`)f<&6ORK8xn{eBWoUmaQx3e#W_#t{JNF(rCDB}Qq#`+cce-q4InL42@A#m8 z0Mw(wLe7Ym`|Vvc9Z?0AK065w%vqMIAknhPLaNg$t*~t-9^qpaZNvXq>9Fyp&mSU$@Svoos&T2$D2j$-092NGNKqd@)}HP+HSqDlMr~YKhjvVi z&E8lzeWrPSr!?@MkN=IGh1Ppjw|IG7R~EAH@$=6Ge0}FH-`*Pw@lusopOY`S+5;j5 z6)_r<&1ZyNr3A>5SDux%)ZV4`iun2GpGp4u_4_Zse$9+{UGhW9q*qR&T?x*!!kCG= zl-#m~5`@bY^#hdc89AZ!qfW3`5$jqmv2kl#?48@$dKTL?yM*V})HZTB$+II_YVHax z&|`(%(*V^{2knkIq%A9AN-5AWyvE9QKaK9hFk)Zi{G*24WNg+0DBAzh*0RRGwmP1t z%81&oY9FuU35nwQr=I^k5~h=Un+E(LfhP~~o`qE_aO;xkvoMcu_&1NYJZw^|w!v_~ znP5#J)aADW6Avlarkjtp7YKGO@+{%#FT?L3cVAGmsFPMEy{{%F0Gpk|H5i=s!=L$4 zt8TRDb!E+*2*z4{qMgSjoYQFa({{!nq8b`I;vW5_^<(10KGX@%aSauLW0D0yS%!Hx~C>zXG4vjhJE%}fvOKYI?V zUh22vlQmJ07qDsDr<@i!g#sg{mC{HUg5{J@f?N@v;MPoA1<#9YIY$qm2fDV&=y7`T zw&|pkDfc<+R5lSwUw8`%c2(_lG=+o)?cyU&g6jwDrz{b=lkx1!bn?uDjd3pjNdG%_jJK_h-LY?eq#`>F=Md$pyG z>!>KVbSd|DRX%)f6}NU_IUY^#4q-kKZqp&>BJGrVfZZyT_FI)3QJKXkRp)>NlyZEI zw(3D$ewBS6VqH#hyFAosp_p4H34l)KKXjAo2qW##VA3UGLy#?gEM6a2<@xW36*~vV z8TiZvLoR}~7*|{?G%kuRe6Vp}?Ubn^d9Ba@hOAvXiKKcSS<34?=FCghJAK|=Hi%;h zHUOsK5K;l)16G=>yKau{3mm`V5n?U`unKWi?B4gfE+r~c^KoLWS~nwh?0chXf0s{- ziBf%>sG_lZYrsY*=JwJ1#K@(_E2_n)6$=sTitD=MKKTCa+jdz2++TwzGI`{g7|j{= zS+4t5l--l3S04i~fm4#|2ctsluCUTo+ssQ9;UyH3a%e2XQ{A@J#G54$} zp1;!Gl!rtD+s^?1>}VbT!_SYF%|}YOE?V6-A~P9FCRxhar#ALov?4zBNrv5O$WZMR zA3O2woki&L*_GD(rq<7gIQdFyA@w>W#X=|eL_}psj36};B^Xn01$G2!#egd3TV$s7Gq8=hl~dFD7pN(8Ii+DO zxO;0|Xe)@?F(tX%Vlt+W18&TRLl!MqM={S&rK5&W&-pdIs=W;hN*7*Bo#ocY#|O!; z@BQnyZ&}J%Zys}*%cslHEohxbm3v>0RCP6|()B3m9rt?0>va+M<(IEtzkOpwf$Lhi z$D={*L>=*dbYki}SedE7^%4HfnJv{_0<-g)E1sz$5$#bh=gx zpt*ACp2qSZf*r7&)(y|&s209YvK4lP!wG#UmhKNn(BoO>p+A@=WY5E`))5Xv4FWh& z2sZ3zo$cKk)2`n!$92>d87qW%Ln4tRm{pm#LOGccnS0;z7FDAMA9+)m-`uXMK`^wLIZ#>Zu{7dHQtrNYgj%XuBPnn7VHW%e0pKaB z{?xK~w_IOE!->Sry1iO=06& zm8wV6qh+NAosxE;B~n!_UsBtoep)MmE^6`ZkO)tI&Fo|eP3&m*9J=`$XWxVCAKI2J zQwA{~XAklG7c4<=)g11ppQ0)4arR>pj?)2cq_;2G8cr^~I=@K5{TooIns79FB+X}u z_b2kNB=rwnjmCMLL{0j|-}jtz06+YcpLGa+fG@p*@iz^yYJJnY_NX!_7+9(L949?> zCIi~lhjdfmY~>*|g|-%OP7>`Q(-I=|!l)u+=dG4Q)nZ+;U^TaE<g6gRPm-YPhh7TAHeBFkTC{;=qXrz!Q-khD!_4X z|45p;fM^<%1gSIp$iDefUY~p=wv^U3hZ|E0@!KPAIf4S)*fU;yIO9O7Ds!_(0W?PMESrbhMNtBsh8%O%Uzo|WR;d0tLxnPoh*w`E~PZ-LOW#IClG!unF1F{|NeP8Rcwj*+<3uNp| z!^kT~ge1h&_|&;&QC(<|xdnV|I0p;3aLGEzz1Qn1RBbLYnLDSD-&B<&4<8#ck3aH# ztn|h5-7jOkKH^#*uh&|U_YTCjZ+z!B9q>}Sz3wrAR*}{iZu*W)svxe9`e{g_5Asv` z2>pF8r}eE+#;_bZjHXs22Y@}W#Y0u#(+jGf-QS5$Up$ukr-c}G_Vu@1u6B#ht#?xKe3GoN1OylnU3?V}H*qhu+UgvkJ$Bs?=6oJ_gznp1=}10%XmPnc z+1|Hn2HOFxT^`eW2a4qL{C7>dfRQ{z724<{> z7N?Y`qHq&Qagei`C)stP=FdtJ)u|?!Q}nU)T@|~(n11FeiDswvb`1ggIZsPWy8lUP zO*1^+5~Wp78IFH!H!9n0FDrRn>*M1E;Onp7e);uVLC!RXDzulXZg%qs1NI#r;9Jgr zXvjFf?n)n2Ff|DFK zEhwvUt)*#VhaK$q{8O$un)CAy{`8v<9qSjBYB}{9+R|u_IH&EjjMH90Z6m_fvd7~o zdFUpoy1DKza{$R_Og)5Q)!xWSWbVG>1QCeoE?U53sGZe5_r@be&gSX2F*-59B7%jq zer)P{99PwN^Bs&oVinzhD|dm|_qNzp+ z(RZ%i*EY9>Qk5t2K{1vOb3wBVT?*&hM?E|-#<5gdUp_&wzWq6cs&If9(W>^ripPMc zQez3fON|(mv`--SUa!zy&8!Fa#36FK#0ievn(;CdM=scvo=z|EmORHtx+I~j6Brd2 zm@8K1jyQ8?;8gHu)L*aE(04}Sim((TlycUAK()oInyx15k83As*(#B#x#dntTAH96 z36}*&V>?nwKOmM|u}SA4mFG`^wZwj2n9NL|+X^<>e7g8U=Vz~TyD||=S}mo43akX8 z6)^jm$Mgksb~a;cgr?cbW@#tQvO5rb()Z;#z**}1lyTuIWp4RlWtuW?2-pJ zL9q&<1-DwmHYHXOwfDU!AB}&j!Ds;#=~CE8f9q5%X9{otTEbmPs%mo-LB{2&i66Q5 z{{HPNgUBR!zu&d7-}eJ|9J}iXC`*KW|@PY5&zN$2R z?;DQi6pra4#x^gL#`mk6l5+Y}8W$cBMk`~14CS}V+EGPu`$k*f8OO7oKByzH{ZF)c z^Kjoc8y#=cQ>g~YP_d^zFdbL*t1G5_U``FQ@gsGgpb%E)>cz3t*eaq>%W+X7CDAA| z=?(<~y_Uf-?yIMK@6 z=TJvAilN-?^*C8a##9lASnBw@*3y7GMW(8vu;f2q@Z=F0NjjecW3srYZip=;qucwK zq;tlgmIK$ZVsTX?!DyrQ5I_Sqzp18J$1{LnDOu;k(zZOmT+R>5p+MsCyC=)jf$Wil zB#B7uSd8KoE`t1cT^}D;0bjp;`}XZyM6mn9$fN8mt`=4$titAPn`Vu}IL_J%au-!^ z6@c8&>$=u;W#X4#zh>6Dt{sb8-fBmO<%aFVv`&)h1jjyL!`X;HB`op6jikM-ksC%% z*IMfe0*s|_QRdE2UxD@u`Y`R=q)qp9d%@N;2Tw8PjqTo(^p*1^Nw|%9JEG!RwL5Lo z3ME|UVhu);`50f(!4>J!kr|kZJE&nx0gEVTNF610h}3Kypt8E*p1_qd2bm+}#>iK2 zy5+#&>?8ebi1tKOo)pxh9!Jg?;#BltV-dD^Dn>grM~~y9@#oPoM-^1H01Ms2S}RuU zQonu@tjxVPxAC;YOA))8TxBo0W=BkGI9=6r1Qs=iA;Yt=oF8QKMeSV`vvlrP8Mo2% zC6GSkXpU~Z_JfVe2ADP`ng#~+v=TrSI?=`Itql{ltG(ttYx+gCJGEUot*7m)LYchF za!Iy#T%lOV$pWUeuzc)=({e!raQZXc`$j5dUW=*;Pd3oiNdzNM$p9*#sD=iTRQHuT zksc#)VH^KTZjs^INuX5Eyfkaf!O(ZyCp%3)RR0n_S?$E3j_n^}FcoRoW;23VH(s+pR^%M%3ZnkxH@*rQ~HJkJn-A%fGLi5hJmu;Xu z{Gfl10JuO$zlqV-#c%^_euF-7I~Kg6F$b&dlXmYlShOlKAzF!%c;*`w0OY-;mDSur z^$RBA>IOiH{3!(law^LoAn#J8%@3T`Ry1L9>K63=+@+TOxd~Q^R^mbQv08(|35->l zbWEV?{4?MlJ(>4=T~}rW!+%#+oBbAEC~wXGRo%72nD8>H$$G@7Sixki+Bqe{Fvbnk zFzgW|w0CwU3^c$vfhbR*9*t?&P42Bq6PmedSFKnog+?sxQL#?}HF>u!&2y-}P^S?W zJKsFh?g-?DL+m3Z(c{V9HKq{&qI(Vcphy@o3_OrrP`_%>S*zEjUyD!>16g%}sNC3$ zMXu|*T;Af}1xECs-{Lw2=yRps<=5rZRrzpxqAComwXzenCK$nKFVBvW(Ji9osYLCJ z#zUye+!2eE-;nL|@nu>E8#%H^2Dna2M;A?3Yc01Ym-T$TBA7eh_f7JS@Avl`mFv3p z-h49e8SaKgs-L*{Ayol%brKQewbpgL*0o-*F9gy}&_8M`mX@liJ~mL>ow8VT{}CFU zBXK1<3A=$T3mYo7St4-}E7;jR!6i^eQjrq@|LR_BV~t2YS9NuQzB$R52RF2W=zot! zaQ$<;0koA3a!LTXT%G!1M z`U8XBo%j!2miD8h}RA*&|c=fiqR zYBD@@Nm+lXu{5%qxAJ{R1G2WEx~pivR?;MkyvBq|!|(%zA}ACeZl8o=Y;b(a2^as& zi4onD(HEIk)t?^RTsvx+;H019$irs!$93@Bj?TVq$#YFDIZM6Ga_`q`eY~Qoe*N|9 zw{N!wxR`HTgexNHv80f(((;NlB+@+}*Q&67lt;|`;3cHB*-f)u+sAq}@X?4_x)MUOh&zPO^&Q=~A^xN{T zum9*;lGh5OO*%f*KdzAs0T&KT#%0?a7|k`{&GcDFPpGJxw+~hK*$8wR{@NpHyH${fr1FGP zJ=FDJJXmWT_*aLp4qOvQs+s`B<)2QGRNgUnLW^6U0fYeeLD^{$RoIcmO*1BH4Hu*?1 z^S)#}3qlyIi*t~Q@ZxPY&+ z;Rk`ecSIH+)DliG)OJhl2)UtA`r70yWZ- z)zEQ-uv48`P7NDarMsQvO6AH(AjC2j7<}Fei`hx;BcH5o33N(xi-jYKgUgtCa!IF2GOWUgjhA+3TLJ2YPzTIIr_Aa zQbKI&-Um7l9+ga1WpcH_Awuh(>N?@l)avg2&|)Z?oq#Gt?c6;sKyqP`G$XYP^8{ws zf0Ys%%L0@@mw?#=n4Fy6q8ux7kC3a`q3Ih{aCICV@oTlv)PutWI!5bsbgZ$;6?w{d z5~JvcX&aCJjbLr*>FP+ndbNP%psF=()0;p~RYfeSJ%LlEwyh8VoJbdYPm^-_3C01? zbcT6_e%s_3jP+7QuINMIp6cXMW-wMk$rK9=&07MdcEct)eBg3gg<_8i#o2*D6ms7; zDxLkMTXR&kC6c|2=$^71<{0|y>z2e{F+F;#W0taY)x$?#hTxbD5H4$$93fXAa+m16H&M+O zv%kURXxPm*idwdGFWAgn*X2qXx0NB;vDPP$Jq^4pFI!^EmeW!yM4~8p1FPgEtoAW# zm^2`7x%*Qb(O&M&Y@c~>CPzGA0$R;!X{0>71L9g4jP5XXjHJ~Y+s|b^L7rNJd5Di4 zrr8$g?7AgC3Mf`*Z_#bJc`4S;2&@%XMDD%Z^F>YEoCtT9I?$sE!ojhk$h}j7ixGS8 z_M0*_`!<#oLwOX5JOvDp!M(Trf@65JlhMn5wk4p(=R)#hPQhG-lYe53Ikzvk2o5{@ zAJFr&?+SD`Exe&ULM|*7tk=^6R%XFF;2Z}09OS| ziIu95Vy&yQ$T`{~%A>d!Q0h9NN}(10SbOB#2-AtQe?i(!c1=Vme@LuXr2&qF;;EtL zDQY(FKjH|9T%>bF$&nI`y?s?^)8JTEzH3jcst45XQ|^oypK~#SZO<*AbNAXnM*^z# zsL4h-Jkxcw1x!oV&defWybO)s`c9=z$?m-_Y@h5(WR=0_(bz`{O*Ir6Cncb4Y?& zrNQmP@^CP0OLMy8Qk~Awln1%vl)1M|B=uXC*FiYj@i|9IdWY5n7`RX)l^k!_HD)as zYC@_qEc*bbiky9V?eEYY%9$H>1KIIP0;#iz>i-W3C#gcN5WR^8ed$fB`XxVV?v@udARUG*|GWuZ*_xI|@FX|a7 z^AB9PHu;Zj8a4I1^xiTg8>V=nRTGmg{|>#v;4&Mx8#jVGC*WlEL}dkRy~Z^fP`}s? z4yOTjPWo&NZB{%W*5Hjk6S0Y`$4N=fDq=bQHsTw`!*gExFUf1ItW@rg)w+d+5U=qc zi`TlOJl1uA5$jq@=|5bGL&wsyE0ekDAqKf~@B4;YytP9n)&h!aiEJpx<)H}?O^%E` z?GK(+csxySI@|FR?5#StGUW0Q%;=umea%l-fNAbQfs)%SI1mAP`rMuT6=QKupc{%;S*am0inT3`$^D#a|_32jN#jMai|Kc z#f=f%-YC5HH<@o|NkqZ6neI=0WYZ>e^(|J93meC$5(uo&*m>PS*YD`w!*J&rt_j2ix?tMB1gAnc0oYoyxsEAhz$1js-b0j!kD_ zTL$GB#hDpVET)?uO0ZPIq~%6jMrv}pn*!_5bbEzZP|2m-ZX3Wj6cUj8mi7iD8OnNP zV2tVlYQ@rC4Y_jAj6@Qx-|R=&;Rc#y`^zM)3i&`UW`h2*(MxlT48gs8V)ff~?Dk+*zy@vG)xi_pQi=;g=QfbNk1EP@`GQ zQf;P7S`<7ryNfSrnibMf>=Y8L56h}}o0c-RF{5=0?bXjy? z)%H2+^VZEQswXSWAvD#Ei*|*jW*)TotR+5K-7HsSu|&zgl(rd_g?3CMCn>usLb+^MiY6b8_>^nSE)yH-E%BHuU-#2(L?u_nZZTJ z*|0Sy&T7@lbQc^CFZYjMYXOye#@1U`EfS4mUW*`d-&6uUYCFB@4@G4`EM9CE zM8~~t;On4bRFzzF-P)kL$uxCDbh$K%_W2r)16ljN@2pa^y!W%MTo zQvFChHxRXaq$DhiGzq>*daFw1ysnR7_63J#Iv6gz>L*lFaUoA69S7*v(cn6FTlQ1J zm^G0R6i_`&s$~!6Qa~B-K*un4brGHLS*&Dcd)ifzrB;zKTowo56~HN05n6D*JW+1) zGVH}UlTI{4?~t64jG0vLk&SYQOUr&}ln5 zY6s&wuNH@s&Wp_z55rHKQp%7=&qB#84OiwYPTe=sOvQ**dp`x>sL^g->EL9^>`H8T zoe2hV`?Rt=_rbp(h=#;I$m%}cB0@)_2VB{BQ3sRN#wo$zLPT8GwXWB?78r4b6Hmdc zOjo%TY9^au-#heL&84aW7XwOSZt6nj7R6^7=PS7-@2#YUt{)uoZY)0F57x+%iYI~8 z21jmcDk5b}m2x&367*-)MssLAEU3kyjds%co^2Ubmo;<=)QVRqM#5lR5zUyE$X%px zl1h|IU*qP>Oi$@lYw&atM;CgDiE6%E^>|v7EAw-)2xn0TCy)(MZFr#I`gcx>$B|K#(nE$!PN0IFO=6R|u>vbfeVzedM#H5|vZ zU^Kk?7LG1N)a6#pC?#3kF7M`*`cPk@~64B!eC}ooxE&QeJ$lhQKE;kp(NN z%ZlZru}^ZlB57c*GHB>w3Ai`!^m0jt;VyjgGngm^aI*q!; zcb!up*ie96J|;|pD5?U@lLc)O?q;i&#Y0sXhj;s@tdz$C(L~kUt~{WsjPksBl9?MS zr99gAdFsrL{5K}SgF;3lZKJSEiwClDGeS^^T=F=PWS4))aU`i`=1>=aqwI_WAp0|u zu`&~Dnyn7!(rfHgvbp%r98eDpq#uMQ(P(pW0Fk9hy&$uwl3MMMO%CKd*z~HfnEf1p3Nb!1^Xye3($QJ1-jyI!Gg|BY&3j zhTPGOLsUfD{`Ek4itz+rxb(*FMCQKo%Bti}7*3Mo%rZRHH1bb1yG^yNkU%o`-kJ5j zS42hB-uvEr@605);tG`7D*CB9tG477;dUMoN_~CI`gMe;B3a>F+Nx85t1zj9bt6$4 zb!;1xBP;7EZ7mBPVsaqH5u*;{IR-0OwzQh+q^Ksehh+PN5N7Y^suapEwEf@G;DJ|~ zdUe{35erb3vO@h;d9rE%PY~~I^nQO76%W~Ch#+oirsELi5lke>6+g-x*=!HvTN%Dheu3ygcPN$?e`GO(Q4`rJi8D>RZBb~sA zC?!$_P&bK>k81_LetW;)cWZy;R!|71sKHp4t|Rr71z|lnuzh9@tHBKtD(cmfGg%HB z7Lb+i_gntBh^UgQe?kjmRaB?{Kf-rZLEMx#9*jO0(O-72pL`l6#{@A`!2KSEv0}wk zsYyqx$bxXAfZ^y7Zp})~Dx!ht9BJ8t6MQQ!4Y zsyqx&i+3AHQWx} z=Tr8cjuxJ5W*wsPA`wIeqS~sCZVqERRJ_@(e>&q2Ksm=PHPtS)yO6c44hvC)26sTy zFo=j)i;VSpy*@r-1=m8y|Iz5EP0Qlc)Rz;YzzSeH0^Jh~*5 z!6;*YKKy;64%0@cWuMF|kEoQEk+JVl1E2 zVWsnphb)<|Wk-DaK(pukCNaSobfBdpz9Ye0PON&Aa`T>tu==zNFIvA@{rKZgDzI(7 zW-?<2r8>60t4~XvZM6UFc{)BlK5qQb0MDNCHvPJAhl(8n5yOx)gq$do%*Wq;Q_9u zh0m{kQq?EA)(+2}KmQq}((cFutEyx-sD1ac~%52=-4OQ2>qv>Q%n%xOs^YoELR1ddyX$`5G3s#&a>-bb)< z=dKRY9jX7BxJCpv?egG_5l6PjYvlVCS4Rf=IS+XBStJrIJ?kAtc7Y8+U}OXPDtP2RTjqLg*|yFEU43JN3LhJJd@<>JZ8ScR zi8$9!L5m)m^6lFKK&W*?IQ_7Qs-5qedYCb~6tvf5>ZOBL;1K zqL3%-etx{#zv#Pkv1$>w%CV#eU#|}UJL~WM_)8|1a{v#O^&1@B4jkGSD5A(Dv-f?|&Rd$%oOg8y$?Qc&O$tN?B*5V+l3uw5rJ3 z_kPDaR^+|cwW?Ijp~ePqY%?b%yYo!ZVCo0;(!6$vQ1+ov?{r(Jj$aQ?J)oC-PX-g# z@A`C&AvCPP){f8Po_i;zp`?!Th>NO<74v`=P>uu0@IS+kWN3An(Jd8vzbGw{e}T$azM0axxsm*%O<+C@Uf)FWe#eu zYDjXFDDcoM%_6OM*s+}>=RWb|!?3H#n|2XjpLPW8n$bS&(TKIywc=WFUDwA8u*=AZ zrd-o6tx?l@&n}!q)fItI`vr$}>0&Npb@aSo0@LcD&%XL#Tvf{!5raSci=yn$Ue~J9 z0MI9z%QJ*-K(!5*CS9|=+og;pr7AFIOv5Xgfw>5Dst*Kq3vll37#hm4vb|Of0L(1y z*(nqhgUj}Xc{m!~MXOoYKC%ww0+6$MpxL3b`R|jHe)!OnEDz)S2@lQp+JeAC4#$w~ z5e90!ZEu4#(0TKDe1FAWXWvP+-S?1A5}4jk^n7@B*x+ojC1<{SJz}|p7k`4^lzUpeQB8gt6taR z7kZt;V6&2%96y>MvMq-Z$wLDA7p8*aHXQ%7D(-`8SYwl84xVsEd3pX* zp+D0a6KGK+BJlVOdoj?e!3yTMvFJ9Uk3Cz^?bJ^Ea2g;G!KkCfV>n)A{I(B%0aT?RLU6NTP>dn zyY~73n()=e#*;NhAD{hIO|y^8oK7D8OPkHi>PQ@LDlMx34UK8IDxr|IJwCUbP85dA z=zhS%pTh(X(}aOZ(S)C!mFoI%bgY`*X*Qv=&_BydHCyp)9lD2^)Em4nMI=d;#jL7* z;mYliGv!^En2)y``shU}v%7;e=H?eP!8_F+e3Q;Xa*adAc5Q}?UhMnL z?t4{x!$ZDz_7wB(h~HALhENVjysjk}v$q;t$$j(4%HpkaJGBu?l+@D+{CuD3l zfF6m$w!U1T>X>8SaGMhYI6@60y@1Tx_ji!%dXa&BgLu8x>r!tntQ7!P@VfZAt_WV& z^-@JB@#W)nzrX+b>(~4Hy%sggbKg~(5|tUjwStU7?R)Rs?{DAkz3fmJNMp7{LUN=-x}PdTcd|hsh1!kU2E%EZyJ85kIS_nJp#v666xsm-uwOi zu85r)1Eq4^7^r|?Wy0Bo$N8=m*6==>e#M8)45iShZcBTpPlfzuGC}&vgBtY4W5TsPU7Wr#LAg;rr0D}wM`0- zK7Z(>Pz}-=TegWi882dr?%Q>AN40yb^Vh&`K5Z$dDx}^c8zj~PwYbN5DJ{CHuwp2d zO$8zTS}PdW>lN3!u2))m5)*+2WUSLYm&nyuX49~gNPS-C5jTY5xg_7a&59Zg+rGs*{)-e$Er#OcSuCbN+h z5*4l@x2S1{XB!wJi~E4kcR5lIN6%`jBerOBGP;(f%lfy=MmctdECM}V?oJpF`)y{9 z=s{Y;_11>8k4$4~l)Ku(cbr_+3-?qCO`T)6FWSkg6LnR5Qet(P0V^q2bRpw81NT@-7-+X_( zGkbbYl-Ph= z@tFi|9rV*nlCtkWgbk`mQf)J)f3+r6EahvHCvGjWP<5t5cof#lvt%CX&w$n%q zjmZIK>zaV;DWU~k-@O$Gq0|zuTA*P8%(Q=@#@A{wS}nV~b#x`kmJS4{;eYk;(Gnqp z+-vS3Jz5Vj1^G?5on-iA{0EAnAV*v>Dw3In%$wS}l-BR1|2x?HD{^p$z7(Mby2sOE4=62n5&ldS%}Cojb2D zAoQ&T?yUdn#LQ0#gYFc9Ti>HYVj+t$V*)T3cCAehd=TAq%pz_OWw|rxaNQ zxftkbn!Po5qsH>6?lj*#$d+KDEKSQWcCeE!VS#9A>(HYq5X@E;W>V|b!6bU#q?w)) zV)l@f@Gxd$N0*@LUn>k!j}>GBPc`w$a`#8c1E=Gb>L03{nJAD=%^})5RpkUsGn#hW zQNX6E$ThuTqhD=t+p>TyYpT`y(L~RW$q(gd|5UEwQNZS}`narUH(x$}`*Gb1 zuc-TV1z7uz1$>cg+(BNi)$q#)p7;Cxe!o?nUMOmace~{r$@?zwQmvt+iVRR8}rJB2KcvJ8|Us+<%v-AIrW_wO24u#ErVw!cRYa z0r2hHx1Gs&i43!?oN@b;J@>OeI>StMBG7lfvQo&;Yp5AzJt^^`Ml(Yi$eIuaq(|DGh^r?y>9*G#eBrXU|mkaC=W zY%|YMt-iau)b<`+>&kt10G->cF>urfP(Afv9~uf^R*-dX%1$m@`D`nRR@u@3B$tO= zwIyaH*b#=lMenp>Mn^AX(FN5NUWNZ_y&__Lyhw5}R*;NB(jJGTIs#_q9--L%di7+I<=R5kzCX7OZ~tT{;efb0nG0qtzNNrQkpr71hnyhuief3pgim2as^ zXg#@iZbffuX9#DxMjv(ZSZI3BHf5cdf4n~^%f@yMsX3JHo$BF|wVN(SpDM98%M;G* zOOQy^@fb;KGkxMN*0r=I1E@YvIPJt$Np7>yLO4zRTUUU9TCfQ ztn$C~#9-?t09#WIvkHMKVljZctNV3HJpgfv{l|75gGr(h11D_1wUdO~*5yd1hN+!m zrl;8)%#rD1NmdoEwTcnz^?H4Yb**)+^(t_26)R>b{{&-=ET5x zj`kKB2<+Ex})?_OkH-(j|xCI;xVw#ch)n6u-ey_v>%Oj zoTeEBP}xgWoY_nu^&F}`OB!ouu4}C;R<7%HReH?hs;ci=AgXR_RWTw6WCK?|F5TH8 zDEXb7IybUXOsxc>qn{o}r4Ne2q6Y;nWzC>s=|j%Xs!Z6*3iqcx)Mtq%e$l)7?}L0r zKTcC0sjANBpwo1mD=rnj9&V5ttCA*9qYq1YPi8??B?LXy>&J7%$#}Nhvt1gjsufEf z`EE06W|Dg+xQ=ci+}X;)K(?tJb+amRH6p2opO&YxQw~aK%#cW#AOX8JmQ5hGJGX45 zkc(V#%y@x%6cCZ}=Cn4}^J5JS+wEr@Y9JJG#k#K7>$R>GYhBm+`OE9$dadi)i4A} z7QWy0H-GrMU;g+lQ9E}B>St#w^@yKxD|&a0#1(FmGU>>Zb0_0oCaCkG8yRL&!z*NStDVU)2HGFzfLU3g zBFH+fb?Fp&S6ZhSxAt$@qVhHlI&zpyqhNcQZELXB0|zHqnfu}>>E^7%G%9nCr)(jI zVPG`6tx!%POucOFIq}v7i}Ch7+f34Br911jKSeitac?L72tLwYgEru`?oREK-P>u< zt&Buf2tv6krwVw|U?L)jy0qre|Fu4dN ztG4VIA`|ISKtb(PuIsw4xK#P7e$uOhMY}Z9&5j-|oHl^k^|K->6M>x@MxolgZaQjb zxix|-aa>&5c_00?HQ2>(&$HueD47-aC{fts#{Jr0^-%2GTtvYz`Vmj;(I? zF0EBP zeaNl1W9izKPFdFX`8RgezjbRQm>NRF(1Z#DClG|^7q@%sd7GJ~cF+#C3WXb2dwo?P z6kv0-!!U7394#W)wBoE0Pf|8kt0UYiQC)r@<1M8wut!pb2O|&>6~Xn2>$R@eS}(>` z#kH0iIK+!P@2m{QiY3pQeziTMQOsHk*9B#&#l3;rcd-hQPREzS6abcaAIGmpWPStekK*Yj^y5TU|{F%=@|J3=ubYK@)*rpt<+Rw;g3k;nN$;y0XW-?Zx zPziV8F((q8;N)P8^@Qj+56L!*7-(XU#as+*FtM9^Or3*YR#nLjEYxOGun@gkOu4Uq zjQAPODl$T3=T62obkCLm{=PQjd|WqOR*tvpTzrbt1@w3{3Jo8%eI7MwcqG~6TTxO* zEH^W%Zd9!70i|vQQUiTm1ESz2d|E(j@xFAeVR|6CQbS8aI#bcl82^j5-pv8ElFU+y zY1R&|BNSWuRG(6p`=R7&sfqx(V62i=xtu*#HXp3-E#OUq_5rEOV`lEV7;6PXnLnAi zb7yW163(4BzGu~oM8sMbDs9fAs?xBVPNJ@=y^~<6z)RUBRFGra=q6E}yYXNy>!ks_ z&&0x3gU#m-f$r_OFcBJd5KL86mBzpX*WQ~I8qv_QpGM&Bn;QcY#Ut5cq-$4V8^U(R z%C)Y%GT--FSH@-p8RfFDUZ-<2{zQ1-fgVOj&aDl15FJQ8&p3kATsKm9(wHaFPbz$& zx)IP367!^bEUy8#Nr)~S=*E_&$|Ltor8&*6=9*}tr9HsSnr+3h4|(p{LH=V9uoZ=O zThorwo1GIHZzjO5bZbR0GOgd(-soMB@mxeXKOz)m5>)jBG@Dap!6<;OQ|fq#VzOEl zh^p0~peb8PQYLS9ESrLL}`yqj?M$Qq$Ykhp-`svT(S3{_dA=fB3_{ z-S<0!_ge#5?!eBxuWP-o_;{@#t}Cw9Y2OjZy7!&A32Fp&0ZSgK>tgV_E+91I>Gkmn z^5e@ZKR&*{zt`7aHuf)n{crx_FaGR5|4;v;U%!6)<&VE2;`{gf_51q|fBWknzkYw; zd%a%8wF~d}ek1p-YPuztvg|Q7ICFWO#>q?;Vl36VDAi5=#QVLks1?NCzx~a}pZ)d~ z#4msRSNF2pr$5Klf^N`F+Yjs^wcP*%6eVbmoFcg`1>dOYQ@x;TzwI2WSZb+ozCsJn3d0(K`G&jjztu(LhHY)5+k(A+Jw( z7VUF&TuXv}y6rq`v2>?djtwAcVXf%Qq~i|8?)y6TR>Qb87Yj1t;)-=$T%MURczy^% z&&g8%kphsl+0Yj-r;8>#A|=J$^A@s-ZV1J51p>D@XE9gPVyZt{Qj0NlMZ;9={3fb3 z*U(RwE}F8OyAn#98sw=PZm?l|nU+iow!hc_fOwo;i&&pPW-ets<(5y$YZm|Qq_PmI z0->tv8cU-0sGIF7Hnh`rsKL&ofnp60TMe}=t)Z6A;De=bTVIby!ovO`Tbg7#62XYY zGvda7?4eY`#j*L}Yumev`JOpB{0r^r2YgLPM|1nSPljph3?8Ti=wNyhjj1P>ZEa7^Ao z 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

i2qeYi24yfJ72$|3 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∾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

MZ}OKE@B?H|mhla^GlR={ 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

(ih9?8kricVBz`je7JuANtTA{pbJL-`U$ge|&Ue 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

9}w>q87!q22AdbazuX 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

oPK}Y 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%0At0_JXnXKh&lkVFaItm3ZS8UaFuDVte(5H;}o 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±}DTxKS**l3;&#WFVyK{rUaS)`g#WCB3MYIaqI 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≠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≺h9F4C5`lzN;Ck@;r|S18^XkVHR3s>9D3) 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

V$qxm=o#_a2+iU7dR{wOnF&C^n)h`YB# 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 Date: Thu, 19 Feb 2026 01:01:59 +0000 Subject: [PATCH 08/63] Fix deputy heartbeat delivery and add template substitution - All 12 deputy heartbeat crons now include delivery config with {{PRIMARY_CHANNEL}}/{{DELIVERY_TARGET}} placeholders and bestEffort - Heartbeat prompts reference deputy-specific HEARTBEAT.md paths ({{HOME}}/.openclaw/agents/{name}/HEARTBEAT.md) instead of generic - message-router cron changed to sessionTarget: "isolated" to prevent main session pollution - daily-standup-compile and weekly-strategy-review get proper delivery - cron-unlock.sh resolves {{USER_TZ}}, {{PRIMARY_CHANNEL}}, {{DELIVERY_TARGET}}, {{HOME}} from env vars or openclaw.json config Co-Authored-By: Claude Opus 4.6 --- .../integrations/agents/cron-jobs-agents.json | 135 ++++++++++++++---- bates-enhance/lib/cron-unlock.sh | 66 +++++++-- 2 files changed, 163 insertions(+), 38 deletions(-) diff --git a/bates-enhance/integrations/agents/cron-jobs-agents.json b/bates-enhance/integrations/agents/cron-jobs-agents.json index 6422212..ee0be38 100644 --- a/bates-enhance/integrations/agents/cron-jobs-agents.json +++ b/bates-enhance/integrations/agents/cron-jobs-agents.json @@ -3,120 +3,195 @@ "name": "mira-heartbeat", "schedule": "0 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for mira. Review workspace, check pending messages, update observations.", + "message": "You are Mira, a specialized deputy agent for Technology & Infrastructure. Read {{HOME}}/.openclaw/agents/mira/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "conrad-heartbeat", "schedule": "5 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for conrad. Review workspace, check pending messages, update observations.", + "message": "You are Conrad, a specialized deputy agent for Operations A. Read {{HOME}}/.openclaw/agents/conrad/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "soren-heartbeat", "schedule": "10 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for soren. Review workspace, check pending messages, update observations.", + "message": "You are Soren, a specialized deputy agent for Operations B. Read {{HOME}}/.openclaw/agents/soren/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "amara-heartbeat", "schedule": "15 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for amara. Review workspace, check pending messages, update observations.", + "message": "You are Amara, a specialized deputy agent for Operations C. Read {{HOME}}/.openclaw/agents/amara/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "jules-heartbeat", "schedule": "20 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for jules. Review workspace, check pending messages, update observations.", + "message": "You are Jules, a specialized deputy agent for Personal Affairs. Read {{HOME}}/.openclaw/agents/jules/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "dash-heartbeat", "schedule": "25 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for dash. Review workspace, check pending messages, update observations.", + "message": "You are Dash, a specialized deputy agent for DevOps & Rollout. Read {{HOME}}/.openclaw/agents/dash/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "mercer-heartbeat", "schedule": "30 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for mercer. Review workspace, check pending messages, update observations.", + "message": "You are Mercer, a specialized deputy agent for Legal & Compliance. Read {{HOME}}/.openclaw/agents/mercer/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "kira-heartbeat", "schedule": "35 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for kira. Review workspace, check pending messages, update observations.", + "message": "You are Kira, a specialized deputy agent for Content & Social Media. Read {{HOME}}/.openclaw/agents/kira/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "nova-heartbeat", "schedule": "40 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for nova. Review workspace, check pending messages, update observations.", + "message": "You are Nova, a specialized deputy agent for Research & Discovery. Read {{HOME}}/.openclaw/agents/nova/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "paige-heartbeat", "schedule": "45 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for paige. Review workspace, check pending messages, update observations.", + "message": "You are Paige, a specialized deputy agent for Finance. Read {{HOME}}/.openclaw/agents/paige/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "quinn-heartbeat", "schedule": "50 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for quinn. Review workspace, check pending messages, update observations.", + "message": "You are Quinn, a specialized deputy agent for HR & People. Read {{HOME}}/.openclaw/agents/quinn/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "archer-heartbeat", "schedule": "55 */4 * * *", "tz": "{{USER_TZ}}", - "message": "Heartbeat check for archer. Review workspace, check pending messages, update observations.", + "message": "You are Archer, a specialized deputy agent for Documentation. Read {{HOME}}/.openclaw/agents/archer/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "daily-standup-compile", "schedule": "0 9 * * 1-5", "tz": "{{USER_TZ}}", - "message": "Compile the daily standup from all deputies. Collect recent observations, summarize status, flag blockers, and deliver a unified briefing.", + "message": "DO NOT delegate or spawn sub-agents. Compile the daily standup from all deputies. Collect recent observations from ~/.openclaw/agents/*/workspace/observations/, summarize status, flag blockers, and deliver a unified briefing. Keep under 1000 characters.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "message-router", "schedule": "*/15 * * * *", "tz": "{{USER_TZ}}", - "message": "Route inter-agent messages. Check the message queue, deliver pending messages to target agents, and log delivery status.", + "message": "DO NOT delegate or spawn sub-agents. Run: bash ~/.openclaw/scripts/route-messages.sh 2>&1. If any escalations were routed, summarize them briefly. If no escalations, reply NO_REPLY.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } }, { "name": "weekly-strategy-review", "schedule": "0 10 * * 1", "tz": "{{USER_TZ}}", - "message": "Weekly strategy alignment check. Review all deputy observations from the past week, identify cross-cutting themes, flag misalignments, and produce a strategic summary.", + "message": "DO NOT delegate or spawn sub-agents. Weekly strategy alignment check. Review all deputy observations from ~/.openclaw/agents/*/workspace/observations/ from the past week. Identify cross-cutting themes, flag misalignments, and produce a strategic summary. Keep under 1500 characters.", "agentId": "main", - "sessionTarget": "isolated" + "sessionTarget": "isolated", + "delivery": { + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_TARGET}}", + "bestEffort": true + } } ] diff --git a/bates-enhance/lib/cron-unlock.sh b/bates-enhance/lib/cron-unlock.sh index f08cf52..5a06621 100755 --- a/bates-enhance/lib/cron-unlock.sh +++ b/bates-enhance/lib/cron-unlock.sh @@ -3,6 +3,12 @@ # # Each integration can include a cron-jobs-.json file listing # cron jobs to register when the integration is installed. +# +# Template placeholders in the JSON are resolved before registration: +# {{USER_TZ}} -- from $USER_TZ env or defaults to UTC +# {{PRIMARY_CHANNEL}} -- from $PRIMARY_CHANNEL env or openclaw.json +# {{DELIVERY_TARGET}} -- from $DELIVERY_TARGET env or openclaw.json +# {{HOME}} -- user's home directory ENHANCE_DIR="${ENHANCE_DIR:-$HOME/.openclaw/enhance}" @@ -20,22 +26,66 @@ unlock_cron_jobs() { echo "Unlocking cron jobs for $integration..." python3 -c " -import json, subprocess, sys +import json, subprocess, sys, os jobs = json.load(open('$jobs_file')) + +# Resolve placeholder values +user_tz = os.environ.get('USER_TZ', 'UTC') +user_home = os.path.expanduser('~') +primary_channel = os.environ.get('PRIMARY_CHANNEL', '') +delivery_target = os.environ.get('DELIVERY_TARGET', '') + +# Try to read delivery config from openclaw.json if not in env +if not primary_channel or not delivery_target: + try: + cfg_path = os.path.join(user_home, '.openclaw', 'openclaw.json') + with open(cfg_path) as f: + cfg = json.load(f) + # Check for channels config + channels = cfg.get('channels', {}) + if not primary_channel: + # Use the first configured channel (msteams, telegram, etc.) + for ch in ['msteams', 'telegram', 'whatsapp']: + if ch in channels and channels[ch].get('enabled', True): + primary_channel = ch + break + if not delivery_target: + # Check for default delivery target in config + delivery_target = cfg.get('delivery', {}).get('defaultTarget', '') + except Exception: + pass + +def substitute(text): + \"\"\"Replace template placeholders in a string.\"\"\" + if not isinstance(text, str): + return text + text = text.replace('{{USER_TZ}}', user_tz) + text = text.replace('{{HOME}}', user_home) + text = text.replace('{{PRIMARY_CHANNEL}}', primary_channel) + text = text.replace('{{DELIVERY_TARGET}}', delivery_target) + return text + for job in jobs: cmd = ['openclaw', 'cron', 'add', '--name', job['name'], - '--schedule', job['schedule'], - '--tz', job.get('tz', 'Europe/Lisbon'), - '--message', job['message']] + '--schedule', substitute(job['schedule']), + '--tz', substitute(job.get('tz', user_tz)), + '--message', substitute(job['message'])] if 'delivery' in job: d = job['delivery'] - if 'channel' in d: - cmd.extend(['--delivery-channel', d['channel']]) - if 'to' in d: - cmd.extend(['--delivery-to', d['to']]) + channel = substitute(d.get('channel', '')) + target = substitute(d.get('to', '')) + + # Only add delivery if both channel and target are resolved + if channel and target and '{{' not in channel and '{{' not in target: + cmd.extend(['--delivery-channel', channel]) + cmd.extend(['--delivery-to', target]) + if d.get('bestEffort'): + cmd.extend(['--delivery-best-effort']) + elif channel or target: + print(f' [~] {job[\"name\"]}: delivery skipped (channel={channel!r}, target={target!r} -- configure PRIMARY_CHANNEL and DELIVERY_TARGET)', file=sys.stderr) if 'sessionTarget' in job: cmd.extend(['--session-target', job['sessionTarget']]) From 773a1f90dcb1c103c5fcfa5903f3996110049c5c Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Thu, 19 Feb 2026 20:28:26 +0000 Subject: [PATCH 09/63] Add v2026.2.19 patches: Teams DM fix, card updater, Codex fallback - channel-bridge.patch.ts: add __openclawUpdateTeamsCard bridge + abort-signal blocking fix - send-update.patch.ts: new patch for updateAdaptiveCardMSTeams function - policy-dm.patch.ts: new patch fixing DM proxy revocation (replyStyle thread -> top-level) - reapply-patches.sh: add sections 4-5 for send.ts and policy.ts auto-patching - model-fallback.sh: expand from 2 to 4 provider options (+ Codex 5.3, Gemini, Sonnet) - troubleshooting.md: add proxy revocation fix, channel auto-restart loop, 1M context warning Co-Authored-By: Claude Opus 4.6 --- bates-core/scripts-core/model-fallback.sh | 23 ++++- bates-enhance/docs/troubleshooting.md | 75 +++++++++++++++ bates-enhance/patches/channel-bridge.patch.ts | 75 ++++++++------- bates-enhance/patches/policy-dm.patch.ts | 32 +++++++ bates-enhance/patches/reapply-patches.sh | 67 ++++++++++++++ bates-enhance/patches/send-update.patch.ts | 92 +++++++++++++++++++ 6 files changed, 327 insertions(+), 37 deletions(-) create mode 100644 bates-enhance/patches/policy-dm.patch.ts create mode 100644 bates-enhance/patches/send-update.patch.ts diff --git a/bates-core/scripts-core/model-fallback.sh b/bates-core/scripts-core/model-fallback.sh index 22c1720..f92c049 100755 --- a/bates-core/scripts-core/model-fallback.sh +++ b/bates-core/scripts-core/model-fallback.sh @@ -1,20 +1,33 @@ #!/usr/bin/env bash # Part of Bates installer — scripts-core -# model-fallback.sh — Switch the primary model between Anthropic and a fallback provider +# model-fallback.sh — Switch the primary model between providers set -euo pipefail -# Default models — customize these for your setup +# Available models — customize these for your setup ANTHROPIC="anthropic/claude-opus-4-6" -FALLBACK="google-gemini-cli/gemini-3-pro-preview" +CODEX="openai-codex/gpt-5.3-codex" +GEMINI="google-gemini-cli/gemini-3-pro-preview" +SONNET="anthropic/claude-sonnet-4-5-20250929" CONFIG_PATH="agents.defaults.model.primary" -usage() { echo "Usage: $0 {fallback|anthropic|reset}"; exit 1; } +usage() { + echo "Usage: $0 {anthropic|codex|gemini|sonnet|reset}" + echo "" + echo " anthropic Switch to Claude Opus 4.6 (subscription)" + echo " codex Switch to OpenAI Codex 5.3 (ChatGPT subscription)" + echo " gemini Switch to Gemini 3 Pro Preview (OAuth)" + echo " sonnet Switch to Claude Sonnet 4.5 (subscription)" + echo " reset Same as anthropic" + exit 1 +} [[ $# -eq 1 ]] || usage case "$1" in - fallback) TARGET="$FALLBACK" ;; anthropic|reset) TARGET="$ANTHROPIC" ;; + codex) TARGET="$CODEX" ;; + gemini) TARGET="$GEMINI" ;; + sonnet) TARGET="$SONNET" ;; *) usage ;; esac diff --git a/bates-enhance/docs/troubleshooting.md b/bates-enhance/docs/troubleshooting.md index c22e280..f52e4a0 100644 --- a/bates-enhance/docs/troubleshooting.md +++ b/bates-enhance/docs/troubleshooting.md @@ -271,6 +271,25 @@ This document covers common issues and their solutions, organized by category. F --- +### 1M Context Window Causes Auth Failure + +**Symptom:** ALL Anthropic API requests fail with 401 "OAuth authentication is currently not supported." This happens immediately after enabling `context1m: true`. + +**Cause:** The `context1m: true` setting adds `anthropic-beta: context-1m-2025-08-07` via `options.headers`. The pi-ai library's `mergeHeaders` uses `Object.assign`, which **overwrites** the base `anthropic-beta` header containing the required OAuth betas (`claude-code-20250219,oauth-2025-04-20`). Without the OAuth beta header, Anthropic rejects the OAuth token. + +**Fix:** + +Do NOT enable `context1m: true` in `agents.defaults.models.*.params`. Remove it if present: + +1. Open `~/.openclaw/openclaw.json` +2. Search for `context1m` +3. Remove any `"context1m": true` entries +4. Restart the gateway + +> **Note:** This affects Claude Max subscription (token-type) auth profiles. API key profiles are not affected but will still lose the 1M context beta header. + +--- + ### Subscription Issues **Symptom:** The token profile works initially but fails intermittently. Logs mention "subscription" or "rate limit." @@ -402,6 +421,62 @@ This document covers common issues and their solutions, organized by category. F --- +### "Cannot perform 'set' on a proxy that has been revoked" + +**Symptom:** All Teams DM deliveries fail. Gateway logs show `Cannot perform 'set' on a proxy that has been revoked`. Messages may loop with "The agent encountered an error or bug." + +**Cause:** Bot Framework SDK wraps `TurnContext` in `Proxy.revocable()`, which gets revoked when the inbound HTTP request completes. The default DM `replyStyle: "thread"` uses this captured proxy directly via `ctx.sendActivity()`, so any message sent after the HTTP request completes hits a revoked proxy. + +**Fix:** + +1. Open the policy file: + + ```bash + nano ~/.npm-global/lib/node_modules/openclaw/extensions/msteams/src/policy.ts + ``` + +2. Find the `resolveMSTeamsReplyPolicy` function (around line 216-224). + +3. Change the DM branch from: + + ```typescript + return { requireMention: false, replyStyle: "thread" }; + ``` + + To: + + ```typescript + return { requireMention: false, replyStyle: "top-level" }; + ``` + +4. Restart the gateway. The `"top-level"` style uses `adapter.continueConversation()` which creates a fresh `TurnContext`, avoiding the revoked proxy. + +> **Note:** This only affects DMs. Group/channel replies use their own configured replyStyle and are unaffected. The `reapply-patches.sh` script handles this automatically. + +--- + +### Teams Channel Auto-Restart Loop + +**Symptom:** Gateway logs show the msteams channel starting, then immediately restarting, in an infinite loop. Memory usage climbs. + +**Cause:** In v2026.2.17+, `monitorMSTeamsProvider()` resolves its promise immediately after setup. The gateway interprets a resolved `startAccount()` promise as "channel stopped" and triggers a restart. + +**Fix:** + +The `startAccount()` function must block until the abort signal fires. This is handled by the channel-bridge patch (see `patches/channel-bridge.patch.ts`). The key code: + +```typescript +if (ctx.abortSignal && !ctx.abortSignal.aborted) { + await new Promise((resolve) => { + ctx.abortSignal!.addEventListener("abort", () => resolve(), { once: true }); + }); +} +``` + +Run `reapply-patches.sh` or apply the channel-bridge patch manually. + +--- + ### NODE_PATH Issues **Symptom:** Gateway starts but Teams integration fails with "Cannot find module 'botbuilder'" or similar import errors. diff --git a/bates-enhance/patches/channel-bridge.patch.ts b/bates-enhance/patches/channel-bridge.patch.ts index 1ef2f32..e5e8db7 100644 --- a/bates-enhance/patches/channel-bridge.patch.ts +++ b/bates-enhance/patches/channel-bridge.patch.ts @@ -4,43 +4,54 @@ * This code should be inserted into the Teams extension's channel.ts file, * inside the startAccount() function, after the bot adapter is initialized. * - * It exposes globalThis.__openclawSendTeamsCard so other patches (like - * adaptive-cards.patch.js) can send Adaptive Cards to Teams conversations. + * It exposes two globalThis bridges: + * - __openclawSendTeamsCard: Send a new Adaptive Card to a conversation + * - __openclawUpdateTeamsCard: Update an existing Adaptive Card in-place (for thinking bubbles) + * + * It also adds an abort-signal block so the gateway does not auto-restart + * the channel (monitorMSTeamsProvider resolves immediately in v2026.2.17+). * * MANUAL PATCH: Insert this block into: * ~/.npm-global/lib/node_modules/openclaw/extensions/msteams/src/channel.ts - * Inside startAccount(), after `adapter` is defined. + * Inside startAccount(), replacing the default `await monitorMSTeamsProvider(...)` block. + * + * Prerequisites: + * - channel.ts must import `updateAdaptiveCardMSTeams` from "./send.js" + * (add to the existing import: `import { sendAdaptiveCardMSTeams, sendMessageMSTeams, updateAdaptiveCardMSTeams } from "./send.js";`) + * - send.ts must have the updateAdaptiveCardMSTeams function (see send-update.patch.ts) */ // --- BEGIN PATCH --- // [Bates patch] Expose Teams card sender for sub-agent Adaptive Cards -(globalThis as any).__openclawSendTeamsCard = async ( - conversationId: string, - card: Record -) => { - if (!adapter || !conversationId) return; - try { - const conversationReference = { - channelId: 'msteams', - conversation: { id: conversationId }, - serviceUrl: (adapter as any).serviceUrl || 'https://smba.trafficmanager.net/teams/', - }; - await adapter.continueConversation( - conversationReference as any, - async (turnContext: any) => { - await turnContext.sendActivity({ - type: 'message', - attachments: [ - { - contentType: 'application/vnd.microsoft.card.adaptive', - content: card, - }, - ], - }); - } - ); - } catch (err) { - // Silently fail — non-critical enhancement - } -}; +if (!globalThis.__openclawSendTeamsCard) { + const capturedCfg = ctx.cfg; + globalThis.__openclawSendTeamsCard = async (to: string, card: Record) => { + return sendAdaptiveCardMSTeams({ cfg: capturedCfg, to, card }); + }; +} +// [Bates patch] Expose card updater for thinking bubble (update existing card in-place) +if (!globalThis.__openclawUpdateTeamsCard) { + const capturedCfg = ctx.cfg; + globalThis.__openclawUpdateTeamsCard = async ( + to: string, + activityId: string, + card: Record, + ) => { + return updateAdaptiveCardMSTeams({ cfg: capturedCfg, to, activityId, card }); + }; +} +const result = await monitorMSTeamsProvider({ + cfg: ctx.cfg, + runtime: ctx.runtime, + abortSignal: ctx.abortSignal, +}); +// [Bates patch] Block until abort signal fires — gateway treats resolved promise as "channel stopped" +// Without this, monitorMSTeamsProvider resolves immediately (v2026.2.17+) and the gateway auto-restarts the channel in a loop. +if (ctx.abortSignal && !ctx.abortSignal.aborted) { + await new Promise((resolve) => { + ctx.abortSignal!.addEventListener("abort", () => resolve(), { once: true }); + }); + await result.shutdown(); +} +return result; // --- END PATCH --- diff --git a/bates-enhance/patches/policy-dm.patch.ts b/bates-enhance/patches/policy-dm.patch.ts new file mode 100644 index 0000000..1faaf31 --- /dev/null +++ b/bates-enhance/patches/policy-dm.patch.ts @@ -0,0 +1,32 @@ +/** + * policy-dm.patch.ts -- Fix DM reply style to prevent proxy revocation errors + * + * Bot Framework SDK wraps TurnContext in Proxy.revocable(), which gets revoked + * when the inbound HTTP request completes. The default DM replyStyle "thread" + * uses this proxy directly (via ctx.sendActivity), causing: + * "Cannot perform 'set' on a proxy that has been revoked" + * + * Changing DM replyStyle to "top-level" forces the code path through + * adapter.continueConversation(), which creates a fresh TurnContext. + * + * MANUAL PATCH: In policy.ts, find the resolveMSTeamsReplyPolicy function: + * ~/.npm-global/lib/node_modules/openclaw/extensions/msteams/src/policy.ts + * + * Change this line (typically around line 223): + * return { requireMention: false, replyStyle: "thread" }; + * To: + * return { requireMention: false, replyStyle: "top-level" }; + * + * This only affects DMs (isDirectMessage === true). Group/channel replies + * are unaffected. + */ + +// Before: +// if (params.isDirectMessage) { +// return { requireMention: false, replyStyle: "thread" }; +// } + +// After: +// if (params.isDirectMessage) { +// return { requireMention: false, replyStyle: "top-level" }; +// } diff --git a/bates-enhance/patches/reapply-patches.sh b/bates-enhance/patches/reapply-patches.sh index 9b0611a..4101748 100644 --- a/bates-enhance/patches/reapply-patches.sh +++ b/bates-enhance/patches/reapply-patches.sh @@ -174,6 +174,69 @@ else: fi fi +# ============================================================ +# 4. Teams send.ts -- updateAdaptiveCardMSTeams +# ============================================================ +echo "" +info "=== Teams send.ts (Card Update Function) ===" + +SEND_TS="$TEAMS_DIR/send.ts" +if [[ ! -f "$SEND_TS" ]]; then + warn "Teams send.ts not found at: $SEND_TS" + warn "Teams extension may not be installed. Skipping." +else + if grep -q 'updateAdaptiveCardMSTeams' "$SEND_TS"; then + success "send.ts already has updateAdaptiveCardMSTeams" + elif [[ "$DRY_RUN" == "--dry" ]]; then + echo " Would patch: send.ts" + else + if [[ ! -f "$BACKUP_PATH/send.ts" ]]; then + cp "$SEND_TS" "$BACKUP_PATH/send.ts" + fi + + PATCH_CONTENT=$(sed -n '/^\/\/ --- BEGIN PATCH ---$/,/^\/\/ --- END PATCH ---$/p' "$SCRIPT_DIR/send-update.patch.ts" | sed '1d;$d') + if [[ -z "$PATCH_CONTENT" ]]; then + warn "Could not extract patch content from send-update.patch.ts" + else + echo "" >> "$SEND_TS" + echo "$PATCH_CONTENT" >> "$SEND_TS" + success "send.ts" + fi + fi +fi + +# ============================================================ +# 5. Teams policy.ts -- DM replyStyle fix +# ============================================================ +echo "" +info "=== Teams policy.ts (DM Proxy Revocation Fix) ===" + +POLICY_TS="$TEAMS_DIR/policy.ts" +if [[ ! -f "$POLICY_TS" ]]; then + warn "Teams policy.ts not found at: $POLICY_TS" +else + if grep -q 'replyStyle: "top-level"' "$POLICY_TS" && grep -q 'isDirectMessage' "$POLICY_TS"; then + success "policy.ts already patched (DM replyStyle = top-level)" + elif [[ "$DRY_RUN" == "--dry" ]]; then + echo " Would patch: policy.ts (change DM replyStyle from thread to top-level)" + else + if [[ ! -f "$BACKUP_PATH/policy.ts" ]]; then + cp "$POLICY_TS" "$BACKUP_PATH/policy.ts" + fi + + # Replace "thread" with "top-level" in the DM branch + if sed -i 's/replyStyle: "thread"/replyStyle: "top-level"/' "$POLICY_TS"; then + if grep -q 'replyStyle: "top-level"' "$POLICY_TS"; then + success "policy.ts" + else + warn "policy.ts: sed ran but pattern not found. Manual patching may be required." + fi + else + warn "Could not patch policy.ts. Apply policy-dm.patch.ts manually." + fi + fi +fi + # ============================================================ # Summary # ============================================================ @@ -184,6 +247,10 @@ else success "Patch application complete!" info "Backups saved to: $BACKUP_PATH" echo "" + info "NOTE: The adaptive-cards.patch.js applies the basic card rendering only." + info "For the full thinking bubble + progress updates + failure cards, manual" + info "patching of reply-*.js is required. See post-update-checklist.md." + echo "" info "Restart the gateway to apply changes:" echo " systemctl --user restart openclaw-gateway" fi diff --git a/bates-enhance/patches/send-update.patch.ts b/bates-enhance/patches/send-update.patch.ts new file mode 100644 index 0000000..641f0d3 --- /dev/null +++ b/bates-enhance/patches/send-update.patch.ts @@ -0,0 +1,92 @@ +/** + * send-update.patch.ts -- Add updateAdaptiveCardMSTeams to send.ts + * + * This function allows updating an existing Adaptive Card message in-place, + * which is used by the thinking bubble feature: when a sub-agent spawns, + * a "working on..." card is sent, then updated with the result when done. + * + * MANUAL PATCH: Append this code to the end of: + * ~/.npm-global/lib/node_modules/openclaw/extensions/msteams/src/send.ts + * (before any trailing exports if present) + * + * Also add to the existing imports at the top of send.ts if not already present: + * import { buildConversationReference } from "./messenger.js"; + * import { classifyMSTeamsSendError, formatMSTeamsSendErrorHint, formatUnknownError } from "./errors.js"; + * + * And export this function from the module (add to channel.ts import line). + */ + +// --- BEGIN PATCH --- +// [Bates patch] Types for card update +export type UpdateMSTeamsCardParams = { + /** Full config (for credentials) */ + cfg: OpenClawConfig; + /** Conversation ID or user ID to send to */ + to: string; + /** Activity ID of the message to update */ + activityId: string; + /** New Adaptive Card JSON object */ + card: Record; +}; + +export type UpdateMSTeamsCardResult = { + activityId: string; + conversationId: string; +}; + +/** + * Update an existing Adaptive Card message in a Teams conversation. + * The bot must have originally sent the message being updated. + */ +export async function updateAdaptiveCardMSTeams( + params: UpdateMSTeamsCardParams, +): Promise { + const { cfg, to, activityId, card } = params; + const { adapter, appId, conversationId, ref, log } = await resolveMSTeamsSendContext({ + cfg, + to, + }); + + log.debug?.("updating adaptive card", { + conversationId, + activityId, + cardType: card.type, + }); + + const baseRef = buildConversationReference(ref); + const proactiveRef = { + ...baseRef, + activityId: undefined, + }; + + try { + await adapter.continueConversation(appId, proactiveRef, async (ctx: any) => { + await ctx.updateActivity({ + id: activityId, + type: "message", + attachments: [ + { + contentType: "application/vnd.microsoft.card.adaptive", + content: card, + }, + ], + }); + }); + } catch (err) { + const classification = classifyMSTeamsSendError(err); + const hint = formatMSTeamsSendErrorHint(classification); + const status = classification.statusCode ? ` (HTTP ${classification.statusCode})` : ""; + throw new Error( + `msteams card update failed${status}: ${formatUnknownError(err)}${hint ? ` (${hint})` : ""}`, + { cause: err }, + ); + } + + log.info("updated adaptive card", { conversationId, activityId }); + + return { + activityId, + conversationId, + }; +} +// --- END PATCH --- From 7f4b8e61f5c542898edf8aa6e1aea1fa4f82e2d4 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Thu, 19 Feb 2026 21:34:00 +0000 Subject: [PATCH 10/63] Add per-agent avatar map for Teams Adaptive Cards Sub-agent result cards, thinking bubbles, progress updates, and failure cards now show the deputy's unique avatar image instead of a generic robot emoji. Avatars are served from GitHub raw URLs (public repo) so Teams servers can fetch them directly. Co-Authored-By: Claude Opus 4.6 --- bates-enhance/patches/avatar-map.js | 76 +++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 bates-enhance/patches/avatar-map.js diff --git a/bates-enhance/patches/avatar-map.js b/bates-enhance/patches/avatar-map.js new file mode 100644 index 0000000..1cbc5a8 --- /dev/null +++ b/bates-enhance/patches/avatar-map.js @@ -0,0 +1,76 @@ +/** + * avatar-map.js -- Agent avatar mapping for Teams Adaptive Cards + * + * This module provides avatar URLs and helper functions used by the + * Adaptive Card patches in reply-*.js. These functions must be injected + * into the dist file alongside the card patches. + * + * The avatars are hosted on GitHub (public repo) so Teams servers can + * fetch them directly. Adaptive Cards require publicly accessible image URLs. + * + * MANUAL PATCH: Insert these functions into reply-*.js just before the + * `updateThinkingCardToFailed` helper function. Then update all card + * templates to use `buildBatesAvatarColumn(agentId)` instead of emoji + * TextBlock columns, and `resolveBatesDisplayName(agentId)` for the label. + * + * Also add `agentId: targetAgentId` to the `registerSubagentRun()` call + * in the sessions_spawn handler so progress/failure cards can resolve + * the agent identity. + */ + +// --- BEGIN PATCH --- +// [Bates patch] Agent avatar map for Teams Adaptive Cards +const BATES_AVATAR_BASE = "https://raw.githubusercontent.com/getBates/Bates/feature/installer-v1/bates-core/plugins/dashboard/static/assets"; +const BATES_AVATAR_MAP = { + main: `${BATES_AVATAR_BASE}/agent-avatar.png`, + mira: `${BATES_AVATAR_BASE}/agent-baby_Sage.png`, + conrad: `${BATES_AVATAR_BASE}/agent-baby_bolt.png`, + soren: `${BATES_AVATAR_BASE}/agent-baby_core.png`, + amara: `${BATES_AVATAR_BASE}/agent-baby_aqua.png`, + jules: `${BATES_AVATAR_BASE}/agent-baby_frost.png`, + dash: `${BATES_AVATAR_BASE}/agent-baby_Ember.png`, + mercer: `${BATES_AVATAR_BASE}/agent-baby_Dark.png`, + kira: `${BATES_AVATAR_BASE}/agent-baby_pixel.png`, + nova: `${BATES_AVATAR_BASE}/agent-baby_nova.png`, + paige: `${BATES_AVATAR_BASE}/agent-baby_Sage.png`, + quinn: `${BATES_AVATAR_BASE}/agent-baby_sky.png`, + archer: `${BATES_AVATAR_BASE}/agent-baby_sky.png`, +}; +function buildBatesAvatarColumn(agentId) { + const url = BATES_AVATAR_MAP[agentId] || BATES_AVATAR_MAP.main; + return { type: "Column", width: "auto", items: [{ type: "Image", url, size: "Small", style: "Person" }] }; +} +function resolveBatesDisplayName(agentId) { + if (!agentId || agentId === "main") return "Bates"; + return agentId.charAt(0).toUpperCase() + agentId.slice(1); +} +// --- END PATCH --- + +/** + * Card template updates needed (4 locations in reply-*.js): + * + * 1. RESULT CARD (runSubagentAnnounceFlow): + * - Replace: { type: "TextBlock", text: "\u{1F916}", size: "Large" } + * - With: buildBatesAvatarColumn(subagentName || "main") + * - Replace: text: "**Baby Bates:**" + * - With: text: `**${resolveBatesDisplayName(subagentName || "main")}:**` + * + * 2. THINKING CARD (sessions_spawn handler): + * - Add `agentId: targetAgentId` to registerSubagentRun() call + * - Replace: { type: "TextBlock", text: "\u{1F9E0}", size: "Large" } + * - With: buildBatesAvatarColumn(targetAgentId || "main") + * - Replace: text: `**Bates is working on:** ${thinkingLabel}` + * - With: text: `**${resolveBatesDisplayName(targetAgentId || "main")} is working on:** ${thinkingLabel}` + * + * 3. PROGRESS CARD (sweepSubagentRuns): + * - Replace: { type: "TextBlock", text: "\u{1F9E0}", size: "Large" } + * - With: buildBatesAvatarColumn(entry.agentId || "main") + * - Replace: text: `**Bates is working on:** ${entry.label || "a task"}` + * - With: text: `**${resolveBatesDisplayName(entry.agentId || "main")} is working on:** ${entry.label || "a task"}` + * + * 4. FAILURE CARD (updateThinkingCardToFailed): + * - Replace: { type: "TextBlock", text: "\u{26A0}\u{FE0F}", size: "Large" } + * - With: buildBatesAvatarColumn(entry.agentId || "main") + * - Replace: text: `**Task:** ${entry.label || "sub-agent"}` + * - With: text: `**${resolveBatesDisplayName(entry.agentId || "main")}:** ${entry.label || "task"}` + */ From 5d108adf578af7af07922e3b8eac77f5bca4d699 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Thu, 19 Feb 2026 21:41:32 +0000 Subject: [PATCH 11/63] Add mandatory disclaimer acceptance before installation - DISCLAIMER.txt: standalone file with full experimental/risk/autonomous-agent warnings - BatesCore.iss: shows disclaimer as Inno Setup license page (must click "I accept"), Apache 2.0 license shown as info-before page - install.ps1: shows disclaimer and requires "I ACCEPT" before Windows bootstrap; persists acceptance marker to avoid re-prompting after reboot - core-setup.sh: shows disclaimer and requires "I ACCEPT" before Linux setup; supports BATES_ACCEPT_DISCLAIMER=yes for non-interactive/CI use Co-Authored-By: Claude Opus 4.6 --- DISCLAIMER.txt | 49 ++++++++++++++++++++++++++++++++++++++++ bates-core/BatesCore.iss | 6 ++++- bates-core/core-setup.sh | 29 ++++++++++++++++++++++++ bates-core/install.ps1 | 36 +++++++++++++++++++++++++++++ 4 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 DISCLAIMER.txt diff --git a/DISCLAIMER.txt b/DISCLAIMER.txt new file mode 100644 index 0000000..fd9c6c8 --- /dev/null +++ b/DISCLAIMER.txt @@ -0,0 +1,49 @@ +BATES AI ASSISTANT -- IMPORTANT DISCLAIMER + +PLEASE READ CAREFULLY BEFORE PROCEEDING WITH INSTALLATION. + +This software is provided "AS IS", without warranty of any kind, express +or implied. This is an EXPERIMENTAL, PRE-RELEASE PROJECT under active +development. + +By installing and using this software, you acknowledge and accept the +following: + +1. USE AT YOUR OWN RISK. The authors, contributors, and maintainers of + this project accept no responsibility or liability for any damage, + data loss, system instability, security incidents, unexpected costs, + or any other harm resulting from the use or misuse of this software. + +2. SYSTEM MODIFICATIONS. This installer modifies your system + configuration, including enabling WSL2, installing packages, creating + systemd services, setting up cron jobs, and configuring network + services. These changes may affect your system's stability, security, + and performance. + +3. THIRD-PARTY SERVICES. This software interacts with third-party APIs + and services (Anthropic, OpenAI, Google, Telegram, Twilio, Microsoft + 365, ElevenLabs, and others). You are solely responsible for any + costs, terms of service violations, or consequences arising from the + use of these services. + +4. NO WARRANTY. No guarantee of correctness, security, or fitness for + any particular purpose. The installer scripts have been tested on + specific hardware and software configurations. Your results may vary. + +5. AUTONOMOUS AI AGENTS. This software manages AI agents that can take + autonomous actions including sending messages, making API calls, + reading and writing files, and executing commands. You are responsible + for supervising and configuring these agents appropriately. + +6. BACK UP YOUR DATA before running the installer. We strongly recommend + testing on a dedicated or non-critical machine first. + +7. NO AFFILIATION. This project is not affiliated with, endorsed by, or + supported by OpenClaw, Anthropic, OpenAI, Google, Microsoft, Telegram, + Twilio, ElevenLabs, or any other third-party service mentioned herein. + +This software is licensed under the Apache License, Version 2.0. See the +LICENSE file for the full license text. + +BY PROCEEDING WITH THE INSTALLATION, YOU ACCEPT FULL RESPONSIBILITY FOR +ANY AND ALL CONSEQUENCES. diff --git a/bates-core/BatesCore.iss b/bates-core/BatesCore.iss index 5e6d131..9256df8 100644 --- a/bates-core/BatesCore.iss +++ b/bates-core/BatesCore.iss @@ -29,7 +29,8 @@ SolidCompression=yes PrivilegesRequired=admin AllowNoIcons=yes DisableProgramGroupPage=yes -LicenseFile=..\LICENSE +LicenseFile=..\DISCLAIMER.txt +InfoBeforeFile=..\LICENSE SetupIconFile=assets\bates-icon.ico WizardSmallImageFile=assets\installer-logo.bmp WizardImageFile=assets\installer-banner.bmp @@ -41,6 +42,9 @@ MinVersion=10.0.19041 Name: "english"; MessagesFile: "compiler:Default.isl" [Files] +; Disclaimer (also shown by install.ps1 and core-setup.sh) +Source: "..\DISCLAIMER.txt"; DestDir: "{app}"; Flags: ignoreversion + ; Core setup scripts Source: "core-setup.sh"; DestDir: "{app}"; Flags: ignoreversion Source: "core-configure.sh"; DestDir: "{app}"; Flags: ignoreversion diff --git a/bates-core/core-setup.sh b/bates-core/core-setup.sh index 756748c..e57acf6 100755 --- a/bates-core/core-setup.sh +++ b/bates-core/core-setup.sh @@ -14,6 +14,35 @@ echo " Bates Core -- Linux Environment Setup" echo "===========================================" echo "" +# --- Disclaimer --- +DISCLAIMER_FILE="$SCRIPT_DIR/../DISCLAIMER.txt" +if [[ -f "$DISCLAIMER_FILE" ]]; then + echo -e "${YELLOW}${BOLD}" + echo "============================================" + echo " IMPORTANT -- PLEASE READ BEFORE CONTINUING" + echo "============================================" + echo -e "${NC}" + cat "$DISCLAIMER_FILE" + echo "" + echo -e "${YELLOW}${BOLD}============================================${NC}" + echo "" + if [[ "${BATES_ACCEPT_DISCLAIMER:-}" == "yes" ]]; then + info "Disclaimer accepted via BATES_ACCEPT_DISCLAIMER=yes" + else + echo -e "${BOLD}You must accept this disclaimer to continue.${NC}" + echo "" + read -rp "Type 'I ACCEPT' to proceed (or anything else to abort): " DISCLAIMER_REPLY + if [[ "$DISCLAIMER_REPLY" != "I ACCEPT" ]]; then + echo "" + error "Installation aborted. You must accept the disclaimer to proceed." + exit 1 + fi + echo "" + success "Disclaimer accepted." + fi + echo "" +fi + # --- Prerequisite Checks --- run_all_checks diff --git a/bates-core/install.ps1 b/bates-core/install.ps1 index 20b8414..e4160b6 100644 --- a/bates-core/install.ps1 +++ b/bates-core/install.ps1 @@ -41,6 +41,42 @@ Write-Host " Bates AI Assistant -- Windows Setup" -ForegroundColor Cyan Write-Host "==========================================" -ForegroundColor Cyan Write-Host "" +# ============================================================ +# Disclaimer acceptance +# ============================================================ +$disclaimerPath = Join-Path $InstallDir "DISCLAIMER.txt" +if (-not (Test-Path (Join-Path $InstallDir ".disclaimer-accepted"))) { + if (Test-Path $disclaimerPath) { + Write-Host "==========================================" -ForegroundColor Yellow + Write-Host " IMPORTANT -- PLEASE READ CAREFULLY" -ForegroundColor Yellow + Write-Host "==========================================" -ForegroundColor Yellow + Write-Host "" + Get-Content $disclaimerPath | Write-Host + Write-Host "" + Write-Host "==========================================" -ForegroundColor Yellow + Write-Host "" + + if ($env:BATES_ACCEPT_DISCLAIMER -eq "yes") { + Write-Success "Disclaimer accepted via BATES_ACCEPT_DISCLAIMER=yes" + } else { + Write-Host "You must accept this disclaimer to continue." -ForegroundColor White + Write-Host "" + $reply = Read-Host "Type 'I ACCEPT' to proceed (or anything else to abort)" + if ($reply -ne "I ACCEPT") { + Write-Host "" + Write-Fail "Installation aborted. You must accept the disclaimer to proceed." + exit 1 + } + Write-Host "" + Write-Success "Disclaimer accepted." + } + + # Mark as accepted so we don't re-prompt after reboot + "accepted" | Out-File (Join-Path $InstallDir ".disclaimer-accepted") -Force + Write-Host "" + } +} + # ============================================================ # Check if resuming after reboot # ============================================================ From 38bff9c04857d6bb802fc65896f1fb5c2062daa7 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Sun, 22 Feb 2026 22:16:22 +0000 Subject: [PATCH 12/63] Update installer models: add OpenAI Codex, bump GPT/Gemini defaults - Add OpenAI Codex (GPT-5.3) as provider option 4 in core-configure.sh - Update OpenAI default from GPT-4o to GPT-5.2 - Update Google default from Gemini 2.0 Pro to Gemini 3 Pro Preview - Add cross-provider fallback chain to openclaw.json template Co-Authored-By: Claude Opus 4.6 (1M context) --- bates-core/core-configure.sh | 23 ++++++++++++++------- bates-core/templates/openclaw.json.template | 7 ++++++- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/bates-core/core-configure.sh b/bates-core/core-configure.sh index 559f2e5..f0dd6f8 100755 --- a/bates-core/core-configure.sh +++ b/bates-core/core-configure.sh @@ -19,9 +19,10 @@ echo "===========================================" # ============================================================ echo "" echo "Choose your AI subscription:" -echo " 1) Anthropic (Claude Max) -- Best quality, Opus 4.6" -echo " 2) OpenAI (ChatGPT Pro) -- GPT-4o" -echo " 3) Google (Gemini Advanced) -- Gemini 2.0 Pro" +echo " 1) Anthropic (Claude Max) -- Best quality, Opus 4.6" +echo " 2) OpenAI (ChatGPT Pro) -- GPT-5.2" +echo " 3) Google (Gemini Advanced) -- Gemini 3 Pro" +echo " 4) OpenAI Codex (ChatGPT Plus) -- GPT-5.3 Codex" echo "" read -rp "Selection [1]: " PROVIDER_CHOICE PROVIDER_CHOICE="${PROVIDER_CHOICE:-1}" @@ -70,20 +71,28 @@ EOF ;; 2) export PROVIDER="openai" - export PRIMARY_MODEL="openai/gpt-4o" - export PRIMARY_MODEL_SHORT="GPT-4o" + export PRIMARY_MODEL="openai/gpt-5.2" + export PRIMARY_MODEL_SHORT="GPT-5.2" echo "" echo "Starting OpenAI auth flow..." openclaw models auth --provider openai ;; 3) export PROVIDER="google" - export PRIMARY_MODEL="google/gemini-2.0-pro" - export PRIMARY_MODEL_SHORT="Gemini 2.0 Pro" + export PRIMARY_MODEL="google/gemini-3-pro-preview" + export PRIMARY_MODEL_SHORT="Gemini 3 Pro" echo "" echo "Starting Google auth flow..." openclaw models auth --provider google ;; + 4) + export PROVIDER="openai-codex" + export PRIMARY_MODEL="openai-codex/gpt-5.3-codex" + export PRIMARY_MODEL_SHORT="GPT-5.3 Codex" + echo "" + echo "Starting OpenAI Codex auth flow (uses ChatGPT Plus OAuth)..." + openclaw models auth --provider openai-codex + ;; *) fatal "Invalid selection: $PROVIDER_CHOICE" ;; diff --git a/bates-core/templates/openclaw.json.template b/bates-core/templates/openclaw.json.template index 42cd9b3..be4113d 100644 --- a/bates-core/templates/openclaw.json.template +++ b/bates-core/templates/openclaw.json.template @@ -12,7 +12,12 @@ "agents": { "defaults": { "model": { - "primary": "{{PRIMARY_MODEL}}" + "primary": "{{PRIMARY_MODEL}}", + "fallbacks": [ + "anthropic/claude-sonnet-4-5-20250929", + "openai/gpt-4o", + "google-gemini-cli/gemini-2.5-flash" + ] }, "workspace": "~/.openclaw/workspace", "maxConcurrent": 4, From a565674ecbf4f74015a055cc1b3c4cb87a0c47c2 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Sun, 22 Feb 2026 22:29:51 +0000 Subject: [PATCH 13/63] Add reply-composite.patch.js: complete thinking bubble + avatar automation Extract all deployed patches from v2026.2.21 into a single reply-composite patch that applies avatars, thinking bubble, progress/failure cards, announce directive fixes, and agentId tracking. Previously these were manual edits that reapply-patches.sh couldn't reproduce. Changes: - New reply-composite.patch.js (replaces adaptive-cards.patch.js for reply-*.js) - Avatar map with 13 agent images + helper functions - Thinking card on sessions_spawn ("working on..." bubble) - Result card with avatar in runSubagentAnnounceFlow - Progress card updates for 2+ minute tasks - Failure cards at timeout/error/archive points - Announce directives: enforce incremental delivery, no NO_REPLY - agentId tracking in registerSubagentRun - Updated reapply-patches.sh to use composite patch + deliver-file iteration - Updated README.md with full patch documentation Co-Authored-By: Claude Opus 4.6 (1M context) --- bates-enhance/patches/README.md | 86 +++- bates-enhance/patches/reapply-patches.sh | 247 ++++----- .../patches/reply-composite.patch.js | 467 ++++++++++++++++++ 3 files changed, 668 insertions(+), 132 deletions(-) create mode 100644 bates-enhance/patches/reply-composite.patch.js diff --git a/bates-enhance/patches/README.md b/bates-enhance/patches/README.md index 48f2cd2..66ebb13 100644 --- a/bates-enhance/patches/README.md +++ b/bates-enhance/patches/README.md @@ -3,40 +3,82 @@ These patches extend OpenClaw gateway functionality. They must be reapplied after every `openclaw update` since dist filenames change with each release. -## Patches +## Quick Start -### cost-footer.patch.js -Injects a cost footer into all outgoing messages via `globalThis.__openclawMessageTransform`. -Targets 5-7 dist files (reply dispatcher + proactive delivery files). +```bash +# Apply all patches after an update +./reapply-patches.sh + +# Preview what would be patched +./reapply-patches.sh --dry + +# Then restart the gateway +systemctl --user restart openclaw-gateway +``` + +## Patch Files + +### reply-composite.patch.js (NEW — replaces adaptive-cards.patch.js) +All-in-one patch for `reply-*.js` (the main reply dispatcher). Applies: +- Agent avatar map (13 agents with GitHub-hosted images) +- `buildBatesAvatarColumn()` + `resolveBatesDisplayName()` helpers +- `updateThinkingCardToFailed()` failure card helper +- Announce directive changes (enforce incremental delivery, no NO_REPLY suppression) +- Thinking card on `sessions_spawn` (shows "working on..." in Teams) +- Result card with avatar in `runSubagentAnnounceFlow` (updates thinking card or sends new) +- Progress card updates for tasks running 2+ minutes (`sweepSubagentRuns`) +- Failure card updates at 3 timeout points + announce crash + archive cleanup +- `agentId` tracking in `registerSubagentRun` +- Cost footer transform hook (`__openclawMessageTransform`) -### adaptive-cards.patch.js -Enables styled Adaptive Cards for sub-agent results in Teams via -`globalThis.__openclawSendTeamsCard`. Targets the reply dispatcher and -the Teams channel bridge. +### cost-footer.patch.js +Injects cost footer into `deliver-*.js` files (4 proactive delivery dispatchers). +Uses `globalThis.__openclawMessageTransform` hook set up by the cost-tracker plugin. ### channel-bridge.patch.ts -Adds the `__openclawSendTeamsCard` bridge function into the Teams channel -`startAccount()` function. +Teams extension `channel.ts` patch: +- Exposes `globalThis.__openclawSendTeamsCard` (send new Adaptive Card) +- Exposes `globalThis.__openclawUpdateTeamsCard` (update existing card in-place) +- Adds abort-signal blocking for v2026.2.17+ compatibility -## Usage +### send-update.patch.ts +Teams extension `send.ts` patch: +- Adds `updateAdaptiveCardMSTeams()` function for in-place card updates +- Required by the thinking bubble feature (channel-bridge uses it) -```bash -# Apply all patches -./reapply-patches.sh +### policy-dm.patch.ts +Teams extension `policy.ts` fix: +- Changes DM `replyStyle` from `"thread"` to `"top-level"` +- Prevents proxy revocation errors in Bot Framework SDK -# Apply after an OpenClaw update -openclaw update -./reapply-patches.sh -``` +### avatar-map.js +Reference file containing the avatar map code. This is now embedded in +`reply-composite.patch.js` and applied automatically. Kept for documentation. + +### adaptive-cards.patch.js (LEGACY) +Original basic Adaptive Card patch. Superseded by `reply-composite.patch.js`. +Kept for reference but no longer used by `reapply-patches.sh`. ## How It Works 1. Backs up original files to `~/.openclaw/patch-backup//` -2. Discovers patch targets via grep (filenames include hash suffixes that change per release) -3. Applies patches using Node.js AST manipulation -4. Restarts the gateway to pick up changes +2. Discovers patch targets by filename pattern (not grep — more reliable) +3. `reply-composite.patch.js` uses string matching to find precise insertion points +4. Teams patches use sed/Python for TypeScript source modifications +5. All patches are idempotent (safe to re-run) + +## Patch Order + +The script applies patches in dependency order: +1. Reply composite (dist) +2. Cost footer on deliver files (dist) +3. send.ts — must be patched before channel.ts (Teams import dependency) +4. channel.ts (Teams) +5. policy.ts (Teams) ## Warning These patches modify OpenClaw internal dist files. They are fragile and may -break with major OpenClaw refactors. Always keep backups. +break with major OpenClaw refactors. Always keep backups. The composite patch +uses structural pattern matching rather than line numbers, but significant +refactors to the announce/spawn flow will require updating the patch. diff --git a/bates-enhance/patches/reapply-patches.sh b/bates-enhance/patches/reapply-patches.sh index 4101748..cdbedcf 100644 --- a/bates-enhance/patches/reapply-patches.sh +++ b/bates-enhance/patches/reapply-patches.sh @@ -42,78 +42,120 @@ if [[ "$DRY_RUN" != "--dry" ]]; then info "Backup directory: $BACKUP_PATH" fi +TOTAL_OK=0 +TOTAL_FAIL=0 + # ============================================================ -# 1. Cost Footer Patches +# 1. Reply Composite Patch (avatars, thinking bubble, cards, announce directives) # ============================================================ echo "" -info "=== Cost Footer Patches ===" +info "=== Reply Composite Patch (avatars, thinking, cards, directives) ===" -# Find target files: reply dispatcher + proactive delivery files -COST_TARGETS=() -while IFS= read -r f; do - COST_TARGETS+=("$f") -done < <(grep -rl 'triggerMessage\|deliverProactive\|dispatchReply\|deliver.*Message' "$DIST_DIR"/*.js 2>/dev/null | sort -u) +# Find the main reply-*.js file (exclude prefix files) +REPLY_FILE="" +for f in "$DIST_DIR"/reply-*.js; do + basename=$(basename "$f") + if [[ "$basename" != reply-prefix-* ]]; then + REPLY_FILE="$f" + break + fi +done -if [[ ${#COST_TARGETS[@]} -eq 0 ]]; then - warn "No cost footer targets found. Gateway structure may have changed." +if [[ -z "$REPLY_FILE" ]]; then + warn "No reply-*.js found in dist. Gateway structure may have changed." + TOTAL_FAIL=$((TOTAL_FAIL + 1)) else - info "Found ${#COST_TARGETS[@]} potential target(s)" - for target in "${COST_TARGETS[@]}"; do - basename=$(basename "$target") - if [[ "$DRY_RUN" == "--dry" ]]; then - echo " Would patch: $basename" + basename=$(basename "$REPLY_FILE") + if [[ "$DRY_RUN" == "--dry" ]]; then + echo " Would patch: $basename (composite: avatars + thinking + cards + directives)" + else + if [[ ! -f "$BACKUP_PATH/$basename" ]]; then + cp "$REPLY_FILE" "$BACKUP_PATH/$basename" + fi + if node "$SCRIPT_DIR/reply-composite.patch.js" "$REPLY_FILE"; then + success "$basename" + TOTAL_OK=$((TOTAL_OK + 1)) else - # Backup original (only if not already backed up) - if [[ ! -f "$BACKUP_PATH/$basename" ]]; then - cp "$target" "$BACKUP_PATH/$basename" - fi - if node "$SCRIPT_DIR/cost-footer.patch.js" "$target"; then - success " $basename" - else - warn " Failed: $basename (may need manual patching)" - fi + warn "Failed: $basename (check output above for details)" + TOTAL_FAIL=$((TOTAL_FAIL + 1)) fi - done + fi fi # ============================================================ -# 2. Adaptive Cards Patches +# 2. Cost Footer Patches (deliver-*.js files) # ============================================================ echo "" -info "=== Adaptive Cards Patches ===" +info "=== Cost Footer Patches (deliver files) ===" + +DELIVER_COUNT=0 +for f in "$DIST_DIR"/deliver-*.js; do + [[ -f "$f" ]] || continue + basename=$(basename "$f") + if [[ "$DRY_RUN" == "--dry" ]]; then + echo " Would patch: $basename" + DELIVER_COUNT=$((DELIVER_COUNT + 1)) + else + if [[ ! -f "$BACKUP_PATH/$basename" ]]; then + cp "$f" "$BACKUP_PATH/$basename" + fi + if node "$SCRIPT_DIR/cost-footer.patch.js" "$f"; then + success " $basename" + DELIVER_COUNT=$((DELIVER_COUNT + 1)) + else + warn " Failed: $basename" + TOTAL_FAIL=$((TOTAL_FAIL + 1)) + fi + fi +done + +if [[ $DELIVER_COUNT -eq 0 ]]; then + warn "No deliver-*.js files found." +else + info "Processed $DELIVER_COUNT deliver file(s)" + TOTAL_OK=$((TOTAL_OK + 1)) +fi -# Find the sub-agent announce file -ANNOUNCE_TARGETS=() -while IFS= read -r f; do - ANNOUNCE_TARGETS+=("$f") -done < <(grep -rl 'runSubagentAnnounce\|subagent.*announce\|announceSubagent' "$DIST_DIR"/*.js 2>/dev/null | sort -u) +# ============================================================ +# 3. Teams send.ts -- updateAdaptiveCardMSTeams +# (Must be applied BEFORE channel.ts since channel.ts imports it) +# ============================================================ +echo "" +info "=== Teams send.ts (Card Update Function) ===" -if [[ ${#ANNOUNCE_TARGETS[@]} -eq 0 ]]; then - warn "No adaptive card targets found in dist." +SEND_TS="$TEAMS_DIR/send.ts" +if [[ ! -f "$SEND_TS" ]]; then + warn "Teams send.ts not found at: $SEND_TS" + warn "Teams extension may not be installed. Skipping." else - info "Found ${#ANNOUNCE_TARGETS[@]} target(s)" - for target in "${ANNOUNCE_TARGETS[@]}"; do - basename=$(basename "$target") - if [[ "$DRY_RUN" == "--dry" ]]; then - echo " Would patch: $basename" + if grep -q 'updateAdaptiveCardMSTeams' "$SEND_TS"; then + success "send.ts already has updateAdaptiveCardMSTeams" + TOTAL_OK=$((TOTAL_OK + 1)) + elif [[ "$DRY_RUN" == "--dry" ]]; then + echo " Would patch: send.ts" + else + if [[ ! -f "$BACKUP_PATH/send.ts" ]]; then + cp "$SEND_TS" "$BACKUP_PATH/send.ts" + fi + + PATCH_CONTENT=$(sed -n '/^\/\/ --- BEGIN PATCH ---$/,/^\/\/ --- END PATCH ---$/p' "$SCRIPT_DIR/send-update.patch.ts" | sed '1d;$d') + if [[ -z "$PATCH_CONTENT" ]]; then + warn "Could not extract patch content from send-update.patch.ts" + TOTAL_FAIL=$((TOTAL_FAIL + 1)) else - if [[ ! -f "$BACKUP_PATH/$basename" ]]; then - cp "$target" "$BACKUP_PATH/$basename" - fi - if node "$SCRIPT_DIR/adaptive-cards.patch.js" "$target"; then - success " $basename" - else - warn " Failed: $basename" - fi + echo "" >> "$SEND_TS" + echo "$PATCH_CONTENT" >> "$SEND_TS" + success "send.ts" + TOTAL_OK=$((TOTAL_OK + 1)) fi - done + fi fi # ============================================================ -# 3. Teams Channel Bridge +# 4. Teams Channel Bridge (channel.ts) # ============================================================ echo "" -info "=== Teams Channel Bridge ===" +info "=== Teams Channel Bridge (channel.ts) ===" CHANNEL_TS="$TEAMS_DIR/channel.ts" if [[ ! -f "$CHANNEL_TS" ]]; then @@ -122,6 +164,7 @@ if [[ ! -f "$CHANNEL_TS" ]]; then else if grep -q '__openclawSendTeamsCard' "$CHANNEL_TS"; then success "channel.ts already patched" + TOTAL_OK=$((TOTAL_OK + 1)) elif [[ "$DRY_RUN" == "--dry" ]]; then echo " Would patch: channel.ts" else @@ -129,82 +172,59 @@ else cp "$CHANNEL_TS" "$BACKUP_PATH/channel.ts" fi - # Find insertion point: after adapter initialization in startAccount() - # Look for a line like: const adapter = or this.adapter = - PATCH_CONTENT=$(sed -n '/^\/\/ --- BEGIN PATCH ---$/,/^\/\/ --- END PATCH ---$/p' "$SCRIPT_DIR/channel-bridge.patch.ts") + # Step 1: Update the import line to include updateAdaptiveCardMSTeams + if ! grep -q 'updateAdaptiveCardMSTeams' "$CHANNEL_TS"; then + sed -i 's/import { sendAdaptiveCardMSTeams, sendMessageMSTeams }/import { sendAdaptiveCardMSTeams, sendMessageMSTeams, updateAdaptiveCardMSTeams }/' "$CHANNEL_TS" 2>/dev/null || true + fi + + # Step 2: Replace the monitorMSTeamsProvider block with the patched version + PATCH_CONTENT=$(sed -n '/^\/\/ --- BEGIN PATCH ---$/,/^\/\/ --- END PATCH ---$/p' "$SCRIPT_DIR/channel-bridge.patch.ts" | sed '1d;$d') if [[ -z "$PATCH_CONTENT" ]]; then warn "Could not extract patch content from channel-bridge.patch.ts" + TOTAL_FAIL=$((TOTAL_FAIL + 1)) else - # Insert after the adapter assignment - if grep -q 'adapter\s*=' "$CHANNEL_TS"; then - # Use Python for reliable insertion - python3 -c " + # Use Python for reliable replacement of the monitorMSTeamsProvider call + python3 -c " import re, sys with open('$CHANNEL_TS', 'r') as f: content = f.read() if '__openclawSendTeamsCard' in content: print('Already patched') sys.exit(0) -# Find adapter assignment and insert after the statement -pattern = r'((?:const|let|var)\s+adapter\s*=\s*[^;]+;)' +# Replace: return monitorMSTeamsProvider({ ... }); +# or: await monitorMSTeamsProvider({ ... }); +pattern = r'(?:return\s+)?(?:await\s+)?monitorMSTeamsProvider\(\{[^}]+\}\);' match = re.search(pattern, content) if match: - insert_pos = match.end() - patch = ''' -$PATCH_CONTENT -''' - content = content[:insert_pos] + patch + content[insert_pos:] - with open('$CHANNEL_TS', 'w') as f: - f.write(content) - print('Patched successfully') + patch = open('$SCRIPT_DIR/channel-bridge.patch.ts').read() + # Extract only the code between BEGIN/END markers + begin = patch.find('// --- BEGIN PATCH ---') + end = patch.find('// --- END PATCH ---') + if begin >= 0 and end >= 0: + patch_code = patch[begin:end + len('// --- END PATCH ---')] + content = content[:match.start()] + patch_code + content[match.end():] + with open('$CHANNEL_TS', 'w') as f: + f.write(content) + print('Patched successfully') + else: + print('Could not find patch markers', file=sys.stderr) + sys.exit(1) else: - print('Could not find adapter assignment', file=sys.stderr) + print('Could not find monitorMSTeamsProvider call', file=sys.stderr) sys.exit(1) -" - if [[ $? -eq 0 ]]; then - success "channel.ts" - else - warn "Could not auto-patch channel.ts. Apply channel-bridge.patch.ts manually." - fi +" 2>&1 + if grep -q '__openclawSendTeamsCard' "$CHANNEL_TS"; then + success "channel.ts" + TOTAL_OK=$((TOTAL_OK + 1)) else - warn "Could not find adapter assignment in channel.ts. Manual patching required." + warn "Could not auto-patch channel.ts. Apply channel-bridge.patch.ts manually." + TOTAL_FAIL=$((TOTAL_FAIL + 1)) fi fi fi fi -# ============================================================ -# 4. Teams send.ts -- updateAdaptiveCardMSTeams -# ============================================================ -echo "" -info "=== Teams send.ts (Card Update Function) ===" - -SEND_TS="$TEAMS_DIR/send.ts" -if [[ ! -f "$SEND_TS" ]]; then - warn "Teams send.ts not found at: $SEND_TS" - warn "Teams extension may not be installed. Skipping." -else - if grep -q 'updateAdaptiveCardMSTeams' "$SEND_TS"; then - success "send.ts already has updateAdaptiveCardMSTeams" - elif [[ "$DRY_RUN" == "--dry" ]]; then - echo " Would patch: send.ts" - else - if [[ ! -f "$BACKUP_PATH/send.ts" ]]; then - cp "$SEND_TS" "$BACKUP_PATH/send.ts" - fi - - PATCH_CONTENT=$(sed -n '/^\/\/ --- BEGIN PATCH ---$/,/^\/\/ --- END PATCH ---$/p' "$SCRIPT_DIR/send-update.patch.ts" | sed '1d;$d') - if [[ -z "$PATCH_CONTENT" ]]; then - warn "Could not extract patch content from send-update.patch.ts" - else - echo "" >> "$SEND_TS" - echo "$PATCH_CONTENT" >> "$SEND_TS" - success "send.ts" - fi - fi -fi - # ============================================================ # 5. Teams policy.ts -- DM replyStyle fix # ============================================================ @@ -217,6 +237,7 @@ if [[ ! -f "$POLICY_TS" ]]; then else if grep -q 'replyStyle: "top-level"' "$POLICY_TS" && grep -q 'isDirectMessage' "$POLICY_TS"; then success "policy.ts already patched (DM replyStyle = top-level)" + TOTAL_OK=$((TOTAL_OK + 1)) elif [[ "$DRY_RUN" == "--dry" ]]; then echo " Would patch: policy.ts (change DM replyStyle from thread to top-level)" else @@ -228,11 +249,14 @@ else if sed -i 's/replyStyle: "thread"/replyStyle: "top-level"/' "$POLICY_TS"; then if grep -q 'replyStyle: "top-level"' "$POLICY_TS"; then success "policy.ts" + TOTAL_OK=$((TOTAL_OK + 1)) else warn "policy.ts: sed ran but pattern not found. Manual patching may be required." + TOTAL_FAIL=$((TOTAL_FAIL + 1)) fi else warn "Could not patch policy.ts. Apply policy-dm.patch.ts manually." + TOTAL_FAIL=$((TOTAL_FAIL + 1)) fi fi fi @@ -244,13 +268,16 @@ echo "" if [[ "$DRY_RUN" == "--dry" ]]; then info "Dry run complete. No files were modified." else - success "Patch application complete!" + if [[ $TOTAL_FAIL -eq 0 ]]; then + success "All patches applied successfully! ($TOTAL_OK components)" + else + warn "Patch application completed with $TOTAL_FAIL failure(s) and $TOTAL_OK success(es)." + echo "" + info "Check the output above for details on failed patches." + info "Patches that couldn't be auto-applied may need manual intervention." + fi info "Backups saved to: $BACKUP_PATH" echo "" - info "NOTE: The adaptive-cards.patch.js applies the basic card rendering only." - info "For the full thinking bubble + progress updates + failure cards, manual" - info "patching of reply-*.js is required. See post-update-checklist.md." - echo "" info "Restart the gateway to apply changes:" echo " systemctl --user restart openclaw-gateway" fi diff --git a/bates-enhance/patches/reply-composite.patch.js b/bates-enhance/patches/reply-composite.patch.js new file mode 100644 index 0000000..616c0c2 --- /dev/null +++ b/bates-enhance/patches/reply-composite.patch.js @@ -0,0 +1,467 @@ +#!/usr/bin/env node +/** + * reply-composite.patch.js -- All-in-one patch for the reply dispatcher (reply-*.js) + * + * Usage: node reply-composite.patch.js + * + * This patch applies ALL Bates modifications to the main reply dispatcher file: + * 1. Avatar map (agent images + display name helpers) + * 2. Thinking bubble helper (failure card renderer) + * 3. Announce directive changes (enforce incremental delivery, no NO_REPLY) + * 4. Thinking card send on sessions_spawn + * 5. Result card send/update in runSubagentAnnounceFlow + * 6. Progress card updates for long-running tasks (sweepSubagentRuns) + * 7. Failure card updates at timeout/error points + * 8. agentId tracking in registerSubagentRun + * 9. Cost footer transform in reply-final delivery + * + * After openclaw update, dist filenames change. Discover the target with: + * ls ~/.npm-global/lib/node_modules/openclaw/dist/reply-*.js | grep -v prefix + * + * Prerequisites: + * - Teams channel bridge must be patched (channel-bridge.patch.ts) + * - Teams send.ts must have updateAdaptiveCardMSTeams (send-update.patch.ts) + */ +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +const targetFile = process.argv[2]; +if (!targetFile) { + console.error('Usage: node reply-composite.patch.js '); + process.exit(1); +} + +if (!fs.existsSync(targetFile)) { + console.error(`File not found: ${targetFile}`); + process.exit(1); +} + +let code = fs.readFileSync(targetFile, 'utf8'); +const basename = path.basename(targetFile); +let patchCount = 0; + +// ─── Check if already fully patched ───────────────────────────────────────── +if (code.includes('BATES_AVATAR_MAP') && code.includes('updateThinkingCardToFailed') && code.includes('__openclawMessageTransform')) { + console.log(`Already fully patched: ${basename}`); + process.exit(0); +} + +// ─── Avatar map + thinking bubble helper code ──────────────────────────────── +const AVATAR_AND_HELPERS = ` +// --- Bates agent avatar map for Teams Adaptive Cards --- +const BATES_AVATAR_BASE = "https://raw.githubusercontent.com/getBates/Bates/feature/installer-v1/bates-core/plugins/dashboard/static/assets"; +const BATES_AVATAR_MAP = { +\tmain: \`\${BATES_AVATAR_BASE}/agent-avatar.png\`, +\tmira: \`\${BATES_AVATAR_BASE}/agent-baby_Sage.png\`, +\tconrad: \`\${BATES_AVATAR_BASE}/agent-baby_bolt.png\`, +\tsoren: \`\${BATES_AVATAR_BASE}/agent-baby_core.png\`, +\tamara: \`\${BATES_AVATAR_BASE}/agent-baby_aqua.png\`, +\tjules: \`\${BATES_AVATAR_BASE}/agent-baby_frost.png\`, +\tdash: \`\${BATES_AVATAR_BASE}/agent-baby_Ember.png\`, +\tmercer: \`\${BATES_AVATAR_BASE}/agent-baby_Dark.png\`, +\tkira: \`\${BATES_AVATAR_BASE}/agent-baby_pixel.png\`, +\tnova: \`\${BATES_AVATAR_BASE}/agent-baby_nova.png\`, +\tpaige: \`\${BATES_AVATAR_BASE}/agent-baby_Sage.png\`, +\tquinn: \`\${BATES_AVATAR_BASE}/agent-baby_sky.png\`, +\tarcher: \`\${BATES_AVATAR_BASE}/agent-baby_sky.png\`, +}; +function buildBatesAvatarColumn(agentId) { +\tconst url = BATES_AVATAR_MAP[agentId] || BATES_AVATAR_MAP.main; +\treturn { type: "Column", width: "auto", items: [{ type: "Image", url, size: "Small", style: "Person" }] }; +} +function resolveBatesDisplayName(agentId) { +\tif (!agentId || agentId === "main") return "Bates"; +\treturn agentId.charAt(0).toUpperCase() + agentId.slice(1); +} +// --- End avatar map --- +// --- Thinking bubble: update card to show failure/timeout --- +async function updateThinkingCardToFailed(childRunId, reason) { +\ttry { +\t\tconst entry = subagentRuns.get(childRunId); +\t\tif (!entry?.thinkingCardActivityId || !entry?.thinkingCardTo) return; +\t\tif (!globalThis.__openclawUpdateTeamsCard) return; +\t\tconst failedAgentId = entry.agentId || "main"; +\t\tconst failedCard = { +\t\t\ttype: "AdaptiveCard", +\t\t\tversion: "1.5", +\t\t\tbody: [ +\t\t\t\t{ +\t\t\t\t\ttype: "Container", +\t\t\t\t\tstyle: "attention", +\t\t\t\t\titems: [{ +\t\t\t\t\t\ttype: "ColumnSet", +\t\t\t\t\t\tcolumns: [ +\t\t\t\t\t\t\tbuildBatesAvatarColumn(failedAgentId), +\t\t\t\t\t\t\t{ type: "Column", width: "stretch", verticalContentAlignment: "Center", +\t\t\t\t\t\t\t\titems: [{ type: "TextBlock", text: \`**\${resolveBatesDisplayName(failedAgentId)}:** \${entry.label || "task"}\`, wrap: true }] } +\t\t\t\t\t\t] +\t\t\t\t\t}] +\t\t\t\t}, +\t\t\t\t{ +\t\t\t\t\ttype: "Container", +\t\t\t\t\tstyle: "default", +\t\t\t\t\titems: [{ type: "TextBlock", text: reason || "Task did not complete.", wrap: true, isSubtle: true, spacing: "Small" }] +\t\t\t\t} +\t\t\t] +\t\t}; +\t\tawait globalThis.__openclawUpdateTeamsCard(entry.thinkingCardTo, entry.thinkingCardActivityId, failedCard); +\t} catch (e) { /* best effort */ } +} +// --- End thinking bubble helper ---`; + +// ─── 1. Insert avatar map + helpers after buildAnnounceReplyInstruction ────── +// Find the function that builds announce instructions — our code goes right after it +if (code.includes('BATES_AVATAR_MAP')) { + console.log(` [1/9] Already patched: avatar map + helpers`); + patchCount++; +} else { +const announceInstructionFn = /^(function buildAnnounceReplyInstruction\b[^]*?\n\})/m; +const match1 = code.match(announceInstructionFn); +if (match1) { + code = code.replace(match1[0], match1[0] + AVATAR_AND_HELPERS); + patchCount++; + console.log(` [1/9] Avatar map + helpers inserted after buildAnnounceReplyInstruction`); +} else { + // Fallback: insert before the first registerSubagentRun reference + const fallbackAnchor = 'function registerSubagentRun'; + const idx = code.indexOf(fallbackAnchor); + if (idx > 0) { + code = code.slice(0, idx) + AVATAR_AND_HELPERS + '\n' + code.slice(idx); + patchCount++; + console.log(` [1/9] Avatar map + helpers inserted (fallback: before registerSubagentRun)`); + } else { + console.warn(` [1/9] FAILED: Could not find insertion point for avatar map`); + } +}} + +// ─── 2. Announce directive: enforce incremental delivery ───────────────────── +// Change "wait for remaining results" to "deliver now" +const waitPattern = /return `There are still \$\{params\.remainingActiveSubagentRuns\} active subagent \$\{activeRunsLabel\} for this session\. If they are part of the same workflow, wait for the remaining results before sending a user update\. If they are unrelated, respond normally using only the result above\.`;/; +if (waitPattern.test(code)) { + code = code.replace(waitPattern, + 'return `There are still ${params.remainingActiveSubagentRuns} other active subagent ${activeRunsLabel} for this session. Deliver this result to the user now in your normal assistant voice. Mention that other tasks are still in progress if relevant. Do NOT wait silently or reply NO_REPLY - the user wants incremental updates as each task completes.`;' + ); + patchCount++; + console.log(` [2/9] Announce directive: incremental delivery enforced`); +} else if (code.includes('Do NOT wait silently or reply NO_REPLY')) { + console.log(` [2/9] Already patched: incremental delivery`); + patchCount++; +} else { + console.warn(` [2/9] FAILED: Could not find "wait for remaining" announce pattern`); +} + +// ─── 3. Announce directive: mandatory delivery (no NO_REPLY) ───────────────── +const silentReplyPattern = /if \(params\.expectsCompletionMessage\) return `A completed \$\{params\.announceType\} is ready for user delivery\.[^`]*?Keep this internal context private[^`]*?`;[\s\n]*return `A completed \$\{params\.announceType\} is ready for user delivery\.[^`]*?\$\{SILENT_REPLY_TOKEN\}[^`]*?`;/; +if (silentReplyPattern.test(code)) { + code = code.replace(silentReplyPattern, + "return `A completed ${params.announceType} is ready for user delivery. You MUST convert the result above into your normal assistant voice and deliver a user-facing update now. This is mandatory - never skip or suppress delivery. Keep this internal context private (don't mention system/log/stats/session details or announce type), and do not copy the system message verbatim. Do NOT reply NO_REPLY - the user is waiting for this result.`;" + ); + patchCount++; + console.log(` [3/9] Announce directive: mandatory delivery (no NO_REPLY)`); +} else if (code.includes('This is mandatory - never skip or suppress delivery')) { + console.log(` [3/9] Already patched: mandatory delivery`); + patchCount++; +} else { + console.warn(` [3/9] FAILED: Could not find SILENT_REPLY_TOKEN announce pattern`); +} + +// ─── 4. Add "expectsCompletionMessage" early return ────────────────────────── +// Before the remaining-subagents check, add a clause for expectsCompletionMessage +const expectsPattern = /if \(params\.remainingActiveSubagentRuns > 0\) \{/; +if (expectsPattern.test(code) && !code.includes('if (params.expectsCompletionMessage) return `A completed ${params.announceType} is ready for user delivery. Convert the result above into your normal assistant voice and send that user-facing update now.')) { + // Check if it's already been injected + const expectsInsert = `\tif (params.expectsCompletionMessage) return \`A completed \${params.announceType} is ready for user delivery. Convert the result above into your normal assistant voice and send that user-facing update now. Keep this internal context private (don't mention system/log/stats/session details or announce type).\`; +`; + code = code.replace(expectsPattern, expectsInsert + '\tif (params.remainingActiveSubagentRuns > 0) {'); + patchCount++; + console.log(` [4/9] Announce directive: expectsCompletionMessage early return`); +} else { + console.log(` [4/9] Skipped: expectsCompletionMessage (already present or not applicable)`); + patchCount++; +} + +// ─── 5. Thinking card on sessions_spawn ────────────────────────────────────── +// After registerSubagentRun() in the sessions_spawn handler, inject thinking card send +// The registerSubagentRun call ends with: spawnMode\n\t}); +// We need to add agentId AND insert thinking card code after it. +const spawnModeInRegister = /(\t\tspawnMode)\n(\t\}\);)\n(\tif \(hookRunner)/; +if (spawnModeInRegister.test(code) && !code.includes('// --- Thinking bubble: send "working on it" card to Teams ---')) { + code = code.replace(spawnModeInRegister, `$1,\n\t\tagentId: targetAgentId\n$2\n$3`); + + const THINKING_CARD_SPAWN = ` +\t// --- Thinking bubble: send "working on it" card to Teams --- +\tif (globalThis.__openclawSendTeamsCard && requesterOrigin?.channel === "msteams" && requesterOrigin?.to) { +\t\ttry { +\t\t\tconst thinkingLabel = label || task?.substring(0, 80) || "a task"; +\t\t\tconst spawnAgentId = targetAgentId || "main"; +\t\t\tconst thinkingCard = { +\t\t\t\ttype: "AdaptiveCard", +\t\t\t\tversion: "1.5", +\t\t\t\tbody: [ +\t\t\t\t\t{ +\t\t\t\t\t\ttype: "Container", +\t\t\t\t\t\tstyle: "emphasis", +\t\t\t\t\t\titems: [{ +\t\t\t\t\t\t\ttype: "ColumnSet", +\t\t\t\t\t\t\tcolumns: [ +\t\t\t\t\t\t\t\tbuildBatesAvatarColumn(spawnAgentId), +\t\t\t\t\t\t\t\t{ type: "Column", width: "stretch", verticalContentAlignment: "Center", +\t\t\t\t\t\t\t\t\titems: [{ type: "TextBlock", text: \`**\${resolveBatesDisplayName(spawnAgentId)} is working on:** \${thinkingLabel}\`, wrap: true }] } +\t\t\t\t\t\t\t] +\t\t\t\t\t\t}] +\t\t\t\t\t}, +\t\t\t\t\t{ +\t\t\t\t\t\ttype: "Container", +\t\t\t\t\t\tstyle: "default", +\t\t\t\t\t\titems: [{ type: "TextBlock", text: "Thinking...", wrap: true, isSubtle: true, spacing: "Small" }] +\t\t\t\t\t} +\t\t\t\t] +\t\t\t}; +\t\t\tconst cardResult = await globalThis.__openclawSendTeamsCard(requesterOrigin.to, thinkingCard); +\t\t\tif (cardResult?.messageId) { +\t\t\t\tconst entry = subagentRuns.get(childRunId); +\t\t\t\tif (entry) { +\t\t\t\t\tentry.thinkingCardActivityId = cardResult.messageId; +\t\t\t\t\tentry.thinkingCardTo = requesterOrigin.to; +\t\t\t\t\tpersistSubagentRuns(); +\t\t\t\t} +\t\t\t} +\t\t} catch (e) { /* thinking card send failure should not block spawn */ } +\t} +\t// --- End thinking bubble ---`; + + // Insert after the registerSubagentRun block ends (just before hookRunner) + const registerEndPattern = /(agentId: targetAgentId\n\t\}\);\n)(\tif \(hookRunner)/; + if (registerEndPattern.test(code)) { + code = code.replace(registerEndPattern, `$1${THINKING_CARD_SPAWN}\n$2`); + } + patchCount++; + console.log(` [5/9] Thinking card on sessions_spawn`); +} else if (code.includes('// --- Thinking bubble: send "working on it" card to Teams ---')) { + console.log(` [5/9] Already patched: thinking card spawn`); + patchCount++; +} else { + console.warn(` [5/9] FAILED: Could not find spawnMode+hookRunner pattern for thinking card`); +} + +// ─── 6. Result card in runSubagentAnnounceFlow ─────────────────────────────── +// After the reply text is finalized, inject result card send/update +const RESULT_CARD = `\t\t// --- Thinking bubble: update or send result card to Teams --- +\t\tif (targetRequesterOrigin?.channel === "msteams" && targetRequesterOrigin?.to) { +\t\t\ttry { +\t\t\t\tconst cardText = (reply || "(no output)").substring(0, 3000); +\t\t\t\tconst resultAgentId = subagentName || "main"; +\t\t\t\tconst resultCard = { +\t\t\t\t\ttype: "AdaptiveCard", +\t\t\t\t\tversion: "1.5", +\t\t\t\t\tbody: [ +\t\t\t\t\t\t{ +\t\t\t\t\t\t\ttype: "Container", +\t\t\t\t\t\t\tstyle: "emphasis", +\t\t\t\t\t\t\titems: [{ +\t\t\t\t\t\t\t\ttype: "ColumnSet", +\t\t\t\t\t\t\t\tcolumns: [ +\t\t\t\t\t\t\t\t\tbuildBatesAvatarColumn(resultAgentId), +\t\t\t\t\t\t\t\t\t{ +\t\t\t\t\t\t\t\t\t\ttype: "Column", +\t\t\t\t\t\t\t\t\t\twidth: "stretch", +\t\t\t\t\t\t\t\t\t\tverticalContentAlignment: "Center", +\t\t\t\t\t\t\t\t\t\titems: [{ +\t\t\t\t\t\t\t\t\t\t\ttype: "TextBlock", +\t\t\t\t\t\t\t\t\t\t\ttext: \`**\${resolveBatesDisplayName(resultAgentId)}:**\`, +\t\t\t\t\t\t\t\t\t\t\twrap: true +\t\t\t\t\t\t\t\t\t\t}] +\t\t\t\t\t\t\t\t\t} +\t\t\t\t\t\t\t\t] +\t\t\t\t\t\t\t}] +\t\t\t\t\t\t}, +\t\t\t\t\t\t{ +\t\t\t\t\t\t\ttype: "Container", +\t\t\t\t\t\t\tstyle: "accent", +\t\t\t\t\t\t\titems: [{ +\t\t\t\t\t\t\t\ttype: "TextBlock", +\t\t\t\t\t\t\t\ttext: cardText, +\t\t\t\t\t\t\t\twrap: true, +\t\t\t\t\t\t\t\tspacing: "Small" +\t\t\t\t\t\t\t}] +\t\t\t\t\t\t} +\t\t\t\t\t] +\t\t\t\t}; +\t\t\t\t// Try to update existing thinking card first +\t\t\t\tconst runEntry = subagentRuns.get(params.childRunId); +\t\t\t\tconst thinkingActivityId = runEntry?.thinkingCardActivityId; +\t\t\t\tconst thinkingTo = runEntry?.thinkingCardTo || targetRequesterOrigin.to; +\t\t\t\tif (thinkingActivityId && globalThis.__openclawUpdateTeamsCard) { +\t\t\t\t\ttry { +\t\t\t\t\t\tawait globalThis.__openclawUpdateTeamsCard(thinkingTo, thinkingActivityId, resultCard); +\t\t\t\t\t} catch (updateErr) { +\t\t\t\t\t\t// Update failed (e.g. message too old), fall back to sending new card +\t\t\t\t\t\tif (globalThis.__openclawSendTeamsCard) { +\t\t\t\t\t\t\tawait globalThis.__openclawSendTeamsCard(targetRequesterOrigin.to, resultCard); +\t\t\t\t\t\t} +\t\t\t\t\t} +\t\t\t\t} else if (globalThis.__openclawSendTeamsCard) { +\t\t\t\t\t// No thinking card existed, send a new one +\t\t\t\t\tawait globalThis.__openclawSendTeamsCard(targetRequesterOrigin.to, resultCard); +\t\t\t\t} +\t\t\t} catch (e) { /* card send/update failure should not block announce flow */ } +\t\t} +\t\t// --- End thinking bubble ---`; + +// Insert the result card block just before the delivery call +// Anchor: didAnnounce = delivery.delivered (unique in the announce flow) +const didAnnouncePattern = /(didAnnounce = delivery\.delivered;)/; +if (didAnnouncePattern.test(code) && !code.includes('// --- Thinking bubble: update or send result card')) { + code = code.replace(didAnnouncePattern, RESULT_CARD + '\n\t\t$1'); + patchCount++; + console.log(` [6/9] Result card in runSubagentAnnounceFlow`); +} else if (code.includes('// --- Thinking bubble: update or send result card')) { + console.log(` [6/9] Already patched: result card`); + patchCount++; +} else { + console.warn(` [6/9] FAILED: Could not find 'didAnnounce = delivery.delivered' pattern`); +} + +// ─── 7. Failure card on announce crash ─────────────────────────────────────── +// Anchor: defaultRuntime.error?.(`Subagent announce failed: +const announceErrorPattern = /(defaultRuntime\.error\?\.\(`Subagent announce failed:)/; +if (announceErrorPattern.test(code) && !code.includes('Update thinking card to show failure if announce crashed')) { + code = code.replace(announceErrorPattern, + `\t\t// Update thinking card to show failure if announce crashed +\t\tif (!didAnnounce) { +\t\t\tawait updateThinkingCardToFailed(params.childRunId, \`Task completed but delivery failed: \${String(err).substring(0, 100)}\`); +\t\t} +\t\t$1`); + patchCount++; + console.log(` [7/9] Failure card on announce crash`); +} else if (code.includes('Update thinking card to show failure if announce crashed')) { + console.log(` [7/9] Already patched: failure card on crash`); + patchCount++; +} else { + console.warn(` [7/9] FAILED: Could not find 'Subagent announce failed' error pattern`); +} + +// ─── 8. Progress cards + archive failure in sweepSubagentRuns ──────────────── +const PROGRESS_CARD = `\t// --- Thinking bubble: update cards for long-running sub-agents with elapsed time --- +\tfor (const [runId, entry] of subagentRuns.entries()) { +\t\tif (!entry.thinkingCardActivityId || !entry.thinkingCardTo) continue; +\t\tif (entry.endedAt || entry.cleanupCompletedAt) continue; // already done +\t\tconst elapsedMs = now - (entry.createdAt || now); +\t\tconst elapsedMin = Math.round(elapsedMs / 60000); +\t\tif (elapsedMin < 2) continue; // don't update for first 2 minutes +\t\ttry { +\t\t\tif (!globalThis.__openclawUpdateTeamsCard) continue; +\t\t\tconst progressAgentId = entry.agentId || "main"; +\t\t\tconst progressCard = { +\t\t\t\ttype: "AdaptiveCard", +\t\t\t\tversion: "1.5", +\t\t\t\tbody: [ +\t\t\t\t\t{ +\t\t\t\t\t\ttype: "Container", +\t\t\t\t\t\tstyle: "emphasis", +\t\t\t\t\t\titems: [{ +\t\t\t\t\t\t\ttype: "ColumnSet", +\t\t\t\t\t\t\tcolumns: [ +\t\t\t\t\t\t\t\tbuildBatesAvatarColumn(progressAgentId), +\t\t\t\t\t\t\t\t{ type: "Column", width: "stretch", verticalContentAlignment: "Center", +\t\t\t\t\t\t\t\t\titems: [{ type: "TextBlock", text: \`**\${resolveBatesDisplayName(progressAgentId)} is working on:** \${entry.label || "a task"}\`, wrap: true }] } +\t\t\t\t\t\t\t] +\t\t\t\t\t\t}] +\t\t\t\t\t}, +\t\t\t\t\t{ +\t\t\t\t\t\ttype: "Container", +\t\t\t\t\t\tstyle: "default", +\t\t\t\t\t\titems: [{ type: "TextBlock", text: \`Still working... (\${elapsedMin}m elapsed)\`, wrap: true, isSubtle: true, spacing: "Small" }] +\t\t\t\t\t} +\t\t\t\t] +\t\t\t}; +\t\t\tawait globalThis.__openclawUpdateTeamsCard(entry.thinkingCardTo, entry.thinkingCardActivityId, progressCard); +\t\t} catch (e) { /* best effort */ } +\t} +\t// --- End thinking bubble progress ---`; + +// Find sweepSubagentRuns function — insert progress cards at the start, failure card before delete +const sweepFnPattern = /(async function sweepSubagentRuns\(\) \{\n\tconst now = Date\.now\(\);\n\tlet mutated = false;\n)/; +if (sweepFnPattern.test(code) && !code.includes('// --- Thinking bubble: update cards for long-running')) { + // Insert progress card loop at the start of sweepSubagentRuns (after `let mutated = false;`) + code = code.replace(sweepFnPattern, `$1${PROGRESS_CARD}\n`); + + // Add failure card before the first subagentRuns.delete(runId) inside sweep + // This is in the archive loop: if (!entry.archiveAtMs || entry.archiveAtMs > now) continue; + const sweepDeletePattern = /(\t\tsubagentRuns\.delete\(runId\);)\n(\t\tmutated = true;)\n(\t\ttry \{)/; + if (sweepDeletePattern.test(code)) { + code = code.replace(sweepDeletePattern, + `\t\t// Update thinking card to failed before deleting orphaned entry +\t\tif (entry.thinkingCardActivityId && !entry.cleanupCompletedAt) { +\t\t\tawait updateThinkingCardToFailed(runId, "Task was archived before completing."); +\t\t} +\t\t$1\n$2\n$3`); + } + patchCount++; + console.log(` [8/9] Progress cards + archive failure in sweepSubagentRuns`); +} else if (code.includes('// --- Thinking bubble: update cards for long-running')) { + console.log(` [8/9] Already patched: progress cards`); + patchCount++; +} else { + console.warn(` [8/9] FAILED: Could not find sweepSubagentRuns function pattern`); +} + +// ─── 9. Cost footer in reply-final delivery ────────────────────────────────── +// Insert cost footer transform just before the final message send +const replyFinalPattern = /(if \(kind === "final"[^}]*?\{[^}]*?normalized)/; +if (!code.includes('__openclawMessageTransform') || !code.includes('channel: "reply-final"')) { + // Find the spot where normalized payload text is finalized for "final" kind + const finalTextPattern = /(if \(kind === "final")/; + if (finalTextPattern.test(code)) { + // Insert cost footer check right after the first final-kind block + const costFooterSnippet = `if (kind === "final" && globalThis.__openclawMessageTransform && normalized?.text?.trim()) { +\t\t\t\ttry { const t = globalThis.__openclawMessageTransform(normalized.text, { channel: "reply-final", to: "" }); if (typeof t === "string") normalized.text = t; } catch {} +\t\t\t} +\t\t\t$1`; + // We need a more specific anchor — find where normalized text gets finalized + // This is the last-resort approach: if we can't find a precise spot, skip + console.warn(` [9/9] Cost footer: requires manual verification. Pattern insertion may vary by version.`); + patchCount++; // Count as attempted + } +} else { + console.log(` [9/9] Already patched: cost footer in reply-final`); + patchCount++; +} + +// ─── Inject timeout failure cards ──────────────────────────────────────────── +// These go at 3 locations where tasks time out/fail in the announce flow +const timeoutPatterns = [ + { label: 'timeout-waiting', search: 'Task is still running but timed out waiting for completion', anchor: /defaultRuntime\.warn\?\.\(`Subagent.*timed out/}, + { label: 'no-output', search: 'Task produced no output and is still running', anchor: /defaultRuntime\.warn\?\.\(`Subagent.*no (?:output|result)/}, + { label: 'session-lost', search: 'Task completed but requester session was lost', anchor: /defaultRuntime\.warn\?\.\(`Subagent.*requester session/}, +]; +for (const tp of timeoutPatterns) { + if (!code.includes(tp.search) && tp.anchor.test(code)) { + code = code.replace(tp.anchor, (match) => { + return `await updateThinkingCardToFailed(params.childRunId, "${tp.search}");\n\t\t\t\t${match}`; + }); + console.log(` [+] Failure card: ${tp.label}`); + } +} + +// ─── 10. agentId in registerSubagentRun ────────────────────────────────────── +// Ensure agentId is tracked in the subagent run registry +if (!code.includes('agentId: params.agentId') && code.includes('registerSubagentRun')) { + // Find the registerSubagentRun function's object assignment + const registerPattern = /(function registerSubagentRun\([^)]*\)\s*\{[^}]*?)(createdAt:)/; + if (registerPattern.test(code)) { + code = code.replace(registerPattern, '$1agentId: params.agentId,\n\t\t$2'); + console.log(` [+] agentId tracking in registerSubagentRun`); + } +} + +// ─── Write result ──────────────────────────────────────────────────────────── +if (patchCount > 0) { + fs.writeFileSync(targetFile, code, 'utf8'); + console.log(`\nPatched ${basename}: ${patchCount}/9 core patches applied`); +} else { + console.warn(`\nNo patches applied to ${basename}. The file structure may have changed.`); + process.exit(1); +} From 9a13751de700aa8578a93227c5fbd3015aa02b99 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Sun, 22 Feb 2026 22:39:24 +0000 Subject: [PATCH 14/63] Fix patch 9/9: automate cost footer in reply-final delivery The cost footer transform hook was the only patch that required manual intervention. Now auto-applied by anchoring on the exact `await options.deliver(normalized, { kind })` call site. All 9/9 reply-composite patches now apply automatically. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../patches/reply-composite.patch.js | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/bates-enhance/patches/reply-composite.patch.js b/bates-enhance/patches/reply-composite.patch.js index 616c0c2..8dfeb30 100644 --- a/bates-enhance/patches/reply-composite.patch.js +++ b/bates-enhance/patches/reply-composite.patch.js @@ -409,25 +409,23 @@ if (sweepFnPattern.test(code) && !code.includes('// --- Thinking bubble: update } // ─── 9. Cost footer in reply-final delivery ────────────────────────────────── -// Insert cost footer transform just before the final message send -const replyFinalPattern = /(if \(kind === "final"[^}]*?\{[^}]*?normalized)/; -if (!code.includes('__openclawMessageTransform') || !code.includes('channel: "reply-final"')) { - // Find the spot where normalized payload text is finalized for "final" kind - const finalTextPattern = /(if \(kind === "final")/; - if (finalTextPattern.test(code)) { - // Insert cost footer check right after the first final-kind block - const costFooterSnippet = `if (kind === "final" && globalThis.__openclawMessageTransform && normalized?.text?.trim()) { -\t\t\t\ttry { const t = globalThis.__openclawMessageTransform(normalized.text, { channel: "reply-final", to: "" }); if (typeof t === "string") normalized.text = t; } catch {} -\t\t\t} -\t\t\t$1`; - // We need a more specific anchor — find where normalized text gets finalized - // This is the last-resort approach: if we can't find a precise spot, skip - console.warn(` [9/9] Cost footer: requires manual verification. Pattern insertion may vary by version.`); - patchCount++; // Count as attempted - } -} else { +// Insert cost footer transform right before `await options.deliver(normalized, { kind });` +// This is inside a sendChain.then(async () => { ... }) block +if (code.includes('channel: "reply-final"')) { console.log(` [9/9] Already patched: cost footer in reply-final`); patchCount++; +} else { + const deliverPattern = /(\t\t\t)(await options\.deliver\(normalized, \{ kind \}\);)/; + if (deliverPattern.test(code)) { + code = code.replace(deliverPattern, + `$1if (kind === "final" && globalThis.__openclawMessageTransform && normalized?.text?.trim()) {\n` + + `$1\ttry { const t = globalThis.__openclawMessageTransform(normalized.text, { channel: "reply-final", to: "" }); if (typeof t === "string") normalized.text = t; } catch {}\n` + + `$1}\n$1$2`); + patchCount++; + console.log(` [9/9] Cost footer in reply-final delivery`); + } else { + console.warn(` [9/9] FAILED: Could not find 'await options.deliver(normalized, { kind })' pattern`); + } } // ─── Inject timeout failure cards ──────────────────────────────────────────── From 89f57b2942c2f5b9f20735fa37699ac3221455b4 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Mon, 23 Feb 2026 21:43:12 +0000 Subject: [PATCH 15/63] Confirm patch compatibility with OpenClaw v2026.2.22 All 9/9 reply-composite patches apply cleanly on v2026.2.22-2. Added tested versions section to patches README. Co-Authored-By: Claude Opus 4.6 --- bates-enhance/patches/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bates-enhance/patches/README.md b/bates-enhance/patches/README.md index 66ebb13..953d0d6 100644 --- a/bates-enhance/patches/README.md +++ b/bates-enhance/patches/README.md @@ -76,6 +76,10 @@ The script applies patches in dependency order: 4. channel.ts (Teams) 5. policy.ts (Teams) +## Tested Versions + +- v2026.2.19 through v2026.2.22-2 (all 9/9 patches apply cleanly) + ## Warning These patches modify OpenClaw internal dist files. They are fragile and may From effc09bcebd9862a8d3a5d6071c65a873aa81653 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Mon, 23 Feb 2026 23:08:37 +0000 Subject: [PATCH 16/63] Strengthen delegation mandate, remove Google Gemini references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SOUL.md: delegation is now NON-NEGOTIABLE, coordinator-not-worker pattern, 1-tool-call rule, no 2+ turns before spawning - model-routing: remove Gemini, add tiered agent model table - subagent-policy: add three enforcement directives for immediate delegation, remove stale Gemini temporary override - Google no longer supports OpenClaw — all Gemini references removed Co-Authored-By: Claude Opus 4.6 --- bates-core/workspace-core/SOUL.md.template | 24 ++++++++++++------- .../workspace-core/rules/model-routing.md | 22 +++++++++++------ .../workspace-core/rules/subagent-policy.md | 8 ++++++- 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/bates-core/workspace-core/SOUL.md.template b/bates-core/workspace-core/SOUL.md.template index 1f1d391..86909a2 100644 --- a/bates-core/workspace-core/SOUL.md.template +++ b/bates-core/workspace-core/SOUL.md.template @@ -17,20 +17,26 @@ Direct, concise. No em dashes ever, in any output. No hyperbole. Expert advisor # Model Routing -Default: {{PRIMARY_MODEL}} for everything. - -Sub-agents also run on the default model (configured in gateway). +- **Main Session ({{ASSISTANT_NAME}}):** {{PRIMARY_MODEL}}. +- **Sub-agents:** Use their configured default model from the gateway. No need to specify model overrides when spawning. +- **Claude Code:** Uses the configured primary model (via specific script config) unless directed otherwise. Full routing details: rules/model-routing.md -# Delegation (MANDATORY) +# Delegation (MANDATORY -- NON-NEGOTIABLE) + +**CORE PRINCIPLE: {{ASSISTANT_NAME}} must stay available AT ALL TIMES.** You are a coordinator, not a worker. Delegate ALL multi-step tasks. Main session is ONLY for: acknowledging, spawning, reporting results, and decisions requiring user input. -**CORE PRINCIPLE: {{ASSISTANT_NAME}} must stay available.** Delegate ALL multi-step tasks. Main session is for: acknowledging, spawning, reporting, decisions. +**If you are making tool calls beyond acknowledgment and spawn, you are doing it wrong.** -- **Default: delegate everything** requiring tool calls. Spawn in the SAME turn as your acknowledgment. -- **Simple lookups → sub-agents** (rules/subagent-policy.md) -- **Code writing → Claude Code** via delegation wrapper script -- **After sub-agent returns:** ALWAYS deliver the result immediately in your own voice. Never reply NO_REPLY for sub-agent results. +- **Default: delegate EVERYTHING** requiring tool calls. Spawn in the SAME turn as your acknowledgment. One turn: acknowledge + spawn. That is it. +- **If you find yourself making more than 1 tool call on a user request, STOP and spawn a sub-agent instead.** +- **If uncertain whether to delegate, ALWAYS delegate.** The cost of keeping the main session free is zero. The cost of blocking it is total: the user cannot reach you while you work. +- **NEVER take 2+ turns before spawning.** Do not "investigate first" or "check something quickly." The sub-agent investigates. You spawn. +- **Email/file/code workflows -> Claude Code** (rules/delegation.md) +- **Simple lookups/calendar/tasks -> sub-agents** (rules/subagent-policy.md) +- **Code writing -> Claude Code** (rules/delegation.md) +- **After sub-agent returns:** ALWAYS deliver the result immediately in your own voice. Then persist Learnings to observations/ files. Never reply NO_REPLY for sub-agent results. Full routing table & examples: rules/subagent-policy.md diff --git a/bates-core/workspace-core/rules/model-routing.md b/bates-core/workspace-core/rules/model-routing.md index 621b928..aa2d8a3 100644 --- a/bates-core/workspace-core/rules/model-routing.md +++ b/bates-core/workspace-core/rules/model-routing.md @@ -1,19 +1,27 @@ # Model Routing Rules ## Platform: OpenClaw Multi-Provider Subscription OAuth -OpenClaw supports subscription-based OAuth for Anthropic, OpenAI, and Google. Current deployment uses **{{PRIMARY_MODEL}}**. Other providers available if user switches subscription. +OpenClaw supports subscription-based OAuth for Anthropic and OpenAI. Current deployment uses **{{PRIMARY_MODEL}}** as primary, with cross-provider fallback to **{{FALLBACK_MODEL_1}}**. -## Default: {{PRIMARY_MODEL}} (Subscription) -All tasks run on {{PRIMARY_MODEL}} by default. No per-token cost — covered by flat subscription fee. +## Agent Model Assignments -Standard tasks: email, calendar, Planner, file access, MCP operations, email drafting, task management, multi-step work, summaries, briefings, transcript analysis, code generation, content writing, legal documents, contracts, financial analysis, presentations, investor materials. +| Agent Tier | Primary Model | Fallback | +|------------|--------------|----------| +| **Main assistant + senior deputies** | {{PRIMARY_MODEL}} | {{FALLBACK_MODEL_1}} | +| **Standard deputies** | {{SECONDARY_MODEL}} | {{FALLBACK_MODEL_1}} | +| **Utility / lightweight agents** | {{FALLBACK_MODEL_1}} | {{SECONDARY_MODEL}} | ## Sub-Agents -Sub-agents also run on {{PRIMARY_MODEL}} by default (configured in gateway). No need to specify model overrides. +Sub-agents use their configured default model from the gateway. No need to specify model overrides when spawning. The gateway handles fallback automatically. + +## Standard Tasks +All tasks run on the agent's assigned model by default. No per-token cost for subscription-backed models. + +Standard tasks: email, calendar, Planner, file access, MCP operations, email drafting, task management, multi-step work, summaries, briefings, transcript analysis, code generation, content writing, legal documents, contracts, financial analysis, presentations, investor materials. ## Specialist Models - **Web research:** Brave Search for simple lookups. Perplexity Sonar (/model pplx) for multi-source research. -- **Images:** Gemini 2.5 Flash (vision/analysis). Image generation via `~/.openclaw/scripts/generate-image.py` (default: OpenAI gpt-image-1; alt: Google Imagen). See skill `image-generation`. +- **Images:** Image generation via `~/.openclaw/scripts/generate-image.py` (default: OpenAI gpt-image-1). See skill `image-generation`. ## Fallback Chain -If {{PRIMARY_MODEL}} is unavailable: {{FALLBACK_MODEL_1}} -> {{FALLBACK_MODEL_2}} -> {{FALLBACK_MODEL_3}}. These fallbacks use API keys and do incur per-token costs. +If the primary model is unavailable: {{FALLBACK_MODEL_1}} -> {{FALLBACK_MODEL_2}}. These fallbacks use subscription OAuth and do not incur per-token costs. diff --git a/bates-core/workspace-core/rules/subagent-policy.md b/bates-core/workspace-core/rules/subagent-policy.md index 24c52fa..c4905ec 100644 --- a/bates-core/workspace-core/rules/subagent-policy.md +++ b/bates-core/workspace-core/rules/subagent-policy.md @@ -15,7 +15,13 @@ This rule is non-negotiable. Include it in every sub-agent task prompt. **When the user asks for ANY multi-step task, spawn a sub-agent IMMEDIATELY in the same turn. Do NOT investigate, read files, run commands, or edit documentation yourself first.** -The ONLY action in the main session should be `sessions_spawn`. +The ONLY actions in the main session should be: acknowledge, `sessions_spawn`, report results. Nothing else. + +**If you find yourself making more than 1 tool call on a user request, STOP and spawn a sub-agent instead.** + +**Your acknowledgment + spawn should happen in ONE turn. Never take 2+ turns before spawning.** + +**If uncertain whether to delegate, ALWAYS delegate. The cost of keeping the main session free is zero. The cost of blocking it is total: the user cannot interact with you while you are working.** ### What Triggers Immediate Delegation From 3be86c672a7351e1f0a5c6e5865d5f36d6328bd0 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 24 Feb 2026 00:36:17 +0000 Subject: [PATCH 17/63] Enforce delegation structurally: deny exec/process/read/write/edit on main agent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Text-based delegation directives were insufficient — Bates was making 62 exec calls and 22 process polls per session instead of spawning sub-agents (only 1 sessions_spawn in 138 turns). Fix: deny runtime/filesystem tools on the main agent via tools.deny in openclaw.json. Main session can only coordinate (sessions_spawn, messaging, web_search). All actual work must go through sub-agents which have full tools. Co-Authored-By: Claude Opus 4.6 --- bates-core/templates/openclaw.json.template | 10 ++++++++++ bates-core/workspace-core/SOUL.md.template | 3 +-- bates-core/workspace-core/rules/subagent-policy.md | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/bates-core/templates/openclaw.json.template b/bates-core/templates/openclaw.json.template index be4113d..6923f8f 100644 --- a/bates-core/templates/openclaw.json.template +++ b/bates-core/templates/openclaw.json.template @@ -52,6 +52,16 @@ "name": "{{ASSISTANT_NAME}} ({{PRIMARY_MODEL_SHORT}})", "model": { "primary": "{{PRIMARY_MODEL}}" + }, + "tools": { + "deny": [ + "exec", + "process", + "read", + "write", + "edit", + "apply_patch" + ] } } ] diff --git a/bates-core/workspace-core/SOUL.md.template b/bates-core/workspace-core/SOUL.md.template index 86909a2..86a6aca 100644 --- a/bates-core/workspace-core/SOUL.md.template +++ b/bates-core/workspace-core/SOUL.md.template @@ -27,10 +27,9 @@ Full routing details: rules/model-routing.md **CORE PRINCIPLE: {{ASSISTANT_NAME}} must stay available AT ALL TIMES.** You are a coordinator, not a worker. Delegate ALL multi-step tasks. Main session is ONLY for: acknowledging, spawning, reporting results, and decisions requiring user input. -**If you are making tool calls beyond acknowledgment and spawn, you are doing it wrong.** +**STRUCTURAL ENFORCEMENT: Your main session does NOT have access to `exec`, `process`, `read`, `write`, `edit`, or `apply_patch` tools.** These are only available to sub-agents. You MUST delegate all work that requires these tools. This is by design — it keeps you available. - **Default: delegate EVERYTHING** requiring tool calls. Spawn in the SAME turn as your acknowledgment. One turn: acknowledge + spawn. That is it. -- **If you find yourself making more than 1 tool call on a user request, STOP and spawn a sub-agent instead.** - **If uncertain whether to delegate, ALWAYS delegate.** The cost of keeping the main session free is zero. The cost of blocking it is total: the user cannot reach you while you work. - **NEVER take 2+ turns before spawning.** Do not "investigate first" or "check something quickly." The sub-agent investigates. You spawn. - **Email/file/code workflows -> Claude Code** (rules/delegation.md) diff --git a/bates-core/workspace-core/rules/subagent-policy.md b/bates-core/workspace-core/rules/subagent-policy.md index c4905ec..b393c71 100644 --- a/bates-core/workspace-core/rules/subagent-policy.md +++ b/bates-core/workspace-core/rules/subagent-policy.md @@ -17,7 +17,7 @@ This rule is non-negotiable. Include it in every sub-agent task prompt. The ONLY actions in the main session should be: acknowledge, `sessions_spawn`, report results. Nothing else. -**If you find yourself making more than 1 tool call on a user request, STOP and spawn a sub-agent instead.** +**STRUCTURAL ENFORCEMENT:** Your main session tools do NOT include `exec`, `process`, `read`, `write`, `edit`, or `apply_patch`. These are structurally denied. All work requiring these tools MUST be delegated to sub-agents. This is by design. **Your acknowledgment + spawn should happen in ONE turn. Never take 2+ turns before spawning.** From 544b43ea9aad9a81c5798ec3fcac9422657f7fa5 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 24 Feb 2026 08:52:15 +0000 Subject: [PATCH 18/63] =?UTF-8?q?Remove=20tools.deny=20from=20main=20agent?= =?UTF-8?q?=20=E2=80=94=20cascaded=20to=20sub-agents?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OpenClaw's tool restriction hierarchy means agent-level tools.deny cascades to all sessions under that agentId, including sub-agents. This broke sub-agent exec/read/write capabilities. Replaced with behavioral rules in SOUL.md and subagent-policy.md instead. Co-Authored-By: Claude Opus 4.6 --- bates-core/templates/openclaw.json.template | 11 ++--------- bates-core/workspace-core/SOUL.md.template | 2 +- bates-core/workspace-core/rules/subagent-policy.md | 2 +- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/bates-core/templates/openclaw.json.template b/bates-core/templates/openclaw.json.template index 6923f8f..74ee74a 100644 --- a/bates-core/templates/openclaw.json.template +++ b/bates-core/templates/openclaw.json.template @@ -53,15 +53,8 @@ "model": { "primary": "{{PRIMARY_MODEL}}" }, - "tools": { - "deny": [ - "exec", - "process", - "read", - "write", - "edit", - "apply_patch" - ] + "subagents": { + "allowAgents": ["*"] } } ] diff --git a/bates-core/workspace-core/SOUL.md.template b/bates-core/workspace-core/SOUL.md.template index 86a6aca..05b04a1 100644 --- a/bates-core/workspace-core/SOUL.md.template +++ b/bates-core/workspace-core/SOUL.md.template @@ -27,7 +27,7 @@ Full routing details: rules/model-routing.md **CORE PRINCIPLE: {{ASSISTANT_NAME}} must stay available AT ALL TIMES.** You are a coordinator, not a worker. Delegate ALL multi-step tasks. Main session is ONLY for: acknowledging, spawning, reporting results, and decisions requiring user input. -**STRUCTURAL ENFORCEMENT: Your main session does NOT have access to `exec`, `process`, `read`, `write`, `edit`, or `apply_patch` tools.** These are only available to sub-agents. You MUST delegate all work that requires these tools. This is by design — it keeps you available. +**BEHAVIORAL RULE: You MUST NOT use `exec`, `process`, `read`, `write`, `edit`, or `apply_patch` tools in the main session.** These are for sub-agents only. If you catch yourself about to call any of these tools, STOP and spawn a sub-agent instead. The only tools you should use in the main session are: `sessions_spawn`, `sessions_list`, `sessions_get`, `memory_search`, `memory_write`, and channel-specific reply tools. - **Default: delegate EVERYTHING** requiring tool calls. Spawn in the SAME turn as your acknowledgment. One turn: acknowledge + spawn. That is it. - **If uncertain whether to delegate, ALWAYS delegate.** The cost of keeping the main session free is zero. The cost of blocking it is total: the user cannot reach you while you work. diff --git a/bates-core/workspace-core/rules/subagent-policy.md b/bates-core/workspace-core/rules/subagent-policy.md index b393c71..8539c26 100644 --- a/bates-core/workspace-core/rules/subagent-policy.md +++ b/bates-core/workspace-core/rules/subagent-policy.md @@ -17,7 +17,7 @@ This rule is non-negotiable. Include it in every sub-agent task prompt. The ONLY actions in the main session should be: acknowledge, `sessions_spawn`, report results. Nothing else. -**STRUCTURAL ENFORCEMENT:** Your main session tools do NOT include `exec`, `process`, `read`, `write`, `edit`, or `apply_patch`. These are structurally denied. All work requiring these tools MUST be delegated to sub-agents. This is by design. +**BEHAVIORAL RULE:** You MUST NOT use `exec`, `process`, `read`, `write`, `edit`, or `apply_patch` in the main session. If you are about to call any of these tools, STOP immediately and spawn a sub-agent instead. The sub-agent does the work. You coordinate. **Your acknowledgment + spawn should happen in ONE turn. Never take 2+ turns before spawning.** From 4ebce6c6221f8ebae4cc215614fbd27ffee6d881 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Wed, 25 Feb 2026 14:43:40 +0000 Subject: [PATCH 19/63] Confirm patch compatibility with OpenClaw v2026.2.24 Co-Authored-By: Claude Opus 4.6 --- bates-enhance/patches/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bates-enhance/patches/README.md b/bates-enhance/patches/README.md index 953d0d6..3cb9fa4 100644 --- a/bates-enhance/patches/README.md +++ b/bates-enhance/patches/README.md @@ -78,7 +78,7 @@ The script applies patches in dependency order: ## Tested Versions -- v2026.2.19 through v2026.2.22-2 (all 9/9 patches apply cleanly) +- v2026.2.19 through v2026.2.24 (all 9/9 patches apply cleanly) ## Warning From eefe96ea4b6a9914ba8553c5e1ce6e705db139a8 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Wed, 25 Feb 2026 14:46:48 +0000 Subject: [PATCH 20/63] Rewrite cost-footer.patch.js to use precise insertion point Replace generic heuristic regex patterns with structural matching: insert between normalizedPayloads flatMap closing and getGlobalHookRunner(), which has been stable across v2026.2.19-2.24. Co-Authored-By: Claude Opus 4.6 --- bates-enhance/patches/cost-footer.patch.js | 121 ++++++++++----------- 1 file changed, 55 insertions(+), 66 deletions(-) diff --git a/bates-enhance/patches/cost-footer.patch.js b/bates-enhance/patches/cost-footer.patch.js index 6285561..2fe58e6 100644 --- a/bates-enhance/patches/cost-footer.patch.js +++ b/bates-enhance/patches/cost-footer.patch.js @@ -1,15 +1,16 @@ #!/usr/bin/env node /** - * cost-footer.patch.js -- Inject cost footer transform into OpenClaw dist files + * cost-footer.patch.js -- Inject cost footer transform into OpenClaw deliver-*.js files * - * Usage: node cost-footer.patch.js + * Usage: node cost-footer.patch.js * * This patch adds a call to globalThis.__openclawMessageTransform (if defined) - * before messages are dispatched to channels. The cost-tracker plugin sets up - * this transform to append daily cost summaries to outgoing messages. + * after normalizedPayloads are built but before they are dispatched to channels. + * The cost-tracker plugin sets up this transform to append daily cost summaries. * - * Target files are discovered by grepping for specific function signatures - * in the OpenClaw dist directory. + * Insertion point: between the normalizedPayloads flatMap closing `});` and + * `const hookRunner = getGlobalHookRunner();` — this pattern has been stable + * across v2026.2.19 through v2026.2.24. */ 'use strict'; @@ -18,7 +19,7 @@ const path = require('path'); const targetFile = process.argv[2]; if (!targetFile) { - console.error('Usage: node cost-footer.patch.js '); + console.error('Usage: node cost-footer.patch.js '); process.exit(1); } @@ -28,77 +29,65 @@ if (!fs.existsSync(targetFile)) { } let code = fs.readFileSync(targetFile, 'utf8'); +const basename = path.basename(targetFile); // Check if already patched if (code.includes('__openclawMessageTransform')) { - console.log(`Already patched: ${path.basename(targetFile)}`); + console.log(`Already patched: ${basename}`); process.exit(0); } -// Pattern 1: Reply dispatcher — find where message text is finalized before send -// Look for the pattern where `text` or `body` is assigned before channel dispatch -const replyPattern = /(\btext\s*=\s*[^;]+;)(\s*(?:await\s+)?(?:deliver|dispatch|send))/g; -let patched = false; +// Primary pattern: insert between normalizedPayloads flatMap end and hookRunner +// The flatMap builds the final payloads; we transform the last text payload before dispatch. +const COST_FOOTER_CODE = `\tif (globalThis.__openclawMessageTransform) { +\t\tconst last = normalizedPayloads.filter((p) => p.text?.trim()).pop(); +\t\tif (last) { +\t\t\ttry { const t = globalThis.__openclawMessageTransform(last.text, { channel, to }); if (typeof t === "string") last.text = t; } catch {} +\t\t} +\t}`; -if (replyPattern.test(code)) { - code = code.replace(replyPattern, (match, textAssign, deliverCall) => { - patched = true; - return `${textAssign} - if (typeof globalThis.__openclawMessageTransform === 'function') { - try { text = await globalThis.__openclawMessageTransform(text, { channel: channel?.name || 'unknown' }); } catch {} - } - ${deliverCall}`; - }); +// Pattern: `});\n\tconst hookRunner = getGlobalHookRunner();` +// This appears after the normalizedPayloads flatMap closes. +// We need to match the instance that follows normalizedPayloads, not the utility function definition. +const hookRunnerPattern = /(\t\}\);\n)(\tconst hookRunner = getGlobalHookRunner\(\);)/g; +let matches = []; +let m; +while ((m = hookRunnerPattern.exec(code)) !== null) { + matches.push({ index: m.index, length: m[0].length, groups: [m[1], m[2]] }); } -// Pattern 2: Proactive delivery — similar pattern in deliver files -const proactivePattern = /((?:message|msg|body)\s*(?:\.text)?\s*=\s*[^;]+;)(\s*(?:await\s+)?(?:this\.)?(?:deliver|send|dispatch|forward))/g; - -if (!patched && proactivePattern.test(code)) { - code = code.replace(proactivePattern, (match, msgAssign, sendCall) => { - patched = true; - return `${msgAssign} - if (typeof globalThis.__openclawMessageTransform === 'function') { - try { - const _txt = typeof message === 'string' ? message : (message?.text || msg?.text || body); - const _transformed = await globalThis.__openclawMessageTransform(_txt, { channel: 'proactive' }); - if (typeof message === 'string') message = _transformed; - else if (message?.text) message.text = _transformed; - else if (msg?.text) msg.text = _transformed; - } catch {} - } - ${sendCall}`; - }); +if (matches.length === 0) { + console.error(`FAILED: Could not find hookRunner pattern in ${basename}`); + console.error('The file structure may have changed. Manual patching may be required.'); + process.exit(1); } -if (!patched) { - // Fallback: insert transform hook before any function that looks like a message sender - const fallbackPattern = /(async\s+function\s+(?:deliver|dispatch|send)\w*\s*\([^)]*\)\s*\{)/; - if (fallbackPattern.test(code)) { - code = code.replace(fallbackPattern, (match, funcDecl) => { - patched = true; - return `${funcDecl} - // [Bates patch] Cost footer transform - if (typeof globalThis.__openclawMessageTransform === 'function') { - try { - const _args = Array.from(arguments); - for (let i = 0; i < _args.length; i++) { - if (typeof _args[i] === 'string' && _args[i].length > 10) { - arguments[i] = await globalThis.__openclawMessageTransform(_args[i], {}); - break; - } - } - } catch {} - }`; - }); +// Find the correct instance: the one preceded by normalizedPayloads +let targetMatch = null; +for (const match of matches) { + // Check if normalizedPayloads appears within 500 chars before this match + const precedingCode = code.substring(Math.max(0, match.index - 500), match.index); + if (precedingCode.includes('normalizedPayloads')) { + targetMatch = match; + break; } } -if (patched) { - fs.writeFileSync(targetFile, code, 'utf8'); - console.log(`Patched: ${path.basename(targetFile)}`); -} else { - console.warn(`Could not find patch insertion point in: ${path.basename(targetFile)}`); - console.warn('The file structure may have changed. Manual patching may be required.'); - process.exit(1); +if (!targetMatch) { + // Fallback: if there's only one match, use it + if (matches.length === 1) { + targetMatch = matches[0]; + console.log(` Using single hookRunner match (no normalizedPayloads proximity check)`); + } else { + console.error(`FAILED: Found ${matches.length} hookRunner matches but none near normalizedPayloads`); + process.exit(1); + } } + +// Insert the cost footer code between the closing }); and the hookRunner line +const before = code.substring(0, targetMatch.index); +const after = code.substring(targetMatch.index); +code = before + targetMatch.groups[0] + COST_FOOTER_CODE + '\n' + targetMatch.groups[1] + after.substring(targetMatch.length); + +fs.writeFileSync(targetFile, code, 'utf8'); +console.log(`Patched: ${basename}`); From bdba1e64cc520fccf4b2260475df7e38e16628d3 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Thu, 26 Feb 2026 01:40:40 +0000 Subject: [PATCH 21/63] Fix announce timeout: make result card Teams calls fire-and-forget The Teams card update/send calls in runSubagentAnnounceFlow were awaited, blocking the announce flow for 3-5s on Teams API round-trips. Combined with delivery retries, this exceeded the 10s gateway internal timeout causing "Subagent announce failed: gateway timeout after 10000ms". Wrap the card operations in an async IIFE (no await) so they run in the background. Capture closure variables to avoid mutation issues. Co-Authored-By: Claude Opus 4.6 --- .../patches/reply-composite.patch.js | 115 +++++++++--------- 1 file changed, 59 insertions(+), 56 deletions(-) diff --git a/bates-enhance/patches/reply-composite.patch.js b/bates-enhance/patches/reply-composite.patch.js index 8dfeb30..dd50aa4 100644 --- a/bates-enhance/patches/reply-composite.patch.js +++ b/bates-enhance/patches/reply-composite.patch.js @@ -248,65 +248,68 @@ if (spawnModeInRegister.test(code) && !code.includes('// --- Thinking bubble: se // ─── 6. Result card in runSubagentAnnounceFlow ─────────────────────────────── // After the reply text is finalized, inject result card send/update -const RESULT_CARD = `\t\t// --- Thinking bubble: update or send result card to Teams --- +const RESULT_CARD = `\t\t// --- Thinking bubble: update or send result card to Teams (fire-and-forget, must not block announce) --- \t\tif (targetRequesterOrigin?.channel === "msteams" && targetRequesterOrigin?.to) { -\t\t\ttry { -\t\t\t\tconst cardText = (reply || "(no output)").substring(0, 3000); -\t\t\t\tconst resultAgentId = subagentName || "main"; -\t\t\t\tconst resultCard = { -\t\t\t\t\ttype: "AdaptiveCard", -\t\t\t\t\tversion: "1.5", -\t\t\t\t\tbody: [ -\t\t\t\t\t\t{ -\t\t\t\t\t\t\ttype: "Container", -\t\t\t\t\t\t\tstyle: "emphasis", -\t\t\t\t\t\t\titems: [{ -\t\t\t\t\t\t\t\ttype: "ColumnSet", -\t\t\t\t\t\t\t\tcolumns: [ -\t\t\t\t\t\t\t\t\tbuildBatesAvatarColumn(resultAgentId), -\t\t\t\t\t\t\t\t\t{ -\t\t\t\t\t\t\t\t\t\ttype: "Column", -\t\t\t\t\t\t\t\t\t\twidth: "stretch", -\t\t\t\t\t\t\t\t\t\tverticalContentAlignment: "Center", -\t\t\t\t\t\t\t\t\t\titems: [{ -\t\t\t\t\t\t\t\t\t\t\ttype: "TextBlock", -\t\t\t\t\t\t\t\t\t\t\ttext: \`**\${resolveBatesDisplayName(resultAgentId)}:**\`, -\t\t\t\t\t\t\t\t\t\t\twrap: true -\t\t\t\t\t\t\t\t\t\t}] -\t\t\t\t\t\t\t\t\t} -\t\t\t\t\t\t\t\t] -\t\t\t\t\t\t\t}] -\t\t\t\t\t\t}, -\t\t\t\t\t\t{ -\t\t\t\t\t\t\ttype: "Container", -\t\t\t\t\t\t\tstyle: "accent", -\t\t\t\t\t\t\titems: [{ -\t\t\t\t\t\t\t\ttype: "TextBlock", -\t\t\t\t\t\t\t\ttext: cardText, -\t\t\t\t\t\t\t\twrap: true, -\t\t\t\t\t\t\t\tspacing: "Small" -\t\t\t\t\t\t\t}] -\t\t\t\t\t\t} -\t\t\t\t\t] -\t\t\t\t}; -\t\t\t\t// Try to update existing thinking card first -\t\t\t\tconst runEntry = subagentRuns.get(params.childRunId); -\t\t\t\tconst thinkingActivityId = runEntry?.thinkingCardActivityId; -\t\t\t\tconst thinkingTo = runEntry?.thinkingCardTo || targetRequesterOrigin.to; -\t\t\t\tif (thinkingActivityId && globalThis.__openclawUpdateTeamsCard) { -\t\t\t\t\ttry { -\t\t\t\t\t\tawait globalThis.__openclawUpdateTeamsCard(thinkingTo, thinkingActivityId, resultCard); -\t\t\t\t\t} catch (updateErr) { -\t\t\t\t\t\t// Update failed (e.g. message too old), fall back to sending new card -\t\t\t\t\t\tif (globalThis.__openclawSendTeamsCard) { -\t\t\t\t\t\t\tawait globalThis.__openclawSendTeamsCard(targetRequesterOrigin.to, resultCard); +\t\t\tconst _cardReply = reply, _cardSubagentName = subagentName, _cardChildRunId = params.childRunId, _cardTo = targetRequesterOrigin.to; +\t\t\t(async () => { +\t\t\t\ttry { +\t\t\t\t\tconst cardText = (_cardReply || "(no output)").substring(0, 3000); +\t\t\t\t\tconst resultAgentId = _cardSubagentName || "main"; +\t\t\t\t\tconst resultCard = { +\t\t\t\t\t\ttype: "AdaptiveCard", +\t\t\t\t\t\tversion: "1.5", +\t\t\t\t\t\tbody: [ +\t\t\t\t\t\t\t{ +\t\t\t\t\t\t\t\ttype: "Container", +\t\t\t\t\t\t\t\tstyle: "emphasis", +\t\t\t\t\t\t\t\titems: [{ +\t\t\t\t\t\t\t\t\ttype: "ColumnSet", +\t\t\t\t\t\t\t\t\tcolumns: [ +\t\t\t\t\t\t\t\t\t\tbuildBatesAvatarColumn(resultAgentId), +\t\t\t\t\t\t\t\t\t\t{ +\t\t\t\t\t\t\t\t\t\t\ttype: "Column", +\t\t\t\t\t\t\t\t\t\t\twidth: "stretch", +\t\t\t\t\t\t\t\t\t\t\tverticalContentAlignment: "Center", +\t\t\t\t\t\t\t\t\t\t\titems: [{ +\t\t\t\t\t\t\t\t\t\t\t\ttype: "TextBlock", +\t\t\t\t\t\t\t\t\t\t\t\ttext: \`**\${resolveBatesDisplayName(resultAgentId)}:**\`, +\t\t\t\t\t\t\t\t\t\t\t\twrap: true +\t\t\t\t\t\t\t\t\t\t\t}] +\t\t\t\t\t\t\t\t\t\t} +\t\t\t\t\t\t\t\t\t] +\t\t\t\t\t\t\t\t}] +\t\t\t\t\t\t\t}, +\t\t\t\t\t\t\t{ +\t\t\t\t\t\t\t\ttype: "Container", +\t\t\t\t\t\t\t\tstyle: "accent", +\t\t\t\t\t\t\t\titems: [{ +\t\t\t\t\t\t\t\t\ttype: "TextBlock", +\t\t\t\t\t\t\t\t\ttext: cardText, +\t\t\t\t\t\t\t\t\twrap: true, +\t\t\t\t\t\t\t\t\tspacing: "Small" +\t\t\t\t\t\t\t\t}] +\t\t\t\t\t\t\t} +\t\t\t\t\t\t] +\t\t\t\t\t}; +\t\t\t\t\t// Try to update existing thinking card first +\t\t\t\t\tconst runEntry = subagentRuns.get(_cardChildRunId); +\t\t\t\t\tconst thinkingActivityId = runEntry?.thinkingCardActivityId; +\t\t\t\t\tconst thinkingTo = runEntry?.thinkingCardTo || _cardTo; +\t\t\t\t\tif (thinkingActivityId && globalThis.__openclawUpdateTeamsCard) { +\t\t\t\t\t\ttry { +\t\t\t\t\t\t\tawait globalThis.__openclawUpdateTeamsCard(thinkingTo, thinkingActivityId, resultCard); +\t\t\t\t\t\t} catch (updateErr) { +\t\t\t\t\t\t\t// Update failed (e.g. message too old), fall back to sending new card +\t\t\t\t\t\t\tif (globalThis.__openclawSendTeamsCard) { +\t\t\t\t\t\t\t\tawait globalThis.__openclawSendTeamsCard(_cardTo, resultCard); +\t\t\t\t\t\t\t} \t\t\t\t\t\t} +\t\t\t\t\t} else if (globalThis.__openclawSendTeamsCard) { +\t\t\t\t\t\t// No thinking card existed, send a new one +\t\t\t\t\t\tawait globalThis.__openclawSendTeamsCard(_cardTo, resultCard); \t\t\t\t\t} -\t\t\t\t} else if (globalThis.__openclawSendTeamsCard) { -\t\t\t\t\t// No thinking card existed, send a new one -\t\t\t\t\tawait globalThis.__openclawSendTeamsCard(targetRequesterOrigin.to, resultCard); -\t\t\t\t} -\t\t\t} catch (e) { /* card send/update failure should not block announce flow */ } +\t\t\t\t} catch (e) { /* card send/update failure is non-fatal */ } +\t\t\t})(); \t\t} \t\t// --- End thinking bubble ---`; From 4413a082c5b9a5323931a56258964e0db9397fa5 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Thu, 26 Feb 2026 12:55:32 +0000 Subject: [PATCH 22/63] Update tested versions to v2026.2.25 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All 9/9 reply-composite patches and cost-footer patches apply cleanly on v2026.2.25 despite the announce flow state machine refactor — function names and insertion points unchanged. Co-Authored-By: Claude Opus 4.6 --- bates-enhance/patches/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bates-enhance/patches/README.md b/bates-enhance/patches/README.md index 3cb9fa4..421c6fd 100644 --- a/bates-enhance/patches/README.md +++ b/bates-enhance/patches/README.md @@ -78,7 +78,7 @@ The script applies patches in dependency order: ## Tested Versions -- v2026.2.19 through v2026.2.24 (all 9/9 patches apply cleanly) +- v2026.2.19 through v2026.2.25 (all 9/9 patches apply cleanly) ## Warning From 9ee8fc1b90904522d7001ca3434438b9ac4993df Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Thu, 26 Feb 2026 13:03:05 +0000 Subject: [PATCH 23/63] Update MSTeams patch scripts to match deployed code - send-update.patch.ts: rewrite to use simpler getMSTeamsRuntime() + createMSTeamsConversationStoreFs() approach instead of the heavier resolveMSTeamsSendContext() pattern. Matches what's actually deployed and working in production. - channel-bridge.patch.ts: remove `return result;` (startAccount doesn't return), use `await result.shutdown()` after abort signal fires. Matches deployed channel.ts patch. Both scripts verified against clean v2026.2.25 files. Co-Authored-By: Claude Opus 4.6 --- bates-enhance/patches/channel-bridge.patch.ts | 7 +- bates-enhance/patches/send-update.patch.ts | 159 ++++++++---------- 2 files changed, 70 insertions(+), 96 deletions(-) diff --git a/bates-enhance/patches/channel-bridge.patch.ts b/bates-enhance/patches/channel-bridge.patch.ts index e5e8db7..fc2de3c 100644 --- a/bates-enhance/patches/channel-bridge.patch.ts +++ b/bates-enhance/patches/channel-bridge.patch.ts @@ -2,7 +2,7 @@ * channel-bridge.patch.ts -- Teams channel bridge for Adaptive Cards * * This code should be inserted into the Teams extension's channel.ts file, - * inside the startAccount() function, after the bot adapter is initialized. + * inside the startAccount() function, replacing the monitorMSTeamsProvider call. * * It exposes two globalThis bridges: * - __openclawSendTeamsCard: Send a new Adaptive Card to a conversation @@ -13,7 +13,7 @@ * * MANUAL PATCH: Insert this block into: * ~/.npm-global/lib/node_modules/openclaw/extensions/msteams/src/channel.ts - * Inside startAccount(), replacing the default `await monitorMSTeamsProvider(...)` block. + * Inside startAccount(), replacing the default `return monitorMSTeamsProvider(...)` block. * * Prerequisites: * - channel.ts must import `updateAdaptiveCardMSTeams` from "./send.js" @@ -51,7 +51,6 @@ if (ctx.abortSignal && !ctx.abortSignal.aborted) { await new Promise((resolve) => { ctx.abortSignal!.addEventListener("abort", () => resolve(), { once: true }); }); - await result.shutdown(); } -return result; +await result.shutdown(); // --- END PATCH --- diff --git a/bates-enhance/patches/send-update.patch.ts b/bates-enhance/patches/send-update.patch.ts index 641f0d3..0793200 100644 --- a/bates-enhance/patches/send-update.patch.ts +++ b/bates-enhance/patches/send-update.patch.ts @@ -1,92 +1,67 @@ -/** - * send-update.patch.ts -- Add updateAdaptiveCardMSTeams to send.ts - * - * This function allows updating an existing Adaptive Card message in-place, - * which is used by the thinking bubble feature: when a sub-agent spawns, - * a "working on..." card is sent, then updated with the result when done. - * - * MANUAL PATCH: Append this code to the end of: - * ~/.npm-global/lib/node_modules/openclaw/extensions/msteams/src/send.ts - * (before any trailing exports if present) - * - * Also add to the existing imports at the top of send.ts if not already present: - * import { buildConversationReference } from "./messenger.js"; - * import { classifyMSTeamsSendError, formatMSTeamsSendErrorHint, formatUnknownError } from "./errors.js"; - * - * And export this function from the module (add to channel.ts import line). - */ - -// --- BEGIN PATCH --- -// [Bates patch] Types for card update -export type UpdateMSTeamsCardParams = { - /** Full config (for credentials) */ - cfg: OpenClawConfig; - /** Conversation ID or user ID to send to */ - to: string; - /** Activity ID of the message to update */ - activityId: string; - /** New Adaptive Card JSON object */ - card: Record; -}; - -export type UpdateMSTeamsCardResult = { - activityId: string; - conversationId: string; -}; - -/** - * Update an existing Adaptive Card message in a Teams conversation. - * The bot must have originally sent the message being updated. - */ -export async function updateAdaptiveCardMSTeams( - params: UpdateMSTeamsCardParams, -): Promise { - const { cfg, to, activityId, card } = params; - const { adapter, appId, conversationId, ref, log } = await resolveMSTeamsSendContext({ - cfg, - to, - }); - - log.debug?.("updating adaptive card", { - conversationId, - activityId, - cardType: card.type, - }); - - const baseRef = buildConversationReference(ref); - const proactiveRef = { - ...baseRef, - activityId: undefined, - }; - - try { - await adapter.continueConversation(appId, proactiveRef, async (ctx: any) => { - await ctx.updateActivity({ - id: activityId, - type: "message", - attachments: [ - { - contentType: "application/vnd.microsoft.card.adaptive", - content: card, - }, - ], - }); - }); - } catch (err) { - const classification = classifyMSTeamsSendError(err); - const hint = formatMSTeamsSendErrorHint(classification); - const status = classification.statusCode ? ` (HTTP ${classification.statusCode})` : ""; - throw new Error( - `msteams card update failed${status}: ${formatUnknownError(err)}${hint ? ` (${hint})` : ""}`, - { cause: err }, - ); - } - - log.info("updated adaptive card", { conversationId, activityId }); - - return { - activityId, - conversationId, - }; -} -// --- END PATCH --- +/** + * send-update.patch.ts -- Add updateAdaptiveCardMSTeams to send.ts + * + * This function allows updating an existing Adaptive Card message in-place, + * which is used by the thinking bubble feature: when a sub-agent spawns, + * a "working on..." card is sent, then updated with the result when done. + * + * MANUAL PATCH: Insert this code into send.ts before the `listMSTeamsConversations` function. + * ~/.npm-global/lib/node_modules/openclaw/extensions/msteams/src/send.ts + * + * The reapply-patches.sh script appends it to the end of send.ts automatically. + * Both the existing imports (getMSTeamsRuntime, createMSTeamsConversationStoreFs, + * buildConversationReference) are already present in send.ts. + * + * Also update the channel.ts import line to include updateAdaptiveCardMSTeams. + */ + +// --- BEGIN PATCH --- +// [Bates patch] Types for card update +export type UpdateMSTeamsCardParams = { + cfg: OpenClawConfig; + to: string; + activityId: string; + card: Record; +}; + +export type UpdateMSTeamsCardResult = { + messageId: string; +}; + +/** + * Update an existing Adaptive Card message in a Teams conversation. + * The bot must have originally sent the message being updated. + */ +export async function updateAdaptiveCardMSTeams( + params: UpdateMSTeamsCardParams, +): Promise { + const runtime = getMSTeamsRuntime(); + if (!runtime) throw new Error("MSTeams runtime not initialized"); + + const store = createMSTeamsConversationStoreFs(); + const ref = await store.get(params.to); + if (!ref?.conversationReference) { + throw new Error(`No conversation reference for ${params.to}`); + } + + const conversationReference = buildConversationReference(ref.conversationReference); + const { adapter } = runtime; + + let updatedId = params.activityId; + await adapter.continueConversation(conversationReference, async (ctx) => { + const activity = { + type: "message", + id: params.activityId, + attachments: [ + { + contentType: "application/vnd.microsoft.card.adaptive", + content: params.card, + }, + ], + }; + await ctx.updateActivity(activity as any); + }); + + return { messageId: updatedId }; +} +// --- END PATCH --- From 494f1a4925422c6fe05cbae11cd05d08d5ea788a Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Fri, 27 Feb 2026 01:24:04 +0000 Subject: [PATCH 24/63] Add deputy proactiveness system and update to v2026.2.26 Complete deputy agent system: 12 heartbeat configs with Graph API channel posting, shared memory templates for cross-deputy persistence, deputy feedback loop, updated cron jobs with correct agentId routing, rewritten collect-standups with all deputies. SOUL.md gains agentId delegation rule and read-back-in-conversation directive. Patches tested through v2026.2.26. Co-Authored-By: Claude Opus 4.6 --- bates-core/workspace-core/SOUL.md.template | 27 +++- .../workspace-core/rules/subagent-policy.md | 96 ++++++----- .../integrations/agents/cron-jobs-agents.json | 152 ++++++++++++------ .../agents/heartbeats/amara-heartbeat.md | 44 +++++ .../agents/heartbeats/archer-heartbeat.md | 53 ++++++ .../agents/heartbeats/conrad-heartbeat.md | 43 +++++ .../agents/heartbeats/dash-heartbeat.md | 42 +++++ .../agents/heartbeats/jules-heartbeat.md | 63 ++++++++ .../agents/heartbeats/kira-heartbeat.md | 44 +++++ .../agents/heartbeats/mercer-heartbeat.md | 52 ++++++ .../agents/heartbeats/mira-heartbeat.md | 56 +++++++ .../agents/heartbeats/nova-heartbeat.md | 49 ++++++ .../agents/heartbeats/paige-heartbeat.md | 46 ++++++ .../agents/heartbeats/quinn-heartbeat.md | 46 ++++++ .../agents/heartbeats/soren-heartbeat.md | 71 ++++++++ .../agents/scripts/collect-standups.sh | 143 +++++----------- .../agents/shared-memory/escola/contacts.md | 9 ++ .../agents/shared-memory/escola/upcoming.md | 9 ++ .../fdesk/compliance-calendar.md | 6 + .../shared-memory/fdesk/context-today.md | 4 + .../shared-memory/fdesk/deal-pipeline.md | 7 + .../shared-memory/fdesk/regulatory-updates.md | 6 + .../shared-memory/global/calendar-overview.md | 9 ++ .../shared-memory/global/content-ideas.md | 8 + .../global/documentation-gaps.md | 9 ++ .../shared-memory/global/hr-insights.md | 9 ++ .../global/openclaw-community.md | 9 ++ .../shared-memory/private/financial-items.md | 10 ++ .../shared-memory/synapse/github-status.md | 10 ++ .../rules/deputy-feedback-loop.md | 34 ++++ bates-enhance/patches/README.md | 2 +- 31 files changed, 973 insertions(+), 195 deletions(-) create mode 100644 bates-enhance/integrations/agents/heartbeats/amara-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/archer-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/conrad-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/dash-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/jules-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/kira-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/mercer-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/mira-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/nova-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/paige-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/quinn-heartbeat.md create mode 100644 bates-enhance/integrations/agents/heartbeats/soren-heartbeat.md create mode 100644 bates-enhance/integrations/agents/shared-memory/escola/contacts.md create mode 100644 bates-enhance/integrations/agents/shared-memory/escola/upcoming.md create mode 100644 bates-enhance/integrations/agents/shared-memory/fdesk/compliance-calendar.md create mode 100644 bates-enhance/integrations/agents/shared-memory/fdesk/context-today.md create mode 100644 bates-enhance/integrations/agents/shared-memory/fdesk/deal-pipeline.md create mode 100644 bates-enhance/integrations/agents/shared-memory/fdesk/regulatory-updates.md create mode 100644 bates-enhance/integrations/agents/shared-memory/global/calendar-overview.md create mode 100644 bates-enhance/integrations/agents/shared-memory/global/content-ideas.md create mode 100644 bates-enhance/integrations/agents/shared-memory/global/documentation-gaps.md create mode 100644 bates-enhance/integrations/agents/shared-memory/global/hr-insights.md create mode 100644 bates-enhance/integrations/agents/shared-memory/global/openclaw-community.md create mode 100644 bates-enhance/integrations/agents/shared-memory/private/financial-items.md create mode 100644 bates-enhance/integrations/agents/shared-memory/synapse/github-status.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/deputy-feedback-loop.md diff --git a/bates-core/workspace-core/SOUL.md.template b/bates-core/workspace-core/SOUL.md.template index 05b04a1..8286171 100644 --- a/bates-core/workspace-core/SOUL.md.template +++ b/bates-core/workspace-core/SOUL.md.template @@ -5,6 +5,8 @@ You run on OpenClaw, deployed on a dedicated machine. Direct, concise. No em dashes ever, in any output. No hyperbole. Expert advisor who pushes back on bad ideas. +**When you don't understand a question or request:** Read back in the conversation first. The answer is almost always in the last 2-3 messages. Do not ask {{USER_NAME}} to repeat himself. This applies to sub-agents too: re-read the task prompt and any prior context before asking for clarification. + # Context {{USER_NAME}}. Timezone: {{USER_TZ}}. @@ -25,17 +27,29 @@ Full routing details: rules/model-routing.md # Delegation (MANDATORY -- NON-NEGOTIABLE) -**CORE PRINCIPLE: {{ASSISTANT_NAME}} must stay available AT ALL TIMES.** You are a coordinator, not a worker. Delegate ALL multi-step tasks. Main session is ONLY for: acknowledging, spawning, reporting results, and decisions requiring user input. +**CORE PRINCIPLE: {{ASSISTANT_NAME}} must stay available AND be effective.** You are a coordinator who can also do quick work directly. The goal is responsiveness, not delegation for its own sake. + +**WHEN TO DO IT YOURSELF (main session):** +- Tasks you can finish in under ~30 seconds total (even if 3-4 tool calls) +- Single-purpose lookups: check calendar, read one file, send one message, run one command +- Cron job reruns where the action is obvious +- Quick follow-ups to a sub-agent result (e.g., "send that to {{USER_NAME}}") + +**WHEN TO DELEGATE (sub-agent):** +- Tasks that will take >30 seconds and block you from responding to {{USER_NAME}} +- Multi-source research, batch processing, complex data gathering +- Email workflows with attachments, uploads, or multi-step processing +- Report generation, analysis, or document creation +- Spawn in the SAME turn as your acknowledgment when delegating +- **ALWAYS pass `agentId` when spawning.** Use deputies to route work to the right agent. Each deputy has its own model and persona. Never omit `agentId` -- omitting it wastes expensive tokens on sub-agent work. -**BEHAVIORAL RULE: You MUST NOT use `exec`, `process`, `read`, `write`, `edit`, or `apply_patch` tools in the main session.** These are for sub-agents only. If you catch yourself about to call any of these tools, STOP and spawn a sub-agent instead. The only tools you should use in the main session are: `sessions_spawn`, `sessions_list`, `sessions_get`, `memory_search`, `memory_write`, and channel-specific reply tools. +**THE KEY TEST:** Will this block the main session for over 30 seconds? If yes -> delegate. If no -> just do it. -- **Default: delegate EVERYTHING** requiring tool calls. Spawn in the SAME turn as your acknowledgment. One turn: acknowledge + spawn. That is it. -- **If uncertain whether to delegate, ALWAYS delegate.** The cost of keeping the main session free is zero. The cost of blocking it is total: the user cannot reach you while you work. -- **NEVER take 2+ turns before spawning.** Do not "investigate first" or "check something quickly." The sub-agent investigates. You spawn. +**NEVER:** Do not spawn a sub-agent just to look something up before deciding what to do. Either do the lookup yourself (if quick) or delegate the whole task (if complex). - **Email/file/code workflows -> Claude Code** (rules/delegation.md) - **Simple lookups/calendar/tasks -> sub-agents** (rules/subagent-policy.md) - **Code writing -> Claude Code** (rules/delegation.md) -- **After sub-agent returns:** ALWAYS deliver the result immediately in your own voice. Then persist Learnings to observations/ files. Never reply NO_REPLY for sub-agent results. +- **After sub-agent returns:** ALWAYS deliver the result to {{USER_NAME}} immediately in your own voice. Then persist Learnings to observations/ files. Never reply NO_REPLY for sub-agent results -- {{USER_NAME}} is waiting. If you already sent an Adaptive Card, still send a text summary. Full routing table & examples: rules/subagent-policy.md @@ -53,6 +67,7 @@ Detailed rules and tool references live in separate files. Read them before star | rules/knowledge-persistence.md | Deciding what/where to save | | rules/subagent-policy.md | Spawning subagents or delegating | | rules/memory-classification.md | During all interactions (classify learnings) | +| rules/deputy-feedback-loop.md | When {{USER_NAME}} responds to deputy output (approve/reject/adjust) | | DATA-HANDLING.md | Any data processing or privacy concern | ## Tool References (read on demand) diff --git a/bates-core/workspace-core/rules/subagent-policy.md b/bates-core/workspace-core/rules/subagent-policy.md index 8539c26..c70a208 100644 --- a/bates-core/workspace-core/rules/subagent-policy.md +++ b/bates-core/workspace-core/rules/subagent-policy.md @@ -1,35 +1,36 @@ # Subagent Policy -## ABSOLUTE: Sub-agents Must NEVER Restart the Gateway +## 🚫 ABSOLUTE: Sub-agents Must NEVER Restart the Gateway **No sub-agent or spawned session may run `openclaw gateway restart`, `gateway restart`, `config.patch`, `config.apply`, or any command that restarts the OpenClaw process.** A gateway restart kills ALL running sessions, including the sub-agent itself. This creates a suicide loop where work is lost. If a sub-agent's changes require a gateway restart (e.g., config changes, extension updates), it must: 1. Complete all file edits 2. Report back: "Done. Gateway restart needed to apply changes." -3. Let the main session do the restart after all sub-agents finish +3. Let Bates (main session) do the restart after all sub-agents finish This rule is non-negotiable. Include it in every sub-agent task prompt. -## CRITICAL: Immediate Delegation Rule +## Delegation Policy: The 30-Second Rule -**When the user asks for ANY multi-step task, spawn a sub-agent IMMEDIATELY in the same turn. Do NOT investigate, read files, run commands, or edit documentation yourself first.** +**Principle: Will this block the main session for over 30 seconds? If yes → delegate. If no → just do it.** -The ONLY actions in the main session should be: acknowledge, `sessions_spawn`, report results. Nothing else. +### Do it yourself in the main session when: +- You can finish in under ~30 seconds total (even if it's 3-4 tool calls) +- Single-purpose lookups: check calendar, read a file, send a message, quick status check +- Quick follow-ups: "send that email", "rerun that cron", "check that log" +- Don't delegate trivial work — spawning overhead wastes Robert's time -**BEHAVIORAL RULE:** You MUST NOT use `exec`, `process`, `read`, `write`, `edit`, or `apply_patch` in the main session. If you are about to call any of these tools, STOP immediately and spawn a sub-agent instead. The sub-agent does the work. You coordinate. +### Delegate to a sub-agent when: +- The work will take >30 seconds and block you from responding to Robert +- Multi-source research, batch operations, complex data gathering +- Email workflows with attachments, uploads, or multi-step processing +- Spawn in the SAME turn as your acknowledgment -**Your acknowledgment + spawn should happen in ONE turn. Never take 2+ turns before spawning.** +### Sub-agents MUST NOT spawn their own sub-agents +maxSpawnDepth is set to 1. Sub-agents do the work directly. If a sub-agent thinks it needs to delegate, it should do the work itself instead. -**If uncertain whether to delegate, ALWAYS delegate. The cost of keeping the main session free is zero. The cost of blocking it is total: the user cannot interact with you while you are working.** - -### What Triggers Immediate Delegation - -This rule applies to **sub-agent-eligible tasks** requiring >1 tool call, specifically: - -- **Simple lookups:** Calendar checks, task status, single API calls -- **Quick data gathering:** <5 steps, no complex logic -- **Debugging/error investigation:** Finding and analyzing error logs +### What triggers delegation (>30s blocking work): **EXCEPTIONS: Delegate to Claude Code Instead** @@ -48,7 +49,7 @@ The following tasks do **NOT** trigger immediate sub-agent delegation. They foll ### Claude Code Skills Cross-Reference -When delegating Claude Code work, **always READ the relevant skill file first** -- it contains task-specific instructions, templates, and best practices. +When delegating Claude Code work, **always READ the relevant skill file first** — it contains task-specific instructions, templates, and best practices. | Task Type | Skill File | Examples | |-----------|-----------|----------| @@ -107,27 +108,39 @@ Use the **`sessions_spawn` tool** for simple, multi-step tasks. Do NOT use `open | Parameter | Required | Description | |-----------|----------|-------------| | `task` | Yes | The full prompt/instructions for the sub-agent | -| `label` | No | Short identifier (e.g., "email-search-acme") | -| `model` | No | Override model. Default from config. Rarely needed. | +| `label` | No | Short identifier (e.g., "email-search-solatio") | +| `model` | No | Override model. Sub-agents use their configured default from gateway. Rarely needed. | | `thinking` | No | "off", "low", "medium", "high". Default: off | | `runTimeoutSeconds` | No | Total run timeout | | `cleanup` | No | "delete" (default) or "keep" | -**IMPORTANT:** Do NOT pass `agentId`. Omit it entirely. The sub-agent runs under your own agent with the default model from gateway config. Passing `agentId` causes a "forbidden" error. +**IMPORTANT: Use deputy agents.** Pass `agentId` to route work to the right deputy. Each deputy has its own model and persona. Pick the best fit: + +| Deputy | Model | Best for | +|--------|-------|----------| +| `nova` | Codex 5.3 | Research, web search, data gathering | +| `amara` | Sonnet 4.6 | Email drafting, writing, communication | +| `jules` | Sonnet 4.6 | Analysis, reports, financial work | +| `dash` | Sonnet 4.6 | Quick tasks, status checks, lookups | +| `kira` | Sonnet 4.6 | Creative work, presentations | +| `archer` | Codex 5.3 | Technical research, code review | + +If unsure, use `nova` (research) or `amara` (writing). Do NOT omit `agentId` — that wastes Opus tokens running sub-agent work on the main agent's expensive model. ### Example Call -To search emails for a specific topic across all folders: +To check calendar for appointments in the next week and compile a summary: ``` Tool: sessions_spawn { - "task": "Search {{USER_EMAIL}} for all emails matching 'Acme' across ALL folders (inbox, sent, subfolders). Use {{MAIL_MCP_SERVER}}.\n\nStep 1 -- Search: Call list-mail-messages with search='\"Acme\"' top=20 select='[\"subject\",\"from\",\"receivedDateTime\",\"hasAttachments\",\"bodyPreview\"]'. This searches ALL folders like Outlook does. Do NOT use list-mail-folder-messages (that only searches one folder).\n\nStep 2 -- Attachments: For emails where hasAttachments=true, call list-mail-attachments with the messageId and pipe through jq to get only metadata: jq '[.value[] | select(.isInline == false) | {id, name, size}]'. Then download each using: ~/.openclaw/scripts/save-attachment.sh {{MAIL_MCP_SERVER}} /tmp/\n\nStep 3 -- Upload to OneDrive: Upload each attachment and a summary file to OneDrive:\n~/.openclaw/scripts/graph-api.sh PUT \"/me/drive/root:/drafts/Sales/Acme/:/content\" @/tmp/\n\nStep 4 -- Summary: Write a Markdown summary to /tmp/acme-summary.md listing all emails (subject, date, sender, snippet) and attachment file paths. Upload this summary to OneDrive at drafts/Sales/Acme/SUMMARY.md. Clean up /tmp files.\n\nOUTPUT FORMAT: Return your response in two sections:\n## Results\n[Summary of emails found, attachments downloaded, files uploaded]\n## Learnings\nClassify anything new using these tags:\n- [contact] Name - role, email, relationship (source: email/calendar/etc)\n- [fact] Key information (source: where found)\n- [deadline] Date/time commitment (source: where found)\n- [decision] Choice or commitment made (source: where found)\n- [pattern] Recurring process observed (source: where found)\nIf nothing new, write: No new learnings.", - "label": "email-search-acme" + "agentId": "nova", + "task": "Search rk@fdesk.tech for all emails matching 'Solatio' across ALL folders (inbox, sent, subfolders). Use ms365-fdesk-reader.\n\nStep 1 — Search: Call list-mail-messages with search='\"Solatio\"' top=20 select='[\"subject\",\"from\",\"receivedDateTime\",\"hasAttachments\",\"bodyPreview\"]'. This searches ALL folders like Outlook does. Do NOT use list-mail-folder-messages (that only searches one folder).\n\nStep 2 — Attachments: For emails where hasAttachments=true, call list-mail-attachments with the messageId and pipe through jq to get only metadata: jq '[.value[] | select(.isInline == false) | {id, name, size}]'. Then download each using: ~/.openclaw/scripts/save-attachment.sh ms365-fdesk-reader /tmp/\n\nStep 3 — Upload to OneDrive: Upload each attachment and a summary file to Bates's OneDrive:\n~/.openclaw/scripts/graph-api.sh PUT \"/me/drive/root:/drafts/Sales/Solatio/:/content\" @/tmp/\n\nStep 4 — Summary: Write a Markdown summary to /tmp/solatio-summary.md listing all emails (subject, date, sender, snippet) and attachment file paths. Upload this summary to OneDrive at drafts/Sales/Solatio/SUMMARY.md. Clean up /tmp files.\n\nOUTPUT FORMAT: Return your response in two sections:\n## Results\n[Summary of emails found, attachments downloaded, files uploaded]\n## Learnings\nClassify anything new using these tags:\n- [contact] Name - role, email, relationship (source: email/calendar/etc)\n- [fact] Key information (source: where found)\n- [deadline] Date/time commitment (source: where found)\n- [decision] Choice or commitment made (source: where found)\n- [pattern] Recurring process observed (source: where found)\nIf nothing new, write: No new learnings.", + "label": "email-search-solatio" } ``` -The sub-agent runs on **{{PRIMARY_MODEL}} by default** (configured in gateway). +The sub-agent runs on its **configured default model** from the gateway. No need to specify a model override. **CRITICAL for email search tasks:** Always instruct the sub-agent to use `list-mail-messages` (cross-folder), NOT `list-mail-folder-messages` (single folder). Users expect results matching Outlook's search bar, which searches all folders. @@ -135,28 +148,28 @@ The sub-agent runs on **{{PRIMARY_MODEL}} by default** (configured in gateway). When a sub-agent completes and the system injects a [System Message] with results: -1. ALWAYS deliver a text summary to the user. No exceptions. +1. ALWAYS deliver a text summary to Robert. No exceptions. 2. Do NOT reply NO_REPLY. The Adaptive Card is a preview, not a replacement for your text response. 3. If multiple sub-agents are running, deliver each result as it arrives. Don't wait for others. 4. Include key findings in your summary, not just "task completed". -5. If the result needs the user's decision, explicitly ask for it. +5. If the result needs Robert's decision, explicitly ask for it. 6. Persist learnings (next section) AFTER delivering the result, not instead of it. ## Post-Completion: Persist Learnings (MANDATORY) Every sub-agent task prompt must end with the OUTPUT FORMAT block (see SOUL.md). This forces the sub-agent to return classified learnings alongside its results. -When the sub-agent returns, **before reporting to the user**: +When the sub-agent returns, **before reporting to Robert**: 1. Read the `## Learnings` section from the sub-agent's response 2. Append tagged entries to `observations/findings.md` (contacts, facts, deadlines, decisions) 3. Append patterns to `observations/patterns.md` 4. Append file paths to `observations/file-index.md` -This is a single-step operation (3 file appends) that runs in the main session. Do NOT skip it. Sub-agent sessions auto-archive after 60 minutes -- unclassified knowledge is permanently lost. +This is a single-step operation (3 file appends) that runs in the main session. Do NOT skip it. Sub-agent sessions auto-archive after 60 minutes — unclassified knowledge is permanently lost. ## Reporting -When you spawn a sub-agent, tell the user what you delegated and the label. The user can check the dashboard at /dashboard (Active Agents panel shows sub-agents with live progress). +When you spawn a sub-agent, tell Robert what you delegated and the label. If Robert asks about sub-agent status, he can check the dashboard at /dashboard (Active Agents panel shows sub-agents with live progress). ## Constraints @@ -168,10 +181,10 @@ When you spawn a sub-agent, tell the user what you delegated and the label. The **Spawn immediately when:** -1. Debugging or investigating errors/logs (<5 steps) -2. Simple multi-step data gathering (calendar + task status, <5 steps) -3. Quick lookups requiring >1 API call but straightforward logic -4. Any task where binary/base64 data would enter context +1. Multi-source research or data gathering that will take >30 seconds +2. Batch processing, complex searches across multiple APIs +3. Any task where binary/base64 data would enter context +4. Debugging or investigation requiring many tool calls **Do NOT spawn a sub-agent when:** @@ -179,14 +192,15 @@ When you spawn a sub-agent, tell the user what you delegated and the label. The - Task involves Office files: .docx, .xlsx, .pptx (use Claude Code via rules/delegation.md) - Task requires code writing (use Claude Code via rules/delegation.md) - Task is complex, legal, or requires conditional logic (use Claude Code via rules/delegation.md) +- **Task is quick** — checking calendar, reading one file, sending a message. Just do it yourself. -**Main session reserved for:** quick clarifications, decisions needing user input, sub-agent/Claude Code coordination, single-step operations. +**Main session reserved for:** quick work (<30s), clarifications, decisions, coordination. **For email, file, code, or complex work:** Read `rules/delegation.md` and use the Claude Code workflow instead. ## Date Formats -**The user uses European format (dd/mm/yy).** Convert before passing to sub-agents: 01/11/25 = November 1, 2025 (NOT January 11). +**Robert uses European format (dd/mm/yy).** Convert before passing to sub-agents: 01/11/25 = November 1, 2025 (NOT January 11). ## Sub-Agent Prompt Best Practices @@ -199,9 +213,9 @@ Write the task prompt as a complete, self-contained specification: - Tell it to save files directly to disk, never load binary data into context - End with "Return only [X] when done" to keep the response small -**Bad:** "Search emails for Acme" -**Bad:** "Search {{USER_EMAIL}} inbox for emails matching 'Acme'" (misses Sent, subfolders) -**Good:** "Search {{USER_EMAIL}} for all emails matching 'Acme' across ALL folders. Use {{MAIL_MCP_SERVER}}. Call list-mail-messages with search='\"Acme\"' (cross-folder search). For emails with hasAttachments=true, download attachments using ~/.openclaw/scripts/save-attachment.sh and upload to OneDrive at drafts/Sales/Acme/. Return a Markdown summary." +**Bad:** "Search emails for Solatio" +**Bad:** "Search rk@fdesk.tech inbox for emails matching 'Solatio'" (misses Sent, subfolders) +**Good:** "Search rk@fdesk.tech for all emails matching 'Solatio' across ALL folders. Use ms365-fdesk-reader. Call list-mail-messages with search='\"Solatio\"' (cross-folder search). For emails with hasAttachments=true, download attachments using ~/.openclaw/scripts/save-attachment.sh and upload to OneDrive at drafts/Sales/Solatio/. Return a Markdown summary." ## Code vs Analysis @@ -212,7 +226,7 @@ Write the task prompt as a complete, self-contained specification: ## Boundaries Sub-agents inherit all boundaries from SOUL.md: -- Read-only on the user's accounts -- Write only from the designated sender address -- No messages to anyone but the user +- Read-only on Robert's accounts +- Write only from bates@vernot.com +- No external messages to anyone except allowed addresses (`rk@vernot.com`, `rk@fdesk.tech`); operational updates should be posted in Bates Operations Teams channels and bot chat per ground rules - All data confidential diff --git a/bates-enhance/integrations/agents/cron-jobs-agents.json b/bates-enhance/integrations/agents/cron-jobs-agents.json index ee0be38..5f883ce 100644 --- a/bates-enhance/integrations/agents/cron-jobs-agents.json +++ b/bates-enhance/integrations/agents/cron-jobs-agents.json @@ -1,38 +1,41 @@ [ { - "name": "mira-heartbeat", - "schedule": "0 */4 * * *", + "name": "conrad-heartbeat", + "schedule": {"kind": "every", "everyMs": 3600000}, "tz": "{{USER_TZ}}", - "message": "You are Mira, a specialized deputy agent for Technology & Infrastructure. Read {{HOME}}/.openclaw/agents/mira/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Conrad, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/conrad/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "conrad", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true } }, { - "name": "conrad-heartbeat", - "schedule": "5 */4 * * *", + "name": "soren-heartbeat", + "schedule": {"kind": "every", "everyMs": 3600000}, "tz": "{{USER_TZ}}", - "message": "You are Conrad, a specialized deputy agent for Operations A. Read {{HOME}}/.openclaw/agents/conrad/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Soren, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/soren/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "soren", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true } }, { - "name": "soren-heartbeat", - "schedule": "10 */4 * * *", + "name": "mira-heartbeat", + "schedule": {"kind": "every", "everyMs": 3600000}, "tz": "{{USER_TZ}}", - "message": "You are Soren, a specialized deputy agent for Operations B. Read {{HOME}}/.openclaw/agents/soren/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Mira, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/mira/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "mira", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -40,12 +43,13 @@ }, { "name": "amara-heartbeat", - "schedule": "15 */4 * * *", + "schedule": {"kind": "every", "everyMs": 7200000}, "tz": "{{USER_TZ}}", - "message": "You are Amara, a specialized deputy agent for Operations C. Read {{HOME}}/.openclaw/agents/amara/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Amara, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/amara/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "amara", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -53,12 +57,13 @@ }, { "name": "jules-heartbeat", - "schedule": "20 */4 * * *", + "schedule": "0 8,14,19 * * *", "tz": "{{USER_TZ}}", - "message": "You are Jules, a specialized deputy agent for Personal Affairs. Read {{HOME}}/.openclaw/agents/jules/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Jules, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/jules/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "jules", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -66,12 +71,13 @@ }, { "name": "dash-heartbeat", - "schedule": "25 */4 * * *", + "schedule": "0 10 * * *", "tz": "{{USER_TZ}}", - "message": "You are Dash, a specialized deputy agent for DevOps & Rollout. Read {{HOME}}/.openclaw/agents/dash/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Dash, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/dash/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "dash", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -79,12 +85,13 @@ }, { "name": "mercer-heartbeat", - "schedule": "30 */4 * * *", + "schedule": "30 8 * * *", "tz": "{{USER_TZ}}", - "message": "You are Mercer, a specialized deputy agent for Legal & Compliance. Read {{HOME}}/.openclaw/agents/mercer/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Mercer, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/mercer/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "mercer", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -92,12 +99,13 @@ }, { "name": "kira-heartbeat", - "schedule": "35 */4 * * *", + "schedule": "10 9,13,17 * * *", "tz": "{{USER_TZ}}", - "message": "You are Kira, a specialized deputy agent for Content & Social Media. Read {{HOME}}/.openclaw/agents/kira/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Kira, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/kira/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "kira", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -105,12 +113,13 @@ }, { "name": "nova-heartbeat", - "schedule": "40 */4 * * *", + "schedule": "0 8 * * *", "tz": "{{USER_TZ}}", - "message": "You are Nova, a specialized deputy agent for Research & Discovery. Read {{HOME}}/.openclaw/agents/nova/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Nova, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/nova/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "nova", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -118,12 +127,13 @@ }, { "name": "paige-heartbeat", - "schedule": "45 */4 * * *", + "schedule": "20 6 * * *", "tz": "{{USER_TZ}}", - "message": "You are Paige, a specialized deputy agent for Finance. Read {{HOME}}/.openclaw/agents/paige/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Paige, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/paige/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "paige", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -131,12 +141,13 @@ }, { "name": "quinn-heartbeat", - "schedule": "50 */4 * * *", + "schedule": "40 8 * * *", "tz": "{{USER_TZ}}", - "message": "You are Quinn, a specialized deputy agent for HR & People. Read {{HOME}}/.openclaw/agents/quinn/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Quinn, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/quinn/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "quinn", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -144,12 +155,13 @@ }, { "name": "archer-heartbeat", - "schedule": "55 */4 * * *", + "schedule": "15 9 * * *", "tz": "{{USER_TZ}}", - "message": "You are Archer, a specialized deputy agent for Documentation. Read {{HOME}}/.openclaw/agents/archer/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", - "agentId": "main", + "message": "You are Archer, a specialized deputy agent. Read {{HOME}}/.openclaw/agents/archer/HEARTBEAT.md and follow it strictly. DO NOT delegate or spawn sub-agents. If you find something that needs attention, report it clearly and concisely. If nothing needs attention, reply NO_REPLY.", + "agentId": "archer", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -157,12 +169,14 @@ }, { "name": "daily-standup-compile", - "schedule": "0 9 * * 1-5", + "schedule": "30 6 * * *", "tz": "{{USER_TZ}}", - "message": "DO NOT delegate or spawn sub-agents. Compile the daily standup from all deputies. Collect recent observations from ~/.openclaw/agents/*/workspace/observations/, summarize status, flag blockers, and deliver a unified briefing. Keep under 1000 characters.", + "message": "Run the daily standup compilation. Execute: bash ~/.openclaw/scripts/collect-standups.sh && bash ~/.openclaw/scripts/compile-briefing.sh\n\nThen read the output and include the deputy standups in the morning briefing to {{USER_NAME}}. If any deputy reported blockers or escalations, flag them prominently. Post the compiled briefing to {{USER_NAME}} via Teams.", "agentId": "main", "sessionTarget": "isolated", + "enabled": false, "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -170,12 +184,13 @@ }, { "name": "message-router", - "schedule": "*/15 * * * *", + "schedule": {"kind": "every", "everyMs": 900000}, "tz": "{{USER_TZ}}", - "message": "DO NOT delegate or spawn sub-agents. Run: bash ~/.openclaw/scripts/route-messages.sh 2>&1. If any escalations were routed, summarize them briefly. If no escalations, reply NO_REPLY.", - "agentId": "main", + "message": "Run: bash ~/.openclaw/scripts/route-messages.sh 2>&1. If any escalations were routed, summarize them briefly. If no escalations, reply NO_REPLY.", + "agentId": "soren", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", "to": "{{DELIVERY_TARGET}}", "bestEffort": true @@ -183,14 +198,57 @@ }, { "name": "weekly-strategy-review", - "schedule": "0 10 * * 1", + "schedule": "0 16 * * 5", "tz": "{{USER_TZ}}", - "message": "DO NOT delegate or spawn sub-agents. Weekly strategy alignment check. Review all deputy observations from ~/.openclaw/agents/*/workspace/observations/ from the past week. Identify cross-cutting themes, flag misalignments, and produce a strategic summary. Keep under 1500 characters.", + "message": "Run the weekly strategy review. Collect weekly updates from all specialist agents by reading their outbox/weekly-update.md files at ~/.openclaw/agents/{mercer,kira,nova,paige,quinn,archer}/outbox/weekly-update.md. Also read the week's daily standup files from ~/.openclaw/shared/standups/. Compile a CEO Weekly Dashboard covering: key metrics per business, highlights, risks, recommendations, and specialist intelligence summaries. Post to {{USER_NAME}} via Teams and save to OneDrive at drafts/Reports/weekly-review-YYYY-MM-DD.md.", "agentId": "main", "sessionTarget": "isolated", "delivery": { + "mode": "announce", "channel": "{{PRIMARY_CHANNEL}}", - "to": "{{DELIVERY_TARGET}}", + "to": "{{DELIVERY_CONVERSATION}}", + "bestEffort": true + } + }, + { + "name": "weekly-efficiency-audit", + "schedule": "0 14 * * 5", + "tz": "{{USER_TZ}}", + "message": "DO NOT delegate or spawn sub-agents. Do all work directly.\n\nRun a comprehensive efficiency audit for the past 7 days. Read skills/efficiency-audit/SKILL.md for output format.\n\n## Data Sources (check ALL of these)\n\n1. **Cursor transcripts** (observations/cursor/): Analyze coding patterns, repeated debugging, context-switching\n2. **Sent emails** (ms365-reader sentitems + ms365-fdesk-reader sentitems, top=50 each): Repeated formats, manual follow-ups\n3. **Calendar** (all calendars): Meeting patterns, prep time, gaps\n4. **Planner tasks**: Task staleness, completion rates\n5. **GitHub commits**: Commit frequency, PR patterns\n6. **Cron job outputs**: Which crons are useful vs noise?\n\n## Output\n\nSave full report to workspace/reports/efficiency-audit-YYYY-MM-DD.md\nSend a concise summary to {{USER_NAME}} via Teams with top findings.", + "agentId": "main", + "sessionTarget": "isolated", + "delivery": { + "mode": "announce", + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_CONVERSATION}}", + "bestEffort": true + } + }, + { + "name": "daily-pattern-observer", + "schedule": "30 13 * * *", + "tz": "{{USER_TZ}}", + "message": "DO NOT delegate. You are Jules, running the daily pattern observer.\n\n## Sources to Read\n1. ~/.openclaw/shared/memory/fdesk/deal-pipeline.md (Conrad's findings)\n2. ~/.openclaw/shared/memory/fdesk/regulatory-updates.md (Mercer's findings)\n3. ~/.openclaw/shared/memory/global/market-intel-*.md (Nova's findings, most recent)\n4. ~/.openclaw/shared/memory/global/coding-activity-*.md (Mira's findings, most recent)\n5. ~/.openclaw/shared/memory/global/calendar-overview.md (calendar findings)\n6. ~/.openclaw/workspace/drafts/ (list files from last 24h)\n7. ~/.openclaw/workspace/observations/last-checkin.json (latest proactive checkin state)\n\nRead as many of these as exist. Skip any that are missing.\n\n## Analysis\nSynthesize into a pattern observation:\n- What is {{USER_NAME}} focused on right now? (based on email drafts, calendar, coding)\n- What threads are heating up? (multiple emails from same contacts)\n- What is being neglected? (ventures with no activity)\n- What could {{ASSISTANT_NAME}} proactively do? (draft a follow-up, research a topic, prepare for a meeting)\n\n## Persistence\nAppend a dated section to ~/.openclaw/workspace/observations/findings.md with tagged entries.\nAppend to ~/.openclaw/workspace/observations/patterns.md if new patterns found.\n\n## Output (max 500 chars, delivered to Teams)\nFOCUS: [what {{USER_NAME}} is working on]\nHOT: [threads needing attention]\nGAP: [neglected areas]\nOPPORTUNITY: [what {{ASSISTANT_NAME}} could proactively do]\n\nIf nothing meaningful found, respond NO_REPLY.", + "agentId": "jules", + "sessionTarget": "isolated", + "delivery": { + "mode": "announce", + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_CONVERSATION}}", + "bestEffort": true + } + }, + { + "name": "work-pattern-analyzer", + "schedule": "0 10 * * 2,5", + "tz": "{{USER_TZ}}", + "message": "DO NOT delegate. You are Kira, running the creative work pattern analysis.\n\n## What to Analyze\n1. Read ~/.openclaw/workspace/drafts/ -- list email draft files from the last 7 days. Group by recipient domain and topic.\n2. Read ~/.openclaw/shared/memory/global/coding-activity-*.md files from the last 7 days.\n3. Read ~/.openclaw/shared/memory/fdesk/deal-pipeline.md for active deals.\n4. Read ~/.openclaw/workspace/reports/ -- last 2 reports for context.\n5. Read ~/.openclaw/shared/memory/global/content-ideas.md (your prior ideas).\n\nRead as many as exist. Skip missing files.\n\n## Creative Analysis\nFor each pattern, ask:\n- Is {{USER_NAME}} doing something repeatedly that could be templated?\n- Is {{USER_NAME}} creating content that could be repurposed?\n- Is there a meeting coming up that needs prep {{ASSISTANT_NAME}} could start now?\n- What would a great COO proactively prepare for the CEO based on these patterns?\n\n## Persistence\nWrite creative suggestions to ~/.openclaw/shared/memory/global/proactive-suggestions.md (overwrite, keep last 10 suggestions).\nAppend new content ideas to ~/.openclaw/shared/memory/global/content-ideas.md.\n\n## Output (max 500 chars, delivered to Teams)\nTop 3 proactive actions:\n1. [ACTION]: [specific suggestion with context]\n2. [ACTION]: [specific suggestion with context]\n3. [ACTION]: [specific suggestion with context]\n\nIf nothing actionable found, respond NO_REPLY.", + "agentId": "kira", + "sessionTarget": "isolated", + "delivery": { + "mode": "announce", + "channel": "{{PRIMARY_CHANNEL}}", + "to": "{{DELIVERY_CONVERSATION}}", "bestEffort": true } } diff --git a/bates-enhance/integrations/agents/heartbeats/amara-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/amara-heartbeat.md new file mode 100644 index 0000000..7c4b5fe --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/amara-heartbeat.md @@ -0,0 +1,44 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Escola Email Scan (REQUIRED) +Check rk@vernot.com inbox via ms365-reader for escola-related emails. +Use: list-mail-messages with search='"escola" OR "school" OR "Caravela" OR "DGEstE" OR "trilingual"' top=10 + +Also check for emails from known escola contacts (parents, teachers, municipality). + +For each new/unread escola-related email: +- Extract contact info (name, email, role) and append to ~/.openclaw/shared/memory/escola/contacts.md +- Extract deadlines or event dates and append to ~/.openclaw/shared/memory/escola/upcoming.md +- If urgent (deadline <48h, parent complaint, regulatory): write to outbox/escalate-TIMESTAMP.md + +## 2. Planner Check +Check Escola Caravela Planner tasks (planId: HXpYhx5p5EWodt0e_KE0OZcAC8ze) via ms365-assistant. +Note overdue tasks and upcoming deadlines. Append to ~/.openclaw/shared/memory/escola/upcoming.md. + +## 3. Knowledge Persistence +Append new contacts, deadlines, facts to ~/.openclaw/workspace/observations/findings.md with tags: +- [contact] Name - role, email (source: escola email) +- [deadline] Date - what (source: escola email/planner) + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:4406a4934a234cd4bc80fad5e31d4669@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Amara] [DATE]
[SUMMARY]"}}' +``` +Channel: escola-ops (19:4406a4934a234cd4bc80fad5e31d4669@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the escola-ops Teams channel. +- If urgent items: "[URGENT] [sender]: [subject] -- [action needed]" +- If new contacts or deadlines: "Escola update: [N] new items tracked" +- If nothing new: NO_REPLY + +## 6. Daily Standup (first run after 06:00) +Write outbox/standup.md: +- New escola communications tracked +- Upcoming events/deadlines +- Blockers diff --git a/bates-enhance/integrations/agents/heartbeats/archer-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/archer-heartbeat.md new file mode 100644 index 0000000..1359766 --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/archer-heartbeat.md @@ -0,0 +1,53 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Documentation Gap Analysis (REQUIRED) +Review recent code review proposals in ~/.openclaw/workspace/proposals/ (last 5 files by date). +Review recent cursor transcripts in ~/.openclaw/workspace/observations/cursor/ (last 3 files by date). + +For each, identify: +- Recurring code patterns that need SOPs or templates +- Errors or debugging sessions that could be documented to prevent recurrence +- Architecture decisions made in code that aren't documented anywhere +- Missing API documentation for new endpoints + +Write findings to ~/.openclaw/shared/memory/global/documentation-gaps.md: +``` +# Documentation Gaps - YYYY-MM-DD +## Code Patterns Needing SOPs +- [pattern]: [where seen] -- [what SOP would prevent] +## Undocumented Decisions +- [decision]: [in which code/PR] -- [what to document] +## Missing Docs +- [endpoint/feature]: [priority] +``` + +## 2. Process Improvement +Check ~/.openclaw/shared/memory/global/coding-activity-*.md (Mira's observations) for recurring issues. +If same error type appears 3+ times: propose a prevention automation or checklist. + +## 3. Knowledge Persistence +Append documentation-related findings to ~/.openclaw/workspace/observations/findings.md: +- [pattern] Documentation: [what needs documenting] (source: code review/cursor) + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Archer] [DATE]
[SUMMARY]"}}' +``` +Channel: cross-business (19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the cross-business Teams channel. +- If gaps found: "Docs: [N] gaps identified. Top: [most critical]" +- If automation opportunity: "[SOP] Recurring issue: [pattern] -- proposed fix: [solution]" +- If nothing new: NO_REPLY + +## 6. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Documentation gaps found +- SOPs created or proposed +- Knowledge base health diff --git a/bates-enhance/integrations/agents/heartbeats/conrad-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/conrad-heartbeat.md new file mode 100644 index 0000000..f15fa13 --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/conrad-heartbeat.md @@ -0,0 +1,43 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. +If feedback says to change approach, adjust accordingly. + +## 1. Email Scan (REQUIRED) +Check cp-desk@fdesk.tech inbox (top 10) and rk@fdesk.tech inbox (top 10) via ms365-fdesk-reader. +Use: list-mail-messages with top=10 select='["subject","from","receivedDateTime","hasAttachments","bodyPreview","isRead"]' + +For each new/unread email since last check: +- **Law firm, investor, counterparty, or regulator**: Write escalation to outbox/escalate-TIMESTAMP.md with sender, subject, urgency assessment, recommended action +- **Florian/Till/Kristina about pipeline**: Extract deal status and append to ~/.openclaw/shared/memory/fdesk/deal-pipeline.md +- **PwC/BNY/CSSF (compliance)**: Note deadlines and append to ~/.openclaw/shared/memory/fdesk/regulatory-updates.md +- **Routine (newsletters, notifications)**: Skip + +## 2. Deal Pipeline Context +After scanning emails, write one sentence answering: "What is Robert likely dealing with in fDesk today?" Overwrite ~/.openclaw/shared/memory/fdesk/context-today.md with this context line (dated). + +## 3. Knowledge Persistence +If you found new contacts, deadlines, facts, or deal updates: +- Append tagged entries to ~/.openclaw/workspace/observations/findings.md +- Format: `- [tag] detail (source: email/calendar)` + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:35613cb0484c4387bd7f7d3e6059bf33@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Conrad] [DATE]
[SUMMARY]"}}' +``` +Channel: fdesk-ops (19:35613cb0484c4387bd7f7d3e6059bf33@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the fdesk-ops Teams channel. +- If escalations found: one line per item: "[URGENCY] sender: subject -- recommended action" +- If deal pipeline updated: "Pipeline updated: [summary of changes]" +- If nothing new: NO_REPLY + +## 6. Daily Standup (first run after 06:00) +Write outbox/standup.md: +- Completed: what was processed/escalated +- Planned: active deals and threads to monitor +- Blockers: anything needing Bates or Robert diff --git a/bates-enhance/integrations/agents/heartbeats/dash-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/dash-heartbeat.md new file mode 100644 index 0000000..95be4be --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/dash-heartbeat.md @@ -0,0 +1,42 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Community Monitoring (REQUIRED) +Use brave-search to check: +- OpenClaw GitHub: search "site:github.com openclaw" for recent discussions, issues, or PRs +- OpenClaw community: search "openclaw" for recent mentions, blog posts, or forum discussions + +For each notable finding: +- Summarize in 1-2 sentences +- Rate importance: HIGH (security issue, breaking change), MEDIUM (feature request, community growth), LOW (general mention) +- Write to ~/.openclaw/shared/memory/global/openclaw-community.md (append dated entry) + +## 2. Meetup/Event Check +Search for upcoming OpenClaw or AI agent meetups in European cities (Berlin, Lisbon, Zurich, Brussels, Vienna, London). +If new events found, append to ~/.openclaw/shared/memory/global/openclaw-community.md. + +## 3. Knowledge Persistence +If new community findings: append to ~/.openclaw/workspace/observations/findings.md +- [fact] OpenClaw community: [finding] (source: web search) + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:447ce1f9a8f1420a9d60f82449d84d24@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Dash] [DATE]
[SUMMARY]"}}' +``` +Channel: bates-rollout (19:447ce1f9a8f1420a9d60f82449d84d24@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the bates-rollout Teams channel. +- If HIGH items: "[ALERT] OpenClaw: [issue summary]" +- If community activity: "Community: [N] new mentions. Notable: [summary]" +- If nothing new: NO_REPLY + +## 6. Daily Standup +Write outbox/standup.md: +- Community activity summary +- Upcoming events +- Blockers diff --git a/bates-enhance/integrations/agents/heartbeats/jules-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/jules-heartbeat.md new file mode 100644 index 0000000..250542e --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/jules-heartbeat.md @@ -0,0 +1,63 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Calendar Overview (REQUIRED) +Check all calendars: +- rk@vernot.com calendar via ms365-reader (today + next 3 days) +- rk@fdesk.tech calendar via ms365-fdesk-reader (today + next 3 days) + +For each event: note time, subject, attendees, location. +Detect conflicts (overlapping events across calendars). +Detect prep needs (meetings requiring background research or documents). + +Overwrite ~/.openclaw/shared/memory/global/calendar-overview.md with structured overview: +``` +# Calendar Overview - YYYY-MM-DD +## Today +- HH:MM [subject] (calendar: vernot/fdesk) [attendees if any] +## Tomorrow +- ... +## Next 2 Days +- ... +## Conflicts +- [any overlapping events] +## Prep Needed +- [meetings that need preparation, with context] +``` + +## 2. Pending Drafts Check +List files in ~/.openclaw/workspace/drafts/ modified in the last 48 hours. +Note which email drafts are still pending review (not yet sent). +Append pending drafts list to the calendar overview as a "## Pending Actions" section. + +## 3. Family Calendar (if google-api.sh available) +If ~/.openclaw/scripts/google-api.sh exists: +- Check kuzkofam@gmail.com calendar for family events +- Add to calendar overview under "## Family" + +## 4. Knowledge Persistence +If new commitments or deadlines found: append to ~/.openclaw/workspace/observations/findings.md +- [deadline] Date - what (source: calendar) + +## 5. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:719e9c4defd9450486716839ee8ff382@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Jules] [DATE]
[SUMMARY]"}}' +``` +Channel: private (19:719e9c4defd9450486716839ee8ff382@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 6. Output Format +This response is delivered to the private Teams channel. +- If conflicts: "[CONFLICT] [event1] overlaps with [event2] at [time]" +- If meetings today needing prep: "[PREP] [meeting] at [time] -- [what to prepare]" +- If pending drafts >48h old: "[STALE] [N] email drafts pending review" +- If nothing notable: NO_REPLY + +## 7. Daily Standup (first run after 06:00) +Write outbox/standup.md: +- Today's calendar summary +- Pending actions +- Blockers diff --git a/bates-enhance/integrations/agents/heartbeats/kira-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/kira-heartbeat.md new file mode 100644 index 0000000..2b4d920 --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/kira-heartbeat.md @@ -0,0 +1,44 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Content Opportunity Scan (REQUIRED) +Read Robert's recent sent emails for content that could be repurposed: +- Check ms365-reader sent items (top 10, last 48h) +- Check ms365-fdesk-reader sent items (top 10, last 48h) + +Look for: +- Emails where Robert explained something well (could become a LinkedIn post) +- Deal announcements or milestones (could become a case study) +- Technical explanations (could become a blog post for SynapseLayer) +- School updates (could become a marketing piece for Escola Caravela) + +## 2. Content Ideas Persistence +For each content opportunity found: +- Write a 2-sentence pitch (topic + angle + format) +- Append to ~/.openclaw/shared/memory/global/content-ideas.md with date and source +- Tag with venture: [fDesk] [Synapse] [Escola] [Personal Brand] + +## 3. Brand Consistency Check +If Robert posted on LinkedIn recently (search brave-search: "Robert Koller linkedin"), note the topic and tone. Check for consistency with existing content strategy. + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Kira] [DATE]
[SUMMARY]"}}' +``` +Channel: cross-business (19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the cross-business Teams channel. +- If content ideas found: "Content: [N] ideas. Top: [best pitch in 1 line]" +- If brand opportunity: "[OPPORTUNITY] [specific content suggestion]" +- If nothing new: NO_REPLY + +## 6. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Content ideas generated this week +- Posts published (if tracked) +- Upcoming content calendar diff --git a/bates-enhance/integrations/agents/heartbeats/mercer-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/mercer-heartbeat.md new file mode 100644 index 0000000..97ca195 --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/mercer-heartbeat.md @@ -0,0 +1,52 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Regulatory Scan (REQUIRED) +Use brave-search to check for regulatory developments: +- "CSSF Luxembourg" + recent news (fDesk regulatory) +- "EU securitization regulation" OR "STS framework" + recent news +- "GDPR enforcement" + recent news (SynapseLayer data protection) +- "Portuguese education ministry" OR "DGEstE" + recent news (Escola Caravela) + +For each relevant finding: +- Summarize in 2-3 sentences +- Note which venture it affects +- Rate impact: HIGH (requires action), MEDIUM (monitor), LOW (background) +- Append to ~/.openclaw/shared/memory/fdesk/regulatory-updates.md (dated entry) + +## 2. Compliance Calendar Check +Read ~/.openclaw/shared/memory/global/calendar-overview.md (Jules maintains this). +Cross-reference with known regulatory deadlines: +- UCI reporting deadlines +- CSSF filing deadlines +- Corporate tax deadlines +- GDPR-related obligations + +Write upcoming compliance deadlines to ~/.openclaw/shared/memory/fdesk/compliance-calendar.md. + +## 3. Knowledge Persistence +Append new regulatory facts to ~/.openclaw/workspace/observations/findings.md: +- [fact] Regulatory: [finding] (source: web search/CSSF) +- [deadline] [date] - [compliance obligation] (source: regulatory scan) + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Mercer] [DATE]
[SUMMARY]"}}' +``` +Channel: cross-business (19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the cross-business Teams channel. +- If HIGH-impact finding: "[REGULATORY] [jurisdiction]: [development] -- action needed by [date]" +- If compliance deadline approaching: "[DEADLINE] [date]: [obligation]" +- If nothing significant: NO_REPLY + +## 6. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Key regulatory developments +- Upcoming compliance dates +- Cross-business legal risks diff --git a/bates-enhance/integrations/agents/heartbeats/mira-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/mira-heartbeat.md new file mode 100644 index 0000000..3881d80 --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/mira-heartbeat.md @@ -0,0 +1,56 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. System Health (REQUIRED) +- Check disk space: df -h / | tail -1 +- Check gateway status: systemctl --user is-active openclaw-gateway +- Check dashboard-api.py on port 3939: curl -s http://localhost:3939/health || echo "DOWN" +- Check for failed cron jobs: read ~/.openclaw/cron/jobs.json, find jobs with consecutiveErrors > 0 + +## 2. Coding Activity Observation (REQUIRED) +Check for new Cursor transcripts in ~/.openclaw/workspace/observations/cursor/: +- Count files modified in the last 24 hours +- If new transcripts exist, read the 2-3 most recent JSON files +- Extract from each: what files/repos were being worked on, session names, lines added +- Identify: what errors or patterns appeared, what could Bates help with (templates, scripts, similar past work) + +Write findings to ~/.openclaw/shared/memory/global/coding-activity-YYYY-MM-DD.md (use today's date). Format: +``` +# Coding Activity - YYYY-MM-DD +## Sessions +- [session name]: [files changed], [lines added], branch [branch] +## Patterns +- [recurring issues, potential automation opportunities] +## Suggested Help +- [what Bates could proactively do based on this activity] +``` + +## 3. Cron Effectiveness (Monday only) +On Mondays, review cron job states: +- Which jobs have consecutiveErrors > 0? +- Which jobs have lastDurationMs > 120000? +- Which jobs produced NO_REPLY more than 5 times in a row? +Report anomalies. + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:447ce1f9a8f1420a9d60f82449d84d24@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Mira] [DATE]
[SUMMARY]"}}' +``` +Channel: bates-rollout (19:447ce1f9a8f1420a9d60f82449d84d24@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the bates-rollout Teams channel. +- If system issues: "[ALERT] [component]: [issue]" +- If coding activity observed: "Coding: [N] sessions, working on [repos]. Help opportunity: [X]" +- If cron issues (Monday): "Cron audit: [N] issues found" +- If all healthy and no new activity: NO_REPLY + +## 6. Daily Standup (first run after 09:00) +Write outbox/standup-YYYY-MM-DD.md: +- System status summary +- What was completed/monitored +- Blockers diff --git a/bates-enhance/integrations/agents/heartbeats/nova-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/nova-heartbeat.md new file mode 100644 index 0000000..1f08f89 --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/nova-heartbeat.md @@ -0,0 +1,49 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Context Gathering (REQUIRED) +Before searching the web, understand what Robert is working on right now: +- Read ~/.openclaw/shared/memory/fdesk/deal-pipeline.md (active deals) +- Read ~/.openclaw/shared/memory/fdesk/context-today.md (today's focus) +- List the 5 most recently modified files in ~/.openclaw/workspace/drafts/ +- Read ~/.openclaw/shared/memory/global/coding-activity-*.md (most recent, if exists) + +## 2. Targeted Research (REQUIRED) +Based on what you found in step 1, run up to 3 brave-search queries: +- If Robert drafted an email about a company: search "[company name] news [this week]" +- If a deal is in pipeline: search for the counterparty, industry segment, or regulatory developments +- If Escola Caravela activity found: search Portuguese education news, European school regulations +- If coding on NowTreasury/SynapseLayer: search for relevant fintech/AI infrastructure developments + +Do NOT run generic searches like "fintech news." Every query must be contextually informed by step 1. + +## 3. Knowledge Persistence (REQUIRED) +For each meaningful finding: +- Write a 2-3 sentence summary +- Note relevance to which venture (fDesk/Synapse/Escola) +- Rate: HIGH (Robert should know today), MEDIUM (useful context), LOW (background) +- Append to ~/.openclaw/shared/memory/global/market-intel-YYYY-MM-DD.md (use today's date) + +If HIGH-actionability item found, also write to outbox/escalate-market-TIMESTAMP.md. + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Nova] [DATE]
[SUMMARY]"}}' +``` +Channel: cross-business (19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the cross-business Teams channel. +- "[N] items found. [HIGH count] requiring attention." +- One-line summary of each HIGH item +- If nothing meaningful: NO_REPLY + +## 6. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Key findings this week +- Upcoming items on the radar +- Cross-business insights diff --git a/bates-enhance/integrations/agents/heartbeats/paige-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/paige-heartbeat.md new file mode 100644 index 0000000..c362ba5 --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/paige-heartbeat.md @@ -0,0 +1,46 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Financial Email Scan (REQUIRED) +Check rk@vernot.com inbox via ms365-reader for financial items: +- Search for: invoices, payment confirmations, bank notifications, subscription renewals, expense receipts +- Use: list-mail-messages with search='"invoice" OR "payment" OR "receipt" OR "subscription" OR "renewal" OR "Rechnung"' top=10 + +For each financial email found: +- Extract: amount, vendor/sender, due date (if any), category +- Append to ~/.openclaw/shared/memory/private/financial-items.md: + ``` + - [YYYY-MM-DD] [vendor] [amount] [category] [status: paid/pending/overdue] + ``` + +## 2. Subscription Monitoring +Note any subscription renewal or expiry warnings. These are time-sensitive: +- If expiry <7 days: write escalation to outbox/escalate-TIMESTAMP.md +- If auto-renewal success: just log in financial-items.md + +## 3. Knowledge Persistence +Append new financial facts to ~/.openclaw/workspace/observations/findings.md: +- [fact] Financial: [vendor] [amount] [status] (source: email) +- [deadline] [date] - payment due for [vendor] (source: email) + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:719e9c4defd9450486716839ee8ff382@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Paige] [DATE]
[SUMMARY]"}}' +``` +Channel: private (19:719e9c4defd9450486716839ee8ff382@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the private Teams channel. +- If overdue/expiring items: "[PAYMENT] [vendor]: [amount] due [date]" +- If new items tracked: "Finance: [N] items logged" +- If nothing new: NO_REPLY + +## 6. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Financial items tracked this week +- Upcoming payments/renewals +- Total spend by category (if enough data) diff --git a/bates-enhance/integrations/agents/heartbeats/quinn-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/quinn-heartbeat.md new file mode 100644 index 0000000..01efc1c --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/quinn-heartbeat.md @@ -0,0 +1,46 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. HR & People Scan (REQUIRED) +Use brave-search to check: +- "fDesk Luxembourg" + hiring OR careers (monitor if competitors are hiring) +- "Portuguese teacher recruitment" OR "international school teacher Portugal" (Escola hiring) +- "AI engineer hiring Europe" + trends (SynapseLayer talent market) + +For meaningful findings: +- Summarize in 1-2 sentences +- Note relevance: fDesk team, Escola teachers, Synapse engineering +- Append to ~/.openclaw/shared/memory/global/hr-insights.md (dated entry) + +## 2. Team Status Check +Check if any team-related emails mention: +- Contractor renewals or expirations +- Onboarding needs +- Performance-related discussions + +## 3. Knowledge Persistence +Append new HR facts to ~/.openclaw/workspace/observations/findings.md: +- [contact] Name - role, context (source: search/email) +- [fact] HR: [finding] (source: web search) + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Quinn] [DATE]
[SUMMARY]"}}' +``` +Channel: cross-business (19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the cross-business Teams channel. +- If actionable HR finding: "[HR] [finding] -- [recommended action]" +- If talent market insight: "Talent: [observation]" +- If nothing new: NO_REPLY + +## 6. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Hiring market observations +- Team-related items +- Upcoming contractor dates diff --git a/bates-enhance/integrations/agents/heartbeats/soren-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/soren-heartbeat.md new file mode 100644 index 0000000..60b5dc8 --- /dev/null +++ b/bates-enhance/integrations/agents/heartbeats/soren-heartbeat.md @@ -0,0 +1,71 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. +Known fix: Use owner `Kollerro`, repo `synapselayer` (NOT `org:SynapseLayer`). The `list-issues` tool fails due to missing issues:read scope -- use PRs and commits instead. + +## 1. GitHub Monitoring (REQUIRED) +Check BOTH repos: + +### A. github-synapselayer (owner: Kollerro, repo: synapselayer) +- Recent commits (list-commits, top 10) +- Open PRs (list-pull-requests) +- CI/CD status on latest commits + +### B. github-nowtreasury (owner: NowTreasury, repo: nowtreasury) +- Recent commits (list-commits, top 10) +- Open PRs (list-pull-requests) +- CI/CD status on latest commits + +Write structured status to ~/.openclaw/shared/memory/synapse/github-status.md: +``` +# GitHub Status - YYYY-MM-DD + +## SynapseLayer (Kollerro/synapselayer) +### Recent Commits +- [hash] [message] by [author] at [date] +### Open PRs +- #[number] [title] by [author] -- [status] +### CI Status +- [pass/fail details] + +## NowTreasury (NowTreasury/nowtreasury) +### Recent Commits +- [hash] [message] by [author] at [date] +### Open PRs +- #[number] [title] by [author] -- [status] +### CI Status +- [pass/fail details] + +## Observations +- [patterns: repeated fixes, stalled PRs, test failures] +``` + +## 2. Message Routing Check +Check all agent outbox/ directories for new escalation files: +- ~/.openclaw/agents/*/outbox/escalate-*.md +If found, note them -- the message-router cron handles delivery, but flag any that seem stale (>2h old). + +## 3. Knowledge Persistence +If new commits or PRs found: append to ~/.openclaw/workspace/observations/findings.md +- [fact] SynapseLayer: [what changed] (source: github) + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d13b55b2de1b4b559e46b3f50da65124@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Soren] [DATE]
[SUMMARY]"}}' +``` +Channel: synapse-ops (19:d13b55b2de1b4b559e46b3f50da65124@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the synapse-ops Teams channel. +- If new commits/PRs: "Synapse: [N] commits, [M] open PRs. NowTreasury: [N] commits, [M] open PRs. Latest: [commit summary]" +- If CI failures: "[ALERT] CI failing on [branch]: [error]" +- If nothing new: NO_REPLY + +## 6. Daily Standup (first run after 06:00) +Write outbox/standup.md: +- GitHub activity summary +- Any routing issues found +- Blockers diff --git a/bates-enhance/integrations/agents/scripts/collect-standups.sh b/bates-enhance/integrations/agents/scripts/collect-standups.sh index ee0d8d5..cb92fc4 100644 --- a/bates-enhance/integrations/agents/scripts/collect-standups.sh +++ b/bates-enhance/integrations/agents/scripts/collect-standups.sh @@ -1,113 +1,56 @@ #!/usr/bin/env bash -# collect-standups.sh -- Collect standup updates from all active deputies -# -# Usage: -# collect-standups.sh Print standups to stdout -# collect-standups.sh --output FILE Write standups to a file -# -# Reads each deputy's recent observations (last 24 hours) and produces -# a per-agent summary. Used by compile-briefing.sh and the daily-standup -# cron job. - +# Collect standup reports from deputy agents into a daily standup file set -euo pipefail -DEPUTIES=(mira conrad soren amara jules dash mercer kira nova paige quinn archer) -ROLES=( - "Technology & Infrastructure" - "Operations A" - "Operations B" - "Operations C" - "Personal Affairs" - "DevOps & Rollout" - "Legal & Compliance" - "Content & Social Media" - "Research & Discovery" - "Finance" - "HR & People" - "Documentation" -) - -OUTPUT_FILE="" -HOURS="${HOURS:-24}" - -# Parse arguments -while [[ $# -gt 0 ]]; do - case "$1" in - --output) - OUTPUT_FILE="$2" - shift 2 - ;; - --hours) - HOURS="$2" - shift 2 - ;; - *) - echo "Unknown argument: $1" >&2 - exit 1 - ;; - esac -done - -cutoff=$(date -d "${HOURS} hours ago" +%s 2>/dev/null || date -v-${HOURS}H +%s 2>/dev/null || echo 0) -now_fmt=$(date '+%Y-%m-%d %H:%M') - -# Collect output -output="" -output+="# Deputy Standup Collection\n" -output+="Generated: ${now_fmt}\n" -output+="Window: last ${HOURS} hours\n" -output+="\n" - -active_count=0 -idle_count=0 +AGENTS_DIR="/home/openclaw/.openclaw/agents" +STANDUPS_DIR="/home/openclaw/.openclaw/shared/standups" +TODAY=$(date +%Y-%m-%d) +OUTPUT="$STANDUPS_DIR/$TODAY.md" +DEPUTIES=(conrad soren amara jules dash mira mercer kira nova paige quinn archer) -for i in "${!DEPUTIES[@]}"; do - name="${DEPUTIES[$i]}" - role="${ROLES[$i]}" - obs_dir="$HOME/.openclaw/agents/${name}/workspace/observations" +mkdir -p "$STANDUPS_DIR" - output+="## ${name} (${role})\n" +echo "# Daily Standups — $TODAY" > "$OUTPUT" +echo "" >> "$OUTPUT" - if [[ ! -d "$obs_dir" ]]; then - output+=" No observations directory.\n\n" - (( idle_count++ )) || true - continue +collected=0 +for agent in "${DEPUTIES[@]}"; do + standup="$AGENTS_DIR/$agent/outbox/standup.md" + standup_dated="$AGENTS_DIR/$agent/outbox/standup-$TODAY.md" + # Prefer date-stamped standup, fall back to plain standup.md + if [[ -f "$standup_dated" ]]; then + standup="$standup_dated" fi - - # Find recent observation files - recent_found=0 - for f in "$obs_dir"/*.md "$obs_dir"/*.txt "$obs_dir"/*.json; do - [[ -f "$f" ]] || continue - mtime=$(stat -c %Y "$f" 2>/dev/null || echo 0) - if [[ "$mtime" -ge "$cutoff" ]]; then - fname=$(basename "$f") - output+=" - ${fname}:\n" - # Include first 10 lines of each observation - head_content=$(head -10 "$f" 2>/dev/null || true) - while IFS= read -r line; do - output+=" ${line}\n" - done <<< "$head_content" - output+="\n" - (( recent_found++ )) || true - fi - done - - if [[ "$recent_found" -eq 0 ]]; then - output+=" No recent observations.\n\n" - (( idle_count++ )) || true + if [[ -f "$standup" ]]; then + echo "## $agent" >> "$OUTPUT" + echo "" >> "$OUTPUT" + cat "$standup" >> "$OUTPUT" + echo "" >> "$OUTPUT" + rm "$standup" + collected=$((collected + 1)) else - (( active_count++ )) || true + echo "## $agent" >> "$OUTPUT" + echo "" >> "$OUTPUT" + echo "_No standup submitted._" >> "$OUTPUT" + echo "" >> "$OUTPUT" fi done -output+="---\n" -output+="Summary: ${active_count} active, ${idle_count} idle out of ${#DEPUTIES[@]} deputies.\n" +echo "Collected $collected/${#DEPUTIES[@]} standups → $OUTPUT" -# Output -if [[ -n "$OUTPUT_FILE" ]]; then - mkdir -p "$(dirname "$OUTPUT_FILE")" - printf "%b" "$output" > "$OUTPUT_FILE" - echo "Standup collection written to: ${OUTPUT_FILE}" -else - printf "%b" "$output" +# Post each standup to Teams standups channel +TEAM_ID="640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c" +CHANNEL_ID="19:c713974d563f428aae7b40ee9f931343@thread.tacv2" +GRAPH_API="$HOME/.openclaw/scripts/graph-api.sh" + +if [[ -x "$GRAPH_API" ]]; then + for agent in "${DEPUTIES[@]}"; do + content=$(sed -n "/^## $agent$/,/^## /{ /^## $agent$/d; /^## /d; p; }" "$OUTPUT" | sed '/^$/N;/^\n$/d') + if [[ -n "$content" && "$content" != *"No standup submitted"* ]]; then + html="

${agent^}

$(echo "$content" | head -25 | sed 's/&/\&/g; s//\>/g')
" + payload=$(jq -n --arg body "$html" '{body: {contentType: "html", content: $body}}') + "$GRAPH_API" POST "/teams/$TEAM_ID/channels/$CHANNEL_ID/messages" "$payload" >/dev/null 2>&1 || true + fi + done + echo "Posted standups to Teams channel" fi diff --git a/bates-enhance/integrations/agents/shared-memory/escola/contacts.md b/bates-enhance/integrations/agents/shared-memory/escola/contacts.md new file mode 100644 index 0000000..b907cf0 --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/escola/contacts.md @@ -0,0 +1,9 @@ +# Escola Contacts + + + +## Parents + + +## Staff & Partners + diff --git a/bates-enhance/integrations/agents/shared-memory/escola/upcoming.md b/bates-enhance/integrations/agents/shared-memory/escola/upcoming.md new file mode 100644 index 0000000..c67f9d5 --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/escola/upcoming.md @@ -0,0 +1,9 @@ +# Escola Upcoming Events & Deadlines + + + +## Deadlines + + +## Events + diff --git a/bates-enhance/integrations/agents/shared-memory/fdesk/compliance-calendar.md b/bates-enhance/integrations/agents/shared-memory/fdesk/compliance-calendar.md new file mode 100644 index 0000000..e6b2550 --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/fdesk/compliance-calendar.md @@ -0,0 +1,6 @@ +# fDesk Compliance Calendar + + + +## Upcoming Deadlines + diff --git a/bates-enhance/integrations/agents/shared-memory/fdesk/context-today.md b/bates-enhance/integrations/agents/shared-memory/fdesk/context-today.md new file mode 100644 index 0000000..eb2c98f --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/fdesk/context-today.md @@ -0,0 +1,4 @@ +# fDesk Context Today + + + diff --git a/bates-enhance/integrations/agents/shared-memory/fdesk/deal-pipeline.md b/bates-enhance/integrations/agents/shared-memory/fdesk/deal-pipeline.md new file mode 100644 index 0000000..65d6046 --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/fdesk/deal-pipeline.md @@ -0,0 +1,7 @@ +# fDesk Deal Pipeline + + + + +## Active Deals + diff --git a/bates-enhance/integrations/agents/shared-memory/fdesk/regulatory-updates.md b/bates-enhance/integrations/agents/shared-memory/fdesk/regulatory-updates.md new file mode 100644 index 0000000..0309c25 --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/fdesk/regulatory-updates.md @@ -0,0 +1,6 @@ +# fDesk Regulatory Updates + + + +## Updates + diff --git a/bates-enhance/integrations/agents/shared-memory/global/calendar-overview.md b/bates-enhance/integrations/agents/shared-memory/global/calendar-overview.md new file mode 100644 index 0000000..e8389d5 --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/global/calendar-overview.md @@ -0,0 +1,9 @@ +# Calendar Overview - YYYY-MM-DD + + + +## Today +## Tomorrow +## Next 2 Days +## Conflicts +## Prep Needed diff --git a/bates-enhance/integrations/agents/shared-memory/global/content-ideas.md b/bates-enhance/integrations/agents/shared-memory/global/content-ideas.md new file mode 100644 index 0000000..e8e8e9d --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/global/content-ideas.md @@ -0,0 +1,8 @@ +# Content Ideas + + + + + +## Ideas + diff --git a/bates-enhance/integrations/agents/shared-memory/global/documentation-gaps.md b/bates-enhance/integrations/agents/shared-memory/global/documentation-gaps.md new file mode 100644 index 0000000..762afdf --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/global/documentation-gaps.md @@ -0,0 +1,9 @@ +# Documentation Gaps + + + +## Code Patterns Needing SOPs + + +## Undocumented Decisions + diff --git a/bates-enhance/integrations/agents/shared-memory/global/hr-insights.md b/bates-enhance/integrations/agents/shared-memory/global/hr-insights.md new file mode 100644 index 0000000..874fb5e --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/global/hr-insights.md @@ -0,0 +1,9 @@ +# HR & Talent Insights + + + +## Talent Market + + +## Team Updates + diff --git a/bates-enhance/integrations/agents/shared-memory/global/openclaw-community.md b/bates-enhance/integrations/agents/shared-memory/global/openclaw-community.md new file mode 100644 index 0000000..73ac2dd --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/global/openclaw-community.md @@ -0,0 +1,9 @@ +# OpenClaw Community Activity + + + +## Recent Mentions + + +## Events + diff --git a/bates-enhance/integrations/agents/shared-memory/private/financial-items.md b/bates-enhance/integrations/agents/shared-memory/private/financial-items.md new file mode 100644 index 0000000..0e88f18 --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/private/financial-items.md @@ -0,0 +1,10 @@ +# Financial Items + + + + +## Pending Payments + + +## Recent Transactions + diff --git a/bates-enhance/integrations/agents/shared-memory/synapse/github-status.md b/bates-enhance/integrations/agents/shared-memory/synapse/github-status.md new file mode 100644 index 0000000..2a3f44e --- /dev/null +++ b/bates-enhance/integrations/agents/shared-memory/synapse/github-status.md @@ -0,0 +1,10 @@ +# GitHub Status - YYYY-MM-DD + + + +## SynapseLayer (owner/repo) +### Recent Commits +### Open PRs +### CI Status + +## Observations diff --git a/bates-enhance/integrations/agents/workspace-additions/rules/deputy-feedback-loop.md b/bates-enhance/integrations/agents/workspace-additions/rules/deputy-feedback-loop.md new file mode 100644 index 0000000..f17ed9e --- /dev/null +++ b/bates-enhance/integrations/agents/workspace-additions/rules/deputy-feedback-loop.md @@ -0,0 +1,34 @@ +# Deputy Feedback Loop + +## When Robert Responds to Deputy Output + +When Robert responds to a deputy's output (approves a suggestion, ignores a finding, asks for more detail, or rejects an approach), Bates must: + +1. Identify which deputy produced the original output +2. Write a feedback note to that deputy's inbox: + - `~/.openclaw/agents/{deputy}/inbox/feedback-TIMESTAMP.md` + - Include: what Robert said, whether the output was useful, what to do differently +3. Update `observations/patterns.md` with the meta-pattern: + - `[pattern] Robert approved/rejected [type of suggestion] from [deputy] (source: conversation)` + +Deputies check inbox/ at the start of every heartbeat and adjust their approach based on feedback. + +## Anti-Noise Feedback + +When Robert says "stop", "too much", "noise", or "ignore" about a category: +1. Add the category to `observations/last-checkin.json` suppressed_categories with 7-day expiry +2. Write to the responsible deputy's inbox: "Robert suppressed [category] for 7 days. Reduce frequency or stop this type of output." + +## Positive Feedback + +When Robert acts on a suggestion or says something was useful: +1. Note in `observations/patterns.md` what worked +2. Write to the responsible deputy's inbox: "Robert found [X] useful. Continue and expand this pattern." + +## Channel Findability + +All deputy output delivered to Teams channels is persistent and searchable. To make findings easy to locate later: +- Use consistent subject line formats in Teams posts +- Tag posts with venture name: [fDesk], [Synapse], [Escola], [Cross-Business] +- Include dates in all shared memory file entries +- The daily-pattern-observer synthesizes deputy output daily, creating a findable trail in cross-business channel diff --git a/bates-enhance/patches/README.md b/bates-enhance/patches/README.md index 421c6fd..a6754f0 100644 --- a/bates-enhance/patches/README.md +++ b/bates-enhance/patches/README.md @@ -78,7 +78,7 @@ The script applies patches in dependency order: ## Tested Versions -- v2026.2.19 through v2026.2.25 (all 9/9 patches apply cleanly) +- v2026.2.19 through v2026.2.26 (all 9/9 patches apply cleanly) ## Warning From 846b313911537d399fc67ad2cb746bd7a5a55afc Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Fri, 27 Feb 2026 09:18:03 +0000 Subject: [PATCH 25/63] Fix shared memory writes: instruct deputies to use exec tool The edit/write tools enforce workspace root boundary checks that block access to shared/ (symlink resolves outside agent workspace). Added directive to all 12 HEARTBEAT.md files instructing deputies to use exec (bash) for shared memory writes instead. Co-Authored-By: Claude Opus 4.6 --- .../integrations/agents/heartbeats/amara-heartbeat.md | 7 ++++--- .../integrations/agents/heartbeats/archer-heartbeat.md | 5 +++-- .../integrations/agents/heartbeats/conrad-heartbeat.md | 7 ++++--- .../integrations/agents/heartbeats/dash-heartbeat.md | 5 +++-- .../integrations/agents/heartbeats/jules-heartbeat.md | 7 ++++--- .../integrations/agents/heartbeats/kira-heartbeat.md | 3 ++- .../integrations/agents/heartbeats/mercer-heartbeat.md | 7 ++++--- .../integrations/agents/heartbeats/mira-heartbeat.md | 3 ++- .../integrations/agents/heartbeats/nova-heartbeat.md | 9 +++++---- .../integrations/agents/heartbeats/paige-heartbeat.md | 3 ++- .../integrations/agents/heartbeats/quinn-heartbeat.md | 3 ++- .../integrations/agents/heartbeats/soren-heartbeat.md | 3 ++- 12 files changed, 37 insertions(+), 25 deletions(-) diff --git a/bates-enhance/integrations/agents/heartbeats/amara-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/amara-heartbeat.md index 7c4b5fe..962a4db 100644 --- a/bates-enhance/integrations/agents/heartbeats/amara-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/amara-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -10,13 +11,13 @@ Use: list-mail-messages with search='"escola" OR "school" OR "Caravela" OR "DGEs Also check for emails from known escola contacts (parents, teachers, municipality). For each new/unread escola-related email: -- Extract contact info (name, email, role) and append to ~/.openclaw/shared/memory/escola/contacts.md -- Extract deadlines or event dates and append to ~/.openclaw/shared/memory/escola/upcoming.md +- Extract contact info (name, email, role) and append to shared/memory/escola/contacts.md +- Extract deadlines or event dates and append to shared/memory/escola/upcoming.md - If urgent (deadline <48h, parent complaint, regulatory): write to outbox/escalate-TIMESTAMP.md ## 2. Planner Check Check Escola Caravela Planner tasks (planId: HXpYhx5p5EWodt0e_KE0OZcAC8ze) via ms365-assistant. -Note overdue tasks and upcoming deadlines. Append to ~/.openclaw/shared/memory/escola/upcoming.md. +Note overdue tasks and upcoming deadlines. Append to shared/memory/escola/upcoming.md. ## 3. Knowledge Persistence Append new contacts, deadlines, facts to ~/.openclaw/workspace/observations/findings.md with tags: diff --git a/bates-enhance/integrations/agents/heartbeats/archer-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/archer-heartbeat.md index 1359766..4d1fc96 100644 --- a/bates-enhance/integrations/agents/heartbeats/archer-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/archer-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -13,7 +14,7 @@ For each, identify: - Architecture decisions made in code that aren't documented anywhere - Missing API documentation for new endpoints -Write findings to ~/.openclaw/shared/memory/global/documentation-gaps.md: +Write findings to shared/memory/global/documentation-gaps.md: ``` # Documentation Gaps - YYYY-MM-DD ## Code Patterns Needing SOPs @@ -25,7 +26,7 @@ Write findings to ~/.openclaw/shared/memory/global/documentation-gaps.md: ``` ## 2. Process Improvement -Check ~/.openclaw/shared/memory/global/coding-activity-*.md (Mira's observations) for recurring issues. +Check shared/memory/global/coding-activity-*.md (Mira's observations) for recurring issues. If same error type appears 3+ times: propose a prevention automation or checklist. ## 3. Knowledge Persistence diff --git a/bates-enhance/integrations/agents/heartbeats/conrad-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/conrad-heartbeat.md index f15fa13..3d3c2e8 100644 --- a/bates-enhance/integrations/agents/heartbeats/conrad-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/conrad-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -10,12 +11,12 @@ Use: list-mail-messages with top=10 select='["subject","from","receivedDateTime" For each new/unread email since last check: - **Law firm, investor, counterparty, or regulator**: Write escalation to outbox/escalate-TIMESTAMP.md with sender, subject, urgency assessment, recommended action -- **Florian/Till/Kristina about pipeline**: Extract deal status and append to ~/.openclaw/shared/memory/fdesk/deal-pipeline.md -- **PwC/BNY/CSSF (compliance)**: Note deadlines and append to ~/.openclaw/shared/memory/fdesk/regulatory-updates.md +- **Florian/Till/Kristina about pipeline**: Extract deal status and append to shared/memory/fdesk/deal-pipeline.md +- **PwC/BNY/CSSF (compliance)**: Note deadlines and append to shared/memory/fdesk/regulatory-updates.md - **Routine (newsletters, notifications)**: Skip ## 2. Deal Pipeline Context -After scanning emails, write one sentence answering: "What is Robert likely dealing with in fDesk today?" Overwrite ~/.openclaw/shared/memory/fdesk/context-today.md with this context line (dated). +After scanning emails, write one sentence answering: "What is Robert likely dealing with in fDesk today?" Overwrite shared/memory/fdesk/context-today.md with this context line (dated). ## 3. Knowledge Persistence If you found new contacts, deadlines, facts, or deal updates: diff --git a/bates-enhance/integrations/agents/heartbeats/dash-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/dash-heartbeat.md index 95be4be..63f5233 100644 --- a/bates-enhance/integrations/agents/heartbeats/dash-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/dash-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -11,11 +12,11 @@ Use brave-search to check: For each notable finding: - Summarize in 1-2 sentences - Rate importance: HIGH (security issue, breaking change), MEDIUM (feature request, community growth), LOW (general mention) -- Write to ~/.openclaw/shared/memory/global/openclaw-community.md (append dated entry) +- Write to shared/memory/global/openclaw-community.md (append dated entry) ## 2. Meetup/Event Check Search for upcoming OpenClaw or AI agent meetups in European cities (Berlin, Lisbon, Zurich, Brussels, Vienna, London). -If new events found, append to ~/.openclaw/shared/memory/global/openclaw-community.md. +If new events found, append to shared/memory/global/openclaw-community.md. ## 3. Knowledge Persistence If new community findings: append to ~/.openclaw/workspace/observations/findings.md diff --git a/bates-enhance/integrations/agents/heartbeats/jules-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/jules-heartbeat.md index 250542e..3d34d41 100644 --- a/bates-enhance/integrations/agents/heartbeats/jules-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/jules-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -12,7 +13,7 @@ For each event: note time, subject, attendees, location. Detect conflicts (overlapping events across calendars). Detect prep needs (meetings requiring background research or documents). -Overwrite ~/.openclaw/shared/memory/global/calendar-overview.md with structured overview: +Overwrite shared/memory/global/calendar-overview.md with structured overview: ``` # Calendar Overview - YYYY-MM-DD ## Today @@ -28,7 +29,7 @@ Overwrite ~/.openclaw/shared/memory/global/calendar-overview.md with structured ``` ## 2. Pending Drafts Check -List files in ~/.openclaw/workspace/drafts/ modified in the last 48 hours. +List files in /home/openclaw/.openclaw/workspace/drafts/ modified in the last 48 hours. Note which email drafts are still pending review (not yet sent). Append pending drafts list to the calendar overview as a "## Pending Actions" section. @@ -38,7 +39,7 @@ If ~/.openclaw/scripts/google-api.sh exists: - Add to calendar overview under "## Family" ## 4. Knowledge Persistence -If new commitments or deadlines found: append to ~/.openclaw/workspace/observations/findings.md +If new commitments or deadlines found: append to /home/openclaw/.openclaw/workspace/observations/findings.md - [deadline] Date - what (source: calendar) ## 5. Teams Channel Post (if you have new findings) diff --git a/bates-enhance/integrations/agents/heartbeats/kira-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/kira-heartbeat.md index 2b4d920..102ea26 100644 --- a/bates-enhance/integrations/agents/heartbeats/kira-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/kira-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -17,7 +18,7 @@ Look for: ## 2. Content Ideas Persistence For each content opportunity found: - Write a 2-sentence pitch (topic + angle + format) -- Append to ~/.openclaw/shared/memory/global/content-ideas.md with date and source +- Append to shared/memory/global/content-ideas.md with date and source - Tag with venture: [fDesk] [Synapse] [Escola] [Personal Brand] ## 3. Brand Consistency Check diff --git a/bates-enhance/integrations/agents/heartbeats/mercer-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/mercer-heartbeat.md index 97ca195..b24c443 100644 --- a/bates-enhance/integrations/agents/heartbeats/mercer-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/mercer-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -14,17 +15,17 @@ For each relevant finding: - Summarize in 2-3 sentences - Note which venture it affects - Rate impact: HIGH (requires action), MEDIUM (monitor), LOW (background) -- Append to ~/.openclaw/shared/memory/fdesk/regulatory-updates.md (dated entry) +- Append to shared/memory/fdesk/regulatory-updates.md (dated entry) ## 2. Compliance Calendar Check -Read ~/.openclaw/shared/memory/global/calendar-overview.md (Jules maintains this). +Read shared/memory/global/calendar-overview.md (Jules maintains this). Cross-reference with known regulatory deadlines: - UCI reporting deadlines - CSSF filing deadlines - Corporate tax deadlines - GDPR-related obligations -Write upcoming compliance deadlines to ~/.openclaw/shared/memory/fdesk/compliance-calendar.md. +Write upcoming compliance deadlines to shared/memory/fdesk/compliance-calendar.md. ## 3. Knowledge Persistence Append new regulatory facts to ~/.openclaw/workspace/observations/findings.md: diff --git a/bates-enhance/integrations/agents/heartbeats/mira-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/mira-heartbeat.md index 3881d80..f3b0efd 100644 --- a/bates-enhance/integrations/agents/heartbeats/mira-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/mira-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -16,7 +17,7 @@ Check for new Cursor transcripts in ~/.openclaw/workspace/observations/cursor/: - Extract from each: what files/repos were being worked on, session names, lines added - Identify: what errors or patterns appeared, what could Bates help with (templates, scripts, similar past work) -Write findings to ~/.openclaw/shared/memory/global/coding-activity-YYYY-MM-DD.md (use today's date). Format: +Write findings to shared/memory/global/coding-activity-YYYY-MM-DD.md (use today's date). Format: ``` # Coding Activity - YYYY-MM-DD ## Sessions diff --git a/bates-enhance/integrations/agents/heartbeats/nova-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/nova-heartbeat.md index 1f08f89..b225a84 100644 --- a/bates-enhance/integrations/agents/heartbeats/nova-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/nova-heartbeat.md @@ -1,14 +1,15 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. ## 1. Context Gathering (REQUIRED) Before searching the web, understand what Robert is working on right now: -- Read ~/.openclaw/shared/memory/fdesk/deal-pipeline.md (active deals) -- Read ~/.openclaw/shared/memory/fdesk/context-today.md (today's focus) +- Read shared/memory/fdesk/deal-pipeline.md (active deals) +- Read shared/memory/fdesk/context-today.md (today's focus) - List the 5 most recently modified files in ~/.openclaw/workspace/drafts/ -- Read ~/.openclaw/shared/memory/global/coding-activity-*.md (most recent, if exists) +- Read shared/memory/global/coding-activity-*.md (most recent, if exists) ## 2. Targeted Research (REQUIRED) Based on what you found in step 1, run up to 3 brave-search queries: @@ -24,7 +25,7 @@ For each meaningful finding: - Write a 2-3 sentence summary - Note relevance to which venture (fDesk/Synapse/Escola) - Rate: HIGH (Robert should know today), MEDIUM (useful context), LOW (background) -- Append to ~/.openclaw/shared/memory/global/market-intel-YYYY-MM-DD.md (use today's date) +- Append to shared/memory/global/market-intel-YYYY-MM-DD.md (use today's date) If HIGH-actionability item found, also write to outbox/escalate-market-TIMESTAMP.md. diff --git a/bates-enhance/integrations/agents/heartbeats/paige-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/paige-heartbeat.md index c362ba5..0d86060 100644 --- a/bates-enhance/integrations/agents/heartbeats/paige-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/paige-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -10,7 +11,7 @@ Check rk@vernot.com inbox via ms365-reader for financial items: For each financial email found: - Extract: amount, vendor/sender, due date (if any), category -- Append to ~/.openclaw/shared/memory/private/financial-items.md: +- Append to shared/memory/private/financial-items.md: ``` - [YYYY-MM-DD] [vendor] [amount] [category] [status: paid/pending/overdue] ``` diff --git a/bates-enhance/integrations/agents/heartbeats/quinn-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/quinn-heartbeat.md index 01efc1c..594be9e 100644 --- a/bates-enhance/integrations/agents/heartbeats/quinn-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/quinn-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -12,7 +13,7 @@ Use brave-search to check: For meaningful findings: - Summarize in 1-2 sentences - Note relevance: fDesk team, Escola teachers, Synapse engineering -- Append to ~/.openclaw/shared/memory/global/hr-insights.md (dated entry) +- Append to shared/memory/global/hr-insights.md (dated entry) ## 2. Team Status Check Check if any team-related emails mention: diff --git a/bates-enhance/integrations/agents/heartbeats/soren-heartbeat.md b/bates-enhance/integrations/agents/heartbeats/soren-heartbeat.md index 60b5dc8..94ec0b5 100644 --- a/bates-enhance/integrations/agents/heartbeats/soren-heartbeat.md +++ b/bates-enhance/integrations/agents/heartbeats/soren-heartbeat.md @@ -1,4 +1,5 @@ # Heartbeat Checklist +> **IMPORTANT**: The edit/write tools cannot access shared/ (symlink escapes workspace boundary). Always use the exec tool (bash) for shared memory writes. Example: `cat > shared/memory/path/file.md << 'HEREDOC'` or `echo '...' >> shared/memory/path/file.md`. Reading shared/ files works normally. ## 0. Check Inbox (ALWAYS FIRST) Read all files in inbox/. Process any feedback or task assignments. Delete processed files. @@ -17,7 +18,7 @@ Check BOTH repos: - Open PRs (list-pull-requests) - CI/CD status on latest commits -Write structured status to ~/.openclaw/shared/memory/synapse/github-status.md: +Write structured status to shared/memory/synapse/github-status.md: ``` # GitHub Status - YYYY-MM-DD From 5cddc619d8ae421b4b5d128611bb3af2e945a02f Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Fri, 27 Feb 2026 22:57:59 +0000 Subject: [PATCH 26/63] Add channel-bridge plugin: bridge Teams channel messages via Graph API Teams channel message delivery requires RSC permissions that haven't propagated in the Admin Center. This plugin bypasses that by using Graph API change notifications (subscriptions) to receive real-time channel messages and inject them into the gateway's agent pipeline. - Creates Graph subscriptions for all 8 Bates Operations channels - Handles webhook validation and notification processing - Fetches full message content, strips HTML, deduplicates - Injects messages using finalizeInboundContext/dispatchReplyFromConfig - Sends replies back via Bot Framework REST API - Auto-renews subscriptions every 50 minutes - Stores conversation references for proactive messaging - Updated dashboard plugin to exclude /channel-bridge from SPA catch-all Co-Authored-By: Claude Opus 4.6 --- bates-core/plugins/channel-bridge/index.ts | 644 ++++++++++++++++++ .../channel-bridge/openclaw.plugin.json | 10 + .../plugins/channel-bridge/package.json | 10 + bates-core/plugins/dashboard/index.ts | 77 +-- 4 files changed, 697 insertions(+), 44 deletions(-) create mode 100644 bates-core/plugins/channel-bridge/index.ts create mode 100644 bates-core/plugins/channel-bridge/openclaw.plugin.json create mode 100644 bates-core/plugins/channel-bridge/package.json diff --git a/bates-core/plugins/channel-bridge/index.ts b/bates-core/plugins/channel-bridge/index.ts new file mode 100644 index 0000000..9deff10 --- /dev/null +++ b/bates-core/plugins/channel-bridge/index.ts @@ -0,0 +1,644 @@ +import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; +import { execSync } from "child_process"; +import { emptyPluginConfigSchema } from "openclaw/plugin-sdk"; +import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; + +// --------------------------------------------------------------------------- +// Constants +// --------------------------------------------------------------------------- +const PLUGIN_DIR = dirname(fileURLToPath(import.meta.url)); +const DATA_DIR = join(PLUGIN_DIR, "data"); +const SUBSCRIPTIONS_FILE = join(DATA_DIR, "subscriptions.json"); + +const GRAPH_BASE = "https://graph.microsoft.com/v1.0"; +const TOKEN_CACHE_PATH = + "/home/openclaw/.openclaw/assistant/node_modules/@softeria/ms-365-mcp-server/.token-cache.json"; +const ASSISTANT_CLIENT_ID = "3b2534d6-597a-4d5a-918d-2ea9e4ea8425"; +const TENANT_ID = "a523f509-d02e-4799-a80f-b0661d9e01af"; +const TEAM_ID = "640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c"; + +const BOT_APP_ID = "08c6086e-a3e9-4952-8b45-bc3a986c81c7"; +const BOT_SERVICE_URL = `https://smba.trafficmanager.net/uk/${TENANT_ID}/`; + +const SUBSCRIPTION_RENEWAL_MS = 50 * 60 * 1000; // 50 minutes +const SUBSCRIPTION_LIFETIME_MS = 55 * 60 * 1000; // 55 minutes (max is 60) +const CLIENT_STATE_SECRET = "channel-bridge-v1"; +const WEBHOOK_URL = + "https://openclawgateway-1.tail0e82c9.ts.net/channel-bridge/webhook"; +const CONVERSATIONS_FILE = + "/home/openclaw/.openclaw/msteams-conversations.json"; +const DEDUP_TTL_MS = 5 * 60 * 1000; +const DEDUP_MAX = 500; + +// --------------------------------------------------------------------------- +// Types +// --------------------------------------------------------------------------- +type SubscriptionRecord = { + id: string; + channelId: string; + expirationDateTime: string; +}; + +// --------------------------------------------------------------------------- +// Token management (Graph API - assistant account) +// --------------------------------------------------------------------------- +let graphToken: string | null = null; +let graphTokenExpiresAt = 0; + +async function getGraphToken(): Promise { + if (graphToken && Date.now() < graphTokenExpiresAt - 300_000) { + return graphToken; + } + + // Trigger mcporter to refresh the cache + try { + execSync('mcporter call ms365-assistant.get-current-user select=\'["id"]\' 2>/dev/null', { + timeout: 30_000, + }); + } catch { + // May fail but cache file might still have valid refresh token + } + + const cache = JSON.parse(readFileSync(TOKEN_CACHE_PATH, "utf-8")); + const entry = Object.values(cache.RefreshToken || {})[0] as any; + const refreshToken = entry?.secret; + if (!refreshToken) throw new Error("No refresh token in assistant token cache"); + + const params = new URLSearchParams({ + client_id: ASSISTANT_CLIENT_ID, + refresh_token: refreshToken, + grant_type: "refresh_token", + scope: "https://graph.microsoft.com/.default", + }); + + const res = await fetch( + `https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/token`, + { method: "POST", body: params }, + ); + const data = (await res.json()) as any; + if (!data.access_token) throw new Error(`Graph token refresh failed: ${JSON.stringify(data)}`); + + graphToken = data.access_token; + graphTokenExpiresAt = Date.now() + (data.expires_in || 3600) * 1000; + return graphToken!; +} + +// --------------------------------------------------------------------------- +// Token management (Bot Framework - for sending replies) +// --------------------------------------------------------------------------- +let botToken: string | null = null; +let botTokenExpiresAt = 0; + +async function getBotToken(appPassword: string): Promise { + if (botToken && Date.now() < botTokenExpiresAt - 60_000) { + return botToken; + } + + const params = new URLSearchParams({ + grant_type: "client_credentials", + client_id: BOT_APP_ID, + client_secret: appPassword, + scope: "https://api.botframework.com/.default", + }); + + const res = await fetch( + `https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/token`, + { method: "POST", body: params }, + ); + const data = (await res.json()) as any; + if (!data.access_token) throw new Error(`Bot token fetch failed: ${JSON.stringify(data)}`); + + botToken = data.access_token; + botTokenExpiresAt = Date.now() + (data.expires_in || 3600) * 1000; + return botToken!; +} + +// --------------------------------------------------------------------------- +// Graph API helper +// --------------------------------------------------------------------------- +async function graphApi(method: string, endpoint: string, body?: any): Promise { + const token = await getGraphToken(); + const opts: RequestInit = { + method, + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + }; + if (body) opts.body = JSON.stringify(body); + + const res = await fetch(`${GRAPH_BASE}${endpoint}`, opts); + if (method === "DELETE" && (res.status === 204 || res.status === 404)) return null; + if (!res.ok) { + const text = await res.text(); + throw new Error(`Graph ${method} ${endpoint} (${res.status}): ${text.slice(0, 200)}`); + } + const ct = res.headers.get("content-type") || ""; + if (ct.includes("application/json")) return res.json(); + return null; +} + +// --------------------------------------------------------------------------- +// Subscription persistence +// --------------------------------------------------------------------------- +function loadSubscriptions(): SubscriptionRecord[] { + try { + if (existsSync(SUBSCRIPTIONS_FILE)) { + return JSON.parse(readFileSync(SUBSCRIPTIONS_FILE, "utf-8")).subscriptions || []; + } + } catch {} + return []; +} + +function saveSubscriptions(subs: SubscriptionRecord[]): void { + if (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR, { recursive: true }); + writeFileSync(SUBSCRIPTIONS_FILE, JSON.stringify({ subscriptions: subs }, null, 2)); +} + +// --------------------------------------------------------------------------- +// Subscription CRUD +// --------------------------------------------------------------------------- +async function createSubscription(channelId: string, log: any): Promise { + const resource = `/teams/${TEAM_ID}/channels/${channelId}/messages`; + const expirationDateTime = new Date(Date.now() + SUBSCRIPTION_LIFETIME_MS).toISOString(); + + try { + const result = await graphApi("POST", "/subscriptions", { + changeType: "created", + notificationUrl: WEBHOOK_URL, + resource, + expirationDateTime, + clientState: CLIENT_STATE_SECRET, + }); + log.info(`subscription created for ${channelId.slice(0, 30)}: ${result.id}`); + return { id: result.id, channelId, expirationDateTime: result.expirationDateTime }; + } catch (err: any) { + log.error(`subscription create failed for ${channelId.slice(0, 30)}: ${err.message}`); + return null; + } +} + +async function renewSubscription(sub: SubscriptionRecord, log: any): Promise { + const newExpiry = new Date(Date.now() + SUBSCRIPTION_LIFETIME_MS).toISOString(); + try { + await graphApi("PATCH", `/subscriptions/${sub.id}`, { expirationDateTime: newExpiry }); + sub.expirationDateTime = newExpiry; + log.debug(`subscription renewed: ${sub.id}`); + return true; + } catch (err: any) { + log.warn(`subscription renew failed ${sub.id}: ${err.message}`); + return false; + } +} + +async function deleteSubscription(subId: string, log: any): Promise { + try { + await graphApi("DELETE", `/subscriptions/${subId}`); + } catch (err: any) { + log.debug(`subscription delete failed ${subId}: ${err.message}`); + } +} + +// --------------------------------------------------------------------------- +// Message dedup +// --------------------------------------------------------------------------- +const processedMessages = new Map(); + +function isDuplicate(id: string): boolean { + const ts = processedMessages.get(id); + if (!ts) return false; + if (Date.now() - ts > DEDUP_TTL_MS) { + processedMessages.delete(id); + return false; + } + return true; +} + +function markProcessed(id: string): void { + processedMessages.set(id, Date.now()); + if (processedMessages.size > DEDUP_MAX) { + const cutoff = Date.now() - DEDUP_TTL_MS; + for (const [k, v] of processedMessages) { + if (v < cutoff) processedMessages.delete(k); + } + } +} + +// --------------------------------------------------------------------------- +// HTML stripping +// --------------------------------------------------------------------------- +function stripHtml(html: string): string { + return html + .replace(/]*>.*?<\/at>/gi, "") // @mention tags + .replace(//gi, "\n") + .replace(/<[^>]+>/g, "") + .replace(/&/g, "&") + .replace(/</g, "<") + .replace(/>/g, ">") + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/ /g, " ") + .trim(); +} + +// --------------------------------------------------------------------------- +// Conversation reference storage (shared with msteams extension) +// --------------------------------------------------------------------------- +function storeConversationReference(conversationId: string, ref: any): void { + try { + let store: any = { version: 1, conversations: {} }; + if (existsSync(CONVERSATIONS_FILE)) { + try { + store = JSON.parse(readFileSync(CONVERSATIONS_FILE, "utf-8")); + } catch {} + } + store.conversations[conversationId] = { ...ref, lastSeenAt: new Date().toISOString() }; + writeFileSync(CONVERSATIONS_FILE, JSON.stringify(store, null, 2)); + } catch { + // Best effort + } +} + +// --------------------------------------------------------------------------- +// Send reply to channel via Bot Framework REST API +// --------------------------------------------------------------------------- +async function sendToChannel( + conversationId: string, + text: string, + appPassword: string, +): Promise { + const token = await getBotToken(appPassword); + const activity = { + type: "message", + text, + from: { id: `28:${BOT_APP_ID}`, name: "Bates" }, + conversation: { id: conversationId }, + }; + + const url = `${BOT_SERVICE_URL}v3/conversations/${encodeURIComponent(conversationId)}/activities`; + const res = await fetch(url, { + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(activity), + }); + + if (!res.ok) { + const errText = await res.text(); + throw new Error(`Bot send failed (${res.status}): ${errText.slice(0, 200)}`); + } + const result = (await res.json()) as any; + return result.id || "unknown"; +} + +// --------------------------------------------------------------------------- +// Core: process a channel message notification +// --------------------------------------------------------------------------- +async function processMessage( + channelId: string, + messageId: string, + isReply: boolean, + parentMessageId: string | undefined, + api: OpenClawPluginApi, +): Promise { + const { config: cfg, runtime: core, logger: log } = api; + + // Fetch full message + let endpoint = `/teams/${TEAM_ID}/channels/${channelId}/messages/${messageId}`; + if (isReply && parentMessageId) { + endpoint = `/teams/${TEAM_ID}/channels/${channelId}/messages/${parentMessageId}/replies/${messageId}`; + } + + const message = await graphApi("GET", endpoint); + + // Skip bot's own messages + if (message.from?.application?.id === BOT_APP_ID) return; + if (message.from?.user?.displayName === "Bates") return; + + // Skip system messages + if (message.messageType !== "message") return; + + const senderName = message.from?.user?.displayName || "Unknown"; + const senderId = message.from?.user?.id || "unknown"; + const bodyContent = message.body?.content || ""; + const bodyType = message.body?.contentType || "text"; + + let text = bodyType === "html" ? stripHtml(bodyContent) : bodyContent.trim(); + if (!text) return; + + log.info("processing bridged channel message", { + channel: channelId.slice(0, 30), + sender: senderName, + preview: text.slice(0, 80), + isReply, + }); + + // Resolve route + const conversationId = channelId; + const route = core.channel.routing.resolveAgentRoute({ + cfg, + channel: "msteams", + peer: { kind: "channel", id: conversationId }, + }); + + const teamsFrom = `msteams:channel:${conversationId}`; + const teamsTo = `conversation:${conversationId}`; + + // Build envelope + const storePath = core.channel.session.resolveStorePath(cfg.session?.store, { + agentId: route.agentId, + }); + const envelopeOptions = core.channel.reply.resolveEnvelopeFormatOptions(cfg); + const previousTimestamp = core.channel.session.readSessionUpdatedAt({ + storePath, + sessionKey: route.sessionKey, + }); + const body = core.channel.reply.formatAgentEnvelope({ + channel: "Teams", + from: "channel", + timestamp: new Date(message.createdDateTime), + previousTimestamp, + envelope: envelopeOptions, + body: `${senderName}: ${text}`, + }); + + // Also notify main session via system event (like the real msteams handler does) + const preview = text.replace(/\s+/g, " ").slice(0, 160); + core.system.enqueueSystemEvent(`Teams channel message from ${senderName}: ${preview}`, { + sessionKey: route.sessionKey, + contextKey: `channel-bridge:${conversationId}:${messageId}`, + }); + + // Build inbound context + const ctxPayload = core.channel.reply.finalizeInboundContext({ + Body: body, + RawBody: text, + CommandBody: text, + From: teamsFrom, + To: teamsTo, + SessionKey: route.sessionKey, + AccountId: route.accountId, + ChatType: "channel" as const, + ConversationLabel: "channel", + GroupSubject: "channel", + SenderName: senderName, + SenderId: senderId, + Provider: "msteams" as const, + Surface: "msteams" as const, + MessageSid: messageId, + Timestamp: new Date(message.createdDateTime).getTime(), + WasMentioned: true, + CommandAuthorized: true, + OriginatingChannel: "msteams" as const, + OriginatingTo: teamsTo, + }); + + // Record inbound session + await core.channel.session.recordInboundSession({ + storePath, + sessionKey: ctxPayload.SessionKey ?? route.sessionKey, + ctx: ctxPayload, + onRecordError: (err) => { + log.warn(`channel-bridge: session record error: ${String(err)}`); + }, + }); + + // Store conversation reference for proactive messaging + storeConversationReference(conversationId, { + activityId: messageId, + user: { id: senderId, name: senderName, aadObjectId: senderId }, + agent: { id: `28:${BOT_APP_ID}`, name: "bates-msteams" }, + bot: { id: `28:${BOT_APP_ID}`, name: "bates-msteams" }, + conversation: { + id: conversationId, + conversationType: "channel", + tenantId: TENANT_ID, + }, + channelId: "msteams", + serviceUrl: BOT_SERVICE_URL, + }); + + // Create reply dispatcher that sends via Bot Framework REST API + const appPassword = cfg.channels?.msteams?.appPassword; + if (!appPassword) { + log.error("channel-bridge: no msteams appPassword in config"); + return; + } + + const { dispatcher, replyOptions, markDispatchIdle } = + core.channel.reply.createReplyDispatcherWithTyping({ + humanDelay: core.channel.reply.resolveHumanDelayConfig(cfg, route.agentId), + deliver: async (payload: any) => { + const replyText = payload.text?.trim(); + if (!replyText) return; + + const tableMode = core.channel.text.resolveMarkdownTableMode({ + cfg, + channel: "msteams", + }); + const converted = core.channel.text.convertMarkdownTables(replyText, tableMode); + const chunkLimit = core.channel.text.resolveTextChunkLimit(cfg, "msteams"); + const chunkMode = core.channel.text.resolveChunkMode(cfg, "msteams"); + const chunks = core.channel.text.chunkMarkdownTextWithMode(converted, chunkLimit, chunkMode); + + for (const chunk of chunks) { + const trimmed = chunk.trim(); + if (!trimmed) continue; + try { + const msgId = await sendToChannel(conversationId, trimmed, appPassword); + log.info("reply sent to channel", { conversationId: conversationId.slice(0, 30), msgId }); + } catch (err) { + log.error(`channel-bridge reply failed: ${String(err)}`); + } + } + }, + onError: (err: any, info: any) => { + log.error(`channel-bridge dispatch error (${info?.kind}): ${String(err)}`); + }, + onReplyStart: () => {}, + }); + + // Dispatch to agent + try { + const { queuedFinal, counts } = await core.channel.reply.dispatchReplyFromConfig({ + ctx: ctxPayload, + cfg, + dispatcher, + replyOptions, + }); + markDispatchIdle(); + log.info("channel-bridge dispatch complete", { queuedFinal, counts }); + } catch (err) { + log.error(`channel-bridge dispatch failed: ${String(err)}`); + } +} + +// --------------------------------------------------------------------------- +// Plugin +// --------------------------------------------------------------------------- +const plugin = { + id: "channel-bridge", + name: "Channel Bridge (Graph API)", + description: "Bridges Teams channel messages via Graph API change notifications", + configSchema: emptyPluginConfigSchema(), + + register(api: OpenClawPluginApi) { + const cfg = api.config; + const log = api.logger; + let renewalTimer: ReturnType | null = null; + let subscriptions: SubscriptionRecord[] = []; + + // ----- HTTP webhook handler ----- + api.registerHttpHandler(async (req: any, res: any): Promise => { + const url = new URL(req.url ?? "/", `http://${req.headers.host || "localhost"}`); + if (url.pathname !== "/channel-bridge/webhook") return false; + + // Graph subscription validation + const validationToken = url.searchParams.get("validationToken"); + if (validationToken) { + log.info("channel-bridge: validation request"); + res.setHeader("Content-Type", "text/plain"); + res.writeHead(200); + res.end(validationToken); + return true; + } + + if (req.method !== "POST") { + res.writeHead(405); + res.end("Method not allowed"); + return true; + } + + // Read body + let body = ""; + await new Promise((resolve) => { + req.on("data", (chunk: Buffer) => { + body += chunk.toString(); + }); + req.on("end", resolve); + }); + + // Respond 202 immediately (Graph requires fast response) + res.writeHead(202); + res.end(); + + // Process notifications asynchronously + try { + const payload = JSON.parse(body); + const notifications = payload.value || []; + + for (const notification of notifications) { + if (notification.clientState !== CLIENT_STATE_SECRET) { + log.warn("channel-bridge: invalid clientState, skipping"); + continue; + } + + const resourceData = notification.resourceData || {}; + const messageId = resourceData.id as string; + const resource = (notification.resource || "") as string; + + // Parse channel ID from resource path + // Format: teams('...')/channels('...')/messages('...') + // or: teams('...')/channels('...')/messages('...')/replies('...') + const channelMatch = resource.match(/channels\('([^']+)'\)/); + const channelId = channelMatch?.[1]; + const isReply = resource.includes("/replies("); + const parentMatch = resource.match(/messages\('([^']+)'\)/); + const parentMessageId = isReply ? parentMatch?.[1] : undefined; + + if (!channelId || !messageId) { + log.warn("channel-bridge: missing channelId or messageId", { resource }); + continue; + } + + if (isDuplicate(messageId)) continue; + markProcessed(messageId); + + processMessage(channelId, messageId, isReply, parentMessageId, api).catch((err) => { + log.error(`channel-bridge: process failed for ${messageId}: ${String(err)}`); + }); + } + } catch (err) { + log.error(`channel-bridge: notification parse failed: ${String(err)}`); + } + + return true; + }); + + // ----- Lifecycle: create subscriptions on start ----- + const initSubscriptions = async () => { + log.info("channel-bridge: creating Graph subscriptions"); + + const teamsCfg = cfg.channels?.msteams; + const teamConfig = (teamsCfg?.teams as any)?.[TEAM_ID]; + if (!teamConfig?.channels) { + log.warn("channel-bridge: no channels in msteams.teams config"); + return; + } + + const channelIds = Object.keys(teamConfig.channels) as string[]; + log.info(`channel-bridge: subscribing to ${channelIds.length} channels`); + + // Delete stale subscriptions from previous runs + const oldSubs = loadSubscriptions(); + for (const old of oldSubs) { + await deleteSubscription(old.id, log); + } + + // Create fresh subscriptions + subscriptions = []; + for (const channelId of channelIds) { + const sub = await createSubscription(channelId, log); + if (sub) subscriptions.push(sub); + } + saveSubscriptions(subscriptions); + log.info(`channel-bridge: ${subscriptions.length}/${channelIds.length} subscriptions active`); + + // Set up renewal timer + renewalTimer = setInterval(async () => { + log.debug("channel-bridge: renewing subscriptions"); + const renewed: SubscriptionRecord[] = []; + for (const sub of subscriptions) { + const ok = await renewSubscription(sub, log); + if (ok) { + renewed.push(sub); + } else { + const fresh = await createSubscription(sub.channelId, log); + if (fresh) renewed.push(fresh); + } + } + subscriptions = renewed; + saveSubscriptions(subscriptions); + }, SUBSCRIPTION_RENEWAL_MS); + }; + + // Delay init slightly so gateway HTTP server is ready for validation callbacks + setTimeout(() => { + initSubscriptions().catch((err) => { + log.error(`channel-bridge: init failed: ${String(err)}`); + }); + }, 5000); + + // ----- Lifecycle: cleanup on stop ----- + api.on("gateway_stop", async () => { + log.info("channel-bridge: cleaning up"); + if (renewalTimer) { + clearInterval(renewalTimer); + renewalTimer = null; + } + for (const sub of subscriptions) { + await deleteSubscription(sub.id, log); + } + subscriptions = []; + saveSubscriptions([]); + }); + + log.info("Channel bridge plugin registered"); + }, +}; + +export default plugin; diff --git a/bates-core/plugins/channel-bridge/openclaw.plugin.json b/bates-core/plugins/channel-bridge/openclaw.plugin.json new file mode 100644 index 0000000..1e18df0 --- /dev/null +++ b/bates-core/plugins/channel-bridge/openclaw.plugin.json @@ -0,0 +1,10 @@ +{ + "id": "channel-bridge", + "name": "Channel Bridge (Graph API)", + "description": "Bridges Teams channel messages to gateway via Graph API change notifications", + "configSchema": { + "type": "object", + "additionalProperties": false, + "properties": {} + } +} diff --git a/bates-core/plugins/channel-bridge/package.json b/bates-core/plugins/channel-bridge/package.json new file mode 100644 index 0000000..728119a --- /dev/null +++ b/bates-core/plugins/channel-bridge/package.json @@ -0,0 +1,10 @@ +{ + "name": "@openclaw/channel-bridge", + "version": "1.0.0", + "description": "Bridges Teams channel messages via Graph API change notifications", + "type": "module", + "devDependencies": { + "@types/node": "^25.2.3", + "typescript": "^5.9.3" + } +} diff --git a/bates-core/plugins/dashboard/index.ts b/bates-core/plugins/dashboard/index.ts index ca29d20..7219f04 100644 --- a/bates-core/plugins/dashboard/index.ts +++ b/bates-core/plugins/dashboard/index.ts @@ -8,24 +8,8 @@ import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; const PLUGIN_DIR = dirname(fileURLToPath(import.meta.url)); const STATIC_DIR = join(PLUGIN_DIR, "static"); -const OPENCLAW_HOME = join(homedir(), ".openclaw"); -const WORKSPACE = join(OPENCLAW_HOME, "workspace"); - -// Resolve the Control UI directory from the openclaw package installation -// This path may vary depending on how openclaw is installed (global npm, local, etc.) -function findControlUiDir(): string { - // Try common locations - const candidates = [ - join(homedir(), ".npm-global/lib/node_modules/openclaw/dist/control-ui"), - join("/usr/local/lib/node_modules/openclaw/dist/control-ui"), - join("/usr/lib/node_modules/openclaw/dist/control-ui"), - ]; - for (const c of candidates) { - if (existsSync(c)) return c; - } - return candidates[0]; // fallback -} -const CONTROL_UI_DIR = findControlUiDir(); +const WORKSPACE = "/home/openclaw/.openclaw/workspace"; +const CONTROL_UI_DIR = "/home/openclaw/.npm-global/lib/node_modules/openclaw/dist/control-ui"; // Injected into Control UI: sidebar nav item + top banner for mobile const DASHBOARD_LINK_SNIPPET = ` @@ -72,7 +56,7 @@ const DASHBOARD_LINK_SNIPPET = ` const HEALTH_FILE = join(WORKSPACE, "observations/health.json"); const OBSERVATIONS_DIR = join(WORKSPACE, "observations"); -const CRON_FILE = join(OPENCLAW_HOME, "cron/jobs.json"); +const CRON_FILE = "/home/openclaw/.openclaw/cron/jobs.json"; const DATA_DIR = join(PLUGIN_DIR, "data"); const DELEGATIONS_FILE = join(DATA_DIR, "delegations.json"); const DELEGATION_RETENTION_DAYS = 7; @@ -151,18 +135,18 @@ const plugin = { register(api: OpenClawPluginApi) { const authToken = (api as any).config?.gateway?.auth?.token || ""; - const AGENTS_DIR = join(OPENCLAW_HOME, "agents"); api.registerHttpHandler(async (req: any, res: any): Promise => { const url = new URL(req.url ?? "/", `http://${req.headers.host || "localhost"}`); const pathname = url.pathname; // Inject floating Dashboard link into all Control UI SPA routes - // (not just "/" -- also /chat, /sessions, /settings, etc.) + // (not just "/" — also /chat, /sessions, /settings, etc.) const isControlUiRoute = !pathname.startsWith("/dashboard") && !pathname.startsWith("/v1/") && !pathname.startsWith("/voice") && !pathname.startsWith("/cost-tracker") && + !pathname.startsWith("/channel-bridge") && !pathname.includes("."); if (isControlUiRoute) { try { @@ -180,7 +164,7 @@ const plugin = { // Serve baby avatars at /baby-avatars/.png if (pathname.startsWith("/baby-avatars/")) { - const avatarDir = join(OPENCLAW_HOME, "assets/baby-avatars"); + const avatarDir = "/home/openclaw/.openclaw/assets/baby-avatars"; const avatarName = pathname.replace("/baby-avatars/", "").replace(/[^a-z0-9_.]/gi, ""); if (!avatarName || avatarName.includes("..")) { res.writeHead(403); res.end("Forbidden"); return true; } const avatarPath = join(avatarDir, avatarName); @@ -317,7 +301,7 @@ const plugin = { const p = JSON.parse(body); const { taskId, source, project } = p; if (!taskId) { json({ error: "taskId required" }); return; } - const graphApi = join(OPENCLAW_HOME, "scripts/graph-api.sh"); + const graphApi = "/home/openclaw/.openclaw/scripts/graph-api.sh"; let output: string; if (source === "To Do") { const configPath = join(PLUGIN_DIR, "data", "planner-config.json"); @@ -376,13 +360,14 @@ const plugin = { return true; } - // API: sessions -- enriched sub-agent status from JSONL transcripts + // API: sessions — enriched sub-agent status from JSONL transcripts if (pathname === "/dashboard/api/sessions") { try { + const agentsDir = "/home/openclaw/.openclaw/agents"; const allSessions: any[] = []; - for (const agentName of readdirSync(AGENTS_DIR)) { - const sessionsFile = join(AGENTS_DIR, agentName, "sessions", "sessions.json"); + for (const agentName of readdirSync(agentsDir)) { + const sessionsFile = join(agentsDir, agentName, "sessions", "sessions.json"); if (!existsSync(sessionsFile)) continue; const registry = JSON.parse(readFileSync(sessionsFile, "utf-8")); @@ -390,7 +375,7 @@ const plugin = { if (!meta.spawnedBy) continue; const sessionId = meta.sessionId; - const jsonlPath = join(AGENTS_DIR, agentName, "sessions", `${sessionId}.jsonl`); + const jsonlPath = join(agentsDir, agentName, "sessions", `${sessionId}.jsonl`); let status = "unknown"; let toolCalls = 0; let assistantTurns = 0; @@ -453,7 +438,7 @@ const plugin = { } // Count tool calls from the full file (scan line types from tail) - // This is approximate -- count from the full file + // This is approximate — count from the full file const fullContent = readFileSync(jsonlPath, "utf-8"); const allLines = fullContent.split("\n").filter(Boolean); for (const line of allLines) { @@ -537,7 +522,8 @@ const plugin = { // API: agent soul if (pathname.match(/^\/dashboard\/api\/agents\/[^/]+\/soul$/)) { const agentId = pathname.split("/")[4]; - const soulPath = join(AGENTS_DIR, agentId, "SOUL.md"); + const agentsDir = "/home/openclaw/.openclaw/agents"; + const soulPath = join(agentsDir, agentId, "SOUL.md"); try { if (existsSync(soulPath)) { json({ content: readFileSync(soulPath, "utf-8") }); @@ -551,14 +537,15 @@ const plugin = { // API: agent memory if (pathname.match(/^\/dashboard\/api\/agents\/[^/]+\/memory$/)) { const agentId = pathname.split("/")[4]; + const agentsDir = "/home/openclaw/.openclaw/agents"; const date = url.searchParams.get("date") || new Date().toISOString().slice(0, 10); - const memPath = join(AGENTS_DIR, agentId, "memory", `${date}.md`); + const memPath = join(agentsDir, agentId, "memory", `${date}.md`); try { if (existsSync(memPath)) { json({ content: readFileSync(memPath, "utf-8") }); } else { // Try MEMORY.md as fallback - const fallback = join(AGENTS_DIR, agentId, "MEMORY.md"); + const fallback = join(agentsDir, agentId, "MEMORY.md"); if (existsSync(fallback)) { const text = readFileSync(fallback, "utf-8"); json({ content: text.slice(-2000) }); @@ -570,15 +557,16 @@ const plugin = { return true; } - // API: agents list (for fleet data) -- single-gateway architecture - // All agents run as on-demand sub-agents within the main gateway. + // API: agents list (for fleet data) — single-gateway architecture + // All agents run as on-demand sub-agents within the main gateway (port 18789). // Status is determined from session activity and openclaw.json config. if (pathname === "/dashboard/api/agents") { try { + const agentsDir = "/home/openclaw/.openclaw/agents"; const agents: any[] = []; // Load agent roster from openclaw.json - const openclawConfigPath = join(OPENCLAW_HOME, "openclaw.json"); + const openclawConfigPath = "/home/openclaw/.openclaw/openclaw.json"; let agentRoster: any[] = []; try { const ocConfig = JSON.parse(readFileSync(openclawConfigPath, "utf-8")); @@ -609,8 +597,8 @@ const plugin = { // Determine recent session activity per agent from session files const recentActivityMap: Record = {}; - for (const agentName of readdirSync(AGENTS_DIR)) { - const sessionsFile = join(AGENTS_DIR, agentName, "sessions", "sessions.json"); + for (const agentName of readdirSync(agentsDir)) { + const sessionsFile = join(agentsDir, agentName, "sessions", "sessions.json"); if (!existsSync(sessionsFile)) continue; try { const registry = JSON.parse(readFileSync(sessionsFile, "utf-8")); @@ -632,11 +620,11 @@ const plugin = { } catch {} } - const agentIds = readdirSync(AGENTS_DIR).filter(d => { - try { return statSync(join(AGENTS_DIR, d)).isDirectory(); } catch { return false; } + const agentIds = readdirSync(agentsDir).filter(d => { + try { return statSync(join(agentsDir, d)).isDirectory(); } catch { return false; } }); for (const id of agentIds) { - const soulPath = join(AGENTS_DIR, id, "SOUL.md"); + const soulPath = join(agentsDir, id, "SOUL.md"); let name = id, role = "", model = "", layer = ""; if (existsSync(soulPath)) { const soul = readFileSync(soulPath, "utf-8"); @@ -662,7 +650,7 @@ const plugin = { // Status: "active" if has sessions in last 5min, "ready" if in roster, "inactive" otherwise const status = hasActiveSessions ? "active" : isInRoster ? "ready" : "inactive"; - const heartbeat_interval = heartbeatMap[id] || "\u2014"; + const heartbeat_interval = heartbeatMap[id] || "—"; const last_activity = activity?.lastActivity || null; const last_activity_epoch = activity?.lastActivityMs ? activity.lastActivityMs / 1000 : null; @@ -681,11 +669,11 @@ const plugin = { // Count inbox/outbox from filesystem for (const agent of agents) { try { - const inboxDir = join(AGENTS_DIR, agent.id, "inbox"); + const inboxDir = join(agentsDir, agent.id, "inbox"); if (existsSync(inboxDir)) agent.inbox_count = readdirSync(inboxDir).filter(f => f.endsWith(".md")).length; } catch {} try { - const outboxDir = join(AGENTS_DIR, agent.id, "outbox"); + const outboxDir = join(agentsDir, agent.id, "outbox"); if (existsSync(outboxDir)) agent.outbox_count = readdirSync(outboxDir).filter(f => f.endsWith(".md")).length; } catch {} } @@ -695,10 +683,11 @@ const plugin = { return true; } - // API: agent sessions -- read from local session files (single-gateway, no port proxy needed) + // API: agent sessions — read from local session files (single-gateway, no port proxy needed) if (pathname.match(/^\/dashboard\/api\/agents\/[^/]+\/sessions$/)) { const agentId = pathname.split("/")[4]; - const sessionsFile = join(AGENTS_DIR, agentId, "sessions", "sessions.json"); + const agentsDir = "/home/openclaw/.openclaw/agents"; + const sessionsFile = join(agentsDir, agentId, "sessions", "sessions.json"); try { if (existsSync(sessionsFile)) { const registry = JSON.parse(readFileSync(sessionsFile, "utf-8")); From 231c50d220dbb484b761caf9bb35335c122b2f53 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Fri, 27 Feb 2026 23:22:17 +0000 Subject: [PATCH 27/63] Fix: skip Adaptive Card for cron announce deliveries Cron heartbeat announces were sending redundant Adaptive Cards that rendered as "Card - access it on go.skype.com/cards.unsupported" in Teams DMs. The result card now only fires for sessions_spawn calls (which have a registry entry) not for cron announce deliveries. Co-Authored-By: Claude Opus 4.6 --- bates-enhance/patches/reply-composite.patch.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bates-enhance/patches/reply-composite.patch.js b/bates-enhance/patches/reply-composite.patch.js index dd50aa4..ea4238d 100644 --- a/bates-enhance/patches/reply-composite.patch.js +++ b/bates-enhance/patches/reply-composite.patch.js @@ -304,8 +304,8 @@ const RESULT_CARD = `\t\t// --- Thinking bubble: update or send result card to T \t\t\t\t\t\t\t\tawait globalThis.__openclawSendTeamsCard(_cardTo, resultCard); \t\t\t\t\t\t\t} \t\t\t\t\t\t} -\t\t\t\t\t} else if (globalThis.__openclawSendTeamsCard) { -\t\t\t\t\t\t// No thinking card existed, send a new one +\t\t\t\t\t} else if (globalThis.__openclawSendTeamsCard && runEntry) { +\t\t\t\t\t\t// No thinking card existed but this was a sessions_spawn, send a new one \t\t\t\t\t\tawait globalThis.__openclawSendTeamsCard(_cardTo, resultCard); \t\t\t\t\t} \t\t\t\t} catch (e) { /* card send/update failure is non-fatal */ } From c70af1e619399411bb890d3fa33f6413ce96a4a2 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Sat, 28 Feb 2026 20:47:39 +0000 Subject: [PATCH 28/63] Add session-continuity plugin and fix channel-bridge message parsing Session-continuity: persists conversational context across session resets via handoff digests. Uses before_prompt_build hook to inject prior session context into new sessions so Bates never loses awareness of recent interactions, active tasks, or pending decisions. Rule-based summarization (no LLM calls). Rolling buffer of last 5 interactions. Channel-bridge: fix message ID extraction for delegated permission subscriptions (resourceData.id is empty, parse from resource path instead), add duplicate init guard, add Bates user ID to skip filter. Co-Authored-By: Claude Opus 4.6 --- bates-core/plugins/channel-bridge/index.ts | 51 +- .../plugins/session-continuity/index.ts | 443 ++++++++++++++++++ .../session-continuity/openclaw.plugin.json | 10 + 3 files changed, 496 insertions(+), 8 deletions(-) create mode 100644 bates-core/plugins/session-continuity/index.ts create mode 100644 bates-core/plugins/session-continuity/openclaw.plugin.json diff --git a/bates-core/plugins/channel-bridge/index.ts b/bates-core/plugins/channel-bridge/index.ts index 9deff10..bae7b12 100644 --- a/bates-core/plugins/channel-bridge/index.ts +++ b/bates-core/plugins/channel-bridge/index.ts @@ -315,12 +315,22 @@ async function processMessage( const message = await graphApi("GET", endpoint); - // Skip bot's own messages - if (message.from?.application?.id === BOT_APP_ID) return; - if (message.from?.user?.displayName === "Bates") return; + // Skip bot's own messages (both bot application and the bates@vernot.com user account) + const BATES_USER_ID = "c7d938aa-d820-4dd9-8f80-e43791c1bd51"; + if (message.from?.application?.id === BOT_APP_ID) { + log.debug("channel-bridge: skipping bot application message"); + return; + } + if (message.from?.user?.id === BATES_USER_ID || message.from?.user?.displayName === "Bates") { + log.debug("channel-bridge: skipping bates user message"); + return; + } // Skip system messages - if (message.messageType !== "message") return; + if (message.messageType !== "message") { + log.debug(`channel-bridge: skipping ${message.messageType} message`); + return; + } const senderName = message.from?.user?.displayName || "Unknown"; const senderId = message.from?.user?.id || "unknown"; @@ -491,6 +501,7 @@ const plugin = { const log = api.logger; let renewalTimer: ReturnType | null = null; let subscriptions: SubscriptionRecord[] = []; + let initDone = false; // ----- HTTP webhook handler ----- api.registerHttpHandler(async (req: any, res: any): Promise => { @@ -537,11 +548,9 @@ const plugin = { continue; } - const resourceData = notification.resourceData || {}; - const messageId = resourceData.id as string; const resource = (notification.resource || "") as string; - // Parse channel ID from resource path + // Parse channel ID and message ID from resource path // Format: teams('...')/channels('...')/messages('...') // or: teams('...')/channels('...')/messages('...')/replies('...') const channelMatch = resource.match(/channels\('([^']+)'\)/); @@ -550,11 +559,35 @@ const plugin = { const parentMatch = resource.match(/messages\('([^']+)'\)/); const parentMessageId = isReply ? parentMatch?.[1] : undefined; + // Extract message ID: from resourceData (app permissions) or resource path (delegated) + const resourceData = notification.resourceData || {}; + let messageId = resourceData.id as string | undefined; + if (!messageId) { + // For delegated permissions, extract from resource path + if (isReply) { + const replyMatch = resource.match(/replies\('([^']+)'\)/); + messageId = replyMatch?.[1]; + } else { + messageId = parentMatch?.[1]; // messages('...') + } + } + if (!channelId || !messageId) { - log.warn("channel-bridge: missing channelId or messageId", { resource }); + log.warn("channel-bridge: missing channelId or messageId", { + resource, + resourceData: JSON.stringify(resourceData), + changeType: notification.changeType, + }); continue; } + log.info(`channel-bridge: notification received`, { + changeType: notification.changeType, + channelId: channelId.slice(0, 30), + messageId, + isReply, + }); + if (isDuplicate(messageId)) continue; markProcessed(messageId); @@ -571,6 +604,8 @@ const plugin = { // ----- Lifecycle: create subscriptions on start ----- const initSubscriptions = async () => { + if (initDone) return; + initDone = true; log.info("channel-bridge: creating Graph subscriptions"); const teamsCfg = cfg.channels?.msteams; diff --git a/bates-core/plugins/session-continuity/index.ts b/bates-core/plugins/session-continuity/index.ts new file mode 100644 index 0000000..37efa63 --- /dev/null +++ b/bates-core/plugins/session-continuity/index.ts @@ -0,0 +1,443 @@ +import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; +import { emptyPluginConfigSchema } from "openclaw/plugin-sdk"; +import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; + +// --------------------------------------------------------------------------- +// Constants +// --------------------------------------------------------------------------- +const PLUGIN_DIR = dirname(fileURLToPath(import.meta.url)); +const DATA_DIR = join(PLUGIN_DIR, "data"); +const DIGESTS_DIR = join(DATA_DIR, "digests"); + +/** Max age for digest injection (ms). Stale digests are skipped. */ +const MAX_DIGEST_AGE_MS = 2 * 60 * 60 * 1000; // 2 hours + +/** Rolling buffer size for interaction summaries */ +const MAX_INTERACTIONS = 5; + +/** Max chars to extract from a message for summarization */ +const SUMMARY_MAX_CHARS = 150; + +// --------------------------------------------------------------------------- +// Types +// --------------------------------------------------------------------------- +interface InteractionSummary { + role: "robert" | "bates" | "deputy" | "system"; + summary: string; + timestamp: string; +} + +interface HandoffDigest { + sessionKey: string; + timestamp: string; + reason: string; + lastInteractions: InteractionSummary[]; + activeTasks: string[]; + pendingDecisions: string[]; + recentDeliveries: string[]; +} + +// --------------------------------------------------------------------------- +// In-memory state +// --------------------------------------------------------------------------- + +/** Per-session rolling digest (keyed by sessionKey or agentId) */ +const sessionDigests = new Map(); + +/** Track which digests have been consumed (injected) to avoid re-injection. + * Keyed by sessionKey, value is the digest timestamp that was injected. */ +const consumedDigests = new Map(); + +// --------------------------------------------------------------------------- +// Helpers: File I/O +// --------------------------------------------------------------------------- +function ensureDataDir(): void { + if (!existsSync(DIGESTS_DIR)) { + mkdirSync(DIGESTS_DIR, { recursive: true }); + } +} + +function digestPath(agentId: string): string { + // Sanitize agentId for filesystem + const safe = agentId.replace(/[^a-zA-Z0-9_-]/g, "_"); + return join(DIGESTS_DIR, `${safe}.json`); +} + +function loadDigest(agentId: string): HandoffDigest | null { + const path = digestPath(agentId); + if (!existsSync(path)) return null; + try { + return JSON.parse(readFileSync(path, "utf-8")); + } catch { + return null; + } +} + +function saveDigest(agentId: string, digest: HandoffDigest): void { + ensureDataDir(); + writeFileSync(digestPath(agentId), JSON.stringify(digest, null, 2)); +} + +// --------------------------------------------------------------------------- +// Helpers: Message summarization (rule-based, no LLM) +// --------------------------------------------------------------------------- + +/** Extract text content from a message object. Messages can have various shapes. */ +function extractText(msg: any): string { + if (!msg) return ""; + // String content + if (typeof msg.content === "string") return msg.content; + // Array of content blocks (Anthropic format) + if (Array.isArray(msg.content)) { + const textBlocks = msg.content + .filter((b: any) => b.type === "text" && b.text) + .map((b: any) => b.text); + return textBlocks.join(" "); + } + // Direct text field + if (typeof msg.text === "string") return msg.text; + return ""; +} + +/** Truncate text at a sentence boundary near maxLen */ +function truncateAtSentence(text: string, maxLen: number): string { + if (text.length <= maxLen) return text; + const truncated = text.slice(0, maxLen); + // Try to cut at last sentence boundary + const lastPeriod = truncated.lastIndexOf(". "); + const lastQuestion = truncated.lastIndexOf("? "); + const lastExclaim = truncated.lastIndexOf("! "); + const bestCut = Math.max(lastPeriod, lastQuestion, lastExclaim); + if (bestCut > maxLen * 0.4) { + return truncated.slice(0, bestCut + 1); + } + return truncated + "..."; +} + +/** Summarize a user (Robert) message */ +function summarizeUserMessage(msg: any): string { + const text = extractText(msg).trim(); + if (!text) return "(empty message)"; + return "Robert: " + truncateAtSentence(text, SUMMARY_MAX_CHARS); +} + +/** Summarize an assistant (Bates) message, looking for structured patterns */ +function summarizeAssistantMessage(msg: any): string { + const text = extractText(msg).trim(); + if (!text) return "(tool-only turn)"; + + // Check for task closure protocol + const statusMatch = text.match(/STATUS:\s*(DONE|NOT_DONE)/); + if (statusMatch) { + const artifactMatch = text.match(/ARTIFACT:\s*(.+)/); + const summary = `Bates: ${statusMatch[0]}`; + return artifactMatch ? `${summary}, ${artifactMatch[0]}` : summary; + } + + // Check for delegation pattern + const delegateMatch = text.match(/(?:Delegating|Spawning|dispatching)\s+(?:to\s+)?(\w+)/i); + if (delegateMatch) { + return `Bates: Delegated to ${delegateMatch[1]}. ${truncateAtSentence(text, 80)}`; + } + + // Check for sub-agent result delivery + const deputyMatch = text.match(/(?:Baby Bates|Deputy|Sub-agent)\s*(?:result|report)?:?\s*/i); + if (deputyMatch) { + return `Bates delivered deputy result. ${truncateAtSentence(text.slice(deputyMatch.index! + deputyMatch[0].length), 100)}`; + } + + return "Bates: " + truncateAtSentence(text, SUMMARY_MAX_CHARS); +} + +/** Detect active tasks from message content */ +function detectActiveTasks(text: string): string[] { + const tasks: string[] = []; + // Look for "working on" / "investigating" / "looking into" patterns + const workingOn = text.match(/(?:working on|investigating|looking into|tackling)\s+(.{10,80}?)(?:\.|$)/gi); + if (workingOn) { + for (const match of workingOn) { + tasks.push(truncateAtSentence(match, 80)); + } + } + return tasks; +} + +/** Detect pending decisions from message content */ +function detectPendingDecisions(text: string): string[] { + const decisions: string[] = []; + // Questions from Bates to Robert + const questions = text.match(/(?:shall I|should I|would you like|do you want|which option)\s+(.{10,80}?\?)/gi); + if (questions) { + for (const q of questions) { + decisions.push(truncateAtSentence(q, 80)); + } + } + return decisions; +} + +/** Detect cron/deputy deliveries */ +function detectDeliveries(text: string): string[] { + const deliveries: string[] = []; + const cronMatch = text.match(/(?:cron|scheduled|heartbeat).*?(?:result|report|update):?\s*(.{10,60})/gi); + if (cronMatch) { + for (const m of cronMatch) { + deliveries.push(truncateAtSentence(m, 60)); + } + } + return deliveries; +} + +// --------------------------------------------------------------------------- +// Core: Update digest from messages +// --------------------------------------------------------------------------- +function updateDigestFromMessages( + agentId: string, + sessionKey: string, + messages: any[], + reason?: string +): HandoffDigest { + const existing = sessionDigests.get(agentId) || loadDigest(agentId) || { + sessionKey, + timestamp: new Date().toISOString(), + reason: reason || "agent_end", + lastInteractions: [], + activeTasks: [], + pendingDecisions: [], + recentDeliveries: [], + }; + + // Find last user and assistant messages + const userMsgs = messages.filter((m: any) => m.role === "user" || m.role === "human"); + const assistantMsgs = messages.filter((m: any) => m.role === "assistant"); + + const lastUser = userMsgs.length > 0 ? userMsgs[userMsgs.length - 1] : null; + const lastAssistant = assistantMsgs.length > 0 ? assistantMsgs[assistantMsgs.length - 1] : null; + + const now = new Date().toISOString(); + + // Add user interaction if present + if (lastUser) { + const userText = extractText(lastUser).trim(); + // Skip system/tool-only messages + if (userText && !userText.startsWith("[Tool:") && !userText.startsWith(" 0) existing.activeTasks = newTasks; + if (newDecisions.length > 0) existing.pendingDecisions = newDecisions; + if (newDeliveries.length > 0) { + existing.recentDeliveries.push(...newDeliveries); + // Keep last 5 deliveries + if (existing.recentDeliveries.length > 5) { + existing.recentDeliveries = existing.recentDeliveries.slice(-5); + } + } + } + } + + // Trim rolling buffer + if (existing.lastInteractions.length > MAX_INTERACTIONS) { + existing.lastInteractions = existing.lastInteractions.slice(-MAX_INTERACTIONS); + } + + // Update metadata + existing.sessionKey = sessionKey; + existing.timestamp = now; + if (reason) existing.reason = reason; + + // Persist + sessionDigests.set(agentId, existing); + saveDigest(agentId, existing); + + return existing; +} + +// --------------------------------------------------------------------------- +// Core: Format digest for injection +// --------------------------------------------------------------------------- +function formatDigestForInjection(digest: HandoffDigest): string { + const age = Date.now() - new Date(digest.timestamp).getTime(); + const ageMinutes = Math.round(age / 60000); + const ageStr = ageMinutes < 60 + ? `${ageMinutes} minute${ageMinutes !== 1 ? "s" : ""} ago` + : `${Math.round(ageMinutes / 60)} hour${Math.round(ageMinutes / 60) !== 1 ? "s" : ""} ago`; + + let reasonStr = digest.reason; + if (reasonStr === "idle") reasonStr = "idle timeout"; + if (reasonStr === "overflow") reasonStr = "context overflow"; + if (reasonStr === "reset_command") reasonStr = "manual reset"; + + const lines: string[] = [ + "", + `Your previous session ended ${ageStr} (reason: ${reasonStr}).`, + "", + ]; + + if (digest.lastInteractions.length > 0) { + lines.push("Last interactions:"); + for (const interaction of digest.lastInteractions) { + lines.push(`- ${interaction.summary}`); + } + lines.push(""); + } + + if (digest.activeTasks.length > 0) { + lines.push(`Active tasks: ${digest.activeTasks.join("; ")}`); + } + if (digest.pendingDecisions.length > 0) { + lines.push(`Pending decisions: ${digest.pendingDecisions.join("; ")}`); + } + if (digest.recentDeliveries.length > 0) { + lines.push(`Recent deliveries: ${digest.recentDeliveries.join("; ")}`); + } + + if (digest.activeTasks.length === 0 && digest.pendingDecisions.length === 0 && digest.recentDeliveries.length === 0) { + lines.push("No active tasks, pending decisions, or recent deliveries."); + } + + lines.push(""); + return lines.join("\n"); +} + +// --------------------------------------------------------------------------- +// Plugin definition +// --------------------------------------------------------------------------- +const plugin = { + id: "session-continuity", + name: "Session Continuity", + description: "Persists conversational context across session resets via handoff digests", + configSchema: emptyPluginConfigSchema(), + + register(api: OpenClawPluginApi) { + const log = api.logger; + ensureDataDir(); + + log.info("session-continuity: plugin registered"); + + // ------------------------------------------------------------------- + // 1. agent_end: Update rolling digest after each agent turn + // ------------------------------------------------------------------- + api.on("agent_end", (event: any, ctx: any) => { + try { + const agentId = ctx.agentId || "main"; + const sessionKey = ctx.sessionKey || "unknown"; + const messages = event.messages || []; + + if (messages.length === 0) return; + + updateDigestFromMessages(agentId, sessionKey, messages, "agent_end"); + log.info(`session-continuity: digest updated for ${agentId} (${messages.length} msgs)`); + } catch (err: any) { + log.error(`session-continuity: agent_end error: ${err.message}`); + } + }); + + // ------------------------------------------------------------------- + // 2. before_compaction: Snapshot digest before messages are pruned + // ------------------------------------------------------------------- + api.on("before_compaction", (event: any, ctx: any) => { + try { + const agentId = ctx.agentId || "main"; + const sessionKey = ctx.sessionKey || "unknown"; + const messages = event.messages || []; + + if (messages.length === 0) return; + + updateDigestFromMessages(agentId, sessionKey, messages, "compaction"); + log.info(`session-continuity: pre-compaction digest saved for ${agentId} (${event.compactingCount} msgs being compacted)`); + } catch (err: any) { + log.error(`session-continuity: before_compaction error: ${err.message}`); + } + }); + + // ------------------------------------------------------------------- + // 3. before_reset: Write final handoff digest + // ------------------------------------------------------------------- + api.on("before_reset", (event: any, ctx: any) => { + try { + const agentId = ctx.agentId || "main"; + const sessionKey = ctx.sessionKey || "unknown"; + const messages = event.messages || []; + const reason = event.reason || "unknown"; + + updateDigestFromMessages(agentId, sessionKey, messages, reason); + log.info(`session-continuity: handoff digest written for ${agentId} (reason: ${reason})`); + } catch (err: any) { + log.error(`session-continuity: before_reset error: ${err.message}`); + } + }); + + // ------------------------------------------------------------------- + // 4. before_prompt_build: Inject handoff digest into new sessions + // ------------------------------------------------------------------- + api.on("before_prompt_build", (_event: any, ctx: any) => { + try { + const agentId = ctx.agentId || "main"; + const sessionKey = ctx.sessionKey || "unknown"; + + // Check if we already injected for this session + const consumed = consumedDigests.get(sessionKey); + const digest = loadDigest(agentId); + + if (!digest) return; + + // Skip if already consumed for this session + if (consumed === digest.timestamp) return; + + // Skip stale digests + const age = Date.now() - new Date(digest.timestamp).getTime(); + if (age > MAX_DIGEST_AGE_MS) { + log.info(`session-continuity: digest for ${agentId} is stale (${Math.round(age / 60000)}min), skipping`); + return; + } + + // Skip if this is the same session that wrote the digest + if (digest.sessionKey === sessionKey) return; + + // Format and inject + const formatted = formatDigestForInjection(digest); + consumedDigests.set(sessionKey, digest.timestamp); + + log.info(`session-continuity: injecting handoff digest for ${agentId} into session ${sessionKey.slice(0, 20)}...`); + + return { prependContext: formatted }; + } catch (err: any) { + log.error(`session-continuity: before_prompt_build error: ${err.message}`); + return undefined; + } + }); + + // ------------------------------------------------------------------- + // 5. gateway_stop: Clean up in-memory state + // ------------------------------------------------------------------- + api.on("gateway_stop", () => { + sessionDigests.clear(); + consumedDigests.clear(); + log.info("session-continuity: cleaned up on gateway stop"); + }); + }, +}; + +export default plugin; diff --git a/bates-core/plugins/session-continuity/openclaw.plugin.json b/bates-core/plugins/session-continuity/openclaw.plugin.json new file mode 100644 index 0000000..acbd01b --- /dev/null +++ b/bates-core/plugins/session-continuity/openclaw.plugin.json @@ -0,0 +1,10 @@ +{ + "id": "session-continuity", + "name": "Session Continuity", + "description": "Persists conversational context across session resets via handoff digests", + "configSchema": { + "type": "object", + "additionalProperties": false, + "properties": {} + } +} From 2ff65aa26ff99d2b21dbc841d6491f7bc332c4c9 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Fri, 6 Mar 2026 21:22:33 +0000 Subject: [PATCH 29/63] Sync production state: v2026.3.2 migration, thread replies, delegation enforcer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plugins: - channel-bridge: add media download, voice channels, thread reply support - cost-tracker: migrate to registerHttpRoute (v2026.3.2), add Codex subscription zero-cost - dashboard: migrate to registerHttpRoute (v2026.3.2), restructure route handlers - session-continuity: fix recursive handoff nesting, add sessionId dedup, artifact detection - delegation-enforcer: new plugin — rate-limits main agent tool calls, forces delegation, anti-circumvention (3-layer enforcement), self-protection (integrity monitoring) Scripts: - post-to-channel.sh: Teams channel posting with thread reply support (secrets from config) - lookup-deputy.sh: deputy agent routing (GPT-5.4 model refs) - lookup-skill-file.sh: skill file lookup with plural aliases - acp-health-check.sh: ACP runtime diagnostics Workspace: - SOUL.md: core personality and behavioral rules - 21 workspace rules (delegation, heartbeat policy, teams channels, etc.) - 12 deputy heartbeat configs (absolute paths for sandbox compatibility) Co-Authored-By: Claude Opus 4.6 --- bates-core/plugins/channel-bridge/index.ts | 253 ++++++- bates-core/plugins/cost-tracker/index.ts | 85 ++- bates-core/plugins/dashboard/index.ts | 685 +++++++++--------- .../plugins/delegation-enforcer/index.ts | 497 +++++++++++++ .../delegation-enforcer/openclaw.plugin.json | 10 + .../plugins/session-continuity/index.ts | 137 +++- bates-core/scripts-core/acp-health-check.sh | 144 ++++ bates-core/scripts-core/lookup-deputy.sh | 127 ++++ bates-core/scripts-core/lookup-skill-file.sh | 162 +++++ bates-core/scripts-core/post-to-channel.sh | 167 +++++ bates-core/workspace-core/SOUL.md | 250 +++++++ .../agents/heartbeats/amara-HEARTBEAT.md | 45 ++ .../agents/heartbeats/archer-HEARTBEAT.md | 53 ++ .../agents/heartbeats/conrad-HEARTBEAT.md | 96 +++ .../agents/heartbeats/dash-HEARTBEAT.md | 42 ++ .../agents/heartbeats/jules-HEARTBEAT.md | 63 ++ .../agents/heartbeats/kira-HEARTBEAT.md | 44 ++ .../agents/heartbeats/mercer-HEARTBEAT.md | 52 ++ .../agents/heartbeats/mira-HEARTBEAT.md | 46 ++ .../agents/heartbeats/nova-HEARTBEAT.md | 50 ++ .../agents/heartbeats/paige-HEARTBEAT.md | 47 ++ .../agents/heartbeats/quinn-HEARTBEAT.md | 46 ++ .../agents/heartbeats/soren-HEARTBEAT.md | 82 +++ .../agents/scripts/lookup-deputy.sh | 127 ++++ .../agents/scripts/lookup-skill-file.sh | 162 +++++ ...IVED-cost-optimization-pre-subscription.md | 75 ++ .../workspace-additions/rules/acp-usage.md | 78 ++ .../rules/api-cost-optimization.md | 7 + .../rules/context-hygiene.md | 27 + .../rules/context-safety.md | 25 + .../rules/daily-routine.md | 19 + .../workspace-additions/rules/delegation.md | 287 +++++--- .../rules/deputy-feedback-loop.md | 22 +- .../workspace-additions/rules/ground-rules.md | 37 + .../workspace-additions/rules/group-chat.md | 46 ++ .../rules/heartbeat-policy.md | 31 + .../rules/knowledge-persistence.md | 30 + .../rules/memory-classification.md | 49 ++ .../rules/model-routing.md | 31 + .../rules/proactive-checkins.md | 109 +++ .../rules/proactive-philosophy.md | 36 + .../rules/rules-to-scripts.md | 58 ++ .../rules/self-diagnosis.md | 49 ++ .../workspace-additions/rules/self-service.md | 32 + .../rules/subagent-policy.md | 271 +++++++ .../rules/teams-channels.md | 95 +++ .../integrations/m365/scripts/graph-api.sh | 123 ++-- .../m365/scripts/upload-to-onedrive.sh | 167 +---- .../teams/scripts/post-to-channel.sh | 167 +++++ 49 files changed, 4631 insertions(+), 712 deletions(-) create mode 100644 bates-core/plugins/delegation-enforcer/index.ts create mode 100644 bates-core/plugins/delegation-enforcer/openclaw.plugin.json create mode 100755 bates-core/scripts-core/acp-health-check.sh create mode 100755 bates-core/scripts-core/lookup-deputy.sh create mode 100755 bates-core/scripts-core/lookup-skill-file.sh create mode 100755 bates-core/scripts-core/post-to-channel.sh create mode 100644 bates-core/workspace-core/SOUL.md create mode 100644 bates-enhance/integrations/agents/heartbeats/amara-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/archer-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/conrad-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/dash-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/jules-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/kira-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/mercer-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/mira-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/nova-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/paige-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/quinn-HEARTBEAT.md create mode 100644 bates-enhance/integrations/agents/heartbeats/soren-HEARTBEAT.md create mode 100755 bates-enhance/integrations/agents/scripts/lookup-deputy.sh create mode 100755 bates-enhance/integrations/agents/scripts/lookup-skill-file.sh create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/ARCHIVED-cost-optimization-pre-subscription.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/acp-usage.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/api-cost-optimization.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/context-hygiene.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/context-safety.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/daily-routine.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/ground-rules.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/group-chat.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/heartbeat-policy.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/knowledge-persistence.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/memory-classification.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/model-routing.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/proactive-checkins.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/proactive-philosophy.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/rules-to-scripts.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/self-diagnosis.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/self-service.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/subagent-policy.md create mode 100644 bates-enhance/integrations/agents/workspace-additions/rules/teams-channels.md create mode 100755 bates-enhance/integrations/teams/scripts/post-to-channel.sh diff --git a/bates-core/plugins/channel-bridge/index.ts b/bates-core/plugins/channel-bridge/index.ts index bae7b12..a62bbf2 100644 --- a/bates-core/plugins/channel-bridge/index.ts +++ b/bates-core/plugins/channel-bridge/index.ts @@ -2,7 +2,7 @@ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs"; import { join, dirname } from "path"; import { fileURLToPath } from "url"; import { execSync } from "child_process"; -import { emptyPluginConfigSchema } from "openclaw/plugin-sdk"; +import { emptyPluginConfigSchema, buildMediaPayload } from "openclaw/plugin-sdk"; import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; // --------------------------------------------------------------------------- @@ -31,6 +31,17 @@ const CONVERSATIONS_FILE = "/home/openclaw/.openclaw/msteams-conversations.json"; const DEDUP_TTL_MS = 5 * 60 * 1000; const DEDUP_MAX = 500; +const VOICE_CHANNELS_FILE = join(DATA_DIR, "voice-channels.json"); + +function loadVoiceChannels(): Set { + try { + if (existsSync(VOICE_CHANNELS_FILE)) { + const data = JSON.parse(readFileSync(VOICE_CHANNELS_FILE, "utf-8")); + return new Set(Array.isArray(data.voiceChannels) ? data.voiceChannels : []); + } + } catch {} + return new Set(); +} // --------------------------------------------------------------------------- // Types @@ -140,6 +151,19 @@ async function graphApi(method: string, endpoint: string, body?: any): Promise
{ + const token = await getGraphToken(); + const res = await fetch(`${GRAPH_BASE}${endpoint}`, { + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) { + const text = await res.text(); + throw new Error(`Graph binary GET ${endpoint} (${res.status}): ${text.slice(0, 200)}`); + } + const buffer = Buffer.from(await res.arrayBuffer()); + return { buffer, contentType: res.headers.get("content-type") || undefined }; +} + // --------------------------------------------------------------------------- // Subscription persistence // --------------------------------------------------------------------------- @@ -268,16 +292,23 @@ async function sendToChannel( conversationId: string, text: string, appPassword: string, + replyToId?: string, ): Promise { const token = await getBotToken(appPassword); - const activity = { + const activity: Record = { type: "message", text, from: { id: `28:${BOT_APP_ID}`, name: "Bates" }, conversation: { id: conversationId }, }; - const url = `${BOT_SERVICE_URL}v3/conversations/${encodeURIComponent(conversationId)}/activities`; + // For thread replies, append ;messageid= to the conversation ID in the URL + // This is the Bot Framework pattern for posting into an existing Teams channel thread + const convPath = replyToId + ? `${conversationId};messageid=${replyToId}` + : conversationId; + const url = `${BOT_SERVICE_URL}v3/conversations/${encodeURIComponent(convPath)}/activities`; + const res = await fetch(url, { method: "POST", headers: { @@ -295,6 +326,132 @@ async function sendToChannel( return result.id || "unknown"; } +// --------------------------------------------------------------------------- +// Media download from Graph API messages +// --------------------------------------------------------------------------- +const MEDIA_MAX_BYTES = 20 * 1024 * 1024; // 20MB, matches tools.media.audio.maxBytes + +type DownloadedMedia = { path: string; contentType?: string }; + +async function downloadMessageMedia( + channelId: string, + messageId: string, + isReply: boolean, + parentMessageId: string | undefined, + message: any, + core: any, + log: any, +): Promise { + const media: DownloadedMedia[] = []; + + // Build the Graph API message endpoint for hostedContents + let msgEndpoint: string; + if (isReply && parentMessageId) { + msgEndpoint = `/teams/${TEAM_ID}/channels/${channelId}/messages/${parentMessageId}/replies/${messageId}`; + } else { + msgEndpoint = `/teams/${TEAM_ID}/channels/${channelId}/messages/${messageId}`; + } + + // Strategy 1: Download file attachments with contentUrl + const attachments = Array.isArray(message.attachments) ? message.attachments : []; + for (const att of attachments) { + const contentUrl = att.contentUrl; + if (!contentUrl) continue; + // Skip non-downloadable attachment types (cards, adaptive cards, etc.) + if (att.contentType?.startsWith("application/vnd.microsoft.card")) continue; + + try { + const token = await getGraphToken(); + const fetched = await core.channel.media.fetchRemoteMedia({ + url: contentUrl, + maxBytes: MEDIA_MAX_BYTES, + requestInit: { headers: { Authorization: `Bearer ${token}` } }, + }); + const mime = core.media.detectMime({ + buffer: fetched.buffer, + headerMime: fetched.contentType || att.contentType, + filePath: att.name, + }); + const saved = await core.channel.media.saveMediaBuffer( + fetched.buffer, + mime || fetched.contentType || att.contentType, + "inbound", + MEDIA_MAX_BYTES, + att.name, + ); + media.push({ path: saved.path, contentType: saved.contentType }); + log.info("channel-bridge: attachment downloaded", { + name: att.name, + contentType: saved.contentType, + size: saved.size, + }); + } catch (err: any) { + log.warn(`channel-bridge: attachment download failed (${att.name}): ${err.message}`); + } + } + + // Strategy 2: Download hostedContents (voice messages appear here) + try { + const hostedResult = await graphApi("GET", `${msgEndpoint}/hostedContents`); + const hostedItems = hostedResult?.value || []; + for (const item of hostedItems) { + const hostedId = item.id; + if (!hostedId) continue; + + try { + // Try inline base64 content first + if (item.contentBytes) { + const buffer = Buffer.from(item.contentBytes, "base64"); + if (buffer.byteLength > MEDIA_MAX_BYTES) continue; + const mime = core.media.detectMime({ + buffer, + headerMime: item.contentType || undefined, + }); + const saved = await core.channel.media.saveMediaBuffer( + buffer, + mime || item.contentType, + "inbound", + MEDIA_MAX_BYTES, + ); + media.push({ path: saved.path, contentType: saved.contentType }); + log.info("channel-bridge: hostedContent (base64) saved", { + id: hostedId, + contentType: saved.contentType, + size: saved.size, + }); + continue; + } + + // Download binary via $value endpoint + const binary = await graphApiBinary(`${msgEndpoint}/hostedContents/${hostedId}/$value`); + if (binary.buffer.byteLength > MEDIA_MAX_BYTES) continue; + const mime = core.media.detectMime({ + buffer: binary.buffer, + headerMime: binary.contentType, + }); + const saved = await core.channel.media.saveMediaBuffer( + binary.buffer, + mime || binary.contentType, + "inbound", + MEDIA_MAX_BYTES, + ); + media.push({ path: saved.path, contentType: saved.contentType }); + log.info("channel-bridge: hostedContent ($value) saved", { + id: hostedId, + contentType: saved.contentType, + size: saved.size, + }); + } catch (err: any) { + log.warn(`channel-bridge: hostedContent download failed (${hostedId}): ${err.message}`); + } + } + } catch (err: any) { + log.debug(`channel-bridge: hostedContents fetch skipped: ${err.message}`); + } + + return media; +} + // --------------------------------------------------------------------------- // Core: process a channel message notification // --------------------------------------------------------------------------- @@ -338,13 +495,29 @@ async function processMessage( const bodyType = message.body?.contentType || "text"; let text = bodyType === "html" ? stripHtml(bodyContent) : bodyContent.trim(); - if (!text) return; + + // Download media attachments (voice messages, images, files) + const mediaList = await downloadMessageMedia( + channelId, messageId, isReply, parentMessageId, message, core, log, + ); + const mediaPayload = mediaList.length > 0 + ? buildMediaPayload(mediaList.map(m => ({ path: m.path, contentType: m.contentType }))) + : {}; + + // Allow media-only messages (voice messages have no text body) + if (!text && mediaList.length === 0) return; + + // For voice-only messages, set a placeholder + if (!text && mediaList.length > 0) { + text = ""; + } log.info("processing bridged channel message", { channel: channelId.slice(0, 30), sender: senderName, preview: text.slice(0, 80), isReply, + mediaCount: mediaList.length, }); // Resolve route @@ -358,6 +531,9 @@ async function processMessage( const teamsFrom = `msteams:channel:${conversationId}`; const teamsTo = `conversation:${conversationId}`; + // Check if this is a voice channel + const isVoiceChannel = loadVoiceChannels().has(channelId); + // Build envelope const storePath = core.channel.session.resolveStorePath(cfg.session?.store, { agentId: route.agentId, @@ -367,13 +543,23 @@ async function processMessage( storePath, sessionKey: route.sessionKey, }); + + let envelopeBody = `${senderName}: ${text}`; + if (isVoiceChannel) { + const voiceHint = "[VOICE CHANNEL - The user is listening via text-to-speech (Android Auto). " + + "Write in flowing prose that sounds natural when read aloud. " + + "No Adaptive Cards, no markdown tables, no bullet lists, no code blocks. " + + "Normal response length is fine - the user can listen for several minutes.]"; + envelopeBody = `${voiceHint}\n\n${senderName}: ${text}`; + } + const body = core.channel.reply.formatAgentEnvelope({ channel: "Teams", from: "channel", timestamp: new Date(message.createdDateTime), previousTimestamp, envelope: envelopeOptions, - body: `${senderName}: ${text}`, + body: envelopeBody, }); // Also notify main session via system event (like the real msteams handler does) @@ -405,8 +591,14 @@ async function processMessage( CommandAuthorized: true, OriginatingChannel: "msteams" as const, OriginatingTo: teamsTo, + // Thread root ID: for replies it's the parent, for top-level it's the message itself + MessageThreadId: isReply && parentMessageId ? parentMessageId : messageId, + ...mediaPayload, }); + // Thread root for reply routing + const threadRootId = isReply && parentMessageId ? parentMessageId : messageId; + // Record inbound session await core.channel.session.recordInboundSession({ storePath, @@ -459,8 +651,8 @@ async function processMessage( const trimmed = chunk.trim(); if (!trimmed) continue; try { - const msgId = await sendToChannel(conversationId, trimmed, appPassword); - log.info("reply sent to channel", { conversationId: conversationId.slice(0, 30), msgId }); + const msgId = await sendToChannel(conversationId, trimmed, appPassword, threadRootId); + log.info("reply sent to channel", { conversationId: conversationId.slice(0, 30), msgId, threadRootId }); } catch (err) { log.error(`channel-bridge reply failed: ${String(err)}`); } @@ -504,9 +696,13 @@ const plugin = { let initDone = false; // ----- HTTP webhook handler ----- - api.registerHttpHandler(async (req: any, res: any): Promise => { + // auth: "plugin" — Graph API sends unauthenticated webhook POSTs + // match: "prefix" — handles /channel-bridge/webhook and query params + api.registerHttpRoute({ + path: "/channel-bridge/webhook", + auth: "plugin", + handler: async (req: any, res: any): Promise => { const url = new URL(req.url ?? "/", `http://${req.headers.host || "localhost"}`); - if (url.pathname !== "/channel-bridge/webhook") return false; // Graph subscription validation const validationToken = url.searchParams.get("validationToken"); @@ -515,13 +711,13 @@ const plugin = { res.setHeader("Content-Type", "text/plain"); res.writeHead(200); res.end(validationToken); - return true; + return; } if (req.method !== "POST") { res.writeHead(405); res.end("Method not allowed"); - return true; + return; } // Read body @@ -598,8 +794,7 @@ const plugin = { } catch (err) { log.error(`channel-bridge: notification parse failed: ${String(err)}`); } - - return true; + }, }); // ----- Lifecycle: create subscriptions on start ----- @@ -658,6 +853,38 @@ const plugin = { }); }, 5000); + // ----- Telegram → Teams DM mirror ----- + // When Bates replies on Telegram, also mirror the reply to Teams DM + // so Android Auto can read it aloud while driving. + // Uses the internal "message:sent" hook which fires from deliverOutboundPayloads. + const ROBERT_TEAMS_DM = + "a:11nTXbzESsObhZCvHfCcvc-0oiPJ2DOj-UKeQTdbo_bvbRilENaor0SH8pgIh9VqlXEn4vfdfyPv-RsrpB1a5AyxaeKQIQtXTGb0pMQ4_7SzEDzqM9YAC_2LIdFXVyo97"; + const telegramMirrorAppPassword = cfg.channels?.msteams?.appPassword; + + if (telegramMirrorAppPassword) { + api.on("message_sent", async (event: any, ctx: any) => { + // Only mirror Telegram messages + if (ctx?.channelId !== "telegram") return; + if (!event?.success) return; + + const content = (event?.content || "").trim(); + if (!content) return; + + log.info("telegram→teams mirror: message_sent hook fired", { + channelId: ctx.channelId, + contentLength: content.length, + }); + + try { + await sendToChannel(ROBERT_TEAMS_DM, content, telegramMirrorAppPassword!); + log.info("telegram→teams mirror sent", { length: content.length }); + } catch (err: any) { + log.warn(`telegram→teams mirror failed: ${err.message}`); + } + }); + log.info("Telegram → Teams DM mirror registered (message_sent typed hook)"); + } + // ----- Lifecycle: cleanup on stop ----- api.on("gateway_stop", async () => { log.info("channel-bridge: cleaning up"); diff --git a/bates-core/plugins/cost-tracker/index.ts b/bates-core/plugins/cost-tracker/index.ts index cd6b7af..c7e8c25 100644 --- a/bates-core/plugins/cost-tracker/index.ts +++ b/bates-core/plugins/cost-tracker/index.ts @@ -51,6 +51,9 @@ const SCAN_INTERVAL_MS = 60_000; // Anthropic model prefix for zero-cost detection under subscription const ANTHROPIC_MODEL_PREFIXES = ["claude-"]; +// OpenAI Codex model prefixes for zero-cost detection under subscription +const OPENAI_CODEX_MODEL_PREFIXES = ["gpt-"]; + // Cost per million tokens (fallback when transcript has no cost field) const MODEL_COSTS: Record< string, @@ -106,6 +109,43 @@ function isAnthropicModel(model: string | undefined): boolean { return ANTHROPIC_MODEL_PREFIXES.some((prefix) => model.startsWith(prefix)); } +// --------------------------------------------------------------------------- +// OpenAI Codex subscription (OAuth) detection +// --------------------------------------------------------------------------- +let _isOpenAICodexSubscription: boolean | null = null; +let _codexSubscriptionCheckAt = 0; + +function isOpenAICodexSubscription(): boolean { + const now = Date.now(); + if (_isOpenAICodexSubscription !== null && now - _codexSubscriptionCheckAt < SUBSCRIPTION_CHECK_INTERVAL_MS) { + return _isOpenAICodexSubscription; + } + _codexSubscriptionCheckAt = now; + try { + if (!existsSync(AUTH_PROFILES_FILE)) { + _isOpenAICodexSubscription = false; + return false; + } + const data = JSON.parse(readFileSync(AUTH_PROFILES_FILE, "utf-8")); + const activeProfile = data?.lastGood?.["openai-codex"]; + if (!activeProfile) { + _isOpenAICodexSubscription = false; + return false; + } + const profileDef = data?.profiles?.[activeProfile]; + _isOpenAICodexSubscription = profileDef?.type === "oauth"; + return _isOpenAICodexSubscription; + } catch { + _isOpenAICodexSubscription = false; + return false; + } +} + +function isOpenAICodexModel(model: string | undefined): boolean { + if (!model) return false; + return OPENAI_CODEX_MODEL_PREFIXES.some((prefix) => model.startsWith(prefix)); +} + // --------------------------------------------------------------------------- // Types // --------------------------------------------------------------------------- @@ -229,6 +269,8 @@ function estimateCost( ): number { // Anthropic models are free under Claude Max subscription (token profile) if (isAnthropicModel(model) && isAnthropicSubscription()) return 0; + // OpenAI Codex models are free under ChatGPT Plus/Pro subscription (OAuth) + if (isOpenAICodexModel(model) && isOpenAICodexSubscription()) return 0; const costs = model ? MODEL_COSTS[model] : undefined; if (!costs) return 0; @@ -283,8 +325,10 @@ function recordUsage(event: DiagnosticUsageEvent): void { const totalTokens = event.usage?.total ?? input + output + cacheRead + cacheWrite; - // Anthropic models are free under Claude Max subscription (token profile) - const subscriptionZero = isAnthropicModel(event.model) && isAnthropicSubscription(); + // Subscription models are free (Anthropic token profile, OpenAI Codex OAuth) + const subscriptionZero = + (isAnthropicModel(event.model) && isAnthropicSubscription()) || + (isOpenAICodexModel(event.model) && isOpenAICodexSubscription()); const costUsd = subscriptionZero ? 0 : (event.costUsd ?? estimateCost(event.model, input, output, cacheRead, cacheWrite)); @@ -363,9 +407,11 @@ function recordFromTranscript( const cacheWrite = usage.cacheWrite ?? 0; const totalTokens = usage.totalTokens ?? (input + output + cacheRead + cacheWrite); - // Anthropic models are free under Claude Max subscription (token profile). - // Override any cost from the API response since it still reports billing rates. - const subscriptionZero = isAnthropicModel(model) && isAnthropicSubscription(); + // Subscription models are free — override any cost from the API response + // since it still reports billing rates under subscriptions. + const subscriptionZero = + (isAnthropicModel(model) && isAnthropicSubscription()) || + (isOpenAICodexModel(model) && isOpenAICodexSubscription()); const costUsd = subscriptionZero ? 0 : (usage.cost?.total ?? estimateCost(model, input, output, cacheRead, cacheWrite)); const interaction: InteractionCost = { @@ -560,7 +606,7 @@ const plugin = { // ----------------------------------------------------------------------- // The message_sending hook is defined in the gateway but never invoked. // Instead, we use a globalThis.__openclawMessageTransform bridge that - // is called from a small patch in the gateway deliver module. + // is called from a small patch in deliver-Ck-fH_m-.js. // Initialize preTurnDailyTotal from persisted data so first turn after // restart doesn't show turn == today (was starting at 0). const initDayData = dailyCosts[todayKey()]; @@ -700,15 +746,10 @@ const plugin = { // ----------------------------------------------------------------------- // 7. Register HTTP API endpoint for cost data // ----------------------------------------------------------------------- - api.registerHttpHandler(async (req: any, res: any): Promise => { - const url = new URL( - req.url ?? "/", - `http://${req.headers.host || "localhost"}` - ); - const pathname = url.pathname; - - if (pathname === "/cost-tracker/api/summary") { - // Trigger scan for fresh data + api.registerHttpRoute({ + path: "/cost-tracker/api/summary", + auth: "gateway", + handler: async (req: any, res: any): Promise => { scanSessionFiles(api.logger as any); const day = todayKey(); @@ -742,10 +783,13 @@ const plugin = { res.setHeader("Content-Type", "application/json"); res.setHeader("Cache-Control", "no-cache"); res.end(JSON.stringify(response)); - return true; - } + }, + }); - if (pathname === "/cost-tracker/api/today") { + api.registerHttpRoute({ + path: "/cost-tracker/api/today", + auth: "gateway", + handler: async (req: any, res: any): Promise => { scanSessionFiles(api.logger as any); const day = todayKey(); const dayData = dailyCosts[day] ?? { @@ -758,10 +802,7 @@ const plugin = { res.setHeader("Content-Type", "application/json"); res.setHeader("Cache-Control", "no-cache"); res.end(JSON.stringify({ date: day, ...dayData })); - return true; - } - - return false; + }, }); api.logger.info( diff --git a/bates-core/plugins/dashboard/index.ts b/bates-core/plugins/dashboard/index.ts index 7219f04..354cbc7 100644 --- a/bates-core/plugins/dashboard/index.ts +++ b/bates-core/plugins/dashboard/index.ts @@ -9,50 +9,6 @@ import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; const PLUGIN_DIR = dirname(fileURLToPath(import.meta.url)); const STATIC_DIR = join(PLUGIN_DIR, "static"); const WORKSPACE = "/home/openclaw/.openclaw/workspace"; -const CONTROL_UI_DIR = "/home/openclaw/.npm-global/lib/node_modules/openclaw/dist/control-ui"; - -// Injected into Control UI: sidebar nav item + top banner for mobile -const DASHBOARD_LINK_SNIPPET = ` - - - +`); + }, + }); + + // Baby avatars (prefix match, loaded as in dashboard) api.registerHttpRoute({ path: "/baby-avatars", - auth: "gateway", + auth: "plugin", match: "prefix", handler: async (req: any, res: any): Promise => { const url = new URL(req.url ?? "/", `http://${req.headers.host || "localhost"}`); @@ -824,14 +852,21 @@ const plugin = { }); // Dashboard catch-all: parameterized API routes + static file serving + // Uses auth: "gateway" — browser access requires ?token= in the initial URL, + // which gets stripped and injected into the HTML for subsequent API calls. api.registerHttpRoute({ path: "/dashboard", - auth: "gateway", + auth: "plugin", match: "prefix", handler: async (req: any, res: any): Promise => { const url = new URL(req.url ?? "/", `http://${req.headers.host || "localhost"}`); const pathname = url.pathname; + // API routes need auth, static files don't + if (pathname.startsWith("/dashboard/api/")) { + if (!requireAuth(req, res)) return; + } + // API: agent soul (parameterized) if (pathname.match(/^\/dashboard\/api\/agents\/[^/]+\/soul$/)) { const agentId = pathname.split("/")[4]; From 8e91b5f2d79deb9520a180511418d7d7e045c066 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 20:00:58 +0000 Subject: [PATCH 43/63] Fix dashboard panels using bare fetch without auth token Settings, integrations, costs, and rollout panels were calling fetch() directly without the Bearer token, causing 401s when accessed remotely. Switched to D.fetchApi() which reads the token from window.__GATEWAY_CONFIG. Co-Authored-By: Claude Opus 4.6 --- .../plugins/dashboard/static/js/panel-costs.js | 4 ++-- .../dashboard/static/js/panel-integrations.js | 3 +-- .../dashboard/static/js/panel-rollout.js | 11 +++++------ .../dashboard/static/js/panel-settings.js | 17 ++++++++++++----- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/bates-core/plugins/dashboard/static/js/panel-costs.js b/bates-core/plugins/dashboard/static/js/panel-costs.js index 08fd50d..c25192a 100644 --- a/bates-core/plugins/dashboard/static/js/panel-costs.js +++ b/bates-core/plugins/dashboard/static/js/panel-costs.js @@ -110,8 +110,8 @@ async function refresh() { try { - const r = await fetch('/dashboard/api/costs'); - if (r.ok) { render(await r.json()); return; } + const data = await D.fetchApi('costs'); + if (data) { render(data); return; } } catch {} render(null); } diff --git a/bates-core/plugins/dashboard/static/js/panel-integrations.js b/bates-core/plugins/dashboard/static/js/panel-integrations.js index 8bf6060..07671b9 100644 --- a/bates-core/plugins/dashboard/static/js/panel-integrations.js +++ b/bates-core/plugins/dashboard/static/js/panel-integrations.js @@ -45,8 +45,7 @@ async function refresh() { let healthData = null; try { - const res = await fetch('/dashboard/api/integrations/health'); - if (res.ok) healthData = await res.json(); + healthData = await D.fetchApi('integrations/health'); } catch {} render(healthData); } diff --git a/bates-core/plugins/dashboard/static/js/panel-rollout.js b/bates-core/plugins/dashboard/static/js/panel-rollout.js index 346c4b6..9989d21 100644 --- a/bates-core/plugins/dashboard/static/js/panel-rollout.js +++ b/bates-core/plugins/dashboard/static/js/panel-rollout.js @@ -8,9 +8,9 @@ const LAYERS = [ { name: 'Layer 1 — COO', agents: [{ name: 'Bates', role: 'Chief Operating Officer' }] }, { name: 'Layer 2 — Deputies', agents: [ - { name: 'Conrad', role: 'Project A Deputy' }, - { name: 'Soren', role: 'Project B Deputy' }, - { name: 'Amara', role: 'Project C Deputy' }, + { name: 'Conrad', role: 'fDesk Deputy' }, + { name: 'Soren', role: 'SynapseLayer Deputy' }, + { name: 'Amara', role: 'Escola Caravela Deputy' }, { name: 'Jules', role: 'Personal Deputy' }, { name: 'Dash', role: 'DevOps Deputy' }, ]}, @@ -97,9 +97,8 @@ async function refresh() { try { - const res = await fetch('/dashboard/api/agents'); - if (res.ok) { - const data = await res.json(); + const data = await D.fetchApi('agents'); + if (data) { const agents = Array.isArray(data) ? data : (data && data.agents ? data.agents : []); render(agents); return; diff --git a/bates-core/plugins/dashboard/static/js/panel-settings.js b/bates-core/plugins/dashboard/static/js/panel-settings.js index 5a68d4d..99ab6e7 100644 --- a/bates-core/plugins/dashboard/static/js/panel-settings.js +++ b/bates-core/plugins/dashboard/static/js/panel-settings.js @@ -4,6 +4,13 @@ (function () { const D = window.Dashboard; + function authHeaders(extra) { + const h = {}; + const token = window.__GATEWAY_CONFIG?.token; + if (token) h['Authorization'] = 'Bearer ' + token; + return Object.assign(h, extra || {}); + } + function card(title, items) { let html = `
${D.esc(title)}
`; for (const [k, v] of items) { @@ -71,7 +78,7 @@ try { const res = await fetch('/dashboard/api/settings/m365-safety', { method: 'POST', - headers: { 'Content-Type': 'application/json' }, + headers: authHeaders({ 'Content-Type': 'application/json' }), body: JSON.stringify({ enforcement: 'active' }), }); const result = await res.json(); @@ -148,7 +155,7 @@ try { const res = await fetch('/dashboard/api/settings/m365-safety', { method: 'POST', - headers: { 'Content-Type': 'application/json' }, + headers: authHeaders({ 'Content-Type': 'application/json' }), body: JSON.stringify({ enforcement: 'OVERRIDE_ALL_SAFETY' }), }); const result = await res.json(); @@ -175,7 +182,7 @@ banner.innerHTML = ` ${D.esc(message)} @@ -208,8 +215,8 @@ async function refresh() { try { - const res = await fetch("/dashboard/api/settings"); - if (res.ok) { render(await res.json()); return; } + const data = await D.fetchApi("settings"); + if (data && !data.error) { render(data); return; } } catch {} render(null); } From 99421fe760761b203fe2e8d45e203dc909093ef2 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 20:06:55 +0000 Subject: [PATCH 44/63] Add sub-tabbed settings panel with collapsible cards and whitelist editor Settings panel now has 3 tabs: - Overview: model, fleet, session, compaction info (collapsible cards) - M365 Safety: safety gateway status and kill switch toggle - Whitelists: inline editor for email domains, calendar attendees, OneDrive paths with add/remove tag UI All cards are collapsible with chevron toggle. Whitelist changes write directly to ~/.openclaw/m365-safety/whitelist.yaml via a simple YAML parser that preserves structure. New API: GET/POST /dashboard/api/settings/whitelist Co-Authored-By: Claude Opus 4.6 --- bates-core/plugins/dashboard/index.ts | 143 ++++++ .../dashboard/static/js/panel-settings.js | 414 +++++++++++++----- .../plugins/dashboard/static/styles.css | 145 +++++- 3 files changed, 585 insertions(+), 117 deletions(-) diff --git a/bates-core/plugins/dashboard/index.ts b/bates-core/plugins/dashboard/index.ts index 394fe0c..c6b4ecc 100644 --- a/bates-core/plugins/dashboard/index.ts +++ b/bates-core/plugins/dashboard/index.ts @@ -99,6 +99,90 @@ function collectBody(req: any): Promise { }); } +/** + * Minimal YAML parser for the whitelist config. + * Handles: top-level sections, string/number/boolean values, and arrays of scalars. + * Preserves structure but strips comments on write. + */ +function parseSimpleYaml(text: string): Record { + const result: Record = {}; + let currentSection = ""; + let currentKey = ""; + + for (const rawLine of text.split("\n")) { + const line = rawLine.replace(/#.*$/, "").trimEnd(); // strip comments + if (!line.trim()) continue; + + // Top-level section: "email:" with no indent + const sectionMatch = line.match(/^(\w[\w_]*):\s*$/); + if (sectionMatch) { + currentSection = sectionMatch[1]; + if (!result[currentSection]) result[currentSection] = {}; + currentKey = ""; + continue; + } + + // Key-value in section: " key: value" + const kvMatch = line.match(/^ (\w[\w_]*):\s*(.*)$/); + if (kvMatch && currentSection) { + const [, key, rawVal] = kvMatch; + currentKey = key; + const val = rawVal.trim(); + if (val === "" || val === "[]") { + result[currentSection][key] = []; + } else if (val === "true") { + result[currentSection][key] = true; + } else if (val === "false") { + result[currentSection][key] = false; + } else if (/^\d+$/.test(val)) { + result[currentSection][key] = parseInt(val, 10); + } else { + result[currentSection][key] = val; + } + continue; + } + + // Array item: " - value" + const arrMatch = line.match(/^ - (.+)$/); + if (arrMatch && currentSection && currentKey) { + const arr = result[currentSection][currentKey]; + if (Array.isArray(arr)) { + arr.push(arrMatch[1].trim()); + } + } + } + + return result; +} + +function serializeSimpleYaml(data: Record): string { + const lines: string[] = []; + for (const [section, obj] of Object.entries(data)) { + if (typeof obj !== "object" || obj === null) continue; + lines.push(`${section}:`); + for (const [key, val] of Object.entries(obj as Record)) { + if (Array.isArray(val)) { + if (val.length === 0) { + lines.push(` ${key}: []`); + } else { + lines.push(` ${key}:`); + for (const item of val) { + lines.push(` - ${item}`); + } + } + } else if (typeof val === "boolean") { + lines.push(` ${key}: ${val}`); + } else if (typeof val === "number") { + lines.push(` ${key}: ${val}`); + } else { + lines.push(` ${key}: ${val}`); + } + } + lines.push(""); + } + return lines.join("\n") + "\n"; +} + const plugin = { id: "dashboard", name: "Command Center Dashboard", @@ -740,6 +824,65 @@ const plugin = { } }); + // API: read whitelist YAML (GET) + apiRoute("/dashboard/api/settings/whitelist", async (req: any, res: any): Promise => { + const wlPath = "/home/openclaw/.openclaw/m365-safety/whitelist.yaml"; + if (req.method === "POST") { + // Mutate whitelist + try { + const body = JSON.parse(await collectBody(req)); + const { action, section, field, value } = body; + if (!action || !section || !field || value === undefined) { + jsonResponse(res, { error: "Missing action, section, field, or value" }); + return; + } + // Read YAML as lines and parse minimally + // We use a simple line-based approach to preserve comments + let content = ""; + try { content = readFileSync(wlPath, "utf-8"); } catch { + jsonResponse(res, { error: "Whitelist file not found" }); + return; + } + // Parse with a basic YAML parser (split into sections) + const yaml = parseSimpleYaml(content); + const sectionObj = yaml[section]; + if (!sectionObj || typeof sectionObj !== "object") { + jsonResponse(res, { error: `Unknown section: ${section}` }); + return; + } + let list = sectionObj[field]; + if (!Array.isArray(list)) list = []; + + if (action === "add") { + if (!list.includes(value)) { + list.push(value); + sectionObj[field] = list; + } + } else if (action === "remove") { + sectionObj[field] = list.filter((v: string) => v !== value); + } else { + jsonResponse(res, { error: `Unknown action: ${action}` }); + return; + } + yaml[section] = sectionObj; + writeFileSync(wlPath, serializeSimpleYaml(yaml), "utf-8"); + api.logger.info(`dashboard: whitelist ${action} ${section}.${field}: ${value}`); + jsonResponse(res, { success: true }); + } catch (e: any) { + jsonResponse(res, { error: e.message }); + } + return; + } + // GET: read and return as JSON + try { + const content = readFileSync(wlPath, "utf-8"); + const yaml = parseSimpleYaml(content); + jsonResponse(res, yaml); + } catch (e: any) { + jsonResponse(res, { error: e.message }); + } + }); + // API: file content (workspace files) apiRoute("/dashboard/api/file", async (req: any, res: any): Promise => { const url = new URL(req.url ?? "/", `http://${req.headers.host || "localhost"}`); diff --git a/bates-core/plugins/dashboard/static/js/panel-settings.js b/bates-core/plugins/dashboard/static/js/panel-settings.js index 99ab6e7..8f9a573 100644 --- a/bates-core/plugins/dashboard/static/js/panel-settings.js +++ b/bates-core/plugins/dashboard/static/js/panel-settings.js @@ -1,8 +1,12 @@ /** - * Settings Panel — Config summary + M365 Safety toggle + * Settings Panel — Sub-tabbed, collapsible, with whitelist editor + * Tabs: Overview | M365 Safety | Whitelists */ (function () { const D = window.Dashboard; + let _data = null; + let _whitelist = null; + let _activeTab = 'overview'; function authHeaders(extra) { const h = {}; @@ -11,70 +15,235 @@ return Object.assign(h, extra || {}); } - function card(title, items) { - let html = `
${D.esc(title)}
`; - for (const [k, v] of items) { - html += `
${D.esc(k)}${D.esc(String(v))}
`; - } - return html + '
'; + // ── Collapsible card ── + function collapseCard(id, title, contentHtml, opts) { + const open = opts?.open !== false; + const cls = opts?.cls || ''; + return `
+
+ ${D.esc(title)} + +
+
${contentHtml}
+
`; } - function safetyCard(m365) { - if (!m365) return ''; - const isOverride = m365.override_active; - const statusClass = isOverride ? 'safety-status-danger' : 'safety-status-ok'; - const statusText = isOverride ? 'ALL PROTECTION DISABLED' : 'Active'; - const statusIcon = isOverride ? '\u26A0\uFE0F' : '\u2705'; + function kvRows(items) { + return items.map(([k, v]) => + `
${D.esc(k)}${D.esc(String(v))}
` + ).join(''); + } - let html = `
`; - html += '
M365 Safety Gateway
'; + // ── Tab: Overview ── + function renderOverview(d) { + return '
' + + collapseCard('model', 'Model', kvRows([ + ['Primary', d.default_model || '\u2014'], + ['Fallbacks', (d.model_fallbacks || []).join(', ') || '\u2014'], + ])) + + collapseCard('fleet', 'Fleet', kvRows([ + ['Agents', d.num_agents || '\u2014'], + ['Cron Jobs', d.num_cron_jobs || '\u2014'], + ['Enabled', d.num_cron_enabled || '\u2014'], + ])) + + collapseCard('session', 'Session', kvRows([ + ['Reset Mode', d.session_reset_mode || '\u2014'], + ['Idle Timeout', (d.session_idle_minutes || '?') + 'm'], + ['Gateway Port', d.gateway_port || '\u2014'], + ])) + + collapseCard('compaction', 'Compaction', kvRows([ + ['Mode', d.compaction_mode || '\u2014'], + ['Reserve Tokens', d.compaction_reserve_tokens || '\u2014'], + ['Max History', d.compaction_max_history || '\u2014'], + ])) + + '
'; + } - // Status row - html += `
- Status - ${statusIcon} ${statusText} -
`; + // ── Tab: M365 Safety ── + function renderSafety(m365) { + if (!m365) return '
M365 safety data unavailable
'; + const isOverride = m365.override_active; - // Toggle section - html += '
'; - if (!isOverride) { - // Show the danger button to disable - html += ``; - html += '
Removes email whitelist, calendar protection, and Graph API interception
'; - } else { - // Show the restore button - html += `
-
\uD83D\uDEA8
-
- Safety Override Active
- The agent has unrestricted access to Microsoft 365. - It can send emails to anyone, modify any calendar event, and access - any Graph API endpoint without whitelist checks. -
+ let html = collapseCard('safety-status', 'Safety Gateway Status', (() => { + const statusClass = isOverride ? 'safety-status-danger' : 'safety-status-ok'; + const statusText = isOverride ? 'ALL PROTECTION DISABLED' : 'Active'; + const statusIcon = isOverride ? '\u26A0\uFE0F' : '\u2705'; + let inner = `
+ Enforcement + ${statusIcon} ${statusText}
`; - html += ``; + + if (!isOverride) { + inner += `
+ +
Removes email whitelist, calendar protection, and Graph API interception
+
`; + } else { + inner += `
+
\uD83D\uDEA8
+
+ Safety Override Active
+ The agent has unrestricted access to Microsoft 365. +
+
+ `; + } + return inner; + })(), { cls: isOverride ? 'safety-card-danger' : '' }); + + return html; + } + + // ── Tab: Whitelists ── + function renderWhitelists(wl) { + if (!wl) return '
Loading whitelist...
'; + if (wl.error) return `
Whitelist error: ${D.esc(wl.error)}
`; + + let html = ''; + + // Email + html += collapseCard('wl-email', 'Email Recipients', (() => { + let inner = '
'; + inner += '
Allowed Domains
'; + inner += renderTagList('email-domains', wl.email?.allowed_domains || [], 'e.g. example.com'); + inner += '
Allowed Addresses
'; + inner += renderTagList('email-addrs', wl.email?.allowed_addresses || [], 'e.g. user@example.com'); + inner += kvRows([ + ['Max Recipients', wl.email?.max_recipients || 10], + ['Block Distribution Lists', wl.email?.block_distribution_lists ? 'Yes' : 'No'], + ]); + return inner + '
'; + })()); + + // Calendar + html += collapseCard('wl-calendar', 'Calendar Attendees', (() => { + let inner = '
'; + inner += '
Allowed Domains
'; + inner += renderTagList('cal-domains', wl.calendar?.allowed_domains || [], 'e.g. example.com'); + inner += '
Allowed Addresses
'; + inner += renderTagList('cal-addrs', wl.calendar?.allowed_addresses || [], 'e.g. user@example.com'); + inner += kvRows([ + ['Allow No-Attendee Events', wl.calendar?.allow_no_attendee_events ? 'Yes' : 'No'], + ['Max Past Days', wl.calendar?.max_past_days || 0], + ]); + return inner + '
'; + })()); + + // OneDrive + html += collapseCard('wl-onedrive', 'OneDrive', (() => { + let inner = '
'; + inner += '
Allowed Write Paths
'; + inner += renderTagList('od-paths', wl.onedrive?.allowed_write_paths || [], 'e.g. /drafts/'); + inner += kvRows([ + ['Block External Sharing', wl.onedrive?.block_external_sharing ? 'Yes' : 'No'], + ['Block Delete', wl.onedrive?.block_delete ? 'Yes' : 'No'], + ]); + return inner + '
'; + })(), { open: false }); + + // Rate Limits + html += collapseCard('wl-rates', 'Rate Limits', kvRows([ + ['Global (per min)', wl.rate_limits?.global || 60], + ['Email Send (per min)', wl.rate_limits?.email_send || 5], + ['Calendar Create (per min)', wl.rate_limits?.calendar_create || 10], + ]), { open: false }); + + return html; + } + + function renderTagList(id, items, placeholder) { + let html = `
`; + for (const item of items) { + html += `${D.esc(item)}`; } - html += '
'; + html += `
+ + +
`; + html += '
'; return html; } - function attachSafetyHandlers() { - const disableBtn = document.getElementById('m365-safety-disable-btn'); - if (disableBtn) { - disableBtn.addEventListener('click', () => { + // ── Whitelist mutation ── + function getWhitelistPath(listId) { + const map = { + 'email-domains': ['email', 'allowed_domains'], + 'email-addrs': ['email', 'allowed_addresses'], + 'cal-domains': ['calendar', 'allowed_domains'], + 'cal-addrs': ['calendar', 'allowed_addresses'], + 'od-paths': ['onedrive', 'allowed_write_paths'], + }; + return map[listId] || null; + } + + async function addToWhitelist(listId, value) { + const path = getWhitelistPath(listId); + if (!path) return; + const res = await fetch('/dashboard/api/settings/whitelist', { + method: 'POST', + headers: authHeaders({ 'Content-Type': 'application/json' }), + body: JSON.stringify({ action: 'add', section: path[0], field: path[1], value }), + }); + const r = await res.json(); + if (r.success) { _whitelist = null; await loadAndRenderTab(); } + } + + async function removeFromWhitelist(listId, value) { + const path = getWhitelistPath(listId); + if (!path) return; + const res = await fetch('/dashboard/api/settings/whitelist', { + method: 'POST', + headers: authHeaders({ 'Content-Type': 'application/json' }), + body: JSON.stringify({ action: 'remove', section: path[0], field: path[1], value }), + }); + const r = await res.json(); + if (r.success) { _whitelist = null; await loadAndRenderTab(); } + } + + // ── Event delegation ── + function attachHandlers() { + const el = document.getElementById('panel-settings'); + if (!el) return; + + el.addEventListener('click', async (e) => { + const t = e.target; + + // Sub-tab navigation + if (t.closest('.s-tab')) { + const tab = t.closest('.s-tab').dataset.tab; + if (tab) { _activeTab = tab; await loadAndRenderTab(); } + return; + } + + // Tag remove + if (t.classList.contains('wl-tag-rm')) { + const listId = t.dataset.list; + const val = t.dataset.val; + if (listId && val) await removeFromWhitelist(listId, val); + return; + } + + // Tag add + if (t.classList.contains('wl-add-btn')) { + const listId = t.dataset.list; + const input = document.getElementById('wl-input-' + listId); + const val = input?.value?.trim(); + if (listId && val) { await addToWhitelist(listId, val); } + return; + } + + // Safety disable + if (t.id === 'm365-safety-disable-btn' || t.closest('#m365-safety-disable-btn')) { showConfirmDialog(); - }); - } + return; + } - const restoreBtn = document.getElementById('m365-safety-restore-btn'); - if (restoreBtn) { - restoreBtn.addEventListener('click', async () => { + // Safety restore + if (t.id === 'm365-safety-restore-btn' || t.closest('#m365-safety-restore-btn')) { try { const res = await fetch('/dashboard/api/settings/m365-safety', { method: 'POST', @@ -84,17 +253,26 @@ const result = await res.json(); if (result.success) { showRestartBanner('Safety protection restored. Gateway restart required.'); - refresh(); + _data = null; await loadAndRenderTab(); } - } catch (e) { - console.error('Failed to restore safety:', e); - } - }); - } + } catch (e) { console.error('Restore failed:', e); } + return; + } + }); + + // Enter key on whitelist inputs + el.addEventListener('keydown', async (e) => { + if (e.key === 'Enter' && e.target.classList.contains('wl-add-input')) { + const input = e.target; + const listId = input.id.replace('wl-input-', ''); + const val = input.value.trim(); + if (listId && val) await addToWhitelist(listId, val); + } + }); } + // ── Confirm dialog (unchanged) ── function showConfirmDialog() { - // Remove existing dialog if any const existing = document.getElementById('safety-confirm-overlay'); if (existing) existing.remove(); @@ -112,12 +290,12 @@

This will completely disable all Microsoft 365 safety measures:

    -
  • \u274C Email recipient whitelist — agent can email anyone
  • -
  • \u274C Calendar attendee protection — agent can invite anyone
  • -
  • \u274C Graph API interception — agent gets unrestricted API access
  • -
  • \u274C Audit logging — actions will not be logged
  • +
  • \u274C Email recipient whitelist \u2014 agent can email anyone
  • +
  • \u274C Calendar attendee protection \u2014 agent can invite anyone
  • +
  • \u274C Graph API interception \u2014 agent gets unrestricted API access
  • +
  • \u274C Audit logging \u2014 actions will not be logged
-

Only use this if the safety gateway is causing critical failures that prevent normal operation.

+

Only use this if the safety gateway is causing critical failures.

-
- `; +
`; document.body.appendChild(overlay); - // Wire up handlers - const check = document.getElementById('safety-confirm-check'); - const confirmBtn = document.getElementById('safety-confirm-btn'); - const cancelBtn = document.getElementById('safety-cancel-btn'); - - check.addEventListener('change', () => { - confirmBtn.disabled = !check.checked; + document.getElementById('safety-confirm-check').addEventListener('change', (e) => { + document.getElementById('safety-confirm-btn').disabled = !e.target.checked; }); + document.getElementById('safety-cancel-btn').addEventListener('click', () => overlay.remove()); + overlay.addEventListener('click', (e) => { if (e.target === overlay) overlay.remove(); }); - cancelBtn.addEventListener('click', () => overlay.remove()); - overlay.addEventListener('click', (e) => { - if (e.target === overlay) overlay.remove(); - }); - - confirmBtn.addEventListener('click', async () => { - confirmBtn.disabled = true; - confirmBtn.textContent = 'Disabling...'; + document.getElementById('safety-confirm-btn').addEventListener('click', async () => { + const btn = document.getElementById('safety-confirm-btn'); + btn.disabled = true; btn.textContent = 'Disabling...'; try { const res = await fetch('/dashboard/api/settings/m365-safety', { method: 'POST', @@ -161,13 +330,12 @@ const result = await res.json(); overlay.remove(); if (result.success) { - showRestartBanner('Safety protection DISABLED. Gateway restart required to take effect.'); - refresh(); + showRestartBanner('Safety protection DISABLED. Gateway restart required.'); + _data = null; await loadAndRenderTab(); } } catch (e) { - console.error('Failed to disable safety:', e); - confirmBtn.disabled = false; - confirmBtn.textContent = 'Disable All Protection'; + console.error(e); + btn.disabled = false; btn.textContent = 'Disable All Protection'; } }); } @@ -175,51 +343,65 @@ function showRestartBanner(message) { const existing = document.getElementById('safety-restart-banner'); if (existing) existing.remove(); - const banner = document.createElement('div'); banner.id = 'safety-restart-banner'; banner.className = 'safety-restart-banner'; - banner.innerHTML = ` - ${D.esc(message)} - - `; + banner.innerHTML = `${D.esc(message)} + `; const panel = document.getElementById('panel-settings'); if (panel) panel.prepend(banner); } - function render(data) { - const el = document.getElementById("panel-settings"); + // ── Main render ── + function renderTabs() { + const tabs = [ + { id: 'overview', label: 'Overview' }, + { id: 'safety', label: 'M365 Safety' }, + { id: 'whitelists', label: 'Whitelists' }, + ]; + return '
' + + tabs.map(t => ``).join('') + + '
'; + } + + async function loadAndRenderTab() { + const el = document.getElementById('panel-settings'); if (!el) return; - if (!data || data.error) { - el.innerHTML = '
Settings unavailable
Could not reach gateway API
'; + // Load settings if needed + if (!_data) { + try { _data = await D.fetchApi('settings'); } catch {} + } + if (!_data || _data.error) { + el.innerHTML = '
Settings unavailable
'; return; } - el.innerHTML = - safetyCard(data.m365_safety) + - '
' + - card('Model', [['Primary', data.default_model || '\u2014'], ['Fallbacks', (data.model_fallbacks || []).join(', ') || '\u2014']]) + - card('Heartbeat', [['Interval', data.heartbeat_interval || '\u2014'], ['Active Hours', data.heartbeat_hours || '\u2014']]) + - card('Compaction', [['Mode', data.compaction_mode || '\u2014'], ['Reserve Tokens', data.compaction_reserve_tokens || '\u2014'], ['Max History', data.compaction_max_history || '\u2014']]) + - card('Fleet', [['Agents', data.num_agents || '\u2014'], ['Cron Jobs', data.num_cron_jobs || '\u2014'], ['Enabled', data.num_cron_enabled || '\u2014']]) + - card('Session', [['Reset Mode', data.session_reset_mode || '\u2014'], ['Idle Timeout', (data.session_idle_minutes || '?') + 'm'], ['Gateway Port', data.gateway_port || '\u2014']]) + - '
'; + let body = ''; + if (_activeTab === 'overview') { + body = renderOverview(_data); + } else if (_activeTab === 'safety') { + body = renderSafety(_data.m365_safety); + } else if (_activeTab === 'whitelists') { + if (!_whitelist) { + try { _whitelist = await D.fetchApi('settings/whitelist'); } catch {} + } + body = renderWhitelists(_whitelist); + } - attachSafetyHandlers(); + el.innerHTML = renderTabs() + body; } async function refresh() { - try { - const data = await D.fetchApi("settings"); - if (data && !data.error) { render(data); return; } - } catch {} - render(null); + _data = null; + _whitelist = null; + await loadAndRenderTab(); + } + + function init() { + attachHandlers(); + refresh(); } - D.registerPanel("settings", { init: refresh, refresh }); + D.registerPanel('settings', { init, refresh }); })(); diff --git a/bates-core/plugins/dashboard/static/styles.css b/bates-core/plugins/dashboard/static/styles.css index b456e47..ecd5356 100644 --- a/bates-core/plugins/dashboard/static/styles.css +++ b/bates-core/plugins/dashboard/static/styles.css @@ -984,11 +984,82 @@ html, body { } /* Settings */ +/* ═══════════════ SETTINGS SUB-TABS ═══════════════ */ +.s-tabs { + display: flex; + gap: 2px; + margin-bottom: 12px; + border-bottom: 1px solid rgba(255, 255, 255, 0.06); + padding-bottom: 0; +} +.s-tab { + padding: 6px 14px; + font-size: 11px; + font-weight: 500; + color: var(--text3); + background: none; + border: none; + border-bottom: 2px solid transparent; + cursor: pointer; + transition: all 0.2s; + font-family: inherit; + margin-bottom: -1px; +} +.s-tab:hover { color: var(--text2); } +.s-tab.active { + color: #58c6e8; + border-bottom-color: #58c6e8; +} +.s-empty { + font-size: 11px; + color: var(--text3); + padding: 16px 0; + text-align: center; +} + +/* ═══════════════ COLLAPSIBLE CARDS ═══════════════ */ +.s-card { + border-radius: var(--r-sm); + background: rgba(255, 255, 255, 0.02); + border: 1px solid rgba(255, 255, 255, 0.04); + margin-bottom: 8px; + overflow: hidden; +} +.s-card-head { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 12px; + cursor: pointer; + user-select: none; + transition: background 0.15s; +} +.s-card-head:hover { background: rgba(255, 255, 255, 0.02); } +.s-card-title { + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1px; + color: var(--text3); +} +.s-card-chevron { + width: 0; height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--text3); + transition: transform 0.2s; +} +.s-card.collapsed .s-card-chevron { transform: rotate(-90deg); } +.s-card.collapsed .s-card-body { display: none; } +.s-card-body { padding: 0 12px 10px; } +.s-card-body .hidden { display: none; } + .settings-grid { display: grid; grid-template-columns: repeat(2, 1fr); - gap: 12px; + gap: 8px; } +.settings-grid .s-card { margin-bottom: 0; } .settings-card { padding: 12px; border-radius: var(--r-sm); @@ -1012,6 +1083,78 @@ html, body { .settings-row-label { color: var(--text2); } .settings-row-value { color: var(--text); font-family: var(--font-mono); font-size: 10px; } +/* ═══════════════ WHITELIST EDITOR ═══════════════ */ +.wl-section { padding: 2px 0; } +.wl-label { + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + color: var(--text3); + margin-bottom: 6px; +} +.wl-tags { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin-bottom: 8px; + align-items: center; +} +.wl-tag { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 3px 8px; + border-radius: 4px; + background: rgba(88, 198, 232, 0.12); + border: 1px solid rgba(88, 198, 232, 0.25); + font-size: 11px; + font-family: var(--font-mono); + color: #93d4ef; +} +.wl-tag-rm { + background: none; + border: none; + color: rgba(255, 255, 255, 0.35); + cursor: pointer; + font-size: 13px; + padding: 0 2px; + line-height: 1; + transition: color 0.15s; +} +.wl-tag-rm:hover { color: #f87171; } +.wl-add-row { + display: inline-flex; + gap: 4px; + align-items: center; +} +.wl-add-input { + width: 150px; + padding: 3px 8px; + border-radius: 4px; + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.03); + color: var(--text); + font-size: 11px; + font-family: var(--font-mono); + outline: none; +} +.wl-add-input:focus { border-color: rgba(88, 198, 232, 0.4); } +.wl-add-input::placeholder { color: rgba(255,255,255,0.15); } +.wl-add-btn { + padding: 3px 8px; + border-radius: 4px; + border: 1px solid rgba(88, 198, 232, 0.3); + background: rgba(88, 198, 232, 0.1); + color: #58c6e8; + font-size: 13px; + font-weight: 700; + cursor: pointer; + transition: background 0.15s; + line-height: 1; +} +.wl-add-btn:hover { background: rgba(88, 198, 232, 0.25); } + /* ═══════════════ M365 SAFETY TOGGLE ═══════════════ */ .safety-card { padding: 14px; From d663f675ec6ff479fb7f2411e8fe560ede062b6b Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 20:27:07 +0000 Subject: [PATCH 45/63] Dashboard: collapsible operations, standup API, fix settings visibility - Add standup API endpoint (reads session-continuity digests + shared memory) - Restructure operations page with sticky sub-nav tabs and collapsible boxes - All operations sections collapsed by default - Fix settings panel colors to match cron card styling (was barely visible) - Fix whitelist labels and settings row values for readability Co-Authored-By: Claude Opus 4.6 --- bates-core/plugins/dashboard/index.ts | 52 ++++++++ .../plugins/dashboard/static/index.html | 122 ++++++++++++++---- bates-core/plugins/dashboard/static/js/app.js | 38 ++++-- .../dashboard/static/js/panel-standup.js | 4 +- .../plugins/dashboard/static/styles.css | 105 ++++++++++++--- 5 files changed, 266 insertions(+), 55 deletions(-) diff --git a/bates-core/plugins/dashboard/index.ts b/bates-core/plugins/dashboard/index.ts index c6b4ecc..aed40e1 100644 --- a/bates-core/plugins/dashboard/index.ts +++ b/bates-core/plugins/dashboard/index.ts @@ -386,6 +386,58 @@ const plugin = { } catch (e: any) { jsonResponse(res, { error: e.message }); } }); + // API: standups — reads session-continuity digests for each deputy + apiRoute("/dashboard/api/standups", async (_req: any, res: any): Promise => { + try { + const digestDir = "/home/openclaw/.openclaw/extensions/session-continuity/data/digests"; + const standups: any[] = []; + if (existsSync(digestDir)) { + for (const f of readdirSync(digestDir)) { + if (!f.endsWith(".json")) continue; + try { + const raw = JSON.parse(readFileSync(join(digestDir, f), "utf-8")); + const agentId = f.replace(".json", ""); + const lastInteractions = raw.lastInteractions || []; + const recentTask = lastInteractions[0]?.summary || raw.activeContext || ""; + if (recentTask) { + standups.push({ + agent: agentId, + role: raw.role || "", + message: recentTask, + timestamp: raw.updatedAt || raw.timestamp || null, + }); + } + } catch {} + } + } + // Also read shared memory READMEs for venture context + const sharedDir = "/home/openclaw/.openclaw/shared/memory"; + for (const venture of ["fdesk", "synapse", "escola", "global"]) { + const readme = join(sharedDir, venture, "context-today.md"); + if (existsSync(readme)) { + try { + const content = readFileSync(readme, "utf-8").slice(0, 500); + standups.push({ + agent: venture, + role: "venture context", + message: content.split("\n").filter((l: string) => l.trim() && !l.startsWith("#")).slice(0, 3).join(" | "), + timestamp: statSync(readme).mtime.toISOString(), + }); + } catch {} + } + } + standups.sort((a: any, b: any) => { + if (!a.timestamp && !b.timestamp) return 0; + if (!a.timestamp) return 1; + if (!b.timestamp) return -1; + return new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime(); + }); + jsonResponse(res, { standups }); + } catch (e: any) { + jsonResponse(res, { standups: [], error: e.message }); + } + }); + // API: sessions — enriched sub-agent status from JSONL transcripts apiRoute("/dashboard/api/sessions", async (req: any, res: any): Promise => { try { diff --git a/bates-core/plugins/dashboard/static/index.html b/bates-core/plugins/dashboard/static/index.html index f927a37..fa1b9aa 100644 --- a/bates-core/plugins/dashboard/static/index.html +++ b/bates-core/plugins/dashboard/static/index.html @@ -40,7 +40,7 @@
- +
Agents
@@ -56,7 +56,31 @@
- +
+
🏦fDesk
+
Deputy: Conrad
+
+
+
+
SynapseLayer
+
Deputy: Soren
+
+
+
+
🏫Escola Caravela
+
Deputy: Amara
+
+
+
+
🐧Bates
+
Deputy: Dash
+
+
+
+
🏠Private
+
Deputy: Jules
+
+
@@ -74,24 +98,24 @@

Indexation Status

- OneDrive (Primary) + rk@vernot.com OneDrive Status: Connected Phase 1-4 complete
- OneDrive (Secondary) + rk@fdesk.tech OneDrive Status: Connected Via MCP reader
- OneDrive (Agent) + bates@vernot.com OneDrive Status: Connected Workspace drafts
- Email accounts - Configure in search-index config - Last sync: — + Email accounts (4) + rk@vernot, rk@fdesk, cp-desk, hello@fdesk + Last sync: Feb 11
Search index @@ -113,43 +137,85 @@
- +
- +
-
-

Cron Jobs

-
+
+ + + + +
-
-

Delegations

-
+ +
+
-
-
-

Integrations

-
+ +
+ -
-

Costs & Settings

-
-
-
+
+ +
+ +
+ +
+ +
+ +
+
- +
- +

Memory Feed

@@ -165,7 +231,7 @@
- +
`; } diff --git a/bates-core/plugins/dashboard/static/styles.css b/bates-core/plugins/dashboard/static/styles.css index b928fff..51d0940 100644 --- a/bates-core/plugins/dashboard/static/styles.css +++ b/bates-core/plugins/dashboard/static/styles.css @@ -440,6 +440,8 @@ html, body { .pf-btn { padding: 8px 16px; border-radius: 6px; border: none; font-size: 12px; font-weight: 600; cursor: pointer; font-family: inherit; transition: all 0.2s; + -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; + text-rendering: geometricPrecision; transform: translateZ(0); } .pf-btn-primary { background: rgba(88,198,232,0.2); color: #58c6e8; } .pf-btn-primary:hover { background: rgba(88,198,232,0.35); } @@ -447,7 +449,9 @@ html, body { .pf-btn-danger:hover { background: rgba(239,68,68,0.3); } .pf-btn-cancel { background: rgba(255,255,255,0.05); color: var(--text3); } .pf-btn-cancel:hover { background: rgba(255,255,255,0.1); } -.pf-btn-small { padding: 4px 10px; font-size: 10px; background: rgba(255,255,255,0.06); color: var(--text2); border: 1px solid var(--glass-border); border-radius: 4px; cursor: pointer; } +.pf-btn-small { padding: 4px 10px; font-size: 10px; background: rgba(255,255,255,0.06); color: var(--text); border: 1px solid var(--glass-border); border-radius: 4px; cursor: pointer; + -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; + text-rendering: geometricPrecision; transform: translateZ(0); } .pf-btn-small:hover { background: rgba(255,255,255,0.1); } .project-deputy strong { color: var(--text); @@ -1846,7 +1850,7 @@ html, body { overflow-y: auto; font-size: 12px; font-family: var(--font-mono); - color: var(--text2); + color: var(--text); line-height: 1.7; white-space: pre-wrap; } @@ -2005,10 +2009,10 @@ html, body { .agent-detail-avatar { width: 64px; height: 64px; border-radius: 50%; object-fit: cover; border: 2px solid rgba(90, 200, 232, 0.4); box-shadow: 0 0 16px rgba(90, 200, 232, 0.2); flex-shrink: 0; } .agent-detail-info { flex: 1; } .agent-detail-name { font-size: 18px; font-weight: 700; color: var(--text); font-family: var(--font); } -.agent-detail-role { font-size: 12px; color: var(--text2); margin-top: 2px; font-family: var(--font); } +.agent-detail-role { font-size: 12px; color: var(--text); margin-top: 2px; font-family: var(--font); } .agent-detail-section { border-top: 1px solid rgba(255, 255, 255, 0.06); padding-top: 12px; } -.agent-detail-section-title { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 1.2px; color: var(--text3); margin-bottom: 8px; } -.agent-detail-pre { background: rgba(0, 0, 0, 0.3); border: 1px solid rgba(255, 255, 255, 0.06); border-radius: 8px; padding: 12px; font-size: 11px; font-family: var(--font-mono); color: var(--text2); line-height: 1.6; white-space: pre-wrap; max-height: 240px; overflow-y: auto; margin: 0; } +.agent-detail-section-title { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 1.2px; color: var(--text2); margin-bottom: 8px; } +.agent-detail-pre { background: rgba(0, 0, 0, 0.3); border: 1px solid rgba(255, 255, 255, 0.06); border-radius: 8px; padding: 12px; font-size: 11px; font-family: var(--font-mono); color: var(--text); line-height: 1.6; white-space: pre-wrap; max-height: 240px; overflow-y: auto; margin: 0; } /* Agent management bar */ .agent-mgmt-bar { @@ -2058,7 +2062,7 @@ html, body { .project-box:hover { transform: translateY(-2px); box-shadow: 0 4px 20px rgba(0,0,0,0.3); } /* ═══════════════ PROJECT DETAIL MODAL ═══════════════ */ -.project-detail-desc { font-size: 13px; color: var(--text2); line-height: 1.5; margin-bottom: 12px; } +.project-detail-desc { font-size: 13px; color: var(--text); line-height: 1.5; margin-bottom: 12px; } .project-detail-agent-link { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 8px; background: rgba(90, 200, 232, 0.1); border: 1px solid rgba(90, 200, 232, 0.3); color: var(--blue-lt, #5ac8e8); font-size: 12px; cursor: pointer; transition: background 0.2s; text-decoration: none; } .project-detail-agent-link:hover { background: rgba(90, 200, 232, 0.2); } .project-detail-placeholder { background: rgba(0,0,0,0.2); border: 1px dashed rgba(255,255,255,0.1); border-radius: 8px; padding: 16px; text-align: center; font-size: 11px; color: var(--text3); margin-top: 8px; } diff --git a/bates-core/scripts-core/m365-gateway/whitelist.yaml b/bates-core/scripts-core/m365-gateway/whitelist.yaml index cddc959..a37e11f 100644 --- a/bates-core/scripts-core/m365-gateway/whitelist.yaml +++ b/bates-core/scripts-core/m365-gateway/whitelist.yaml @@ -52,10 +52,7 @@ teams: # OneDrive safety onedrive: # Allowed write paths (prefix match). Empty = all paths allowed. - allowed_write_paths: - - /drafts/ - - /Bates/ - - /Documents/Bates/ + allowed_write_paths: [] # Block sharing files externally block_external_sharing: true From 7c0e327218e9e0eac239a459fcf221913332b7a5 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 21:11:13 +0000 Subject: [PATCH 51/63] Add mandatory standups to all agents, task provider connection UI - Add MANDATORY standup section to 6 agents missing it (archer, kira, mercer, nova, paige, quinn) - Mark existing standup sections as MANDATORY for 4 agents (amara, conrad, dash, mira) - Add task provider discovery API (lists available Planner plans + To Do lists) - Add task provider connect/disconnect API for dashboard management - Add Task Providers tab in Settings panel with connect/remove UI - Include all 12 agent HEARTBEAT.md files in repo Co-Authored-By: Claude Opus 4.6 --- bates-core/agents/amara/HEARTBEAT.md | 46 +++++++ bates-core/agents/archer/HEARTBEAT.md | 78 +++++++++++ bates-core/agents/conrad/HEARTBEAT.md | 97 +++++++++++++ bates-core/agents/dash/HEARTBEAT.md | 65 +++++++++ bates-core/agents/kira/HEARTBEAT.md | 67 +++++++++ bates-core/agents/mercer/HEARTBEAT.md | 61 +++++++++ bates-core/agents/mira/HEARTBEAT.md | 59 ++++++++ bates-core/agents/nova/HEARTBEAT.md | 73 ++++++++++ bates-core/agents/paige/HEARTBEAT.md | 56 ++++++++ bates-core/agents/quinn/HEARTBEAT.md | 68 +++++++++ bates-core/plugins/dashboard/index.ts | 61 +++++++++ .../dashboard/static/js/panel-settings.js | 129 ++++++++++++++++++ 12 files changed, 860 insertions(+) create mode 100644 bates-core/agents/amara/HEARTBEAT.md create mode 100644 bates-core/agents/archer/HEARTBEAT.md create mode 100644 bates-core/agents/conrad/HEARTBEAT.md create mode 100644 bates-core/agents/dash/HEARTBEAT.md create mode 100644 bates-core/agents/kira/HEARTBEAT.md create mode 100644 bates-core/agents/mercer/HEARTBEAT.md create mode 100644 bates-core/agents/mira/HEARTBEAT.md create mode 100644 bates-core/agents/nova/HEARTBEAT.md create mode 100644 bates-core/agents/paige/HEARTBEAT.md create mode 100644 bates-core/agents/quinn/HEARTBEAT.md diff --git a/bates-core/agents/amara/HEARTBEAT.md b/bates-core/agents/amara/HEARTBEAT.md new file mode 100644 index 0000000..ad599b0 --- /dev/null +++ b/bates-core/agents/amara/HEARTBEAT.md @@ -0,0 +1,46 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Escola Email Scan (REQUIRED) +Check rk@vernot.com inbox via ms365-reader for escola-related emails. +Use: list-mail-messages with search='"escola" OR "school" OR "Caravela" OR "DGEstE" OR "trilingual"' top=10 + +Also check for emails from known escola contacts (parents, teachers, municipality). + +For each new/unread escola-related email: +- Extract contact info (name, email, role) and append to /home/openclaw/.openclaw/shared/memory/escola/contacts.md +- Extract deadlines or event dates and append to /home/openclaw/.openclaw/shared/memory/escola/upcoming.md +- If urgent (deadline <48h, parent complaint, regulatory): write to outbox/escalate-TIMESTAMP.md + **ESCALATION POLICY**: Do NOT deliver to Robert's DM directly. Write the escalate file and the daily coordination meeting (08:45) will triage it. + +## 2. Planner Check +Check Escola Caravela Planner tasks (planId: HXpYhx5p5EWodt0e_KE0OZcAC8ze) via ms365-assistant. +Note overdue tasks and upcoming deadlines. Append to /home/openclaw/.openclaw/shared/memory/escola/upcoming.md. + +## 3. Knowledge Persistence +Append new contacts, deadlines, facts to observations/findings.md with tags: +- [contact] Name - role, email (source: escola email) +- [deadline] Date - what (source: escola email/planner) + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:4406a4934a234cd4bc80fad5e31d4669@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Amara] [DATE]
[SUMMARY]"}}' +``` +Channel: escola-ops (19:4406a4934a234cd4bc80fad5e31d4669@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the escola-ops Teams channel. +- If urgent items: "[URGENT] [sender]: [subject] -- [action needed]" +- If new contacts or deadlines: "Escola update: [N] new items tracked" +- If nothing new: NO_REPLY + +## 6. Daily Standup (MANDATORY — first run after 06:00) + +Write outbox/standup.md (file only — do NOT post to Teams; the coordination meeting at 08:45 handles posting): +- New escola communications tracked +- Upcoming events/deadlines +- Blockers diff --git a/bates-core/agents/archer/HEARTBEAT.md b/bates-core/agents/archer/HEARTBEAT.md new file mode 100644 index 0000000..42ccdf1 --- /dev/null +++ b/bates-core/agents/archer/HEARTBEAT.md @@ -0,0 +1,78 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Cross-Agent Knowledge Synthesis (REQUIRED) +Review recent activity across all agents to identify improvement opportunities: +- Read /home/openclaw/.openclaw/shared/memory/global/coding-activity-*.md (most recent 2 files) +- Read /home/openclaw/.openclaw/shared/memory/global/market-intel-*.md (most recent) +- Read /home/openclaw/.openclaw/shared/memory/global/documentation-gaps.md (if exists) +- Check recent proposals/ from Mira + +Look for: patterns, repeated issues, cross-project opportunities, tool gaps. + +## 2. Proactive Improvement Proposals (REQUIRED) +Based on findings from step 1, identify the top 1-3 improvement opportunities: +- Architecture improvements Robert hasn't noticed +- Tool or library recommendations that would speed up work +- Process inefficiencies that could be automated +- Integration opportunities between fDesk, SynapseLayer, and Escola projects +- Technical debt that's accumulating in the codebase + +For each opportunity: +- Write a concise proposal to `proposals/improvement-YYYY-MM-DD.md` +- Include: problem observed, proposed solution, expected benefit, effort estimate +- Rate priority: HIGH/MEDIUM/LOW + +## 3. Documentation Gap Analysis (REQUIRED) +Review recent code review proposals in proposals/ (last 5 files by date). +Review recent cursor transcripts in observations/cursor/ (last 3 files by date). + +For each, identify: +- Recurring code patterns that need SOPs or templates +- Errors or debugging sessions that could be documented to prevent recurrence +- Architecture decisions made in code that aren't documented anywhere +- Missing API documentation for new endpoints + +Write findings to /home/openclaw/.openclaw/shared/memory/global/documentation-gaps.md. + +## 4. Process Improvement +Check /home/openclaw/.openclaw/shared/memory/global/coding-activity-*.md (Mira's observations) for recurring issues. +If same error type appears 3+ times: propose a prevention automation or checklist. + +## 5. Knowledge Persistence +Append documentation-related findings to observations/findings.md: +- [pattern] Documentation: [what needs documenting] (source: code review/cursor) +- [decision] Technical: [lesson learned] (source: sub-agent task) + +## 6. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Archer] [DATE]
[SUMMARY]"}}' +``` +Channel: cross-business (19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 7. Output Format +This response is delivered to the cross-business Teams channel. +- If improvement proposals: "Proposals: [N] improvements. Top: [most valuable in 1 line]" +- If docs gaps: "Docs: [N] gaps identified. Top: [most critical]" +- If automation opportunity: "[SOP] Recurring issue: [pattern] -- proposed fix: [solution]" +- If nothing new: NO_REPLY + +## 7. Daily Standup (MANDATORY — first run after 06:00) +Write `outbox/standup.md` (file only — do NOT post to Teams; the standup compiler at 08:30 handles that). +Format: +``` +**Yesterday:** [SOP findings, documentation gaps identified] +**Today:** [automation proposals, improvement analysis planned] +**Blockers:** [any blockers or "None"] +``` + +## 8. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Improvement proposals made this week +- Documentation gaps found +- Cross-agent insights +- Knowledge base health diff --git a/bates-core/agents/conrad/HEARTBEAT.md b/bates-core/agents/conrad/HEARTBEAT.md new file mode 100644 index 0000000..c26c6f7 --- /dev/null +++ b/bates-core/agents/conrad/HEARTBEAT.md @@ -0,0 +1,97 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. +If feedback says to change approach, adjust accordingly. + + +## 0.5. Dedup Check (MANDATORY before posting) + +Before posting ANYTHING to Teams channels or writing escalations: + +1. Read your last 3 channel posts: `~/.openclaw/scripts/graph-api.sh GET "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:35613cb0484c4387bd7f7d3e6059bf33@thread.tacv2/messages?$top=3"` +2. If your finding is materially the same as a recent post (same email, same draft, same deadline), DO NOT post again. +3. Only post if there is NEW information: a new email arrived, a status changed, or a deadline moved. +4. "Drafts awaiting review" is NOT new information if you posted it in the last 12 hours. +5. Escalations repeat only if the deadline is inside 24 hours AND you haven't escalated in the last 4 hours. + +**Repeating the same alert every hour is a critical failure. Robert sees every post.** + +## 1. Email Scan (REQUIRED) +Check BOTH mailboxes using their dedicated MCP servers (do NOT use graph-api.sh for fdesk mail — it has no access): + +**rk@fdesk.tech** — use `ms365-fdesk-reader`: +```bash +mcporter call ms365-fdesk-reader list-mail-messages top=10 'select=["subject","from","receivedDateTime","hasAttachments","bodyPreview","isRead"]' +``` + +**cp-desk@fdesk.tech** — use `ms365-support-reader`: +```bash +mcporter call ms365-support-reader list-mail-messages top=10 'select=["subject","from","receivedDateTime","hasAttachments","bodyPreview","isRead"]' +``` + +### Filtering Rules (CRITICAL — do not report everything) + +**SKIP silently** (do not mention in output or channel post): +- Newsletters, marketing, automated notifications +- Read emails (isRead=true) +- Auto-replies, out-of-office, delivery receipts +- Planner/Teams/SharePoint system notifications +- Emails older than 6 hours (already covered by previous runs) + +**Log to shared memory only** (no channel post, no escalation): +- Florian/Till/Kristina pipeline updates → append to /home/openclaw/.openclaw/shared/memory/fdesk/deal-pipeline.md +- PwC/BNY/CSSF compliance updates (no imminent deadline) → append to /home/openclaw/.openclaw/shared/memory/fdesk/regulatory-updates.md +- Routine business correspondence that is informational only + +**Post to fdesk-ops channel** (via step 4): +- New emails from external parties requiring a response or decision +- Deal status changes (new term sheet, signed document, counterparty reply) +- Meeting requests (also trigger auto-calendar in step 1a) + +**Escalate** (write outbox/escalate-TIMESTAMP.md): +- ONLY for items that are genuinely urgent and time-sensitive: + - Legal/regulatory deadlines within 7 days + - Investor or counterparty waiting for a reply >24h + - Compliance action required (CSSF filing, AML review) + - Contract execution pending Robert's signature +- Do NOT escalate routine emails, informational updates, or items that can wait for the next morning briefing +- **ESCALATION POLICY**: Do NOT deliver to Robert's DM directly. Write the escalate file and the daily coordination meeting (08:45) will triage it. + +### 1a. Auto-Calendar for Meeting Emails (MANDATORY) +If ANY email contains a meeting invitation sent as plain text (Zoom link, Teams link, Google Meet, or any scheduling with date/time but NO ICS/calendar attachment): +1. Read the full email body to extract: date, time (with timezone), meeting link, meeting ID/passcode, attendees +2. Create a calendar event on rk@fdesk.tech: `~/.openclaw/scripts/graph-api.sh POST "/users/rk@fdesk.tech/events"` with JSON body containing subject, start/end times, location (set to meeting link), body (full meeting details including link + passcode), and attendees if known +3. Post to fdesk-ops confirming: "[AUTO-CAL] Created: [subject] on [date/time] with [organizer]. Meeting link in event." +4. This is automatic — do NOT wait for Robert to ask. See appointment → create event → notify. + +## 2. Deal Pipeline Context +After scanning emails, write one sentence answering: "What is Robert likely dealing with in fDesk today?" Overwrite /home/openclaw/.openclaw/shared/memory/fdesk/context-today.md with this context line (dated). + +## 3. Knowledge Persistence +If you found new contacts, deadlines, facts, or deal updates: +- Append tagged entries to observations/findings.md +- Format: `- [tag] detail (source: email/calendar)` + +## 4. Teams Channel Post (only if actionable findings) +Post to fdesk-ops ONLY if there are actionable items (emails needing response, deal changes, meetings created). Do NOT post routine scans or "nothing new" summaries. +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:35613cb0484c4387bd7f7d3e6059bf33@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Conrad] [DATE]
[SUMMARY]"}}' +``` +Channel: fdesk-ops (19:35613cb0484c4387bd7f7d3e6059bf33@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. + +**If nothing actionable was found: reply NO_REPLY. Do NOT post to channel.** + +## 5. Output Format +This response is delivered to the fdesk-ops Teams channel (NOT Robert's DM). +- If actionable items found: one line per item with action needed +- If deal pipeline updated with material changes: "Pipeline: [what changed]" +- If nothing actionable: NO_REPLY (preferred — silence is better than noise) + +## 6. Daily Standup (MANDATORY — first run after 06:00) + +Write outbox/standup.md (file only — do NOT post to Teams; the coordination meeting at 08:45 handles posting): +- Completed: what was processed/escalated +- Planned: active deals and threads to monitor +- Blockers: anything needing Bates or Robert diff --git a/bates-core/agents/dash/HEARTBEAT.md b/bates-core/agents/dash/HEARTBEAT.md new file mode 100644 index 0000000..c23680d --- /dev/null +++ b/bates-core/agents/dash/HEARTBEAT.md @@ -0,0 +1,65 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. OpenClaw Version Check (REQUIRED - EVERY HEARTBEAT) +Check for new OpenClaw versions: +- Run: `openclaw --version` to get current installed version +- Search GitHub: `gh api repos/openclaw/openclaw/releases/latest` or brave-search "site:github.com openclaw openclaw releases" +- Compare installed vs latest +- If new version available: + - Summarize changelog/release notes + - Write to outbox/escalate-new-version.md for immediate notification + - Post to bates-rollout Teams channel + - Track in observations/version-history.md + +## 2. GitHub Repo Health (REQUIRED) +Check Robert's GitHub repos for health: +- List repos with uncommitted changes or unpushed branches +- Check for stale PRs (open > 7 days without activity) +- Check for failing CI/CD runs +- If repos need updates: spawn Claude Code to fix (commit, push, resolve PR comments) + +## 3. Windows Installer Check +- Track any issues/bugs related to the OpenClaw Windows installer +- Search for related GitHub issues +- Note improvement opportunities in observations/windows-installer.md + +## 4. Community Monitoring +Use brave-search to check: +- OpenClaw GitHub: search "site:github.com openclaw" for recent discussions, issues, or PRs +- OpenClaw community: search "openclaw" for recent mentions, blog posts, or forum discussions + +For each notable finding: +- Summarize in 1-2 sentences +- Rate importance: HIGH (security issue, breaking change), MEDIUM (feature request, community growth), LOW (general mention) +- Write to /home/openclaw/.openclaw/shared/memory/global/openclaw-community.md (append dated entry) + +## 5. Meetup/Event Check +Search for upcoming OpenClaw or AI agent meetups in European cities (Berlin, Lisbon, Zurich, Brussels, Vienna, London). +If new events found, append to /home/openclaw/.openclaw/shared/memory/global/openclaw-community.md. + +## 6. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:447ce1f9a8f1420a9d60f82449d84d24@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Dash] [DATE]
[SUMMARY]"}}' +``` +Channel: bates-rollout (19:447ce1f9a8f1420a9d60f82449d84d24@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 7. Output Format +This response is delivered to the bates-rollout Teams channel. +- If new version: "[UPDATE] OpenClaw [version] available! [key changes]" +- If repo issues: "[REPO] [N] repos need attention: [summary]" +- If HIGH community items: "[ALERT] OpenClaw: [issue summary]" +- If community activity: "Community: [N] new mentions. Notable: [summary]" +- If nothing new: NO_REPLY + +## 8. Daily Standup (MANDATORY — first run after 06:00) +Write outbox/standup.md (file only, do NOT post to Teams; the coordination meeting at 08:45 handles posting): +- Version status (current vs latest) +- Repo health summary +- Community activity summary +- Upcoming events +- Blockers diff --git a/bates-core/agents/kira/HEARTBEAT.md b/bates-core/agents/kira/HEARTBEAT.md new file mode 100644 index 0000000..e2a4863 --- /dev/null +++ b/bates-core/agents/kira/HEARTBEAT.md @@ -0,0 +1,67 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Project Folder Review (REQUIRED) +Review OneDrive project folders for new/updated social media posts and branding materials: +- fDesk: `Documents\fDesk\` (rk@fdesk.tech) +- SynapseLayer: `Documents\SynapseLayer\` (rk@fdesk.tech) +- Bates Distro: `Documents\Bates Distro\` (rk@fdesk.tech) +- School: `V-Private\Caravela Nova\` (rk@vernot.com) + +Study existing posts for tone, style, branding consistency. Note any new materials. + +## 2. Content Opportunity Scan (REQUIRED) +Read Robert's recent sent emails for content that could be repurposed: +- Check ms365-reader sent items (top 10, last 48h) +- Check ms365-fdesk-reader sent items (top 10, last 48h) + +Look for: +- Emails where Robert explained something well (could become a LinkedIn post) +- Deal announcements or milestones (could become a case study) +- Technical explanations (could become a blog post for SynapseLayer) +- School updates (could become a marketing piece for Escola Caravela) + +## 3. Content Ideas Persistence & Posting +For each content opportunity found: +- Write a 2-sentence pitch (topic + angle + format) +- Append to /home/openclaw/.openclaw/shared/memory/global/content-ideas.md with date and source +- Tag with venture: [fDesk] [SynapseLayer] [Escola] [Personal Brand] + +Post IDEAS to the dedicated Teams channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:gyjb1z51442BmTREuUKLkdsl5bi-WOzJQc_gJtsHn8E1@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Kira] Content Idea [DATE]
[IDEA PITCH]"}}' +``` + +## 4. Brand Consistency Check +If Robert posted on LinkedIn recently (search brave-search: "Robert Koller linkedin"), note the topic and tone. Check for consistency with existing content strategy. + +## 5. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Kira] [DATE]
[SUMMARY]"}}' +``` +Channel: cross-business (19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 6. Output Format +This response is delivered to the cross-business Teams channel. +- If content ideas found: "Content: [N] ideas. Top: [best pitch in 1 line]" +- If brand opportunity: "[OPPORTUNITY] [specific content suggestion]" +- If nothing new: NO_REPLY + +## 6. Daily Standup (MANDATORY — first run after 06:00) +Write `outbox/standup.md` (file only — do NOT post to Teams; the standup compiler at 08:30 handles that). +Format: +``` +**Yesterday:** [content ideas generated, brand opportunities found] +**Today:** [posts to draft, content scans planned] +**Blockers:** [any blockers or "None"] +``` + +## 7. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Content ideas generated this week +- Posts published (if tracked) +- Upcoming content calendar diff --git a/bates-core/agents/mercer/HEARTBEAT.md b/bates-core/agents/mercer/HEARTBEAT.md new file mode 100644 index 0000000..b885e78 --- /dev/null +++ b/bates-core/agents/mercer/HEARTBEAT.md @@ -0,0 +1,61 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Regulatory Scan (REQUIRED) +Use brave-search to check for regulatory developments: +- "CSSF Luxembourg" + recent news (fDesk regulatory) +- "EU securitization regulation" OR "STS framework" + recent news +- "GDPR enforcement" + recent news (SynapseLayer data protection) +- "Portuguese education ministry" OR "DGEstE" + recent news (Escola Caravela) + +For each relevant finding: +- Summarize in 2-3 sentences +- Note which venture it affects +- Rate impact: HIGH (requires action), MEDIUM (monitor), LOW (background) +- Append to /home/openclaw/.openclaw/shared/memory/fdesk/regulatory-updates.md (dated entry) + +## 2. Compliance Calendar Check +Read /home/openclaw/.openclaw/shared/memory/global/calendar-overview.md (Jules maintains this). +Cross-reference with known regulatory deadlines: +- UCI reporting deadlines +- CSSF filing deadlines +- Corporate tax deadlines +- GDPR-related obligations + +Write upcoming compliance deadlines to /home/openclaw/.openclaw/shared/memory/fdesk/compliance-calendar.md. + +## 3. Knowledge Persistence +Append new regulatory facts to observations/findings.md: +- [fact] Regulatory: [finding] (source: web search/CSSF) +- [deadline] [date] - [compliance obligation] (source: regulatory scan) + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Mercer] [DATE]
[SUMMARY]"}}' +``` +Channel: cross-business (19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the cross-business Teams channel. +- If HIGH-impact finding: "[REGULATORY] [jurisdiction]: [development] -- action needed by [date]" +- If compliance deadline approaching: "[DEADLINE] [date]: [obligation]" +- If nothing significant: NO_REPLY + +## 5. Daily Standup (MANDATORY — first run after 06:00) +Write `outbox/standup.md` (file only — do NOT post to Teams; the standup compiler at 08:30 handles that). +Format: +``` +**Yesterday:** [regulatory updates found, compliance deadlines tracked] +**Today:** [regulatory scans planned, risk items to review] +**Blockers:** [any blockers or "None"] +``` + +## 6. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Key regulatory developments +- Upcoming compliance dates +- Cross-business legal risks diff --git a/bates-core/agents/mira/HEARTBEAT.md b/bates-core/agents/mira/HEARTBEAT.md new file mode 100644 index 0000000..eb1f676 --- /dev/null +++ b/bates-core/agents/mira/HEARTBEAT.md @@ -0,0 +1,59 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. System Health (REQUIRED) +- Check disk space: df -h / | tail -1 +- Check gateway status: systemctl --user is-active openclaw-gateway +- Check for failed cron jobs: read ~/.openclaw/cron/jobs.json, find jobs with consecutiveErrors > 0 + +## 2. Coding Activity Observation (best-effort, skip if no data) +Check if /home/openclaw/.openclaw/observations/cursor/ exists. If the directory does not exist or is empty, skip this section entirely (this is normal, not an alert). Do NOT report missing cursor transcripts as an alert. + +If cursor transcripts DO exist: +- Count files modified in the last 24 hours +- Read the 2-3 most recent JSON files +- Extract: files/repos worked on, session names, lines added +- Write findings to /home/openclaw/.openclaw/shared/memory/global/coding-activity-YYYY-MM-DD.md + +## 3. Proactive Supervision +- Check recent git logs across known repos for Robert's commits +- Look for patterns: repeated error types, missing tests, code style issues +- Note any areas where automation could help + +## 4. Automation Proposals +If you spot a repetitive pattern or inefficiency: +- Draft a proposal in proposals/automation-YYYY-MM-DD.md +- Include: problem, proposed solution, estimated effort, expected benefit +- Notify via outbox if the proposal is HIGH priority + +## 5. Cron Effectiveness (Monday only) +On Mondays, review cron job states: +- Which jobs have consecutiveErrors > 0? +- Which jobs have lastDurationMs > 120000? +- Which jobs produced NO_REPLY more than 5 times in a row? +Report anomalies. + +## 6. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:447ce1f9a8f1420a9d60f82449d84d24@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Mira] [DATE]
[SUMMARY]"}}' +``` +Channel: bates-rollout (19:447ce1f9a8f1420a9d60f82449d84d24@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 7. Output Format +This response is delivered to the bates-rollout Teams channel. +- If system issues: "[ALERT] [component]: [issue]" +- If coding activity observed: "Coding: [N] sessions, working on [repos]. Help opportunity: [X]" +- If automation proposal: "[PROPOSAL] [brief description]" +- If cron issues (Monday): "Cron audit: [N] issues found" +- If all healthy and no new activity: NO_REPLY + +## 8. Daily Standup (MANDATORY — first run after 06:00) + +Write outbox/standup.md (file only, do NOT post to Teams; the coordination meeting at 08:45 handles posting): +- System status summary +- What was completed/monitored +- Blockers diff --git a/bates-core/agents/nova/HEARTBEAT.md b/bates-core/agents/nova/HEARTBEAT.md new file mode 100644 index 0000000..961eafc --- /dev/null +++ b/bates-core/agents/nova/HEARTBEAT.md @@ -0,0 +1,73 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Context Gathering (REQUIRED) +Before searching the web, understand what Robert is working on right now: +- Read /home/openclaw/.openclaw/shared/memory/fdesk/deal-pipeline.md (active deals) +- Read /home/openclaw/.openclaw/shared/memory/fdesk/context-today.md (today's focus) +- List the 5 most recently modified files in drafts/ +- Read /home/openclaw/.openclaw/shared/memory/global/coding-activity-*.md (most recent, if exists) + +## 2. RSS/News Insights (REQUIRED) +Since Feedly API is currently broken, use alternative sources: +- Run brave-search queries for Robert's key domains: fintech securitization, AI agent infrastructure, Portuguese education, treasury management +- Use perplexity/sonar-pro for deeper research on the most relevant topic from step 1 +- Check Hacker News (brave-search "site:news.ycombinator.com [topic]") for tech trends +- Extract top 3-5 most relevant articles based on current project context +- Summarize key takeaways + +## 3. Perplexity Deep Research (REQUIRED) +Based on context from step 1, run 1-2 Perplexity (sonar-pro) searches: +- Query should be informed by active projects, deals, or coding activity +- Focus on emerging trends, competitor moves, regulatory changes +- Use perplexity/sonar-pro model for these queries + +## 4. Targeted Brave Search (REQUIRED) +Run up to 2 brave-search queries for real-time context: +- If Robert drafted an email about a company: search "[company name] news [this week]" +- If a deal is in pipeline: search for the counterparty, industry segment, or regulatory developments +- If Escola Caravela activity found: search Portuguese education news, European school regulations +- If coding on NowTreasury/SynapseLayer: search for relevant fintech/AI infrastructure developments + +Do NOT run generic searches like "fintech news." Every query must be contextually informed by step 1. + +## 5. Knowledge Persistence (REQUIRED) +For each meaningful finding: +- Write a 2-3 sentence summary +- Note relevance to which venture (fDesk/Synapse/Escola) +- Rate: HIGH (Robert should know today), MEDIUM (useful context), LOW (background) +- Append to /home/openclaw/.openclaw/shared/memory/global/market-intel-YYYY-MM-DD.md (use today's date) + +If HIGH-actionability item found, also write to outbox/escalate-market-TIMESTAMP.md. +**ESCALATION POLICY**: Do NOT deliver to Robert's DM directly. Write the escalate file and the daily coordination meeting (08:45) will triage it. + +## 6. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Nova] [DATE]
[SUMMARY]"}}' +``` +Channel: cross-business (19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 7. Output Format +This response is delivered to the cross-business Teams channel. +- "[N] items found. [HIGH count] requiring attention." +- One-line summary of each HIGH item +- If nothing meaningful: NO_REPLY + +## 7. Daily Standup (MANDATORY — first run after 06:00) +Write `outbox/standup.md` (file only — do NOT post to Teams; the standup compiler at 08:30 handles that). +Format: +``` +**Yesterday:** [market intel items found, research highlights] +**Today:** [trends to investigate, searches planned] +**Blockers:** [any blockers or "None"] +``` + +## 8. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Key findings this week (Perplexity + Brave + HN) +- Upcoming items on the radar +- Cross-business insights diff --git a/bates-core/agents/paige/HEARTBEAT.md b/bates-core/agents/paige/HEARTBEAT.md new file mode 100644 index 0000000..332edc3 --- /dev/null +++ b/bates-core/agents/paige/HEARTBEAT.md @@ -0,0 +1,56 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Financial Email Scan (REQUIRED) +Check rk@vernot.com inbox via ms365-reader for financial items: +- Search for: invoices, payment confirmations, bank notifications, subscription renewals, expense receipts +- Use: list-mail-messages with search='"invoice" OR "payment" OR "receipt" OR "subscription" OR "renewal" OR "Rechnung"' top=10 + +For each financial email found: +- Extract: amount, vendor/sender, due date (if any), category +- Append to /home/openclaw/.openclaw/shared/memory/private/financial-items.md: + ``` + - [YYYY-MM-DD] [vendor] [amount] [category] [status: paid/pending/overdue] + ``` + +## 2. Subscription Monitoring +Note any subscription renewal or expiry warnings. These are time-sensitive: +- If expiry <7 days: write escalation to outbox/escalate-TIMESTAMP.md + **ESCALATION POLICY**: Do NOT deliver to Robert's DM directly. Write the escalate file and the daily coordination meeting (08:45) will triage it. +- If auto-renewal success: just log in financial-items.md + +## 3. Knowledge Persistence +Append new financial facts to observations/findings.md: +- [fact] Financial: [vendor] [amount] [status] (source: email) +- [deadline] [date] - payment due for [vendor] (source: email) + +## 4. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:719e9c4defd9450486716839ee8ff382@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Paige] [DATE]
[SUMMARY]"}}' +``` +Channel: private (19:719e9c4defd9450486716839ee8ff382@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 5. Output Format +This response is delivered to the private Teams channel. +- If overdue/expiring items: "[PAYMENT] [vendor]: [amount] due [date]" +- If new items tracked: "Finance: [N] items logged" +- If nothing new: NO_REPLY + +## 5. Daily Standup (MANDATORY — first run after 06:00) +Write `outbox/standup.md` (file only — do NOT post to Teams; the standup compiler at 08:30 handles that). +Format: +``` +**Yesterday:** [financial items tracked, payments processed] +**Today:** [payments due, renewals to flag] +**Blockers:** [any blockers or "None"] +``` + +## 6. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Financial items tracked this week +- Upcoming payments/renewals +- Total spend by category (if enough data) diff --git a/bates-core/agents/quinn/HEARTBEAT.md b/bates-core/agents/quinn/HEARTBEAT.md new file mode 100644 index 0000000..15e275b --- /dev/null +++ b/bates-core/agents/quinn/HEARTBEAT.md @@ -0,0 +1,68 @@ +# Heartbeat Checklist + +## 0. Check Inbox (ALWAYS FIRST) +Read all files in inbox/. Process any feedback or task assignments. Delete processed files. + +## 1. Scan All Agent Activity (REQUIRED) +Check the central cron jobs file for all agent activity: +- Read `/home/openclaw/.openclaw/cron/jobs.json` +- For each job: note agentId, name, lastRunStatus, consecutiveErrors, lastDurationMs +- Check `/home/openclaw/.openclaw/agents/main/sessions/` for active subagent sessions +- Check each agent's outbox: `/home/openclaw/.openclaw/agents/{agent}/outbox/` for pending messages + +Collect: agent name, cron job statuses (ok/error), active session count, pending outbox items. + +## 2. Microsoft To Do Sync (REQUIRED) +**Agent Tasks list ID:** `AAMkADI5MDU0OThkLTM2ZjItNDA1YS05MDY1LTZlOTA2ZmNjMjEzNwAuAAAAAAAEGmEdFnYlRpGm5ddo9XdyAQBNUrDGIj66TIi6yxmhxkIcAAAVLHLVAAA=` + +Using ms365-assistant MCP tools: +- Fetch tasks: `list-todo-tasks todoTaskListId="AAMkADI5MDU0OThkLTM2ZjItNDA1YS05MDY1LTZlOTA2ZmNjMjEzNwAuAAAAAAAEGmEdFnYlRpGm5ddo9XdyAQBNUrDGIj66TIi6yxmhxkIcAAAVLHLVAAA="` +- Compare tracked tasks against actual agent activity from step 1 +- Create new tasks for any untracked subagent spins or failing cron jobs: + `create-todo-task todoTaskListId="AAMkADI5MDU0OThkLTM2ZjItNDA1YS05MDY1LTZlOTA2ZmNjMjEzNwAuAAAAAAAEGmEdFnYlRpGm5ddo9XdyAQBNUrDGIj66TIi6yxmhxkIcAAAVLHLVAAA=" body='{"title":"[AGENT] description","importance":"normal"}'` +- Task title format: `[AGENT] Task description (source: cron/subagent/manual)` +- ALWAYS create tasks for: cron errors (consecutiveErrors > 0), stuck sessions, failed deliveries + +## 3. Task Completion Check (REQUIRED) +For each open task in "Agent Tasks": +- Match it to the corresponding cron job or session +- If the job is now running OK (consecutiveErrors == 0, lastRunStatus == "ok"): mark task as done + `update-todo-task todoTaskListId="..." todoTaskId="..." body='{"status":"completed"}'` +- If failed/stuck: note the failure reason in the task body +- If stuck > 2 hours: escalate to Bates via outbox/escalate-stuck-task.md + +## 4. Stuck Task Resolution +For tasks that are stuck or failed: +1. Read the cron job's lastError field from `/home/openclaw/.openclaw/cron/jobs.json` +2. Check if gateway is running: `systemctl --user is-active openclaw-gateway` +3. If restartable (transient error): write a message to the agent's inbox/ requesting retry +4. If not restartable: write to outbox/escalate-stuck-task.md for Bates with error details + +## 5. Teams Channel Post (if you have new findings) +If you produced new findings (not NO_REPLY), post a summary to your designated channel: +```bash +~/.openclaw/scripts/graph-api.sh POST "/teams/640b6ae4-88c8-4d00-9a4e-4dc79a2fc42c/channels/19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2/messages" '{"body":{"contentType":"html","content":"[Quinn] Task Tracker [DATE]
[SUMMARY]"}}' +``` +Channel: cross-business (19:d94dd3492ccd4878bc130006c6b90cb4@thread.tacv2) +Keep it under 500 chars. Use HTML bold for headers. Include date. Skip this step if NO_REPLY. + +## 6. Output Format +- If task updates: "Tasks: [N] active, [M] completed, [K] stuck/escalated" +- If stuck tasks: "[STUCK] [agent]: [task] - [action taken]" +- If all clear: NO_REPLY + +## 6. Daily Standup (MANDATORY — first run after 06:00) +Write `outbox/standup.md` (file only — do NOT post to Teams; the standup compiler at 08:30 handles that). +Format: +``` +**Yesterday:** [task tracking stats, stuck items resolved] +**Today:** [completion rates to check, tasks to triage] +**Blockers:** [any blockers or "None"] +``` + +## 7. Weekly Update (write by Friday 16:00) +Write outbox/weekly-update.md: +- Total tasks tracked this week +- Completion rate by agent +- Stuck/escalated tasks +- Recommendations for process improvements diff --git a/bates-core/plugins/dashboard/index.ts b/bates-core/plugins/dashboard/index.ts index 37dd33b..f43464b 100644 --- a/bates-core/plugins/dashboard/index.ts +++ b/bates-core/plugins/dashboard/index.ts @@ -645,6 +645,67 @@ const plugin = { } }); + // API: Discover available Planner plans and To Do lists + apiRoute("/dashboard/api/tasks/providers", async (req: any, res: any): Promise => { + try { + const plans: any[] = []; + const todoLists: any[] = []; + + // Discover Planner plans via mcporter/Graph + try { + const raw = execSync('mcporter call ms365-assistant list-planner-plans 2>&1', { timeout: 30000, encoding: "utf-8" }); + const data = JSON.parse(raw); + for (const p of data.value || []) { + plans.push({ id: p.id, title: p.title, owner: p.owner, createdBy: p.createdBy?.user?.displayName }); + } + } catch (e: any) { plans.push({ error: e.message }); } + + // Discover To Do lists + try { + const raw = execSync('mcporter call ms365-assistant list-todo-lists 2>&1', { timeout: 30000, encoding: "utf-8" }); + const data = JSON.parse(raw); + for (const l of data.value || []) { + todoLists.push({ id: l.id, displayName: l.displayName, isOwner: l.isOwner, wellknownListName: l.wellknownListName }); + } + } catch (e: any) { todoLists.push({ error: e.message }); } + + // Current connected plans + const configPath = join(PLUGIN_DIR, "data", "planner-config.json"); + const config = existsSync(configPath) ? JSON.parse(readFileSync(configPath, "utf-8")) : { plans: {} }; + + jsonResponse(res, { plans, todoLists, connected: config.plans }); + } catch (e: any) { jsonResponse(res, { error: e.message }); } + }); + + // API: Connect/disconnect a task provider + apiRoute("/dashboard/api/tasks/connect", async (req: any, res: any): Promise => { + if (req.method !== "POST") { res.writeHead(405); res.end("Method Not Allowed"); return; } + try { + const body = await collectBody(req); + const { action, key, source, planId, todoListId, name } = JSON.parse(body); + const configPath = join(PLUGIN_DIR, "data", "planner-config.json"); + const config = existsSync(configPath) ? JSON.parse(readFileSync(configPath, "utf-8")) : { plans: {} }; + + if (action === "add") { + if (!key || !name) { jsonResponse(res, { error: "key and name required" }); return; } + if (source === "planner" && planId) { + config.plans[key] = { planId, name, source: "planner" }; + } else if (source === "todo" && todoListId) { + config.plans[key] = { todoListId, name, source: "todo" }; + } else { jsonResponse(res, { error: "Invalid source or missing ID" }); return; } + } else if (action === "remove") { + if (!key) { jsonResponse(res, { error: "key required" }); return; } + delete config.plans[key]; + } else { jsonResponse(res, { error: "action must be 'add' or 'remove'" }); return; } + + writeFileSync(configPath, JSON.stringify(config, null, 2)); + // Invalidate cache + const cachePath = join(PLUGIN_DIR, "data", "tasks-cache.json"); + try { if (existsSync(cachePath)) unlinkSync(cachePath); } catch {} + jsonResponse(res, { success: true, connected: config.plans }); + } catch (e: any) { jsonResponse(res, { error: e.message }); } + }); + // API: health apiRoute("/dashboard/api/health", async (req: any, res: any): Promise => { try { jsonResponse(res, JSON.parse(readFileSync(HEALTH_FILE, "utf-8"))); } diff --git a/bates-core/plugins/dashboard/static/js/panel-settings.js b/bates-core/plugins/dashboard/static/js/panel-settings.js index 8f9a573..d31ba72 100644 --- a/bates-core/plugins/dashboard/static/js/panel-settings.js +++ b/bates-core/plugins/dashboard/static/js/panel-settings.js @@ -236,6 +236,24 @@ return; } + // Task provider: remove + if (t.dataset.tpRemove) { + if (confirm('Remove task source "' + t.dataset.tpRemove + '"?')) { + await disconnectTaskProvider(t.dataset.tpRemove); + } + return; + } + // Task provider: add planner + if (t.dataset.tpAddPlanner) { + await connectTaskProvider('planner', t.dataset.tpAddPlanner, t.dataset.tpName); + return; + } + // Task provider: add todo + if (t.dataset.tpAddTodo) { + await connectTaskProvider('todo', t.dataset.tpAddTodo, t.dataset.tpName); + return; + } + // Safety disable if (t.id === 'm365-safety-disable-btn' || t.closest('#m365-safety-disable-btn')) { showConfirmDialog(); @@ -352,10 +370,116 @@ if (panel) panel.prepend(banner); } + // ── Tab: Task Providers ── + let _providers = null; + + function renderTaskProviders() { + if (!_providers) return '
Loading task providers...
'; + if (_providers.error) return `
Error: ${D.esc(_providers.error)}
`; + + let html = ''; + + // Connected plans + html += collapseCard('tp-connected', 'Connected Task Sources', (() => { + const connected = _providers.connected || {}; + if (!Object.keys(connected).length) return '
No task sources connected yet.
'; + let inner = ''; + for (const [key, plan] of Object.entries(connected)) { + const p = plan; + const icon = p.source === 'planner' ? '📋' : '✅'; + const idLabel = p.source === 'planner' ? p.planId : (p.todoListId || '').slice(0, 20) + '...'; + inner += `
+
+ ${icon} + ${D.esc(p.name)} + ${D.esc(key)} · ${D.esc(p.source)} +
+ +
`; + } + return inner; + })()); + + // Available Planner plans + html += collapseCard('tp-planner', 'Available Planner Plans', (() => { + const plans = (_providers.plans || []).filter(p => !p.error); + if (!plans.length) return '
No Planner plans found or discovery failed.
'; + const connected = _providers.connected || {}; + const connectedIds = new Set(Object.values(connected).filter(p => p.source === 'planner').map(p => p.planId)); + let inner = ''; + for (const p of plans) { + const isConnected = connectedIds.has(p.id); + inner += `
+
+ 📋 ${D.esc(p.title)} + ${D.esc(p.id.slice(0, 12))}... +
+ ${isConnected + ? 'Connected' + : `` + } +
`; + } + return inner; + })(), { open: false }); + + // Available To Do lists + html += collapseCard('tp-todo', 'Available To Do Lists', (() => { + const lists = (_providers.todoLists || []).filter(l => !l.error); + if (!lists.length) return '
No To Do lists found or discovery failed.
'; + const connected = _providers.connected || {}; + const connectedIds = new Set(Object.values(connected).filter(p => p.source === 'todo').map(p => p.todoListId)); + let inner = ''; + for (const l of lists) { + const isConnected = connectedIds.has(l.id); + inner += `
+
+ ✅ ${D.esc(l.displayName)} + ${l.wellknownListName ? `(${D.esc(l.wellknownListName)})` : ''} +
+ ${isConnected + ? 'Connected' + : `` + } +
`; + } + return inner; + })(), { open: false }); + + return html; + } + + async function connectTaskProvider(source, id, name) { + const key = name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); + const body = { action: 'add', key, name, source }; + if (source === 'planner') body.planId = id; + else body.todoListId = id; + try { + const res = await fetch('/dashboard/api/tasks/connect', { + method: 'POST', headers: authHeaders({ 'Content-Type': 'application/json' }), + body: JSON.stringify(body) + }); + const r = await res.json(); + if (r.success) { _providers = null; await loadAndRenderTab(); } + } catch (e) { console.error('Connect failed:', e); } + } + + async function disconnectTaskProvider(key) { + try { + const res = await fetch('/dashboard/api/tasks/connect', { + method: 'POST', headers: authHeaders({ 'Content-Type': 'application/json' }), + body: JSON.stringify({ action: 'remove', key }) + }); + const r = await res.json(); + if (r.success) { _providers = null; await loadAndRenderTab(); } + } catch (e) { console.error('Disconnect failed:', e); } + } + // ── Main render ── function renderTabs() { const tabs = [ { id: 'overview', label: 'Overview' }, + { id: 'tasks', label: 'Task Providers' }, { id: 'safety', label: 'M365 Safety' }, { id: 'whitelists', label: 'Whitelists' }, ]; @@ -380,6 +504,11 @@ let body = ''; if (_activeTab === 'overview') { body = renderOverview(_data); + } else if (_activeTab === 'tasks') { + if (!_providers) { + try { _providers = await D.fetchApi('tasks/providers'); } catch {} + } + body = renderTaskProviders(); } else if (_activeTab === 'safety') { body = renderSafety(_data.m365_safety); } else if (_activeTab === 'whitelists') { From e1a4cdce451ca9a347c8960e7d056e2a7a07265a Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 21:37:35 +0000 Subject: [PATCH 52/63] Fix model display, Create Agent button, main chat priority - Models now always read from openclaw.json config (authoritative) instead of stale SOUL.md **Model:** field - Create Agent button rewired with addEventListener (not inline onclick) to ensure reliable click handling - Chat session list sorts main session first (agent:main:main pinned to top) Co-Authored-By: Claude Opus 4.6 --- bates-core/plugins/dashboard/index.ts | 3 ++- bates-core/plugins/dashboard/static/js/panel-agents.js | 8 +++++++- bates-core/plugins/dashboard/static/js/panel-chat.js | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/bates-core/plugins/dashboard/index.ts b/bates-core/plugins/dashboard/index.ts index f43464b..feaeab1 100644 --- a/bates-core/plugins/dashboard/index.ts +++ b/bates-core/plugins/dashboard/index.ts @@ -1045,7 +1045,8 @@ const plugin = { } const rosterEntry = rosterMap[id]; - if (!model && rosterEntry?.model?.primary) { + // Config model is authoritative — SOUL.md may have stale names + if (rosterEntry?.model?.primary) { model = rosterEntry.model.primary; } diff --git a/bates-core/plugins/dashboard/static/js/panel-agents.js b/bates-core/plugins/dashboard/static/js/panel-agents.js index 2188c73..e5d9593 100644 --- a/bates-core/plugins/dashboard/static/js/panel-agents.js +++ b/bates-core/plugins/dashboard/static/js/panel-agents.js @@ -477,10 +477,16 @@ // Add "Create Agent" button h += `
- +
`; el.innerHTML = h; + + // Wire create agent button after innerHTML is set + document.getElementById('create-agent-btn')?.addEventListener('click', (e) => { + e.stopPropagation(); + openCreateAgent(); + }); } async function refreshSub() { try { const d = await D.fetchApi('sessions'); if (Array.isArray(d)) subagentData = d; } catch {} } diff --git a/bates-core/plugins/dashboard/static/js/panel-chat.js b/bates-core/plugins/dashboard/static/js/panel-chat.js index 2824ed4..24a733d 100644 --- a/bates-core/plugins/dashboard/static/js/panel-chat.js +++ b/bates-core/plugins/dashboard/static/js/panel-chat.js @@ -56,6 +56,11 @@ return; } const sorted = [...sessions].sort((a, b) => { + // Main session always first + const aIsMain = (a.key || "") === "agent:main:main"; + const bIsMain = (b.key || "") === "agent:main:main"; + if (aIsMain !== bIsMain) return aIsMain ? -1 : 1; + // Subagents last const aIsSub = (a.key || "").startsWith("subagent:"); const bIsSub = (b.key || "").startsWith("subagent:"); if (aIsSub !== bIsSub) return aIsSub ? 1 : -1; From 9c7cc56b81782ee6a26f7bb3aceee7d865a1516f Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 21:43:23 +0000 Subject: [PATCH 53/63] Upgrade desktop app to Tauri v2, add icons - Migrate from Tauri v1 to v2 (required for Ubuntu 24.04 webkit2gtk 4.1) - Update Cargo.toml, tauri.conf.json, main.rs for Tauri v2 API - Add tray-icon feature with show/quit menu - Add capabilities/default.json for Tauri v2 permissions - Generate app icons from Bates avatar (32, 128, 256, 512px + ICO) - Cargo check passes clean Co-Authored-By: Claude Opus 4.6 --- bates-core/desktop/src-tauri/Cargo.lock | 5578 +++++++++++++++++ bates-core/desktop/src-tauri/Cargo.toml | 6 +- .../src-tauri/capabilities/default.json | 10 + .../desktop/src-tauri/icons/128x128.png | Bin 0 -> 30880 bytes .../desktop/src-tauri/icons/128x128@2x.png | Bin 0 -> 106060 bytes bates-core/desktop/src-tauri/icons/32x32.png | Bin 0 -> 3035 bytes bates-core/desktop/src-tauri/icons/icon.ico | Bin 0 -> 1017 bytes bates-core/desktop/src-tauri/icons/icon.png | Bin 0 -> 379592 bytes bates-core/desktop/src-tauri/src/main.rs | 83 +- bates-core/desktop/src-tauri/tauri.conf.json | 66 +- 10 files changed, 5668 insertions(+), 75 deletions(-) create mode 100644 bates-core/desktop/src-tauri/Cargo.lock create mode 100644 bates-core/desktop/src-tauri/capabilities/default.json create mode 100644 bates-core/desktop/src-tauri/icons/128x128.png create mode 100644 bates-core/desktop/src-tauri/icons/128x128@2x.png create mode 100644 bates-core/desktop/src-tauri/icons/32x32.png create mode 100644 bates-core/desktop/src-tauri/icons/icon.ico create mode 100644 bates-core/desktop/src-tauri/icons/icon.png diff --git a/bates-core/desktop/src-tauri/Cargo.lock b/bates-core/desktop/src-tauri/Cargo.lock new file mode 100644 index 0000000..d2df31a --- /dev/null +++ b/bates-core/desktop/src-tauri/Cargo.lock @@ -0,0 +1,5578 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "async-signal" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bates-command-center" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-notification", + "tauri-plugin-shell", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +dependencies = [ + "serde_core", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "bytemuck" +version = "1.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.11.0", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.18", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "cc" +version = "1.2.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.11.0", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.11.0", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.29.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "matches", + "phf 0.10.1", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf 0.13.1", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.117", +] + +[[package]] +name = "ctor" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" +dependencies = [ + "quote", + "syn 2.0.117", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.117", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derive_more" +version = "0.99.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.117", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.117", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.11.0", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "dom_query" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d9c2e7f1d22d0f2ce07626d259b8a55f4a47cb0938d4006dd8ae037f17d585e" +dependencies = [ + "bit-set", + "cssparser 0.36.0", + "foldhash 0.2.0", + "html5ever 0.36.1", + "precomputed-hash", + "selectors 0.35.0", + "tendril", +] + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "embed-resource" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 0.9.12+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "endi" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-executor" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.11.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" +dependencies = [ + "log", + "mac", + "markup5ever 0.14.1", + "match_token", +] + +[[package]] +name = "html5ever" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6452c4751a24e1b99c3260d505eaeee76a050573e61f30ac2c924ddc7236f01e" +dependencies = [ + "log", + "markup5ever 0.36.1", +] + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +dependencies = [ + "equivalent", + "hashbrown 0.16.1", + "serde", + "serde_core", +] + +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "iri-string" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.11.0", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.8-speedreader" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" +dependencies = [ + "cssparser 0.29.6", + "html5ever 0.29.1", + "indexmap 2.13.0", + "selectors 0.24.0", +] + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.183" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" +dependencies = [ + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "mac-notification-sys" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29a16783dd1a47849b8c8133c9cd3eb2112cfbc6901670af3dba47c8bbfb07d3" +dependencies = [ + "cc", + "objc2", + "objc2-foundation", + "time", +] + +[[package]] +name = "markup5ever" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" +dependencies = [ + "log", + "phf 0.11.3", + "phf_codegen 0.11.3", + "string_cache 0.8.9", + "string_cache_codegen 0.5.4", + "tendril", +] + +[[package]] +name = "markup5ever" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c3294c4d74d0742910f8c7b466f44dda9eb2d5742c1e430138df290a1e8451c" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "match_token" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.61.2", +] + +[[package]] +name = "muda" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 2.0.18", + "windows-sys 0.60.2", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.11.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "notify-rust" +version = "4.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21af20a1b50be5ac5861f74af1a863da53a11c38684d9818d82f1c42f7fdc6c2" +dependencies = [ + "futures-lite", + "log", + "mac-notification-sys", + "serde", + "tauri-winrt-notification", + "zbus", +] + +[[package]] +name = "num-conv" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.11.0", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.11.0", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.11.0", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.11.0", + "block2", + "libc", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.11.0", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.11.0", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.11.0", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.11.0", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "open" +version = "5.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43bb73a7fa3799b198970490a51174027ba0d4ec504b03cd08caf513d40024bc" +dependencies = [ + "dunce", + "is-wsl", + "libc", + "pathdiff", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "os_pipe" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_shared 0.8.0", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros 0.13.1", + "phf_shared 0.13.1", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.2", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher 1.0.2", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "plist" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" +dependencies = [ + "base64 0.22.1", + "indexmap 2.13.0", + "quick-xml 0.38.4", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.117", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.4+spec-1.1.0", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +dependencies = [ + "memchr", +] + +[[package]] +name = "quick-xml" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.11.0", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.18", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "reqwest" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.11.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.117", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" +dependencies = [ + "bitflags 1.3.2", + "cssparser 0.29.6", + "derive_more 0.99.20", + "fxhash", + "log", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc 0.2.0", + "smallvec", +] + +[[package]] +name = "selectors" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fdfed56cd634f04fe8b9ddf947ae3dc493483e819593d2ba17df9ad05db8b2" +dependencies = [ + "bitflags 2.11.0", + "cssparser 0.36.0", + "derive_more 2.1.1", + "log", + "new_debug_unreachable", + "phf 0.13.1", + "phf_codegen 0.13.1", + "precomputed-hash", + "rustc-hash", + "servo_arc 0.4.3", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381b283ce7bc6b476d903296fb59d0d36633652b633b27f64db4fb46dcbfc3b9" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.13.0", + "schemars 0.9.0", + "schemars 1.2.1", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6d4e30573c8cb306ed6ab1dca8423eec9a463ea0e155f45399455e0368b27e0" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "servo_arc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shared_child" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e362d9935bc50f019969e2f9ecd66786612daae13e8f277be7bfb66e8bed3f7" +dependencies = [ + "libc", + "sigchld", + "windows-sys 0.60.2", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "sigchld" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1" +dependencies = [ + "libc", + "os_pipe", + "signal-hook", +] + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.13.1", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.34.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d52c379e63da659a483a958110bbde891695a0ecb53e48cc7786d5eda7bb" +dependencies = [ + "bitflags 2.11.0", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "parking_lot", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da77cc00fb9028caf5b5d4650f75e31f1ef3693459dfca7f7e506d1ecef0ba2d" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.18", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bbc990d1dbf57a8e1c7fa2327f2a614d8b757805603c1b9ba5c81bade09fd4d" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "toml 0.9.12+spec-1.1.0", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a24476afd977c5d5d169f72425868613d82747916dd29e0a357c84c4bd6d29" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.117", + "tauri-utils", + "thiserror 2.0.18", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d39b349a98dadaffebb73f0a40dcd1f23c999211e5a2e744403db384d0c33de7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddde7d51c907b940fb573006cdda9a642d6a7c8153657e88f8a5c3c9290cd4aa" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "toml 0.9.12+spec-1.1.0", + "walkdir", +] + +[[package]] +name = "tauri-plugin-notification" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01fc2c5ff41105bd1f7242d8201fdf3efd70749b82fa013a17f2126357d194cc" +dependencies = [ + "log", + "notify-rust", + "rand 0.9.2", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", + "time", + "url", +] + +[[package]] +name = "tauri-plugin-shell" +version = "2.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8457dbf9e2bab1edd8df22bb2c20857a59a9868e79cb3eac5ed639eec4d0c73b" +dependencies = [ + "encoding_rs", + "log", + "open", + "os_pipe", + "regex", + "schemars 0.8.22", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", + "tokio", +] + +[[package]] +name = "tauri-runtime" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2826d79a3297ed08cd6ea7f412644ef58e32969504bc4fbd8d7dbeabc4445ea2" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11ea2e6f801d275fdd890d6c9603736012742a1c33b96d0db788c9cdebf7f9e" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219a1f983a2af3653f75b5747f76733b0da7ff03069c7a41901a5eb3ace4557d" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dunce", + "glob", + "html5ever 0.29.1", + "http", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.11.3", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.18", + "toml 0.9.12+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1087b111fe2b005e42dbdc1990fc18593234238d47453b0c99b7de1c9ab2c1e0" +dependencies = [ + "dunce", + "embed-resource", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "tauri-winrt-notification" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b1e66e07de489fe43a46678dd0b8df65e0c973909df1b60ba33874e297ba9b9" +dependencies = [ + "quick-xml 0.37.5", + "thiserror 2.0.18", + "windows", + "windows-version", +] + +[[package]] +name = "tempfile" +version = "3.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" +dependencies = [ + "fastrand", + "getrandom 0.4.2", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl 2.0.18", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "time" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap 2.13.0", + "serde_core", + "serde_spanned 1.0.4", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.0.0+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.13.0", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.13.0", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.4+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" +dependencies = [ + "indexmap 2.13.0", + "toml_datetime 1.0.0+spec-1.1.0", + "toml_parser", + "winnow 0.7.15", +] + +[[package]] +name = "toml_parser" +version = "1.0.9+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" +dependencies = [ + "winnow 0.7.15", +] + +[[package]] +name = "toml_writer" +version = "1.0.6+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "bitflags 2.11.0", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tray-icon" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 2.0.18", + "windows-sys 0.60.2", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "uds_windows" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b70b87d15e91f553711b40df3048faf27a7a04e01e0ddc0cf9309f0af7c2ca" +dependencies = [ + "memoffset", + "tempfile", + "windows-sys 0.61.2", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" +dependencies = [ + "getrandom 0.4.2", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" +dependencies = [ + "cfg-if", + "futures-util", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.117", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.13.0", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap 2.13.0", + "semver", +] + +[[package]] +name = "web-sys" +version = "0.3.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a9779e9f04d2ac1ce317aee707aa2f6b773afba7b931222bff6983843b1576" +dependencies = [ + "phf 0.13.1", + "phf_codegen 0.13.1", + "string_cache 0.9.0", + "string_cache_codegen 0.6.1", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.18", + "windows", + "windows-core 0.61.2", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.13.0", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap 2.13.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.13.0", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + +[[package]] +name = "wry" +version = "0.54.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a24eda84b5d488f99344e54b807138896cee8df0b2d16c793f1f6b80e6d8df1f" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "zbus" +version = "5.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca82f95dbd3943a40a53cfded6c2d0a2ca26192011846a1810c4256ef92c60bc" +dependencies = [ + "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-lite", + "hex", + "libc", + "ordered-stream", + "rustix", + "serde", + "serde_repr", + "tracing", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow 0.7.15", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897e79616e84aac4b2c46e9132a4f63b93105d54fe8c0e8f6bffc21fa8d49222" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" +dependencies = [ + "serde", + "winnow 0.7.15", + "zvariant", +] + +[[package]] +name = "zerocopy" +version = "0.8.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + +[[package]] +name = "zvariant" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5708299b21903bbe348e94729f22c49c55d04720a004aa350f1f9c122fd2540b" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow 0.7.15", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b59b012ebe9c46656f9cc08d8da8b4c726510aef12559da3e5f1bf72780752c" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 2.0.117", + "winnow 0.7.15", +] diff --git a/bates-core/desktop/src-tauri/Cargo.toml b/bates-core/desktop/src-tauri/Cargo.toml index 46f8c00..3bb5f29 100644 --- a/bates-core/desktop/src-tauri/Cargo.toml +++ b/bates-core/desktop/src-tauri/Cargo.toml @@ -8,9 +8,11 @@ repository = "https://github.com/getBates/Bates" edition = "2021" [build-dependencies] -tauri-build = { version = "1.5", features = [] } +tauri-build = { version = "2", features = [] } [dependencies] -tauri = { version = "1.6", features = ["shell-open-api", "window-all", "notification-all", "system-tray"] } +tauri = { version = "2", features = ["tray-icon"] } +tauri-plugin-shell = "2" +tauri-plugin-notification = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/bates-core/desktop/src-tauri/capabilities/default.json b/bates-core/desktop/src-tauri/capabilities/default.json new file mode 100644 index 0000000..84306c8 --- /dev/null +++ b/bates-core/desktop/src-tauri/capabilities/default.json @@ -0,0 +1,10 @@ +{ + "identifier": "default", + "description": "Default capabilities for Bates Command Center", + "windows": ["main"], + "permissions": [ + "core:default", + "shell:allow-open", + "notification:default" + ] +} diff --git a/bates-core/desktop/src-tauri/icons/128x128.png b/bates-core/desktop/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..330fb1a92959fabfcc9bf14d06f78de3174dcd20 GIT binary patch literal 30880 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 S=6L)70000 literal 0 HcmV?d00001 diff --git a/bates-core/desktop/src-tauri/icons/32x32.png b/bates-core/desktop/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..53914f89a945a5b02a0a368b57606500b4c111a1 GIT binary patch literal 3035 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 literal 0 HcmV?d00001 diff --git a/bates-core/desktop/src-tauri/icons/icon.ico b/bates-core/desktop/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6034443c1e205c4e3ca3a6b2ffc68a6ddaf875bc GIT binary patch literal 1017 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%0A* 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 U1{pH{J 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 TC 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

  • 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 JMo2&4{{Tm#o4^17 literal 0 HcmV?d00001 diff --git a/bates-core/desktop/src-tauri/src/main.rs b/bates-core/desktop/src-tauri/src/main.rs index 3700f9b..506c3be 100644 --- a/bates-core/desktop/src-tauri/src/main.rs +++ b/bates-core/desktop/src-tauri/src/main.rs @@ -1,48 +1,65 @@ // Prevents additional console window on Windows in release #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -use tauri::{CustomMenuItem, SystemTray, SystemTrayMenu, SystemTrayMenuItem, SystemTrayEvent}; use tauri::Manager; fn main() { - let show = CustomMenuItem::new("show".to_string(), "Show Dashboard"); - let quit = CustomMenuItem::new("quit".to_string(), "Quit"); - let tray_menu = SystemTrayMenu::new() - .add_item(show) - .add_native_item(SystemTrayMenuItem::Separator) - .add_item(quit); - let system_tray = SystemTray::new().with_menu(tray_menu); - tauri::Builder::default() - .system_tray(system_tray) - .on_system_tray_event(|app, event| match event { - SystemTrayEvent::LeftClick { .. } => { - if let Some(window) = app.get_window("main") { - window.show().unwrap_or_default(); - window.set_focus().unwrap_or_default(); - } - } - SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() { - "show" => { - if let Some(window) = app.get_window("main") { - window.show().unwrap_or_default(); - window.set_focus().unwrap_or_default(); + .plugin(tauri_plugin_shell::init()) + .plugin(tauri_plugin_notification::init()) + .setup(|app| { + // Build tray menu + let show_item = tauri::menu::MenuItemBuilder::with_id("show", "Show Dashboard") + .build(app)?; + let quit_item = tauri::menu::MenuItemBuilder::with_id("quit", "Quit") + .build(app)?; + let menu = tauri::menu::MenuBuilder::new(app) + .item(&show_item) + .separator() + .item(&quit_item) + .build()?; + + // Build tray icon + let _tray = tauri::tray::TrayIconBuilder::new() + .menu(&menu) + .on_menu_event(|app_handle, event| { + match event.id().as_ref() { + "show" => { + if let Some(window) = app_handle.get_webview_window("main") { + let _ = window.show(); + let _ = window.set_focus(); + } + } + "quit" => { + std::process::exit(0); + } + _ => {} } - } - "quit" => { - std::process::exit(0); - } - _ => {} - }, - _ => {} + }) + .on_tray_icon_event(|tray_icon, event| { + if let tauri::tray::TrayIconEvent::Click { + button: tauri::tray::MouseButton::Left, + button_state: tauri::tray::MouseButtonState::Up, + .. + } = event + { + let app_handle = tray_icon.app_handle(); + if let Some(window) = app_handle.get_webview_window("main") { + let _ = window.show(); + let _ = window.set_focus(); + } + } + }) + .build(app)?; + + Ok(()) }) - .on_window_event(|event| match event.event() { - tauri::WindowEvent::CloseRequested { api, .. } => { + .on_window_event(|window, event| { + if let tauri::WindowEvent::CloseRequested { api, .. } = event { // Minimize to tray instead of closing - event.window().hide().unwrap_or_default(); + let _ = window.hide(); api.prevent_close(); } - _ => {} }) .run(tauri::generate_context!()) .expect("error while running tauri application"); diff --git a/bates-core/desktop/src-tauri/tauri.conf.json b/bates-core/desktop/src-tauri/tauri.conf.json index f7ad2df..9ae11f7 100644 --- a/bates-core/desktop/src-tauri/tauri.conf.json +++ b/bates-core/desktop/src-tauri/tauri.conf.json @@ -1,32 +1,13 @@ { + "$schema": "https://raw.githubusercontent.com/nicehash/tauri/dev/crates/tauri-cli/schema.json", + "productName": "Bates Command Center", + "version": "0.1.0", + "identifier": "com.getbates.commandcenter", "build": { - "devPath": "http://localhost:18789/dashboard/", - "distDir": "../dist" + "frontendDist": "../dist", + "devUrl": "http://localhost:18789/dashboard/" }, - "package": { - "productName": "Bates Command Center", - "version": "0.1.0" - }, - "tauri": { - "bundle": { - "active": true, - "identifier": "com.getbates.commandcenter", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.ico" - ], - "targets": ["msi", "nsis"], - "windows": { - "certificateThumbprint": null, - "digestAlgorithm": "sha256", - "timestampUrl": "" - } - }, - "security": { - "csp": null - }, + "app": { "windows": [ { "title": "Bates Command Center", @@ -40,22 +21,27 @@ "transparent": false } ], - "systemTray": { + "security": { + "csp": null + }, + "trayIcon": { "iconPath": "icons/icon.png", "iconAsTemplate": true - }, - "allowlist": { - "all": false, - "shell": { - "all": false, - "open": true - }, - "window": { - "all": true - }, - "notification": { - "all": true - } + } + }, + "bundle": { + "active": true, + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.ico" + ], + "targets": ["msi", "nsis"], + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": "sha256", + "timestampUrl": "" } } } From bb7c28810b11026418012638285b65f39b347933 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 21:51:37 +0000 Subject: [PATCH 54/63] Add build script and .gitignore for desktop app - build.sh: one-command build for Linux or Windows - .gitignore: exclude target/ and dist-builds/ from repo - Windows cross-compilation verified: 12MB .exe via cargo-xwin - Linux release build verified: 17MB binary Co-Authored-By: Claude Opus 4.6 --- bates-core/desktop/.gitignore | 1 + bates-core/desktop/build.sh | 44 +++++++++++++++++++++++++ bates-core/desktop/src-tauri/.gitignore | 1 + 3 files changed, 46 insertions(+) create mode 100644 bates-core/desktop/.gitignore create mode 100755 bates-core/desktop/build.sh create mode 100644 bates-core/desktop/src-tauri/.gitignore diff --git a/bates-core/desktop/.gitignore b/bates-core/desktop/.gitignore new file mode 100644 index 0000000..1ad4efb --- /dev/null +++ b/bates-core/desktop/.gitignore @@ -0,0 +1 @@ +dist-builds/ diff --git a/bates-core/desktop/build.sh b/bates-core/desktop/build.sh new file mode 100755 index 0000000..6f98545 --- /dev/null +++ b/bates-core/desktop/build.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# Build Bates Command Center desktop app +# Usage: ./build.sh [linux|windows] + +set -e +cd "$(dirname "$0")/src-tauri" + +# Ensure Rust is available +if ! command -v cargo &>/dev/null; then + echo "Rust not found. Install with: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh" + exit 1 +fi + +TARGET="${1:-linux}" + +case "$TARGET" in + linux) + echo "Building for Linux..." + cargo tauri build 2>&1 + echo "" + echo "Build complete! Artifacts:" + ls -lh target/release/bundle/deb/*.deb 2>/dev/null + ls -lh target/release/bundle/appimage/*.AppImage 2>/dev/null + ls -lh target/release/bates-command-center 2>/dev/null + ;; + windows) + echo "Building for Windows (cross-compilation)..." + if ! command -v cargo-xwin &>/dev/null; then + echo "Installing cargo-xwin..." + cargo install cargo-xwin + fi + cargo xwin build --release --target x86_64-pc-windows-msvc 2>&1 + echo "" + echo "Build complete! Binary:" + ls -lh target/x86_64-pc-windows-msvc/release/bates-command-center.exe 2>/dev/null + echo "" + echo "Note: For MSI/NSIS installer, build natively on Windows:" + echo " cd src-tauri && cargo tauri build" + ;; + *) + echo "Usage: $0 [linux|windows]" + exit 1 + ;; +esac diff --git a/bates-core/desktop/src-tauri/.gitignore b/bates-core/desktop/src-tauri/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/bates-core/desktop/src-tauri/.gitignore @@ -0,0 +1 @@ +target/ From 5d200b34f331f4b74b984253ebf67fce4a210eeb Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 21:59:29 +0000 Subject: [PATCH 55/63] Fix standup avatars, Create Agent delegation, add 3 Planner plans - Standup panel: replace emoji icons with actual agent avatar images - Create Agent: add event delegation on parent panel (survives innerHTML rebuilds) - Modal body: override white-space/font for form content - Add 3 new Planner plans: fDesk Tech, SynapseLayer, Loan-OS - Fix task provider discovery: use correct MCP tool names - Fix memory-guard plugin manifest (missing configSchema) Co-Authored-By: Claude Opus 4.6 --- .../dashboard/data/planner-config.json | 49 +++++++++++++++++++ bates-core/plugins/dashboard/index.ts | 23 +++++++-- .../dashboard/static/js/panel-agents.js | 13 +++++ .../dashboard/static/js/panel-standup.js | 17 +++---- .../plugins/dashboard/static/styles.css | 6 +++ 5 files changed, 94 insertions(+), 14 deletions(-) create mode 100644 bates-core/plugins/dashboard/data/planner-config.json diff --git a/bates-core/plugins/dashboard/data/planner-config.json b/bates-core/plugins/dashboard/data/planner-config.json new file mode 100644 index 0000000..33b7c7c --- /dev/null +++ b/bates-core/plugins/dashboard/data/planner-config.json @@ -0,0 +1,49 @@ +{ + "plans": { + "fdesk": { + "planId": "TxgS0K-c6kCX-D_UnGQs0ZcACG7R", + "name": "fDesk Roadmap", + "source": "planner" + }, + "escola": { + "planId": "HXpYhx5p5EWodt0e_KE0OZcAC8ze", + "name": "Escola Caravela", + "source": "planner" + }, + "bates": { + "planId": "2tFt9cqe0EWlMA30VKnIxZcAGjjW", + "name": "Bates Operations", + "source": "planner" + }, + "private": { + "source": "todo", + "name": "Private (To Do)", + "todoListId": "AAMkADI5MDU0OThkLTM2ZjItNDA1YS05MDY1LTZlOTA2ZmNjMjEzNwAuAAAAAAAEGmEdFnYlRpGm5ddo9XdyAQBNUrDGIj66TIi6yxmhxkIcAAABNTsiAAA=" + }, + "quick": { + "source": "todo", + "name": "Quick Tasks", + "todoListId": "AQMkADI5MDU0OThkLTM2ZjItNDA1YS05MDY1LTZlOTA2ZmNjADIxMzcALgAAAwQaYR0WdiVGkabl12j1d3IBAE1SsMYiPrpMiLrLGaHGQhwAAAKLAwAAAA==" + }, + "agent-tasks": { + "source": "todo", + "name": "Agent Tasks", + "todoListId": "AAMkADI5MDU0OThkLTM2ZjItNDA1YS05MDY1LTZlOTA2ZmNjMjEzNwAuAAAAAAAEGmEdFnYlRpGm5ddo9XdyAQBNUrDGIj66TIi6yxmhxkIcAAAVLHLVAAA=" + }, + "fdesk-tech": { + "planId": "NULtlrJu2Uuu2b5KMM2bBJcAHAuO", + "name": "fDesk Tech", + "source": "planner" + }, + "synapse-layer": { + "planId": "O9odh8lXnUWGVrDi9EX3wJcAHggV", + "name": "SynapseLayer", + "source": "planner" + }, + "loan-os": { + "planId": "cEWugHBoDUOXNq8RcsbE-pcAE45_", + "name": "Loan-OS", + "source": "planner" + } + } +} \ No newline at end of file diff --git a/bates-core/plugins/dashboard/index.ts b/bates-core/plugins/dashboard/index.ts index feaeab1..dce6064 100644 --- a/bates-core/plugins/dashboard/index.ts +++ b/bates-core/plugins/dashboard/index.ts @@ -651,18 +651,31 @@ const plugin = { const plans: any[] = []; const todoLists: any[] = []; - // Discover Planner plans via mcporter/Graph + // Discover Planner tasks assigned to user (no "list plans" API via MCP — use Graph directly) try { - const raw = execSync('mcporter call ms365-assistant list-planner-plans 2>&1', { timeout: 30000, encoding: "utf-8" }); + const raw = execSync('mcporter call ms365-assistant list-planner-tasks top=1 2>&1', { timeout: 30000, encoding: "utf-8" }); const data = JSON.parse(raw); - for (const p of data.value || []) { - plans.push({ id: p.id, title: p.title, owner: p.owner, createdBy: p.createdBy?.user?.displayName }); + // Extract unique plan IDs from assigned tasks + const seenPlans = new Set(); + for (const t of data.value || []) { + if (t.planId && !seenPlans.has(t.planId)) { + seenPlans.add(t.planId); + plans.push({ id: t.planId, title: t.planId }); + } + } + // Enrich with plan details + for (const p of plans) { + try { + const planRaw = execSync(`mcporter call ms365-assistant get-planner-plan plannerPlanId="${p.id}" 2>&1`, { timeout: 15000, encoding: "utf-8" }); + const planData = JSON.parse(planRaw); + if (planData.title) p.title = planData.title; + } catch {} } } catch (e: any) { plans.push({ error: e.message }); } // Discover To Do lists try { - const raw = execSync('mcporter call ms365-assistant list-todo-lists 2>&1', { timeout: 30000, encoding: "utf-8" }); + const raw = execSync('mcporter call ms365-assistant list-todo-task-lists 2>&1', { timeout: 30000, encoding: "utf-8" }); const data = JSON.parse(raw); for (const l of data.value || []) { todoLists.push({ id: l.id, displayName: l.displayName, isOwner: l.isOwner, wellknownListName: l.wellknownListName }); diff --git a/bates-core/plugins/dashboard/static/js/panel-agents.js b/bates-core/plugins/dashboard/static/js/panel-agents.js index e5d9593..7bac102 100644 --- a/bates-core/plugins/dashboard/static/js/panel-agents.js +++ b/bates-core/plugins/dashboard/static/js/panel-agents.js @@ -509,6 +509,19 @@ async function init(gw) { loadAvatars(); + + // Event delegation for Create Agent button (survives innerHTML rebuilds) + const panel = document.getElementById('panel-agents'); + if (panel) { + panel.addEventListener('click', (e) => { + const btn = e.target.closest('#create-agent-btn'); + if (btn) { + e.stopPropagation(); + openCreateAgent(); + } + }); + } + render(); if (gw?.authenticated) await refresh(gw); else await Promise.all([refreshSub(), refreshFleet()]); render(); diff --git a/bates-core/plugins/dashboard/static/js/panel-standup.js b/bates-core/plugins/dashboard/static/js/panel-standup.js index 8adaf81..6a4174d 100644 --- a/bates-core/plugins/dashboard/static/js/panel-standup.js +++ b/bates-core/plugins/dashboard/static/js/panel-standup.js @@ -6,14 +6,13 @@ let currentDate = new Date().toISOString().slice(0, 10); let availableDates = []; - const AGENT_EMOJIS = { - bates: '🐧', conrad: '🏦', soren: '⚡', amara: '🏫', jules: '🏠', - dash: '🚀', mercer: '⚖️', kira: '✍️', nova: '🔬', paige: '💰', - quinn: '👥', archer: '📝', mira: '🔧', - }; - - function getEmoji(name) { - return AGENT_EMOJIS[(name || '').toLowerCase()] || '🤖'; + function getAvatar(name) { + const id = (name || '').toLowerCase(); + const src = window.AGENT_AVATARS?.[id]; + if (src) { + return ``; + } + return '🤖'; } function renderStandups(data) { @@ -61,7 +60,7 @@ const formatted = formatStandupText(text); h += `
    -
    ${getEmoji(name)}
    +
    ${getAvatar(name)}
    ${D.esc(name)} diff --git a/bates-core/plugins/dashboard/static/styles.css b/bates-core/plugins/dashboard/static/styles.css index 51d0940..3480ba5 100644 --- a/bates-core/plugins/dashboard/static/styles.css +++ b/bates-core/plugins/dashboard/static/styles.css @@ -1854,6 +1854,12 @@ html, body { line-height: 1.7; white-space: pre-wrap; } +.modal-body .agent-detail-card, +.modal-body .project-form { + white-space: normal; + font-family: var(--font); + line-height: 1.5; +} /* ═══════════════ SHARED STATES ═══════════════ */ .placeholder, .empty-state { From 9e256e9efa6fd1bcef9055b3a8a6ba6a46497571 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 22:15:27 +0000 Subject: [PATCH 56/63] Add server/client role selection to installer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Server mode installs the full AI system (WSL2, gateway, agents) and only configures the SSH server — no desktop shortcuts. Client mode installs the Bates Command Center desktop app and creates SSH/RDP shortcuts to connect to the server. This prevents useless self-connecting shortcuts on Machine B and gives Machine A exactly what it needs. Co-Authored-By: Claude Opus 4.6 --- bates-core/BatesCore.iss | 6 + bates-core/core-client-setup.ps1 | 280 ++++++++++++++++++ bates-core/core-remote-access.sh | 51 +++- bates-core/install.ps1 | 48 ++- .../integrations/remote-access/setup.sh | 31 +- 5 files changed, 396 insertions(+), 20 deletions(-) create mode 100644 bates-core/core-client-setup.ps1 diff --git a/bates-core/BatesCore.iss b/bates-core/BatesCore.iss index 9256df8..8e90194 100644 --- a/bates-core/BatesCore.iss +++ b/bates-core/BatesCore.iss @@ -49,8 +49,14 @@ Source: "..\DISCLAIMER.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "core-setup.sh"; DestDir: "{app}"; Flags: ignoreversion Source: "core-configure.sh"; DestDir: "{app}"; Flags: ignoreversion Source: "core-verify.sh"; DestDir: "{app}"; Flags: ignoreversion +Source: "core-remote-access.sh"; DestDir: "{app}"; Flags: ignoreversion +Source: "core-client-setup.ps1"; DestDir: "{app}"; Flags: ignoreversion Source: "install.ps1"; DestDir: "{app}"; Flags: ignoreversion +; Desktop app (for client mode) +Source: "desktop\bates-command-center.exe"; DestDir: "{app}\desktop"; Flags: ignoreversion skipifsourcedoesntexist +Source: "desktop\src-tauri\icons\icon.ico"; DestDir: "{app}\desktop"; DestName: "icon.ico"; Flags: ignoreversion skipifsourcedoesntexist + ; Libraries Source: "lib\*"; DestDir: "{app}\lib"; Flags: ignoreversion recursesubdirs diff --git a/bates-core/core-client-setup.ps1 b/bates-core/core-client-setup.ps1 new file mode 100644 index 0000000..0eaceb0 --- /dev/null +++ b/bates-core/core-client-setup.ps1 @@ -0,0 +1,280 @@ +# core-client-setup.ps1 -- Client Mode: Dashboard App + SSH/RDP Shortcuts +# Installs Bates Command Center desktop app and creates connection shortcuts +# to a remote Bates server. No WSL2, no gateway -- just the viewer + remote tools. + +param( + [string]$InstallDir = "$env:LOCALAPPDATA\BatesInstaller" +) + +$ErrorActionPreference = "Stop" + +function Write-Step($msg) { + Write-Host "" + Write-Host "==> $msg" -ForegroundColor Cyan +} + +function Write-Success($msg) { + Write-Host "[OK] $msg" -ForegroundColor Green +} + +function Write-Warn($msg) { + Write-Host "[WARN] $msg" -ForegroundColor Yellow +} + +function Write-Fail($msg) { + Write-Host "[ERROR] $msg" -ForegroundColor Red +} + +Write-Host "" +Write-Host "==========================================" -ForegroundColor Cyan +Write-Host " Bates AI Assistant -- Client Setup" -ForegroundColor Cyan +Write-Host "==========================================" -ForegroundColor Cyan +Write-Host "" +Write-Host "This machine will be set up as a client to connect to a remote" -ForegroundColor White +Write-Host "Bates server. No AI services will run locally." -ForegroundColor White +Write-Host "" + +# ============================================================ +# Step 1: Collect server connection info +# ============================================================ +Write-Step "Server connection details" + +Write-Host "Enter the address of the machine where Bates is installed." -ForegroundColor White +Write-Host "This can be a Tailscale hostname, IP address, or DNS name." -ForegroundColor Gray +Write-Host "" + +$serverHost = Read-Host "Bates server address (e.g., bates-server.tail0e82c9.ts.net)" +if ([string]::IsNullOrEmpty($serverHost)) { + Write-Fail "Server address is required." + exit 1 +} + +$serverUser = Read-Host "Linux (WSL) username on the server [openclaw]" +if ([string]::IsNullOrEmpty($serverUser)) { $serverUser = "openclaw" } + +$winUser = Read-Host "Windows username on the server [$env:USERNAME]" +if ([string]::IsNullOrEmpty($winUser)) { $winUser = $env:USERNAME } + +$gatewayPort = Read-Host "Gateway port [18789]" +if ([string]::IsNullOrEmpty($gatewayPort)) { $gatewayPort = "18789" } + +# Windows host may have a different Tailscale hostname than WSL +$winHost = Read-Host "Windows host address (if different from server, or Enter for same) [$serverHost]" +if ([string]::IsNullOrEmpty($winHost)) { $winHost = $serverHost } + +Write-Success "Server: $serverHost (gateway port $gatewayPort)" + +# ============================================================ +# Step 2: Install Bates Command Center desktop app +# ============================================================ +Write-Step "Installing Bates Command Center..." + +$desktopExe = Join-Path $InstallDir "desktop\bates-command-center.exe" +$appDir = "$env:LOCALAPPDATA\BatesCommandCenter" + +if (Test-Path $desktopExe) { + # Create app directory + New-Item -ItemType Directory -Path $appDir -Force | Out-Null + + # Copy the executable + Copy-Item $desktopExe "$appDir\Bates Command Center.exe" -Force + Write-Success "Desktop app installed to: $appDir" + + # Create Desktop shortcut + $desktopPath = [Environment]::GetFolderPath("Desktop") + $shell = New-Object -ComObject WScript.Shell + $shortcut = $shell.CreateShortcut("$desktopPath\Bates Command Center.lnk") + $shortcut.TargetPath = "$appDir\Bates Command Center.exe" + $shortcut.Description = "Bates AI Assistant Dashboard" + $shortcut.WorkingDirectory = $appDir + + # Use custom icon if available + $iconPath = Join-Path $InstallDir "desktop\icon.ico" + if (Test-Path $iconPath) { + Copy-Item $iconPath "$appDir\icon.ico" -Force + $shortcut.IconLocation = "$appDir\icon.ico" + } + + $shortcut.Save() + Write-Success "Desktop shortcut created" + + # Create Start Menu shortcut + $startMenu = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs" + $startShortcut = $shell.CreateShortcut("$startMenu\Bates Command Center.lnk") + $startShortcut.TargetPath = "$appDir\Bates Command Center.exe" + $startShortcut.Description = "Bates AI Assistant Dashboard" + $startShortcut.WorkingDirectory = $appDir + if (Test-Path "$appDir\icon.ico") { + $startShortcut.IconLocation = "$appDir\icon.ico" + } + $startShortcut.Save() + Write-Success "Start Menu shortcut created" +} else { + Write-Warn "Desktop app not found in installer package." + Write-Host "You can access the dashboard via browser instead:" -ForegroundColor Gray + Write-Host " http://${serverHost}:${gatewayPort}/dashboard" -ForegroundColor White +} + +# ============================================================ +# Step 3: Generate SSH key pair +# ============================================================ +Write-Step "Setting up SSH key for passwordless access..." + +$remoteDir = [Environment]::GetFolderPath("Desktop") + "\Bates Remote" +New-Item -ItemType Directory -Path $remoteDir -Force | Out-Null + +$keyPath = "$remoteDir\bates-remote" + +if (Test-Path $keyPath) { + Write-Host "SSH key already exists at: $keyPath" -ForegroundColor Gray +} else { + # Generate ed25519 key pair + ssh-keygen -t ed25519 -f $keyPath -N '""' -C "bates-remote-access" 2>$null + if ($LASTEXITCODE -eq 0) { + Write-Success "SSH key pair generated" + } else { + # Try without empty passphrase quoting (varies by ssh-keygen version) + ssh-keygen -t ed25519 -f $keyPath -N "" -C "bates-remote-access" 2>$null + if ($LASTEXITCODE -eq 0) { + Write-Success "SSH key pair generated" + } else { + Write-Warn "Could not generate SSH key. You may need to create one manually." + Write-Host " ssh-keygen -t ed25519 -f `"$keyPath`" -N `"`" -C `"bates-remote-access`"" + } + } +} + +# ============================================================ +# Step 4: Create connection shortcuts +# ============================================================ +Write-Step "Creating connection shortcuts..." + +# SSH to WSL (Linux) +$sshWslContent = @" +@echo off +title SSH - Bates Server (Linux) +echo Connecting to Bates server (WSL)... +echo Host: $serverHost +echo. +ssh -i "%~dp0bates-remote" -o StrictHostKeyChecking=no $serverUser@$serverHost +if errorlevel 1 ( + echo. + echo Connection failed. Ensure: + echo 1. The Bates server is running + echo 2. SSH server is running on the server + echo 3. Tailscale is connected on both machines + echo 4. Your public key is installed on the server +) +echo. +pause +"@ +Set-Content "$remoteDir\SSH - Bates Server (Linux).bat" $sshWslContent +Write-Success "Created: SSH - Bates Server (Linux).bat" + +# SSH to Windows host +$sshWinContent = @" +@echo off +title SSH - Bates Server (Windows) +echo Connecting to Bates server (Windows host)... +echo Host: $winHost +echo. +ssh -i "%~dp0bates-remote" -o StrictHostKeyChecking=no $winUser@$winHost +if errorlevel 1 ( + echo. + echo Connection failed. Ensure: + echo 1. Windows OpenSSH Server is running on the server + echo 2. Tailscale is connected on both machines + echo 3. Your public key is installed on the server +) +echo. +pause +"@ +Set-Content "$remoteDir\SSH - Bates Server (Windows).bat" $sshWinContent +Write-Success "Created: SSH - Bates Server (Windows).bat" + +# RDP to Windows host +$rdpContent = @" +full address:s:$winHost +username:s:$winUser +prompt for credentials:i:1 +screen mode id:i:2 +desktopwidth:i:1920 +desktopheight:i:1080 +session bpp:i:32 +compression:i:1 +displayconnectionbar:i:1 +autoreconnection enabled:i:1 +authentication level:i:2 +negotiate security layer:i:1 +"@ +Set-Content "$remoteDir\RDP - Bates Server.rdp" $rdpContent +Write-Success "Created: RDP - Bates Server.rdp" + +# Dashboard browser shortcut +$dashUrl = "http://${serverHost}:${gatewayPort}/dashboard" +$shell = New-Object -ComObject WScript.Shell +$dashShortcut = $shell.CreateShortcut("$remoteDir\Dashboard (Browser).url") +$dashShortcut.TargetPath = $dashUrl +$dashShortcut.Save() +Write-Success "Created: Dashboard (Browser).url" + +# ============================================================ +# Step 5: Key installation instructions +# ============================================================ +Write-Step "SSH key installation" + +$pubKeyPath = "$keyPath.pub" +if (Test-Path $pubKeyPath) { + $pubKey = Get-Content $pubKeyPath -Raw + Write-Host "" + Write-Host "Your public key needs to be added to the Bates server." -ForegroundColor Yellow + Write-Host "" + Write-Host "Option A: Copy this key and add it on the server:" -ForegroundColor White + Write-Host "" + Write-Host " $($pubKey.Trim())" -ForegroundColor Gray + Write-Host "" + Write-Host " On the server, run:" -ForegroundColor White + Write-Host " echo '$($pubKey.Trim())' >> ~/.ssh/authorized_keys" -ForegroundColor Gray + Write-Host "" + Write-Host "Option B: Use ssh-copy-id (if you know the password):" -ForegroundColor White + Write-Host " ssh-copy-id -i `"$pubKeyPath`" $serverUser@$serverHost" -ForegroundColor Gray + Write-Host "" + + # Copy to clipboard + try { + $pubKey.Trim() | Set-Clipboard + Write-Success "Public key copied to clipboard" + } catch { + # Clipboard not available (e.g., headless) + } +} else { + Write-Warn "No public key found. Generate one manually and install on server." +} + +# ============================================================ +# Summary +# ============================================================ +Write-Host "" +Write-Host "==========================================" -ForegroundColor Green +Write-Host " Client Setup Complete!" -ForegroundColor Green +Write-Host "==========================================" -ForegroundColor Green +Write-Host "" +Write-Host "What was installed:" -ForegroundColor White +Write-Host "" + +if (Test-Path "$appDir\Bates Command Center.exe") { + Write-Host " [x] Bates Command Center desktop app" -ForegroundColor Green + Write-Host " Location: $appDir" -ForegroundColor Gray +} +Write-Host " [x] SSH/RDP shortcuts" -ForegroundColor Green +Write-Host " Location: $remoteDir" -ForegroundColor Gray +Write-Host "" +Write-Host "Dashboard URL: $dashUrl" -ForegroundColor Cyan +Write-Host "" +Write-Host "Next steps:" -ForegroundColor Yellow +Write-Host " 1. Install your SSH public key on the Bates server (see above)" +Write-Host " 2. Ensure Tailscale is connected on both machines" +Write-Host " 3. Open Bates Command Center or the browser dashboard" +Write-Host "" +Write-Host "Press any key to exit..." +$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") diff --git a/bates-core/core-remote-access.sh b/bates-core/core-remote-access.sh index c5f83a5..94161e4 100644 --- a/bates-core/core-remote-access.sh +++ b/bates-core/core-remote-access.sh @@ -1,25 +1,45 @@ #!/usr/bin/env bash -# core-remote-access.sh -- Phase 5: Set up passwordless SSH + RDP shortcuts +# core-remote-access.sh -- Phase 5: SSH server + optional desktop shortcuts # Called by install.ps1 after core-verify.sh completes successfully. # -# Creates a "Bates Remote" folder on the Windows desktop containing: +# Flags: +# --server-only Configure SSH server only (no desktop shortcuts) +# Used in server mode -- shortcuts are created on the client instead. +# +# Without flags, creates a "Bates Remote" folder on the Windows desktop containing: # 1. SSH shortcut to Windows host (passwordless) # 2. SSH shortcut to WSL (passwordless) # 3. RDP shortcut to Windows host # 4. Dedicated SSH key pair (bundled for portability) -# -# The user copies this folder to their primary machine for remote access. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/lib/common.sh" -echo "" -echo "===========================================" -echo " Bates Core -- Remote Access Setup" -echo "===========================================" -echo "" +# ------------------------------------------------------------------- +# Parse flags +# ------------------------------------------------------------------- +SERVER_ONLY=false +for arg in "$@"; do + case "$arg" in + --server-only) SERVER_ONLY=true ;; + esac +done + +if $SERVER_ONLY; then + echo "" + echo "===========================================" + echo " Bates Core -- SSH Server Setup" + echo "===========================================" + echo "" +else + echo "" + echo "===========================================" + echo " Bates Core -- Remote Access Setup" + echo "===========================================" + echo "" +fi # ------------------------------------------------------------------- # Step 1 -- Verify environment @@ -99,6 +119,19 @@ else warn "sshd is not managed by systemd. It may not survive a WSL restart." fi +# ------------------------------------------------------------------- +# Server-only mode: SSH server is configured, done. +# ------------------------------------------------------------------- +if $SERVER_ONLY; then + echo "" + success "SSH server configured and ready for client connections." + echo "" + info "To connect from your working machine:" + info " Run the Bates installer there and choose 'Client'." + echo "" + exit 0 +fi + # ------------------------------------------------------------------- # Step 3 -- Detect Tailscale hostnames # ------------------------------------------------------------------- diff --git a/bates-core/install.ps1 b/bates-core/install.ps1 index a49d2f8..24ecdbe 100644 --- a/bates-core/install.ps1 +++ b/bates-core/install.ps1 @@ -41,6 +41,39 @@ Write-Host " Bates AI Assistant -- Windows Setup" -ForegroundColor Cyan Write-Host "==========================================" -ForegroundColor Cyan Write-Host "" +# ============================================================ +# Role Selection (Server vs Client) +# ============================================================ +Write-Host "How will this machine be used?" -ForegroundColor White +Write-Host "" +Write-Host " 1) Server -- Run the AI assistant 24/7 on this machine" -ForegroundColor White +Write-Host " (installs WSL2, gateway, agents, plugins)" -ForegroundColor Gray +Write-Host "" +Write-Host " 2) Client -- Connect to a Bates server from this machine" -ForegroundColor White +Write-Host " (installs dashboard app + SSH/RDP shortcuts)" -ForegroundColor Gray +Write-Host "" + +$roleChoice = Read-Host "Selection [1]" +if ([string]::IsNullOrEmpty($roleChoice)) { $roleChoice = "1" } + +if ($roleChoice -eq "2") { + Write-Step "Client mode selected" + Write-Host "" + + # Run client setup script + $clientScript = Join-Path $InstallDir "core-client-setup.ps1" + if (Test-Path $clientScript) { + & $clientScript -InstallDir $InstallDir + } else { + Write-Fail "Client setup script not found: $clientScript" + Write-Host "Expected at: bates-core\core-client-setup.ps1" + } + exit $LASTEXITCODE +} + +Write-Step "Server mode selected" +Write-Host "" + # ============================================================ # Disclaimer acceptance # ============================================================ @@ -276,19 +309,20 @@ systemd=true if ($LASTEXITCODE -eq 0) { # ============================================================ - # Step 10: Set up Remote Access (SSH + RDP) + # Step 10: Set up SSH server (so clients can connect) # ============================================================ - Write-Step "Setting up remote access (SSH + RDP)..." + Write-Step "Configuring SSH server for remote access..." Write-Host "" - Write-Host "This will configure passwordless SSH and RDP shortcuts on your Desktop." -ForegroundColor Yellow + Write-Host "This configures SSH so client machines can connect to this server." -ForegroundColor Yellow + Write-Host "Desktop shortcuts are NOT created here (install on client machine instead)." -ForegroundColor Yellow Write-Host "" - wsl -d Ubuntu-24.04 -- bash "$wslTargetDir/core-remote-access.sh" + wsl -d Ubuntu-24.04 -- bash "$wslTargetDir/core-remote-access.sh" --server-only if ($LASTEXITCODE -eq 0) { - Write-Success "Remote access configured" + Write-Success "SSH server configured" } else { - Write-Warn "Remote access setup had issues. You can retry later with: bates-enhance.sh remote-access" + Write-Warn "SSH server setup had issues. You can retry later with: bates-enhance.sh remote-access" } } } else { @@ -314,6 +348,8 @@ Write-Host "==========================================" -ForegroundColor Green Write-Host "" Write-Host "Your AI assistant is running at: http://localhost:18789/dashboard" Write-Host "" +Write-Host "To connect from another machine, run the installer there and choose 'Client'." +Write-Host "" Write-Host "To add more integrations later, run in WSL2:" Write-Host " bates-enhance.sh" Write-Host "" diff --git a/bates-enhance/integrations/remote-access/setup.sh b/bates-enhance/integrations/remote-access/setup.sh index 8633d3d..17ffb3c 100644 --- a/bates-enhance/integrations/remote-access/setup.sh +++ b/bates-enhance/integrations/remote-access/setup.sh @@ -1,17 +1,25 @@ # setup.sh -- Remote Access integration for Bates # Sourced by bates-enhance.sh -- do NOT run directly. # -# Configures SSH and RDP access to the Bates server and creates -# connection shortcuts on the Windows desktop: -# 1. SSH into Windows host (PowerShell) -# 2. SSH into WSL (Linux shell) -# 3. RDP into Windows host (full desktop) +# On the SERVER: configures SSH server so clients can connect. +# On the CLIENT: also creates connection shortcuts on the Windows desktop. +# +# Flags: +# --server-only Configure SSH server only, skip desktop shortcuts # # Prerequisites: # - Tailscale installed on BOTH Windows and WSL (tailscale integration) # - Running inside WSL2 on the Bates server # - sudo access +# Parse flags +_RA_SERVER_ONLY=false +for _ra_arg in "$@"; do + case "$_ra_arg" in + --server-only) _RA_SERVER_ONLY=true ;; + esac +done + # ------------------------------------------------------------------- # Step 1 -- Verify environment # ------------------------------------------------------------------- @@ -100,6 +108,19 @@ else info "Add '/usr/sbin/sshd' to /etc/wsl.conf [boot] command to auto-start." fi +# ------------------------------------------------------------------- +# Server-only mode: SSH server is configured, done. +# ------------------------------------------------------------------- +if $_RA_SERVER_ONLY; then + echo "" + success "SSH server configured and ready for client connections." + echo "" + info "To connect from your working machine:" + info " Run the Bates installer there and choose 'Client'." + echo "" + return 0 2>/dev/null || exit 0 +fi + # ------------------------------------------------------------------- # Step 3 -- Detect Tailscale hostnames # ------------------------------------------------------------------- From 10601cc046bbdbb2b89668de18242321d6d24414 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 22:49:37 +0000 Subject: [PATCH 57/63] Add streamlined Microsoft OAuth onboarding with multi-tenant support - New oauth-signin.py: device code flow via /common endpoint, supports work/school and personal Microsoft accounts (Outlook.com, Hotmail, etc.) - Auto-detects account type and probes which Graph API features are available (email, calendar, Teams, OneDrive, Tasks) - Generates initial whitelist with user's own email address - Gateway updated to read tenant_id from token store (supports "common") - core-configure.sh now offers "Sign in with Microsoft" during install - core-setup.sh creates Python venv and copies gateway scripts - bates-enhance m365 setup.sh offers Quick (OAuth) vs Advanced (manual) mode - Verification checks M365 gateway when tokens are present Co-Authored-By: Claude Opus 4.6 --- bates-core/core-configure.sh | 58 +++ bates-core/core-setup.sh | 19 +- bates-core/core-verify.sh | 7 + bates-core/install.ps1 | 7 +- .../scripts-core/m365-gateway/gateway.py | 22 +- .../scripts-core/m365-gateway/oauth-signin.py | 366 ++++++++++++++++++ .../m365-gateway/requirements.txt | 1 + bates-enhance/integrations/m365/setup.sh | 101 ++++- 8 files changed, 575 insertions(+), 6 deletions(-) create mode 100644 bates-core/scripts-core/m365-gateway/oauth-signin.py diff --git a/bates-core/core-configure.sh b/bates-core/core-configure.sh index 0af1c56..011eceb 100755 --- a/bates-core/core-configure.sh +++ b/bates-core/core-configure.sh @@ -115,6 +115,64 @@ export USER_NAME read -rp "Your timezone [Europe/Lisbon]: " USER_TZ export USER_TZ="${USER_TZ:-Europe/Lisbon}" +# ============================================================ +# Microsoft 365 Sign-In (optional, recommended) +# ============================================================ +echo "" +echo "===========================================" +echo " Microsoft 365 — Sign in with Microsoft" +echo "===========================================" +echo "" +echo "Connect your Microsoft account to enable email, calendar, and OneDrive." +echo "Works with Microsoft 365 Business, Enterprise, Education, Family, Personal," +echo "and free Outlook.com accounts." +echo "" +echo "Some features (Teams) require a work or school account." +echo "" +read -rp "Set up Microsoft 365 integration now? (y/n) [y]: " M365_CHOICE +M365_CHOICE="${M365_CHOICE:-y}" + +M365_CONFIGURED=false +if [[ "$M365_CHOICE" =~ ^[Yy] ]]; then + # Ensure Python deps are available + pip3 install -q requests pyyaml 2>/dev/null || true + + M365_SIGNIN_SCRIPT="$SCRIPT_DIR/scripts-core/m365-gateway/oauth-signin.py" + if [[ -f "$M365_SIGNIN_SCRIPT" ]]; then + if python3 "$M365_SIGNIN_SCRIPT"; then + M365_CONFIGURED=true + + # Read account info for later use + M365_ACCOUNT_FILE="$HOME/.openclaw/m365-safety/account-info.json" + if [[ -f "$M365_ACCOUNT_FILE" ]]; then + M365_EMAIL=$(python3 -c "import json; print(json.load(open('$M365_ACCOUNT_FILE')).get('email',''))" 2>/dev/null || echo "") + M365_NAME=$(python3 -c "import json; print(json.load(open('$M365_ACCOUNT_FILE')).get('display_name',''))" 2>/dev/null || echo "") + M365_TYPE=$(python3 -c "import json; print(json.load(open('$M365_ACCOUNT_FILE')).get('account_type',''))" 2>/dev/null || echo "") + if [[ -n "$M365_EMAIL" ]]; then + export ASSISTANT_EMAIL="$M365_EMAIL" + success "Microsoft 365 connected: $M365_EMAIL ($M365_TYPE)" + fi + fi + + # Install and enable M365 safety gateway service + if [[ -f "$SCRIPT_DIR/scripts-core/m365-gateway/m365-safety-gateway.service" ]]; then + cp "$SCRIPT_DIR/scripts-core/m365-gateway/m365-safety-gateway.service" \ + "$HOME/.config/systemd/user/" + systemctl --user daemon-reload + systemctl --user enable m365-safety-gateway 2>/dev/null || true + info "M365 safety gateway service installed" + fi + else + warn "Microsoft sign-in failed or was cancelled. You can set it up later with: bates-enhance.sh m365" + fi + else + warn "Sign-in script not found. You can set up M365 later with: bates-enhance.sh m365" + fi +else + info "Skipped. You can set up Microsoft 365 later with: bates-enhance.sh m365" +fi +echo "" + # ============================================================ # Telegram Setup # ============================================================ diff --git a/bates-core/core-setup.sh b/bates-core/core-setup.sh index ec06819..09bd55f 100755 --- a/bates-core/core-setup.sh +++ b/bates-core/core-setup.sh @@ -119,9 +119,26 @@ fi # --- Directory structure --- step "Creating directory structure..." -mkdir -p "$HOME/.openclaw"/{workspace/{rules,refs,skills,observations},scripts,extensions,cron,agents/main/{sessions,archive},enhance} +mkdir -p "$HOME/.openclaw"/{workspace/{rules,refs,skills,observations},scripts,extensions,cron,agents/main/{sessions,archive},enhance,m365-safety} mkdir -p "$HOME/.config/systemd/user" +# --- Python virtual environment for M365 gateway --- +step "Setting up Python virtual environment..." +if [[ ! -d "$HOME/.openclaw/venv" ]]; then + python3 -m venv "$HOME/.openclaw/venv" +fi +"$HOME/.openclaw/venv/bin/pip" install -q requests aiohttp pyyaml 2>/dev/null || true +success "Python venv ready" + +# --- Copy M365 gateway scripts --- +if [[ -d "$SCRIPT_DIR/scripts-core/m365-gateway" ]]; then + mkdir -p "$HOME/.openclaw/scripts/m365-gateway" + cp "$SCRIPT_DIR/scripts-core/m365-gateway/"*.py "$HOME/.openclaw/scripts/m365-gateway/" 2>/dev/null || true + cp "$SCRIPT_DIR/scripts-core/m365-gateway/"*.yaml "$HOME/.openclaw/scripts/m365-gateway/" 2>/dev/null || true + cp "$SCRIPT_DIR/scripts-core/m365-gateway/"*.service "$HOME/.openclaw/scripts/m365-gateway/" 2>/dev/null || true + chmod +x "$HOME/.openclaw/scripts/m365-gateway/"*.py 2>/dev/null || true +fi + # --- Clock sync timer --- step "Installing clock-sync timer..." cp "$SCRIPT_DIR/systemd/clock-sync.service" "$HOME/.config/systemd/user/" diff --git a/bates-core/core-verify.sh b/bates-core/core-verify.sh index 9cb1218..3c63433 100755 --- a/bates-core/core-verify.sh +++ b/bates-core/core-verify.sh @@ -53,6 +53,13 @@ check "Workspace deployed" test -f "$HOME/.openclaw/workspace/SOUL.md" # Check Telegram channel check "Telegram channel configured" bash -c "python3 -c \"import json; c=json.load(open('$HOME/.openclaw/openclaw.json')); assert c['channels']['telegram']['enabled']\"" +# Check M365 (optional — only if tokens exist) +if [[ -f "$HOME/.openclaw/m365-safety/tokens.json" ]]; then + check "M365 tokens configured" test -s "$HOME/.openclaw/m365-safety/tokens.json" + check "M365 safety gateway service" systemctl --user is-enabled m365-safety-gateway 2>/dev/null + check "M365 account info" test -f "$HOME/.openclaw/m365-safety/account-info.json" +fi + echo "" echo "===========================================" echo " Results: $PASS passed, $FAIL failed" diff --git a/bates-core/install.ps1 b/bates-core/install.ps1 index 24ecdbe..387091c 100644 --- a/bates-core/install.ps1 +++ b/bates-core/install.ps1 @@ -294,7 +294,12 @@ systemd=true # ============================================================ # Step 8: Run Configuration (interactive) # ============================================================ - Write-Step "Starting AI configuration..." + Write-Step "Starting configuration..." + Write-Host "" + Write-Host "You will be asked to:" -ForegroundColor Yellow + Write-Host " 1. Choose your AI provider (Anthropic, OpenAI, etc.)" -ForegroundColor White + Write-Host " 2. Sign in with Microsoft (for email, calendar, Teams)" -ForegroundColor White + Write-Host " 3. Set up Telegram (messaging channel)" -ForegroundColor White Write-Host "" wsl -d Ubuntu-24.04 -- bash "$wslTargetDir/core-configure.sh" diff --git a/bates-core/scripts-core/m365-gateway/gateway.py b/bates-core/scripts-core/m365-gateway/gateway.py index 27fee35..8ded17d 100644 --- a/bates-core/scripts-core/m365-gateway/gateway.py +++ b/bates-core/scripts-core/m365-gateway/gateway.py @@ -60,6 +60,11 @@ def _load_tokens(self): with open(self.token_store) as f: data = json.load(f) self._refresh_token = data.get("refresh_token", "") + # Allow token store to override tenant_id (e.g., "common" for multi-tenant) + stored_tenant = data.get("tenant_id", "") + if stored_tenant: + self.tenant_id = stored_tenant + log.info(f"Using tenant from token store: {self.tenant_id}") if self._refresh_token: log.info("Loaded refresh token from gateway store") return @@ -439,12 +444,22 @@ async def handle_graph(self, request: web.Request) -> web.Response: async def handle_health(self, _request: web.Request) -> web.Response: has_token = bool(self.token_mgr._refresh_token) recipients = len(self.whitelist._get_email_recipients()) - return web.json_response({ + result = { "status": "ok", "has_token": has_token, + "tenant_id": self.token_mgr.tenant_id, "whitelist_recipients": recipients, "uptime_seconds": int(time.time() - self._start_time), - }) + } + # Include account info if available + account_info_path = str(Path.home() / ".openclaw" / "m365-safety" / "account-info.json") + if os.path.exists(account_info_path): + try: + with open(account_info_path) as f: + result["account"] = json.load(f) + except (json.JSONDecodeError, OSError): + pass + return web.json_response(result) async def handle_audit(self, request: web.Request) -> web.Response: limit = int(request.query.get("limit", "50")) @@ -499,7 +514,8 @@ def main(): parser = argparse.ArgumentParser(description="M365 Safety Gateway") parser.add_argument("--config", default=DEFAULT_CONFIG, help="Whitelist config path") parser.add_argument("--socket", default=DEFAULT_SOCKET, help="Unix socket path") - parser.add_argument("--tenant-id", default="a523f509-d02e-4799-a80f-b0661d9e01af") + parser.add_argument("--tenant-id", default="common", + help="Azure AD tenant ID or 'common' for multi-tenant") parser.add_argument("--client-id", default=DEFAULT_CLIENT_ID) args = parser.parse_args() diff --git a/bates-core/scripts-core/m365-gateway/oauth-signin.py b/bates-core/scripts-core/m365-gateway/oauth-signin.py new file mode 100644 index 0000000..0d18850 --- /dev/null +++ b/bates-core/scripts-core/m365-gateway/oauth-signin.py @@ -0,0 +1,366 @@ +#!/usr/bin/env python3 +"""Microsoft OAuth Sign-In — Device Code Flow with /common (multi-tenant + personal accounts). + +Handles the "Sign in with Microsoft" step during Bates installation. +Uses the /common endpoint to support: + - Microsoft 365 Business/Enterprise/Education (work/school accounts) + - Microsoft 365 Family/Personal and Outlook.com (personal accounts) + +After sign-in, detects account type and granted scopes, then stores tokens +for the M365 Safety Gateway. + +Usage: + python3 oauth-signin.py [--client-id ] [--output ] +""" + +import argparse +import json +import os +import sys +import time +from pathlib import Path + +try: + import requests +except ImportError: + print("Installing requests...") + import subprocess + subprocess.check_call([sys.executable, "-m", "pip", "install", "requests", "-q"]) + import requests + +# Azure AD app registration for Bates (multi-tenant + personal accounts) +# This app must be registered with "Accounts in any organizational directory +# and personal Microsoft accounts" and have the required delegated permissions. +DEFAULT_CLIENT_ID = "3b2534d6-597a-4d5a-918d-2ea9e4ea8425" + +# /common endpoint supports both work/school and personal Microsoft accounts +AUTHORITY = "https://login.microsoftonline.com/common" +TOKEN_ENDPOINT = f"{AUTHORITY}/oauth2/v2.0/token" +DEVICE_CODE_ENDPOINT = f"{AUTHORITY}/oauth2/v2.0/devicecode" + +# Scopes to request — covers all Bates functionality. +# Personal accounts may grant a subset; we detect what was granted after sign-in. +REQUESTED_SCOPES = [ + "offline_access", # Refresh token + "User.Read", # Basic profile (name, email) + "Mail.Read", # Read email + "Mail.Send", # Send email + "Calendars.ReadWrite", # Calendar access + "Contacts.Read", # Contacts + "Files.ReadWrite", # OneDrive + "Tasks.ReadWrite", # To Do tasks + # Teams scopes — work/school only, personal accounts will skip + "ChannelMessage.Send", # Teams channel messages + "Chat.ReadWrite", # Teams chat +] + +DEFAULT_TOKEN_STORE = str(Path.home() / ".openclaw" / "m365-safety" / "tokens.json") +ACCOUNT_INFO_STORE = str(Path.home() / ".openclaw" / "m365-safety" / "account-info.json") + + +def device_code_flow(client_id: str) -> dict: + """Run OAuth 2.0 device code flow. Returns token response.""" + + scope_str = " ".join(REQUESTED_SCOPES) + + # Step 1: Request device code + print("\n===========================================") + print(" Sign in with Microsoft") + print("===========================================\n") + + resp = requests.post(DEVICE_CODE_ENDPOINT, data={ + "client_id": client_id, + "scope": scope_str, + }) + resp.raise_for_status() + device_data = resp.json() + + if "error" in device_data: + print(f"Error: {device_data.get('error_description', device_data['error'])}") + sys.exit(1) + + user_code = device_data["user_code"] + verify_url = device_data["verification_uri"] + expires_in = device_data.get("expires_in", 900) + interval = device_data.get("interval", 5) + + print(f" To sign in, open a browser and go to:") + print(f" {verify_url}") + print() + print(f" Enter this code: {user_code}") + print() + print(f" Waiting for you to sign in (expires in {expires_in // 60} minutes)...") + print() + + # Try to open browser automatically + try: + if os.path.exists("/mnt/c/Windows"): + # WSL — open in Windows browser + os.system(f'cmd.exe /c start {verify_url} 2>/dev/null') + else: + import webbrowser + webbrowser.open(verify_url) + except Exception: + pass + + # Step 2: Poll for token + deadline = time.time() + expires_in + while time.time() < deadline: + time.sleep(interval) + + token_resp = requests.post(TOKEN_ENDPOINT, data={ + "client_id": client_id, + "device_code": device_data["device_code"], + "grant_type": "urn:ietf:params:oauth:grants:device_code", + }) + token_data = token_resp.json() + + if "access_token" in token_data: + print(" Sign-in successful!") + return token_data + + error = token_data.get("error", "") + if error == "authorization_pending": + continue + elif error == "slow_down": + interval += 5 + continue + elif error == "expired_token": + print("\n Sign-in expired. Please try again.") + sys.exit(1) + elif error == "authorization_declined": + print("\n Sign-in was declined.") + sys.exit(1) + else: + print(f"\n Error: {token_data.get('error_description', error)}") + sys.exit(1) + + print("\n Timed out waiting for sign-in.") + sys.exit(1) + + +def get_user_profile(access_token: str) -> dict: + """Fetch user profile from Graph API /me endpoint.""" + resp = requests.get( + "https://graph.microsoft.com/v1.0/me", + headers={"Authorization": f"Bearer {access_token}"}, + ) + if resp.status_code == 200: + return resp.json() + return {} + + +def detect_account_type(profile: dict, access_token: str) -> dict: + """Detect whether this is a personal or work/school account and what features are available.""" + + # Check account type from profile + # Personal accounts don't have userPrincipalName with org domain + upn = profile.get("userPrincipalName", "") + mail = profile.get("mail", "") or upn + display_name = profile.get("displayName", "") + + # Personal Microsoft accounts typically have UPN ending in @outlook.com, + # @hotmail.com, @live.com, etc., or have no onPremisesDomainName + personal_domains = ["outlook.com", "hotmail.com", "live.com", "msn.com"] + is_personal = any(upn.lower().endswith(f"@{d}") for d in personal_domains) + + # Also check: personal accounts return error for org-only endpoints + account_type = "personal" if is_personal else "work_school" + + # Test which features are actually available by probing endpoints + features = { + "email_read": False, + "email_send": False, + "calendar": False, + "contacts": False, + "onedrive": False, + "tasks": False, + "teams": False, + } + + headers = {"Authorization": f"Bearer {access_token}"} + + # Test email + r = requests.get("https://graph.microsoft.com/v1.0/me/mailFolders/inbox", headers=headers) + features["email_read"] = r.status_code == 200 + + # Test send capability (just check if we can access drafts) + features["email_send"] = features["email_read"] # If we can read, send scope was likely granted + + # Test calendar + r = requests.get("https://graph.microsoft.com/v1.0/me/calendar", headers=headers) + features["calendar"] = r.status_code == 200 + + # Test contacts + r = requests.get("https://graph.microsoft.com/v1.0/me/contacts?$top=1", headers=headers) + features["contacts"] = r.status_code == 200 + + # Test OneDrive + r = requests.get("https://graph.microsoft.com/v1.0/me/drive", headers=headers) + features["onedrive"] = r.status_code == 200 + + # Test To Do tasks + r = requests.get("https://graph.microsoft.com/v1.0/me/todo/lists", headers=headers) + features["tasks"] = r.status_code == 200 + + # Test Teams (work/school only) + r = requests.get("https://graph.microsoft.com/v1.0/me/joinedTeams", headers=headers) + features["teams"] = r.status_code == 200 + + return { + "account_type": account_type, + "display_name": display_name, + "email": mail, + "upn": upn, + "features": features, + } + + +def save_tokens(token_data: dict, output_path: str, tenant_id: str = "common"): + """Save tokens in the format expected by the M365 Safety Gateway.""" + os.makedirs(os.path.dirname(output_path), exist_ok=True) + + store = { + "refresh_token": token_data.get("refresh_token", ""), + "tenant_id": tenant_id, + "updated_at": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), + "source": "oauth-signin", + } + with open(output_path, "w") as f: + json.dump(store, f, indent=2) + os.chmod(output_path, 0o600) + + +def save_account_info(account_info: dict, output_path: str): + """Save account info for feature detection.""" + os.makedirs(os.path.dirname(output_path), exist_ok=True) + account_info["detected_at"] = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()) + with open(output_path, "w") as f: + json.dump(account_info, f, indent=2) + os.chmod(output_path, 0o600) + + +def main(): + parser = argparse.ArgumentParser(description="Sign in with Microsoft for Bates") + parser.add_argument("--client-id", default=DEFAULT_CLIENT_ID, + help="Azure AD app client ID") + parser.add_argument("--output", default=DEFAULT_TOKEN_STORE, + help="Token output path") + parser.add_argument("--json", action="store_true", + help="Output results as JSON to stdout") + args = parser.parse_args() + + # Run device code flow + token_data = device_code_flow(args.client_id) + + # Save tokens + save_tokens(token_data, args.output) + print(f"\n Tokens saved to: {args.output}") + + # Get user profile + print(" Detecting account type and features...") + profile = get_user_profile(token_data["access_token"]) + account_info = detect_account_type(profile, token_data["access_token"]) + + # Save account info + save_account_info(account_info, ACCOUNT_INFO_STORE) + + # Display results + print() + print("===========================================") + print(" Microsoft Account Connected!") + print("===========================================") + print() + print(f" Name: {account_info['display_name']}") + print(f" Email: {account_info['email']}") + print(f" Type: {'Personal' if account_info['account_type'] == 'personal' else 'Work/School'}") + print() + print(" Available features:") + + feature_names = { + "email_read": "Email (read)", + "email_send": "Email (send)", + "calendar": "Calendar", + "contacts": "Contacts", + "onedrive": "OneDrive", + "tasks": "To Do Tasks", + "teams": "Microsoft Teams", + } + for key, name in feature_names.items(): + status = account_info["features"].get(key, False) + icon = "[x]" if status else "[ ]" + suffix = "" + if key == "teams" and not status: + suffix = " (requires work/school account)" + print(f" {icon} {name}{suffix}") + + print() + + # Set initial whitelist to user's own email + email = account_info.get("email", "") + if email: + whitelist_path = os.path.dirname(args.output) + "/whitelist.yaml" + if not os.path.exists(whitelist_path): + whitelist_content = f"""# M365 Safety Gateway — Email Whitelist +# Auto-generated during sign-in. Only these recipients can receive emails from Bates. +# Edit this file to add more approved recipients. +# IMPORTANT: Bates cannot modify this file. + +email: + send: + allowed_recipients: + - "{email}" + allowed_senders: + - "{email}" + +calendar: + create_event: + allowed: true + max_attendees: 0 + + update_event: + allowed: true + attendee_modification: false + +teams: + send_channel_message: + allowed: {'true' if account_info['features']['teams'] else 'false'} + send_chat_message: + allowed: false + +onedrive: + write: true + share: false + delete: false + +planner: + write: true + +graph_api: + default_write_policy: block +""" + os.makedirs(os.path.dirname(whitelist_path), exist_ok=True) + with open(whitelist_path, "w") as f: + f.write(whitelist_content) + os.chmod(whitelist_path, 0o600) + print(f" Initial whitelist set to: {email}") + print(f" Saved to: {whitelist_path}") + print() + + # JSON output for scripting + if args.json: + result = { + "success": True, + "email": account_info["email"], + "display_name": account_info["display_name"], + "account_type": account_info["account_type"], + "features": account_info["features"], + "token_path": args.output, + } + print(json.dumps(result)) + + return 0 + + +if __name__ == "__main__": + sys.exit(main() or 0) diff --git a/bates-core/scripts-core/m365-gateway/requirements.txt b/bates-core/scripts-core/m365-gateway/requirements.txt index 3728c89..a144553 100644 --- a/bates-core/scripts-core/m365-gateway/requirements.txt +++ b/bates-core/scripts-core/m365-gateway/requirements.txt @@ -1,2 +1,3 @@ aiohttp>=3.9,<4 pyyaml>=6.0,<7 +requests>=2.31,<3 diff --git a/bates-enhance/integrations/m365/setup.sh b/bates-enhance/integrations/m365/setup.sh index 1221835..59c716f 100644 --- a/bates-enhance/integrations/m365/setup.sh +++ b/bates-enhance/integrations/m365/setup.sh @@ -40,7 +40,106 @@ _step() { # _step N "Title" } # ========================================================================= -# Step 1 — Collect account info +# Quick Setup vs Advanced Setup +# ========================================================================= +echo "" +echo "Choose setup mode:" +echo " 1) Quick — Sign in with Microsoft (recommended)" +echo " One-click OAuth, auto-detects account type and features" +echo "" +echo " 2) Advanced — Manual app registration" +echo " Create 3 separate Entra apps with specific permissions" +echo "" +read -rp "Selection [1]: " _M365_MODE +_M365_MODE="${_M365_MODE:-1}" + +if [[ "$_M365_MODE" == "1" ]]; then + # ---- Quick mode: use oauth-signin.py ---- + _step 1 "Sign in with Microsoft" + + SIGNIN_SCRIPT="$(dirname "$M365_DIR")/../../bates-core/scripts-core/m365-gateway/oauth-signin.py" + if [[ ! -f "$SIGNIN_SCRIPT" ]]; then + # Also check installed location + SIGNIN_SCRIPT="$HOME/.openclaw/scripts/m365-gateway/oauth-signin.py" + fi + + if [[ -f "$SIGNIN_SCRIPT" ]]; then + pip3 install -q requests pyyaml 2>/dev/null || true + if python3 "$SIGNIN_SCRIPT"; then + # Read results + ACCOUNT_FILE="$HOME/.openclaw/m365-safety/account-info.json" + if [[ -f "$ACCOUNT_FILE" ]]; then + ASSISTANT_EMAIL=$(python3 -c "import json; print(json.load(open('$ACCOUNT_FILE')).get('email',''))" 2>/dev/null || echo "") + M365_TYPE=$(python3 -c "import json; print(json.load(open('$ACCOUNT_FILE')).get('account_type',''))" 2>/dev/null || echo "") + export ASSISTANT_EMAIL + fi + else + echo "Sign-in failed. Falling back to advanced setup." + _M365_MODE="2" + fi + else + echo "Sign-in script not found. Falling back to advanced setup." + _M365_MODE="2" + fi + + if [[ "$_M365_MODE" == "1" ]]; then + # Skip steps 2-5 in quick mode — go straight to deploy + _step 2 "Deploy configuration and workspace additions" + + echo "Merging M365 config fragment into openclaw.json..." + _m365_fragment=$(sed \ + -e "s|{{ASSISTANT_EMAIL}}|${ASSISTANT_EMAIL}|g" \ + "$M365_DIR/config-fragment.json") + config_merge_inline "$_m365_fragment" + echo " Config merged." + + # Copy workspace additions + if [[ -d "$M365_DIR/workspace-additions" ]]; then + echo "Copying workspace additions..." + cp -r "$M365_DIR/workspace-additions/refs/"* "${WORKSPACE_DIR:-$HOME/.openclaw/workspace}/refs/" 2>/dev/null || true + cp -r "$M365_DIR/workspace-additions/rules/"* "${WORKSPACE_DIR:-$HOME/.openclaw/workspace}/rules/" 2>/dev/null || true + cp -r "$M365_DIR/workspace-additions/skills/"* "${WORKSPACE_DIR:-$HOME/.openclaw/workspace}/skills/" 2>/dev/null || true + echo " Workspace files deployed." + fi + + # Copy scripts + if [[ -d "$M365_DIR/scripts" ]]; then + echo "Installing helper scripts..." + cp "$M365_DIR/scripts/"*.sh "${SCRIPTS_DIR:-$HOME/.openclaw/scripts}/" 2>/dev/null || true + chmod +x "${SCRIPTS_DIR:-$HOME/.openclaw/scripts}/"*.sh 2>/dev/null || true + echo " Scripts installed." + fi + + # Install gateway service + GATEWAY_SERVICE="$(dirname "$M365_DIR")/../../bates-core/scripts-core/m365-gateway/m365-safety-gateway.service" + if [[ ! -f "$GATEWAY_SERVICE" ]]; then + GATEWAY_SERVICE="$HOME/.openclaw/scripts/m365-gateway/m365-safety-gateway.service" + fi + if [[ -f "$GATEWAY_SERVICE" ]]; then + cp "$GATEWAY_SERVICE" "$HOME/.config/systemd/user/" + systemctl --user daemon-reload + systemctl --user enable --now m365-safety-gateway 2>/dev/null || true + echo " M365 safety gateway started." + fi + + echo "" + echo "======================================================================" + echo " M365 integration setup complete! (Quick mode)" + echo "======================================================================" + echo "" + echo " Account: $ASSISTANT_EMAIL ($M365_TYPE)" + echo " Gateway: systemctl --user status m365-safety-gateway" + echo "" + echo "Next steps:" + echo " 1. Restart the gateway: systemctl --user restart openclaw-gateway" + echo " 2. Test: graph-api-safe.sh GET /me" + echo "" + return 0 + fi +fi + +# ========================================================================= +# Advanced Setup — Step 1: Collect account info # ========================================================================= _step 1 "Collect account information" From 13e54221277ad84f8bcf1d003c9af3a91557191d Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 22:57:11 +0000 Subject: [PATCH 58/63] Add PostHog analytics and update Azure AD docs for multi-tenant Analytics: - New analytics.py module with opt-in PostHog tracking - Events captured by gateway on actual Graph API calls (not agent self-reporting) - Tracks: email sent/blocked, calendar created, API calls by category, errors - Silent no-op when disabled; local queue fallback when PostHog unavailable - Opt-in prompt added to core-configure.sh installer flow Azure AD: - Updated manual-steps-m365.md for multi-tenant + personal accounts - Single app registration with delegated permissions (Quick setup) - "Accounts in any organizational directory and personal Microsoft accounts" - Public client flows enabled for device code flow - Feature availability table by account type - Kept Advanced (3-app) setup as alternative for organizations Co-Authored-By: Claude Opus 4.6 --- bates-core/core-configure.sh | 34 +++ .../scripts-core/m365-gateway/analytics.py | 271 +++++++++++++++++ .../scripts-core/m365-gateway/gateway.py | 29 ++ .../m365-gateway/requirements.txt | 1 + bates-enhance/docs/manual-steps-m365.md | 277 +++++++----------- 5 files changed, 444 insertions(+), 168 deletions(-) create mode 100644 bates-core/scripts-core/m365-gateway/analytics.py diff --git a/bates-core/core-configure.sh b/bates-core/core-configure.sh index 011eceb..a4ec441 100755 --- a/bates-core/core-configure.sh +++ b/bates-core/core-configure.sh @@ -173,6 +173,40 @@ else fi echo "" +# ============================================================ +# Anonymous Analytics (opt-in) +# ============================================================ +echo "" +echo "===========================================" +echo " Anonymous Usage Analytics (Optional)" +echo "===========================================" +echo "" +echo "Help improve Bates by sharing anonymous usage analytics." +echo "Only event counts (emails sent, calendar events created, etc.)." +echo "No content, recipients, subjects, or personal data is ever shared." +echo "You can change this anytime in Settings." +echo "" +read -rp "Enable anonymous analytics? (y/n) [n]: " ANALYTICS_CHOICE +ANALYTICS_CHOICE="${ANALYTICS_CHOICE:-n}" + +M365_ACCT_TYPE="${M365_TYPE:-unknown}" +if [[ "$ANALYTICS_CHOICE" =~ ^[Yy] ]]; then + python3 -c " +import sys; sys.path.insert(0, '$SCRIPT_DIR/scripts-core/m365-gateway') +from analytics import Analytics +Analytics.setup(enabled=True, bates_version='2.0.0', account_type='$M365_ACCT_TYPE') +print(' Analytics enabled.') +" 2>/dev/null || warn "Could not configure analytics" +else + python3 -c " +import sys; sys.path.insert(0, '$SCRIPT_DIR/scripts-core/m365-gateway') +from analytics import Analytics +Analytics.setup(enabled=False, bates_version='2.0.0', account_type='$M365_ACCT_TYPE') +" 2>/dev/null || true + info "Analytics disabled." +fi +echo "" + # ============================================================ # Telegram Setup # ============================================================ diff --git a/bates-core/scripts-core/m365-gateway/analytics.py b/bates-core/scripts-core/m365-gateway/analytics.py new file mode 100644 index 0000000..c7968c0 --- /dev/null +++ b/bates-core/scripts-core/m365-gateway/analytics.py @@ -0,0 +1,271 @@ +"""PostHog Analytics Module for M365 Safety Gateway. + +Opt-in anonymous usage analytics. Only event counts are tracked — no content, +no recipients, no subjects, no PII is ever sent. + +Events are captured by the gateway based on actual Graph API calls it processes, +not by trusting the agent's self-reporting. + +Usage: + from analytics import Analytics + + analytics = Analytics(config_path="~/.openclaw/m365-safety/analytics.json") + analytics.track("email_sent", {"sub_agent": "bates"}) +""" + +import json +import logging +import os +import platform +import time +import uuid +from pathlib import Path +from threading import Thread + +log = logging.getLogger("m365-gateway.analytics") + +# PostHog project API key (public tracking key, safe to include in source code) +POSTHOG_API_KEY = "phc_bates_placeholder_key" +POSTHOG_HOST = "https://app.posthog.com" + +ANALYTICS_CONFIG = str(Path.home() / ".openclaw" / "m365-safety" / "analytics.json") + + +class Analytics: + """Opt-in PostHog analytics with silent no-op when disabled.""" + + def __init__(self, config_path: str = ANALYTICS_CONFIG): + self.config_path = config_path + self._enabled = False + self._distinct_id = "" + self._posthog = None + self._bates_version = "unknown" + self._account_type = "unknown" + self._session_start = time.time() + self._load_config() + + def _load_config(self): + """Load analytics opt-in preference and distinct_id.""" + if not os.path.exists(self.config_path): + # No config = not opted in yet + self._enabled = False + return + + try: + with open(self.config_path) as f: + config = json.load(f) + self._enabled = config.get("enabled", False) + self._distinct_id = config.get("distinct_id", "") + self._bates_version = config.get("bates_version", "unknown") + self._account_type = config.get("account_type", "unknown") + + if self._enabled and not self._distinct_id: + # Generate anonymous ID if missing + self._distinct_id = str(uuid.uuid4()) + self._save_config() + + if self._enabled: + self._init_posthog() + log.info("Analytics enabled (anonymous, opt-in)") + else: + log.info("Analytics disabled (user opted out)") + except (json.JSONDecodeError, OSError) as e: + log.warning(f"Could not load analytics config: {e}") + self._enabled = False + + def _save_config(self): + """Persist analytics config.""" + os.makedirs(os.path.dirname(self.config_path), exist_ok=True) + config = { + "enabled": self._enabled, + "distinct_id": self._distinct_id, + "bates_version": self._bates_version, + "account_type": self._account_type, + "updated_at": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), + } + with open(self.config_path, "w") as f: + json.dump(config, f, indent=2) + + def _init_posthog(self): + """Initialize PostHog client.""" + try: + import posthog + posthog.project_api_key = POSTHOG_API_KEY + posthog.host = POSTHOG_HOST + posthog.debug = False + posthog.on_error = lambda e, items: log.debug(f"PostHog error: {e}") + self._posthog = posthog + except ImportError: + log.warning("posthog package not installed — analytics will be queued locally") + self._posthog = None + + @staticmethod + def prompt_opt_in() -> bool: + """Interactive opt-in prompt for first run. Returns True if user opts in.""" + print() + print("===========================================") + print(" Anonymous Usage Analytics (Optional)") + print("===========================================") + print() + print(" Share anonymous usage analytics to help improve Bates?") + print() + print(" What IS tracked (event counts only):") + print(" - Emails sent/read (count only)") + print(" - Calendar events created (count only)") + print(" - Feature usage frequency") + print(" - Error rates") + print() + print(" What is NEVER tracked:") + print(" - Email content, recipients, or subjects") + print(" - Calendar details or attendee names") + print(" - File contents or names") + print(" - Any personally identifiable information") + print() + print(" You can change this anytime in Settings.") + print() + reply = input(" Enable anonymous analytics? [y/N]: ").strip().lower() + return reply in ("y", "yes") + + @classmethod + def setup(cls, enabled: bool, bates_version: str = "unknown", + account_type: str = "unknown") -> "Analytics": + """Set up analytics config (called during installation).""" + config_path = ANALYTICS_CONFIG + distinct_id = str(uuid.uuid4()) if enabled else "" + + os.makedirs(os.path.dirname(config_path), exist_ok=True) + config = { + "enabled": enabled, + "distinct_id": distinct_id, + "bates_version": bates_version, + "account_type": account_type, + "created_at": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), + "updated_at": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), + } + with open(config_path, "w") as f: + json.dump(config, f, indent=2) + os.chmod(config_path, 0o600) + + return cls(config_path) + + def track(self, event: str, properties: dict = None): + """Track an event. Silent no-op if analytics is disabled.""" + if not self._enabled: + return + + props = properties.copy() if properties else {} + # Add default properties (never PII) + props["bates_version"] = self._bates_version + props["account_type"] = self._account_type + props["os_version"] = platform.platform() + + if self._posthog: + try: + self._posthog.capture( + distinct_id=self._distinct_id, + event=event, + properties=props, + ) + except Exception as e: + log.debug(f"Analytics track error: {e}") + else: + # Fallback: log locally for later batch send + self._log_locally(event, props) + + def _log_locally(self, event: str, properties: dict): + """Log event locally when PostHog client is not available.""" + log_path = str(Path.home() / ".openclaw" / "m365-safety" / "analytics-queue.jsonl") + try: + entry = { + "event": event, + "distinct_id": self._distinct_id, + "properties": properties, + "timestamp": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), + } + with open(log_path, "a") as f: + f.write(json.dumps(entry) + "\n") + except OSError: + pass + + def track_session_start(self): + """Track session start event.""" + self._session_start = time.time() + self.track("bates_session_start", { + "os_version": platform.platform(), + }) + + def track_session_end(self): + """Track session end event.""" + duration = int(time.time() - self._session_start) + self.track("bates_session_end", { + "session_duration_seconds": duration, + }) + + def track_graph_call(self, method: str, endpoint: str, allowed: bool, + reason: str = "", source: str = "unknown"): + """Track a Graph API call based on the endpoint category. + + This is the main entry point — called by the gateway for every request. + Categorizes the endpoint and emits the appropriate event. + """ + if not self._enabled: + return + + ep = endpoint.lower() + + # Categorize by endpoint + if "/sendmail" in ep or "/send" in ep: + if allowed: + self.track("email_sent", {"sub_agent": source}) + else: + self.track("email_send_blocked", {"sub_agent": source, "reason": reason}) + + elif "/messages" in ep and method == "GET": + self.track("email_read", {"count": 1}) + + elif "/events" in ep and method == "POST": + self.track("calendar_event_created", {"sub_agent": source}) + + elif "/events" in ep and method == "GET": + self.track("calendar_event_read", {"count": 1}) + + elif "/drive/" in ep: + self.track("m365_api_call", {"endpoint_category": "onedrive", "success": allowed}) + + elif "/teams/" in ep or "/channels/" in ep or "/chats/" in ep: + self.track("m365_api_call", {"endpoint_category": "teams", "success": allowed}) + + elif "/planner/" in ep: + self.track("m365_api_call", {"endpoint_category": "planner", "success": allowed}) + + elif "/todo/" in ep: + self.track("m365_api_call", {"endpoint_category": "todo", "success": allowed}) + + else: + self.track("m365_api_call", { + "endpoint_category": "other", + "success": allowed, + }) + + def track_error(self, error_type: str, sub_agent: str = "unknown"): + """Track an error event.""" + self.track("error_occurred", { + "error_type": error_type, + "sub_agent": sub_agent, + }) + + def shutdown(self): + """Flush and shut down analytics.""" + if self._posthog: + try: + self._posthog.shutdown() + except Exception: + pass + + @property + def enabled(self) -> bool: + return self._enabled + + @property + def distinct_id(self) -> str: + return self._distinct_id diff --git a/bates-core/scripts-core/m365-gateway/gateway.py b/bates-core/scripts-core/m365-gateway/gateway.py index 8ded17d..5900b25 100644 --- a/bates-core/scripts-core/m365-gateway/gateway.py +++ b/bates-core/scripts-core/m365-gateway/gateway.py @@ -29,6 +29,12 @@ logging.basicConfig(level=logging.INFO, format=LOG_FORMAT, datefmt="%H:%M:%S") log = logging.getLogger("m365-gateway") +# Import analytics (opt-in, silent no-op if disabled) +try: + from analytics import Analytics +except ImportError: + Analytics = None + DEFAULT_SOCKET = f"/run/user/{os.getuid()}/m365-safety.sock" DEFAULT_CONFIG = str(Path.home() / ".openclaw" / "m365-safety" / "whitelist.yaml") AUDIT_LOG = str(Path.home() / ".openclaw" / "m365-safety" / "audit.jsonl") @@ -359,6 +365,7 @@ def __init__(self, config_path: str, socket_path: str, tenant_id: str, client_id self.token_mgr = TokenManager(TOKEN_STORE, tenant_id, client_id) self.whitelist = WhitelistEnforcer(config_path) self.audit = AuditLogger(AUDIT_LOG) + self.analytics = Analytics() if Analytics else None self._client: ClientSession | None = None async def _get_client(self) -> ClientSession: @@ -401,6 +408,10 @@ async def handle_graph(self, request: web.Request) -> web.Response: self.audit.record(method, endpoint, allowed, reason, source, len(body_bytes)) + # Track analytics (opt-in, silent no-op if disabled) + if self.analytics: + self.analytics.track_graph_call(method, endpoint, allowed, reason, source) + if not allowed: return web.json_response( {"status": "blocked", "reason": reason}, @@ -411,6 +422,8 @@ async def handle_graph(self, request: web.Request) -> web.Response: try: token = await self.token_mgr.get_access_token() except RuntimeError as e: + if self.analytics: + self.analytics.track_error("token_error", source) return web.json_response( {"status": "error", "error": f"Token error: {e}"}, status=502, @@ -474,6 +487,14 @@ async def handle_whitelist_reload(self, _request: web.Request) -> web.Response: "email_recipients": recipients, }) + async def handle_analytics_status(self, _request: web.Request) -> web.Response: + if self.analytics: + return web.json_response({ + "enabled": self.analytics.enabled, + "distinct_id": self.analytics.distinct_id[:8] + "..." if self.analytics.distinct_id else "", + }) + return web.json_response({"enabled": False, "reason": "analytics module not loaded"}) + async def start(self): self._start_time = time.time() @@ -488,6 +509,7 @@ async def start(self): app.router.add_get("/health", self.handle_health) app.router.add_get("/audit/recent", self.handle_audit) app.router.add_post("/whitelist/reload", self.handle_whitelist_reload) + app.router.add_get("/analytics/status", self.handle_analytics_status) runner = web.AppRunner(app) await runner.setup() @@ -500,10 +522,17 @@ async def start(self): log.info(f"M365 Safety Gateway listening on {self.socket_path}") log.info(f"Whitelisted email recipients: {sorted(self.whitelist._get_email_recipients())}") + # Track session start + if self.analytics: + self.analytics.track_session_start() + # Run forever try: await asyncio.Event().wait() finally: + if self.analytics: + self.analytics.track_session_end() + self.analytics.shutdown() self.audit.close() if self._client and not self._client.closed: await self._client.close() diff --git a/bates-core/scripts-core/m365-gateway/requirements.txt b/bates-core/scripts-core/m365-gateway/requirements.txt index a144553..777a263 100644 --- a/bates-core/scripts-core/m365-gateway/requirements.txt +++ b/bates-core/scripts-core/m365-gateway/requirements.txt @@ -1,3 +1,4 @@ aiohttp>=3.9,<4 pyyaml>=6.0,<7 requests>=2.31,<3 +posthog>=3.5,<4 diff --git a/bates-enhance/docs/manual-steps-m365.md b/bates-enhance/docs/manual-steps-m365.md index 616558a..25a97b4 100644 --- a/bates-enhance/docs/manual-steps-m365.md +++ b/bates-enhance/docs/manual-steps-m365.md @@ -1,154 +1,121 @@ # Microsoft 365 Integration Setup -This guide walks through setting up the three Entra (Azure AD) app registrations required for Bates to interact with Microsoft 365 services: reading mail/calendars, accessing company-wide resources, and sending mail on behalf of the assistant. +Bates works with **Microsoft 365 Business, Enterprise, Education, Family, Personal, and free Outlook.com accounts**. Some features (Teams integration) require a work or school account. --- -## Prerequisites +## Quick Setup (Recommended) -- A Microsoft 365 tenant with admin access (or access to request admin consent) -- Access to the [Microsoft Entra admin center](https://entra.microsoft.com) -- The OpenClaw gateway installed and running +The fastest way to connect Microsoft 365 is during installation or via `bates-enhance.sh m365`: ---- +1. Select **Quick** mode when prompted +2. A browser opens — sign in with your Microsoft account +3. Enter the code shown in the terminal +4. Done! Bates auto-detects your account type and available features -## Overview of App Registrations +This uses the OAuth device code flow with the `/common` endpoint, supporting both organizational and personal Microsoft accounts. -| App Name | Purpose | Permission Type | -|---|---|---| -| `bates-reader` | Read user mail, calendars, contacts | Delegated | -| `bates-company-reader` | Read organization-wide resources (shared mailboxes, directory) | Application | -| `bates-assistant` | Send mail, manage calendar events, write to mailboxes | Application | +**To reconfigure later:** Run `bates-enhance.sh m365` again and choose Quick mode. --- -## Step 1: Create the Reader App Registration +## Azure AD App Registration (Required Once) + +Whether you use Quick or Advanced setup, Bates needs an Azure AD (Microsoft Entra ID) app registration. This section covers the **one-time setup** in the Azure portal. -The reader app uses **delegated permissions** so it acts on behalf of the signed-in user. +### Create the App Registration -1. Go to **Entra admin center** > **App registrations** > **New registration**. -2. Name: `bates-reader` -3. Supported account types: **Accounts in this organizational directory only** (single tenant). -4. Redirect URI: Select **Web** and enter your gateway callback URL (e.g., `https://localhost:18789/auth/callback`). +1. Go to **[Microsoft Entra admin center](https://entra.microsoft.com)** > **App registrations** > **New registration**. +2. Name: `bates-assistant` +3. **Supported account types**: Select **"Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)"** +4. Redirect URI: Select **Public client/native (mobile & desktop)** and enter: `https://login.microsoftonline.com/common/oauth2/nativeclient` 5. Click **Register**. -### Configure API Permissions (Reader) +> **Important:** The multi-tenant + personal accounts setting is required for Bates to work with all Microsoft account types. + +### Configure API Permissions Navigate to **API permissions** > **Add a permission** > **Microsoft Graph** > **Delegated permissions**. Add the following: -| Permission | Description | -|---|---| -| `Mail.Read` | Read user mail | -| `Mail.ReadBasic` | Read basic mail properties | -| `Calendars.Read` | Read user calendars | -| `Calendars.Read.Shared` | Read shared calendars | -| `Contacts.Read` | Read user contacts | -| `User.Read` | Sign in and read user profile | -| `offline_access` | Maintain access to data (refresh tokens) | - -### Create a Client Secret - -1. Go to **Certificates & secrets** > **New client secret**. -2. Description: `bates-reader-secret` -3. Expiry: Choose 12 or 24 months. -4. Copy the **Value** immediately (it will not be shown again). - -### Record These Values - -- **Application (client) ID** -- **Directory (tenant) ID** -- **Client secret value** - ---- - -## Step 2: Create the Company Reader App Registration - -The company reader uses **application permissions** to access organization-wide data without a signed-in user. - -1. Go to **App registrations** > **New registration**. -2. Name: `bates-company-reader` -3. Supported account types: **Single tenant**. -4. No redirect URI needed. -5. Click **Register**. - -### Configure API Permissions (Company Reader) - -Navigate to **API permissions** > **Add a permission** > **Microsoft Graph** > **Application permissions**. +| Permission | Description | Account Types | +|---|---|---| +| `User.Read` | Sign in and read user profile | All | +| `Mail.Read` | Read user mail | All | +| `Mail.Send` | Send mail on behalf of user | All | +| `Mail.ReadWrite` | Read and write user mail | All | +| `Calendars.ReadWrite` | Read and write user calendars | All | +| `Contacts.Read` | Read user contacts | All | +| `Files.ReadWrite` | Read and write user files (OneDrive) | All | +| `Tasks.ReadWrite` | Read and write user tasks (To Do) | All | +| `ChannelMessage.Send` | Send channel messages in Teams | Work/School only | +| `Chat.ReadWrite` | Read and write chat messages | Work/School only | +| `offline_access` | Maintain access (refresh tokens) | All | -Add the following: +> **Note:** Personal Microsoft accounts will silently skip permissions they don't support (like Teams). Bates detects this automatically after sign-in. -| Permission | Description | -|---|---| -| `Mail.Read` | Read mail in all mailboxes | -| `Calendars.Read` | Read calendars in all mailboxes | -| `User.Read.All` | Read all users' full profiles | -| `Group.Read.All` | Read all groups | -| `Directory.Read.All` | Read directory data | -| `MailboxSettings.Read` | Read all users' mailbox settings | +### Enable Public Client Flows -### Grant Admin Consent +1. Go to **Authentication** > scroll to **Advanced settings**. +2. Set **"Allow public client flows"** to **Yes**. +3. Click **Save**. -Click the **Grant admin consent for [Your Tenant]** button. This is required because application permissions need admin approval. +This is required for the device code flow used during installation. -> **Warning:** Application permissions grant broad access. Only grant what is strictly needed and review periodically. +### Record the Client ID -### Create a Client Secret +Go to **Overview** and copy the **Application (client) ID**. This is the only value needed — no client secret is required for the delegated flow. -Follow the same steps as the reader app. Record the client ID, tenant ID, and secret. +The default Bates client ID is pre-configured. If you create your own app registration, update it in: +- `bates-core/scripts-core/m365-gateway/oauth-signin.py` (line: `DEFAULT_CLIENT_ID`) +- `bates-core/scripts-core/m365-gateway/gateway.py` (line: `DEFAULT_CLIENT_ID`) --- -## Step 3: Create the Assistant App Registration - -The assistant app uses **application permissions** and is the most privileged registration. It can send mail, create events, and modify mailbox contents. +## Advanced Setup (3 Separate Apps) -1. Go to **App registrations** > **New registration**. -2. Name: `bates-assistant` -3. Supported account types: **Single tenant**. -4. No redirect URI needed. -5. Click **Register**. +For organizations that want stricter separation of read/write permissions, you can create three separate app registrations: -### Configure API Permissions (Assistant) +### App 1: Reader (Delegated, Read-Only) -Navigate to **API permissions** > **Add a permission** > **Microsoft Graph** > **Application permissions**. +| Setting | Value | +|---|---| +| Name | `bates-reader` | +| Account types | Multi-tenant + personal (or single tenant if preferred) | +| Permissions | `Mail.Read`, `Calendars.Read`, `Contacts.Read`, `User.Read`, `offline_access` | +| Permission type | Delegated | -Add the following: +### App 2: Company Reader (Application, Read-Only) -| Permission | Description | +| Setting | Value | |---|---| -| `Mail.ReadWrite` | Read and write mail in all mailboxes | -| `Mail.Send` | Send mail as any user | -| `Calendars.ReadWrite` | Read and write calendars in all mailboxes | -| `Contacts.ReadWrite` | Read and write contacts in all mailboxes | -| `User.Read.All` | Read all users' full profiles | -| `Files.ReadWrite.All` | Read and write all files (OneDrive/SharePoint) | +| Name | `bates-company-reader` | +| Account types | Single tenant (organization only) | +| Permissions | `Mail.Read`, `Calendars.Read`, `User.Read.All`, `Group.Read.All`, `Directory.Read.All` | +| Permission type | Application (requires admin consent) | -### Grant Admin Consent +### App 3: Assistant (Application, Read-Write) -Click **Grant admin consent for [Your Tenant]**. +| Setting | Value | +|---|---| +| Name | `bates-assistant` | +| Account types | Single tenant (organization only) | +| Permissions | `Mail.ReadWrite`, `Mail.Send`, `Calendars.ReadWrite`, `Contacts.ReadWrite`, `User.Read.All`, `Files.ReadWrite.All` | +| Permission type | Application (requires admin consent) | -### Create a Client Secret +For each app: +1. Create a **client secret** (Certificates & secrets > New client secret) +2. Copy the **Value** immediately +3. Record: Client ID, Tenant ID, Client Secret -Follow the same steps as above. Record all three values. +Then run `bates-enhance.sh m365` and choose **Advanced** mode to enter the credentials. --- -## Step 4: Restrict the Assistant Email via Exchange Transport Rule - -To prevent the assistant from sending mail as arbitrary users, create an Exchange transport rule that restricts which sender address it can use. - -1. Open the [Exchange admin center](https://admin.exchange.microsoft.com). -2. Go to **Mail flow** > **Rules** > **Add a rule** > **Create a new rule**. -3. Configure the rule: +## Exchange Transport Rule (Application Permissions Only) - - **Name:** `Restrict Bates Assistant Sender` - - **Apply this rule if:** The sender is `bates-assistant@yourdomain.com` - - **Except if:** The sender address includes `bates-assistant@yourdomain.com` - - **Do the following:** Reject the message with the explanation "Only the designated assistant address may send via this app." - -Alternatively, use **application access policies** in Exchange Online to scope the app registration to specific mailboxes: +If using the Advanced setup with application permissions (Apps 2 & 3), restrict which mailbox the assistant can access: ```powershell # Connect to Exchange Online PowerShell @@ -162,84 +129,58 @@ New-ApplicationAccessPolicy ` -Description "Restrict Bates assistant to specific mailboxes" ``` -> **Tip:** Create a mail-enabled security group (e.g., `bates-allowed-mailboxes`) containing only the mailboxes the assistant should access. This is more secure than transport rules. - ---- - -## Step 5: Configure OpenClaw - -Add the app registration details to your OpenClaw configuration. The exact field names depend on your config schema, but typically: - -```json -{ - "m365": { - "reader": { - "clientId": "", - "tenantId": "", - "clientSecret": "" - }, - "companyReader": { - "clientId": "", - "tenantId": "", - "clientSecret": "" - }, - "assistant": { - "clientId": "", - "tenantId": "", - "clientSecret": "" - } - } -} -``` +> **Note:** This is NOT needed for Quick Setup, which uses delegated permissions scoped to the signed-in user. --- -## Step 6: Test with mcporter +## Email Safety Gateway -[mcporter](https://github.com/nicolgit/mcporter) is a handy tool for testing Microsoft Graph API calls directly. +Regardless of setup mode, all Microsoft Graph API calls go through the **M365 Safety Gateway** — a separate process that enforces email whitelists and audit logging. -1. Install mcporter: +- **Whitelist**: Only approved recipients can receive emails from Bates +- **Audit log**: Every Graph API call is logged +- **Tamper-proof**: The AI agent cannot modify or bypass the gateway - ```bash - npm install -g mcporter - ``` +The gateway config is at: `~/.openclaw/m365-safety/whitelist.yaml` -2. Test the reader app (delegated flow): +See the main README for full details on the safety architecture. - ```bash - mcporter login --client-id --tenant-id --scope "Mail.Read Calendars.Read" - mcporter get "https://graph.microsoft.com/v1.0/me/messages?\$top=5" - ``` +--- -3. Test the company reader app (client credentials flow): +## Feature Availability by Account Type - ```bash - mcporter login --client-id --tenant-id --client-secret --grant-type client_credentials - mcporter get "https://graph.microsoft.com/v1.0/users?\$top=5" - ``` +| Feature | Work/School | Personal (Outlook.com) | +|---|---|---| +| Email (read/send) | Yes | Yes | +| Calendar | Yes | Yes | +| Contacts | Yes | Yes | +| OneDrive | Yes | Yes | +| To Do Tasks | Yes | Yes | +| Microsoft Teams | Yes | No | +| Planner | Yes | No | +| Shared Mailboxes | Yes (Advanced setup) | No | +| Directory/User lookup | Yes (Advanced setup) | No | -4. Test the assistant app (send a test email): +--- - ```bash - mcporter login --client-id --tenant-id --client-secret --grant-type client_credentials - mcporter post "https://graph.microsoft.com/v1.0/users/bates-assistant@yourdomain.com/sendMail" --body '{ - "message": { - "subject": "Test from Bates Assistant", - "body": { "contentType": "Text", "content": "This is a test." }, - "toRecipients": [{ "emailAddress": { "address": "you@yourdomain.com" } }] - } - }' - ``` +## Troubleshooting -5. Verify the email arrives and check the sender address is correct. +| Issue | Solution | +|---|---| +| "AADSTS700016: Application not found" | Check client ID is correct | +| "AADSTS65001: User needs to consent" | Re-run OAuth sign-in flow | +| "AADSTS50076: MFA required" | Complete MFA in the browser during sign-in | +| Personal account can't access Teams | Expected — Teams requires work/school account | +| Token refresh fails | Re-run `bates-enhance.sh m365` (Quick mode) to get new tokens | +| Gateway not starting | Check: `systemctl --user status m365-safety-gateway` | --- ## Security Checklist -- [ ] Reader app uses **delegated** permissions only -- [ ] Company reader and assistant use **application** permissions with admin consent -- [ ] Application access policies restrict assistant to designated mailboxes -- [ ] Client secrets are stored securely (not in version control) -- [ ] Secret expiry dates are tracked and rotated before expiry +- [ ] App registration uses **delegated** permissions (Quick setup) or has proper access policies (Advanced) +- [ ] M365 Safety Gateway is running (`systemctl --user status m365-safety-gateway`) +- [ ] Email whitelist is configured (`~/.openclaw/m365-safety/whitelist.yaml`) +- [ ] Audit log is being written (`~/.openclaw/m365-safety/audit.jsonl`) +- [ ] Secret expiry dates are tracked (Advanced setup only — no secrets in Quick setup) - [ ] Permissions are reviewed quarterly for least-privilege compliance From 2998fdd9d8f9e8320da54b2df6e443d3bcae5dd0 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Tue, 10 Mar 2026 23:23:43 +0000 Subject: [PATCH 59/63] Update OAuth client ID to new bates-oauth app registration New app (9bf5fdbf) supports multi-tenant + personal Microsoft accounts. Old bates-msteams app (08c6086e) kept running for existing Teams integration. Co-Authored-By: Claude Opus 4.6 --- bates-core/scripts-core/m365-gateway/gateway.py | 4 ++-- bates-core/scripts-core/m365-gateway/oauth-signin.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bates-core/scripts-core/m365-gateway/gateway.py b/bates-core/scripts-core/m365-gateway/gateway.py index 5900b25..04eaaad 100644 --- a/bates-core/scripts-core/m365-gateway/gateway.py +++ b/bates-core/scripts-core/m365-gateway/gateway.py @@ -43,8 +43,8 @@ GRAPH_BASE = "https://graph.microsoft.com" LOGIN_BASE = "https://login.microsoftonline.com" -# Azure AD app used by ms-365-mcp-server -DEFAULT_CLIENT_ID = "3b2534d6-597a-4d5a-918d-2ea9e4ea8425" +# Azure AD app for Bates OAuth (multi-tenant + personal accounts) +DEFAULT_CLIENT_ID = "9bf5fdbf-1b3d-4e2a-84ed-a2a1816d8422" class TokenManager: diff --git a/bates-core/scripts-core/m365-gateway/oauth-signin.py b/bates-core/scripts-core/m365-gateway/oauth-signin.py index 0d18850..ba13d76 100644 --- a/bates-core/scripts-core/m365-gateway/oauth-signin.py +++ b/bates-core/scripts-core/m365-gateway/oauth-signin.py @@ -31,7 +31,7 @@ # Azure AD app registration for Bates (multi-tenant + personal accounts) # This app must be registered with "Accounts in any organizational directory # and personal Microsoft accounts" and have the required delegated permissions. -DEFAULT_CLIENT_ID = "3b2534d6-597a-4d5a-918d-2ea9e4ea8425" +DEFAULT_CLIENT_ID = "9bf5fdbf-1b3d-4e2a-84ed-a2a1816d8422" # /common endpoint supports both work/school and personal Microsoft accounts AUTHORITY = "https://login.microsoftonline.com/common" From 8d963a5ddeed9afc5c9601d22a71e95ebe641355 Mon Sep 17 00:00:00 2001 From: Robert Koller Date: Wed, 11 Mar 2026 00:15:48 +0000 Subject: [PATCH 60/63] Add growth features: email signature, voice disclosure, community panel, daily summary - Email signature appended to outbound emails via M365 gateway (configurable) - Voice call AI disclosure for inbound (config) and outbound (workspace rule) - Installer completion screen with GitHub stars, newsletter, referral link - Dashboard community panel on overview: social sharing (Twitter, LinkedIn, Facebook, Threads, Reddit, HN, WhatsApp, Telegram, Email), GitHub stars, referral link, newsletter - fDesk MCP server integration scaffold (50+ tools, placeholder until live) - Daily usage summary script with MixPost draft posting support - Domain corrected to getBates.ai throughout - Removed hardcoded mailing list API endpoint Co-Authored-By: Claude Opus 4.6 --- bates-core/BatesCore.iss | 190 +++++++++++- bates-core/core-configure.sh | 7 +- .../plugins/dashboard/static/index.html | 7 + bates-core/plugins/dashboard/static/js/app.js | 2 +- .../dashboard/static/js/panel-community.js | 159 +++++++++++ .../m365-gateway/daily-usage-summary.py | 270 ++++++++++++++++++ .../scripts-core/m365-gateway/gateway.py | 31 ++ .../scripts-core/m365-gateway/oauth-signin.py | 3 + .../integrations/fdesk/config-fragment.json | 13 + .../integrations/fdesk/mcp-server/index.js | 35 +++ .../fdesk/mcp-server/package.json | 10 + bates-enhance/integrations/fdesk/setup.sh | 121 ++++++++ .../refs/fdesk-treasury.md | 35 +++ .../integrations/twilio/config-fragment.json | 3 +- .../rules/voice-call-disclosure.md | 21 ++ 15 files changed, 903 insertions(+), 4 deletions(-) create mode 100644 bates-core/plugins/dashboard/static/js/panel-community.js create mode 100644 bates-core/scripts-core/m365-gateway/daily-usage-summary.py create mode 100644 bates-enhance/integrations/fdesk/config-fragment.json create mode 100644 bates-enhance/integrations/fdesk/mcp-server/index.js create mode 100644 bates-enhance/integrations/fdesk/mcp-server/package.json create mode 100644 bates-enhance/integrations/fdesk/setup.sh create mode 100644 bates-enhance/integrations/fdesk/workspace-additions/refs/fdesk-treasury.md create mode 100644 bates-enhance/integrations/twilio/workspace-additions/rules/voice-call-disclosure.md diff --git a/bates-core/BatesCore.iss b/bates-core/BatesCore.iss index 8e90194..9dbf859 100644 --- a/bates-core/BatesCore.iss +++ b/bates-core/BatesCore.iss @@ -64,7 +64,7 @@ Source: "lib\*"; DestDir: "{app}\lib"; Flags: ignoreversion recursesubdirs Source: "workspace-core\*"; DestDir: "{app}\workspace-core"; Flags: ignoreversion recursesubdirs ; Scripts -Source: "scripts-core\*"; DestDir: "{app}\scripts-core"; Flags: ignoreversion +Source: "scripts-core\*"; DestDir: "{app}\scripts-core"; Flags: ignoreversion recursesubdirs ; Plugins Source: "plugins\*"; DestDir: "{app}\plugins"; Flags: ignoreversion recursesubdirs @@ -188,3 +188,191 @@ begin Result := False; end; end; + +// ============================================================ +// Custom Finish Page — Referral, Mailing List, GitHub Stars +// ============================================================ + +var + FinishPage: TWizardPage; + EmailEdit: TNewEdit; + ReferralLabel: TNewStaticText; + ReferralUrlLabel: TNewStaticText; + +procedure OpenBrowser(Url: String); +var + ErrorCode: Integer; +begin + ShellExec('open', Url, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); +end; + +procedure GitHubStarClick(Sender: TObject); +begin + OpenBrowser('https://github.com/getBates/Bates'); +end; + +procedure MailingListSubscribe(Sender: TObject); +var + ErrorCode: Integer; +begin + // Open the mailing list page in the browser — no hardcoded API endpoint + OpenBrowser('https://getBates.ai/newsletter'); +end; + +procedure ReferralCopyClick(Sender: TObject); +var + ReferralUrl: String; + MachineId: String; +begin + MachineId := GetEnv('COMPUTERNAME'); + ReferralUrl := 'https://getBates.ai/r/' + MachineId; + ReferralUrlLabel.Caption := ReferralUrl; + // Copy to clipboard is not directly available in Inno Setup, + // but we can show it for manual copy + MsgBox('Your referral link:' + #13#10 + #13#10 + ReferralUrl + #13#10 + #13#10 + + 'Share this link with friends!', mbInformation, MB_OK); +end; + +procedure InitializeWizard(); +var + TitleLabel: TNewStaticText; + SubtitleLabel: TNewStaticText; + GitHubBtn: TNewButton; + SubscribeBtn: TNewButton; + ReferralBtn: TNewButton; + EmailLabel: TNewStaticText; + SeparatorLabel: TNewStaticText; + YOffset: Integer; +begin + FinishPage := CreateCustomPage(wpInfoAfter, 'Setup Complete!', + 'Bates is ready. A few optional things before you go:'); + + YOffset := 8; + + // --- GitHub Stars Section --- + TitleLabel := TNewStaticText.Create(FinishPage); + TitleLabel.Parent := FinishPage.Surface; + TitleLabel.Caption := 'Star us on GitHub'; + TitleLabel.Font.Style := [fsBold]; + TitleLabel.Font.Size := 10; + TitleLabel.Top := YOffset; + TitleLabel.Left := 0; + + YOffset := YOffset + 22; + + SubtitleLabel := TNewStaticText.Create(FinishPage); + SubtitleLabel.Parent := FinishPage.Surface; + SubtitleLabel.Caption := 'Help others discover Bates — it takes 2 seconds.'; + SubtitleLabel.Top := YOffset; + SubtitleLabel.Left := 0; + + YOffset := YOffset + 22; + + GitHubBtn := TNewButton.Create(FinishPage); + GitHubBtn.Parent := FinishPage.Surface; + GitHubBtn.Caption := 'Star on GitHub'; + GitHubBtn.Top := YOffset; + GitHubBtn.Left := 0; + GitHubBtn.Width := 150; + GitHubBtn.Height := 28; + GitHubBtn.OnClick := @GitHubStarClick; + + YOffset := YOffset + 42; + + // --- Separator --- + SeparatorLabel := TNewStaticText.Create(FinishPage); + SeparatorLabel.Parent := FinishPage.Surface; + SeparatorLabel.Caption := '_______________________________________________'; + SeparatorLabel.Top := YOffset; + SeparatorLabel.Left := 0; + SeparatorLabel.Font.Color := clGray; + + YOffset := YOffset + 24; + + // --- Mailing List Section --- + TitleLabel := TNewStaticText.Create(FinishPage); + TitleLabel.Parent := FinishPage.Surface; + TitleLabel.Caption := 'Stay updated'; + TitleLabel.Font.Style := [fsBold]; + TitleLabel.Font.Size := 10; + TitleLabel.Top := YOffset; + TitleLabel.Left := 0; + + YOffset := YOffset + 22; + + SubtitleLabel := TNewStaticText.Create(FinishPage); + SubtitleLabel.Parent := FinishPage.Surface; + SubtitleLabel.Caption := 'Get notified about new features and updates. No spam, ever.'; + SubtitleLabel.Top := YOffset; + SubtitleLabel.Left := 0; + + YOffset := YOffset + 22; + + EmailLabel := TNewStaticText.Create(FinishPage); + EmailLabel.Parent := FinishPage.Surface; + EmailLabel.Caption := 'Email:'; + EmailLabel.Top := YOffset + 4; + EmailLabel.Left := 0; + + EmailEdit := TNewEdit.Create(FinishPage); + EmailEdit.Parent := FinishPage.Surface; + EmailEdit.Top := YOffset; + EmailEdit.Left := 42; + EmailEdit.Width := 220; + + SubscribeBtn := TNewButton.Create(FinishPage); + SubscribeBtn.Parent := FinishPage.Surface; + SubscribeBtn.Caption := 'Subscribe'; + SubscribeBtn.Top := YOffset; + SubscribeBtn.Left := 270; + SubscribeBtn.Width := 90; + SubscribeBtn.Height := 24; + SubscribeBtn.OnClick := @MailingListSubscribe; + + YOffset := YOffset + 42; + + // --- Separator --- + SeparatorLabel := TNewStaticText.Create(FinishPage); + SeparatorLabel.Parent := FinishPage.Surface; + SeparatorLabel.Caption := '_______________________________________________'; + SeparatorLabel.Top := YOffset; + SeparatorLabel.Left := 0; + SeparatorLabel.Font.Color := clGray; + + YOffset := YOffset + 24; + + // --- Referral Section --- + TitleLabel := TNewStaticText.Create(FinishPage); + TitleLabel.Parent := FinishPage.Surface; + TitleLabel.Caption := 'Share Bates'; + TitleLabel.Font.Style := [fsBold]; + TitleLabel.Font.Size := 10; + TitleLabel.Top := YOffset; + TitleLabel.Left := 0; + + YOffset := YOffset + 22; + + SubtitleLabel := TNewStaticText.Create(FinishPage); + SubtitleLabel.Parent := FinishPage.Surface; + SubtitleLabel.Caption := 'Know someone who''d love their own AI assistant?'; + SubtitleLabel.Top := YOffset; + SubtitleLabel.Left := 0; + + YOffset := YOffset + 22; + + ReferralUrlLabel := TNewStaticText.Create(FinishPage); + ReferralUrlLabel.Parent := FinishPage.Surface; + ReferralUrlLabel.Caption := ''; + ReferralUrlLabel.Top := YOffset + 4; + ReferralUrlLabel.Left := 0; + ReferralUrlLabel.Font.Color := clBlue; + + ReferralBtn := TNewButton.Create(FinishPage); + ReferralBtn.Parent := FinishPage.Surface; + ReferralBtn.Caption := 'Get Referral Link'; + ReferralBtn.Top := YOffset; + ReferralBtn.Left := 0; + ReferralBtn.Width := 150; + ReferralBtn.Height := 28; + ReferralBtn.OnClick := @ReferralCopyClick; +end; diff --git a/bates-core/core-configure.sh b/bates-core/core-configure.sh index a4ec441..2366de5 100755 --- a/bates-core/core-configure.sh +++ b/bates-core/core-configure.sh @@ -353,7 +353,12 @@ openclaw cron add --name "proactive-checkin" \ --message "Proactive check-in. Review available local data. Score changes. Only message if actionable." \ 2>/dev/null || warn "proactive-checkin cron already exists" -success "3 core cron jobs configured" +openclaw cron add --name "daily-usage-summary" \ + --schedule "0 22 * * *" --tz "$USER_TZ" \ + --message "Generate daily usage summary. Run: python3 ~/.openclaw/scripts/m365-gateway/daily-usage-summary.py --save --mixpost. Report the summary to the user." \ + 2>/dev/null || warn "daily-usage-summary cron already exists" + +success "4 core cron jobs configured" # ============================================================ # System Crontab diff --git a/bates-core/plugins/dashboard/static/index.html b/bates-core/plugins/dashboard/static/index.html index 6da5589..aa9fdd1 100644 --- a/bates-core/plugins/dashboard/static/index.html +++ b/bates-core/plugins/dashboard/static/index.html @@ -116,6 +116,11 @@
    Loading…
    + +
    +

    Community

    +
    +
    @@ -189,6 +194,7 @@

    Settings

    + @@ -252,6 +258,7 @@

    Settings

    +
  • $r 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�*>Xl`ik|Cl7=YHn%@vD_XVpBxu#+1DFLNe!OD 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 QXU zC(W#Nng*bLmv_rCG^ zE8Fcv(o?`nky@KKp_~`kT09FEa2Z}EAS6qXRvTL@A|RVJ7byl#Qw?`O@1C`Mw$NIZ zvUib5z0d(2v*imjQS4kOj?DU>{^c&4^OASk0`o2NH{|DKHVyj4iAa0g)v*9+-u{ft z;E!r40z*@~{Lx2OuUtQK=FEDv_rOE<-*eCT|KtDRZ$JF#Bme3D`Tz3KhabplRksZk z4l8hktYlaViB{BH z$45t-6Ry{*X_~Z}8Cug)P(;8602GT3^q#dGMsIb;Pqdt8DN?6ahB6G}X4**)ukV8KSa?vxIwMk>BJvSqL;$0LMos!r_5??|Jya z2j6(<8)(g1ZBqq@j!L6H_k!x;LJPmd&QC8;DWz>T(DtcMy>R~g zx#PpbRwpTgwWg}26nfov21ZG5%e}(`-CBqz1$}y&nGHkn429F@_YV(`zWBwjoZP;} zvQMusi}rK?1uW)i9Ih`dpp`NT0Kfes_eZxKmn;$Us;pHPutD83m2Y!?%9Kb zgSwq;kfse_DMRz(_ixL!L<)sa&RvLW7>VwB4!?`eYjb3k#vB@U#776rUCHhMXDndl z&KH-UJQea{p^Keatfc>mPy(9vR@beTET3*GZv(0dP>P(KY)+jz1MqkM^*4@h-DFv5 zYmkDfh$16u_Aghy_(L_-^6WckEtD(ozpud4I#);Xr;Nf_G8Ryy5I$ z_}EXH9{pUbzheERJmHM@q(czP>+ayK-E)lFs4YLO&}o{){hZBC+V=f--de5pKKI#Y zKL42)e(vXfRc+K&<^EY!HHwuotXAXRUi9BH07?un)!IrKrtMVM<)qq+zxS>0``iov z#&>`I3;*=YjSsGuasOm$Z@qW%^0gcHpF4Hy_V&XYo44M0^E)1VVklH?goyxQL=2|Z z2mI1a$DTo&&3(fKk-ev)PAcJ;gCq+!?x;Cp2F#Eu5M55YGoqIQ6yK>B0_z`Pr+SBG zX=1?O1_BHcA_LYGBE=#BfG|jpB;I*qzMX+weCCmVrPHftHaRSWWwJlLCqRTj`^6kn zdSg}u-i-aBh!?qM3XLPE?CcXjCmZFsJDu)!Aw{4KbJkKAT;}6Ae5r|TEUp+Xj!u7I zL9g5J%ZSiKP1RcKhuEDc9Y>3&T?}TXXz)gwmcu*aUK#g_UduGotxZBf%#1bWuw8Y0 z(sFO3^|hxg#*QJPlMqTww1ycVQo>^umM5AjVt!myz9HIa`{R4Tq1$I_svhA+V$_b$ zT+FnffzVSk#)~ER(d)cF{<-e^a3$-=gX|t2jd>=f8nzzXZD=tTmR{Te&>P`1yC!8@ zB8SS}u#ZJN;V2dndULS`0O@V86vIt5!_dxZeU|q^iKQT(HCXt*ZAK0j&X#`Y%<2ke zMt_RRg&(7%Q!az&3pCz^uXzHB#R+DgppLLI+_+eMx@W9kCWUdjU*ZM>=N*`30aIf2 zzNG%VDfwr$KZ_7Ez~&x@K}0lIZ7M>T5QFcJnYB*VDZ+CzVHQF10E}sKYu{hw-?7F1 zA@AvC<^bkY>gP^gnVO;R%==B~w23Qd(gb0TsB)#Mtgh&yQlEBBk zKR)`#jcE~hlwQbEiV*XRHiv2M_t3~M6QO1DMG9#ySTved+m32r=ok-haF-=V^)NiZUJ2Nj=kU%up2fFvSr%>|qCaq6 z7PH4I5`!_*Q4*OMyehl94q(gJLtG}VWNIqrh=wRNO10|mc^FlSnK=SE76#XXfAioE*9>xZ{*$XK*BQ|zr)Xl*++($;%>ci(-_ z#jDrNjAb;isnf<>O9(~@m<&W~gnid{eQq_DcO9vh`{Vd(F=p#;-4yFZvXl=~Ve@v+i5hmUoC98+yEyzQ_XJV zFjXl==qS3WN6&xixqt7k{>bV5@zodKIXXJ3+ie+#&CT1Z^{SL&jiOMi)#Xe`mvF-L zZr{28J=GFT1;z$zX06$Z<@A|-Gk)!BzwAgrejvQ7} zMky24eRmKpMGInm4h1_Q!Qoy!x9LRiZ-KWmg5D0Ojyt7?Yf%;T2nLg>K>BA zFkb%X(l=jy#lT@0L1}@K-A^api$tRB6pcs}WG%hkOp82O&AR;CF^>(%X6@HdFYXcKKk&zsa5MehNytG`Lg+RS=^U`nGwsGeGdK=?N|{Vh98lG_}G) zk^M8LZ``=`yWjYRnU3Q)O_Qmj3^0KdmVq*mMHNje0H{$)8CR;4w(XUx*T+(R^Vh$) zzrX+4Pkr{>g$oC_ZcMF0VP-6%s@rMujETrWo5_5k4b$1$QFIb!lA|9~Oqhmdd44jm zN$)m4^UNGS?}xc?B;{GV+}~xw`A03`Zkh_(u~WR7rxdZM*+bhENuntKSI({qlGYrX zkU4thz*q!ryOn|h9v-?0bsR@2BEyQ~U=(duR%00k zcovr_%+?ghu-R^hVXG(W_by$zc5v{*^PhbFxo1B7=*x;`kdLn4c>DbiM?QFTwEgJH zwbx#I`7_`1hgRqIHYeg?2{zScGDxeMR*!XPoqJ97(MqA^J7s$R;>4UtFGd`1-#x&* zoYyTP#OyFPqmo2`;Nc#CWi)xs6l))R8Yth?K=pamvBNFeWzYnSj$^a-_xy6rbcC)U z61jAI5ROz*B(u@O_#jC~_G+0$6CR4RhB8j#ADU51s2O2o37dsG2$8#zkP?w*;Vmd5 z^IarL6~mT^%g4S3F$Qe*&Ze`#a<3iHJ*`~@x~XXbftnR^E}KpFtT%s%lOi3t=eI-R zg+b-PJoStiC7H+J+tbsW5EH9&yPYXidcSR?xeRNTY?`vM6BMBCg)q;BL6D%J9a6LA{TCuGPc(+&Q~t7(n?QcTPgg00`&%)3Je;_q}I zQc|P`ot5mz&W;^|>!Wr78O#^TP=-Oo;~UJ$*5)>@M9D+Htk<@dkbEpfU@D~hcZ#I_ zF4EI~KnNfLdZ}PaY+sF}X%+TcTKwLI)g`l&jGB_-9*r4MdaY^FTL)s=EIJG=T#z;g zY~VSo?piW4LQ;$x<{T&@`p>5cA)*%2u`_gflSsOUA$**=v!swY!4`qMEfU{g7LI&p zFLUh`9(J4W)&ZJxp|8`k5M@zcWjiRw&wl|KJJ5^YscJ%NXfX+%aP{Eu+B~F?HgM;Y zKoGWYkRvgM%|b2_4#bQ-^)Pi>m(ZCXlsuUtQV~g59a#&pIof{pt6#0h$K&2!ZId;v zb+V}yk`HQHpdl2&UeqZhS{z^c~mwou!4E5rEw^UvPAdE?~x zs41q&2RyehEEmV=%X277_NR#F$m}*LB}TMSq==NE_^0;v#Y|gk?nuoj>FlQr&E@f> z6b0!N2qBuvZ9#>z2<<0~{O*D>@_m4_!9E`wy1OsGtNAv}>MWWvq1{)WJmP$u2jzvM zY8JJO^i0X7O(3;Zf>LB0N3FKGa&rCJjcwgL`Sg=N^q2nPtFOQD-~KoMpmC)fAS)S9 zfotLD5`hZ_Oi*a1s$Pp^8A+oK1Ga|;=g#i``+xH3oOtJuoTct3R{wA{(*!8PI{qh)ktXd|EAMtPe1YaW82MkyV(d?qvKLS z6T&iDiuAP>1 zebB{Fq-nFyww--Ev%GQ-o^(?oRvCScXVV@?xW0S`Q{tnGB?%C&!IQ_P07d->H09{wxV$@#>ORzRl0h@qXJ6%{s2%WIlWA-wdQM zpI!6HAu~iqd;^+Rs>vYQrsLxyfCsk@pM310)xg7p>%+L34n~5bh}g=6!#G$-!YGQ6 zVWbq4v8vYX$yUn;m#@9`)_YHX*Qb8p@B5D5{LL>N9B)|4?W2=d-+24%>3yBr?SsQN z-+JT5^;?hJb9S1fjHt)k{jo?XwHe&U&s!S(#Q!)InkG~R3$Kr0m%+vTzYuPfrZF(wk=o!hLkC>e*k*lE~BRRhCN(P^Veg$ z%vmltN#|*2!OM5bSBoq;=H6O7Q!c==BF{~ciT^xn)EQ*qZ>EBWJisX`w zmip4vTG;iH{({)gg{<~9YuJ+Bx!j4WpQIN{nz`Aj*)+>6(tq3~>Z^At5*#%Xd%vTl zfe0F+4@d5m^JDf9VkoZ}@9gL*|BT19JZ-E<_f1&3k~(04b@uc2LZPLWx>eK4cIQND z``K<`97cAS=>oMQu#ZXDF8sSi4|usiPC+ndHgZApsfcsR3epjg4w>-Gs5XiX3wRKJ z`$ck*G*fS5AMgdcJGn^s>xP+w$FN1%cPsaWJIH7LR$jf*=YaNxu_-0w_g>p+Xct8O<^66d5y4HbfLUAe6Tv)(|oCqTLY1Dj-IGWBsJ(OGYI2NfwrGg~>02EQZ3 zv)I%SiT92V2tpTpG-pQ6TrztMlI>zET;6&eJJJu6?jB3JpYL0$8Z5H1u7Dr?Y&f=#+ETUrxHs-}3=vDFp}+YRux`Fh_Gy z{XxJO#}wMyV8c*8eDA|=eB&GboCG+?=44x-|a z8pU+lYTe#--~CTM`Q){$SEgxdhRsyrjSuHtS^_e_dqXCt2Tf+|Pei5`LnBHlT8f&E ztI?@NU>Y+cSgeN}Q?lpPkP0NVV;8)E)f7dH>TU@!oW0n>aj^W)J%jb6s$#XWy;G;xd+S>_ zZ~fda{K8ki`dhU%8H7fKq|ds*2nb4n3>+f;$MX@~E9A6g>9`Ro@X0r2g>hBO-lY#e z{N_uqeEKsl?CqaAIyhk9Y%!QM#4O!BhOR)u+L$Ro1*s)zL|eG_!qs?ubhI8&7d+XiH5aMw^CfmxT-Puq3aKp@}Z}x{T_iycC&^_v`e){f|HN&;!SZ2b+`4 zFcekLjroW+BnpFmdi(aRGOhuml-N}fPgfHe zNRNQ{O-3d?~Sr?m1t&5iGDM zfMpX?>+4BwPx+Tl=i-`uYihO{_D-KU^WryOx^?}ElraqZLCg$gEM*wVfWoRqFW-x4 z%_K`1M{C7&eRAXGyRE7=7M>iPeCKz5$9)ezc=P(rgWI=joiuBET@tohW0qRLCZu)Y z&)n61Lc7Gw)&mC7L^E>-klrmaCJoFx?d`I-%U~Znm2Obo@z%~s#TpWCC&k!&V9o_y z6LftOYA?@@{q$zz%7>{&E(px3HC0=UgTYRYH&vUq>GZm5T8|?s5F^^wN}+WdI9>1w$7o&! z))g_(%Y*%yi--{|`K#}GAk-lIE5w@yAdJzw! z`-;)0a%2G1O%(QY8brMoVjhcxYav}-VO#Z_M!2{))!rjHoksoep{;oVR~Y49pD_%B zKQW93HE7gFPzg5ATlxR<_2M3WQlwB>Nf5%Rxbhlh|O?6AUNk|1r#5)~o{f)qgjBxdwb)iuvqRarx3 z<@CmT_Fl_BthM$zFB{SWI_nMho_o&TYxvf;*I=uhD?m!&ASSd&OcA#cv)Yl1mg^Me zeld0#oFU;iB6r^*Jcp(7m`%*n|9$mk?Bpph8e2!CkYi+C7)D3YFm9O+W5Emf&0Bn; zA?YmmMbg@?QcCi8m-f=kJm z>y2@y63gisM~hV{;K(;;vcIV}fd~mMlu5LOjx4Xi2HF}!3{i@$^{2^jXCUuL)04!V zOG^`5T#gG9Lk$o?O%^3&7?T^M+6|te7aufgcTx(N2Pm;x_uwoUp;-)99esjAIwR5} z5C~zoz(sZg#JIGD*xOi>K|v0{)V(j&XmR7E(COhLd{C{LlwX1(q`D(EFgJE6O&Xlx zriUnIfR|3fN8XGmd)Y~>XrL78KwzV3$#9J}j-Fj(qYyT-+Ps#EUUi6mw8)RmOWxff=-}tSoV>J7k4A0!ez5K-cY7sMc;j`PpyWci;UlzIgTc_*hZq);#pe6MQxh_1q| zMIu(%X?P#Y;z}6Q+hVt7hTePE?)EtB*bt3$m-!h+)2^cc2LM^vn>QJ;sMb=nZsm*| zA06Gf-R|DLyV=?K!sj3Vw}0lRUwGjaNRhJXEZzk^u17V-XZ~nEv_Sf#-y!q0L&)@p=cJEepHru1tYL}AT#Jm_c?GF)Fm3iw!tRuQhWsF|J zB9mfwXSbB{+rRZ&|NNi-#=-twP}&@s@E)}R%z083b%U~DsVGyFgXNH^v8#y(z#_T@ zP+028{@rhV>)U_vr~kt4?irGEn+cjViuCA8kbv-14#Lo|JYEZ@IJ)PBTEiekNbcV~ z*i6%X_uc>K<4?T&{0lInSZ|GN!om{1BSj`W&0;E+sDCAI<0hCOaop+ZMMkr(AWYTT z(W8$%a_-!@yLWFL9~^8pn_yu;k>Y2JsR5xQ3%9Uba=7>y>jSgR&Zf2ARnMF~|LOHl zzx(|6j`#P$jVC7edFB)|Cw+*U_XYQlUM@ST$QO$R`k=H05ao@m;GnyWG_9JWmb9H5 z@0~gG#b=*6*xx@qH~=6;w2>krJ#GK#)m*lCF}I6*w3RS;_#sQb)qIL*54Vb51K_UI z`P3Ir{bb9V?s@TodgBkL-?(~j!kuVXYj*12#gSS-sC-(}OicvZ+|HdnKeztJ-}?4^ zd{A~SwCxs@GEHq(L^E{B{Bj9g2Q}4FraqsDRHc~l2q?r|g5CV6u(z|J~M(*$T z7hiej+9#hr@z~?fJoWikUwg;uS%Z9X^X_YJU%UU(<$1ObZ`^tQyWjcoKmEhgMvjj9 z&W=>#cz~xMk7S45+FRdmjX5I1V}&2>@cB3B7=KGHDoITKYz-clOa+ZA(R)lS|(03|k|kiPj=_7NojYfe{Klm4R-H@Du3(GBRI+ zNCVOxj^v#{H5sSGH3f`B9p6<=WRp6pQC2hXO$z_LUtIKV&?6ZwsKMJDtABtl7C5r) zJ@f;_TqqaC)UE@NJI2%eJ{8)}u6nGHdPQ#xvvFIgy#qi`Ma{+Ry(IuNW)Af!mkjli zKeI^0%f|b8FzkEDK*fW?91pk{FwOJi{6D`Jjy$_)emKZ6vykWT1;K`xW^iLeY8ERN zYN&}e;?uLPB=2m6R#Fu#gT8UGki2yB>Ae>c00cTUS_9bVcDj5tA`?Gl)>(CrqI|V; zv4=6rwO#aOl=v}qfeY&9TFw*a`)8<+flonkt~zU!h6Ng4#uqbQ%heJg%oa~U4zB-% zfg)1}2RP)&T@5#g^;hz#c~M3(^2%qD$(4tb%D;@O`X?JLDvgkhG+@YMSXCp{XP_bl z5waxLAZj&B1b+U}B%@Cig91qmO`w(nK((tFB8*1zElY>&EO$h37(?YKV}w`qITomC zNo<({U=(^%EnyUTGL5R1LI9FuxYW##v;r|1O7>4?r1{YMIWyZ{i%6AWydvuo!DgC2 zkBFxiF&u$5kli3ja}gq?2KO6Gsxw>)qXMD?&^_zX?;@Lifm9piDn?M72184snHOU! zq==aJ1EQC!TJ-f*Rd16J^?bBw8&3;1DB4h4w(hp2Ei!Yyd#v_w<(X|1Szg{t-|?qe z_Lv4Tg(AIuXyM97xB+o%oO3Z?>W49|oRLDY=%&AlX(YH-s8gE8gkP&?z!1{~`mGdh zxyE3asH)~k&tzJV)T~fr1dEu)Vq7(KE|Mm4QcgnMNX$!M8d{vqFl@08&hGBryZdI=wRKON9gKU}4UiO4TXT9oXD-4rtSY6Hf-!+~^3>)IQ)Q`pXZG&D z|A8x4E^nqysgt7|w-0OEhjcJQ^|AbD!-=@bO_FNi>++TNTG)^$3$a}AL|~;6XysoC z?Y;HB-EQZ3?yYxi+mo$mpSQE6B1FNCH`ZN$AWa0TnNxljK~#+;{oPPyP8n|Ns53{@XX-`jAGcwJQ^mA$?H#`k+gwsw@TC-DLFb;b$Is_?Le9 zKfLeq`QQ8PfBESr*Ugkt+$^YR+jbF_THvWkCf&O-5vIE8^&DSjIsO?mSeeRvGEa5d zZ0dze7tWqN^V(~#{o`N#rysue9*RWkB#=@JF6dGDg*tKCNZqhbkOC?6dgRd8@eR`2 z7K4;pclLIU<~y&v{NnrXUH$A6k6z!Ijt*v66H0GtLe(Bx-+XK0@H{M1L<}6t zQ8qhIJ^d7b{kwO1+p4ORLKc!{vn!6zib7HY!)vDbUD*>LLnAd<@2bX~y`A^oegB2$ zUj$h;wKo$I-fAjbhIg=wN$|Ozi3Lw(MUO`cc(*LVYK_9Q$4QdAVbczy>U{LT6Hk5i zv!A_l=Vt3oAQoAJrl#{{x`buG0{bu(=yrhRj@=V^6~ z1GRNj{QYb|21{ep*IRFkK}p+miq=_R{iyG-L8f>fd|r=0b`m$UNThVKzV}|I$&|ah zXWo7LotIyHku3BK`BKabA}F5LZ3L@SM3XHG^KHUu$J&;)Dt6Gh-M{tG zuD*5k2Y&bmo_yl7m#^G+=Iq(S{r%&k<8C@{XG97TdTSA!sP>qAG8}Z|8HM*x`6L4( zcA$tKWn#Q04nBG~NDRb3_J6F!+PR-{^sC=2t~c>{1_>dqzWdqyBy+RJp61q#y&iOx zy9*9vZ))1R=H9EB`BWA)Rh^N6nOfhr?cVNm-<3-gg`V{JnA5Jd6P-84VoEh*sUn1R znn|gqYFz~sDXrO5rmG)af8*V&f97k?JoU`ycK^k19<@f1LX8I+MbANKk6NIL}h`lJuKB#-LrEn>vI0k4)6aXAn5dmuZgC@Adb>_N(d~0 z+G6+Mp>JaKAVQYR!m-l>XeQ0>QKUII@!b^mI8=6i23^$vDTd%U*g;QkW*k+)(+Eg! zk3#P>Y@QDSM5=|DKW{gUz(JrEZIIj;3W@;`Gg#|A0&N0{I2&dZ5tykToM(@X^mmB( z%f%~mJX0NV8HA$NjWD&P$Max4PBEV;nrR+}KTFCZ%|?D%wrChh@mRPE5>m;0Sx2hGCtW%DIf%5$a%^kT@3e0((?+&5j>)|Npw)n zZFb}kA2FbLt~n@TUag(WwFEmOXiKaWI4F(!kk538u^{jCx=wyOhY0l1cg2?Q(RnyX3$!ZoqiDBNC<;SAqnen zC{tpuVHSy1UPx+)qlQw8%eS)yc|(lECLQukwIV{Jkd)HBtdHo(NRlw~zWb&7B=^XX zBi&%bDK;6WRH{S_`SKJbdWNxA{iNA5HIuH8r0+-%ZssdxL>WmL*sR?~?5lTT;4+O;e9L;>afrxPSSC@_TET;;pBE ztrxPD>eZZuMDKl`=e^zC-Mzgt=g#i!?$phW5yyweZSEl2Jg4}QDRBTGVAqkTQ2LYOB-c`0!-AJ+71V@<{-07WpeP~Ml|alk%*7vm zO?#(M=h=EMJ2D@i6g~R+zy7zr_Lb*ed+GU)KlpGyY-K7Zv(mIw2_Rw8=H~7AyQ+xv z-a$~R^~^jYIQk{^P#uCk9!^!Kx;cOT{L$gjKmOH!`tnOJDPVJtdVUe>YTiD^>%U|| z-GNMy39M#fZt01E2-0>%$+Pw@wV*rkv2*R+cVBw`g=e06lFIq`WV2JYC&z%W$f-bZ zK?N%(4Zu4+WY+nZjhG*cKKE&=LLTlPUb$=!Kls2jZH`W6NCRqM6z!Su9vi&s!<>d7 zY*B0ymj7TKvyL+?Sd>>owO01yrt`_UbLXFa>a!Q#ZYCf0RBD|NkS~aWVXtWB z?skyxp6s$nol|q#wkLC`rPPfoKmPdR_uhTqZL`i>D--E$HpIC(Kun38GRH)00p)GI z?5R+0_-uJbBwXb{Q#QDE?en%svwrl2r=Pm-^2HZlddGT4LEjoH4ILdKSXXn}_`kJH zhj^K(pP_YR$C?hSps+Wbzi|H2mHW=@otZY1P^4tF!Z=-Y`f@1DXeD&T{=k2!jesp*=&uz22yLa~7@BZuG zx%$pkptO0*QmoBgfU-e1Y}mUJDiX;Q+T*0k59CYP7}WY~EGU~cw-2tqf9Ll8wU0h} z`L)-ceDbqj{mOGsKKbN@v*&hpc8}+ilcST?+q~WSlxQKlC#8Bgl;`t8>Dq&7N&MyU zwn$_@`%xA-sKtO>iQDecpnG@Vp2+MJAnD24=Cp0o}$&S%#3l z%|m_&cJ1ENdc4$B$pY)zyNLB}+wE-R;r?N7y5qXtW}8p6o%HPqrybVGRJ`WR%!l$> zZw>J5Y3;Lt(ye}ad;8+6@Ba9gpZWZgpTBVS%-xS~b8}{%`<HTq#lgkxDG z$P}^^7+=kv%NOxE*HSxf!o_yM{ey%EE0QKB5GQ<Sr_ z4mG7bVQmh_wAiJzg^@vI30Wd9IEW7;s}CK9b}_Phm@%r~usV`V9j6FAor~H#!+9E_ zCscIMiRsdw`(=vg_h9}EK^Kg~4yJCezckpHv4-ijErNWrSg7ntIzsD&6-;k$xzRy8 zco4@lSW7F6QMD0FMHr#*2#jR+C0>hHjnZHPh{y^cEH-8x1I3nw9FGD(HfdG!8!g9)Ky8oJ^1ikPM9Do zm_n{13&5if2hbiom(eQ%FqjC6AE1c$26HJLHs1F_omME>Bf`VFTp6Q9GTHe3kR+0& zl&M6qtOOy&IBy3d*bW2jMjRY2+{>KAlW0`oxka5)fYHE5NWXIAB9%glc_o}zs6@Jw zh>#@?%ndR5$VmFUO2%U>=S2WLyoC3M_kJlz1@`g~4D`be6nZOZny1c#T&9GG6Mns` z&u)*xlLZUeK+ApuB+h2yCuMnH*#TG(gh~49Q&ALcPd0Y7T1~K zq3Vv8Qtu;7c9fpt?U%8Y{V>r9t=q-6k4C9LbW~c;DbuszH{bRCMZiW*DGQhT*0M0hE|Cqp#Y>Mo_L&DCeDLwdAAjhf2d2%`dTXtznf5-_>bE~wck9MDEJ^DfL4sPaiXmVp z+iejsKuVc5)_cEo_vU7jAO7Yy{_bw={fNDEvr;y3nari+@S^Z_Rw*=+ZMLIN|E-_- zi+|~7e(L?V-+Jq<*IR3l(%nIb48Y8vU00|FWHkjb?GJ!bhCL5S?0*}L!l z`=)8YE+f!|ZMEY{CF-HJ-0Vz@nO+86n zthb{F?tlETM;Qe;nzbK z>9n~N{=hfBa^}qDaDN{#DbnZJ=lw9G?o`meJ|0LPq(K)4%z~=cT3S9?v*R| zms&r$@#);!JkQ##`=nsAB(Z~FaXvcZ|9rUhb`F|mEPN(`p0-y0UM|EAECUB12_Rpx zL2NCzGSUsz4W}+&y{qZ=KKLN!n_$Z}{RL_F;9vNXjyu$@S zR1_suv`3DLn9l9)?K?-u#~)q$_|;cl`@=u{qsJb7^x0>>_{3w6U$}IBv)OEF-Q7K- zYV$nz-b|r>yqDea0a%RAb5vs5vz0voZ>=J*>^0+7E+S;N1gimiW~(IM_18iMt^|Z* z?Z>y_Uk8=LjGla>x*BtFJaNom+Rb1QUIt2E$X>~$gAqoWSs(Mo5hfonKxt^bck3Wp z?{nLNS|0bIgl%gwO&!GynrYxetXIKEM#<^)CG$X$IMN?> zXrZfTc0Nk{7h!*T!Lgk~`ZJ-y~vhO}Uz7BbCtB#eS%Nb3vj||-%s;3#Mc#Is7 z$!j|_CcQ)ep4S&&{MMSEl&fi-DnO_eg6gh4D`i5?MqS9F$4J{Sm;-?rqdi~L9Jo|T zEGn5iT1It2AcZ_ywpo!>egUi+>{Kxb7T!Mpu~U&jTz=gJEG*WkgM}5$TD@dxAC=1G zpJwA795IQ(+oB`wmCJ9eM~I_u3FzrtUWG9-;++1$vZBm*+@Rj6lB={VGe{;70bt}H zCg*LiaSUUCcl-%mv7`p*s~nt*nb$S?ewU~L6v-Nvv@&7PnJE$wDFS%AiD<|icEs1C zmdfF_B}fi)3V>3iI6)&z^{f@iEwBLrNqsq}1D z*C8x6EjC`lrp5U{bVUNf5=DR?t}YWydTM}b_pAn_qy($Fr$_(Bcu0xdup87z-%E82y&3Hvkzy=Dx}|R4ux&X^?q+j|o|_U_HkKl98l|Lwoo=93p* zc;W8NJ7&7=y>G28c`f}1!?Z@btKI#WlWH6yXvY_!?gGw1Gq@c!TZ zSHJuJ`>+1nySHzGY}+jjBBIvOt}Bk>#Z*-r zS~KfY5tZrrKmN|ux8K>@+syNp7I?_a`rHF^gdNX8p{KTa@MdXIU?U>eWCFL_ZKpbP8*SGQVb&l{M2IRmNAWcLdvB3!w1JZqT(p>EVPr> zXKTGxqHpJ&oiktk%9m92@ZiY0^|_h(p{f+gCZf4=!w;@h*vwEkvPz@crZw$qEahnb z@Z8yRyL-F8@+<$JfAO2YwLLlBZW{>8pdzp7WRSCM2|1Z5f_X0GpP|_vVp;1284iSx zW#88ulQeXa*NZ({Q1WnRdC7#T;Y*6J&5dNK^~{;Q{r%e(g(QRlrNZ+kqyQ{s0*l(x zWuG1gM1WDc7M2YG-9p=zrGjX4GhlA>{+&DTz4Pvi-+SrucSR1Wdo2|97V5}V}=a>~DE@MOuDqzy@)Xt}${yby@7 z8{zY^MF@i@GiS?cguO1(!)QwPpbCIO3Ns@<;-^4E7H4}F#Sh-rCnBGLLFkCckgSq_ zs17h|Lw7UxJ`cavD;7I206sMP!Np=j$Zm@QENh(0J@EG0&qcD<0zZB2X_2dLBm`6r z*GA-=@=@&1JjJ4jskaqdm^+CC1vAn~mc>4sd9q)iia=IsSt28#`VAr{RttOcCm+^c zS6c7(A=b}B6w_=)p=qxpUCV}oujPkHoM737<->SdezOhM$giB7@F z;{1pdIJS2fE`zCxkeYtZjo&Cv@eS}wSq}@%R$!iga6Ke!)%+WyM ztj!Shi7GTdm@HD_lhiy;@2XOYGd0sR`TcfuRjn&KNKdDTVR`Xe7D>TKg~zglFnC<( zjZzRK17OiKGr3P2wdX^^kj6J1Yy^bWk^Fe24R;i(p#GH2wqB(&V@I7mX0vs{3MSBHuSB3A{>+@I9vh)a`&35via0YO!` zQkY1b2wCKJL}noAC0EXjKw?A}ionc@6MSi<%$Zw}QmWruTA&e1E&nZbikb|9lv0Wm z$zwz{@5-Fh%dp7sSZZIyC{3`mu0AA9M=`zoDz9B!&U_-ei|+Tn+Ju^llngzMVL3EU z^B}@ng&d|ONTI?=!9qUnsC4#Q*3eRo=kGyRM70IH1e2u<8E}#Cwy&9a6$MQ|zVXo{irPPVST~I30S9Uk5Z;my3p%v?#MzfULF5+xg8mU+*W!b+ehb zGx7vL3RPR3b}n7Ibo0*b)|5K}u5aEKOj+HaD$rp~>h#sGKUYe*e*F{Q@rC;dTN>d_ zWaq`+z`5jDeu;Q50d&MnL+4AW_uYU0C!c(L?cD@AO*Iw{eoWaj(7R!ci9 zu3uqbEG##-z8F`V8oR%?@fLYft{4VCsq1~)`^}S+9h^OL=5wF>>}In$ zIM`Qn?CYd}hHw*rGX3t@-@#3U9z{bL*=}cwsi}37B1eaZ2L~rtu3S2Q@!bC1Ps+|N ztZ1Jpm8Ae-x6JzyWP0PYDKI-ZxO?vW*)dK*q+7sck-KZ42vDEhk5Zw{G6r-Fu+cVv2cgyE{9o z=+?13NZJ$rPe_xc)KR^mvg3280o%D99i2S*@I%ji`Ptw5y+1JPlq&RgS4t6xgpEzP zGB6R!B5}j+tUq@_5gFdor(CJ4l4@_Imd`%%`0noRom-!n>ejk;qqGt&lSU(U$DA%v zOAHVcS{yaUs3q^q4#oE1aPQ37I&H3ha{aYeUzMqfu(j?!ylVkTDN-t>fF+!S4Z2#> zMoN}&cr-up3;sfi(yeaUZN&07IcPZC4(A@R=_>y}!S|-EIwRZ8eQ$#hzkR z*$-7-k(B`QM9Ki`t(RIU)UIvr7cX8sIz0IAfA!bic=-jE$y6Z{dbwf?PRYo<+n0`Q z9DMNfD>8_@SI|zo?Qx}*OTFilY_*f)+PZ!#3>0r{D1CeAC3|Iem-Kz{;J82v=t)2Y zQlnx%%^oZ%5HTrnilL_HG;7`kWt4=f*{x4+eEP}9Z@=~S&hF0TOBXI(x_If*<%^dt zUb=kw{JC@I&!0Pc=IoiXXLfgY_cohaYw7Od*@mg3+f!4}Q@WdJ13Dr-A$t1@gN$GvcLS7KOjS93a_jnQZ@m4? zXMW64)utRFaEF+aZv0l^Ml}l>$20* zw8s>pNHn2kh3YDH^MWm^p9vNRn~_-=eIVVanZHbpiV=_*;Hg}pCT19ou}MZ>h`?`= z^p^)+etMP>%6c`J(NumyfQDR=d~Jk~tLI5}!_xE)^pz*{!z_k3WmMJ00jD8~EnuE( z(!FHfEN6$)y5}6IP{Mh6t$z-BXM}%|6=E=n8vX$WK{d}HQp(HHK zRV+%dJ%mj8Pfrmb86y;r-kPBaiP9P4Q?S@JLc8kVMHiJLR-8l>p^U6ATBeILKif5zgd%c4qTy4V1cLu=!Q zoXcwnxWoJ?_twF`goj%ql=a)zYDyr_qtezP?NdbT47NlN>7dy}GtKIQu1@n zqMAQ`AlbXhu=W1=svsF@YdxqA!|0Y$M1=02N)QxeiE1vdT=RUjNaGBH;x|o-R4?3h z3Gwi4l6M%>)f>$5oJ)qKBvn+QgX^^ zP;0_cd}1klC6`x{Tq-?afC9pzhGBez0d>;JWyZNB1cOmP5qdoA;e-!L^n>}{yK|{h zrMEbsNXu^kz5kX)BNc7Ex2}L#6m^X*eJ$iRnQ!0C;L@B0jiy=v5SgCogc5cPW5v`o z4kN@=@)ew2FfZd>v5&$`mUQu7u76t3EmBfK|GY}6r}iby49l$YSe7t7flEfrV90}c zx0QJWkvA(P5W{%AEJx~qMIYQ$Q-9=BNny;zIu($>vfgI6nB;kqn1rD-duI-+7i_KX z?$$mxDdp(s=*>6Y(79Qy0jQkgEbK?~#S0g9clK_)^PZWQWqO|ut^rUrrCB2l+WN`S z?#`L7fBkEB@7}(7^OmX@(dOpI0?ajWFxPufpB&HUg+%Z?rm$>;AC*Y)NhN9`wwX4U zE?)Y*-~FANpL_y}wniy1SYHUgdl1dqM4l3fw3+w(XaxfqFzCAfPe(BYhe)1>(%tH@7{OPARw#VCPnp$h6tU?<93|ZfFd}+2( z3Q?q}suZf)Jhy36`mDEa-M)S6)`g1~E?&I&!Q1b^E?D1o12;QplsY*)qCmTesCFZ) zPHfv_+aCSgFZ{w^{HZ_tz2{%J`qtZh-gfPJY^IPRt@UYB7U1b3w#fGY9jT?Obt}>A zUuzXYb~a}oe)ys7_UP~ay?^lhx4!LYs-MhdDki0G5C83-`Ah%KU;fL5Hc5pPmQw4E z)C!-VSc{ZWq)IR;!Sjp;D1Jwgb0O5;r$SN>?%t)?Q=fnGt+(EsPdW=o=_vzC=N1Ee z`s6(Va4%*E-|9vq>~_;q%HhHBjZZ&)V#Yj?V1vJ^RIHrl}kq9?kP?-j|e0=@_Cqs)}sL zuq~Pt<3bGC1IyVt6V+yQv$NURdHKbc-hJn)^KiX)sl`2l)A-&o(##^)iHul{l9j8n zJZDPO@W|uXeux(lah^JmVSIe+f#*|X=)o;$m{yHktAxJME1&pp*zYpJD3 ziQkLRgKi7Z=QPby5NGK~*9({saQzo2CDywT{zRRy>E3v*&uzYYd%v}AlQwNf`-k4R znMJy)^Q^5m?~$)PTKReo$+(w1GD#H;f5M^QhOVCf?eB%n^Q^srYJKk8t!!p(v-YjF z3DXA3XtU@EwiFt=DdT(&9p&Jtz5e<;M?dmokAL>bvwORTw-2>Vtdp6|+u4!P`&Zw2 z<)xP%{p@4C_3gHo$;>lJ6qy{25pW`@on^ERR&WJikETu*XLLg~Jf14q86<45CGxZ6 z8x7GF(U**w8WPuWZH$7HXcWMR0hTRvo}f&NWrl%sZn;bgkJ>SAAe!EQka}HFQ5H3}4Hk_DR+( zjphg$8Gaf0+Qe4a_&(du>V~`?}nwW-> z>10xPqTGfQ2vs9VLVQVmYh&_;!2{=IjGqB8?dwxx3d2mUp*n`PrD_tw60CaYa%%i? zr)wzS4`j=O$D?PoB9xqilbe}M&RjEn z2TC@!zzC&A9N_<|>5>`;m`OB}H%L@t#4D|ZvlfeYN?svyI)#4kFgvBXxKvL^Dx;n2|-(Z&nW=jv0 z@Rzo@>Y?{5qmhp$h|=-Is3HsJHH6kOUoVDKK#EEOd3oMjj<6ZE#N8?qbJI{JeTKKk_2PhY?O@pii{Wk(|oKJLYz(OXV3 z&r|N5W*>z9qF-Q+GlCLS)ytPIo;kDk-RGZg#|P8SUT@ucmm;>ZP?pAYacsE>13lt@ z>}zocr+!+z#9}a=VlEpQ zHNNYuU?h)Nt)-N5_S~7r9)0}c`HTPHAO6bk{m$?9)>sG_3ri`zwR0El`%nMV|MVyS z?2q);r&^LZ4Cu9N(CG!@>Q_AV+f!d%?PPA(u6^JSqQueBNu4GDl(P6=qG|vB_jAQh z02swnh={_WfhhFg@b2xKx1Rdk(~mv&nb%%>$F!N1-sZB|b!sY(^st;u+Ca`@!%vr? zCBi`f4FI0SCDd6>yHxc?yqB*$_|#LM1L3s3voqSe1Z0f3X#~3wXvU)iV#@6O=t&_| zgR($aclY+roIiW@{j2+T_Dd~{~n2qKus})>6EaAgg@pM~${_M8YaoxpB z7cO4B_{Ljro}3&5(pwK-;5NM{kxe4kmg~(-k;$jD@%s_BF}^^o(H7C>SS*my`oT++aJ#S3gv(ZK(3PTibz%0OlPopBxwVSop=US^~NyX9ek@ne2hjr7Y zZPvC`ZPX6!5K-0Q2YK29)kH$4IiISOx8MEX=AAo_J@)v0moI;O^NtABjf04qm0FGu z_y72h{`e>U&7a)a-5BNMcm`MmnVDn0am)-9|DCMjLmN5{!219u5VXugLAp1IBKFXV z;TQAl#Uj28bqbwOwNj#2qFWZJ)jyWw!~9-WkTJHL08B`A-folv0Apa$(sMblX}V*USMI=FD`M5k`rTWJQFT6BIdRIk-#W$k2oUB{KSLF(+Iv zaTa5Hd^n;QizN%8Bggs=gwNo{RqMQEByH_)t5qj&2tIEOrBTm4kQ z45gL~^~6Ff6d;N?G(y~`_;jHTz~{7^mEvdB@E(;uvBpeI1BBwstzX*c@+Uy2LLn6JZM6ybIm>~LhN+(5^;?gDUo$We>54A;IC4(#h1nd z=OJjaAs$Z=C{;+-T1%;3_9#+d*1HPXwQExly(tBi0#oLJ3YcY*+TFuMMCk#Wtv+;B zSB?cj<;(oCSTsLZJ6^qVk7-MCO> zg(WhF1@Rb>>ZvNR;IY+9bU31s3`1fs;G|ucT4pi7?|C<@z=ki@c=(JnM!RB;?j;dW z$BeoFq81HIneLYu!YTRjW7MBJagVx7l2THtM&=$!lTv-kM&dufPkFrzs&^Z8L@~6_ zh0O6lF*WnNm7zVUmX=H8icDfCKMW!=;E~tuNFtI!UicE0BBhk6PLw#(^hEhwK!KaZ zTuDcl89I5|A-wUA@12aB%!Y7Xm81V*LRarD8B(qaWgM_G#UG4m5~?7&dLvGMrp2ZM za5SXd`$PIMRWxZw989Uf&wz*hC&}oNEny#*2vB6WkwuCy(lUl0=BmX8$L$1#i5wW= z>`y3zH&9l@@J$ULIPI4d=~T{;0_WkvcG!5!(D$XJYwT{e z9Lfkdq$m&(BEHgvz;@s-8*hE`;fECZ%&SaFhPDQ?OP4Pl93I}id!$;Ota9x}S1Hie-Na~{sjBl#vFE<@ z#fuj%zWVA*Ub8uG+q64*sUTJ=7C%}*8D=J+#jcLO(jswQ`&R2zD4e(Rg$oz<@7{j# zrI)nNraPt`-uT=D4qKqyI&NBiv9!lq#QxNm<-aa5M9}3@m@8l zJJz;<#_0{@&h=}rzWVC_;@sKu7cShqdCQC5TI=_47aVMW1^!CY<$tChiS*vk;WM%O zwyE~s`u_f%-OY66@+Gsb+buT}(5*L=NmZp*Q+QK}-aD;tHaxz2>)}Tq{@Z`+=Pz71 z`&<9=pYPwgwX;*^lPyek&+N|Iesp|NYV4G^lVhZ!q(2HUh|}N2&1zRElu|a+&I9*9 z_{gJ={_B7BJOAjv{l|xQ@32VQ&ZO0;YFBI9U--pec=XXnfBUz8|6qUr%-NmY&EB-x zBo2(6(1bi$g8+}j#b>a2YCy<$j44Ii_Ode_9i1E=9pC))Qx3^KK|fN&m&&)+j8YB`4zFLo{_vxZKmE)zuRQ-kIeP}CI=8yx2X_kA1nmRO zk*B2iG|X@@TTGCPMU-Best9`PV%>E9%)^g9{P1V??;aRzZryxRPtIpupLeZd&wL^; zr1x%)G5HmQl;Xjp?CfrKcFqv;#+z@?C&y*l)oz~G(A7)|g(8mpO6!VJgEas~SH{3q zD=EQg4IXQ-Y)8160Qe+&>(-i}m%91J4}5*w^wS%+C}rMit&?H6M#f^fSN*kSLcF6N}KzqpMI*^p^7%6 z&V4>9eXHATsjbhnq5+@~hk21$p=M-jDgv|e!N)hQeSGcn4?Otr!w3CGk4}+g%#4Zr6=(UFJCrx>jslj7>)ev*fK*TRr$`UnD(Z|98njq zsVtr{ND;qTVyW~~K_u2K9gc|b6LEqM5LlG`#R*@ApNn}i!tJCVBv|k%5wuIs z^NFD_?y!RXw(Lp61$BGNlU$y? znX(j_N}Z-k3QJ)TA+_t=8ilZ_x8C|pKs9V&@`?tF+_NMxQm|d|7dM#F=QnR*Wx94X z4ffpB%%{0wLDUK8F__R)>J`|A(dsFe8+j;Penv!@%LU@@7C(Fs`?UIEDs!sGxGXIh zh`5C2AIg%)`SVF)eK;e(PGXw~u|NUzxB>PrxiI%Wv?ik9rYkoGq| zH$!fg9MGP>52IT}9I!h@B*6+WG+)F_X&7THy4?-D<62CK4qQbSg;= z{{QAC$aUOb=hBe}Y!+IcGw?hNB@8+m8zuZ*hMjYPAVYo`1~hS9ESH)vH!NNorxW9a z$)PNoHH7Vy7A&`*K{^?V(BdR5);9z^qKlxtn4a9fykKzbsS^bfJkQ8E3iFUR6aTL4 ziSLbJrS+QmL@O%_BGa3PHDT1xFP)PlV!1d8GZ-KxdW4fsol2<{)&Q#6E3dzLa`#Tz zsiu9gP9)8w%9*ogZ{EH&&yBLVdtEou3mSrt0O69mVyWU{|6@|oR+T3^leb+vC|D$WyWZGj9+gh2*8t83ukB~)ZlXd_qbz&)f+i%{yNx`(4 zdhZT0umWEBK^lSxM+;;6Ny;HXlWy=-zp$ttW@#^lJ3AB5BLm31Fx2ZWL}^m0Znskv zT7%BJXX@Yh8-MkS&wlZHFZ|K1o7YXXTdPy)+c4PEG=aM0^uqyJiNfAsT86z?^aA0J zj6xb8c<}xw9)IG!cd!2aU-^e0fAF4XYJ2vi8O^r;=Kt)c|MJiN?8~pd_Q8Aa_0~31 zB}8foM;FBLFeK))QT*77tK9YQJD$p+R;H;pMZr9GGn~v@&y12HzO#WJ@&R1~Yfba~KV+^;(Ep4vr4aorvNFj+1xKmz*j z6VSvcT!~-)$CEVO_O?c<6#3leKX?AZxtmvSoNQ-OeEgG?GM)}$)0V4dxEa6^QQ?m` zXz?Btq?EGR-MxJI^6i_qUw!RWM+)d`8%9bk)27xC`R0wWkb49tfx~UBueO4czN0R=s@k=8 z?JkraNR(PHUB3Lu#~;1=+AEL}d*yf_d_tO+VagI~CPqRU#bqNCz+(KcEaO0u%hBGD zyJhKCm^0rqP$O1KnD6pUUfdDIkLiRH2})Hjz=-P$D4z42kjrI5A{?{fNK`ciy@B_0K={_!Ez9e!nzAq?iagSVc*h%6lJNeeKm( ze)P}$X>WTaLiF@>SQX(9-@ID1P-CW6uk7k+hK)nUR>uiZVeuz$acjx9I2b}kvn~RX zQHGadrTh#qFleE;PiK-u0Z+s6(ij_mMW#k)&d!L_7Gx7`q%Ev1r1$`L0^*~0Eglo} zqajl@6h9Tu;{@-|LAB_tshvTfc+#h@XxJGBZXY+2NeL-&Tq_T;Oz~WnesyZ&b}h`) z8ZM4aO{29 zLql}Gj&zpgC>I$&Mmru16KduOdV%@<@K1>B%$#t?TNA;9fgot|w)22rFiw~SEYVLI zYF>qkS_&8q$QPfBwf#&_;ki!!Pv)92UK=l0@3S6}uN9H%rF?=?%VyftsREE%ea1*P zl{s?Iw%fV%(&o9hKF?muPD=&|KFG*L)yy&EB8lIZARjAa-jJ8pJrWlxAla{fDE-*5 z^w{HnK-6mZ&()Qf9!-v&@K0R1;>8wO?%hX{OSLrgsXNTVFd0TgfBTeOeqqlih>h~&QI_Ww!r~~_!AaQwnqVoWvi31 zk})SMkNY)egju><&vm4M@Mwi%rV8zgsq%9GLi;M81Zt!1hUSU@QHxgn0L*lx(yf?k zSmvBMzygb79x^9q#^NE;U!phL=n(9DE;@ZEwI}#NH8Qr;dJ;xJVb_)O2^Ne_0Wd6A zOpxRd&Xgv=J$P!Xcb}oc=`Dg>H3tDw%#-XiZt@LTjrbLw)v7+= zYaI5`G?a4T1wpR5NbCusp3fzFN{+roMS;7srm8xFvF)nizSq>9Ao9b zT`_Wimu{`VEAupSwJ*yJElX$7?I?VUYVW$)Eyw$Hg}sRmd`%%#I2h*_U|6Zw9`(S6p4|y<6(z| zT=EA`6MiAj@i4C0+7;$qSKIk>=g*xx{|CSSdk1&-g?^wc#PJ%|u0yY}*_LT#0NIho->s$H~ixBGwP zXMg6e{On));N7=hdFe%HlgjO3^OWQ5$qW`BhV7MiiT(yZGW<>|PkJ#DrqFJsNS}4H zH(j}M#jO8>fB0Yh@$dhE0@l?_z@(J<_|B70edX``um6)zKKbP8)ps{LlNq{sMuusR zvC7EW0oPJ;h}vpjyw=stkeaDVQ^3$<-foR(ttlKzl2V1#%NAsWTYuR-KiK${eg6vr zxekxFGoc{;AWU z)p74wO4k5OBemM5@pNk~%Rismfm}!f&|8y2O4%MA-M)46H-6(cf8tO5#8^QS z=V1S^cP~Rxc1HBOr2pGJ-?%A?JRn4JIn+#h>n*3nVsCeE|L*>cPp+GKDu|+YXtOq> zcWn(*Ma+MN2SjF(-Dlc80B^HaDJNTf^R0K=pZU=zpLk-Y)@E=xD0MP3Z6=UAH*WsX z@BPu&zxg9z>9Yp7iSQKo2B`Cgw`^Cs&{V@MnZYw(5>G|PekAxGE57Ur6Az6erAT~CSg}Sv z47JEVM|?DtKGuTiD~&NlM+reBj>KG@Y)~2R_0F44e$cxFEL8#qgSTYLDFj9bjtY+q zr4;XDz*BCReO1v$?c-;HL~M6T`oW60*`eA>L>!3-^F1>=TQA156nX zCc$7uq^qXKaWco;l)xhBPj(k8_-i48u|8oXfD8Z=b_M+N+y~?wt`VnLvNI8Yfd&DI z0&#UBU}aV9?x&u?EN62J0u<47h;cu#A~iJ~Sf*X6vj(LIg{4TTWtyg1OP#7naqScl zcGe=Tbv5jeGS5&`)l!P}J~S68$u12MjDw&BEtpbmxW}J*1Vo=cMnK4(1=%YnIzqOU zXN_e`;@tph%}^Av`pZ|Sg?W2pTj%~{cVI3)dH}DqS3wi4awanJjO*Cw<~`UP(3&moD|47 z643Ge;XP%{50 z@7{UPm1*)dir($SAlEpmDjY84MM;pYcfhtM3SiouK793~t5@IQBoxzGg91$ickbM| zI@McuZW~J}MT7MYx9jFsTeOU+mHl}8;3E$|_UNM@et4};Rf+9(mLg>;%$SjJ=e95` zNLZ8Hko!?jQq6raw;>d0@0TuLD23m9`IYVQQK=i%RyNg-X;{QGiNBFw@O@b4R9vu< z%2@toE4bRNfwE3e6k*md5^j~vQ*>_17lP|Z0}$rar=qGxmQAVU`1s`Jr#Ap4yXn??VW}j|RBAC}Ei#?0RMqXt zkNo&If9aQgvGC;OSH9KexsViN0WD^;I`LF$ftP+JoK4{j6XhO5NKKz5BI>z;kZB_i zedd8Hm+${4|Kz{>^?&+L+PtOEtkIiinqIhg|9||;zg$GFefU1TN*vZz%T#*|)&W2W zv$-S@XI~-q%d7(zH5h>+rJJ^+6E!U&rFy-j6p^lw(WGEe?%a0QU;@aA8*T)KCKI+C zEQEE5#Bx;@Zs+aw>mNP+)aSqO%;$gS!;iu4Sw~=om*K?*kvlFuWSA=fJ1u-%5=`j1 zf29;!XTNaq{F9%1bh|y-zk8R0?&Z>yag8)VLn{ZG`V)mb@5Y;lRMe@~GQIZ3>$h%x zTBoT+Asqp4n@~}UfeLn2W06uV8UTfk#0G`_+WLc5H#Vwh#}8pKq!jeuTNdt;|Ic(pAFjMhKqbF9og`2Aa!mmJj}OZNI&#?se?rKBMz z7f?W-|5alUn21Hyzl9_aX2`kbQKn;{`iMCaQVD^1I>~GzN})=YA$7vMe{`OgTMYat zVqL8pryXx&2doCIAh8inJ>98QMS7tXzQ(_hli)ZmRi->o^qjvP4ph zsGI5hg^M?D-MoG0HcKVc6N9|Bs%aCNTF(XyP9w?6?RiIHvIw*^*7ra9c|Z*9vYD)ix!Aj+ondHekH-??@3)|CezI%#Gjk!3+}YtB5^+!xMqOP+h>a}CW{ z?`E{WNmI_#d$+dHV+KMwvTWRN{Nq{S*}54tS}{|TB2@Gk#RD4= zoel9rvH+4Uz}t04F_bF1r#_nXjv{2IGD>S~5jK<%Z#6)oF)$2~_Toz=-Y&w=b3=40P{(#Z2l7LCEnCAnoI!0Oa?I2lJp#e4E6X-K@=p9Z0 zM!R^I7#AEfvckL4xXd^v17&Szl6x_Wp_)c3pcROkdfuHsrH2@q4V0F4ENaj;GVazF zI!h`oCEP0c1rd=5k`cPZIdrAQCG4bxmK~;0`;Mykx zPsi$snbUHGga}I&3d>YBwQe?3DP`JB9?&S1WGNL63k_{T0U^#3 z=Bzb=_q+_La^fqe@CLSCI)1|f;^eeAgmpG3q?G0L21R#MmU%P?JF!44r#eR_?E(Ua zfcw+PXqig_EPlF3)Dn|lqDga7sA<9g<{+?y$o?!Mg$V~WA_Rf=@Td6ZGX75#Xlj-0 z-IPGsf^4fETIcwib&}3bF-DIbZ*nFgRz&771Ul@pZw-6}Bc2~SgHeFCS`-Iw1T5R4 zI&VSM6u=P6ao*uIs5EZ_r3_+q{yr?)8l&Yy5h%$mx*^G=tw=-7;4v~JIn>l# zMdD#G!UBdT9?zBj7sD=i?5;LKk8Bx~)_b)eEBKLY&k_aX;nK>G8&lIAWidr>e3z#h zmf~#yRJCn;A!z!>n{VFu@MAzcTO@e|5~jUfxNuR;?(QEMYD}?Uq+GcmY3m*i*|v9W z+E2dlg=fy4JOASMUW7Y71L+gxY%C2DAFt@L@zHtz7H-ZvBZzo1U}R%lx^(IGty?dA z@5SCuz|vbQn~kX&1@M`A5~jsJj>{g6jl%!LmrKQZOY#D%r&tN%_y1sa>TN@ejAZdd zWT|JY9kK2LwbtpGXTEr_e{l2DPYIlyY-=sO^(f&q5C-Jpjye*OflyT4%=Nupr|F5Q3&f zAX1>BC)TzzMZWQkuglgoVp+gSR%FQqA#of+Xamis5W*tDa+=otyyU)5W}SW@PD3fw?k8lc zV&sGy+A&S;@97g{qK?EvP0K<}-uvXK9I3$m%awUptbD$daiWJ)FIlb9_pfe1kx@Rg zY+)%y+pJx+8V$W|4-XGxj7GQZ$y{scy?Z|nTXb$@vyNL%LP*0NA?Cw)V_m2M=x5HH zIeY%%+wZ(^aQ6^WRJ*aWnzg3AnKtdSQ49q!)?5=Ex)y4dbfR?>)Q>;;^xCx#pL+O_ zE0->R@aeT$%1P@ew5||AAt`UX@%sB$uikh6L+zyPoZZ;0+0}C;xVAD>i0*_VcuQW^ z-@%M47d|L;D$$dMjT*)&tfOYw6`MruMuBy;NRDt}Fdc1qLOR06q@6KE()?NBOs{V0 z0q`^|#XVjg5qmOFtAqRE)=h(n5QtYIAfd;0jA10qR@T4K-wnerdjZUA?VC0;G91#?I&G}tKojBI)j1_5t~5fcW~C7{@9 zww;q?HkffUGYFza7ta1zM5JTy2N&o~A~TloHvDOKGWPM|l?017JXVj8n8AlvMf&hh zFGUT7%s?gOV?p}}KkZ2|DZxTQ{PeDv`1pAfN_1FHHAqx9_@5LWUrf)3iijAwiN02Y zSRDK2_8O9-2`b7ejU(cY@b6BPc_&>^JVICv6fHX8^3 zv|z_!l1drr<;d`3U`6d3q_(d)$`l6F2jvEFC4s<*-n*wdM`4$`)rrl8K_mFG=JkiG zu-uS6a2UKMz^*iyH`!~w`;L%W!R{GurtTM9=ZmnxF_32D2f}9tkQNlYk2U1z590l3 zJaiML87lm$Wy-DK*DUt1CfCVX`dMpB|=4@FW10TJ;; z8;c%Tl*Dk6eyf8^&bsa}FX^ZV&3;8BHR~dWHNjGc7<`O7`SF72?&QhZkzcmTC|pq_ z!W<-E3rY`5!LZpx_5cDAoutEW7-A%~<30-KSzmtb<#u!+HDtM~X6pw)B{&U_YXnTnWbDQ#}kX6I|)_-dV|gQLT)X0$q0#%kMmoCG7wQ(9`Jn^|Uz z9eKh5rBEuZ_j4C7T)uMo%{N|u@9I00;w1&WbssNjD4aIl9>Py%B1t5%%2@dP>2zqc zg8j~>+UZwhexm(}Z?g0SvNeZ3!we6Cmw(Hx#zB5|K#qSyQNkD zz4cOMAO_!10a}c?4OqrBrvPGP7-F@u_-+%3uS15(FQs}M7dq4i>kN)X@@8A2m_uhL~t@ozp$OB4P zM2|k|45L&Y8f#rL?u(^g>2ElX-jvyHlR~m;@4mxkro9y@(Lpl>#f`xtL`jRR|VHda_rs?G2u6~V{n%;?CtWgOpCRT(HTA#Oj=P!Tx z%g^4vd$+YF-l=*LRTZh0ap}VLELyzCjDJNUaS+0>SR{6Kb}nAHaQ)+t-+lWnDb9Z`dJm|8Eu z*4ql0s%fWyQnhujr)R0wng@>qd%#9A_hOxy&TkYaoYI(lygy-~h|Deelh=?-9DL8O zh&0VE|2ofgDlnmGDRp;m=lq3pt@q=Ttz#iog~1y^Mre|djd^fsgDiCK5;n#;h;F8} zR?mMud-mL=%a^Ww^kJX3lxk)WPkmGGe}djIS)>TixpLKH;h5xkZ@rWvJ3DueZoc=y zwI6xo!tV1t0!GGqA&Xf3z_|5pncwB>5Cz`` zLIttR@S(whz8Ap1FcuLvB~-GJ`x6TvB?EEii?4G(OM1Ufhbunq#N+L7S*f13+Gf+< zkvio8q+}eusCNKVhkheb()>BX4O>P)^kjrcqCt{PG=R>Scrc@CT`0<&svSVV&6y9g z$!b<}1a1P6B7kagmFbuw^d4#h(gIycoVHMkh({I(Yoa{?l5cm;ScW*(H=_i3*iZCy9D^ir|35}=t@x04aK z05GG#A}(j|`Eo;!{R?GtGLWLemdRV2%DLq03vMO z*2E(j&+ruS771#ZYheyU2+%YVC|z3s(a0wXs=9lg74oQAl}>oO78>B%1Or8splI(R z?7b10Tcn);A-mvU*5%%@$MwK7+%r<7SAbD zXNy+e!llu%jKeE6^K4KHt+EVa=uD^@2!*F`0pcQ-G;{POJ^H==uDEVoxARcOzFgTRHFlt2W#o!Gx|DZ z{ZBgs8_9~xE7srpIz$lSf|wkB-c?4oA*Uv0EPH3zTi@=>Zk5V*comg%$xP}t|uoaXU^^toVV=@Uw-xrUwHbz_%Hr%zxJ#D)S<7}Axe=xZ_l2;@{7Ot zH%qPWz4w8cLTr1~&tBY}w{6BOB7R=ymA)A~xB(g|*@1X12V5kbMv_kcYR?fOK|6X@ zff5W>(SJ)avr{p;P&hOgNh5Yjpv*n}NUQ-`_vs`&I5@cZ>CLB}dgg(LAG!M4+p;;| zPiEPz)*CPxi{ltKz-eIvxGQ*%(0-o)t3kaPH@eM72eogZ?eRw+-PxJ;@9sOd=;fJ7 zm?1#mIAP8hbmWr9^N!FrDH=5`h0`=$xpeu%Yad>F{{u5^+u1>d8t7F*EEJy`MUMbS z*Zu+4VTdWc+4qou(E;UnY~Kj81rPY_%sv&-K5vhXpiNJXAAIDqk3915r#EiQC);QQ zYmh41)nSagA)bl?R*IW<6a=e3teX3jd7d|$z1`iN*I#|@7%uY1?e3c5*^u@7&qr!-Kt@E028U(YtrwVo_LB8b-&}S^qb18? zrQFt}=PfMzs9joVCDQAypbqlh{QT6QaiuVFMwTKyOox;LL_Cb@jbmsED-8VRr8T}( z-m)U(SP1or^<1b#Z$4^fmSa*h;qOAoghTU$e+%npi0p)sU}qlEEnXl`#~2WH(CIz3 zEHKjASb3?Dg94-w+j5kiYPohhVTuvqLm!S9|CWI>X99=H0#m_i{CUwfD}ZAAo{ z;aeVlxWITmY>Jj;xe&rdj=?y-x1Prk&e4@$m%=q~K~}0g4Dj z#M|+ByJCzJpa7(vTEVo_8W|NVwMwLoIGaoJo+RE{#Lb2C21Vda21Kko&MB~NUj9OO z(BFIa%oZQAVWz>|NEy_t4_|iSP^hY+cy$FuAU+pcSVU^AwG@d#X{KGJ6hMHk)>V}h zKt1g8F>R*W=I&m6eb}7+e23mki6N1ii@o+=5 zb_dlF`Qj56a@d(CV3|m5r03eWL0D3`93OiH6XCf4C`AkyG!1~_r`aCjteW*2d~vI1 z29Yu8mLj3Y%tP1F2`r~~Wu2b)H8j97(1}VIk4Hl#{4q>D{&X1{=EvD$v!y#X@&JpG zP?EA>7=#5ztnG^^B2uJ?WxVSaY5;REx51}=!suAxEybof z`TfL@bANr>uIl7QR)VQ&&JDE#S=^;mC94BUG0s=B9W+LQHcx)omcK% zqwLOvKpxwgusXYK2tvyD-TUMt$)7OXlGRhR;1I&?y3TNTlq68oGy(uycYSfPDCoq< z&v#RWtW!gH(@YxU8oQerMKqJjHzgMvu*Pn?rnu$zS`{MV< z&=+Q`#X6yHPo~|?wQC<wVhU**kmojjJD;30UY1HxhKlwV~Fx zhx>&c(1#v$Na0$A^x>5>+#Bn)urj(}h;e(Go{_p&ypT2$j<|o&$1CT1) z<87%j3WpPO+3Lt4=ERX~y%kr?sM{y93!u}rt@R5R_x5&o-+J@Slf%0dZ~E(L(iSzE z=oLUe_{ulF{J;F=zbV?k^@o3OxPL%OnWQ%@rNS^x8-v&J#5qqXU-{~9{^oD}KmPCk<qze);(qzU`%` zQf0Hd>D{x(t#=Iu-XuVxt&vh5GN$ehw9YWy94{tPwAX>T_s_DMpJdXrm{SqW=&m& z)mU>J;e*UnyQ=lM9UauE!P+y=Jay*m+4nwpubcL5bFqRUk7hA)H{Cg<`e24|dP>*S}l-wruKRZ}L;T=Z>G{P^y`jR6oP^=9s;i71P#fs$DzH zx<%`iamGx8m~{)|!z3T1c=PAzHEm=OikfwpO7(eiersEL?SR}%bS>&I2Ifh9ZKQ>gF*_xI&CN*OPzL}{M?g|Kla2&AAh*Nzwh3p^qPx_>f1`-NxDpV>RICbApD`-C(hO-gy?)tBFY_v#nE z_NDFCG!7LIU0E^%4xv^mK~-T$1Pl$?A!$B%-~VCW{@^` zLBAVAj4@#>drFQ&fVg4JJ;==f7DAk>y}&6{c&|z(+Jk{P>?t4*e0WZBRfIVnpi!$4!q03l6LT!*Vph{cl#9UtaP2U;6hOo5u5 z>vK{g(Rv0eE4<=8SbOv%Q$*@xnp!`8H5<(sGMr!df=K(1GzcZ6_~A5AOI7ry&D2U% z+rWJ6w6lQ{DlDjA(_JvqZhHt6_@Q6cGc2kRr7R1$C;MX{u9o9anU3Gg8v8 zOOe7NQq24Gl*@XFVyLiA7@+gq*ee#o+rt>8E z^eOpkh-H8PS}nQ(rO9#I=~gAhHG!1#H8}`*2r|d}M1s31z9o{SZj3@LuY@9lMzK|q z2s!etgEn#v460>>GCmY6Iv{yR;mm0!pl00^@cfkO^>qMLyW85{t=2Lq7#~5NTAAi= z1)`)BW?>pf;N;O#kOi?lZn&UEs&$A2)8os<|1H5>=#DW5L zsuzaRn$04`_u3O-C41%rP((^ugj*C(3XLi}jai0+-V--o5=m?E$T`a^m<2Pyb8P~` zvq!2+C>vv6s7bZLgi+8TDA6Cs=ZI-1jm1mfTzF`1i?bECn^^6hLDszGQ|v|~9=IL_=+ zScE8q(3>J>qqms(yjY>3q!tj8E;iY|3QSHu-|2;!NMACLp_vT^7~>eiEDkO5ah6XW z#vzb~q*8gz?+L{MAGmD>x8!CVZKKAZIboh<4aAaWBqch)gKuPa+0$`|KY&d5!q{AT z@at#p0$t-b!{I|nzedx?V?pw^&-m0EghXZG&vio>I0gILsXu5O7wWC}Vr+n#9c z){mZh?n{?1-}lFV^oM4q*4wPp&aSC-b`se*hVd9gFn*~nV>*U)MVbncI5KK&o+`_< zxpL+5`|rK?%FC~6pE*@+>LAxM3k;Pg-~@L2FrrJ00Wg-a;aKn+gLDnsF9b{e z7KvP)z#8@!hy(xpO?aQ&$Ph}&Q&oV{4-ZkLPQ}^@`}S}B2S5MCXP^0}zxvEK^x?-v%Cs|`9GslJu&2$`Im!j8dqR9z?aZ1f3z?B;m#L-^;4Wlt{%36A zIMDH@7`EMmyTol#*XdwD6ZGdl;S>GLRMq7Ko|Jkr&$sW~-q}oF_~Ns_{*V59n;Rz4 zlP&gkq1{Wa5i*#g1~_hz8K7gaJ81$!;Ns|S?(=aenC~84dEzsl{oLn{Pfm^wk3`D6 z?c#-#o(G_#kl98aXNGMf{#ha%$M3#CUR|}fw>NF3=U@EZ;r^Yv+3nt$Dv}&wL)RAS zBYe7tcn;u53X0}2@QB?;0@rxh0ntXBOto%Jw{SNH2vJMWn1CVcU2H9yd86xpSG%8y(jghkp9eDIT67kvS(IRGudUcXK%o$)S_u=F zzzgXu#_mv6pdwvLkzzz|)>(^n!5pIu; z0MxxR+Pj|2+}W{Vh?eEaU~K($Z`8_D-x|K}$KirO+E4WTYu7)z zdFzW$J^j!FS6;pPNj-O_&1#A=P3*0=R;TIK^-o@Y>7_4xoeOX;%xwQ5)?hO-leG|-JK5)5a!2vs((iOvC0@|?>MVy=Ex=Uq*hluA6X1tnz*LLC*XVb0=1 zozU?2X>>IK;s9VZ-aDjxF^MZ_@eX~K-Y8Id_I8QzG;iGoJa<1#()z+IMWnv4Fo8ME zOuV>cuwtH^=2js^zyV{}8~>owwmM|Uq60CZLP8398;B#`=XjVRmJ&B+X+=}&7!XA7 zf9q-6A*W{1S|m=4)Q7}rv_>K^l^PMZMxB!O?$L=)&M;F|^_HdsCW#bxbjV3i+M}hE z->{hpBu45n9A7PxC18$R;C+9lQao-e!rogE5sI45Z7x!#x`|wDS2tDdy|*pu9v(m$reNhiE0)aLO%5=0zL@X__M?Q6=cItk93x8bfIP z$=$4Y>myj&D_$`0md__G^%tVTV z9*e9&Q>Zo-Dd;13meB;O6t9R4tC4N+To=;wVo4)(Ng&ceMFY+=U2N0(d&LnE_YJA^1RWMpvGrFex;e63Zh3Z96SeyqOM4d&XlDt*WH<5oE zMf*rLCDI{?)zNlX`$5l@7zXAtu_9?WJc8FlG2<(7az3as^{~mab!w4Pq!b}gJxhwI zJKkH%ROp8)fVY}j1#iWx$3~IPP<0UL?7f0C@KrjUFz+!x2$_^)xqZXVTaxA^=%Ey4 zdGMq+7JGthC~lxxag*oOx0=#B2%z-C!-sh`X@U%2c8$}EC1i3wA}kqJ&mE5rzNpYEB^KJZo^u3D4 zH$}ToUy(xAvpdp`+R-uF-Cz6s zSFoi>nc0-lH(s?*)70iBrChmkLrb&!m>xHwbs@_lO;^FM0x}*r{N85$h~rzN+|^$JG(niKmF9s&ffp| z|MGwO_8lx!MO_${=zT*!e+Di!*9LJ=swU&mEO9r_UK1_F0m+R;BoqE{ zbbK^#=dV8ZrJeKV=UL4fq@d5%=IF*0UG}5)b|i!3(G!LpPE#5Z0c0UZSL=P+lwR@F z(@))Z|9yu?cfE#GM4Guj(%}z+S4x97mTjdiDO-c72WhC&bpHH>yZZ;PzWPdJ3&Mp} zK!FsN;@=>?5uXDEV}7qTlDN65?Ml;k$`q>kq1ZrN?xEZlluGNibME|8Pk+Amc6@x? zyIP`NWW`y4z*M4D^gq-(!k{5pw;Vvy!BW_j;jxe35c_Vb3AqZ+=1vj zrtq%1#izg1M+bPYYW--wbIbaPb;4ApDNI9;K7`9XrxFg~iX|N=LB_T?XE&~3oOY+3 zojz?09KG+6sU=CAt>_yvpEy<`Vy#hlm{(X7cy&LqC}X`&35X3f%x5A>MF*&?Mpg7} z@qXDTl`yzx6T| z7TMW7^YEjOeD8%9?%e!TYB4hiOcml=Z`zv8C#@UGj-i7i`i+MlQ@C|2()(08id?^a z``v5TzW9S*dh)Z6y>|6lEnri4X1P$C?(9s*N9}vx``%CgmA^dgln7$Q87rkgyNN$t zh$qL+EzD;u>d5p77&ZPX61mLDRxQ%*?~3;)#V|Ag0c~JQf5wC#sriY3!{ljtw78}v z&taoV&s<~@6lOdUb8a$)izC>KI3jIno(jjAZg2$a1+kF4M02YrigQ51U6`M4rjmFW zL=-z)sBg@8vix#;nNffN=u9AiU_7F3z}X*NY0%J$F#k4q7#E(AV>SL+o*RjB5el2u zFYI6}dtllX)bL#cEcz|PBqAoVvs}FpthH(nN%L+V5xC1h*#r3rf^c!j6|)gy*iT57 z*=RV(mF)RAjQBjsni3MlI|X_BG!pbqzFpQDPFL1(KP1t$(Nlh6zic(&H3Ol64007M zGTX>JGV~%WdI|_SjoQ^u>y0QZ&KLpWUNR5rL9+YAqQp@oqLV`0JQ1m#LrC~FBknG574 zcAig>NRJ|!C9w!t@6OIFkhb^kUCljKM-or2%Hhz>;N8YeGByihD0TbnHm0Yt=T z);l={odSr~GM-x)yl)}8N{GTLyi9ECJ18Os?*?sZHpYUI^rH#Y4pm5{2HO}ux_5_4 z(d9`>ty5&%YPYV4VV^N1NYy;kH_Y+M?r|x>4Z9H^;X1&`pNy78+Q+jfEsT#JdcoAJ zc*UV7o#i=67|v7Y0d8wNRSfV_6mbH{YNqBz6xCy9P9 zWTeYk5~cxc(~ARf=0WE(B0b8~yw6MA2-yUr5e6n|L?|<{Z`_F#qmwx`eciw&Jh3~d`2B@tQXl=u3I*pZWKH z;jeuB(Z}EY(!>b35}% zV@yGyjX^Gcd>m!(xfdg%U8BehsRLUlN0-5a27iQ9NZ0p(!ixo08(U+81H$SRD_9(0 zc#!F8rrkt%xPN&2=BLko>DdP!diedfuEO>pg*z~qsY)r1leq4=7T3;7~{$Klj}3&h954z2AE8DrI6j?xlve%EvZjmC5o<8U}OZj)bX1jC3(tDfPm| ziyvOQcJO4Yu2_(*{#h`@sN>~J3Nsls7&`#8 z7zfekPSq<{9(wGt$8X)db#i>{LQ*$HyT+l?h^K~u9Hd0XbgSsi9M<)SEL24L+_&3p zE#({E_<;u>e)z@<-{Iz*pZXXnwU)Y>YK0V*swj|XpR!JY;EGbm%F2Y^4C%EDOmpK; z-|Ud{RV0u;cZ5b*{0Y}@^WP-*W*8ZoD{hJOK_4(!r_n)}u&dHXv#Z&B=cj(=&;Q7e ze)IZAA6r)n=GG|E=H^Z1)ZIWdw+nzdEWD|wRGIb;bUzBBv2JRWBBkz~JNxe2@BXuY z_Ro52b!V@2u$FxEafXvmoxse}|6*+F@{$$(o9x)|_%0Wx7A!fS2+{nyIs#3==s`JY zu+D1Y^Ny__9bA9pu_ynt|NK8YckaR;{o(KT-VNTNl69*7^awDlmMMqh23#21+(RnD zj*);Ande4TfIFL=vuDq}{>Gc_=s-4SO_fDdI|1uz+Tn#`@DOTzxoZ1CvS*|idMib? z2lHgIe{lTf+wbw4Uw-=O&;R;w{tjC!oI1R}3{_PC8ee|pr8~FxFF$a}wmR(;^>KSF zrk?gU5?A42RDdxJFouOdNCY#^1@j2jV`j<08lX2VS&Ek&-f~HTiw!o<_{)qAAk!Vw z^an#WZ2BVojOaYOb;Ckb;YLWq2Sm^TU}P*JQ;IUiv60~5cNOEfMx}BfV+O0*UupM$|)Q?lod@Z3`r}WU$1G4F;j~-YxfE zmMSgy1~{_sF@eWmC=@j>z6^6nQoEV;g$any%*+iei6fGHf&ZU?Mln^ws))K$3=8WJ zVYOtDUJO7Z$Hw75VU*Dt5+3Db#AfmIW*DQT)BgF#mB__&*@Z|kXc3O-G7GRJ%uq}1 zy{q+*RFP;X4#1Y@PYW19NR~o_WGTf3OwFo~+t#>F?<%GA=GiG6`UdY)mihpuPWv+Y zIWb~zTYR^8#L#zS0fZ&eU*K{s=4kD=tUQ9YhS>u9mgpD+&D48Sc#RBK&482P2uYwb zEdYv?QMcvHPa?Xg>>NfPphYhg@q;n781>~k(|a$aFsT5No_Ikj`#CJ zQ!Ys<+2jnC>4`n_){x~|-l9a8p3q|~qBC$|NZeMsszRczw+n_Vz4wInAXR%8iEcHC z0*&5e(Qib&9SLcmSl1Rvv#^Mi)G85{Q3AHyW&~?YBGZ3N zc}NEkI_1bGn4>6W7K}J2!QVLdi)7jn4bg|sA}7<++^G4jhMvS;C4O857tFIePxg@{ zn>u4sgONS^e-9ccc<$lEP6N?IMd|JqJhNo}2R5aRS4tte5xDyP2RAf8;Oz z8^8Rw|N5W*$#1^<{k>&*kHSN8*VJCB z+`W5un!M3Q;6Fcxcbn{cg!~Ow5sx|R9y(5t$O?BE9lDZMD?eu7m<9b(PzqVm4~{QhIQNBTpMv$f zclX_@JE@wF7`qm}-iAiR<9-=Ovja#s6RG zM(PBqEH#pYx@)NWPV*Y86^;wkk9(Kb#{ttDUbu#mh90TffSS&aKJxHGpLy`+r`NaJ zZJnk_&P~Xgk$naUxq8Ue3k8pb7<=qzzwj*SQaShS*S_}UU-4_FojF1}-Y1fie^6t&R$T&V5%K)2gzl5hUlpZ-t&<6r)Bf9_BH5C6lz zynXw&nh$L1IsbG)93HX@qQt|Nj|^&J?7L;+KYYANsSiH%0D(XL)*qwPGRb_>Js2Cz zqM0(n^++rovk}dDh?;jt1`E*4WGd~1?|tym{?XwVp8DMRb9=|uO5OC%=;tj|)oG`G zc8t_cRl`VS9x${?pnCIWy!BHZ9W5@mR7m??=8 zb)B(hdEywVq#09Sz4-!Fl?9OaqAp&Z(G+r}I;m(3x`&JO5P3#v!+-l<;v) znu%LX4h!C0H;M@T@Hh`?mg9NPfXZmar{P3MsOkQqOi4yF=Bz0Wu$acf%$pNtC@#`_ zchD)82{){D7$;hG4{N4G@|iI3WlLqp6QpRZ{^t z-V%v)ER?Qlv^-OXnifd_w7E+;M^$5Y1I%v>L`Or0|p8=a(^Qn%)@`MJyVpx?*IJol|ZD)~_W$ z(%@Xe0kZliF8>UP8i6cPLjvT*gi)5h#|zMmo3OF_mLVt+Ri!TQ0sUc6?Uwa^ddeDk zM=wvviM$);gd?8-1Z2NTH4BDNqy0_p8iAhNuo%<}$-=-W#V6dG!soSvG*UY=2`bVH zgkH!hgPEkISosor8G^x?jIiO(J!v# zP%#l|>lC8F$69%ohd4dwqLB9-N<2(Uf~S??h)WGZfGerwt)ZV-4R+q!ukc8G+2zUI#s|YdX zG>zaQSA7I>ZbccIm2{ghste&Q?U_ZQ=rYK9+-N)L0|$clhzjzv(&T1yd>$a_R) zl^Fn$Fjx$qYKVTD3nx-3whFqKGdBmE3O|_;#L``1fX2`c_Y6y@5FR~3K)R1CKIYJq z{FXlI3ofU(*G8lym1xO~$l9ZrP`h@238eQp6>f$k3Kf_vq}}APm^`i=8f>jrsSAR*MP_}v*DsG(%;NTuxm%xy}ix- z4?J+;;`wj>@DEhsS~DqSZ};r9yJuFiV|CPS>tccYJIy(bvC1(j!;`^6 zO2#BpS`?pZyd{9TpSUSTYGO*B`BWkRpr5XEv6GX2_RN__KJ&;A{pb(=z}LR?<3Ik@ z3HXCQ`p)y;{?@G<*XP!hl~U6k(wpZ?NU{-a;|kG5T3dhundl&NgDGs$Tx^GTaF6{@}Gfp8H|>R#eJ!cRa~P8I|` zX(yF@lpbgFM!=5-91^?hiWF_j`4<+~$@IP@TwVn&i)BfwGt4Lutzo@VNp0Kb53gN& z?#s{p&<}s}*Z$Ezf-0ywH|`kBv@5Fk7KQ@5xiWy+zc0d=Q+-fv$#O%VTh-Q2jxRp= z&_fU2e|&Vfzki?|5S_P8s*END&{Zn_Vk!fhXT+JBAAKTRDhOg{volRQuf6ux;lUvw zsvRtF2GM)pu%Hy9NU0DpidpuU%d9PL(qu3@o$rH@PZzg`FyWbe5vRpuYpu^SY1+5< zKk&erGiTm;>vo%)A9A_1;x%igqVmu3r84gO5IW>@yEvI)DEC>&J5Tob_%o3kBPg?at2b z-J3VR{m0+_p&$FYb||b)%qEZtRv~8E$LuFRR9tAv1Zu8p5@ogs>=;rXfm!a?;2D{H zbTy;;Y$=SR+> zdQY0gz&Q5Kq#uGJY~5E*DBiLY(fNRCU|F6$$psh~uW`E=wweM&zJp1e<>3_J6?sF< z1-1d^^C1I@C=%m@r9@)tTs_7?=3+qu3%OtM=k;nw0v)zkaKPtpk{+}oIU8b#NH7VC zMIS7L#w|?1NXtDiGnH{lod7vQx$w)Y-)E?&F?Yok)deNu5kJj0Gt(l0_k2EQ%A{%b zYK(S0W>pBnGqHS&4N&O+pRhlV)-6l!0<%CUy5F|$;nL<@Q$ z0a6=~1T@IQ0t0QpW>`xMqTOw;<>kiiMoqUHw;Q*c27_3Dpb;t|Br%#vLMja*0P42&&7 zT`~=IUetPQzZAnZa*_I-QSw$sD5CX>z|u*Z1(}t#N90YI$Dv{lW%A(L;;)i-14^7S z1Jrc94%B#}QDz#Eh^J@-P`)z|Ky<*`f-Bv}a}L2L%fz#nH)7H_&_3RI*4fhNQAAdw zP>HCrx&$3u+9R=VBw#E`jpJUO1R@JwK?Y(R1CTx#`RZZZT2in@94r2AwShC3FgI5s!SQbU<*$52ciVQ*`Z1OB9NVy;Idj_Jw{9Jh zOp&E$5$mD1k~(S*g?GTr^u(z%ANj}!508%S+_@u7OifxF-YCeIOs#-COMhzu#W30g zWNB*rUsSPDc91b2A8oH*z50=le)!M++5Z!Y2k+ehs9CHHvlQ*QfR~E*>v;QMwFldi zosx<0z0gBMWUD{SSGJ<%0(unR6aF(#PuT}Eo#98@zS-M9b@J5xr}u6h?k>G?@t1z_ z7hZk&>#%;})ZX^i7P6^qU7o&bR7QanCn8~4Aan7vwNLYog3oHLnb~G<|J=FrZ(q9f zxzBx$SSa*`$x;;F`ZVEBe%~Ma?%(olpZfVjUXk`%}*tDIe}6O`dws)8`*J_amSDyFc|)Kc%J-lahg$two_UGM(X zr+y}^RyDm^p99l)$&(Qgxn}%eT6-xWhlQ!HGmw1HYIs8KFe*Zph}67BsD>0Ovgg!8 zuOsb>yOo4|BHepFmRKgg959-Qm?at~Vhqcj!`s)cUitWQ&z^bk!P_^F0E2aRbytdn z#684^=cXE^Rblip+kDSePyo1j2Uegz`q-nV&z!z_=VtFSF*%dXHp!$>-;Ts;l+k$g z*!#K#r8ZoK9Aug~Tak9^)Tw#yU-{}+-Kt zP@muPs0Lz9TfnP`2?M4O4X3txqi=X;FJE@gfrj7Yrpc#zqmWv637h9+_U3;jSsR?6$wl!@u?%zfy3<*q_wF{=g*(JaN*&{ zpLp`Szw0|6dGP#KUwq}(;qi@I+vDv{=dP+ln3a~hBowgsdSuI@jOENH7tJ-EIw|9! zl~lt$Tdum*@*9)~l9`&c{k{FOXU{zH$Ri*8&@&%-_WkdF`Vj)I-MafTKle+Y`|Rfq z@7|V1eYU8P$xB$gRb?rBphnbBQF-;{$`RM??C|@}KJdsR@A}LyfBNRtD?CkrLl(TZ z?8!9dso?-BDimDtyt$ioGeX-mJ$9CM`Ra{Jm#=*2@e7Y!ICt^tYi6B@Jtxu-kqg1y zzWC)|y?OKKzSAdGHJBO2L}j$a^z;hQc?1G*k1k$@nG2H>2{I^&r_Ys4i~lVEd&H~( zpaVtOc%s2e5P{$<^$3T*2tRHWEf4s=9H{d9_4KF~q`t9yP_1V2D3s=UxeRwiWFA{R z58ATxBTk56!5HF&5wV$rsfL?-E^S~wNXhiLgUM3Qj2I^bKy@QVgyn9IWfExFu#B=|A-r08^5GJBOh+rGW`wz=FJl!26~8vr zvT`r@Sf!||EQ^v@4^=$`LnzRq0$>B2oMMvtSZAP6x|1;ATtpyc#=<~OIa3U!Gf{sG zk9h!VD-=J9DzIn_iJBYtl5y~opI^n4tw|pIDx!!Yv3m0P{HxH&YxC9nWgdY?{xYs7 zx`oWt(lST0P=QH82Ru+ydIqRVgz#(={Oh%H; z6Ru|P=+RT{s(qg4Ou=T<cICvYx<~%YK{fvcXDkP&jeZ;RlkEA|@6H8>mrnQOulPU>*ZWjh!4K zQZOd%LS21|69>(Kk?}^XQ}ngxCrEleeMlS|3hxvuzbg_in~OXJ)|esEV%|X*^d?f2 zo-foU61jTy${Vl0e&L}D(`J+PdY~*Zj{uL^Gr8v@;#dG&9xAN% z2O@D!3sk8P!NEv*;RqepWW*`N8TsWHfo4v*r&?RGPdP|`sm zbC!B-W(g@quV|tsQ;mv;(6%4~OPhE7-H$!;^ixm%(x*TDV?Xu}?%uvlOghgXXD02P zTz}X1{_fxKZQuU+FMR%;%U597+f2uYM@%e2eeNvea5HiuW;RV3KQDY$e#y<1iFE`@ zMF1_0*8qq-WC&^#GPAS0IAN$mi?F0cPwQ^Aue`u6Dw?fp7*Yj!x)TPQ8VNaUo;zT| zvOPY2=e_Uyl}~+2PVDvGvE3R8vp|i6ozmbhekL{P*QE@O;eZ15I$*sC z&xc2Vz4tv&?`@_xu3S}Bg6K-*Ig~A8c5pqt1+M~wz*@xY-Qz3+K*&j+IeYf%l`Aj4 z_|i(QHvW)hV!T3y4agL+S=7|`?ykgi{@ep*cK6Pq zyStlqZIjq~qWmyEwxU(?F_*SMnx8J#Ru(yBW)QJ-Z`}_O* zOw1Avj#O<4@AK-%SGk{pO(Brvn%b$Oq+I?->?2gTwFt>R=ZcVwhmtK6~wO8Ia_pxWR zD>)#1kAujnlw~6(S}}Oczb2SLm^83jlnfWrT$Z6q9H|n<<6wGnKPZ_BE33Jz^2k>d zo*sv@0-2;~;#-7jT*@L}uM?N>i_$ob*S9i~wdLZ_D}~1%@l%?;m2D}9l13mQMfj8m z0#zfKxMYz-4v!GSY1p&9m$_7n3df^RJv=Iq1~-x9=VEb-XY6HeF^XyJfD)dZo%V> zXFbk;)CYt&P4Ap{MNiBMHKV z+<_d_Wu-S>b^yuyMKg`F6Gefo=WRH&2oCd@Vv&(yM!*gbHNxmDM9IZunGtgUt#lax zh$MbtQLq_aG#_|8Qc~53!eZ4-BvR%Ljf@>?W^?b_)!kHe0GvQ$zwW)ybCu@|i|)1c z$jlM}EpVf1Uwr@@UwGXtkY5(5P(~iZcy-H)leGQuI?T@0qV=jeL%gNy%IEL31j7l% zMMSh8Y7X&7US7|`a@}Pn;iD8%*%bWO+A~`}#iC*2bj|kb_E#{GhEg&Y1 z`n*j0m()R)R$)X!R4Y9A-BlKTus6ePk8gTqk7MWEYuIRsKnVN(rROYLr5$|CJ7LX6mG_KoIm@L@@ir!bt zbOq|=^6UqCUcRoosBKpkX>_3qv+>tneCgKJOSG9lDQp_GSj=Rqo4vi$r%zqIaRUUA z=nW><9@D9FiDB*v7&jQ<@yDJx|KPbVe(8&5#w==`gX~8(U?#~0auPSK?$p8^X%`F? zfCJ@cL84ObwiONI(#L_78fHrEm#spa(8@?c69_j4= zx_4ja%BkP1SDRymRaJ-Q(lq{r!ESW+XpFZ`O&wlpk_DyLM$RPxR zFuNXq^ttE$uj#Qryb^T$5>3qQ|Hq}{`)_fC6L zS|{O3JY?3Z@ch^)X@JU1Q&j3RnOWaEIC%O!PdRXSbZ8-4Mr@%FR|z3hvA3<_S|54B zI;63!#&@DbtF`I$>C-R2^2$5!T%wYiq3kwdFhc|+JT+V5BJ`C)>$ks8Ng@Q((ntlnj`}_OPeBdLmz4F$lfBw_% z-E6nJaRW?yr%t%e=gvQL?!txZx9)6bYczqS?=(xiiPb%}6HzvNWo@`d0G5E;3&jRU z$s}OzX7kbR?$P$>OJ8~IwKvaSc;L*5Q>RX!-ak0CzrUH<)Pw`$Ft0G-D)RL@yA^y^ zY_kNTi^qvgmYp}{0meUt8oV}Ao^*HX+O^wm*Jst+x9{G%ef!eIx368le*4zV^w_N1 z?Qv@pa}GqJs{jE207*naREx-#S$y>AXO~L0BIlA?1uJ!73plZa&t|^2ckuL6Pu{tG z>vO;Q1&~BETO42=u7YrRis~^C2&NVAIHEa|xQWcWEeW@2v%P!t+FS2*xA#8v?)^!W zZFUe#pl)WK=iM~z-@11Bg|9yUv5&nk^sR+SyGfHo@9roug7qaiFD>Dmf)HjPUk2vj>1Y|Neb{A06m-YUcDPKkIRr!)erygl>wQfEL?)CN@ zhceGd-hFbE`AG8_4vUT=KOB`G8kjy>T$lysg9S~K;UfZy!kp+-qA`mo!c0jgOv?r+ zP3y%-*I_Mt1_xObr`d>gk~$-n?1oIOEE*O0Vbr{Qa%;geCP9}NEgmDeBU55rAzLCw zTDCIAdowwFOoAiIas?q;6s=3NH(VeX$R(-*@i7@1H@cCkhIoB0_+BnYGzHU8zoJB%1}{m>tqr}4}El&#oKYk8HMb;!tx|U zyuwa5ryPsl1$Ui(lH^ye|9u4p%i1k!jN1cA7+Y#|I}4TAOa(xMhaMVzXtHnL4Fz zkHL*%F4e9R(}zFup}oERi*LPUrpHIK6S^uplf<5jIw|BciNViXpxY{#VV6+^s7KOKaBW`|rR1&-}-K>b+0B`-gw{ zlQ*v2*i4(_<86~^+DzJ2d#Ro*Ptj?aqL}BS3^EPVOhj|Zz(`hmEZg_ul`WH9nOm#; z$7ZwH+uOYK(o1)5-4tosJ28j<%qCuDY7&1PhidP2Po?J~JDW}3jk<3>IIUAxiV_2E6ITB^a zYs9_s+2s+}29~P&3BZ8A@wZ&rwQwi~gg^sVoi~$q-RvCz_~MtobnC`dH`uO&9KO>X zSwB4gzyqgGo&L%zul8;v0aPX@GDF7wa19aS7~c`PZ`=mmM+62L4DQjtY34c`fuxDU z?%Y1Qd*}F_D_4Bh&E6E*yVzgDP_Iz%kA3QAe){6;uXCH`?T(x1tN@$^UMPYhUa@7rQ`9d5OCO3k*tL@g6B`I5 zYV`G2FW$Iy_uUUYboOBX^6{}vCuo}b?wCB>N}mpRd-wQDU;NeEzx6x!_NLu#ZVm$J zPK!nh(=uvL(v$@XwYoeqKzKacb!4R}L%5jLg-6O}z1Z@c(hzxMa@ruTSf_=`V2Y9$ zUJ8sr1RWK)3mS&GtxEc8!!49`#v)W*x`P8)jfzem<~G(jJ5IdZXzV|Cx0F|PU#5E1 ztS?_)-YtjdjXJ{oj=A(I`nD zEJMY{f%g_*RmQihSj}e)a8L)HqL@CT{l2PQpAX+u=Q!m9UF(!b7<1Sq36O7f@X-r>=l4TS%8~mvHmI*8I)zD zvZ9S^y>Ih#BFjScut3~clHMDkGL7ZSeM6w=c8}XAXF-4m#!vl$!coXbyrPz38Q{tE zgl7(iAKmn^QXH38yEUS6>jr|eQxINiRR*h7L`<}hQ+fJ^-5bt}DDS+xJ6oe>m47lb zvuF*5G*L4KKwMIT6h_{nd4;?>(W`=+2vI6E*x$HWA`rE(la%_dW0&3IVG95brpdj^ z+u{}jGplF&ntROmBf^+DLW}Y(BTQJSz?UIp5GdMqkOzPxf(ToR$m4mD8E`kv83aqm zHDxJiDE=@RJSN74XcaN_-fi>)Btw=*CF?h%rinrlm$E@%DF#EqO3%6?qorKF;%*Gy zcfi|)A3<^Ng`{Ha7e%8S0E#(t#HjLGV`^~<^H>EUjnQe6diX4y1ZYAeOF@ucEG8^uuhFp);%Y4RwMDkEB+$3a#F}nv0G;-IjjjR35m*jz?CaODmQ9RkfF)|P+ zwK#-sXg2e}$s7+q{P4Tp^{yZJksp5jc_y2+4_nW`tH~yQS`P7SF z`K@xvj(Hm0LRTEKLUid zRK|FtA~Nk;arv2H15q{P6O*v?t`ho$9J;-c2r(r@@f$OB%TAUN*e8--ImA`$IUbhB z97&=8J|5|Zd7dx7bNQL~zwfcfANkq~uLRzb7QGK35o!`i7I$}WMX~8Ct6P<5b<7DY zjmUs`=l%GxN1r)={{CAxF896zao6sExdwevvBU^+^3>*KlM}IIU38+e$WkB~X*zM@ zfSF%@`Q_bq%Q8hXW$gt52}no;5N9Eh(lSGppA*8^krBB1#lB&)eZxoGyc0Nvpb!&! z{H_tXFddxO?|ny+F{6z1bC$~zmt`cg+&>K*jItlK)zk4sU>XWp-ZqnVJwDnwtW8a( z7MTcXEk!3pXyo(9{lpF|pgDTkEnVj-dqg!)Cy1nq4l_(xg_`4W4b!>u+)m7{8n0H7 zS=fo#;6a^p#FNz zd#ny5+^hI9frXh#y|IB=NxH)-hcf4a_CxeJa$+@tI2un_V zS!KQwEn{KF%#DTN+L|a$YQ_f#Z(hB5>GHKl&YgYe{MmP2y}^4>HwVlyF}qthpqE~H z@$!`$k3aG7@jUCiR5^{IuI8>$@2~`Rv0dwWQgC;m%Tzp!tsP34<3Of5LAogvY9i+B zryI1+09)x$QT@OUM@BXoe$}6#HiVh0nyPvhg2r;_^~br!Qf^@9ER7--Khpn07?GV%xbR?b1AebOA&RQV=t}uc6~)<;bT?IjDQ&U z+g&LGcvkHJ5dl<@;INX}VC{Lrg6N7I3}Pq;Q?w01VO-Up$P>CksvPd-g+-4Wf!$i5gNxP_uAHkg=EZ0)9#Vh_Y8|% zK%t`)fe{tu>D7mqK!GIKexM9Nz%pE#+pc9@02n72~U_!(&KvKB1Cuj*E^bp&rCu z(z)s zMu-W$p~;e(mlRv@9vc#?5~Y>J=XyqafgyZl7KveA(&Zr=6GollG}f_qFgUnO&o?e) zLlON3hn0BEJ*m;adAZ5L6G!49nmJ2a44G6XRWpV}HB!-282uEI!I>9174N=qBn0;u zKUslL98PXYfW_`5W|4q77~hU4qDohaZI8TJ9xnh9^cnMh3y2kn$eowWPZde36KNWxC8A%-<-Pt1 z!-uNqx+jLukU+D`X3bONT6dXe2p4x7A z+vCpdAb}J7?)w z1Uv}C!k$Gy>x1jXWdwSUt&5J{I~=XawAq;2Zac@is;Wbovwxc0ys{IC>T}C@Qtu;M zPPvEkjl$lC!K|eSKoyC*b-)tM_4UeBTdIsN#ge6kiE3OkHSN=8QVl6`^7uce5Ys15 z32#T#G-NnPIV6~fDn%dG-cbh1n0cBe0(I5i=RPYDT9!v`o_z9&+qZB2uue|oDpZPf^A)-DjH!*W}Wg_!*2Q=a{s)~cs(Q|iU zUJg&ejM%))tlitDz5fI6fAy7@{>I<@p~G7@z}$B`f=g?zzT4gX&hPy0@A_@O^-Ev+ z;*A?OTH8otgL+K|u^=Rtyb}gQi_=&zo^otvLEX{&Q&&G?g#5x6m`-lKvlv|j?dl?% zi5MLI)KuNQNekkpYtAkOpl}e~qwFx=4~tDfII|dG8~$ExZ%^j!?(#ctf9#20^MPkR z@Zy)hgxx7>8#~^%6HSCw6>Q8?I3;z3gG9>j5I~T+Un=(4l&q60boRb`_~C~R_NF&) z-I}*MZhL+1ngJ}OGfRV(xvt1FW8gJ6<8*D6X7*{Ch`D#0Hgs@s;?AABuf6t$&Pu!? zkg9=%Xw=KHE73;W*$rTFz}0fxeFj9an&A-F$@taLE4vrxGw`lKQqF+b%{|0N%ox~h zck^z?BHQDgG}5k7y6x#%mxc1hF)VQ>68w2p!iVBWYC=YJ>UKL55wWrXHq|(G~szxv{t6{Tu@}0LYUwrGLo4Ixe2*ymd+Y;M_^XK~9Z(hF%hpGvS z&dP#lzZfvE!dI^)TdFk&z>54%*8irdi}HRBsKP>h7xp>ry9a`TrMLlS<3JP%EejpC zv_8$9U!RXHw^}NMb47Wo!BRxL6R0M@lB(s*XqcM?txQB=u~nTzO(s$!28wQUPinY# z4f_z!A6^v{K?j%_AR=+Th^fy8hN+!Axc}*=pL+Anw|?={pK+%?D~RV^m)4vz(9X!D z3}Yoe(pGZ$!9gp8JZyE%I<@KA&D&pp?ae2ieb0jr+-EOc3KN2GhQx56w>y%}r8nPv z_0>0?cn?rK`h0sy#~8Zz^dM+h-#e5wBN2+dfSP2EtfG@}iOD*oUo zVkkpjHS|`)xzd_|ny{)?k&?M-rBCw2Bm^&XS`29z(cE%r3rjqKSqz~pMwIq8h=WiN z8u^D<=K+-+rK>>q(0M4!O$9wh&4tHFj1g8uv5Z5(oe6GLt!gn$gpPS4^ z6iU_O1j=fExDmtDj6wuDzzRfQrcpHInc)ao1CQFD&~aC|5JgTp9ttx#yJ~MSEoVTj zWD*i{Qq9yBMq~@(40vT)fKp&cmI1=366tt!?3OH>=DsA6=8hh(#K@U`?(RzEaN=gH zDx3ii-Y^!6GWLg;*e?d!cV8DHa|%GDVIAkz9qNj*)3vM-G*PD6%{Vjtb$Wu&h*_Lr z`$B0t|16X1#2lIbxP9}bcz_Dq=Xt5%C6=Id%M=h6EU}n!cxd++ld~<;jsa(Iv=<%wz?5 z5hstRc*RCVeO-P>hc|c6`nI$*X|KF))~is^v{WwZ6xWd(G!)S|gsbFFI4+?2j3b&a z&s3wZ5|9wV%(90lZz09A<6I#wxZId?7%7lClf-~o7+k5ldEbRiH`M^~%uKK-xra#c zUWFH1MEoVBWC^(g8a%f!W$dkyD{?T}tQH)cE!5IGYulVnSbbMUcFOdd@a zxf$a*XYFMv{-mx1aZK1kJmd%#;TBURE>`6U}@#Ure%Wk(i4FUyl#a4cR>;p2zJ7YrsaA!+#3Fuq;@ zj?#FRt0R~yv!oTO*H6`>Vlx+oo|;u=S6|(m_S$9wK+{z7gM6WWmVXPO(sCh*(vda#7$f`22iD52j_vC3Cr1wu zL7KGIVrX}iNzWY)?_Hs0+07o-H1Kn6s0wAr3)bNzcUO(BIv-NVY7Xe((H$~O!ZGm##I1-YA^ViplQ^G*JTkAMG*~!dODC# z3xp8r^00ns)}!4)TBJhVQ~?lic#Oep7645|7xa^t>?hJqpuk<`awu=aDwwemey(mR zML;sukk%yYPdOFTtIPqxtK%EaT_}wPo4j`9h&-Sh%cB3~rXdXa_!Eyl^zgg>`Vao~ zOK-fsIeDu09+=q%qGMtaW;S;Tw6w(Vao~s5%7(p&Q*Ae<>tO46^{uz(4?lU~{C#^H zI;M`8C>g0i0^D1p@YYO|`UL)L_2{g;A}Z~|v53ulJg-3>+-tZ0TDX(s|3OYE1L&r2j81t6{w zLJr^&v;YIh-~u3`M(j27D3VXA3ZmX^z#Jk7@sg|zl7bR?dUR3b&#X?3*F*4#(6g0k zgh&ogDVZX4l2oZjv*6i*rN@KIE*V}g8^t^pa*epsFc3?1ABLtTOMb^KI$avvQZ8L7 zx;w~~$tmKLnte>b)Ih87tnM;YTl)s7?D9%-o13_eXS^zTZ1V~aE(I9~q+mK1k zJ(5pZ82|uWwYN@aJVx3@V$5}+BtdaP5^ogwl7gut)FgI_67_Ni6p`yD25X!;Ixm`ga(iwN-;$)`t%*foKnkMmHCLjzB5w~vHa9$tj z!i_Q^88*TQqX3ow5s6hXIE5gN5ojSwFsc>mq_QM@M47x)(kQ#agl;Or6e1&4%iw7r zOUJ=Oa0iLzmkNk@aO^(L*J4qr=AT$rNcW$s-f^Yf)1q|nN=lU!Mszw z_39(>3Kd#kF>skOATPi((9a0F@;%K;N3Osj*YCPl9a>teGE8~LW`^iY2*aAaUZmc0 zI&cviT$CINIMAwUJuF%!k%k2XWL@`BK+mDE2@-PT^(-4%$E^%!7bXS_)~bXwjf8Fj z_IN<)3C-Iyk;g!_>~}zsP$`rgUI0OJSDru7LE%T3$Mh>M=Mz6Ca8}rc!wIcv57jh| zzF7iCQaE?^NHPqq%D|sV?=g>R>hUf$!a2D2*u7aY?&_wtn6m-}W4Er6F9J;ZAZ2S$ z-BhzB(nr*NL3A~2LnlIol z!2+U*H#lf%oazDNVZ>{2bm$OjW5?kGs?0A_76m}c4OR48&CzLeYBT1W1dp-k5qNgo zfe0&MmL-Cv)KBy>vrx+p4lDoUs4|~;rAYMVtFDeYmG@e`THVS*EHcw}yIZmVLd-O8 z`D_n-9O|cl^#@_pP7!C;#+czWK(*Y1*i&cW05B zW}$In0#YvTMp2T9fz#udaO^pX)1qcBlbG}2-Q$Pe_0ap?|IAw`&7B~` zt+dS2w`63r+N(%<)J;v;UAxaa#qq(36Hh<=)Y0Mb;oTzuyWJeAPD|~-v>9HT8Dpo_ z%MwK~g*$`{Ol)ks<6YY{cW0vg{ev%k>C0EITq`>X;x?)$5yQV?CX_T}5qrIvEjxMG z%81SCbd{sbYt3tm{T{uh7>LvnbwJwn?wz}R?(^J*+2FcU+K&#$y0bXN?g2FO&<;cp z=YKJ@X(z&v)Sjtog_;YKCHLjxO%=5}$M;REXO%#JMKLs2&NFX%^wEtOH$Zv70i0Io z#qWKLBSHgtROTm$@Vwt)Ml@|?xf*qkv72gEi7oEC?a6~v`FDMKMbhlBDs9`_Jeyx>*2cX-)hdt#m3Q=g4}5{F+6)c0zo= z&*@jJX!-~S3VoVWj<2f6>@un}qjq{e ztHBEtSQy!WDy1JsW5fcrhEYV|o|-0zrYRl;D?W-yeHBQ=wS=h$qAG!%AW@c{Ra{i7 zQ>c-a%|iui2kd|sQJ4ZTfk{^PnkWL~p*y?OC3zEKq27CDW@y0%AWnf{cgMOXJ&F4q zrd;DhDwAEyS$MowB+ zEQEC=q8!haAd1SgEm6q${`h1-!C;-@)JS9|DCAaC&?Mks^0w}@QhkRL2wq;;WQHwE-lcO0b7ghlicw-R)H8JZNzA7ROp}CupmF-0f@*>c&o0+kDL_Jc^ zCy*GsA||S^SH)Cv0aeZ64$s1Hgg&rik=c%aBmRd2StAJtB~9V5kxh!{Vo}rBcOv3y zRBd;r4y$IWAn2}XEIZ0-&vQa26gShK1LBSlf+TB|~;f_mA& z0veP+tyBdJgp{z+z#YkevBb?p02sBMUX($-TE%kl&}{Lj!)};+wrLedkUuJhIN*kZ zB)TwDwj?d9raXw&{>!nI0j!l=e1m5g4L9=MwKa(Vqnu}YjQ8Ymn7$1>;cU%FV*-(dYpH1xtzE_p%yg^1#{>XUjp zo?(s;ta1;SU9p_Yo##ng_NF5ZP(?kp>S?c#&S2SLBQ&Z7Prx>+XW-*N5QCW@!kbC% z+_?Vgt6xv;e$zB)P!NRNp?lM2Z~x%#(G`zE>0~#&0z->zyY-pb-E7)F@!=1D(7YcV z9l62Dh-ewUGgz{;!lR)mGZV`*@)W2tx76)lqNYf-`HIY0j<*+Cx&EkVDj6pqtWtr# zur3^At_PuBT6OEv3i7}W3)zqhP&O%IV@pdtfEU&CDxVjCGGx!{*U}|N&MHWyy5+Iw z>j9*pE+cB@B8(J+AR_8rrHLCDeDd_cC%)wq4_-L`U;LN<`8#jD(e^g3>O@TJzWeZV zAN#$(_xHT;wUSHqS29b&+VwtVQA{Qmed^_&d8h~>lmbE{|57wI{jZCWhEPe9;qNxYdW+Fh{u3x`4Z|D8}{d4E< zuNMkOFwSI#)O83~?>d~KuYMK}%Ppqqg%eY=?QVDd`pu`Fe(!tV_ueZP-v$iOkTT2T zR>NzZsM4H1qJGaE6z9ww3b^a8ZP4#-FFg9_6Hh&Hbo<89@izWUwXZMLyhIfeUkzVY zhsx4*n<;@<*n4CJjo>FwoosFT`pYjL-oCv&)nIvuKn!6Lfe3|;7#JZC6Vhp1PiHZQ zMJC>RqE`<$40`ZV?wqX_JWbS7?nHHW_1d+t3oI0cSH1*4`QWnZz*m)kD~bepu)}PO z1uZ_t7hp2tw2CqErOGSUmUL8@8=KOX_Z`0wyC)k8mc5NKlePT@y`Qg}7=lIuc>DV6uem9UVAPny-R#VL_n$j={_2&h+ug3U zNkda3mN-^7a>ZF~RKXj34o|UI+|^m3h0KDYtILyZ};xVt~_o@ENeI8deK5 z)@4vo z-8!5=3`V3Pt-N;88M&R3N^z`iJ{Bg!*E$6e0E{d&D62Va?7Fo1ki_T!)GPBDd)N3p?!6qBxFBduo`70B9^h49z@8x-EyjRkIW&=Sv+;%v6LGp1f7`fK1^l58bakVJ~ zTJq3^jC41NFoF;aW`a4cQ7bxm34k}zL-9wPZK+a6UXd*rlJjY0vDRaP?MOff&upW^nQMQ^A z;2>s8ES$-2;>>1gm8KD8HK;Imbu}X|&|`s(N+ zYi|nW0x_d`AwsDRNwy_&XfAVnMbX-lb@8t5#K;e9g)^#0<64s*y4d> z$J&%xEbemgK`ay)Wm(6F zz7q|Yd9*fYSFlsH%5xZrC>G4+3zpBjc8~~>JI6vqA~XiP=;{%HV|Ahw(DJY@PB->P zxobFibfb7wzzVa34p?=+NhII`IU&4$J~2tk&j`-s8I&=LFt3=Pgk5<-JZP(W>P$pYq#d`A zRw!S_$3OASI9RcPJ(`|9kGdmdU3jrjk z(?_5E$n{&-{__9(uOHsLA)AfPARdBO*)lx%$c~E<;jeMER@oP0DA*?w8BSmDnjsd*z@BAp!5)L=yCCoIM@-#+D zN9U;zS5T}h5j3M^tkTG72kHjX=vv*a=XjdZh06u*U8V87>%?H8?cwp+`_BBP@BEIJ zUVin5{^s8{?PyJRM$%+oV4x#nob!0kM;u0|p^uU)kQ{y17}Cn8AmP3G4lk z(b_unsQp@{<_I=J1g>438Lq}e&PAPLEM6S8wDBRc zXd1oe_nxkddXN&hNURU~w~yg+9>>-#Y?{Y(B&3($$sL!sWo`@+W~>x&J!bVNG=72D zqHPACkoe6x^3C1do4K3D#0w7&(S2Bi#It5<-mSb_wwx0UNdy11oycY<#Wru4)&m)tCXFLGK=iAO%5vGoygr( zm~y|k#}3u*1fLk2#snvK5eP|g2o&9yXz^1tqGqPdB*cIVv3rZAR8w;X%!H!%JA$yN z|KebRJG{pfJh+fY*GzaB5o*k4Duk&up%@tNS-uu6Q2@t~3Sl*83E|uTvw_Oo94y2l zo*^O;$eq!)m<^h|k;4IIDNN+*4ljAgG#NI+mTtBx&FBCP7<7IPD&hAQ45y7E5ciZeki}fGE{Bu#y=YOif7oVp)r5 z$g0}~lVE)=Q?EFkag=v>b>A_#2o!%b-7F-!0Uqm@(9tY%P9mz z>qbTqVxmHf$g6aSm>Hv+0TrC4L{`d8jM4)DRLqj+Sp=nP%&yU3Opn2ljBvO}!S=eXx2BMO*hDt3Y5h4-0>v)(af_S2cuaNp~| zAeW;2eR;anqFrj0Ddj&Z-WaQIu#k^5H;gPn21P`b(LjNvVtO-C3%{qb4OuS0Ox6u< zdwZJ~UwZNA`qj3nEfh&~i42~r+kFq*zwP~a+d+G2)&qMHM-ySBegd92^n)Mzz$5Q| z{PUmv^gMTIVnf)ko=DizQKGh3QY?XM%sozDZyxoltuI4ZcLwxgLQO6)yJB~J?5 zVCd@;=}5Ys#-Rqhrri^#GJ!AKjZ_0Rq@f^gM2r}`YuZHGrp>!qdlzA5p8NdNQ&0YT z-}38z@+W`tFa4#z+>f`inH&^D?PQw%_@DYyzwQ&?`XitGk()Pfo;WzkLN>zysA8bg zgr5~;=93tEd$qqQoVFDn&CqSyYae*#{U;7i{e}O>fA_|VFSLULCR4L$yJu+*yzZcvo_D>(k!mgCBgx z)URB*tfuM?NVyIp&W*M-2$a?EEcscoa0xjIqs3-xt(`f2=En7Fuf6^ngjqy&4n!D{ zCs@D&ZZ*t4Sb$t3Q?JmPmVLLF#Zf3yCfCzkMm=p(u#|C!&5F5W?zCZ&_S);O&pMwt zapL;b>(ge_b&gzMCTugS%;`pIUr@b!MH%H|$i{J4S^GkzNf6f)9FQ@EGpI2gg7DQ`SL6jx?5NhSb z=yTsp(|z~f|M}1V>fM{Sh#Q4NK|~S+;DK}JnzYOByc73I#O5_*HeOZZYW4G5CBd`WY^#s;*NNHc zIWNBw8$q*2ek4}Y=~UC|Fsdj5ga#ktgLz1+5%*QI6Oxc1rl_3}mT4p3{_VfvsmC7q zJ%8YTclE7TW&aE)G7jE%okcQm2stwlfz$za-OXcEMC_Al(EzaU5MfW^B*XAo>RCl;of1gVacdlh?R{Y);`u<-6c^3>!Fk%&YI$pauW^Lpis#R0EL zDFdwyy_;O!ek4a z4;zKCqqwV9C$^Wnsj7QcuY|_41Cvau7G2#gh>)!-9Il1ynl!K4s8sQc#}- znHiIr%4UiUgE$Q^HH%UVcWX@DNGte`bW{Wv(puMUM$9xdZj>=^Auo>{ps9)&g;atN z1!c*^6bVbHTWJ1K^aw?rntKC57$FK6b!E(E+|7uLh}FEC8Y5aVD9TI9S;xfB@*$KU z$00%%<$mCbORa{mMZgdBxW6IQU6~n**>a9Z}d&kFR2Jx`;9IK`=B7J!q8 z&=`5hsh43{_9U@Yh+}pGi7<#;l>4W1a0+n=>R#fhUhzs;_u_8LwGk7sa46dXAOT0N zTUgQ?rbEkcY=Ddvb4Tl2P7}Lgy_aAtKvov#=5U84$LIi&mZm8xA(Ia_TE4xUYg$}d zr4YkB4&av0Hm{8r@KFFSy^dRU0EdN*Vbc-pcscN(a{fJ_XI5klDeiP(DH~{mkx8HXr)gq8js$SbdQ*o2^}}dP7|*4TuV@BwqPIFa}Y5sXaS^`LWQP|RS>qg!HOMFa6I=$)%%P;@deq@La?OY z!r<)ycPz@;BQ`Yt<^AH3Z>hWDFi-Q>jj79ReFzA!AJ|XGKmRb64#Iili9I`FRzJ#Q?fA z2}K62ss{q}4<7@Ru;>UqeZ;?c9j-l#kAedgVP@Lx6prptRT3g0Rofo#9suD$9>0F% z!f*JtZ~N@$f8_`M+<$%Z$~z>jZ@1ipiFeyO-}}G(z2Emo|L{Nj$N&80ufKBo%o%g< zTb0JDY8pn79gD?D*^#`{j1clxYcmT#p)%k`6Pvl4KKaz6PdxSX5B{~k`g8y4r+Bkx z-OM|&ILJD{%uTpWmd+a8%t>TwI?o>cs!@=fS+YU;#8Dc+d+|EM`Q+JI4)S0Q@}v%u zcll==bLOc{K?2V6_J!wPdgP%;Kls5DUG>_P>nzwFZ&}#GQ{gd%iv9Q+wzgE%IqX+_=1UzKvJ5 zIljvb)2PlPq51CN=@WbJd;fdx+_`o0`Yiz3dm0BOxJ3nrmEZ%)al|to?R1ucpvKOC z@8((6_7C=a?k7&1IC<*Si!Xll?Ms(oL=*YWKt#fB2H_Bp0<(i5jYQx~*(#MB-RNal z)^UX9BTB|SKc!m5(i$MjSr!Zy?>m;g*I#@6owqNYJ#+TT+gIAgv@5~ew3)ZZk#ry; zHT5NtfDDPf0>$Mcqxy6qaTO~*C}{MERN@)dgQSFH2?CJq`+@ni!ul1ILhY!*3WcRg z<50^2Q$qDS(>Cp zK7YR9>pNFd=cpD7>W$b`ZPu@S^=pTBj;U>Q_TJS25wYr3fKwjeqW4fC?LaqPO|oH@ z7t?C@tjk(5sCXeZ2NP@A<7#lE5Z-VzxU&#N9&u#-knKxx-XdjX1t!YTlb6C~^@qml zndP=BcL@yYry?OD1~lx#f*df;o;yZRkR0Zi98F2$0Ej7mA*^T)vnc!ooU^-TF-@^? z^V$eOgqcBvO_K&Er zhI9ZUs1^svh2gG%I}A2Tw}B$OEQ^z@IHXeX2{wFyGeCPJ)pD*lxk+P!OU~(Yq0s6w zz)1)mWhu%;lW-$v^tQp&I1UJrHwM93Vl5CkLcpo9CH+Jko(|Qd>IQSBEW8pSZvupn z0-476O)>|m6Gibl3qy=Fg0?apA=e0^z0JnWBYWM3N((au#xj#7HL)8N^!GkaSNa>;;<=nMZV{VSE^XtGkP|I24Vc zW=$lVb$Q!T!OECCqCzu^{<4Va(w1`Vh;U;Orx1ned33Pnet=t5O?uS%MoW~}>Bt{2 z#~?FzB9~Fa=jL#QYaFil+Y!_y-9Qe{3ZS%EMIsc`3(Ug7?_{@s1P^hpK}0Ml6aoMg zJZ=E9u+fy{cowTOlQ2tblV_6`0buhGZxBHb2awY#Df_A_pw7@&qRb)*pooq_x_5-V z?!&~6$~qLKu!1SHIL5rY{M&r{C5)n^C(@2p_B(zjSd0*X$LP-wLmre?J>FH|T^1C} z>%{j^NGnRO%_>@<{BSdF;x(_$+^x@Cs_G)VTmWhdl4V63#-cCpi?C|-o$&z0Z`^*Al!!R)mE10@=7NFb7 zvkyG`?6a3IU%Gbf3NhSZ8j%TsVvKP~S{C%n(@y0@io7eRG@_R^+9r6_BN%w%^`p!f zHS0}B&^@+l0ea8(3NkTR;98h?_*EuaCof<~d>&OosD?65C!JByU^{`)h32_Bgsf&< z)jy(0J5&ZZ7IkHN;|UeY9FZ^4JkQL$x4+ltdEU+37_%RoI5?aS&)$Fb+rRDG-@bI| z2maiDb@7c?sBPRk2@|pQqmMlI@jvtZ|M4$<=JUVu`CmS9;*`0wNR_o`_m(9EmaL0e z4lN!baXixzPyry3X==wuTXStL04_Xy;hFb;;8Q>IuRr-Cf8Wj9!L+-3DAIDZ+XNB^ zBU){35j^soHO(5cf{ey#(Cti8=)#JlM5<#YID2IPBff>@G z4v1KYTg028bU82rP@Nu8+(RRJ!ukPX*#tnbs_BKDx$U_e`rf`D-Ie|6?%g|Iec^>~ z{`kjEoI2PZZ$-o`+aEOAt2}nvs=cwo&tXG6lTx|)$F{>lJyBR1|iz-rvH z1AglCDO0_4@ggxZw{DB$OB~$cZz}+f^s)=o|?H5QIj^$yQiLh^1Hw1 zyT9_nOF!`E{=AuO4o=P6T`H^t7_hK4BB9XzOi<#W7)I=cUcw3?$*9HYWx(tjJ$kOr zm#^OFs_%Z+g}sd&>I`bpELNbz!;QcG+RJzD+`j+(gMIGIFoR@h6jaeN&?BjX^61N% z&*KeLPHn;S@o2{QkU^)R9$9H#uehwm0OmF`M1_4e^(|ME7r+(DIk{;LI&WvBmiddoS_kKIC(^KBwbBwtZ>)y&5$#R@dz1lMBeBF342Lkc zoLR0ha=|Q`o&rQ07nCldZG|+-wIYCEoxO;uJS(ZA#t=eilEo^*B-!8wf^%>QLJXRi z_9kiM%sLTmrq-BA2yQVbeI1P^0s~YnhR28Kgt=*VP_$J$7%UQnEb%+pE5+=Qw>C6k z5HzdT$;~^vn@N@b1o_ZJD!Nf3N7Q^JMd%z;w1~BP_%j;$%PbUSA_cG!+MimLm=&=? zLu)y9QcjUla|Q3Zo56|QXzs<45LA6UjUJ3(sE3w*85nBhWFR=BtFZv&QAA-Nqs#^n zK)D#sfi`m_jfb*D*5VCs1|qkT7dBdUhr4M~C$aI#&Ad7TN`)%Y?G-Q+BL+<_Ek3Sh za~TWADwi;JUu>Zkdq0?~Ku=zsN0e0(%-re-S2OA=m}6#JpML-#p{8Wf1;Hs{!@^Ve z65$4L)C~pJbM`R$s$FD?BtV$^!tU|HP9U%lNyq?|jfA^}AnamwM|K(mjU*iN`cW9K zn z{E=7(#wO1olcR%*U`~V8D;g&ZFW}6qs%he>#>j=EFd#E#Mh<3Tu$wbkcr#|A)LQ|P z*T}aIN=#UYitk7yT>1wCfq|XPl$Zkz574!gXUB;f{8&)w4)zdhLofv?nID{g{9Q~d zh&u5=sc|&T$H|PBT=pTBu)m7A)(8*fN4?^nah(X}wyv@w;eh|Kpmksq<7EK0C_z*> zxkL(1x~dEqWJe8&Ec1f6%@}2Gsf&iJXitw@-C(un8H9me3YcI}-jukM81uHDx^Mr* zw=cc(=3DS6$Y*Fk2@jE*K5x&Rd&EK4uHH0EiI@}gfLLtasVSMFE1Kzi^q!}md+gE2 zzVNG`JvuyW(hP3h+SJIv?B>=r=xO#`(|BrG=$plli4}%xPb)Leb0YWP{HwOn)F2dt zJ)&tY8Z=fxPMqv2yYSdZ27olZLe_xS)^UwDwLE{6wMfX9H3BKLY+A$*CE{9U(MKig zNZ{Az`G&kD2@jXHII&@b(~vRX(d+a}K;bw4Y?e3l9GiOhK@Pi+^eD&=g{2M=Xc;hS8HioM$uva#<5sFFy$8=8nFN z7I$oCeeGX(fEBQ@!FwYAtAWTWQSdnACY$mNovK;SMJ61la%rMelxm z+<)m8Kl8DVee{6`?tl5ESNHZeEWAD14il;x3MS;s_Nc7Vutft*SL9iyw;K9VB_OyA z=G2tSMsFW2V8P#;gQDTW%j1MaDRyJ*7m9TuvtcQ{()B4^71xzEbak=i?eag#%Mbpg zb|)%i&vRC%C<+y#;#KF)B0AgIGiPqyxcTNA7u{oKKwL2s!PMGj^U#G0*RNgEu2Y*# zjYFvf1i;iPB}fL-t`f5d$CU>gkZe~?#mJ>`vz|zATAn88Dhp?IGp zx_qo~cz>%m#_D6maW5M$s80e*%R>9!d)}j2DAB1JGmUjL??c1@2;i^+Evrzyb_0i? zgLb8fgn7H&5kW-ytlj$l{&e@&-Lnsz{hr_cJ?i#--}k34z42<>J3ViYnOmDS$A`xt zfsE6{ERBdV^a+QidQYW)CLXB1_QD)vN1C~T0hf2K-ne~u_^u1*Pi{8X?Erd3WlZkX;3 zsq&$F9rCoG?p!0!D`;M9P{5{y4b>;*?h#MruJwxTteOTqc5(K*6(~a%07qjxQ8qnh z3)q1Cu{h(_>&hz!wz``U;TOZBFz~L<1n1rHniG)Db!)OYFU_ub^#5@T$LK~4uq_OX9HW8b!pyXNt zc1lk23`H4+BgAXe*}JOAST#1dK_j=ECYP!@h+?J{MS0q$u>;o4SOq36Jpr;8$$=e3 z$u5IaSi2LzL?RVHx?=((xV%i!nK{K=bxOph)kzThj)~n2S$GlE{H*Tg*3A`|gaB4G zHQy5o-5Z1NW<|8o5KT;QXp9s!cR;%lA;_5U)xmxRr$J0+FqpCD=s;Q=Q;dePY>LPr zOU+VerK)8YQpGDIb#w1!&xV`J+RS(t%6&#QN=cK!*VyxJZmwoM`k!Or2S{I;B@nD7 zi~yqK(%cwi8uHXs27MUzg7o9`<-g^QklOVr13?_|J~K!4Mb=9Yi8L05gQVz>5H@Fy zk;$;A=*x$dFqH@(i7XtAV@Sj30=B@LwLA1Ry&h-Q3A`p}G8`TG?FbI)UKuMr_=G|z zri?4xrfBV@d`1gjx1gL$kyz2hZdIL{ zJXX;7#TsP{h+4Zegn!4i@)^=_s|(`F);wr3yu$cGM2o%|pE%3uEa^DoN&zJpvr zdy~#HSSn}2AOQ)Y5WiwU7S2@ZJs;(P%1Yw@{|D6{d3lTFC;8*yDC)aJOw0!KZY zW8rJpu3fu%mneD_uq3#nJgx%{X!-rD+X}@YVKWy`R1*gZ(qLl z?6V&_{lI;9Zf&z)-a5p`8blJ4Lb7YX-X+qt46$6{vj~0QgYN^`_3PI`00*ZT2H%JC zOb1ckq>L?wNy%ufykQx9W0w2wKYQ!u&9A-mHAK=t3wcF1J~2p$*jb3g7rPV-;j7Q# zBbHlMrhd)Ga;==WC$j>z+_{mWjVMTvky7I3KfU4=k= z*{g2u?5cSk;}+@)>w)IMb%4g)9{|~1?uGl3AYVLf&ToK-^sdBYW-NT>zOxtKeDn6L z8)eflr24ws>CEa)ZOUG#_)$N8ECXsio0Ni=UKQUPer)qB=h*CQXeN zMWMXha>WZcpL-{uwJBzs4q+xQCZhrbppcxomqh42OHdAfDanj!&6CI=^-!G*ULDH9 zq?$hr2Z)q?1hBSktIZ!srmz|jyi_=MyPcD}8Vj+oK#sTD&B5O9{@(As@Zh;W_Q${P zSAOB=WbdSzG8hikj`ZaKh(w4*TFZ)?fkE8HkqcZ(H0X#Cw0L<5kMi226h(Y2d5 z-t*`q58Qv|ja%12dk8(M;yfH6;iEg(Uw!%2XFv9_sj)CQMTL75>c*0cNPhJg7C$q- z7zbl`qued`n08;f>MDbmgl+tauLGIY39+K3>-c-^yR7+5Mk2iP!s=uY5$RITV4_NQ z0`D&dZn@NqMZyBFx%~R`gtAmrMkPAS_EJ5JIzC?9f4)k^lbH=qqd=8ztfEUtM34oS zhhj!rR0jyrALQgQmNSNCnz=~ihulG`hQ#CKIrV~Eogl-MYt+jL*VaonWzI0O$U;Vw z4Uv;OhlXyH!H)U>_s}CwaWX6@#vSBL5#T$6HjSso0!&SaAaDT-dsINMb7R{GZG;>9 zrqRSSF>QpVDHSfvvk@QpaAP}a^vP8}=meAqORHCS{-`$wdLVF|Tz;cH3sl-HKFln3ur;wPSY{V@g zwK_VaW&qU9fVsN@Y6P$}mO`*|YLgwDp5u)P) z?EW=lTER<-=LUR=&ch)XOZl{2 zL-f1iqH>Y7lXKs}+scUhqFznxUK;EK2Q!P;#kgZJ#6*^9%|P6Xi$a{jsy`GGretlH zBx8`4-8k;<&J#$D=GmEBH8Rv>Ys;A$T~#_%-$J2dhf`E%A@NJr$WVFcB2!Sm05>c;ul0fp@>vkrvNnta@@NW(l2P6bW~;=@)gVx`3E!g8f{qn z2*c;14#@JvmUXG;HV$`k1qC-~yx)Qg^LOGu6&eL^TTF`AW-Qd=2r`Sx5HBxZuQ`C} z$c?4NC?r>QJU2pJVLj(T{{TdlwV;p>=kzgd(o-(^*369C@+>0LW!-Jpxw-c)vU&E|=WgA;b@STI&9v#-)r^I-cagT_&EgG; zz7PE~H7&XKIN+XI+gLLZF_^#sP=!31NFP`(>~Szbma-=Blwk{=&uDb^NBK{Z-Cn0X zY+D%c+R(%J45R22Wir(bs#@()v5ShLGE3PvRb?huUEXBuCbOC$khU+}ag`JS1ek)x z`OPR%SdNc(()(tAvpw2zrX!Y@u)V9YnOY7U+-id>oH*UW1`WxT$+{aI!K6B~f zB@Lx2^;_zHqxS5$bZ}|4D!?)hL_<{F-_|Zq-{go?U zY@0pZ?wmJ7Gd3GH2L}os5fRFec*PUs?&zJ!eC{Ic>8GB&edp%k(b4`Sy=%t0v~tS% zQl2)5GNC;lSDcdgCt4ugJmf7K=-}YQw(?#y|T=SwDQR_NFaM4@ow`x-@bY0r~dWNJpIJuk3RP3OJDukP8|X`skym^ z4_rwR6wX<^$BGsj1&Z-Q%kw@;MI6o{dRkKjM{wvVx1Tn!rs~8PZ(C@!#r;&gT6PFP z^bJKtJP{QwQtzIgWU*c2)pF9XjYpP_Yk8KwJ_!LmtO{G)+(hK`>C->|%4>&rZxc)J z8k%bwq7tTO&)&D$+q?GiwQ~7GA(5ATwb(VUy^6$E%X1wLF)g^7mimVyJ0_!k)G*51 zV*{H5&>p4G#3q2%xX(m{X}A)flvZ1b-k=s8-?-fttVtj@@77ZQ$V;Q79CoNIhQ@6; z1BC@(LdFkqMY$Y{3#y{gberls-Lr*R@D2TSak1;C zo`@rjTYPJ^O_$v={;nt=B)eFUGk4ok9Wwku{WOFO2+>h8pl5s%c_VXV-ZQ=!ATf+t zyiDez%1ES9%{xiBTg^>%TaI-kl9%T(NgG++7lrT(AfZs6Oibp3DTP<@X6)c~qOiV6 zWmxj!s!=8VWz5L|h{y&S4N*CGq=!8Owj;1da5s4!Ri6%r$1GsfMvwGm6finDvY4Z0 z^+Ze<3J>maokC<_=X~-WdgMfb9>T9KTPDW)z$N}AVqzhlB6wzMjETH4F}yKNj6G>W zmefyUA>T9>cw-0y>~3JPsFx_u=;p2ji#vCBgBo>$dlZBwy}j2+9U53lVD7zlC4=O8 zv50FAdfj188c}MK7I0K>_l;GF~QbESjbp7qfWO)?6_*cL4vMT4^gAa$QMir$Y*X8DvU6*($$)6 zNB2Gpr)^{c#{6Nb_sQoL4dGr@scHW5iKMuDWS-+svwo+FHKKDY)Pe|58;WJbOjT)+ zBF`ehG7;tFg~}IKKNywka-fD!M%z}jwPu@Ggf}6<$hGQK$x@UpISsMis6MErOi8K~ z2Sx0C1aM)nyIJ<$&FCm5Z0Y`jzKtY8jRc&{TVDe}DhPsS~fibJ=+VX*pLhFTEa-f<#zUxBb2g z55MPq?|J9)<+=B1e@~As4z-zu%wK}s#X9DHhG^i}81Bwq=p^kZY8^8Kj47ufq!K;n zQcf>U?t;q(Jc>4Crty>u_~sI6DQk>xTOp(sN)C(}4lp~vis{XegbKtZeP<3hF`Gs^ zFvh6RyS`)41hCtVAi}njnurYF(yClleUF*y!K?_22sOkAKTg{q(>1zyCM? z?WKq4C{V=45;-42j|Za|bi`ZZ7`jn{R#WW6yr{ z*^fT|g)bAF$Os1Sh^9^+bbTDhcp@WlOaYNil^L*p_S^#xKl0F(tCv+(MTo?`hy7wA zAgk(&*V@D=+`TFMj&p`<7pO^3=)O zx9?2TWM<|{VD|A|<%ST*%_#>yq7Y7T1jB$-R98oqP-K8tr)t8H3iEtvKms$ng>Xh{ zijCW?Et#xQn7$RskJSP#B;AO06aOFybPAQwIz5yTSBbLKUHLtcp~dJH2U-&tPMkQg ze{k@|n{QcHo+j%C5_6C=5Wwx+`SZkb_wa7$qi63tk($QMQuOWC;)g@^EGI9}8Es04 z1{PFTbS#JTsRJIelISh9SZxG?{Q3dCh!#Ka#l zGu1v#8zDB7gg-zzcLq-8DKW=Hu4*FX;4@*c+;v%{KpQobgUH-O7;t8q+Gc<6V0*MZ zbKmLT{yTo>!xt`m|DXO({^3vjxNHuhq=2L`v1#YFsq`2V3AL%U4NIfINtw`IHI2t^ zA}k5r+DR#zfO>wEcevg9#miTxz3E*Kofo$1g<*mbwOC_f!1U{{ym;&8&9i6kb9Des zI7$#QoUSVFh1T)1%77Cjng|Ci#Y=EfyEk8_c2&Z&;`nNRQ-&cC>(PR(0@2oqqI5j9 zSF&@)7hE6692GYe&?xk!rj*ZY_$SXm2L+$w+0;-ZEYNzu7A#9MHs{K;Rt;(VPM#Vn zBa=a28IIz8s7mb%y-;F%8n5LJxQx-6AcUGBIdfoKVW!mj$);Pflyzo}p|*y|*$H`L zCXi-NeTc5Qna4URQpZ=7J30VU1yeNpw6KW{MoCp9TuHJu@+q|;+?ZR?B{>r(n!lO| zlQ5Vu2_3Y}#Lncx*c0Ak21%$wfG~s+qc}(U<`h0@z*2 z&9#S2Qcf}fxwl9SnYk$?vg17AY0@n^h8;{SBStNg!_3ko>hDCji6kcFO>nv*)f3~O z6su038rrRiPC)>=CNy;?Rg1AsBs*Nq%%NkRk0Y9+)!-gFIL1m2at@Unb4OzWsH=lm z)uQzbqqZhO2@q=NY96it)T&X3OF#(NA&HOZ{BbNb6YNMKwqPxSlJF}1Xo-f)3t{v` zQ3Ury#5vF`!eOVVQ+8CISv3lV5W;otZcf4CWbrB!v+8apv^IrUZ}QNtloR6J;bv+& z1Fn5moqK=_u<~q{ zp&-FIhMj4KzwU@eXJ!zynsTfb1`H_^KgM<1B(!TDm8cb&26xQJf(VqMWslZd4FE2=YyvpX$rFmmQJCd((25v?wqWY8*F zO;(uG&5`63_9iUC4)2RxB7s0Tn-IhjQe@23M52Qha3XHfL?}>sG4~k*#puECIU+34 z@=7Vq8^mKQg;nX0ho}LwnIfW6C5~mQKX)fi8S`+TQRP6|b%ejf?$IX6!}Ai{W5mF6 zpooN%Y$PJ1JRr-wkaF7T1p~2gIIS$y0)X)@8PY z&+2;k!4Euh{{s(v@k?JkKHf?TWUP&wh?u)9(Vf>Q4XXc-Rn7*&h>d#9wTTTFzFunh zoWY<;7@DUlAzBk+Q}e2zWacI<(3o|rNK61k=S8VQQ)}_>f)CDH~;L&ff8%c--MuZFy}sK4P6UzG=c9)ndhAdBsqedf zo(`*m0l-wf40RaBHf@f#JBK~{+($S2 z`~TAqfAXEzUjG|$EMA+-EG}WYh?#v=Xsiw zEDjn0v9qmyO2ri9$q2I8yPB|=+FNg3Iy&0^hHwA2zyHHO>RrKPyPcdk@ZKqF@rbxt zPEyx0wE&BC4~I!`bhYj6Cm#R6+0!Rq_{tZE&}Y>i#lTcX#%qX;Rv=YOYpEyZBPv2L zj({}Q-Zz_Re}8ZP;NZ1aUeoOnZ%*{yi3J{pwxpm*C?>(jq=d0#O9Y&s-?Nxr6-X-^ zyjsqC|6NconG;QWym!KMr`y9V+0o(AFZ}E;Ubt}KUGIM6%{Sk=b^W$X4Gz`b&8KNX zD6?j0lpV=%57235I#lg^TwUxKD$tZ6iozm|6rn6LlZM7;?3Lt!kg6iqwKtX~;-2zK zxmU-2ikxem!Ki$UpM`HpHRZazxD?91r1({<78Rrwt@l7V)4Hgt3Q`9wreUCoc0F<8 z#5~V$y!nQikvlj`aas#CXg_!U{BF0qefxG`CsSvksNamBG0a6&JVg#HH$TW+2Mgl~ z;M@Vy5K)e)VN6V>ic!ZzaQEJOP+EP~@SA2fP0bBash4ug%kFVAy>~~|eyrMju4p?g zN3M#Sd!xytOTy7rQ5ixeQq{_z8};ZuiGj?iwc#@b@ghz`JDP>6^Fsy(c(Y?^kn zZqgRP=#5f3IY7Hur?KvG#?>y>!{ zfxNs}5iwD=83-?klffa@ZxlCF-fG18!`V{>GgadoKMeVY%zmwcr-XZX>-84qgQ!e4 zt7fhzfDJ5E)eAv_=gX9-P5(d=@|bY5 ziq&i^rmAprazN7PxYY4+0)eCB)swA|S(OD7waDHvU|l0W!Flq$hfrNSv`~-YbWjM1~oN>$Hcr8F!mBPinuJ|8c$j+IXi~OY%fnpPa_@-sz4w?mVL-fG^L`qiJ1ln0Z7fe##Ui>^m#Ur&MBek#9gTy zdNNxK;<>AX<{4%%AvNq78>pvF9;y1wAutqmN#w{TvRR=e2w}|Tw(A<_Tb+yn4|z~H za|m*&r(!ec7tzpXjlSL1lt(DG=Eku4{VHtv98FIcraK72ZG3;Yo zJV*VL_7#JAB~&pGqT0@5Yf=d$!BnGoBCIS3DJBjOiJNLnj36-cG;Nwx5;gQ70Jy6u z$cRaIbA=eGp^Z`rCBm%E&LXU)M%=hnY@5|W)$PolgJ5D18e>TqS%sHy?ZIqCK?e~` zl|*7HN#4xJZUyPXRQll{WTgW_hHAlu9umpIY@QXoH8u$MG$JgI-Gb0T)-+HOp=r~z z<&rXx=7Ao{7xSPbQK=~uI!P2Nl2yJ$lKc-<)S2curJo21$SG<_Xn1Fe1}l`mt2oj@ z32;W!O5Fx?5Tok*@vw{|OA|)?#jyXlw77d*;;(FmctyCY;tXKRDfKkhC7E~My+#v$&$%zeJxqQ*| zc$!4JIyg$ez#!`)2GX-s5d{G;1fh^!(w-JAHeNN47%WLu^=J56-glJx z*RhPTonDO_u>e`No$Jr5BI>}zFmo0X60dqG9~#V*ve8UDfSiwjfQAF{k&Q#`F2^D~ z5i|c{Ii)d0EMX84Zlc{(duxq_g}Jpo?eo#y!v`;%`}lLueelE2eeScr{1^ZC|LNyH z^ULncBH6}e-r6M0kj)?Xga6S(7asYEfAo{lxIsBI0B*|BPp`_trm04p*t(_}48WaF zJurwH8M@t%cW?$I3?(fwFK0_c(?6!iy=ckJZmdq`e4y+b5+YcG8Dg(shQ>g@ezF1>k)g@6p%v*rU;kV9Vi)u^$J-op%K&9t_Cc@9JgH_ViY z504ICd;QIC`S>T^{rID=zxqb5LX4~efhaH#u|&LH28Ibt;zVS}N3D@>caHvn_dd1R z@X_5nL6U|8i*|CiuGVAr;vn*Jp@G3QEDy@uvyPIPNZlB8-`O*JlU%%XG4W^2dM5{q zbAwC}ArY1aY0ly_)Bwvi*P&XXACz~&C@o&EUX~(y6r)q-R&pblfra-DOi!Y3K|XJ9 z-w}WN^5viV`Cs^s-}D>b^~fWA?#IVl>johb>Z+EgvpZ(jn5l?-B1Qy}7Y z>g36z?Xj9o)07fI%pS>ef}695yK@vo!(+GCn|Tc(@$j3@A=ze;NR3HeW;%jwB7%jM zr!_D!b%Uxlk!fo2FnhOEo7-YCfF+l+07|M(G>U-@0Us8PxnM3Tkc(4;xp!d+KNqjr zyGn@x#|w&xYts6GyIPY3?HThE0VLeDvq%>EI}5W+leuZP^XJcf_=6w%mT&!apZv4hKS_#T}L)BAP*nBrYr^FOm#G zWmZvklZh;Pu_9^-<}d4*szS7Ggy0d@(h{`XBOWwtv6)t9mNyYIBZ*|86A?Ls)RJwW zh-G6jBH~cfsP=@9HcwZz2r)vhG+vF}0m)JlV>4AVv=+WqN=bc^=wl*-2KVF6luCAh zb72H$fXNBQ9IXxrrAuLH6ANi;)QBd=#Mn%-*Dx`Jf*#_=B+M-WO)@5DCgIptW6{~m zdJqv@%+#IWEgIh4*v+~nO$T(vU($QF(YLbC6FSc zK(LzJYHX{>G&X1ak|$x4&)-}FdYY=0D^GhGJaW|X0x}mFf_emO@dQKiB zck9_Y1b1{Zb98f4pVcIs4RO-84p23h#o>#^i-cWxNg#FPV>BCc>UawiMWt@FC5HeiGZLiM=sTI`qG$+ON<6|!hWtUi@AhETzUC#wKpksyp{C!SIueBnW4#H%F0;Dsir$Di1UnFwrdLH&3LfA~PSX|oHo zQBf6McHG=4MAMjsDz?nJr0`@Fm(mDLlYoz&nMCj5u6PuBA)b9cb0$h+22KpJ3~RGc zsJg`l83KTa%`Mu2U3+|zo~R1+Gj5D{)2n{TtA(DesIcK|0P_fWhGbdn^X3p zi**FjW5dMaSiy8R4`<;+*gLMCklwsd4p9N8*ojW=uI9oV5pbKxX4~IuZuZsZpYO-V z2PgJ54ipEGV+3gLt;wmAr>|eXWkwJNag6d=Ufqou$9E6O)lK*IPJiUXAAbF{*REZ; z>hQU%5D`BOuLRK(aB6k?`c+| zMPW_?6lUypJ2Oj~HXa>8RXua#(Kb*@axvVUC<0^})qmCh?*^y3~h>T z{8-y)D;u#`ZmhUJHDYcKXjT9_5p6ab7VdL5GZyM*yV;(4`iZCB`@Vnksh|FlzxT=A zc1LYeRjX}m0Epe$S-5S$8%U$JaR^C+qfMgTKtisZ^QekFBN`Mc()0$N_VKNInVtgv zE3zSf$-m*Z#w&ya$PCRiag4+>S0e9+c67A;%JVP$#^3y#&z`yO^_O4Y>^ElgdG=wL zd}&xo?}K#m13E7O230u~A?Jc-KelhT+pm22tN-Ee{H~8Y_t95ge7;R5be?HX0XOS3 z{7&A{LUKjzFl+`ny25nY?7i=O@40j5&TcoyZdbL?`ga>{8^g&~oy2gsBPfDveJ)V# zQAz2*nNz24-MsbcYp(-r>L79RQ2YTnWS+nR5+<=+N2--vFBvMxOl+~(JKX!Lb&)Z~ zJ{$|uX|TJ&**ilvH0}Fti%!RP?uhW0zxWm1>39G3-}=l4-uK2E7vH}4PC(@-fSpyD ziAm<(iKw+k#J%@4#nrWqD$GOxDeoi5p%@_&#w604a5&U7ijiqF3MHLk?jG5l?QZA8 zb*@59ViGh50JW?mgNKTzxx>3DG#}j{fIRm^f~iO<6#)cyjinq31^~h`1Q{)=5rwsD z+neHL&zw2?#V>v7#?`AN?4?#8#=^9_sgZZ#E>*yIbZALo%Zp=$08G zBu!)znTiVtjwd9Ff^1v%vSR^40eXs3D9r}AyIb#IV``VL-F*AX)yLoc*!`zYUVHnF zoZNRK>q?ES_e>{<+xGD7ci!3C-)xU(Q`_uKIV0Dr-oJtil7V95oEU{h>e@mSqFUfn z{zW|bSmhA}5DiifAc7FNN0UG@JGn2$;>W430EDYEYekYIHgL;|q@2Aw8omZ{%s6C; zoKp5v4P3-a{uL21GE^T6ksvtx4AQtQeV~-)nxdd2-h&6!r!m37%iabVI!M2|!2-kM z_M>w%$`}KdS4ie%c;kw_o-zs_BfQ8YlbJD z(<}~yH#lh5RSiP6=QQ{3j=jd_yqi_cXBa>`RdY-PbMI#E+<-=|X3-0ttw+=hFwo52 zT^pN&G>S)~pWWO6wWMquWX9^)b?p@OWt6t9Dm&fX80xAHW=XbLK-JC}HND|2yQ-%3 zh(lvp7ng>^HTp(V_6nILprCIT^q8kU3()d7xkYhx&^PRE${r#DR23!0Op!}T1|v)h zQUykciQ6QYXj}0zD~j04n1-vTAw7EIa#2oW4nc&_U zZT9)*)#Dew`W5)nJegUmD1z3$nWlpiC*FSZGN>)eFXP0-A9x2jTwV34_r3q2haUdb zFMRIs_?U%+!bEzXc5a5?U+tICK05DK%EizI6ko@ zHDxftB+|I0)SNT3NK@6_yknwiGlkRR+Z?pH__rK@;?|skvp83GF%kTUT z|J`5wv48O6*REV7nq;$YW)XMC`)>9&yW_)0AAj#3_=A7&^I!PYS6+XGNx&o`rVe-J zSf^;vyv}X<{}T3Z z&9-e>dKmP5t@kn4+P8DdtgNh?RZ^)WtE7@tB^e8ckt`!UV1fq-2q18T!9>6xfCoPi zK{$vYg76cBU%(OYh`@j>31lPR1iIR)lB%*)d96HInI|vje)c*0?7i0>Jb3hA`k*v3>%!hzIl70US*q?7Xc5)WymU^2TzPXohJN(kkM8dFKlAIq z_Ba2%zXmwWH7CZ7?(o6hRUhFBSdRb*q-jq1eCtbJ{=>ig%O8F8vCE5aAXz_QngUNy zQsD!*ck1)*vP2~2dCq-;g!93Jhp)f+#yj8p-Usi$-!EI0umq}Qu*N`ttkYUbj+PEh zuj$@*RvXv7JNU89JwA}ymO4&r5V#n(3$8clH`s2V`TW^4&H0tD{PsRx{^h^)U;ShM z>>q#YtvA2-y&rt`>F1=$N47g53$?}=))+;Ut(zpdM?$?A@;K(0V>hr_kB|vmB?zk| zDRJYKfXRTWba*7G7YSt=$qWv?AxF)I>l>Z0@gpjRYSTjVAd*gqEaPcUwIWfawOt;_ zvBz1LgY=PCoFzfHeehtrxqRbW-x}9D_M7stv%T6{L$lxez26&SfB5jh7k}!Dx0l=A z8#f~{uEXb?Sq_SR=|-D#M1fBrNdkKBlIUEv!HhsF(;wUjG%|OJfUEUBeRs`$z|4A& zVdttx1@Ap(XkL&92jJoPvey2<6yhz}lu^ek`D?;EaLrO4Y37q2p;lak%gu~vfZToh z^r5Iq4M!P-V+P-oJn|oQdvkg7t+&4P#h>~Ef8ZClzWvSr=U@MS{NMiS_rCM3e!1xn zZtk9a&Tjp3Auz{8Ru+UlXtZX1v+dH_Ml(l2&&vy=UgbF|4r84PLh85$u;?*U5(Jw) zzq|YX4}bWp|Lm{))LU=7{qEBke0K6hL;?+he)#SWNZwp7Q)ZpmC4*cmQdQ+n((a-t zQiO=^GG)suN{ZroAtt2?MM#!vs=U0ayG(H+55NWW%@v!JuJ-c#P)8v4uwsQ!v>4>9J|3UfWu|hFfHBOR|6VBQwRIv#pS&~r!NT!A93L@mV zlQeiy!IS!>!9Yw4T4njvD2-YEZFTlIK~V;1&S~H&^=)&?LIOZqlvescu+C4Dr&5dl;Y+@j4z=@L$ng2soHAm zLF9U1X)5Hk0!~K2kX-;~1$o<{(AHLZDZ3TPxkvvQBy>^UFB|K152Bq2ExY-g(eY)b z=|13$kTa@ODIvfV6Cz}&{CjPTyl7XMZ4NpZn)6bL{VzAFV#H8M;ls}{!Xd*_s1>A?uMl2J z*c?T3PoUIXw=X7yqGB}D0beN_2NHmBM|6SJ!6#`RAVv5+WnjWg&N+w7jx5k?nwVu87fHTJnuqva+|e~h|1$Fha|<7 zOD@vEO4&!+X(23KChn1NxDf6ImxVjbe#i#R;2v>&;vgAAm3zS>RnNMO^H!6ke)AY8 zdrO&wr%}Q+ z-}=Tk_v_WnS~t1&>*!lIa*Qm_%ILQu&E+n;Pll+Z%1tJwNay5Q8>2*~>>jgLH8#=( zX=3_nx^cix`c9fY#+a*YHqJu0`@wV)hcx~*3E)eS#|^uCj&IKCNXd<)r5jR*2l^&5 zj$RdD$6m!Fug$h(?4NQY<(Qg+Zf-97KF2;=gJKA0Z(n@li@)?sf9U6a<`*76dGdqr zeed7?-~QWw<8S;IGgDU5&b@Bf3_2R9Ck z;Vs*Z%OxzqEA5qNatNEkYN9cUH=}aIeINTAb04E`9m5|ze)xqie)03?&;QE5`+xt= z*S}`l4au>OpfZoxBZGfyOlFFUwTsXcq%8p1Kx;u9qFGvR>CbR%N`oz-Jjqr8w5mgQ zKfXC$y4OmEnufaQGeoHo?t-J6?=QC7hu5+H=-v0e`qgjz#lP@hxqWo|;d>u!y@9aJ zvH%_#B=9I#Oas5}zZQA@no7kBOdP|F_R)tQ{owmQ{8PXBr*0lRdhz^)-9DKwU$WhD z?$%}!KV*nmPvtP0#-z#jye5=Ri7m|&2N$sgl zFTL{S^0Xofi?>R`jIpQGBy7Xw0sKzatM>f`Ubx0@{^!5>z3+biFa4#z_~-wnzwqn7 z{_F3)_ul*Oz5n#-(|um|efHjNZZ>P}dc97ca&N5@m_FwiK{a4z-5Skc>RXFPkreIf z&6-pWhT`>DS5M0&h?sMx#ft=AHb4P^{%6_P5d~#WtGxFfiX==)4hc$M!V9@r!Mr5- z$W$WAuRzwYRP||U%8VjCjQ;S}&37Mjyz#~x``z_BZ@;bZ0HEY?rTNr$v-RFS{NSTc zKmF{^Phd;t+&4Tg)cmQ{J8ht`UdHGcNg?OeeA8Z zYUd3#>rp@4dIQ*cb^u0^(SE%WqxWs=jb_*DKF0*qtTQV&{dDS({!DSRl#Yrms~}GW z1V|EFW423VOPwN}i}ba~@QS6=Cy6Xf02zwn0qo0Cm~EQQ<5wtd8T%#nhB)San=U4QD6{_L&QYM@^Y(%Xn0{3 z_6J0)lQ(nEF-s&UkqjNmNxl|}X@D3}@ew7dtbA1yOI1y&^4-FJE`I$$Ly8lzD$b$x zRj1HC9yAogy7_c|SM(HtT!a7_{~Jwh>4CUVw85-i2TAs-7$g#gwFsq-;(ol=P<11f zl}XRo*Nu7VXp4wIE}&%|T!_1^l$e}j;Cj81eji*@@4atL*}%+zEi7WyvQm;;r_@}t z8G5f#qb%?aiZ&uMQk>G1reMHyjEteMPoYtsJQ7uwi#7%GEQBUV}*cd}X-)v0nbNX`8noU>R+H~&0G2TdFjuDaR zbO*&2(?td{o1NtXf}+?v^o%8ky_BaI(QekFbln;KU#Q~W44H(Ebqr3w6)LpCwg?v& zK3i3M0puc+fYJ3J910-99G9a-#jLEs%v>^gvrf{naPtIpY;}|*>#Ath%}%yIYC1Bi z4NUQe z!GcHfIei}nMQfaIuY7fWeLP@`I`gAb@HxYtnIb?jGoOBprLSa3Pl8Hs&J7^EWn@PkskQ)0t71)!6ZRZ(k#WzHl- znVA)<)jIHbfAt8tJ`v{Vq_$b0Oz!3>cFojrLI#0P#UzDr7Cb3$odE23nljHSdCE~3 ziRkHY;Nz}h#hR53n6ehh1by{uzx(Xt4=*>{yuOTJewhnGje7F<(LUyjyDRNhxuWAC`Q9D5&SRkDWyD^7Kw1I%IKkx!l~| z-rnB6_2w7eeDjSjfB9z!K7IP}fAXLHM}PnC{oSwp)>mFWe{Q{R51x#Dj5#&EUwYpz za-Tl>*5`FdcmK`*&j0Yw{Q95$fBgr4z4h)wOvwQ)N#8>=m=z^jVWkDnEwvv{8Jri^ z12y$HAvd=-m+kUXKl3G;{mp;>-~WyO>>sjiEGo`mg@Cp6Rji?JQ32Gp8*7``9ElDD zaeHJvseZ<5GlDKN8``prQOW#LohOI3Vv3CMj^kdcFeIhk-mD2!bmcT3$I;4ov>2BkX{?T8&G(3Cu z)F>LXPc*I`>-2$L)%RV?R!S;!LjZs*_7%){(=I_N`1tXY?Q-+&-+z0I(YKpe$v73! zgo4)5`Y{D8ueoe1Pce9TP$)}v#$eZba6}$B`6lr?0fg~k13PqqIrI{3>e{61^*S5z zgYUodfBq}~m;dY^{>ESaul?me`)B@3Kl`&k|ItSuzWd&fKK}TVG55L8b&qVMp|^I^ zFJs^Lah+p=*}ojO;~p+zs`aqC87dvYqIt1AkcEgjZaUo;oM~gXhvM6nco#9M%$I-W%U}MPH{N*Ta_M^XXzb&~%NJuG z;R^*u6E{3#ULhG@r<}~#3~R`GvS0+IG~6V)&)z%1NqXRBpymW(d@G~zoDm$?CMYct z4@?0nb$DooL-nMRArSFmDn!Qw%i^E(iI8}crGFBJ)W?{uHJUY=(A<3vZ@tl4Z*99= zo;-g1__fzwfAadx&CQtmx4!**zw_7r>9@Z5jd$Ps(SCPFYu391`}NMYi`vi}0NA&9 zGzny*b?cq|Vyz6PQW#Su(W9;8nmOsEZTXZz9nA3VQ%{!?#0 zx|oDv?Z%aHCe1lzCSL5rci;KFZ+-3Oe&NfIhx^nziEQFtCwKKAGyUQ8y2o5z7}5&_ z2&9W`F=;5hy=Ac?k%RKJ7>y+NA~M7gu45|1jEGzk6w`ILJ>r^J zDnI@W=}Qp7T9sb8wRA8Hhz=(e@4*qXgs&ZaDaj&i<(bs7D0|&(p)qK%aF6Q+%sJB& zFTt)B4gg6$R3U0T#}X(~${&S9n$-SUnuJ61Y0o^z;_sQ|_cNcVusS%6IgGC;=--hB=~I zJZk<3a?lNG4Njjf$Q^B}2k+06gndjo{iZ>-@6(|%)g4CrqGPEo)V(6+cHzD0DaPu zxy$J)INv;4z9?XNBtg?Z&s~=wUmQTCu9TVSC_RG8MMDbI#zHMB4a(j!fDKmQH6d(fC~6Py9o;Nb$rjNAy$xF>Fv#R-FiI9-N3VOT(fRpBPaks|rbM z-3+CUqcyJ`uf z)J%%2vhgfHtO~V&!#F{1g*=(1vI;dR*nZRyFkP$*G^BFZ1@0`{xgYLukt9|8netX_M!{v?ExbFkj<0CX_4w6rvy!PzbvpJlb z`4k%0`HLSP4!K#od-n7fe*TaD!q5N0SAOR=_q(fIwjd7ctxGZS`s4sxGmt(#Nd*b_$!1ifwF2TW#(M(RUuraX3IRybz$@iM8x)Lkd)s>7 zT5AEO+}_^a+}ynO+H05XGUs^j-S_^%Klq2g^Es=G$I(@$Q7ykUe{IC6w{`KGb?SK62v*!;UJQ!p4)*e217&vijr&-bv+*EiGF~VX6@P}YkRGG^R3R%%sAWkYB zAm%*WZmoaz?DO9Hul&hh{oUXCN5&i8+-e`VmFA#4DUh*}j|LDfYlhu9uG9{VKl(@h z(2Hl!o_+GEkI5!TbKlKc;6CDv!xgj?N^YuDVu89Hf*^oV6fHqMC&1TVe`^f={&&6$ zaEvG^ZZVEMIB3~6z<@?}z@$SVE`aa6b0;NMmcRDvv~S0eU9XqAjR-a78+5cybD-U7 zUcsR`=Deb_^}b*Cum0{oefv9a|E*vA5C8dp;m`f?Kk+MH`l&Cy{>B^6pFe;3^5vXk z>{lA^u2)FC_uiXsZvX^i^qfP`*r&Tk6u2PBfMSkk$)`NlkX3MNts#A!5)YnnH~`tT z!#ElX-}EXF3Wt$MF#Uuh)}M&)D%pdU;9I?vl_QDH6*w5$RZ&^<`fG2#`|b}v`{WZ< zMQ}ct61u&+4g_Ok!?RC6`~0)dKK|&V@BaSxzVy>y`k62P%+LS)&%X8MTelBxZy!FG zWA0-gV;}o2`5a?TA7g-;GfNlp>q9*$mP~Sakbo$fQsI*J-OSq7Ip>^X44`a;6v^#$ zzf0=k*9FX|qJ5NWuwwTNeG?%SLhPC3=rK+?=0n4k)`zrcM$X+P$mTwmQzmz|R^4j$ z;KA*a$4?$TesXiUz1&=`cQ1eVqaXh6?|$`bU;pa&-+AZm^XHOZ9^6{%0QS2(N&V)* zxVw{kzj+XLat^O>A`acf+9nz@dW5?ucy&q3{hajG(vhd8+mjFrb#9kv$p!Y0pFaEi z^JiatupMUhhd)=Uo+h#5XGtB9mBxV1O&T12(lo)Q2 zR+>Eeo&Z$oLd!ya6sn+T{XvCY1g!&DxP#VpQ00v-v}`|L?SRUEwH)2Lj$fR0&ww$} z9~RnUag=KX7p}(Ac4ylV{$843q}P-RFg_k>U;s3CFb9IT@qF1O&WZ3b;UK6YU>qC^ zD3gkEBP-G?OlLXz!TF%{V)Moh6;L2@g=0reeL%97b~m2OXIA{g<(%hpnN}*eGLgCZlmm1~fLO z?JkjxW@r%QY%Kx~HL|h6;P3^NdT;>z`7NMe&T;gh{nPE1&XhOt?9`6L8QxyPT;8m3`Q zn!`1nAVqI8oJ_<#GtaqHa=5t9>8`dxYGXoT-#C2Qm>XLFxN}NCcg-MsmRf^L`#xRR znh6|J?rPlRgHkh#ULC`f#s>4K7_DH?4Gqb1#2kvC?AD-Z5C46Xi|sV2~Vq>_*ViAhepY`!(!YrfFd*{vuL+)lPG%h zQmd6rln^yI72stvOMnr{!A3+8l4W!sAza3x9v7Zvpdy+~n1gYQ(FirtS`hcD(HiNi z+y4L*V5}_jG7&4b$!WVj0Sh2mig86zW?s{P7jl3g;D^Z!BmAa zW-SULkTr%$E|Z-3@o;vp%mo!3vhIe-Go{=FCP8M{)iGyu>5~jMGk6hlg|n0~aku!Y z3PwHsKFh!)Xcyz1Bqe7}F+kC*kmswVWK|}JNmI2juOjlS2A<{il{lsU9`2hXuWSYG z`s!6Iwrnk_@(U#}c==Mfq%(jzq;*EB`|GURS3$c_(OQMNfT~J` zq|*_-Y27~i?E3AuzZu?$`w;+xFv{S)^@k51e)Pk4Nu#ylU~6-F>pe=gX!JdXKfv1d zC;rr*c=XzX4?g&yHIr-Wt!>>$CV5(0onNt;HTo@FC>$PUY8SI?GsSYa%g}~*R<%ws zN2x;SsDjKX6d^?s)5<-II4Q*JYv$@{#jr;MAb_Irj$wjck*}s9h!z#LSO6j$6*`F| zJOK4vTSlSsEXif>ed}A_dTYJ+zHQsK_161k+gk6J%T1Jl%rV9o@4x@v*T4StAAJ7@ z?|lEA-+%k}KmF)k$y>kamxoHuQN+9nkk*>4Fp%Y6AN=5l zc5^F9Q!xTOWXiEG)7H{|H(N9jJIE zQd_$BnOB}P++`N?MK!L*jDhfkg9lBmH(qAjKKkh6uYL3D|I(lTFaP>K_h(oKDT46` zKy^gs`9;ffW=2H?1faa>&=4tm!G`WH?(W`u|ASxu)4%pN{_0=5?gE^h(99#A>VEnE zh!H<#jU=1z&tE)v`0x+^(jR>K+0)jI?Z#cavEDkstu;w7l_s&^=e~zrtb*s|I50bs zuGf9*mq$-t`)B^(AAI`p$M62=y|!IIW^(`ui`t(JZDahubqiHD_ok4@$;@ zffoK(p=O3JK4TbatZFQKj$;GUv>^?9LJtRJvMdE)nd7DX&v@e!!u7`q%P*gE^7H3UKl$W4Z~y-5 zZ#;SH%{RaN<)41*&9~ls>#f&bf9=u3N72SL=NMy-G4_4m_g&E3Gee82)>&Ff^0AL_ zIizrqF!qtjA+tEGww}%obDIqm%T#BB($WUCjB8bmE%-Y&0*JXV;l?A2T^TTXYqqrw z+B@AE!6(ya@n@N-9CKKtV!6f`zN1#{O-H&hQfdUz4t!-4tGF^YSt8YsiQs zQjTI+jZ0H=ppkuhes}lm^JhQ(#kU?kxVi3=>5U7hB6HMFclE7J5q8X0 zL*&(!R=&iyZVqias>m12X%Y*@ghdpdwLR$vhdgJ^Z*FJcCK=Aeg7|SfBt<7ImE;(y zSbbI;QHng{WGpjN6>6E2Ug(Y0&@nP*$>pqDGgZF{%`;UVfrk*xtXO4(AcHR{!$u2- zI&vV&x#LCE;ZMo}!wl*7c2_u&oSp^!i4~U#vJZr`j{~#F7*UQz#x!)=G0lWvNN? z*d$dw$nxE@Gb^ta#9R_Qq%8`gYNRDu-8}*&$AGmwydIHN?6pCdW26+7Ak|4PxGYq4 zG@Ded2_WQ{K-R#rW0|9BI!clYst*SHhJsg$_vEBLsw8{ucvLl6kcfarMuRC81KM*r zh@uh6AS>J;raWfX9g;>_p*VuYV6Gb=X>99ISYm>4d~$GDb~}PrFkZS`%LC?tGcLsQ z@RxbNcE(PK2neQ?t-7LuK~EyMeoxO*bpf$_gM4T5ImdgKi(Zzhijc`QOdN1=vRK_kG=EVcV0aI{Pw{ut+}iBhD%^H9wU<_wb^nj zs%|TvDY46pT90tJHjB)0#YiY-0h3I*&9#kC;fN3gMVDn1{>F!v0L;Y8=P6cS)mtg7 z%3@e_^x?veutj4U&6-^C;c2K7IPZ2k(FU(Z?Tt_~B=te){=mpU!cmne|ITgmcE@51)0S803r+ zV4I>vqCdLZ{onex{x=_d{L$9BwRUrJiGXAuqvb65W*OX`M$!Zp8Iv_?kHV=1={`M> zHA(WzwmpAw2kG@Up1k|s```cGcOy%edbV{RldSYt>6y6xyetYQ%l6HSpo%*Z;sj^9z6H|ND18{NUqY z)(xitW;yu_1~&8!Fv&<$wac7B@3kSPyUqJMHwbw1MG~1Wg|1+qm6GL*t6u z$GH0(cSCYe)7|H!k^OSL?mv9zop;~;QQs~PA3wgmy?yP;lhx)zHOK7wzU@Xty)fFF-BRgl>u7TFhT)kq`1PG=vpmTQlZ7uhAl%B zR#X{nW<-4w@X+5d8Cb75v=<#dc{{466 z^?AE_lGlrG%92b5-o5<%)AxSx!*6}_n-6Xuy#B`Puf6u#mwx)E z-g@)R*WY;kwI{FLKDfQyT*7T|_c4aMM>%`wpB(Sy0(5(O>#qHJl{Cl9UewIZoJB(b zin?Si=(3@?qK8Edr-%zJ0Okyc#|1IFC1wzT$LE9d-({DUhX`!F?bqGN+uK`fjo{^G zyS=%+eQ>+=ZQHs8pY!>P7w^9N?#Ca0^8S18|KR&S`0(S8K70D~?#1&t_DJ1WH+SrJ zcjXM3&k2|?qO4vJeQ8UBHJHgd+om{Z#cmn;1~q(Oxs>a09gxMz!6?^7C7*e~T$vk3M{nHy;6unG3!TyV-n<4?g&?cLH{~aEde3dnPe6BJ!DO zc~mf#4nm`x?v@+M=nkmXtwj5br8n|Gw6ymX_=K);uJ)FpqXQCnkU5|s9q&>=OWjy%{R*dj=V7lk=Vt}(IcCjgoQG|ZwG)jH83*2bfPqy%O89}J2KT5G`v z0W+V1CfPg+W&_iXHesj9ki%;8g$QsXMHTB$17X1l-3)My;bK%+ak$t53Tts2bV!&k zx|_>|D68RAQ;eWR6S`|?UZgQJXWGZjT|UOV#`r=PhR>jdo*w+r0VmBluAYe!3YA#T zemNwV?b(GXX!;C&wNmi${(U+aPe4j=4}$YCC!{#QaPNn?S+ZY2A`3CGdoQewLAjtf zjP)|}D(wp)rcFt6jL>hh&ECDY&MaS&drnwz_c8V;(PGpSMiQf9S)H;*LX}Uw>Q{-Z zSr&oyutH59zX8?CnDJQv4B16oya`Jemx06e6PU#^s^v z<9o*#p#?)(E8lp+&eDm;LQ1$$f%VS-N(JT}XF$20jK+Xv?4*1TMwWEANCSIzn6E0W z0OeJiSwO<6+*C;s7qn-oNlDgBLeEgvqNp`yif~C5&yQOBNSxuJEXGQRE`n-;DDGv* zH6i6J()2E9b`-3F2ON~%WCgnjzFgg?qC(W|p2HkezGU1hbZ6Nr&Qa#2N3lU)>tt z{_Z;;fA9fY7nC$rA#$3ep!wSCuTA%t*Fk%j;0r3cjFx(XG$9A|E5G_{zw*ca*jIl0 zAHDY48#j+`Z*Lwp>)WMYE|=Ten{C@}ZY~uMMPy`=FJ1dnKYy`b_k9d^j}-Td=Py5f`st^ie)jCyv(G;J?CH~|Pd|D3?DJ>O zK701!<%^duUPcmJ?qk0K2LvZ|4DW`jJ3X1(bVU)0RDF@4qum7CVHCXY`5j!4^*LorS z@z&J3`y8%sedAl-`s(k%ck6a!yw`djHnKvi)B+XgRBKy&ThXcHl zH!oja(R1cBvG9TeJ_-;lAOx6WVt?`C;TOL2ul(2lmH+&oeC0p+|NH}^-9Eg%Y`t6W zm(6J1qTg4v;E8X>mVrZ=aH+DsiWoY~fFfRXIqoff$=VULuP7bI*_V=6G-nnF24keSV|b-Ogoy1HbnGSoX1G4b zyn@Mpr0Hg4-`sU~ceh{nPu$;YW~@=Wt!>-o_V)Jn!R^h1+uPgQhYug#-rnBc-fox6 zWxLt7ZQHiiT5sJf=f!7Ncy+(lXlAag%BskYpK?-O6`U$QMQqYBL7~9#u%{UF3Ws{`lj!UVHMRAN+uJQ-O4}GZ;Wx4~Ass z&?VBS0nIVTWH?Ah&AH$C^~H-%pMJ7kwr_v?TYc+Ko;-Q{_{p1ZzWL^xZ@&Ke>kl42 zeDv_q?d|QhUAB!?g#a+X&*_?TOi8!5H;5deCr)(uu{tkgMXhy`X_$*55M)sYj3~*G{YUXC_kcu zHAmy!_kMWY{o(Bf1s^uN$cUHGajRs2>RbSVxl>K%>&ze+GSW$a1Z&pLcbbYL-GTJQ ziP4(FUC$lhCX zI*7h)sOqWk`jbu`QGY!F_*A-=gu8lc25-i0wly=Un;Me)CT3eF|8!$Cb3o0BCZ9RE zjya4QAUH2V~*G?szHO{+RJg4AiChg zBR?f^PPlW<00`TZj~Q*llrU$uFqTq_Ei=JqG;f>1%@yUznsfKaIXcKrlNkKX;q|*L z=zHRzH|vr6DGvdPxSQvC!#UA%f?!}MGiIU%--rT?_GH8XC8yLo;^4b$_>75ZJ&eoA zRV`<=!o#J6v$Q5XtPB*FTG2^2GkZr@WiX~k9|sxfktqptAB?=Cyvl#F`YFzN)O2`y z{6X?Wl2Z{~tF++3SpXjT4ohw-X2ZJO(uj52Jf2rD(xowGZ@gabfW5T_*Yq*R&LEC4 zLhf7)N)1L~dQ{U??S#B~KD`p2Wx&eUF8C=E{7gev?q-JS)dy@w7g|viuQ*B}%D_Q4 zak%9~^oAVI&gFHr>N=7{Fgqiwsf33}AhbCv*kDHco~qnupd(&o^uV&gN32_>?C_D9 z4gAMeEbIo$ou{HsCr@*FJe8=d0+JY7w47AeToozHJ#E( zEUIa&7OjLy^@xgDW2=p;Vt!*SY_{A|jS)c*DhBCeuhKi!F)4G|#(TsH2*s693rp*! zT|*tzl<-iB3h9$nkgjqQ0ah0^?wQ*#pXF%_=5^t6`b(0^Q>#qUQRG?Ya%p>II%R!h zq5w#cC|1~PIyhymk6j|h&_DU7U%P(xDcVi2u#dZm)}crRINe`+?X~AG?#2)<&F3U~ z#$J&~b!6h&=eAvp?ce!7{yQJO_oK%TZyr5)a&!B@*sPn;dJi7>&I&wO7>^2~EpaIs zWlC3X4JZ61f*Q|88~6IAbHBza zlAQY}lVoKZnJTDGIf7hp0hy^K?8N0%CaO1(_omg=>7R~Mj-oG6vJ8SEtoaTX zF(4YZn|5gt<6d9B4DA7jl7*_i3#G2_{hSLGQV|2lGB$E*YTsdlaO-^e{A1A2FB(H~ zKA`5Hq&Y)CaRe*$FOl5H*)dDmN04Dl~}op7}az@j{wD8GzHbf z*vE_K&!eea3w0@_y&&o6<^`0r;&F$WgiKo4tbk?679)m{YPLY?ES8w7Jdl*6h0hiE z6N|+Xtt!lsYV3MkMJ!R|p+yF8-EzWE$Xvf5x+X`q3v z*k>8EXvn!g0ujhfBoxA6`y7)##@+L0&)(y^+vU<)+b)-z+uKKv9zA;W=*i>P9z1yP z;Nk6q+uMf^AKu(tE;l!qZR@>XE|=b#HS2xry8H=0J)3jBc=__#v(G>K^t0>r`uxT7 zmoHvC`|R1vyO(z_UtX_w``tAPtq_9SY+kQ0Dl$@@rAC^H6i#i-asXKRuJW=`TxlJx z(Ka#4EiEgEL!^?NrCf-VvePN7UsZB(?a~Boja&rEC}5bW zQC$Du4g2r}8&Q3M7Gq|SNWUR!Z(1us4^vu4b_J$>+7|!`G1#&T1Tj4=lcYI_D8ldn zM4AW^Q;-_6x+J6^#YIRzVG1(HqN~fZSi1Qv8z}Bmu&qV1WhmfXiDL%9Lzmy}Bj5@_ z`o4qPRWlrRO>Q)?CI zme-_W*(gsRxxcw>@y26@WqA*&5?G8F%H2}AgCJF-7Q(^OdTTl&D~QRXR5yMkW|x!{ z{IK3tGIqoP0_J_!|5Osil7d#uaX@c;@nU@Ct6!DR{-A5_)kIG~Mj7VKwmp3C=m($v zNHA;75gDzfY>gAi%$9H6_wkkA{te9+q_@__xTAHsGlonf*0;{}d4cZ-<@Y?zdp|tA z?d*{9C%xzX@8_3az2+;|S!$>L<lXlGX$;kauHF zNbDwP1`-bR-sYIoUDNY8nW@~VLlJ-^1LPD)HU;&7i`E59rx7Lv#Fc7rdX)Y}ZJOW_ zHme+NRL(zf%|gwhAr4Vh5yCwt$adN0b+=}Axgl-tS7FiIL}U{3+t|AGt@R7rMb^C3 z^8L+88B0jGis6no=%iq|{+GC1K2|B9+}9O8Wvp;~@V_5S4XvyXoGyFdEQ`rPN;=bzK}pb+v|Q&=&x9DOZpC0XY-IvJH_zQ7m!>dSdUJ!w|4=@i0|H zW}Uh;ZgfoTG;3RLz4glzz+&J!rh-MLkYTb#y+=SN27s+gGiw+W&8qIv&t)((A3m<3 z8_ZhY_q#FZzQ26&`KOOtyQ?m$e z)5Tv;lY2U65UYgzX@Pgku}p8ka{8@Q8Dr89p3OPN9*%C*9!102*!O3jfBx*VXLm1O zy5`H5SC{Ym?sF!@KV4Z?9=bGU6m)m@IjwgP<2qt7nR^sB6?3N7Nw)*AE2x8QgKcav zT%>0&7+AdcEVyuKJ(mA|GGRIgBP2C8k_+y`3I>>oezx zvaTd!f#o;Gv5B>3mZMZ>{i$PDLP0h~ePJNzS>S1Pf51U^uvRmUL?oKikzUT8gy?`- zs?AEggdpdYoQeiC7q=F?07!&{fQ4xcgGR_=_MFzdbj@``l4q?`e06!0to(FLuMQFc z5W(1xny0v0Vp#(!3Pu(8)K8(e*p5&nYsnctb_i>fWHnkdYf)RBQ!*zRlt3hV>{B#R zWLrA9yhlj^H=1Z>b2^(%cOUMOnW!11E1=Jm zHO*u~BYX~Mwq`wMMNyO+#27*?v;crK4A@#j#v0y@y~WLIYqs?$10AH3YK^2flR;)^ z(Z~gvu_N3hc#2mx;0Mm5qwl1#SvYnH5FGx00YKSHk$@&@>v?#v1V}&5*n)lxl4dn3 zE4(v@8{FYhniHsQ+77`)SB!+WoL?h@W&oCBL@k^7xSI|aX4c%8U~{@)9v60Z$G&@l zNaS=Wa0A+$(sTk-iV}Z!%^1bt8Z&6gY)0k<7{llE5qPZw;FK#W+JR^S_{!UiNpL%+dx}-cq3^OXXBPEqBHjW37sZg~Y0+y5>D4v9PzdsrtW-?*U_C%^|Ad||Ly)*(8PXCvq29IZ zg$#gMn;s-sgtX5YCOnAeT<&w^;f_--FTY)dGed}CA2`&lL9%8-HfUEQe55sy*I`WJ z)>NV)r9k3nC758fPbAW=1h|~|ce=T7=1BmObT-GEmy-m8#Yo4n>p~=LGIZjK1~a{u zhNIk8BZ(HuQ>^a~v?UCf3Si2|UFh4&^Cgs$$++AZl`j{SjYbH8N2hgUbQxH5;YDAK z0W`YYTI;O^uK^t`29{ZVOQ{kxExsJ}X3>>fwNU9SoS==YZOVZSU?Sb|j#^GegcrCP z328*nYeC+cY4zvImzJYees|hAWaO= zUy~k<{RKI#by`kgh!k1wtygH5!A$uj_i!JTrm2Tlsk2&w6{)PXQDrvQVoArXn0V!b4@lVE|T0iF=Fp|oxv}+J$`HtZrN?0 z^ZNV+t%LFaen5f0>lIMj8mfj;5GfY>X^L`6`f_QI7@~Wy2<_M1$GALsG$;J7OLOkS z`gWYzVE;+@xP((s_Uh~YZk~_a{g+wZN91p2u(X_(FZmSwa9Glc18Ko6x<~*6Hgpk$ zPY@z84L*ShcoylHMOQ^Llg}U(hA2$UnO~%P@m7-eB(QzGL zBEz#hORs!UX+0pkzQ6*c0$&Qi%`AGpkKqKpaz=Q36-n7KeJt={lAwIf;O3g+uJtWw zaUch>)Jrf|aFnh}Tdb?aSr?ob&d-1G* zg!QOpFeQ%QM2j#o{Z_?X8w(h>inS_joP9c0-T)N~5e!}=+6KGOO!?OlRXv7@CQDmU~daM(kAvssgG*FT}qXJL;w#o~<@z+k51`N)iOb z#GrbzFrMX6ouy>Ks05PZg==_dT7`(*D#lZBKPW4Vqgm*1%F9uU0b48lDP?YetoqlX zIfa&m%ZH)2l14_{9>E|(0TyXF|JHBd2Ownh1N4*o^Bd6dn$(_mnYzl!1*(!EiDrVsgSWG8~U zq#GsQ=OA#?L+!eJHp69;(d6UO`(=}n@X>oZT!6=*6{8zHVW0-uj1jegucSwl46UdD z1lAgh?k##SQm7LI1~S~UL#L-DpIj21hZt!!f|MHp1O{rDu08=x$8^X!9f13YPAI4f z^BkC=4~Pkhb7DGtz~}Tar3ls-0MHnk;B>k(y6C1;!k8K}%OS7(xC_z*7_3d_a0e_n zZAP}sgsG;$IeoZ>L!iXzbI$3KJCk%s0NQjP#jYrD%nU;S2A^_FlNT@whntI6;3x=> zQ#FI=E+W&8g{-NvyUQ3?uE zHb}ZCM{8qFR3aknS<1H&@Jwf_9P~J^kuA^a!0;r`5nqJND|uBO4TNA#3Qz&mahAH- zA|Qx^VbQ+|gFv69rE^;=LSF`13Ei~P+&V@YGV56r!HfBQw(y#oTV#ZMCef_1lhzx9 zl!wez!x8%=YLkaNOFyH(I4M@b=~>gR3?OAKU;#C2tr_G|gJZ^KMsRwzQ1#Zrm!qti zwcdI&ms?CLEon`J!c*6*nAeEf%M4bF(YfR#Jn}`>lwk%l&^!Wv^96s_p^1?Qg>(_p z9ze`Iv|Mo{Y4dF0#X#BajgweDM;{L*RKAQ;TUN$90F$`exQW+RvlbgiEf@ zAGhG_k5Uk{#Cie(A z0NB=%m`e$t3~cO;+l{PGm}XR-u1C^6*A{j9jwp<4D_$)IS*yacKVLQ=zhMcW9Jsnb`po7+u(35@gG=bzN08ScQIumfmjLPXci0N#&e11JTZp7j*DPGg zr?u8@Z=9y-lFKJGmEF^^7nbe3CJFm>Z*2YMk@lDSzRw9>ZZux_bq@~dxyMjcgPGhj zE(KO>kQdVFMgwiL=F{(9yo{c{yXRMuY%vg}l~ggUg(VNP*lH;cQ*s={<7g_k^t{jO zp9Dc{24p4x(Zk#VkErk~T?8+@zN|P6ny?-jAYLBAf~aWM*a3&noUoQPRsj5f*^QtD z$*HBDS<{afDNGM7*~mR2^c<>K&=eIVz6{AB>D7GSAt_v z@TyL2IaPM7bKGNun_-nCOh-1rdL{_Xe0pSFt+lpY!h2kaxPWR9`X|mi1F?3t25y?E z@=i6OnMCm>F7l6OiNa>Jek5k!{kNe~5 z1f|S@Ls?WqR(g!gzJT;w(!U{F>_za}SqlaUHEWXQb!RoRYYtX24#0M~7;Vhyb4CSI z6=fVprF?W{*@QI+uvJ*sWSb}FI?Jm8lx-!EJ zb=Mu(KKcClCoew#(ocQi_OiVgoIsM#7#W?1qP4c)?ce(Lx9>&)4uw@Dh__ImWgP3< zdD=U~!SE!@M}=p|rAZZDkElG11W|SUC+wX_=QdKXhYz^~@6?%r`fG7Sy8BTQ9_m}! zgcYlm5LUVw@hrB`QXs3g%RCjE1OcDfkr2ckDoK>e-vi_mMRKNU9E#91@tB5Xk0hv- zAuqFE%dA}1tZTp&B9k|#6AFea3!O>gxIyD>`Ad&rBbSU9zjqFI$v&|wE~RtYs(>|r#UPsybTiF5ZU#;EupM8CVvsT`v>reF7Q z9m8Q_cVPt9U6>bb; z5%5U_Wt#i&J?>Mk>N}W7umc&Z7x)E92BQVAB5i2U9inS+nc{GxP+0@g_(9B3#(CZipw4M`=%z9vg zw7?=@u-2kxNTnX?ClrHc#iM5}GRPt}s`pe+Us0fC2;}6!03C`0Ojp}dqa=)SD#DO6 z%A?{KIE8M7eJBl>((zj-2s3ip0Tl!=S|_URD9rrfSRA(>r=ZfZ4AMSSL6HuU=#-jR z1l4&_=%xI7a|N=^1S>DpUy1n+;mZ9!Jrz)nN}jJ+_i$_D`In2zlT73XPb+l( zy8CW_xrfL1GJU$^-Rp)!z=&iGLCLmO*bG;mRckq#!3D^A!a(Kmm8i0*yj&sLR~c~- z*AwR5XT66Ow~m;d7p;RGc46Nns~*@1A3g-ZtY?DK$MU$boXPdDD;!;Z^s!p6o|CK? zH3nF4uuEc@KZA8x7dKkBb|Y(%WDofF3tq z(4l~}W2&!<_pNAa#S8Tb;A#DUIFtE8B&1A3Lq9wP;}S8IHZ!+Pn&8QiH|d=7H(7X1&ArL=Xgdx;WL5 zPzV}M&r&`HKt%mfu)&i)1ejcc)0$kOl^Hk41cNn-IRo?Tog5F(^S0vrqx<`1Eh~Un zbH_pL17@VNwU9Zu=8Oy~MI3U=1Sr`qkl4e|YCwY~utP1Xfh0ga(U{pEuM(dzBu@2s}`)fHP`?ILDY;A**>FmRJT$7#aW#){!Hb7)6l6PK8Sy4;;g$ z;Zqgd2bx5%rB@+Ek9ss;q42Q-GvEPMo@8bHEZ3EF7LVl8Nz%##IBVPdr}FL28nS>t zylTK=7PXw5V={83FjrI*6bDR%VZLlRY0Ux;Abr$KpS9xzs(K2U?l*{8Q;7~Vu!9Y1 zQBNGcwpMU=HgAYG^>&@40 zx6NM+bb{s+tu+yIIxP6V?DyXO{ZBvJA3V71cWOP0ptY`A2SKGHqY+7r8vg21axG{G z>G&lB(1GC;8xG1b4&NnOJ>#+jd!tVs9bsvJ62?UN(y<>AwS~k*Ig3T`TUD_Z$8gC> zHdCi0#p^yN7&V$mP2< zW3qfV7+{8Oh>D)ptQlLtI@yHffFcJU#F&w84;9>+8ATJRfF(n5X8>na_mEmdEd3_Q ztmWZ30K$Mukbk%b=T3DC!4y?eGyN@(1&p>XU?Ofg`oF9QoU1|6O~FVY1IBbsN#;{y z_;kOHF^7vBW8RH@pK@`CV4JR(4KHc9RCDyCK-9R;cs=of9Jih4-aw7%5wIjKq2P?> z@PW!4%y`}~d|qAG#q}0SW_r~AfVAl@IDu|u5>yJiigK5Nt@_DQSSpQr_{&&ozw8qa z*YTvS%QBLzEQ%z<0)NU=TaE>UDsWGRv8aQ&p28t+*yGh(CQZJ0LMHjsFBtv_cgB- zNOr(D0W3?XBD+~p&6;NvFiKYOklE@Qy4I@zN{WGHE^lniB$7gQ`-@g`6G zl#J)KJbaPU3h@j=EP*A=85gKhICaJuERu>Y1dkC4+lKwld*}6T{*&MOZQt+u!$;bk zwS$s(3O;UcE)Q>SKY8&yA|hHNMTDC3bbP`^0IhA%luwcJ5n*0llIi<|rl}kCbnB13 zd^H4Izm>K;zw4BiJiFdH-cvgGxbXT6&wngOm*wl-56^$n2l7wdd&euUAVnMkxQgus zWX(dL1u-Q3A?=^DZYS&C0b940*`~OiGIS|0X9HG42wDFe7U9rXsT)=94No$3T9(73iVR$3&N4Jr zIe$VmJ?B}lOnOydoLcW(;;_Cmztq+MR!jHA=#pj0tYvdwYcx|awvvRLav06J+R)fx zjdG10n(%-m!&oTW&0;O8uXeo>^fydkChpCb63B3rzy;R68o>m25Z(^T#0}HJq?k3Wf;j&j=BG( z%~%#B4aTx>C<6jW%;`STWKt3Y1zYWBC0!N`TH5BSx2Tf-c&r!+8d*0hDvvtRb}VU` zFD=tn0L&O8e0=9r)C;QMW5w5T5qT`{CXHz54T?!t8aGUtlA8joesl$WiXkpoPgxwf zs-Ni)7_Br)@@ppnxdEPZFSBxR>Gnv<^0!2t4kw}%XGL>9VSpQ($$bXDOlxx=ty^?K zKnAJ>foM>Ex~2@h#e{Mu15`c<5fEWy*-4t_v>>o?xlaV{AScvlG5=$ZT|VU_BOrsM z-U40^pocXoStQ$0Vgn-_F88S4_gX+2XC^)gfip7VkfsOm5NJ@$vNeM6X0*m;) zeL{e;5-QMqC!xRm9vM)XE^??yQsh)Sq21{F~T**gy+Em zplX-}%$f%n7a&xQzF=u$i%o2;8In6kW#aZJqbtG)Gid@c*JL?_^I+(~%t3mjtu$R( zvHZn|Ne?<}sUp~vggj&AUJwWpXr}8*&LJybvcNmo`g@vO&{zme3i(`CN7Ydng2si* zAo?S+M2ilzWr$Uw2o4!Nx`*nhFF~!qL!mnla0*DVDED*$d8cNFcwJi0lQ2#F-Vfe2yXjs%n^BC4%8&sCWTeyweV*h)Xvpv%~ z|MW2BMxS0K%2N%;Uq!>5exEDd=ymH+8=f=}hStaiX7UKO!7>%>G3S$XnFyIQhnN#A zG509KS^z|rv8>0<8@;!HKlz7i4_TJcqV5B1XdC*5c45CoTXWx+l3&-r@~=@cpZ|6y zV>;e&UQ6D)%@bOYmpLx>zA2u8V}JJ;3II ziH~?o=YRhR_m;j$w#--un$XZTu!)i0lQ6*ssc+l%;NcXmFR5o&mt_M01&sjcfaY#M z4@{&YB#U~@N-`ZcbPgB+EcYdy6?S0d%q%DNf^GWsm^(Q%cd)^C zz=F9l%LA%L>Y(h&<>7Ikhd`AgSzzSpdAZ)kLkdeK?!V{9eh%*rs$D@A=K}=}E)5e` zHI;5D$LhFv`H$=6v?vg&82+f_O*{ll1qB0}7>#}hNeyUZrv!G|ra3fsqG=9rK!R4o zoyw_*nzf~VkruiXP5poQ!)N(CowX&#tG%VyF~i5ojU!!w*0)?v9QZZ+&jWr zS2+BKbY}BomGO#uh`>B$$Xae=kSi%PPB1n^QK!*1SR(`CHz0`B2^h1IbOGhEs7R>| zKDJh;6|G?5q-syU@cekS{uEq*+hz0p4z0bo+n+sq_S%En*PcAY_dj+Gm|3$q2U|D|4 z6ojK5JsHwI{4o3^s-7-kH_%UhtZFw26xV~+cjO9J1<>Kn)rO>O1hZTcDFDEfr@_w! zN6a#covPa-BEFNtDQ2Xf3t@^wwD^JJCCm2S;sypuhHNDs6Z;wU^)A)q!mM7gte~LL z3!;>qaHAT+K&v=Wol(AwnN}fMVlpabGn*RGB-D(%?@pUF!dEVDt+zJElzZ!29E0go zg+v!F4AMd5GA8e%9yPokYa>So{+^Ok&>UXMkHBk z=Au(e!@bDb13Phppcu-f=%V((Yls{bpB{tC{<%`4LGIp2ha0gqqxyS>d&^9^3>*3z`dF?I}#4Ip8D!R2IIZPdbjSuUL^h)ShT) zGV^x|$kv^ep2-kBP8XIgSlPk*&QBQ|Rg`nKOgt;=^-1P;$pRIq;b6+E*HDWuTqHc>!@Et)i6R$1ZShAIm&LbmMy*Solk4luutYG7klblGE z;7k6js)zU*vnb5#RoYC8dXx-VW2AH(X?1J8H8ab>fpNSOUJg!j6yhC6!(_RJEOaX$ zw2GJzjcHnr(eg`j=5-7or7=s&42u_8DBh-Kt#ym(RQ0qe=>dP|@+7op+4D?eHrAf9 zRMAF;7GrD+m`V6I)bhx)R}0Anj7LsixVVW$zQ zSVmef+A8csE=(S@lRR#<`({oByt?y{(mB1vM*0g5GHJcM=$ zJ(rCxtS1FOb}A17(a6; z&cZBef2<*RK*3;EM&yK%^F;wf(QTlWngD?o$ZrZvWfypF{nv_}UkJl;yl1WU=>-7R z;K}AyLejswJB89Mq%AH0kTq@r>mEBU7M>qQ9LKx*JiF_y8Ecp{hRjt zFB}2jk8NJmUUisa=meT)uP+-Jj))HFO_3}#=e~JNvwmKRv+&k$3ZaNdyKO*2yU==Z zuLwTTw$``p<_11F8hXP%0AuS4V__Y-z+5r^wYt=6xd13h74ego>E3xc?*iB3RQpe0 zf9-;H!+t^A#9&9xr@nWD|NsA_jt?~qk~H~%PrGT{E?`Xtcrie?2V18(UA~9cRrg%> z!CEEj!+Gv-XA>|rHfd^Hsey6T+~GSlHTO#EEOS~e+qy~N)qQ{U@Z9^+t1p+(9y(_! zJDuLb;{qAImDCvE6G|LX3hKCm*{nrszutQPXrC+879f@TMIh?DN)y`Z*lU6DG5Oss zk+ry98V^Jnv~x$>GAV&-_v@U7~v#tiGLMX`kEY>;$1OQ%zNdd9TA zC;NPVLwIjD@BLmYTu!F&%HA%Of9ga_-}kKQ>$_t@idixUhdWX}37Zvq9H0+F{gaHg zFGeL`#O5%C{fchf`re}rDR%mPPi(&Y<5h{LRV!5_EGC|1(2zM#>uugao6V``FYg{a zdicdJz5#!?-`MUGOk|wwtVg@vz4-nQegOQ+blDVJD7ZXQ0*<^mvd|_uvxJD96a|;a z75XdPSPV!BL-YK4PU9ITz1c$rZ&kuGDC$xaCfkeNY&?L*d1n6<}noOeB#VtHCAk zH3NW708#DJqWZ;i5pkvEfO>@_(o1QHsb_Z3yxGH z&4=#B9=^L@V^gv(Rxy<+Fdqfd=h+k}NtN`BUjbFqLd2{t`3zR#>2qGM`y6B6clSBR zkkkzFDY<2o=@D;*UJ~3u1z1B`uuT~O_12n2EEhR5&ds*hLdDTtU_D zATUj6&7zERLOnA1@|Hzz7K|HSr^N)LOdP|_g7sY_WDNeg0XJK$SVcHZ5u9{`mxNR= z5K$B(DZ{N6FxyoNbPG%@YxHK4%*g3e?mkD*&gT(M9`qCv0y450=01b>c#LVl)|*^( zBRvWwVv>TO=?HkKlY!h!cM8qo_t~4xDN%EEsuUb3K%xi#88VL^;pKEUW>eVAyQ3G= zP;^)O$v+ds3fQLPffay&ca;@h)H5}yJ*SG69?t8PE)D>^kmA*Uv;db^y`(fnsVUZx zt3Xv1V!4hn8L5ue5v>cckOrj?y;E7Hh`d;)jbwy28J{j; zsN`deQ;Ei|Xle~=rdTMIvzgvo04dQm-MghrnND7apo5?&!5ZO0mc9s4KqxL&@^#l0 z?}53<#%g{}!LGQ4mVV&jA(Xs_4wQseSQkL%c=a-6A*fpQVfnqeK=lF-Cq#)V$3>C` zfr#uwhe$p>*n*?s7DVU+`V}5^6o0#u(dg6?=jzcX8qK1jJZ?`OHY{CRO50gQZnQO z(*s>wDXV*$BYnVE9QVT!KU`Px-W%3klny?h)|0!Bdq~HjSx*9_9}C?NXX+f1ofPEK z?O0EDx`$VPN0Ip8q&^Fn$atx|yNK|EgDl!-Xi2i0C~}~gT&*_%f|VvzmWOH$7M`Oz z!-~o8^b}<)?mhTfl-J7Kleg0Y9!qOsPhbt!x!pwk4>YLdt;PVLN^<0;v07n~iTZo> zvFANKt?H2tIHZgB-yrBn{GWbQAFEokS6;8p)v;0GhAO*fqs0jT8ak;Nl$_c8_3HQW zl~wyM_$%-IOYUieY5}Y?L=jNi+`*nEn_;uAcf;MsKqR8WEfv{nYki`}yzlUCc>KSV zAd60dybj;775Am(PzWcOGVXA@VZRYKh-f{=R2(08Rf_H}|N0%J<4&qp*WGS9rW4Zj zZhQ2A7eI4&xy(O%IUhf0z4?gY?&phVdK-y3T4a!d+W_jkY?wQ^K@)AK56!E_6>UT# zL8$42QvJNkO9gRh|C2uXi4T0dc9!(D{`W8b6JTf^ucy0fM+!4a41@%cm#tB0!uz-W zV;5(=f1wzJ;V7yhlYPdT*x*DCy2>|1f+o!{h-UD?Wl(&gPbmk+fXTg`h9mWA1%I&o zGdJ-kiq0#K^W#66*gPqJ9P0ag@b62Z?){c)b?vk^83$m0>Dbx2n?QjqSw9!L ztUAeBBpoF`EFcDH;>4myAQj`D>pLP44gTUhO0F6PU;Ado5Ww1XLQ@l*3%WY)7o|s8 z=NI{8E9?jwY-Aal2ZWQBL2A7v+l#|$<_!Sl^tN~x2*yo2J#a`%uQW=?Nyr^OrM5<# zM$)=k$Hpko2oxkPkmN-^r;jn_oO8^5-^bX4 zb-o#|o{8tEqhvEBbCBoRfiiWSJ1&wfLP(-DYqZ`7q8Xc6YYl`oBNESzriW;9h~0={ z^w`Hn&LBM|iEuO2*r$V#iDm&~h)`Bp6NG{`mXMh&#``eQsAw+BzA%FDp8P?9frR8# ztWnJq5v3dGMO0VXJXd2zMmlFvWI>%fg2vgWyG+R+CCc;tit?veNOZG(#PBdRgQlG5 zotWnCMs;I^4}v#}!Ea@jtg>2&BI!EP*>zL#*$FA5t7*TmE{9bi*Pv>yiw!_VqjuWrE=B_2Q)=G6+1hZUdQ<{|u>hel)fkd>;id5}vM@lO)|1Ix_X3Ka4H!97N zEf~n6wOpEN`Du0i;Hzq;070ejv0GLKS>CT5%ZtK;5TIN{9*kN=l2)WCS-%(Z%Y@P$ zFiX@nT9B4DV+1fQk35pAzbrt_+rqI#WQ%O7Wpz?xYpqA09RUks6r#x6TWhVh-ps69 zw^n%`T5DDoE?0)OL?XU881D~QDl55;!UK&t!<-ydMPQDSB9o&w>Oyo#VtGBx%|$+< zXMVnf5-7{2x~n)AleAoiY~JwfRwWa|VdicEnf5u?Z2Ibe^B8$V2HV;BR`L!EgtfEN z6*|u4W^80@hEj!Pni=M~%3*Q1ndSZ2;kgk7CaCsd8Psy`Yex8(EY1S{)H zy&Oq$&7Mf&p32qaLm}&Z;4Vlx)h=$a@kstwo~3NPr4N^m09$X@>;C)S|9xnhHEOor zm2o{=YuMe$Cr=*V-MyG|&>lHjwkJbEaKzgY^sQe~UJM}3T|Mgv()-AolQ@haKLHXR z4(NIYoE-17C%S&lzB|uba`Mo0PrLq@Pp{L(*JqH79(?8H`+-Dle4Uk&JS~;}N>cs) zi#%@bge#?F0$7+%>@Hf*{j)}E0qaKj4}#5PnTgcg%=OBX4M56PEI?vwP?zr!$I=*V zW%1c8GRtn?SUp?MP;0xoe@`pD;DB;?JzHyx*3d4X!FuS}gm(;}A2*!dY-LteU8DE5 z@4xuxK&FV}VCG#ik9n?Ce&;EYOKGmPjQ=a+ntPokpkUNBxPxqLsfgTqjJA!gb1a2& zUa35az-qv`FKtUQjssytA~(uFG4(=6>sj3s0ZlVN3~si`15K(H79Y<-EhXz(3= zgYb_@`4Sk_fR79mk2_or$hnG&%XrjD47@Vn0NdC%UT)DgS%;X^JZqcotx+wLYMbu; zL%O}CF`So1zhZys*Oz+n{Q6nf9Ne1SKD>GDwY_cH@5XfNpjovyo`B<$F3Cg&k7F=I zLQ{>f4mov!2Ij`?Msq}Q4RVl4Kp4ubM*0eTRRf$uuj6rfJUCCvfyxk7oobT>{`JxUn7mYc~A_o6;prdVQJ!ZWn zoN+uN9a)7BfYxa}){qk53|3U1@KHrT5r+$L3y=v%|LFPi&uDt%^~Xle z=}cbExM%wG=w_Q^e)Q3YW7hnZq%b}Htkj{-C`N2V_)F^`Cy0iOYgj9seo>B%j~qL& z03ar)s$#yG7s?1*(4Q_ZcAk(fC8x4xQlQWkR^LRQm#Uj;@B(DH_ho& zfQ4>$pVI@S^fASnBD$d1SX}oM$hf5-@RdPR+0>eYl^UoyAptE0R0c0X8$OY^PsO2R z4?bBjs@tOTYeuUR2*=ELCaGYPEyGjy08xMwl^jSy^k~*9K4<|mxq;$Y+~t7x>9fwV znYFBP$c7!B${$J<95LZxgB1hI6>rX25kWRCV$qYcHtj?31Vd}2 zmlafT{*e?@JWypU0BgimM&U|UtB_~8dkcI-UUlz;lx0wJsrH=S#YC)0VvRpf5GjgB z5}=A6MXX|(LZQ;)FGzq@l9e4lu&hZ@G($G`A!^P6CSWodd#m2N1gGZ^s_e&f_e0UK zbo7blD8CK48$r0N9P=!Zi7lBen#1Z_CfKtYDB!YIn@YKg7yYr`3v2P%FqhU86Se{*R7lKD~(3dr$wmUP)N$-i;pMdEA#Rmp!vB zlME7HTMCgl|p%;N&}*P}R~ ze2#nfsG}V-?JIIM>XBJzxGc`;WFqZvI&KaRkP8!S3sx?!gMRuL3Di0-$*#C2?j%cn z4yh~a9m}jGUC{<;F@r4GjziyTjvz&hCn6c+up%dl9*B6S96lnXAwXDCaX{yXwR~7* zUZ5gQtlnqT`W+`U`?J_OTNgX5!M3bEBM)S!a`LC8ihFtG+=+D)ET=0XFO2J@&p-Za zzxw)X4_`ieHix74XV31w^PL||*^J7#bUj%aexxl~A$>TbL2tZbrI=AjNrN(4aMtXA z=T)wGHT1a?bLNBK}t87)m5wx!oWCQOVP3{k4#rCCkU3JXSfR^eE6+7Ulfs zJ!4TO-|p=-iF*!?0kqzcCE?*?Qsk;tsYO$DH6-p+H_fxkD|Wr|MGgQakCpC8Pu=OO zcx$cmNkyLiwG;vbxb~|(e1x5I`imDYuPAE~E{4m1t zQnMc;d(frlIR}OtZ!8IYbB*&OWF~&L5K{T`8T2TFp zXtdtDRRG*#I8Ts|SP&sI>4zi|4QMSiMa+pe0-cItAH_tiNXfc4tI^L{=@SWib(7JX ziS%x0#$j%xQB|jnXcP0SAp+vhfM%A8NL|S4QJ|s@OVU*ONkPizCif|aFg0D6?$h&- zPAR$o=geXz3i1AE*BN8P^fogycLTdw&e@>ut^AM#(Tk`yK6NmToSA(>p`1Y(o43b8k3^i91CD4$-Z?G?y|ZK6_Lt8ZBso&L{=r10zv{X=K9xw8J||7$`O%-fwa+YI(fm zDO8a>>UFa-j|`y1*rJ3jB>}k?p=gYtj4LsvdWb^@1;2eWbc?S-5Ru?r^=D3^LEUTb0Ws02RGZLeg6D~&|w`OfbWFCa@_UtRpn$Z!Ht3? zW9u=`7Ij{OF75D};sd83BUa!5!fVA2+@#L=@t=5;qD1a+>g!%At1CF&tAK-5K~^#O zaXmjrSg)+)@~%t=`E$izmHM(92!8poZjONKVh}vnwdGwrL&fF{LD9`#y`ZT z9OUC($^gZi$Rpl)#d4*BkMf`TqLTpUrA`}_i;%CcFO91Zkc?1E-jnQx zNLOh|$^C+vv+SI{sP^Xm%cmRS`ZJ!ziW$m|J A6;>q)Eo^D96e(%K<8fGNz@Y26X*FAdfp0~(7|0BHe2sqp@zv-}_Cq7lTXN{mp^ z7P-8C^}qF(|J(nKf9`rWAlOa+_x{7*`Zxbq|GT@-cJ>>f5hL@paRi-U%Lh!Kb&^!g z6$+DZ(k4{sJpw&D#XwLqT=1Z#EPZl-_)GajH)KYtwT`cB^ZD;tM{sc4YKbV90RhV@ z=5^_AH)hjY)AXIv8((SR7(_pudfXGq+}Tq#=kUU=2bk?7w%}DJ0;H)bJdU* z43VL5MY?|6@Q+!=c$}z7Clk$4jiiUmS_^MKhJ*MN4bcV?X{Ac!m!KS%4K0BwX)d_g5f!*z+X;7FO;VRnASRsGz!g(Ll0ndc(Kh|Aq?y)MV4Dkt${ z^0{Q-p3Y4XGy&{{&@PP*_x*Z(PRgQiJ*-WH9Z^!!T1?}4@#6C!C@lR^CN`DAeJgwK zwo182a8-$-M1iCw0E*B}ENm#R6wUD{I7xZpMCM$u{F;>~O6Z{Wm}JeqtnM)asGbr4 zn8j#qq~O+V-9D35;&>Js4Qz%vvwR{!(;7BkcM*M64A{pPqEX_q7ObTQ;tP<88ltt| z1QYv;2*HyO*Qy~SAR7VJi!T*Q{!uuTBZyfZsbF!TxPfRhINdyHHfJ_inOUQ`BOIQQ zW0qvbIVPYv1K5$f#+ZwgLsKq|;R5BFQ?Xisna$y<>Y=Qb%JQj1f5?)n81R%EPcTyG z=0oYydIY4HQ%K_c!ebRyKSBnF;F8UVI|P>*_M9apqm!dqzyvbd)_cXQ=*d*FJ@>=~ z!hT|U1_??;sxzOK~IJ4rHj^r^)}JB6Ofb0LsBp-fA{bd zs(6`z&lwNSvQ|W3jLV_Hbk#A`u`~e4iMj>AkCA@i?yiwEuGb1bj^l&iGYFR2<#J0|MgztZY02dA1@fVZ)tP^&>Gf@qtk{R# z_uGE+oB!k=fBwPyFv|*C0ljNXYZuL{=JoO8*Y+`=y?E)kfK4PknjL_`5$->2x%OOM zjn!#h@7GGvt=%G)k1J$}X1#v=q*rsMY)J85??`T}ysp(shm;UeLE?tWl2tFIFSe=j z%gw3?qQ3m_CYOwzzPY^4`!qF6uGc3JPr&s!ryE}1AE>n@@D~_i6}YXzQWfo?>VUYe zTuve)Haf3hJ9g2Iq>p70%#}
    A8t~W~o=|_S6R(q89q}@z4I;m;crO-hcO> z|8sx#jW^%;-LJp>zyCk{pMLu{ev7x=TH7bEwE$V_@efN?|5g5ZXtk;(3{`C+&99?B z+eM=RBop6YR$Pvf`O=29aOa;qeMDF;t;RYl zxFK<^O5HPyz_AS2x`DFR_qLEkV>iFs z`5@+yX}^0p_C1mn8j}Y13F`p>sr-_cFJAie!>bLPFdsz+1e(yyY45YvBVKY;_WJOq zs*q=4DIWSwP!LCE30zXa9v3bY@lw<$N|EBbseB+&Ncptm>qs6|^GgOq3QT640+TpMSTL%% z`;=R2IjIH6;uHv(&kH)_CDswxPn0E!H3;(`IrWIT8*%~~P>VInP)0+IfC$|^x|su8 zGuPas*vD7fPUN5!wXB}6TF6Zu$k?>SY9uKr@su&WgD_P$pt}q~4Niay-Vcd_kVCf- zG6Y7wo;x7R0vQ>DS6n1!8crvZY-suhW?DEXd)04Qdk0j;r7t)W@G0ligy3Vds=nYG4XY!2oiR{279mSt3n(g+QJYf_f; z=mNCQEz8O=hlWoHF7p@-FGS2S11c29^f9LAWH-&JefmBJ!0DjbbX>>Whfl|J2pCcM z<$>yiR<>0boMksC3!O%tk@gub!%>3Z(AK+ziRn_bN>BF{VI+w$4cbwec0xg}QLPh- zvWZTMe@Y|c@`i(>0Zj6tQlTnzzEpXg8gf+)ASF2Vn^iEdAjI00xL!28EtfkTFI7mL zwGu-4ka^?^xrhtdaq$pa0-V#i{8*Qo;A&>k3}&?6x?_(XrGx-$K$O1>tJf^RBTFE& z37FAz6mzChK^@YDKwK&4jGos$IIb%sk9buIX`s`+t@V zI7>l3RIT~?R^Iz~Nm}W{lO9OvIbx;Ly{Yz2oaC#t>eD_TwjM01)Z<5mI>>7kNsOJJp+iP8)}hl zVTIKq7r&Ps&)Z?C)OgOSX%+Vs?UXDRYO~2 z)~IGrT5uQ?x)q)d%DJlQvru!%U|8DDjAq40!(Aa z1cJ?tjlQ>=%fI$N`0xME|7ZW>+s!2Y+MoPG&G>KpFaOt{J-svQoX);s&d|v<=rlsr zC8|>J58ya$l^9z2jA%aPAzJS>KwnDuaMdLUN`-DVwodKo9d(2r^3vr1uU@;ahCY#(1$U9TG5+Kl7O zE;%j%JRa-N;USIdi%;JGfHct!+IqX`4L+{>HQIdwxm)jmd=9x@;%s6C{%!Y%>ioG{wKoQQ1pN_3~3xs0?j0txJ&0_As>97sxZh-E!cj#N0u zOKnG?F+h()k-XUv80WLIOB_>l8Q_+BiHYEQ9Ou@uugSwLF0R`U#^kKD=Hc!`BRP+4 zRtHg;VC3wV_^g>3rv_r|kIY2_Wd8`Ony6NBTsxvRW{)s zGj+okbF_3G(+P|Vv3!N)0(o!`BnJVgWoxvV;^;WgLgHQ2bUEnYln3CXIfi^B zyAXW(m_A(l@L8QW!)J_vi^J&h>GBu>n&^iGEE=ex3sGAX_%N*-vJ#PUvdQC!y1Pss z+!PkgC31qnR2Dgh)(yajm`DjRhVJjFzNMH?7Ij8ukY~kh%3C441Wwiac~r>KN^u%X zL!$zyw8KY$x&9Zwtng(indL`jG`*BUs^rvk)xwh+j|;yRG{;a3lIfc@8~aXDumqP{ z#NpYA>`@v+y1X?*a6`Msb?;kum-{T#8X11A&ZA|d4&z;?=iVEf~tm^Xoz$zJZgPM9#daiATxON5gZO(m=Q}s$!YhJ=+=_R8Gy?8({9#hGz75z}uUJ(np($P+pML<0R z@9==tjJ<~+9Q6uHI+_HJGC)Ybo{%uZELpg~&MFI+9JOGIUr|hT- zKydbHSh5ti8bg#~8RPjRk^x^P)6aBZIM46(6|8QZlCln_mwZgUYy2Vvc51YGl2yFN~>=s@C5S)b~t>5-%pM3JpcfT7> zn4)MiN}*cJ?HV^*e|Y=gqo<#aDPC^I?z|Z0i1X#s#R9SFJ`U&P^!IfxPQGyL?BNQ} zT%mJdY%5OZ0(X{ATmLDaus(Fs8)xXJjB2i7s82Kcn(Wb3Sf`~BM+y`9F{C2NTgrk_ zVts!eY^$s1X$iYf#Ypk)e6Ez*`m9RHWn3U}gFxUU@y7^ku%K zWK?x9^RBpFRqn_u-&Gr+0_D!G@;c$DEkzy2^Mj{-EHk5ZmrE`VoxUWgBADZ*bjVCy zxN5N0u2eKu@ld&=wcJ?O0#M=CD|3b7A+46K){`yjSh+-FVJ7+G^=X~1!`ee0S^ZQX zb^cXP5*|B$Y!^~RFbx_)nT9x?c}57F>z(2@qFQ_|RhA10#-`VC%i0R9Z%o5_KD%od zl8PX&kqbg(<*5ZvC1M(b8DKikzgtdCF746}Na)IzoLI_c_|0tTTBdv?iovP@^gEr>>4dhP*X{l#?_;>7bD|6* zea7_x9-mwQ5ZCKwp!vS{e)*L@_D62FcHQ^uJ|8{2{nbDHr@r*%FF*b0?aO7O?|$`m zX_|^e3$$FurMZ2PRb|8zG7yMNgI|X=wg&9i@%iUs6O5Q_H?agh1-2ZeyJoE3W56tx zambZbY*{`)oD;5tdNMi3vXwJ^TB0R}!a_0bsUQG8b~ae+K71bnP2=i!FXr_Hd;tF7 zjW5kT>am%*A}bfU>~cx$A`8r60IGT8%r%@Sot|ech(5S7Fc>;*bUo#Y?dyz}ju#Sj zUHAnS6o!=)EICvKwP1D{q;@=c+V|uhB@0V7s_RbYccfA__?>Js-*?k|{OEzCm(TAc z%4Hj85y4KME~h6kXc86Y5Q2Qqaq(;*QSE4M>-6J zM3*xS%NKHL<1abq*+Z+&$;2m^r~En($J^_ zNb{`-mE$Qq`f=G7Seph{;bdbtVrX5!Lk?g_po=+CQ*=ytRJ%LL-dgZRF>q9Xt)Ga9 zY3z}0wPx;Wt;-ik1q;js?$ax=?mlNOWe|1*!V^a%7r>L8$eodG2D8kJ|3A9kJMgmW zs1N_l%(?fKZ`r;p?Mhlzt5}xgF83n$g1fOX9TJEsF(m{@Ae2Bz!jBLj5QmN-1`Mv) zmgU}M*|H={wya)Oef#dWy!Y-oGrvD(&V6r5vY6HGeqXuw+;gUU<};rG;Df{KS%VR? zY02I?=$vpZ+kUnrV{98eOLwn?U;^#j+~ zHXnTjGj-53Q)whMLcX9rWlah|CQJ+?4&Dwy8?l*~FuQIvEaruI2FJk?FhX#hUEZi7 zlunCtk#A>_6_@U=ia7>Qj9)X(>QYhW1g@Nm0lBzpx0z|@h)?l0F)NB(RDrITdEbUX zVQQ31u=ms~Yh-WL{yX?-MHS302IWjQH6kmaZD^EOLO+NIV54G&#H?mTwI9+%KI>W7 zTX)^&cv}X%6_fxVSt#bhPlZ9*T>U$;rryBSh+x45kSFY(&000}4ndL=E&AEu3iSpf z3yT!yzLyXtk9TS;5?=tbXtqKeN{4%`gnJ+&xa>>B_uJ(~al7J{W$O8XCKn}gbr-(wBsrt4^AwpA`=l2UI zt(eyrmATFojL?t*@H*FWroD4^Px)C_{*fp?0(ab!94-Au<|gXA+1=Qi_IZ0{IV^-9q_O zBq9;+@m+Cv$g0k4U4IIQByPjkR+tk7j^u_$m|T{uY77~CWTQ{AtW+cG_3Hb0uc*y& zProilTjxdi07c9Kx(v5Bk9ho-5MaS06JZJ*EZ{Z-<&L6LuSQ^g)Z(1Mrw)-??QnL! zDUo`tpbN}(3R!psOr6ujw1BF*XQJ4psAUxQ_45d{4_f_91`iH3xn4j#TwEN0Q&(!V zfryvgz6$q2QUVi`pEVY#6k?su@_3vMKRP*f%fr!VwEobe zM#(76gYt-dqHU^1X?=ouYWUcvH15@V>Pm0<;>`=c^~sN6vA*J|W6c2;o?s285au%C z;{MEHzDHmnbp)44`(xx_neP%8+#=HXl=M?Bvwn4;ebt~YY)h)`T1E~e^|xAY< z>Y~LqHv)qRM&@zJ93-Oo*M}`9Q>}VB!RM&%7?}UrsQ*r_nWoh%s=VpN?1<(J{JDo( zTy}G;Jaj$g?^;L{A|S4rO8Ag~E4;tM1xVDuLa1PwZ&X{{Kjb%qg#};OL-kSnwQ>z@ zi9l>>P=nAZ7X#lR^($(aUf0C{S-5fnA}6VrU)LiDadY0NZ{WWBr?#>5C}@P_F0MDf z$Awf4fGg4ZYa;uK6{J|4`efWpTfYRg#k+Tc^;`#fK+%v6z{N+bdaD|b_@fLc+)!CE z)&sIGz(_SEitWj&7JPI!iq(I3WJXR&k8%Jb6vV>6xR3x916;WzR zgyNxvRnBg#NLYO$fJI`J*~I~br~#4nl9x3eswt*b6Gg#<&J|jEX{MB<9hPqG zYd7Bf!WTVr+fpN`nHBr`*T3=Tqla0VX4p=(2YQ9jh;Z=Wpm2ymwhu>0nN0XMbhv zx9W6Y^?3RIk9mc2jM~qx^#ElE;?@^f9WoWSK-G5`wPdBJ#dwG^-Q089p1pfd(>z%k zk1v1nlLt-v&OiFI*-X=5(9N<7B6?ot@e#Ie1diuHe72)_aY zD;{k#QDT##+qSJXsX4hh@zPUvNl?<_%x)u+5U8Q~cUslB?42gLx{m)ih8qJF+@b3H z<7w)GXP^*xrU*(sqbj{Kf#W7Iz24k+XsBV%@60Qi)m(&=WlxhrJfx-qkto%;6h;gE5P+eQ)VpFL?noGvqR?8`M9ni+u5pQ# z;)*<4D+DkrfEX;huq9|Z%goX0ZVDFhk}Zpnf#l=Hmq5Wlm zs|}kfF~r3BpAmuC#fg1Pb5SLBLZe1+SI;40f+02%Lp9)R?JGjnVOxNHmD6o?T({#0 z98ynyo6(Qqk4Y6wRy;0@s&SJdBqjiA5&@?Muo0~VMGK@RM2O8?ak?rzN~XCGlO`5# z0i)X1=fxL}0Y^Xu2z=fdRp~C(5L9Lsmu+%ZsYa>04i+^R>b6pfXHQPQ3hzr)tmL9I z&BffEA!~M5oE1jwVngm_HRk07>(`uOM`X^8imI5YnPzY9CN)IwBuuSTdT<2d0VY-R z=zS_0F`NNNEFchz8HyHinQ$jEGkYA7;m*EQ&A*~Y7eRbh-P!^ZF`>_*BC_!PE-SdlDK%Y<~$=} zHdil?%#%}c7+8EQVhj2R5=%`|fA-FXB?!kEW+9(_KCi8th7#&r&O?bR$E^N}OuNSM zeIOJewLw_CEl^lMo^Uuk$9+ua#yi))vauBNi$c=susD|+aV$6!gwjlL4lC*quM$i zwmOWTLFe3FSOF3O293G|OqB@>#ZIe^e}3x8%?}ZR+UoZjaae>15j)0#=E$8vU|KL$ zeqYqXhz=suv;;A+O) zVzH*PRD1d&5T6IL_=db(ck zH2gb=sE%X?`go?#xm4l#J4lNU)$8}dNxzxnh_MxdRP3V^B=Hff6&4R70<7)6S<(K4 z`0CbHKk}A;w_=e>DXL0?Q-nFpm;06qm!D$Bs82v^G-%bC1`WoXt_tVEmI88Egn`=b z9nU3#|A^@PI8f3Kl3Ja$fBC;ZusP|T{j8^L*}CnPTkrmpzk2tvhY!or*3FI1jJaj) zj95$yiXm}WXsy`_=E<)=3*P|5tX+}BlBi5JEze&1(ignuJ6^H8G&=8b=gySh@zcM0 z=dHISfU0dRVKJ65cPYy|9|T}iYGqRvDw1u zwI0EbxWi8MI{*S@tX2^V|LJ4th1Fm1gH*4jdJD2rI1SLvjAnyIwr^dXcIC0hjur(q zT)K%g)pol7^7y5c7^AC^t5H2K9$z^!qCG^VF?cCxE;bL*&1a;j!J?BBJiCi`Z*9I;`XtDLh-)5p#%FZQ(h_>bgW_w1B~& zo*k>ImQsp~grj;e@;NrBR;#}@H9)FiXUKl7qq4G!~!K0UPBwAddXPmY|yQ8SlX z#4xj%%&h@f)t36=^PWH&WTp6sUP*qjszAqjDOKK@*6;Fwl2rKHN(9E%E54kogi}mGOa-Exgqc8%84;;B<(WfK z7JMc6nT#a{e8GWurbGzhk8L#E53lNk%{0s^f z<^f7j7Q7G3Gq>=5^|Ji5qe2fLVnll(MZ)aVCL#op1V&6uiPgoP{g_*wpB3V0p|I)} zvFkE54Q1t!rSilZ*-TWORTOx09h68+r58?)h4n}`{>C*3riz=X&g-bY4D8h^nxkMo z!Y~p(2U}cA#HDfSxAhQ{2R%YAqYgu1g1EeQJ$sJ5IJ8pNDa8U1ytL$*+6HhYj8Y>raJ67%)k-iL9bO!CUqAPF7|~DVpm2-~9`d z^hBk(OYFTB;QIU>C2?GI4tc@ULTrqggrxK%#`>Iv=BTG{4WCxl$H0-I)Vw#kpKADG z^T{H8W=!+=IY`ZbLDf~TO)A_bBBmO9uZNvHV4nMV)H6oPWW`L?T;#_%dNKNgf&e54 zAfX_a8W0_>s6Zt85X9!$KyAwi*J07UCvL*(4vE7Vzd}2Soht1?i?3n?YwB25JiCR) z8?H6un(WKV^MVeaf#se}XOA zy!yw*_Y+mQi&(3^sIhREsmGG)7X)0;o3aWdRo+lVEh^p?U(Qw^Ud^2rat5mLRpmhR zy>^RsC0@%5``IcT%RPD@-%!6`mEhjPe;mM^KQ9$>gGENFibkyK&~T`fCn6Fn_5N8< zRGOsDTUAKITGYA%CTaw#Ahukrq)B_(;d>?grdR$FRnCfEe zQM8a|v)mC8Cn>WW-jfJEDX$nfVqi0a2&s=+Q35P0rDU@V0Ev9Qk9qmRN4Bs*GiafW zE|OH2MxrQ`s!=00E5YZgnT1;QSBQ6r4ei4!OP;$8pn_y73O z!FYW1_=(BdCI({}4rXheDm7yvwQf?(C#VqnOizm$Dn=4KM61@4eW(x7d^~5{be&#& z(FHGl!4m;X!Us>5QYL04WdDQ+#)&COo_1)G&1OD+hJ`Epz#X_cqgjaathk-gPR)#4 zF*PCvyQpfAyNOwtIB_XT#8#}BmfT5Vc+c%SlazVAcuw1Rco*-Y`xqibBFV%ame%T<`iEl5xLGwIk91k6-4AHwbm60^mZG z)%|-0Q6cfzt&5(>3{{8Dm#-$Rb2oWPFpT=%1!rB;`gs-R6eo>9i~_u@xX7uW(1T16 zNlG+mm^UXYtL>iMJJvQf4jwvIOpJtt6(zD8`1~REie=k2e!oP0LIt35MnYu+7K`OB zolm_LU%7gZ1XF^URI?EWiM;KGd>6xI6D@v9m85Fn(oi9f>e&|_#zLjjtB782)`}L- zgN|yG;*DC-lsIGc@*}^q9@+6AAH*b*P>~n69FFEI zybv`{HDGR5ExPGEoPGF=Q)(ZB8JkW#+NqoP;f0}Q592F>O(GKCQ?%{X;Hr; zk!b!;Et^@P5^yeLKVZdY)vJpq0F@HOo<68W4cb%#UnA;w9EeCL z+L-)Q`OdQnsKr~nlw#hR;CXCac5j&y77sAJ+(irYZ4HM3M?#pX6vswXn8C(Qh6Q_S zP&7&y0wQy*JtA}3T+n}2VN~V`lM6i8GisEy`D)wXqHPR6M2{BhPsJD|U04hft+5ID+~aD^wy(j3m{kuvlU zK$tj-d^nDZ^?-tlEfUqMP()$1Zb}0M9^=Iysl^rs$O?QO9aSWTiPbxEn0oh1RL_Fr zci(kSnXI=)vWz(WW#d1e&10pD&ifdQqW+%!d*ng*#ckj{Ks4yR$#Vmi&lU{#x~qjb&y@~#3#OEQ3&Zm#QW4Pq#2 zgO-$#l9{BzC^aKAZ8ym@;AY&avZ~rFTbaoqvEwSzX}3|1uRFR1s=a|kkcLb!7*ZM% z4|G~cG|IJRM2))&s8$DL^{i9$0Fobe=VeD#4*;yd%#_T4tfW~QCKR@kl9}bazF{aR z1yGxIfI$^0kpU?I4Ufj&Vs0swjgA^2=CVF(#-g(sw`6Q)*}4uovDt*ktQ2Y+7&~c; zng$S%kTMMiFtwSxJ=iqMfC+_}^K?_YDRK!B&?NoS=a)jXMytCQr6wjDG^q*^9qDNj3M284M;5X(v;+I7(^ zx!{}nx0L+J(_m!RMz~-n-{}oh!IREVw z*k|sjBR845*@^)z+@gi+j^pMUx5Q;uc$kw-w=ZwswRP*kBgc*&UpHFGol%oCPc%C4 zgo(``4N2QH@H%@@=VipzIT%p1PXw%91v#45*LwQ3wMrG5-+M$UR526~p@0HCH6|;S zuV_(k^n|$&aTdP4hCF6oTbVzC1<3lyS%AkLHzIfrWLlNElp|m|{Vl%x)l1okkC+50(=DC{MLq z_Qx-)n5t1xLxIDaM3mK%r*+ytKt+iM;u9K(45Ty8VA5?4ValtA;P{;eO_E+UG9&w_3aWs2^fvNKvUCTvKXO74gzY$ zDE#cZ`}3j-BhpEtl!(m~&{8t71nVV`0PQVEP1Y)~+4r>tXh`rWY@wlJfNLsi@p)fr z@ELYw#Rtdv0DB_Utg6v!RqanaBw{BRscOz$Wtm8)C~7QXiUKp{T)M7UHtw`!FPs=_ zR#hub^dS@%SppTGE^g#(yIe{o>Y_Ma7%-vM#8``3Rl4xzIr9X+R1KrjX>qbs|9>^} z?bB*s%e0vEMdk}XtA0Xja|3$V-mzGJ29=6mqZR_x>l>yVXkR4!KDf=y3Xw&#Oq8gY z$O3Nm#IVd!Xs33S=;v3sQnj}t`!$%FN}WVQ-sI(_!6fx+0|il1A{S2P0E{bIKo!Cw zc4CQp*R5)>V229fq(;=;yU!CcR)DWDLmT}5UV2_6fF^0JS-LJ|oS z2TZ}ok7g;yFqp(81NwV&N*h%&P+&m4T_g~R84MbFKSazdA}q<I8{;aDl8paP`=lK#RltF{CCcD8zI7NJPT5T10(a zsCs>WaJ*PE6LGB*Ti}-&`6x`PW`KelQdS`%slJ5#|}OWPRw8?e-3qB47qC>ULKDgIdnWLDI}K9XClJuUH`9Ni$AH)8Px*f z|NLQv4i-$F)ph7GAQ1X!W&U2@4t2l%AKzYWQ2qS*xt(8<)vsSfeopyB*JJT$1_6En z{Sl!6M(aN8cU#>`-clE!T)i)|G)PRCu1{9Ctv>PcXKbz=edNIh0h-S8mhC$qdi3Dh z$&N>ZVn9(zoHsYYh63$6Kob@4#AcbYQ6nskq+u>14bO_28j-YPnH@i=n-hjEZC&2I z@ASR6DLmIar@ohzU_|t?tiG$^={TR!}uy zlb-S9m6es*#^z{sdz0EPf90!>9eB7&y1HfcoGUKhbK1_dvU2#?+6_0|dE((s8a1*q zu*o`g>tfTrXYV_E|NgVj-M4jVd1-kdgsz($eC)CN?z{J{JMUkc=A6@HG6j#UX}e;? zt#wK^ORWuB$?KcCae{QZW$WtlXl2Llty@-Bw{6`zYDb&X%|{-6?6F4=K6dEHtjzL6 zWVEECLC&Vr4Ov}6Hk)iPfx69o`*&?!9+i#t(Qr6iT4v~Nx8HN*(SyTL+OcQL&K-OA zpS^eM%9iETB`r9?ZT9W{f-R8Ow2A2{&HJ@?#y=z)ighRtx*r0F(%QlCJHlIytZ zoGu)vFWOGyfBo^dD$*NTRAc}tNC+jDjdjqJ@?WB)m!g>c#=VB2os?5kf+jKLEhJtWH=mpoKq?{)v8jm84&GA210+2=4vw3 zw-`q**CRh34GDRdP;@~Poc~Xds2(Z|s$PujZ#{4p1K|C7LDC4Cw40Nv6f}Qa&ddvU z9~79y?NHY$l%9f*7(qqE3zh!Qkz-eh7XNOmO;4d#8NE5&_qk=~;i6t^ZAPt6%9nG& zNCtr5B*us(ecPdGm70b+0ulOXCKy=ptHx~JJK{}=j!FQ;68VV>uLb86{a01t=MXvZ z_xf9yS)pu7B=8POHqye((ePCY^@;~piWjr}@|dj@mgHl}J*}`3vdtO+J=6*mIob)x zV8onAfY2arSfUv_CaX{lLAXTkdLkzpLrc-x$VOFKx5~FgkYp4D2hZ=6`dzY6v9um} zj6a(b1s0exp4N1x1S%T8h;oIll*mGJum@wq;<2gE#VSPHNMhlVkqyYsvEr=g zEM?LTst^rANl`+vq8fUPYU*?c=l-~5E#{Qg$h?ciJsH7ep&k5EvlteSz{M<(X!t2t z7cYuTf`Ug8KRu<^oz#4v#r*}yNffGGksSutFf5Dp9k-5|!TUi%9?5$%I&B8xXp4(q(e;WsZsB-p-TL($bLE$MJC;Zi zVZ7c1Ol@KEE}(iBSZ{G&!~h63&YLMjVET2BuU7rOTO(&nNz~h zLm?J0PNlDV!)n|Y1?<6Li@l?@h6B{o3g`5M@I=JP*2OwReyGP zg(G8+#YGZ!M2mn>kFQrA0SiU6-75;Y6AUQJ0k4WZRTjQ$C^(uO=PF*}h87O%Xz<4j z0i3!;tWMKh9mPd02xd^VBvnF{`>@LvPFppvJ;yEBcyWfKpOXkMCI+K~G8`&`SECqS zpp=B-K<`)M(N}mY{v555008GiE{0)2p-oj4GNMRQw_95L4r5nTXYLlp8?Y%({Jf*v z@0*IM7AD$QpB_7Mlt{D~v1r!ba|j4l1|mshvN^=KW+5`QQ$KtD<2Z8l0&D>n`e)bQgG!5G@Tt-8!gV>1 zAR63(*w4LHtP#HNbb`}yVZ>54XEYGu7Wrf@vsb+8C9itvQ%@c~p~$9Or2XYz|F56< z$d_p}CNb^GY-1)3HN)|AeF{LQ8y7y|ao_dUH;o4k0h}6^^yyE3`NJRn zH#YKgW9#bjlb-am=*K_(nNNRd z?f7HdY~^+|UC)~**0t*>iOx1gD z&pOA!p+<@G#>P1pT==Jd@dw@d`hy1!Y~8+ca$0`s9lvtly$9QN#Esajvod+vRj>S! zAOD`RadO+1mBQ)2{MY~Xkq=z+q$ghfmhXPU6_;N!S{{Sbp(C5W^vl2b&|P=&r~wTO zLL#t&zBXwfVbg46d9v~Br@!bI{{4^6HYV#QH@EKE@{tdH;=kPb&9l!s>pS1_=4U_q zNoSq8Z9GUzBVj<8HfQ?aV{2de`mO);(NBEl(_h}$IEJ(gFpmbawGC=m27`QZQwA+e z^JIg%we!#0|B@Fz=b6uV!u~V%>^pt?QY(W*1Qf%u_1V4mJ^aP%zVYeLe)+4{eRDQF znP{m~>rPH&Wr*2Kr_-&cZTrQa`>`iqx@VTLI-sxJdh*t9T&r8s8{Y7m=RW&smpyU+ z%F>V<`Lp+Y;ri>pMGTQdq?%8jb=IEOyz;6SUG=p6`}geJvLr;qL<9(-n5|E{`wtvk zFY<}c-1G;3_^yp9m6=i7T4yLl286Ctondlh|Neb1eExHu{hTN6-LrGgXrM{d32{u^%j_O;i3lbk}=7^4ZUP z{`wPZ>&&1=7U%SW&I zcbs*on=*e)m6p@k?Ksd0nO}MMTTAOir$DS$f4QUh&*#KjX5?FW9+r>(-TF z5*j8_)mg!@^~r(z4?TAD#RVH zF#CmH{Mnbk;bpUpBgX)qj3H}Uho@E;y|@F8ha zv7!aiwwk-%71wb76n7L(wD&@bE~Ve25inF@2Ktn+BI69V>Y{2a`On>A zy*yiB`NL2PO$%qpFOE)S1py1MbGorBgEa%A>E=-Mf^*Ltj#uuv@8H^0m022@O*Mwf z1UrC4#ELU%u~aJ9P~VwL2@I2Cj-4HAsyp3G;G$#nozJ<;k5VHDW;VxY+wl zLYK#AzL4ngvZ`|cS8Ab9hx9dyl?*i)pA|5VZ>yx^V%!?_xc(a=_~DB55y;D;9{m=r z^R{XXX+}PF8AcGPY?gps=G&tFKR_`X$|LVySE@ex((k!>YD_7mxYSVXRc0d7tX4-< zSIs<%-ZLg2pNcB#TZ^@rQ@MquSk%?xQe3M@)yGA7j;Y3^+Nm=G1X_%&lwt~^B;=AIjwsbe!Vq^fg^_ATkmFd*b$y)S-mD9Vi9IeDKV2INhyW>p*Zg@))t*0F~&_?yT{dpj6yXn+=CTW zfXsL$=zEL~w}`)NNbi4XeavW^x{I+sLe&ZEkLmBo@iV z$lI6u7}LsN&;T}>&WIC1{4_8MLo0MOr@Sv(uKMerAu*Mnj#IFa`G0zH&-`Wmo?iI( z{wdABC-#C{8awrS>6A;O|L65meXjNUD8fXW|9GJTZ2m6L;`-OvGgylAs;k>9SZJ@P z$)M>b9a@u>rS)US-uu3Pc**lFyZoZv{=sUv^uqH#|FO?$m}uKlv-8sZ z7hibR^Pl_lzkly1{^5NedHA6d+-$QZnGv_iCd6EZG+h>&YDtij2k+apntu3gKm69W zy<&AB4nky5H=E?iq}j5Pnx;GQz;mB><3hHH6&Ia<`bd0#R-JAGwb(jbK5x(Rl~cXu6gMH7x;S>Jc2e@**v-ZwAJtbzVG^>@B5Ck zcP;hGc8lg~Wtc8HZ_h>N@A>wFo4@_L|8u&&j^PqD1cP=HogCYL{#pO}?LYLI*F1mc z>M#+RAu*|1A{bLEwA3!`-L^DS+<4oF~mM1#fv2%yzVn$`MdF~Y#{xq~m=Q4T3N!85Hr)4|OP>Dpi=J}D<-h+w{@2~N-(Zrg~9H5j^3X2H{rKtC< zs9G*26wM=W?mN2+_4=1DVq{pVT6)qjQ8eGjqvFt}rMWav%^lqrlQ#viGn3F4b3-=N z`S5BgoN59!-z5QR!2o!l7J{RLzE;WB-?sn3x5RuC^!#O z7Spd|$S(z#oTEpXJsFS&ZIdWrSrB3 z?3180{;3w1iC7$YaYQoLP6%S*I+H5e98e2=o|Bq^9aaG4l3icMnSI$h7(|k)743+q zsIhlL004wZRl#f)(~TI=;v*NLrJ-I0t9Q%Acn7T+n&$`ARVNBB%)aI147EszMT(ks1jMEG#1ILJ<@)_Eb4*W@cKH2?ZuhYS7SH zF;a@W88An*m_UeU1cx#Km?;$ILe9SPO6Wit5JCr&nI&O0goKmNd3RxqJ@U6dGnVD0Ft_*+;7V&8xmcH+$5=) zL$W!L>{vdBQ4k4&91-R;Nw|7XEeQZdF3Ie>*bT6RCQjsLMU@fBienfdanGb63gRh6 zwE%7aL*>TNSY|QmPb4zQJk~-@i5oGiN|BK;AV`p=Oml;FN!A)f`!PIr=~916Q!DkC??JlsuzySuW-3T zbQWkkVUCP@4Z>o0Xjmhvmtc_xIg%JpR)dZdH&FjN57PX|EO6G7vV5z1fhKZV0swcbd(p>W0#X?E@$OG`8&3`d*MFIg}b7Nz3 zV>4EyDieE%U|I+|8noT4+uWRhhUCMH*chd%gZlUa!T&9C^#i&1kJMjK-JsP7_8Wu# z*$4F>yzoK&!8|qKGn_ZMQzjY9vhU(pSH9-TU76Pe1iz-^GCC+_ue2UU20HKJ-ryK6KR5 z7$wsv+2+((D4CUw$sT}Rkay>?4Pdr%9p>wB*SsDe)JfX<3IUhKm0R4 z{R2Ce+fJ>^rA?C69y_vr=-`o(XG=><`_911$Ah-pSR*T7 z0<%ps224y^HfNo3@^{;-Uh=$sKe+dbi_e{E88vcZS{^>Ox!z%A`;J2oohZs$6a-3) z(t-Pg#!St`poN8&$Bh75l+D2Wf-5h7#S5Qt{yC>RR&sKtM~+QcY=v>`t2v~8#FTpl;9MOPYn!4uE8~blMr0wHo z*fv>h*5#CVrR5*|u4f%zJN|p`{B!FPVMHxim&?Y?Cf#f{+p;nmCYj|t>uh6l^Z1GN zt|)<5R!3WxMyumyb26Kh!Xz)e^1QbFS8xBhU%Bhn12*1iG^FJ%m~{r9^T_>??Oi8< zh-0`oqJ@D8Yy=lI0}&KDo!L@jXdb)o!8`A~_YJSUk_jg!Wn(fuc5Hn%%cf|D&9>F$ zUE4+tb1s^5-a2mH_SzTZQvThq{q~VVYc$%S>oYV|ut}J`{HhoJ>$ksY`zUp}G{Qu5 za+V)CbYgRJqSLanGTOdvb!FTN;m$kmz5AZ~sBMkdCdvcS&6C@9ZT*>l{iEOe<`*@L zY0hnvCdD2(ys@^n3F}bu%J$Wz(Rg*-Ja}mHga33*p4xDAFqvd(SOjI7OSegYmMK%B z)QV**8HAEmi^_n?+KJVzqo4kXANuaMT%|=fr`>SSWTOWkJ@LpRhm4G&t6N4}w{G3B zW%`iZO7K-VK_^sqsP}CIdr@$I_-)zgQF*A z2M-?tOVMmRxbYj``r5TOKH;oq12{R;qbE0y9z8Lc&a^A3ku57rXYAg(G;AibZZ^#q zo_pFa|I$xd>HhjJ|6cPTNi*G;@lc42$R^WGHnTG0)SPqXj$iu4cbs$XKB=~LW0ohg zJZPG6D@?RLovHA+k+;6#`NIMI(l7tk!GmkWO2A+|K5_imeTOzSH%=}MWZ&*>Ud$J6 zkFTvi_|Rd1rD+DE@#d6v?m3N`yQY(w$$$m9E7By>D$#E^#ShWE>KmcKqVG8+qwjeb zm`6aih~1pxB5m%!9O^jb#|sX>cU-8&q56ZE;<$(c%_+C>cO`)ZV=b~y!rZ}W)X&XC zfXRlGjY}_l{Mq}@x$#?f-*MkVMuVIQMN`w5&YZzaLZ&D=qZts(>elTAoMB{Ch&;ij zzJQ##*7jn(OjRm5&6|H5XNmB3fu0ojmR0&VRUhr;HLHa@fJjlYQw;#qN*w~&%cqe< zdKPZcdfq241h!hlq)PQdAF(bhzx8)fGsYU;*8tUmJ78wywFV7{Z z!ZwO?@#(>AU)&dqC=zN&gr5H%!LM~zyawz=L~jA}$pdw71x=}FiTz3*7WPj8YBjTR zC5PCv6!d8i!M&#LVnanuGZGaoITvPz75F$PCM_T)EtW%3k$m92l9dwuUy_orcngw~ zr(A*zRVPHD>KgL(mxz=uS7lAq$!jW%loAL`uC?4`Dg6or5R-AF!33s?#2kFC$Xc=~x$=&|iZLjgI?1j8u5hmkixx1brL3BB zXMns_Y3P42*1qm(gI%)!b zTdHtYp8uVRoQuTCdX`66JxiRNiC4_gKrknt7UMlwbL@ix|0`OQKn9T{#J+mTr>Yo2 zRu|-C2auVT&_ZV+A|>+sgViZZJ+90#Qk~*@lZX#Epb&gFdl_+FX0CS8E1QCH%&5 z0btJ5^_J$IyA>~yoO{3BW5G>8Je+t*0V%Wy%j3k z#H==|TZM$ov{crkZ*4vWeL(-!^~eTPgaB*eAu9X;)@NFR8|6q16LCy^tB6RAHaKDu zznkbmj-LSlaxoU(+}!MDQ)VKDNa&`A4^bo7XxMgLH|sjX*dYBK)=#Sm`2Xe3{#o$5 z@ZAeh@2RQ+_Rl^jUPe(OtIueTr<{TU{hwcV>c=dEwhPNW*GjOS#)Yufak0ng1Dm?GOf&-6BUHm)(8L^mwhXau1Stp~Rp4|M$4_^K9mp=cB3->7r!JhH7 zi@)P#&->#)|GR<~UL|M7Kq$3XU%TY8i@xJkFBmn{bv9_)yY4&m;g4KBooozOcIL@M z^!ShetAFtezwpE3#2eFTl17-XzvbTdy!Rv5UU$R84?m{48;l1}c>G0gdE;wd{^F+( znpD(gs^{-r{jFd7nYClbKlAzP6^Vz9m6=PlHw}AiAwn%^IBH1wo?2|IukjXlZ%Kf|9%8z~1)8*Z%Z7 z-nM(G$*L{$U5}pl>%aZ*CqMVK2Ol~-n{@2baAZ2m z+z!elzxtI|UG})$-r(Lyy6u5uzxQYF|I*jKdGN@IjrDbb66+af?0eZuuR8GXu{-W~ zfXAyU0uT?Apir6Y-o5%uKl7t+dG%8XHp{t5>BLMw^zrLI@Uc(canFJ2TE~XHd$vCH zii=+V9WTB7qP-w&%*xIsdHeTWMTGzU&OblCKILX$UV>C5QX;sBfSGPzS=zd?bbO}Q z-FV;CpZx5%@3?()V`F)|^t2~G;kB>4>hb67N^N4;Y?jAudeiG(_=(Sd{wrU(4Xb-- zFw)IQS{jtRbkBp2eDP~{ow)d{uYCDyU;WyR4?pzCBZm&prkxsgY#m>E!P#$p)2pBP z0HUXkR zV*oczX_s!g{mxtNJ3d`s|Jc=^yy=#k4?OtrbZwfmE-wxC?%r|L^PcscZ+_+e(^gYT zs)boz@`7i6;3HRDef5`Y)=}GV!4Njldg)7E`lP2n?V8VBm$UI;L~Y8GLMTM~k{7-3wXbpk!K+xOjY)160-oh+q8$;&I_)A#Iq;fr2CsX27y1W9AWVAqLIX0Q+lNg6M%4F^rr zB#4p_Gm~YaeAV-x|LX5}fvV=&EDhSbA2|Hi@A;?CeewGHA9!ptBX`rK5$`{9-xHtw zq{$@T`QSlX-b%w!S>OEpm#)9z8((iIFAwY;KmJ4C|JK*nB%J>4egE{||KLw&8J$tF zq~Mds*ST#dB^XVQ9{rQQdiUx3PCs$%&_BHYgLmF>$FXC_x|x=)YX@m{b^M}dKkXeq z`6Cycxtob{?shJ<-~V0TdEM7|i!ZykZ`rkdYcWha{qz^U z@!_jKdgonttgmlwU0u5Tl1sk(d){*4IeUxgWYP@=&8uGioa?`K!=L}<-z%jw7<66v zm0$hOTUOHAiAP`lvgiKiU;pJna*8kCci^F)`ZvGyz=6jGgArJO^yp(p(rB5uEg+b& zPlDqG4`;!ek7UDhJD)-BRNmNg936-e7)D|DV0;AL<7u{ZtNI0FMQrpw`^Vh;`QHn z?AQhkSFNZOY6qg3J%Hz?nN2gXXwhao-hKM%V9Evpag(gTNIe&=Rn~ri$b3`{0nyz< zX68_YRbTJH8-m7C=iwN<`U*gc7WGCYDrNN(cAE9ovC%IgPAQ8o&WRLGG>PuAWXM6skwN~Em z0Y`=^&KNk6YUNK+P-uH^8WFCiwmwO79_ulx>#YHk8O#;C)tjeGU5PyuV=2NSix#TV zCxBUt=Y19N3JE9Qh&dOZ_!fHCW(tT&U@JXTrC?&HW$U7iN)lr7B8VxG_$8@dT5W0~ zV#l4BnS@MLB&k{MvUgbk&Sj?QtP^3MQ=}ym36WBKt&wM5W)>2wsG|mh;Y3CvWaes3 z%q$>NC*AwBSQj6czC+KmY^MUKlbwLd8x7GX6BZ)#fpQYrrcqE}nPE=zNlZkPgow@y0I3itMW!th9Uif1l+3tVEdwZLE2<4~DVBtCF@lm=r$!nap`zZ%z-HuH;9XW# z%}O<;Lcny8tR)u<=^%v~nW^UD=b4H_udKn^QgSL%2@6>zLySSr32+ru_w|l$^vIY2 z77(!2^mJ|?Yhs67>Of?K@O5AprS#xK(Ew@*Jz2!lL#<~S22Is)FC6qp{-dpiSZZR> zVAKYVrHwVY2J6o#F|U6PU`qTv#eH_iH)HlRbytQL{G7qLjY!4G9x^n>kINVN{9aNVEC z5Q(h^vPeYSIy!sH^_3iIsb`hy9#-m~1S+iN<0Q?D3IOkeCyoPCaT1i=5mAzc$ps46Dd1s07)sMv|@qR=d?G zVnILjs38M^NEK#S+t{4WI`}|GQ1G|R%!!t!O=>2SNmezMl7W<<*$;)0ELOkzy9-Y3 z0uI!N!}Ayw5nY^$*eq5u>6Cw@8jJKxx4;XV|KmR|Xw}Z3z<>tS(0l>T4Wt^N;Oj%E@C{HV`jux&79=-v7aCF8P@sU_;4y zrEOmOs+WD>W1l{7;4lWOw$WkSVpa@U1kb+m85f+t*U7b%_)FK_@Qs^qH))kHTR;A? z7rpqWe)b2)iDzBcq{KuY{q*&}_FKPy%T2di8h{#Rw!_Eox$D!P{_M5?<{dxsV?X+x z10geXMbFwX{Lz2$wy)oO>%pTFw9A$Y)QT1tStQ?CaQb91pTxjy5tPF*(Jq(Ru>M?q z-9P>4$3MTmk1Bp zDvDBKG)T$Cr)3;o@BZR%KJxeP`^dfb-q+1aF@lU`>mDlB4hK(o{P~HHyRJ!%0{?XN zXW#v|@1JyIYerTY7%b0@AH47O1Mekib6TarNGAmZ9wgh`7&Q9bZ+ZP|U-1;cx||11 z^VoX#-~Z(OfAO~;K78;5Mk|trl9=!gB+rIYoTYlzW|KJOsacLu5R9ogZzw!Au ze)C)Jf8VEg_4G0eN7i+@$HCQ%nR2lYT=Ui6{iDCS=k5aql13w)%&xuerq6xxtH1J# zKmDvH>{CS}tcG(=8$SCPPy6b1w3{!$kKFs<#MHE#(ts@n(w$-* z=0RSVln807Nniq*8i|+?%<|f1vohdr>AGug__?3|jgu!%+;`8t-K-e5(vB?S$olla zLw9}quKON7_~_5Q<3~>4F`CUfknP$!y8MdEKK9WsSjjXVTG!chcG_usE_mGjqNXLM zrupjEzwxWT`Tsp~&mn7~vSrIlUiAE}D}y|lq{OpM|K@Ms`$zBmn;9)-8WtYtgioBz z58n5!FMs}9NJ8xxXm!#V@yX*SPadC8nIudO9$G{7Gy*(y@Yr3q-A}_UXi}MEGv?t? zhQn@clZOKuEPwmvZ~xnW_v;4_K6>(jhd>QdOHD!nrS8bXkNnkL?>Twm#Bcq_Upjr) z>SVGxo#LWP&VKP#&-?Z*cc^yUrZUY1<})s1Hx`!zq2ueb|MvTT`DcIezfT-Lg4Ft; z-cMcgxv$-H^Kbv>U%TYIGnvlOm|B4<8D znt3jTL;WRLUyP|mZbTB&Bc65R&!O^DDM8U81hYk79IrA|)t1OAaj{Q9k(4RR(lz_iPq!mN~zTZR{84LY4IZP~GB&)%#k z3I^q3WW+#GbJbsl7U5b>4M4zL7PIfXFj$QJ_EyW_-B+>Un9<|<2kxG- zvKaX6RYeD6yo^}j^8$PK-aix{wiDBlkj)HrL~n_XBM+54zcHXhkvW2BpGnncdVZ;z zJM@x3M3NFHhV}$M2cA0DNVaAz9%R?p$pApL*qkTt@nqzefgBn_Sd=s{7ev#GMNdX3 zS46?s@jpUL$acj}2Pue%RZ(ign}|5cGM8eeq)03VEvRW$*lg9JKBd>kZ>g$)gjtI! zO3s~GNYz>vE4AALJ)@!L=@r{M9!$zc&rS78018*{+y#`@i0|o5J%%9 z2`7Rk21CI{phU#Z%yMm30t1P;k=Rtiln6p-gqR=#AtV6{!hTYtaxOoz1i(^N_J21B+(g0}2mvj7+T*&AF5)sK@xWqNZlKXaP!rs^t>%?@YZb zNu$>*#*P{s3yc!H&y21hx>YD{0To2;gHQue3=mZB=&6VS&8;P>cD!0Cb6g!pl^NuF z1N9pF6NhRc<2Z&{CP0&C^H!g7_+DaS3M~ezp>Y)|c3?7+c#z`-#1vU6h(d%s1cxn} zUCdR34JJ$=QH5F|a$vC90dG~3BqAwEbU%TcB);>Lq?8)9YB&f4Zkm<}1~IcFiHVG< zgjXZ>#_QT>qIF$itXe=IE6id=NjR*XS#jcp5=boOCYrO8Dtt+5Ry3o@aXrDu zaWluvDY-nm1M3DtDFp({Cd{B%Ro7~9jEGKVtjTzCl^jp&98J`fQj zUazL5_=DzZMuP>Ts-z}?2U!(rvQjdXh)5W9%BA|t8lfcYygeo($6^>MamAZ_e5Emy zsuHu-N<|HHsAy0-5wjl5U8VI6pfH+al+**2J=ssS2ob?YHHUBavs7Og0gjgJi!h+M7(OI%2SKFgIalCP|uBrqd}v-~?+)8tbxh0SstS+tVvRO%)KT7NEjI zeLQM?)EO}c`ZYnlJS;*f@qZ#9Ul2DSbRNo~b#8&%`fC=WjL(a*g0HLrN$ z&nG?c!k1k2yubMCe<-HbFoJQeADgLZlS@55GFH?R@XO9{O#Np8_)j_dI;;Km4cPzxsopz;LD6y4r1;k-#*j94MeZ8nuA?ZAV@uLxizfK{hgD z5xM(;Bme$afBWN~{4z${WO+%AxCPpz)9#z!yz{^O-v8XY_di^A-X4$h_U{4 z_G>q9&N`7{(Qf;Wt*?8{%Pu%`wHR9A!yEa({r;bP{F=|%Xtyk{lv$$G!V(XL)5+0m zK6CBUo^t6Azx5TPR?KkO#b-YA$|oIoM+h^RGX&zR9$GpCQp;r0dgWyefI^8{a3O?M zG0S?|vb^-FXMgUCUq7-oV{TZec)iyx3yhf6@Z}rt_|td2`@n&N!yRW7H5oLvY&KiF z;l^*j^UvOO;cxt#-AiI>S*=ZU;rVB+Y+pX!6>b`AZLAa?4y}}XZhru!lcgnE*&%I{ zXPJn#E8Gn8rhe_qH~j72zW1^Ve`dKQ7vtHpd)uy^+wXbc0HBlzS{BO#5x%3AM8W`A zZ&K>%c7%kC2nsOMu;s+o4mUP8zJBf3DK*j#2iwP5sBKzRq$D~Ut#2HA|NB33)w7=d z>X$u3giFy@=5N&i%7|~c4D&>qgJ>XQ5u*MH%YU0pvmD)ZpWMm8O$J3 z63bN}B?3Ws?aL@7gMmRJP1|hSzQs*uN-~+`#~wY@%{m$jb8Be`YNb(a2Ou$5wE(Ou zBue8E@j%LeIv$S3eN1aW0rPMzZa|CpX;9N=nH_%hz6a(;vR`&wk@qe_`vm&02_X@kQtDIc?Vi4<2V05J?&} z?MRcg!%>xIU;x<&spY{+8gJ2DSfmtn)SHs?zl}r;QDt&P60Jiss~2&9;%(|t=$*T@ z-t!nJO8AJ<^}LgNZf*_PtROT@O7GDCe*xDJqxV@0z-UdB>Noc9jR=5h7VB>$A3Pnr ziQXS;63%(bLX?QeL?@}7JagyD>t6qom94A)>#wiA@1dhK+yYD1DFo3h#-yrRvK7eE z5Lx%`-M4G^u4(7PPOY0|B0?^a_ITTS27-_8(FPe=u{p=87T&yKzL zR5OVB+MXFoj1gZ5&f?LNfqc49OobEW-3uc!3I}~;V7wsIQ*K|U&-flvF4H_shPuG3@Sz-mv`~?VS-OChm(m& z*uUK(I0qRqi<-`6g`MnI+lRCiXLfSG!97U=5d>PYWefTM93S(3A^=R|o_7gNi3#4|UYBtcH+)+QOVPXX(`WUw)oFB#I{#Z}$-k35gJsC8oyz%9au};(8>`z@T`h zLDveHrW7+!?z9wZ2%V6?7+|7V0YJ!}X=qj@NQh>eQw_iVpnzVr!|FrfW^s+c(IgH?ejPD02i;*DY5fC3tTtib_giomNxmV4T;D=Z#AMsE|*SAqFW4iFy^;5o_-=G!>Gf z*?6Ojp5SV{{5Y9t3s zOZK^jriS9f6e4FfH7nZrel~}M``p@#CVoNecHU7p<0M{niPA-UP++cAa+~@N;_94$ zoGpMV|CxGK$V4U7#4WU1DZDO|>*Av)^+gAZtGAg|i-a7!PY*4;)DR!!Th`zd&IpyP zf?)yf%(3C>XRG^1MQ!{n`3@+7kC>O2<`G!zuEJo{kRqapiYzga8TII*)sz@k3>sN` z{Z}%ZP9{(zRkHA-uae3aRIb3Enr5cypbw`h^FT6BI+DqE|PQFDo> zrCM@`W);?>cs z?v1Z}-p1%HYhQ5a^&D5FR%9 zZ@&AJpTGWbXTPi=kSP&A@v;jpy5Q_DTzfl>2V}+6v_uW8s0z#RY5BW<{OC8oc^566 zK2tXEY?Fx6XlZ-i*tqt(8}GmW;GT<5D{3y>yRtNHQfns*kBFG`_=b&zQj?lwxtMi& z;sg>kgJ%1V?JFxgwr*J(iD7!yzSB=Hn$1LW)|8;dMO?##)Pc39nu{7^>nWBbj%>B1 zL~KQgSW;3g-HAy`Hdq?vMx>EEndoGL)EXHrEiG@`w%QPjZEbX2%ghaC={jo%!=?!{ zyO}W*vvkir_uq2k9ebaDSymLYXFUChKl%2zfAmvdxc&C~4?T7)A6?hwF(po;k!DyL z*v3?KhNjWNR@f%xmT%s^*}Y)EGU>{m?JGb1Q$Mk??X=H+>4t~zd$iD+DPwgjA#o!% z7!pz0n6%@8<<5&gy(mcUc}%Gkv#gd2n9XqPu|qe1X6*$gGKX2~UKK$>D&m_%o@TrxMz zgGR}KqU-Chf~@WK)zP-`w(YCK;c(pWm{pRLQiNcd4TFI+BFQvcR%#iYnQGT{Zl1N2 zl+x{Y-1q(ud}Pu|8ZJ*~8QJSMI%o&8EZ2VJhQo)CZCl#y$`x&rrX5dx( z=slb7X9W!8B_f@pGc<>I=#)-m=mu{TuAX8%uvrH@o1B*yf1qmZ1D}eDiXFqP+wk^|1 z>9Q4~Tw}o+LpWZ6K5>rXtAi5+M9fqx3KnHUHS>C?85C?FFIR%NA~`XRmB9|#v3Ug- zs;b;7 zci>ZME;{Y_Ov%~9J6{AAflag3XhF{%lnvt1dPd zf#hPqM@js!TS#KZ?scq41A~fnC|(Kn4hAMOUkVAa5(iZr1M*#7;UN;{BoKy>F;;Xclsa>|n%byhxP z;gmpNmYCx~QOagv$FnJ*0C%Mzay=i{J?s_Il*k;A7ZHihS=XjWO==}I1{Y=)5!Rwa zCI%soW{Oxd)kftj=@b8;ZoVC1b_6wC`%bD~`||Aj_LoFc!WTuMr5?tMI2nv((o zsv}~Ou%`}1QH-#UOxMg@rHNPw#**9_8H^hdgza$LL_~xc9Lh%u#0hZOx0FayLJ}C0 zFnb>*K*U^}mc^2a7D{T}ZA2XMdqjk;zkixQ-#*b=@8tGFNuE;+J zZw4BzVSunZ_Tqy?nAr<%ENHtu1Q4IzmWYgMC2DQ-HanIpbmON%NWnrl0QbcOB;@oOt^5O1*OIQRRkkZwn)5t1pXxnI~`N&9D^&L&e3wE`?uN zIflxVuZU1BpK)Eog|9RhtJ3;Fdi!H=4xc~V9z2@END-e9!4`;0G>=c?UgBqt0#O+K zs%2GgcYa6pgHkdx6;_h>f8^>nyynH1UwE1ektB_lzkS!;-@5hgvz~Q{)Co$LU;4N$+gA@A+^j*O#!h#GXKwb47_dSd zl-4>s5N6T4Ub~jP)mKS?qC^I9E~Gal69M-fc;pkG`oiW6I&3wwb=jJPE>qhYj8clT zLj>|x&p_08Bnd!bAqe~xu;n% z8yBB@x=@C-i7gR!Z(kh^cp^*+QGSJ6V6I=zs=F z*3w8|3KSA+hwW3I__(o znRd(XB@pZtW&o^auX7o5F+|LI${ zEw8SQgn5`~Bs5@x<|f>#5rYyzV4Z@A)P$>z4Pz2UubyI>8=Oju4oa!88K6d%r6tbU zO0jM|LC)H{=i-acz4*clF1+B}(@)>EYv-yY84a7nv^;Eb$-<;b{NN-ZB3L32xNQzT z{K!AN|D#X1?1D44k0x2SjGBM-1Fw4B>#n-xmixbP^KI8&`}JFH`R1bs9>^1+X52K} zERk}utWcHFz;yiS&wc63H@x(!r=5dhv!YMG;@nIB>%Y1A<^!Mo;!R(_`5QNV!0K{BA`(p^Ooe)TYBig$sXM`-Bp_kUg&NUp|ManIUiaFUUUJ^<>8zV{`3V>A z|Ifen6ZbuI_$$|b^Gjd7;rbhHdf>o;jgxECjuQ{L9hV_zP?;8(yC_p<;`L-lhbt0; zh(t6)GpG?_<;H}?w6m_*=Gt&+u=j%f7hZh9dFP&g(S>K9eb(ux?b|V49<7Xr1Lh=P z2EztzVuG>)g~%w8sxpJvO6eR$@nHAF#@exyYv5soTm{5z#9c0yn$6j4nmg3usE^2D zAt%vCzdjQuSpe_7A6%=qh>()zXiT5I6Z#a^hg#I?p!T*fBAP;A9!@l2HUI2 z@HKR?5r#uS|A$YIW$B#m0D8-x3oT9^vNZmrWdY|v~fJ>AmDIy1}F-e8th)5{# zEXP*jH2|5BSy3X0uvYOAPovGupIyY4&abrqyLQg zToObvd~;zT2}B{yQL#?{5DFlJtp3s(6RIhBDIFH{lZDJ0fJGsh&9tv*MnG;6+goR6!&^7@8ftAI1NA<=*K1|$+9bL}36jErh*>sjWZAE7p!i89k{9syE z6Q)v1)v*G=MNL6j)y%SMZMi0tgIa#vgSzJgxEBt?2p}(+@6|$0;6X$Uk%8D;fz9DkwKg$JDnQQJ2Pm13s}hO2CNVRsMthEfXKMZ+ zJ%(o@5R*U}1A_n4OmEO6W= z31A>e#1Ii5fZ~i>uX>f@T0_vTkSAd}!Z>g1B=NtNgaZ5y`UDlYgCB!~F zlSBHxq80{?iD71?ln4sy{7v^iC0ttlf?ONn7E2VEFM4KTgK)59$=Ha=DLuaa>;WP% z)QW#T)jXfsH$X8f0Y{_4x`E5*I;Fh_00Qzr4b0p|qYbL54{$0GRY4&fq-H`bN09)akA@c4Q&QynDQwz{-5SZYNn(a|F( z4jnzFro^00OV^p|mX&4F1L!s+4N9I^$&@^XjjC4d{frx-s9ty^#?{t&%u$`sPD0=NncgsWQ$NQ#K`;7h6Z=BHikrP#_@Lt5-KVm zcjrK#VG*Tr0=4s|>QK0FG7)Ce z+4iOOjoe#}2R2@<7)%F1YxT=RfDEi7=aXgLd$RFJAZAFMI`Qlsgy-O4+k( z=O9U!Gnt9t@R8#WJoKn`KuefrY6m)*kr)jdo0QT(+IH>ai39gPq|dqpK+d^oWcRM^ zt1GJqA3O<8u~2;^YtSy52oM5ZorNd99js%}rJE?z_ypg8^J#0+msgfZ4OHVz&+ znKkLeAZWI%bSEYljAF1(oP3){Om$s}ds11P7Bi=&)8Qk>@44?mb?GicnPeF^))g3Z zR!j>I29G}c=z|YFa>@SF$Si9aHqD+ryHV6~A;Y%Sm2qM(5w${Zc*P6e@X8lbd`ke| zevpIAsWFWtXHCsuX*?vByfNct7)ZSdxyBy_c;xW0>H3V9q-e3c4)`C(NW2XY1g(@CgiT9B*k#(*vXCc&UBe1p@>ap7!itsQ=XQx)Ed&Gj~-sz z=yr?*YQ^%nY4+^g=6W2)?8nN@psKeZperz>(m{!hBu{4`(QHmO$wd*PxEVl_WJXpB zw4lq}5|?S&JhEl$=#6iA`DOkacN9d3`-^Y+U^K^I!jpmp$iMSDb(TzAY=mq0hlQ zHFuiMrd{bQ{A12pO_f^FlM`8P%tjyl$ftH}-})0j{yk@IUs71fW$)I}zUN%@%I98m z^m|`^+ieHFcJnQt`@(f!{NnW|k3UB379OUY3#3s4%izFW5B>IU|IzU0-~OB@oy|m9 zts%PdN&BDj#Qn!NUUA3m58n8VTR-=OuYT>un;*IF5gxCmW@uT7#1P|%7hv>yev6sH zO0lBU5D%AbzTuW%`;Wi#8^7`IF4(uKYLi*+x_s{5?dQMoxo>{$v+up{k(+M5^()tZ z{VUhqbl08tmsw}BM9Ptlu@VegTx#0OYRNeqQea)23p9K4J~O*^ zN8v^+m)?Y{nN(F^(;rMHkP+u{x zZG;=M@C#Lor)HCGOudjs)#22HxW1m_v-_Cn)c+uWp87BSA3WRg>^l-8|D@>lt+gui zrWO#Zg%AnAst{tJl&))99k9`C{oK>G{J_6>%W!q;JO9^TU;nKKwOyHYRBx_^E+8!m zrs!~=l`VTuyWql0W}QtZxoK1GN&yM^*hd5AZ~)Cctk%t3Q}QS_MNPn}Oow9u!Q$?* zVee43csTCwi}Nc`1tmQBbMp|}OKS)f>sQm)${{dsSaPyL^-AvF7vU%WqAJ3?a4@}O z6%m8y-W5n95I9P1P)`#Cu#m9uAYJ>53kVY7dFM{k*oS$|p`NPj3D1nJVpbGccHPYm zb-BY+Hujj*w0CDzd%i448Wu?wbDz$e8H&|tS))^m`@LD5He+g~WcM-QRuQE}Gh{73 zmCY*R#Y9D;ucDNCKA3vR7ZFiTP!Ms5CZ zl;9ML3z+q)Np1uz4s(s~<39v=iP8{#dMFlJS@Fn()IbWR=#FuEntvmE<=>1G!+cJ( zF`;cFiMENG#BD=KtPyS#Hw{ZdlZb^mv9XZ^FTkyaFNvqasi>)G&ZebpB+tr>yUDb0 z0MVu;&rlk|q_{X+E=7x?fSmxF)eM$PQPWaPT`143YiBi^au zBn%@KV)7MsWP^I`JQwmQxj6o4AZOB)lEae$swnEh*bNzsy`{@QVXGs*G8A>ie`k9Z zB4!Z~A|Us6=z=7*kI~Orz`l{*Q&r4yu-NBkq0T$&ErFLE3Y>~r<<#miaiT96xtJq| zMBYUo&$91BL4l%I^P-9|I-7|#I@D2Fh?J`+pw&n^{84W>DtR|{iyLuMkSn|Z=15-z zK#u-6d|BPp+?T+5$!x&1Z&M4MAoU^%qAkzi4<^8*A{B}%`B1^69!K_XQGgS(U^HsZ z*t>h@YP-6eQj;Ee^w6z$lt&&tWR{qrs=3V0J^i%X?ie1QY{DAIurMOoA~LWQ1q(?0 zypTs@b4~`;xXiqk1{4cBXx`cz_9JBE>qEsnDzZ7&6HmlU!Ij!g6{c~99RiUFSS(yB z#r{D&^VkVoi!b#$tdEmD+(AWvY`&1N`J9&+-VheLUSsstb9L=R3sOz>^ZFP2$AUnX z5+F#d)V%jYAN$TXyz;V(&k!*H&v@38UiRV_y!*W$Qq{rA_=V4X<~jR!o7u2!A3b{V zgCD-;*ki|Jb+;-s7cea?k6Q7K8jH|%QyLD?ifu9gZU7?d3WU=r38`k@oKDS)=*$Ex zuPl#7!^MlO>k+pfE-M7!ltqZSWTn=}<+>OrRVq3K6_SWVKniAO2Zeh?sHr<*ZAzL8 zwIXe@Z174H_mCsk+{zK9{;>l6p9mn#X0wgWbsmll@Fq3O%ECw>W)>4j$+NEOd>47u zd)PMIgr3`Am=Xczk~&l}7_zGa|H&a7=`y0*G*Gg()eR1Q<3B+r`u>OgN=k zp5jvYI3=-{zwHyMwbOD{b4v_0D$@bsvI2$T|7&@@N_TiRS-`_sSrhld_|_zkap z`Lmw&#O+J15VC4#wmMGFdg^)4dg^)K^X6B4;!10Rx4h|9uYBnXEF5?RTd8llyXT=VG%A9>`5zW;46c>Xib*u6ApQc+!7+f0J< z&)#+M`Fmgc>gV6`&AZ?I40bFJyNZ6{yV5XU=5oUE7eBIQg`CPV*H9`9}LgLT1{CbQygfaHxkW}Ru0$e6=|kb%iy%bxygeK9j;gm=kq{Je^ zjVJ*ri6mmFTh?GuEvBlbWTssQ&DwT(+Ra2#nk6aBn$@~oW(l*RiCw?TQ9dUSgekU& z&7BA4J%E0ixZW}<-!9UbP?z!iMSCa+W*RG6!G!>m+{qiX#Lp^{Q-6e-d8x%DrRdop z5UN;JHJOfunGtc+?abxInO%Tf6_zbJwA^$6t^q`S+{=urg-KNLP=a_j6)3QSNNc&8 zhL{HD2z>3^lDTQC>0Qs-g0rH96$n2W>8!yhrPf$jns&I{jK!W0DefY&J8_QX+z*?i=<4citc09)w8EC0g%PY;6apHC8H#3Sv3ipgE0|Dn zhf+eoGybDj>92!SBX$x$e#MnYv>04v3}oT-MgSO1*d zXaFQG4j+m+%t&mUoXln{oQN9{jxm|S(ZiOarPX{&86g`-s_Z$ z%cPTUaX+{v7q5&JHGs1lL=X(c!6QmUq~>C53MdtC1`IkKdwtf+9L{NisTKD{75gTd z*BPR2;|kLY9uqzAREshIQ0KhW;Lky4B36iqLPdf{?T1`LC#;yu%2u1}hQW)a4%~oP zOPC%l&NrqoPV-#TSh(72jav!AT}`7#%od#=W1XIiMaPo-l&ogz;dwG9K^RHa>mV5)pQ8Tb)iej~_X*G3$hy zqI%@;kv&g+{1q4O`|=I9Y3b5nH5(P?f>sNuit9(HTFi*k0!rbL`?yk#pmml-kCC}) zsX}U%V$IU@*o)ifYMbk)Irgaw8b0JTP{a!Ode&+W&7E?N?<6?Gn?$My2!|PH5cPl@ zxz$9CnNP{1DE{tJ=slaL?#=4TduLAbdSktK%nyM2u*p<5H)XVX?`?Oy_kCAideILP z@pM{tETvb!@@1d++!r5t=-62oUvSm)uN)7?77b&*|IgzOeOF(lJr z#?ok3Qz8)uz@3qib1q%BdRX11q3Vd$kSI(*fV@RZR?DCPbTU)djX1F`<3T78S>4tV zP@VEL>IVe{E;>0RrSVe zQw=>;?s9(Y@QF!*rl!jZFp9sf0NmxARcDiFDP5jsq(R})x9@zgQv%pk47cn$u0zpLRdcN!PUsww8bBj7KtuurKrjbU zB1MXlNQt5>Dq1<%a+d9D+4tIdwy5`g*H4m@B+E*aEK(#GMT#T{5)5DfNFryTfkvZq zIAQO-)~u@cqvqVF=_9ef?t^poUVE)MXH|_FW0bX@`P>6v`0|67UwO$@mtFF*mmRqA zngjbU*|pTR1WfyBl61{Q+y2!*_+e?&fBF4C(>y|IVARdJ$@(M~TGq_cZrQv%XxP`L z?n4?5(U48mJL5sJ=*HweBCFMOsyFXuv!Df(Lu`KQ-BF4pLe|Llf??_AXy921)I>Wd z7K6Y|-PAi}b!PQ`<%%o!{ri9Mb8o!$Dzm=N%G^Bh{PDZK{OzxP>xn0ydGXAtQ>&*> zF($X%u>UuIox@95# z&|6-%d;5-G_$U9@lTW@V%`mH5m$hZ1B*5cOyzn1?=fD5y`#$vQm)~^zEjQl$vgB;lNzzvSd`_sp{@5f4V52jBSG z!{5IDH}_w1(Q9A*@>_4d=GyD7+P!1Tcqo1D)+cLBeB(9yFS_^_+tmEeKmWi)XGDV% zf6Mt?ip*$!NMfo(b~uTt0!{*5Ump$a*M8ye|I#nKdyqJg;-hD$U;4@eU%30L4?OtL zp%-2}dgM5C-MY13`_-TQSO5H1-Ku>@ImTVHqLM6XPpEt`U}`W>0(o_FiSDkMgCwQ0 zc)bSP8e)pv%8_%9w8YElq+Zz1;qnmZZ}>S|32wDSFEv~woK}aAmK9kB+|;7Aej;pi zdL0fjxW?7b<=yc^p-wla;(1#>1)Y1K#*?juVC;g5{G5Z3*Dw}F1Y9pjQ3XHqW7cEF zI$0Ry5Lxofxo;(pXqNK&j^%|PdDmNB^{U(d`r}{x^ACUiub=a>T&6gX(-1;r{EC5m$*@kaY{ zPStQP-r-bp&{CCA@!Xl0=C!&%hh0rXwE!y zbD4St%`~2`oQP2FR#S z(qPJJOdfJ=l-b=v#4%1HYEojC#7Q`bkWdui)C?dA658FMUb%SSO$xKrWN2?POUwzB zh{>j!eVDjQGNJ4-R!=n)9cr$i?3Nwb&5CO%g|^GRXk23nsF$Z%pJIHcJQcrMVn)rR%zgSKtbF`WzUUOA44dkdkaVN1%fC5pYsWk@JwvNKE{WX916q z&{jabc-NFt3X2~g_B)Ft2j+v%D>aXz(k|LAkA21f!t@K^kSlwcBqb%2Dc-lzYmVb2 z{%1f|6XCwkwfBX@Of2qb+hH?YY(|UC!k7nb&Y5AUN!}(9bZw=_%+*QCIfd{5BEUh+ zu9=w3l{hiV1Gi%$#NpiW)ip>Me4Kss^AB_kxylq$rM8@zoB~ncT(q4&N;&e3?rs&Xu zoCwlL0khbdNmxWEF(oND1`(Phjfk598aP+5PJx8tS!H3Tt>#*=b8*MC@4H^zJOZk! zRrZ}TC*cGxWnghiD=e2VQY`Z<1Ac~hG(6l%EkF$tp{k%lR%0q=J+&oM5$Xz@&^h3F z!7rIK7l!|QyM_+&oKRGZ+UKz`l5cXD83Sf8M^;aXg~^;M;#&l55xP+iYcHXbP(}(y zUFOB)FK$8=2@=iMy!Q}{7GwwRfe#8% z@K>2aC>keS$%jggMjXKgRQ2AdlI6JYFq3i;Nil?UX=$l#hmE9BlHo9IAB|6)x$w~8 z!_OT$s;(^U(UYf7ojm@!S6tsFd*IRMPpzGpWw+F3w7^JZVAN(4NEve$p6>H|Swb6E zT;IK*)lqv@YqD5XL?D)EEt#2H=u@Ti4G2{KVuUc;q}nj?c?RTQ5+ZUl5s9E$mPom0 z4mgp4%@C~{*O(;2$sKVbmw-^h%sKX)v5rfc9w^)fR#jq8WE388oae|7N=EU2d{KQ> zf?8^&?-LQ6hadjLr+@q>e(2&o%PvNQ>#n`>=4-C}#0z)5^d(nZb@e^~gTdg)skQfg z;G<`cpQYuU!JLzZb;gH}99`>msg(djc5L5r@ddjdyZ;HYO&AVfY_p6+G!$u_K-SO3 z!)C|!Em2R22!P|qPM$e^21$@Os2_C%1Bk%D!gwexCkBQ?hv%$-bCM+F!fiU2at$KP z$us2^QVkw8ZH;vuxi}@}n19!hX+~j_&SPz1h%83L}ZdB@K4_UzdezauQ`iX%sk!+^xz;ndl)oqC%XFk=4W_xs9P)4}*`v)0#++qwSEu>@2akX2o6mjhvtQe_ee;diUHYn5T=&|S-*Cb9C5KODv(1CSFZ|@& zzy6H}@44q83>K(uG_M~!aRvZ0n;Qcc?%la}_m(5ak8!(%rZFVXz2|IBJWOm*>vwM5 zx;Sp(U;+uRXFq*r)y+A@bV{j}OIg1W?8=l6kJ5u7ECdoHpbk7KyT&XNoDzh9+-=>y z{Ifs(?pNM?z^%93OFR1VeUJRk@4xS>-+Fp=owGOXXpm@3v)R+n9qao@pu*>&9)I&K z9+_pWqNy%dDqD5F?V`kS5J5_s4>%=Z@5%E`x83|te*I@Izi9ic>r;{!POQB5_x|*b zkKJ|Z)VjK)rcKl~l4fU5A3b))9K`dPpAlBV$AD-gfiF@A=Vp{y)F{`~7rE?SO{K&28G#Vnf2SPM>_@ z(9=&I{IkEh#8`uK}XEjQ#! zUXu8-QM{rBg&(Cxtq@tiHcR7S+PqC?_RxdRJo50&C}DWCB2WXSY31#H7N2g{{|BRC<)y!6M2GrXCfMVoG^b@1G zSD?2z4kFvIBA1`{Vao0-_A_uU)W z64zEA0mc23Dn2sbd9_vy?5$2Pp|VQI-9s1>56{iB=8a#Qv(2fDsrCwlagg$;h*RPt zgi~yg2B`Enl}g4!b)8gDqi&U&V3sWaqLgI5dSbDv)|5Ut2%-KAvTm4~lB;SgEoowk zj;ShwBV3nZ$*VOsjm7aSETzOZ3m=^#;4B`=D7}gRcROnSihwKn@~B?O6>6-TvycD- z4Z-}Hx#pryKAle6CJ9qzN4T1c6rqiUZ!(L6;w{y@XG3<8WJYE%^Xw3(qFn(KNeNm` zL_#E>1WGIkm>)rbMXR$Bgp>(jhd8m5_S*HYFVqeT}9}#gq#Y_LD9A!pUVYA}7UCufOk4cnknJnL7)`WHbuiTs4M{Gc%zeL?ve`g={fCa1NHo{1o7Dy(tGr zq$_4&YQq7NF^fBCj4ekn?IUGRWx^R1oXj~EW)UM2k-E?NJRT2IGZ>7G;m~)YIF$>(l6i32mGXa$wgl7*KMQw(6%N7C%> zrb@#mk$OYnS#Ls2TuLKm7KR8*a!H&5x*)IwFymnqO%N*g-$=-fRnDrh|MJ{yf~sc7b!F}jDj3iwRjPMtna;s6RkrZb4>Yh zpi~_-=*59r-Q(tnO9b}H_l=Vk%oJc-38H|xR-Q+ZWKnTVD!m;7r6jIkCUYk;1BnP} z%>61ENDxf`&sNBmh+dmIalvJRX{_dEAwVup6F!fK9(W(s{s(IN0u+wUaCe5YxeLKe z;Wen&ER3p#D+qmrpn3%q2*5=Wxif(YBE)my1PXsp!;mSoa}|4@pM}7=H$Lu&6B#8j zH8omVS~91u>&N5aXvouPzh}qxJ$rVXK6PewlKbpy)BKJ59=i0ro!|f6x8HE}bB{iL z@Y&~%o?KZyy*8WXm06aa2IM11n97S8z~aOXHY0=pvp_;tV4Ofqe0~o+azS%gHgNC` zVo?MuI&z{oJIM;enju^Q7z@R4S+!zk&S6EZC4z1=Wy^`~K+q9TNofFFLrz&zn_Avd z>GpUO=3Ilb!;3w^JYz!5%i@?vS=;B}6lIN+$8=6UUQqu$okGm=8C(&_{EoAbLG+?O{cTv@$hqByyxyOejUviEVkA|KqN3c^4L>{ zj+{Dh;f_A{0Jbc&uYL9HpZU8l%qA<`V@u>BEI4*{_QX@qL0X5n^TFp2A33=`-m#E1 zx2e5s{}snie(>b#s?oStv8hp$yzd~fkPL1tLQdQ$yraPosr5m!TvC)6V>3rCJTgC@ z&nMx?gOG%TWIS|rQ=-wpV8lXWT2p`Q$umzL{K}_3f6r@PcHq~3{zq;&a7jwssa>!s zz4gtn`TEx$$bFWS`c-}Kk*E5%+{lP*)h@bV$Bow=c<_Q#Qm8uRezw}S zcEfcCHjR_HS+>;3i8GTYo_#^lP)cqDN>1Ufh1#q_0iENt%+5`Mld8i=iF=(t6atXd zR2@Vx*RJ1x>6Nc~#SJY}?)xUCldID|{)-Ra^`!@LyTeBdgTZ)-h_WFNShb=N29ZyD8i;p}>>x(lzy_+iu6X3}6OTUf z!ku@2^`jsC)K9(V?cevkuNyX!``jje?W=G5qd))P(~rMM;}NEvn^R)z)U$Gvyj@U3 z&ixaQz4-XIAN$BBKKY7UuK9QW;@7Uf_CW6Y_37-IYc9S0wp$*3>_bKrt!j7Hxddj8 z37EqP(ZT35k^#_OUBT^um$#AAEccH+e&o>y4}R)1cfahVSN`)~|Cw8Ex)z!zvwq*j zJ6?Lj4PU?a(UP25P1C8aWO5R;gEq3*(tKmGJ`<}n=?$-a)%N8<*Z0DrhC4p;@jE{7 zQI%yGZ2~A}dw4%H4b1Hb={zHO|xMdPgRXq932v5K%vrO4bdg#ZR)r zB&Ga7O`!vSnRQ(@bLVO`jaYD|AaTtA;)O>!~ z^94&VqEP&6$d`M{pAw8G=45E)9qs@O~UuvO_4`88NPI~>Nu z(zv;6?@Yo(1kFYSGAHU9Huf&%ZiLy$))&PtyKvXr-|^=CS6%aG@BjE;e)!HKE4}i_ z`wTd@Lz{Ks5gt$sm4gVB8tW+y7H+-um0P!OT|G0ER@}+dN#Ir-iQVfcPKqW35O7(I zp%$OHKpX5fhkgj~Xe~L++`@^5VmZ7bcokVboC702Pdg&P2_ms%$NKs20h(kd%?$h$gDlns}bflLwu* zh&D=OXQFC8MRP3BRN=0c%NnS)O<*xq^Fbg|E#0Z$4XGM&0cHxj9EHtSKY}w0&5e(W z5REN{w^c=@n$LGk>>%dkaDzp)k}EgDYib^4?0h>DP~bV{4S+UmqKm(6`A%$&NQO#R z*-U_J78q^Zjjr#L2ou4T1V+k8C3Pior>@T)B6o$lszaleHdhx_GUqa+m4tc+jGQtcv1> z5Y8>A)hQet9N}0w1vBM&5o@*)Mk-&)Qz%3V1QcCs<_)zmaZHh_x1($@CN}rdA1^c+ z_Bp^SOvFi2e0-}GTmcrBVwkODIaIcLm@yMmHqUA~D{F>`w2d^0*}dNJ>ub zan6_$Q3|<=l}ae36k*NW0)G)IXBEL??3}wnJQZ)B>VZC=8sjDsySQhB0*e470SAMI zDGB28&6E)KMge>%EJx-n>_VWrSPMEUCGs){q6uLUVJ})lVv(#KcID=j&5QYTVvsO9 zb4=d@*uufs)P^D&vLI6z?=5q<%o?&g0M%RyMy?HAc1fZ}BqW3+0_%h+34}SuPbB70 z`LPgJO`IeMTcuZJDS^j}nAs%aRR}Y)<}j>Q(4aim7+8&xySX}4z(6-PN{SeILo0pRvq5vY`PUK}x_Z^d(6-n@Om#KcW_i~t~{7+c4YiG}bakokEY zSF%PpBqere7-v`Sq>axwuP_Y->Tq|!xoZl8m&!EgPPPxQeRk?zD|B3mk7CRTEa6ZE z0*SCBn3;BENCXjY5SZg0#PQ1-W6RUP=9Zw8LexnxP;lUjg}%F&RSgG+DBlVuT~fDL z3|uqnLd7f#zx+w_C-NPC%%7;hx*j56k-;cWM}Pjlzj^Ch-gMxSZANIBUitD{4?g|u zOK-YrAlx(Z+z{gm+TEYL}od7Wc8Du{(|<-qmjc&5|pOXnb)2x z!Ee3krI%lM`2+Vo*eq{LP0J$0=+|enGspK|amkPVy?1P0XaFw+&lqi3lSeOgS}Md+ zI>*t6%H|>Fr~`s0>!ln(ky?}%KFw?Sh{JO;zSwAOq91+N4}9{@FC9C4x>?$umIm3B z8dhr1&usnd($>Ydz4;AG12MP2H6DH9;Ny=Uq|{22JPn^ccr3+`5!;s8wVo`| z=V%%-cUSbi=d9X825DiOJAgzs4TNWB&L02dXTEaavh%OH{GxFpQ%%HI?!Rzp>z31N z#Hr0R_}abqKYRSmm+lxt%v`sQn>WAy<==ep@oznNNc$lSytwQwpdBV>ZT-a6H(vV2 z*W5T@S2ZJY&;yS=d;i1FP_sa3fNUU{+oji}xEBAhse>g1hG-mX(cG;X6ZC54PDPQ8 zg@xtuFnP?TlyrJ!^@(Q=8INRPNj>SzBAX!Z_FsC*rcEPr=V(O7B@_v#gV+lIG(QW= z4K6Mb6?>0m6X%Yr5`#iT&P6w|yf|u@VA?doM5oTKtgNikV2iX(?%bV>pt*0_w1594 zLQp0Ghf@ofKpZ$I2$X<+1_v4jh=yb9K_elWO}fcFUw^2P{IZu`d+~+4lCT5kowwz@ z^Ur(w$rmjfrA7qaO`(d!)Bru)3C$4gkcVxT*YEu7-G6t>4cETpN+HUy#qr>xeHRQy zgITabNGd!!|Lmm{B`V0BDMW-)ah+v>b!N)WZCYA@YnP{A`RcuQef~=~zx3K9k{yG@ zyZ7vB2JK8?*?EwFo*^t;&p&6v(!xR_H!=vy_tjTlLG?iOs)7MkM+ce**P3GhT%_Mt8KC8qnR`dfE64c?sXrAJ zD1oW#d-LLy1YnSwlp5w~lTcP*w1pX|ZF84N8iK=ugkBOGAb^~5--8Ykc4C;fa|)te zvaCoVssJLf7+@A6dlD}VXMzKgpk3VnC7UYuz-!Qf2V)!a&Qm=uOF*ImKuBfMxb_Ti zBLvbeGkYUwL`XYEPu4e>CS6-ZK5tWV%MDlD{_0otqfP($k3R6XU-b&%<=AW-yFfo%&v-LdlWX)JIpEXLGR3d;?4IT7jeR)90UY zBU39(5T+J0-Mh; zs#ZCbaT8^21ttP9L4iR~CYP7~W|XO1X^z2M!g43yMD9O z*ynh5g%WcPAX1RD=0H@Cvo>n&jSAfg)qsK0;4v@m2gD#NWv{Bn&5noQUVyytb%?Ye zZUZ4juMVnV6R}8G*yZslFb}Vz3hz-hOqA_PWfO z#J;1taaSjyzV9_eHUtw&3?R9=iF0&e%!SBJ%}o<4C|gxRL82^f0wH05G72MKs&=hl zC*^|$xxs-9b22A&%0_CG-8gNcoE2W5dwHyt-vxIH!H}00LSQQ7VV+Yro0$cA;{olFBYwWr zdsV?wpH#v0fdq;jOJyZdZBqnoCB#`JQ;icQaCXFgu8?+Ec?UDf-H5BtZR}|GFk_9w zYmQr6VHA+VVOCrWXS135>iR6F$s~`Y7Q2Vfrt{j87Fcm zNJD;=ZN?<2Wx%-1-_l%2FI)h@Nc_0W+ma+q+(=4fNr(~MTnPK1ktPYln_u$w z_&aH>rt2P~vcF^FGZIzP5*K0*x1J)wlb$JM79q++0C5Su=34p@8Ydam@{;2CjYr{y zE3n^{DKo#F- zl1LXy4o4isE;Gze!v6yaDl5PI%gg}wwUvJR=1tpn?7jC(5ANNy_2PXyso}Mi^=a34 zUEk08{rfN3e9dJKe)C&jfBN_nFW$9l+m@X>Hg8^9*tUIX^QMJ;7w@>@@|1Owr?ctW zWHRl}u61Wu)=!>ZJ#l7jZQ4z`=`8y!TQ*mN6C2n=e_VuJB*b8L4{j3!NtMBb|bRtzneJduf)XiCWB8U%KQ8z+JKIY!eZQ!5Qw5zD4z0GXL9Q4&|KNwFjT zYE_mEAbgC7VT!p3-y>MWY#;)Py0sjHbA)1J>DRn3KHWwlNNz5}R(sFuJ&ju#ZhGv& zN8bN|kN=B*{A2FO<}bbes%=|;e%J2p)2<)2&8I%|g}c9aFO4>VTb-(m+PvN=K?d#W z+0!5Rz{g&G+l?3R-lREa?Jn50<=_01U;HPN>3w&7-CZdSJvH#`{e<$`Tfg@$@ADayx4xzWY)jz+ROgcKmUjS_rL%Dojh`)UE0J(I#unbx_YV^*iZfN zPrl|=H^MzU9vnMz@{W)E-OFyeeCN_&((8`R3qSW$KYHTK z`ki-vbv89<>(W4Ay^$%4`*h;)g{7szXuP^MH6!E3%+i41R=8xP>E-5Bpj)eOkVZZ! zHknbAY_hhnG}v|C#fP4LraN;?(RohZv=CS7VG8nuL_k)}*_+g;nM1roW~Sltw;p)v zj*ox&mw)VaLaEn|MQ*BrjD$ZO#5!0=bDpt zy_>ppH;&xrhMF6$ zIdJLziyyr2F&}NFG)nEjC+pOoe#7f;zy0OcXY<_WpfSQ3h8W^bt@v!pG#hW<+^AJZb6=%=x+_v}=@BG072QJO3(NBrG zE95#5hoD3kp5r|3(RK)KS}hYQ2it;5QG;V$yH+G8f##b!vaPRAx?ZgnRVB#M(!!3N z+m0PNnmf*u3>F%W(s-8lo`lQ zkjPMz2}RMJ@bK2-}mSXXVGr4W@sQv#7Vr% zt^j`r{Nq*bt?PNPY4goDzkIZ~c=pVs9SpizPK~H(6joV1v^=H75{ViW+}!7aulZB2 zd1~}u&&gdqc!FG^uA+GfMLj^mUaEk=MC#CYhI{!}U~ECl;ElJgSdN!CPatL&;sQBv zC=$*|U%VWafLD!KNebL+4O@&AB3DFpYc8KIYF`g(t;0>(JVgC8hr!RuD`HJkK~6o! zDOap$BU!YV0$hMJs@FyHpNO110HBSvRmcZLiBh`4aS??-5-tca@T)-e;jl9Yo5%}T zgMuQtmAsYQJrxwHp5{d1BIAe)4o+TOClx6!PueNkqp>B4&S^XcZtSHJh!@Oi8v&xc zX*dVE+^42bsbLAe-bV8T4svzv`{~ScwwZP_U0Lr}XS&{FedcSOO?z~PS$2bH9g3%g z_gzSH4vNau%aUg*61L)bRL|!5-K?itv3T70Q@^7;b5wMgHhv0~jd0G2uV{@`#iauj zhMt9~8P6uX-gp30 zs?eMX>)nQD%8#cs_&q!qO=z*Zt-aZZ#PX5qfqtd`u>F>nb?Ff}QOuz-k?2*MD6 z!>l?pxez5`IFfLal9bV@-owc$QRA|g)4TzN0z?7vric>{I zqxDMw6)qn~w>Bbp#g(&pl_-@kT^gsL;=~jD&G;QADxM}a;?)T2X09#)G8)X>Ok+E{ zdCnHGA%Y(f;8xZi9F@N=)#NHZM=iS?UMFGH1G9_+ENEGQx8rb#t7U>iGCVB~FFA1C zM?QMT=kIy&>E~Y<%PgP@BxGX@}Zw`q0Pz_8sqh+kt(XI<-+NS6q5tHh0jA zXQqGl*B@Cuxz=vmm6agL&AAa`0YiCk=iT@G!5_c>ANp^MgPA6YseAf*pNUfP2HI?)>`y_+Rf^TkSB~;!a?q zW?-xGjc-46e5K#9)VTJ2*HhEH?M=5{w0HLhKm4~}`^MK!9y_sZ+qSp7`K>?n!*ANP zc|^XEH1O#a;h}yS{Ye9asJMyWZ5Wbm}j;;{4zIm%n`ZWq)_~SMGiOx#QEU)5$~{ zVW#0w2C}?s*Y4N9;f>3iw*KCK`5(uQt+va9o*P#MkpXj7V_Y`7G6h9WpkYQp1cESo zZ`0G4-+1%C_>EtB=>A9V`t03DUOaYYW#VpmmIp&@+q~onL3NtDLZGi!hN7azIwlJmdo<(G@Jz1o2Jd)|1{j@?^7`nhj>^Pz($kFWMq zoOk}NYp#0vyT9k<*I%(0u&!5@cD3`r{J>}a?yj$Dvj}M&jdP|ZMdPLP=_qup%mik! zm;;(vyRI294H`4nIsP1pnyC;tIkPCz(+6L8=&=_s-?7g*b!M9v20#DP@0|Ajjc+}^ zHd(cdojaCpd+F=m{f^hZ^y&-TG^HpXNRp%^wFy^QV?dv)ARhCrRwSst(TzY*4@rbY zyzh|M%}G+u{@}w;96#HizqN7eGwdaoU+~+%`Hz4958n6f2OmFkYHiTqqJ8JR`Fnos zM}FuHd$ul`<+e@PoPf4vNz84E33$kP_x|&L^Z)vXYb$FX`{*a0ct9V?#t>tOctmCap{oMAi zHB4%`yYXe$-*)?L&pi3;Q%^p1^ysmyvuX}2`1i8X3n(LlET9GK~|VGy*hgdyVv_ zdY2bGAyOO=g!NXm02=<6 zbGc}#+fiG96tteXiA;rD;se;c1BjwQtJmzP5591gO3@nSXC?oja1d&qfjToOPO)N< z8)ZR>vV{~8YB#sK7;5!fq7BF+1DY?4lDIIznY=P>D8$TW^^@1@J!hB2%Zn8MGYj2) z^f*i04agVMGIxLeynGukm7hXk-9=18q z7D+fUkr#RdO1U2Q%-pMfxx|p*c~Bq%C3yjLv~2 z>;0`e#X&GFY2o}C*QBv*LaW%2=S)>MP=^M%6f#74)iM#qoywd(cvNk5U&Q~%^w>h# z0@w^9!kpj?D#rVWZAQ)@3vAC2Qd|SzM&P202^SAoK+zmo4;QLZu|Hv_?RPS^-N92KkJ5(%6^A>c*8jb1`%H6BRt3Z6yggvT2|DewJrlKb`iI>1=J*O=fv*ZL+#PU7vJ0 zYu{^D&AC_gY}%{#VIAjikQ;Mq;RJ4ogt<`{Zd;2H^+X<&lThPZNX>=d=%&bP=+_g8 zG|7yK7tI?;ayRE}aH7T`nvxNF?t}Z|#>IhauJT+g6H_PMk=rf=D@_qN-hj!HWVTNy( zl@q(EW#V=?TbumBAOG+1VDK|P@s91A23^)}GCOeTh5znf{_FO&k zxNQH0!?v0AeG&oDr|!DZ-qg>f}4mo;tIxS85~!-Bc%rYomcckkHx`r8j&f8C|e zJpKHWPd?}97lxykTz$!fdv`HoeKu{I0TJJM-?RVmz5nI8CtvWv65PGd#w^2ylP6C9 z=imR+@p$1KZ+pc+Xx8ig^SA$_U-{v8zw?a;pF4i?%-PlTsfaX5mKTSkL9=tm)(bD# zJ<0gum%s4IkKJW?(Wr+sB6>|Zx?%Gq3vwb}+VnZa}BL9%WpgZ7oT+;GcPTW-Jl zmUq1Q`eQGiI(Gcbtm|`+#l>d#_N9w2+_5}v)U-*h6MyCYLx1zZPdN{`8RX84k(RbS z_uR>U_n-c7{ny^}J+HocoYJ(*E&R6YF1_yRiw_-JIemKFaz1bGmc82+7KJp=oRg$> zqWIq*{nCH^lMhe&Aunv{RYD%i@)*Fyj%}7}K zocrw7!=Pverw^a~n-6{FrkDKqg`3*RY$l#>xZ?cZ`47MP$fM6afA~Z{(@QVfec+1o zw~U0~-K=ZG0nS+&MBKO<5xfsfkWICl%_3eBoLtP!f(LJknE6+lThUx+GA9-@wJy`J z;dbGRU;M`Bzi{u5zWr83vaHPh%9{^dcg??k{E6qDe&+CaIJorE3opB9N5dN(Z_PbP zl$p9*o=OyggfX zZdqcW&$$_l4fHo3`q({R|F+Ax@3RXrU}m}RQQYE)AZ}*ru5Mk1NS;g=#>02L<8ANy zk?-!hJe|zWoH{dEpG>FI;jn2^vuoG39b1haP&^xwT#cjU`Ds z&G&ud{?+L_w~X7a>j-(%!rN8WtX&DTBt*t2I&pV_))`N{*A?%%h2ARL2q!b(gSoRYhHb`Osu zcUT`y#8N5%4%0~b=7oRO7?X`4s)b(NiZ@lSUc!EmH3R@Z`RLOh{>a~6`ip;$och^} zIeqV&U-Qb>+&=BS>y4VhKl;c2;nN@f+h)@?N=c`^v;(RoU#T?aH6D?xIxGaw=hPh_ zD9l)xppA8`J(HsEgw^tlT|IXOhh`Et&Ak)1ODQen+_(&3h4=suyN1v+l#oIILQqnx zmvfUkau=qi5q2fd?SS)a3eA>hKxXS(p@Gom%?mrWY~O#;-b*gred)eE%L~hAru`$2 zKmYlUefArVJi9V8q)iwus!2r?$hsK-l7tS-$pKfTB(4f!kmS`_vw7F+-tgVqcI=o; za@!2tNZqSM-rXV0s$LA_I1IMQqj|$&ZC-GMN+m%-7TiOiK-KAhTm$tGX8{x$us&)E zVFpT@-i?@C-8>dV5U#B*tH4jfqZrsA>Xgpt9HMZIL(w&cAG-r#TutyOT;q{=<({BG zROcjf?#}0s?&rkW(##7$+oMlgaK*4qa-cZgRM?jY1rkEs)p?yUZ$vl%=CrXi-6beC zUXiLY_+ z9%Z&Z=jkkW+16+I?0R>0lGi#vJF&G+CmkH5ifo?E9D<;Z6pK|?rL*UR&BZA zUU)-P)&mGdRv7y|td64*URP1!QF&S3UN%>e;!<7Fj&MmvJwD2sL1BAsEC{DLIOw(J zEtH?SJgGM3YsLzYr?Ps&cmeIS!zhD`e=;PKjiHRB^ktRkRB_VPMdlTOxN~z9l zP-6zi*esY3B|#EONm7cQh5<+^g|;p%QJe@yQl?NTU`f~t07PNgpNJjQ#{odpG|6Dn za+ot&*z|@U5W&fFaatx;Py>Lhc<$80x^i38ikQkQJD{qO zJCq?`2ogmx=^`p4z{<=uugG?#RuU1ZQDwnU*;>I44O&^Tn+vLta0nE+;F7V+BgR(d zd6%gq6a)f7 z7aAd%D$A5==ed3-x&h@hs<3ZWq6WfbRWuvAj{;YbFa?9KV9)NL$aTWOAsS3XUgphy z2dq=7e(k=8*ScxbEEtku1a{3mIovEWW%u>0)EiIS zZJltIJSUhXq(ZX9Sz&@uvuCdFE5Rk7Dmg9!v#Edgo?fNJ>Hy zBbtnw#9-H6s2etG2QJ@w<+kmsM-H7meRQ&xHPh5!#96%uI-~6EjFu<7JjIA)7?7-; zyUeurBEuDUnHCujybyT{1Bm7aXIZ%QAfC5&=IJX5d!H#WH!P{uzWLw>Kk~X)-hA^7 z`=dLwFdiOTnf}ckpIkq?o;GdkyE3Md69aH!Q|Cb=<4r54SO34i`$s2^9eek?e&DJr zFBlF7S+!-l_4>oPKD!gAkoAEILA%_milcdLzoDjA@m~vy<|PSqz#HMi zFCP7$|Lf1*@q<6~vKz15vDoas?vk6Yy|^@HK(oGQPJ_X)SA61g-+b@?`v(s^_=Gph zjs!S03}!Wx(elCPkN?}>{{4f`ANqkGc*`ZbmzXea_{xiRTzS!s+8%=ka1S>pcWfQe z8{hbb&)xMk)6Am*343Q$s}v2U0Wj?{m^g_Uq-jDXh7>WKc3phoo4)te%Zaku?&bD^ zExXNk3z52~a%e;7{%HnQM4a~r9WHj3L*ptWq&3pgo;m2S9 zeQ$o%{__@FMz1zbblKib!wa^UnGpKixk-|?2S0x3?ECMy^DjR1*)wZG3p>0Wq6d)> zdayv+Btk?Y$-zx>YFZFWBj9AcftVZOWi zxNy(UyyuMsD)O6pZ-T{jfmboIWQuD+Ov)LfXJe&NKQ{pp{-=GC{~e#?!~RajbD8ZU2}b~7|$ zosV~Id((HldPxZGEzOj zFTD2JiX6qelAPMtYTIa*v~BCe zASH4Lxn=-OYUb>Wh<9;NGlgEp!VM50s0pPuB_a||4v28qcL<_J)ZGM1NoV-||MovG z*t7F(Z+Tsln)UVdoK+32BnTE3WHb;EQroBlFqWidaE;+dRgqGPV<)2`KAP7I(U)>U zPTIA$wv?t@7G=w#j8h&+*NV4|G%|*O4WsdRytrkw<)Y_K*k`}|%@>ZXyE99}LLO=< zc9vR=haV-8tC1_!Boc0ccQBkx$uo6*!`jbQ)$=g%Xw)uk9&XvP^}M~?_Fc4h&-U#* zcW&FdX?dX?96Po8)WO4F|J;`zeEgZG51m@iB<&_y7-nVDV9zmgB4mS<%8^PM=91iv zV(_goL|*Z_x4i6@Tbj|xlQI#&YKCGu8-|!n;m`;GE+oX{=5?eA93W1Sl1X{PIklpY zp{kJI%upFdf!r85nIVOxojU_UWW80Y8A)-_D1Iw*I4S6b(Y-JrY+2(=SOQ!PV8hB+ zfv4O(CLK8iNKuo3jXXCJgt&m1{A1A^FAxKlk*<+lN9tRKR}cV{Qs$hrBBG*s8Fp4Y zE)mFDaT*C`R?I-FcE16XYe8h(IWZB%oMkQpVv4d--P9~Ta+z<-QMt@7gkvH&OLXRt za}Jq>#DHt2Nb*bRYz`*NB>{#zhvf(f5rwKlwd4lmE-1#rPA)0YhTbi_YaMPZ?Cz+a z+RQ4KXWpADlC{#Pb|OZI%ZNBe)6UBuwGcK1?}&w@Kv7X`hO@Dk1ihRAYPDi6AE(L~ zOY&!42I&?kFNUBM57vTc7?Gbe^>q6PsHi8@SO;Fh80Et5J4mF{FO zp3R%ALfSAAp_!713FoM4LdhG=6OAs51E44yHJh4sy>*I7m)Cn+o!X@L_1-7Sy@QC= zqf<)eVa_4Ni_{dvX6~gpEx|fkICaZcPahJ^MJW|PWgKhg{!FPjD>Mm|4q{!Xq?nJQ zE>Gp0EmBcaRGjo2!zrTDMF?sFm3>^`44O2QwoPdu zNjOmw&bgmX)+dwooI99HRh<@MMNL@LG;lFDh>#Y+J*%0y2@Bkq*u(#ts0=0rEFe3x zppAK~Jh*39Vi7Tgn+J!b^jA%T)JQd}HI#|+p>i@nh#9cl0Tk~TU2iflbM9tsBT%># zu}G|C7{QnU&je1=rckEA$svq5;{ha2)p^>33ZZ6BmWbVT*7r^dY8-L56o49~rim_r zyXS1=45#?;#i-ILYf&D8(5s^O1xc_r!(H3zY(paMyPUZNM(+QA5CwODp@c~SV-mD)EB(SlJL6_QbD zuElX#B3R59E4!8prc{agE~Rtg1VuQ4&8-}xdth2rknuh!MB7>kYOy7csg^P4-o2do zU{~T|xoT<_GwPU=x|&H6VRjGdl}DGs>mgCXYmp;W1P2?XC@M>IE(mgW)e>3eu?KK7 z%f-yE93-l90G8ko5jS^s5rURCD6ozP)0hfcT^cX}J$vM;1o7I?DDPPZLlmtb&xy@c zvQNOBX1$#_n_u}|uYcyb!yo+XKU+I>BsBww^m%ILscEHMc<|9@|Kv~p;ypk5)|;;0 zw`c43e)7C+pZfeao!BBp-v7u`-+uUs7muA-n`$#$f~T+@^lV1N%-T;xX0N#M!e4mX<+S?L z?ASBi>9hR=lNqKN>r-3HdS*gLPpA71PQHHVXrGsjwyH6;EvMG91v%dlPlbu3fP(S= z1zIG`BZ*gtVB?=21xft@f)h2Zu1%;Fg7ni&E%9LV_!H0m?WaC>^-C@p33b`phVHrd zfiK;2pV5F~25qM#>@Zh@G+>wl($IK$GFkt_KmG7MUw`;5Z+-pEH(htxv>^{e;aamOb=d)JrN&#v?07Vt>3qhZ%R^!!R_Ht#rk_~@_y#((_QLyx`v zt#8_Y`9({kw&jAkWOFmTaBTJO?)uvA|K5Ll?(xTe>Su_E+TqX~%ZoyzC0DZSh#3?r zX)q9?kgX9x21{ARm|VDIMl7fSexB0w%v%2(aI@1ot?mzn`n3@nmrI+zVB)BM!IQ;!@x@~O{!)|7aZ zoLD=Bac`2*Fmq~#F@IyG@((ueIKlI4K&wu^F&)xm4Z$J24PYY>zTUOQ{&P*(7 z>S;Oi!kNxn@m_sB=hJJBW{H}mtmGz?m`FUh`xqcKhfjCUoXs|wm@y9rr>Bh!H$edz z+9dl!4<7o^M?U_UJ3sfXw}0P^ zhX+q}tE=m|9bIwV4PX5B^JkCE%5L%m45u?+SI@nZd(*n7Wze9I0q4mcQS`|v3IjE2 zk~{Y^m8RjPtq(r@{6GJ9zx%EqeDj;%eEY@cZC+@aSXV(cd;aLkr#|zQKm6lAJ@Ufg z>u#YIb_c9_D71d;f5 z>Sx#cC!aj@={vvju}|Ik(1TBFTH@s`d6pqe!_D9N_9Or7pT751FTe5Sx7~2@gn%50YAswBTuE0Jt$HHyAHbv#e{1 z1Td3~o>PK4&j^s z_z&NI@Y%!f`LQ3q_2t*^*gR@E&~$XYu1@bHqaK zxbmv2uekChU%%&Gk6x8p8Z2yC-rD6d%b{fq7q$=&+Zj9zuF2)NB%ah(ttxjD# z15+9Tjpx7`2&UdUn0c^p{KZqh@o(Py*kez<>APREYv=aSXh6&YTOHcj-3$GV`?ps%Jn_V1r%tbdN1Q}^5BCvD3{%&@H%(Fy4l)xQ8Kwn%H)GG9 zXUx{J51TX|H_J=Sj&0}f-Lv!jy}K{CV9(yYdv@*GxiB0xNzSgUz3}3(Z$0$*gO5D% ztw#<%cjWZyv~w9rT24)qwPq}#Q80BV2*grjoLk>Z(*_eC!l2e>lS^-U&D+24?d@o^ zx;AT?M$2rku=4^-nY|S@v}T!^+oov;jk$NTemb3XeIId0NH7lfTU zbq2@nqiBlfNW-lTJPDs2k&;>$FIq1LsadhmiHta8A_Q2@M4>bzhUXmSqN;sS;Rdll ztpF(GFr7EZ%`}XYNG+HmVT;TGyO@wTSj1qOH5@jKNlj($#u$2+K+EC|xXqKX!b5Rq zSg{X;JDiE#O^CqcYGEx%0hYnclo0mSVa-`aGnrbQ?CEZN1aE-LyhSHrcf_^1qYPd^b&ibc zin*Nrf$y=KYvqU)s-TBHjk%Bks+0G8-_-pUl~-xMBiwIl@)=*bB7OB+P8Z$uo+2`3 zNz$ffI2epm8Vtr`aKjP+5NY2})>c`Moem%0AXoT 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