Skip to content

Add Bates installer: Core + Enhancement Wizard#1

Open
Kollerro wants to merge 123 commits intomainfrom
feature/installer-v1
Open

Add Bates installer: Core + Enhancement Wizard#1
Kollerro wants to merge 123 commits intomainfrom
feature/installer-v1

Conversation

@Kollerro
Copy link
Contributor

Summary

  • Step 1 (Bates Core): Windows Inno Setup installer that bootstraps WSL2/Ubuntu, installs OpenClaw gateway, configures AI auth (Claude/OpenAI), sets up Telegram channel, dashboard, cost tracker, and core workspace — working AI assistant in ~15 minutes
  • Step 2 (Bates Enhanced): Interactive bates-enhance.sh wizard with 14 optional integrations: Microsoft 365, Teams, Twilio voice calls, ElevenLabs TTS, search index, image generation, social media, Tailscale, on-demand agents (12 deputies), Google APIs, GitHub, DeepSeek, and web search
  • Build pipeline: Sanitization scanner (15 forbidden patterns), packaging script, patch management system for post-update gateway modifications

Stats

  • 189 files, 21,456 lines
  • 14 integration setup scripts with config merge, cron unlock, and state tracking
  • 8 documentation guides (M365, Telegram, Teams, Twilio, ElevenLabs, Google, Tailscale, troubleshooting)
  • 4 JavaScript/TypeScript patches (cost footer, adaptive cards, channel bridge, reapply script)

Test plan

  • Run sanitize-check.sh — verify 0/15 forbidden patterns
  • Test core-setup.sh + core-configure.sh + core-verify.sh on fresh WSL2 Ubuntu
  • Compile BatesCore.iss with Inno Setup 6 on Windows
  • Run bates-enhance.sh and test individual integrations
  • Verify template engine renders all {{PLACEHOLDER}} values correctly

🤖 Generated with Claude Code

Robert Koller and others added 30 commits February 17, 2026 22:13
…, dashboard, Telegram

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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
…hema

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 <noreply@anthropic.com>
- 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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
- 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 <noreply@anthropic.com>
- 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 <noreply@anthropic.com>
- 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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
- 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 <noreply@anthropic.com>
- 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) <noreply@anthropic.com>
…ation

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) <noreply@anthropic.com>
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) <noreply@anthropic.com>
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 <noreply@anthropic.com>
- 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 <noreply@anthropic.com>
… main agent

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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
- 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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
…n enforcer

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 <noreply@anthropic.com>
- Install @openai/codex alongside @anthropic-ai/claude-code in core-setup.sh
- Update provider selection: openai-codex/gpt-5.3-codex → openai-codex/gpt-5.4
- Add CLI presence checks for both Claude Code and Codex in core-verify.sh

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Robert Koller and others added 30 commits March 15, 2026 16:07
- 12 Sub-Agents with current role names
- Remove Docker/Ollama/ChromaDB references
- Generic hardware reference
- Fix quick start to match actual installer behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
C1/H6 (dashboard token):
- dashboard/index.ts reads OPENCLAW_GATEWAY_TOKEN from env instead of
  config.gateway.auth.token
- Updated login hint to reference ~/.openclaw/gateway-token
- Updated browser extension README.md and options.html help text

H3 (anonymisation — deep pass):
- channel-bridge/index.ts: removed hardcoded conversation IDs, read from
  config/msteams-conversations.json dynamically
- post-to-channel.sh: removed hardcoded team/channel IDs, read from config
- cron-channel-router.sh: removed hardcoded channel mapping, read from config
- find-channel-thread.sh: removed hardcoded team ID, read from config
- collect-standups.sh: removed hardcoded paths
- rescue-bates.sh: fixed hardcoded path
- core-client-setup.ps1: fixed hardcoded reference

H4 (workspace refs):
- SOUL.md.template: removed references to non-existent skill paths
  (presentations, word-documents, spreadsheets, legal-docs)
- Removed Bates Prompt Stack section (references non-existent runtime kit)
- Made QUEUE.md references conditional ("if it exists")
- Made call-transcription skill reference generic

M3 (README):
- Fixed Quick Start to match actual installer behavior
- Removed "builds local search index" (that's enhance)
- Fixed manual steps (only Telegram needed, M365 optional)
- Removed business branding from footer

Mailing list subscribe: already present on finish page (getBates.ai/newsletter)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tion

Inspired by openclaw_quick_installer (JustinBIBERRR):

install.ps1:
- Timestamped install logging to $InstallDir/logs/install-*.log
- Write-Step/Success/Warn/Fail all log with elapsed time
- Progress file (install-progress.txt) with step/total/label for
  future GUI integration (8 steps tracked)
- Final elapsed time shown on success and failure

core-configure.sh:
- Existing installation detection: detects ~/.openclaw/openclaw.json,
  offers upgrade/fresh/cancel with automatic backup
- API key validation: Anthropic token format check (20+ chars),
  API key prefix check (sk-ant-), Telegram bot token format
  (digits:alphanumeric), Telegram user ID (numeric only)

Also includes remaining anonymisation fixes from H3 agent:
- 62 files across plugins, scripts, agents, workspace, dashboard
- Removed hardcoded business names, channel IDs, email addresses
- All replaced with $HOME, config reads, or template variables

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Complete Tauri + React installer with 7 pages:
- Welcome: branded landing with feature highlights
- Role Selection: Server/Client with architecture diagram
- License: tabbed Bates disclaimer + OpenClaw security notice
- System Check: real-time prereq validation (OS, RAM, disk, internet, WSL)
- API Setup: AI provider selection, token validation, Telegram config
- Installing: real-time progress bar + log output streaming
- Success: next steps, dashboard link, GitHub/newsletter/share buttons

Tech stack: Tauri 2 (Rust backend), React 18, Tailwind CSS, Vite
Rust backend: syscheck via PowerShell, install process streaming,
progress file polling

Frontend builds successfully (vite build).
Rust build requires VS Build Tools on Windows (MSVC linker).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
M365-tools: exposes 13 email/calendar/tasks/OneDrive tools as native
gateway tools via mcporter, so sub-agents can access them directly.

Mixpost: social media management plugin with HTTP API for posts,
accounts, tags, and scheduling via Mixpost Pro Team.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Skill files that guide Bates on how to delegate document creation
(DOCX, XLSX, PPTX) to Claude Code / Codex sub-agents.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CLI reminder manager with add/list/due/done/snooze/delete commands.
JSON-backed persistence with migration logic for older entries.
Integrated into heartbeat flow to surface due reminders automatically.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Use OPENCLAW_HOME env var or platform-specific default
  (Windows: %APPDATA%/openclaw, Linux: ~/.openclaw)
- Add reminders.py deployment to core-setup.sh installer

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New tools via direct Graph API calls:
- create_calendar_event (with attendees, Teams meeting link)
- update_calendar_event
- delete_calendar_event
- find_meeting_times (across multiple attendees)
- get_user_info (profile lookup by email)

Total: 18 native gateway tools for M365.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bates can now compose emails and place them in Robert's Drafts folder
for review. No email is sent without human action.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Email drafts now go directly to Outlook Drafts folder via draft_email
  tool instead of saving as MD files on OneDrive
- Calendar operations use native create/update/delete/find_meeting_times
  tools instead of ms365-assistant
- Updated SOUL.md and refs/email-ops.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
draft_email now takes an account parameter (vernot or fdesk) to create
drafts in the correct Outlook mailbox. Graph API token management
updated to support per-account tokens.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- All links open in external browser via Rust open::that() (Welcome,
  License, Success, AssistantEmail pages)
- License page: click handler intercepts <a> tags, routes through
  open_url Rust command
- Install backend: accepts full InstallConfig with all user settings,
  writes install-config.json, passes to install.ps1
- get_install_dir command: finds installer files next to exe or
  falls back to LocalAppData
- Streams both stdout and stderr to frontend via events

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
H4: Fix remaining broken references
- context-hygiene.md: remove hardcoded refs/mcp-servers.md and
  refs/email-ops.md examples (enhance-only), simplify to generic guidance
- proactive-philosophy.md: remove refs/onedrive.md reference, make
  OneDrive conditional. Remove hardcoded skill paths.
- Create observations/tasks.md and captures.md (referenced by
  quick-capture skill)
- TOOLS.md exists as .template (rendered during install) - not broken

M3: Fix README to accurately reflect core vs enhance
- Split "What Bates Does" into Core (ships with installer) and
  Optional Integrations (enhance)
- Update metrics table to show what actually ships in core
- Remove deployment-specific numbers (49 cron jobs, 6 MCP servers,
  4 email inboxes) that only apply to the dev deployment

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New plugin detects injection patterns (identity override, authority
impersonation, mode switching, prompt extraction, data exfiltration)
in messages from non-owner senders. Injects defensive context into
agent prompts and logs attempts. Also hardens SOUL.md trust boundary,
adds rules/prompt-injection-defense.md, wires into installer and
config template, and protects the plugin from tampering via
delegation-enforcer.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…kills

Replaces all hardcoded personal references (names, emails, company names,
Azure IDs, colleague names) with {{TEMPLATE_VARS}} across 91 files.

Added 18 missing scripts (check-command-safety, format-standup,
memory-archival, memory-health-check, route-task, score-checkin-item,
build-code-review-card, lookup-* utilities, etc.).

Added 5 missing refs (code-review-card-template.json, cron-jobs.md,
network.md, search-index.md, subagent-mcp.md), 1 rule (group-chat.md),
and 2 skills (call-transcription, meeting-prep).

Genericized m365-tools plugin to read email accounts from env config
instead of hardcoding. Sanitize-check.sh updated with template patterns.
All heartbeat files, workspace rules, shared memory, and social media
configs cleaned of personal data.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add refs/ directory deployment (6 files were never copied)
- Add *.py script deployment alongside *.sh (10 Python scripts missed)
- Add m365-tools plugin deployment block
- Add mixpost plugin deployment block
- Add both plugins to openclaw.json.template allow list and entries

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Free HTTP MCP server providing multi-turn retrieval, keyword search,
and embedding search across millions of arXiv papers. No API key
required. Registered as bates-enhance integration with setup.sh
for the activator.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… warnings

New generate-video.py script supporting OpenAI Sora (sora-2, sora-2-pro)
and Google Veo (veo-3.1, veo-3, veo-2). Shows cost estimate before every
generation and requires --yes or interactive confirmation to proceed.
Includes --cost-only flag for price checks without generating.

Updated generate-image.py with:
- New nano-banana provider (Gemini native image gen: gemini-2.5-flash-image,
  gemini-3-pro-image-preview, gemini-3.1-flash-image-preview)
- Cost warnings for all providers (OpenAI gpt-image-1 pricing table,
  Nano Banana approximate costs, Google Imagen costs)

New bates-enhance/integrations/video/ with setup.sh, skill, and ref docs.

Cost reference:
- sora-2 720p 8s = $0.80, sora-2-pro 1080p 8s = $5.60
- veo-3.1 720p 8s = $3.20, veo-3.1 4k 8s = $4.80
- gpt-image-1 1024x1024 high = $0.167

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds the stop-slop skill by Hardik Pandya (MIT, 913 stars) which
eliminates predictable AI writing patterns: throat-clearing openers,
emphasis crutches, passive voice, formulaic structures, business
jargon, and adverbs. Includes phrase blocklist, structural patterns
to avoid, and before/after examples. Deployed via existing skills
bulk copy in installer.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Embeds the core stop-slop rules (no filler, no adverbs, active voice,
no em dashes, no jargon, vary rhythm) directly into the mandatory
delegation prompt template. Every Claude Code and Codex delegation
from Bates now includes these writing quality rules automatically.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add PKCE OAuth flows for Anthropic (claude.ai), OpenAI (auth.openai.com),
  and Google (accounts.google.com) directly in the Tauri Rust backend
- Bundle bates-core + bates-enhance as Tauri resources (single exe ships everything)
- Add non-interactive mode to core-configure.sh (BATES_NONINTERACTIVE=true)
- install.ps1: read install-config.json from GUI, self-elevate for WSL2/DISM
- Make Telegram optional, token optional (configure post-install)
- Fix syscheck: raw JSON output with lowercase booleans, try/catch WSL check
- Add Tauri ACL capabilities for event:listen
- Add sync-and-build.sh for repo <-> desktop <-> build-dir sync
- Deploy all enhance integration files in core installer (activate via bates-enhance)
- Brand assets: high-res icon (1024x1024), transparent avatar hero
- Log output now selectable/copyable

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Implement BATES_AUTH_METHOD for all 4 providers (subscription + API key paths)
- API key mode: stores in systemd env drop-in + api_key profile in auth-profiles.json
- Subscription mode: stores OAuth token + refresh_token in auth-profiles.json
- refresh_token plumbed end-to-end (GUI -> Rust -> install-config.json -> core-configure.sh)
- Google OAuth credentials base64-obfuscated at build time (matches upstream pattern)
- Telegram verify only runs when enabled (no hard-fail on skip)
- npm ignore-scripts moved before global installs
- install-env.sh written BOM-less (UTF8Encoding($false))
- bates-enhance staged in WSL as sibling at /tmp/bates-enhance
- bates-enhance added to Tauri resource bundle
- Google OAuth state parameter added and validated
- Teams MSTEAMS_APP_ID hardcoded, TEAMS_ENABLED conditional in template

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ignment

- Build freshness: sync-and-build.sh writes .git-sync-head marker, build.ps1 warns if stale
- Transient secrets: install-config.json + install-env.sh deleted after successful verify
- WSL readiness: probe whoami/sudo before copy, handle root-only distro, clear error messages
- Anthropic auth: removed spurious refresh_token (upstream uses token-only profile)
- API key profiles: use 'key' field (not 'token') matching upstream auth-profiles.json format

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove unused M365_NAME variable
- Remove unused end_tag variable in template-engine.sh
- Fix SC2155: declare LINUX_USER separately from assignment

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… as recommended

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- README: 16GB requirement for quick single-machine setup
- SysCheck GUI: warns with recommendation message when 8-15GB
- prerequisites.sh: warns at <16GB for single-machine setups

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant