feat(telegram): Telegram Rich UI Tools — TelegramRichMessage, AskQuestion, AskConfirmation, AskForm#19
Closed
feat(telegram): Telegram Rich UI Tools — TelegramRichMessage, AskQuestion, AskConfirmation, AskForm#19
Conversation
* feat: work queue overhaul * Web: add agents dashboard * Web: add core files editor * UI: add agent skills, channels, and cron tabs * Build: prepare vercel ai agent * feat: work queue CLI commands, graph view * Web: add full web dev script * Update a2ui bundle * Work Queue: implement schema migration system with Umzug Adds proper database schema migration support to work queue backend using Umzug migration library. This fixes the "no such column: workstream" error that occurred when the gateway started with an existing database. Changes: - Add umzug dependency for schema migrations - Create migrations directory with two migrations: - 001_baseline.ts: Initial schema (work_queues + work_items) - 002_workstream_and_tracking.ts: Workstream and execution tracking - Update SqliteWorkQueueBackend to run migrations on initialization - Remove old ensureSchema() and migrateSchema() methods - Add comprehensive migration tests for all scenarios The migration system: - Tracks migration history in umzug_migrations table - Runs pending migrations automatically on initialization - Is idempotent (safe to run multiple times) - Provides a foundation for future schema changes All tests passing (7/7). Fixes startup errors with existing databases. Co-Authored-By: Claude Sonnet 4.5 (1M context) <[email protected]> --------- Co-authored-by: Claude Sonnet 4.5 (1M context) <[email protected]>
…aw#197) Add useGatewayEnabled() and useGatewayModeKey() shared hooks that centralize the gateway mode logic: - Production: always returns true (gateway is the primary data source) - Development: returns true only when user has toggled 'Live Gateway' on Migrated all 9 files that had inline import.meta.env.DEV && useLiveGateway checks to use the shared hook instead: - useAgentMutations.ts (4 mutation hooks) - useConversationMutations.ts (useLiveMode helper) - useAgentStatus.ts (dashboard hook) - useConversations.ts (4 query hooks) - useAgents.ts (3 query hooks) - useNodes.ts (3 query hooks) - __root.tsx (gateway auth guard) - main.tsx (gateway provider) This makes production web builds fully functional by inverting the dev-only gating that previously made the gateway always disabled in production.
…invalid-skills-rpcs chore: remove invalid skill RPCs, add install/uninstall metadata to all skills
…startup fix: schema migrations not being discovered properly
…penclaw#201) - Create RouteErrorFallback component for TanStack Router errorComponent - Shows which page crashed with derived route name - Try Again button to reset the route error - Go Back button to navigate back - Collapsible error details (auto-shown in power user mode) - Copy error details to clipboard - Wire errorComponent to all 17 major routes - Isolates errors per-page so one broken view doesn't take down the app - Uses TanStack Router's built-in error boundary mechanism - Export RouteErrorFallback + ErrorState from composed components index
…mains (openclaw#200) Implements cross-domain search hook for the web UI: - Fuzzy matching with scoring: exact > starts-with > substring > word-prefix > char-sequence - Searches across agents, sessions, goals, decisions, cron jobs, and navigation - Category grouping with icons and ordered display - Debounced input with configurable delay - Results sorted by relevance score with per-category and total limits - 15 unit tests for fuzzy matching and category metadata - Exported from hooks/index.ts for easy consumption
Implement a comprehensive scoring system that evaluates whether experiences should become long-term memories based on five weighted factors: - **Novelty**: Is this new information or repetition? - **Impact**: Does this change understanding, behavior, or system state? - **Relational**: Does this connect to known entities/people/projects? - **Temporal**: Is this time-sensitive or evergreen? - **User Intent**: Was this explicitly marked as important? Features: - Configurable weights for each factor (normalized to sum to 1.0) - Named threshold profiles: balanced, aggressive, conservative, minimal - Override rules for specific tools (glob-pattern matching) - evaluateMemoryRelevance() as primary entry point - shouldCapture(), shouldPersistToGraph(), shouldUseLlmEval() helpers - Backward-compatible evaluateHeuristic() now delegates to scoring system - New evaluateHeuristicDetailed() returns full scoring breakdown - 37 comprehensive tests covering all factors and edge cases Files: - extensions/meridia/src/meridia/scoring/types.ts - extensions/meridia/src/meridia/scoring/config.ts - extensions/meridia/src/meridia/scoring/factors.ts - extensions/meridia/src/meridia/scoring/index.ts - extensions/meridia/src/meridia/scoring/scoring.test.ts - extensions/meridia/src/meridia/evaluate.ts (updated)
…7) (openclaw#202) Implements a comprehensive, configurable scoring system for determining which experiences should become long-term memories. ## New Module: scoring/ - **types.ts**: Full type definitions for factors, breakdowns, configs - **factors.ts**: Five factor scorers (novelty, impact, relational, temporal, userIntent) - **scorer.ts**: Composite scorer with tool/pattern overrides, threshold profiles - **defaults.ts**: Default weights, profiles (standard/aggressive/conservative), overrides - **index.ts**: Barrel exports ## Factor Scoring Model - **Novelty (0.25)**: Detects repetitive vs. new tool usage patterns - **Impact (0.30)**: Classifies tool types (high/medium/low impact), error detection, meta keywords - **Relational (0.15)**: Entity detection via tags, keywords, file paths, URLs - **Temporal (0.10)**: Time-of-day awareness, burst detection, pacing analysis - **User Intent (0.20)**: Explicit marks, manual captures, intent keywords ## Override System - Tool-specific rules: fixedScore, minScore, maxScore, weightMultiplier - Pattern-based rules: error boost, large result detection, tag matching - User intent override: highest priority ## Integration - Updated evaluate.ts with evaluateRelevance() bridge function - Updated config.ts with scoring config resolution (backwards compatible) - Re-exports for convenience: shouldCaptureMultiFactor, isHighValueMultiFactor, etc. - breakdownToTrace() for compact trace event embedding ## Tests - 48 tests across factors.test.ts and scorer.test.ts - All passing
feat(meridia): multi-factor memory relevance scoring system
feat: add configurable subsystem debug log suppression
* refactor(tools): create shared tool execution module * refactor(pi): use shared tool execution in pi-tool-definition-adapter * refactor(sdk): use shared tool execution in tool-bridge * test(tools): add tests for shared tool execution module * docs: add unified tool execution coverage gap analysis * fix(auto-reply): use unified tool execution for inline skill commands * docs(tools): document wrapper reliance on runtime adapters * test(auto-reply): add inline skill command error handling tests * docs: update gap analysis with completed fixes * fix: missing stuff
) - Consolidate /agents/dashboard and /agent-status into a single route with grid/list layout toggle - Reduce summary cards from 7-8 to 4 primary + conditional stalled/errored alert chips - Declutter agent cards: combined session counts, cron badge in header, no redundant health metric - Fix detail panel on mobile: use Sheet overlay on sub-lg screens instead of hidden panel - Lighten activity timeline: borderless rows for completed items, full Card only for live tasks - Add inline metadata stats (duration, tokens, cost) on timeline rows - Batch consecutive search/code activities into collapsible groups - Remove hardcoded mock data fallback in AgentActivityTab; show empty state instead - Add keyboard navigation (ArrowUp/Down, Escape) and aria-live for screen readers - Group developer actions (Copy ID, Copy JSON) into overflow dropdown menu - Promote session section above generic actions in detail panel - Extract shared format utilities (formatTokenCount, formatRelativeTime, etc.) into lib/format.ts - Improve Lit dashboard: CSS grid metrics, channel badges, right-aligned tokens, hover highlights Co-authored-by: Claude <[email protected]>
Evaluates the original Meridia V2 architecture proposal against the actual codebase state and existing architecture docs (ARCH.md, COMPONENT-MAP.md, 7 component deep-dives). Produces a refined plan that builds on the designed 14-component system rather than reinventing it. Key refinements over the original proposal: - Two-pass evaluation (cheap gate, expensive phenomenology only on captured events) instead of full LLM extraction on every tool result - Compaction-based graph sync with session-end mini-compaction instead of per-event Graphiti writes - Vector search adapter interface (Graphiti vector first, pgvector optional) instead of hard PostgreSQL dependency - Includes missing components (normalizer, gates, sanitization) the original proposal omitted - Migrates to ExperienceKit type from COMPONENT-MAP rather than extending MeridiaExperienceRecord - 5-phase implementation plan with dependency ordering https://claude.ai/code/session_01Ko4xrCYytJBNW5VAxzfemE
…l, and reconstitution
Implements the Meridia V2 plan across all 14 components from COMPONENT-MAP.md:
**New modules (26 files):**
- event/normalizer: Component 1 — typed MeridiaEvent envelopes from hook payloads
- gates/budget: Component 2 — rate limits and capture budgets (extracted from hook)
- phenomenology/{taxonomy,prompt,heuristic,extractor}: Component 4 — two-pass
phenomenological extraction with controlled vocabularies (17 emotions, 5 engagement
qualities, 12 texture metaphors, 5 sensory channels from experiential-engine docs)
- artifacts/collector: Component 5 — file/link/media reference extraction
- kit/{builder,resolver}: Component 6 + Phase 5 — ExperienceKit assembly and
meridia://<id> URI resolution
- sanitize/redact: Component 12 — secret redaction and payload truncation
- retrieve/{intent,ranker,hybrid,vector-adapter}: Component 10 — hybrid retrieval
with blended ranking (significance, recency, diversity, source score)
- reconstitution/{engine,pack-builder}: Component 11 — structured ReconstitutionPack
replacing bullet-list format with narrative, anchors, uncertainties, approach guidance
- fanout/dispatcher: Component 9 — fire-and-forget async dispatch with error isolation
**Updated existing files:**
- types.ts: Added Phenomenology, CaptureDecision, ArtifactRef, ExperienceKit,
ReconstitutionPack types; added phenomenology field to legacy record
- hooks/experiential-capture: Uses normalizer, gates, phenomenology extractor,
artifact collector, kit builder, and sanitizer
- hooks/meridia-reconstitution: Uses enhanced reconstitution engine with legacy fallback
- db/backends/sqlite.ts: Schema v2 migration (phenomenology columns), updated FTS
searchable text, v1→v2 migration is idempotent
- meridia-search-adapter: Implements readFile() for meridia:// URI resolution,
includes phenomenology in search snippets
- tools: Fixed pre-existing async/await issues across all three experience tools
- tests: Fixed async/await in sqlite and reflect tool tests, updated schema assertions
https://claude.ai/code/session_01Ko4xrCYytJBNW5VAxzfemE
…#208) * feat: added work-queue workflow workers and a worker manager, integrate w/cron * fix: address 12 logic flaws in workflow engine, adapter, phases, and cron types - engine: capture phase before clobbering in catch handler (#1) - engine: remove dead `state.plan ?? plan` fallback (#2) - engine: mark workflow failed when all execution nodes fail (#6) - adapter: fix retry count off-by-one (attemptNumber vs retryCount) (#3) - adapter: clean up abort listener in sleep on timeout (#10) - discover: fix batch/entries index mismatch when spawns fail (#4) - execute: add cycle detection to topological sort (#5) - review: add autoApproved flag to distinguish fallback approvals (#7) - plan: add comment clarifying sessionKey reuse across repair attempts (#8) - decompose: remove unused model/maxPhases/maxTasksPerPhase/maxSubtasksPerTask opts (#9) - types: add autoApproved to ReviewIteration (#7) - cron/state: use discriminated union for CronEvent (CronJobEvent | CronHealthEvent) (#12) - tests: add WorkflowWorkerAdapter test suite (8 tests) (#11) https://claude.ai/code/session_01L8kquwpmUh5zmU9S4MHgPu --------- Co-authored-by: Claude <[email protected]>
…aSearchAdapter Fixes P1 and P2 issues from code review: - search() now properly awaits backend.searchRecords() (was calling .map on a Promise) - status() now async with await on backend.getStats() (was reading undefined properties)
Resolved conflicts by accepting origin/main versions which include: - Type-safe discriminated unions for CronEvent (job vs health events) - Better workflow execution semantics (attemptNumber vs retryCount) - Improved error handling and phase tracking in workflow engine - Bug fixes for discovery question-to-result alignment - Cycle detection in topological sort - Auto-approval tracking in review iterations All conflicts resolved in favor of main's improvements. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
…ntial backoff - RetryableError: composable error boundary with visual retry feedback - useRetry: React hook with exponential backoff, jitter, countdown timer - withRetry: standalone retry utility for non-React contexts - Comprehensive test suite with 10 test cases - Card and inline variants, auto-retry option, cancel/reset controls Closes P4 Error Handling UX: retry patterns for failed operations
- GlobalSearchDialog: full-featured search overlay powered by useGlobalSearch hook - Category filter chips for narrowing results by type (agents, sessions, goals, etc.) - Recent searches persisted to localStorage - Keyboard shortcut Cmd+Shift+F / Ctrl+Shift+F to open - Search button added to sidebar with keyboard hint - Score-based ranking with grouped category results - Comprehensive test suite for keyboard shortcut hook Wires up the existing useGlobalSearch hook into a production-ready UI. Addresses P4 Search & Filtering from BACKLOG.md.
* fix: improve debug logging for Graphiti client and startup service URLs - Add URL to Graphiti client error logs for ingest and search operations - Log configured external service endpoints (Graphiti, Obsidian, QMD) at startup - Helps debug connectivity issues by showing which URLs are being targeted * feat: add Goal Progress Panel to Overseer view New component that provides detailed per-phase progress tracking for goals: - Overall goal completion percentage with animated progress bar - Status distribution visualization (done/in-progress/blocked/pending) - Per-phase collapsible progress bars with stacked status segments - Individual task listing with dependency indicators - Velocity metrics (tasks/day) and estimated time remaining Files added: - ui/src/ui/views/overseer-progress.ts — Goal progress panel component - ui/src/styles/overseer.css — Extracted overseer styles + new progress panel CSS Integration: - Added expandedPhaseIds state + toggleProgressPhase to overseer controller - Wired renderGoalProgress into main overseer view (shows when goal has plan) - Added CSS import to main styles.css
…and Obsidian probes (openclaw#382) Adds a composable dependency health monitoring system: - types.ts: DependencyHealthStatus, DependencyHealthProbe interfaces with tier (core/channel/integration/infrastructure) and probe mode (active/passive) - registry.ts: Global probe registry with register/unregister/snapshot/refresh APIs - probes/graphiti.ts: Active probe with periodic polling via GraphitiClient.health() - probes/gmail.ts: Passive probe reading Gmail watcher state - probes/channels.ts: Dynamic probe creation per enabled channel plugin - probes/obsidian.ts: Passive probe reading Obsidian vault runtime state - index.ts: Barrel export for all types, registry functions, and probe factories - __tests__/registry.test.ts: 9 unit tests covering full registry lifecycle Design: Probes are lazy-registered, support both sync cached reads (getStatus) and async forced refresh. Active probes can start/stop periodic polling. The registry is a singleton for gateway-wide access.
) - server-startup.ts: Call initDependencyHealthProbes(cfg) after Obsidian init - server-close.ts: Call stopDependencyHealthProbes() on shutdown - commands/health.ts: Add dependencies[] to HealthSummary, populate from probe registry (refresh on active probe, cached read otherwise) Completes the integration started in PR openclaw#382.
…law#387) - Add preserveRunningForJobIds option to recomputeNextRuns() to prevent stuck-run cleanup from clearing running markers on jobs that are still claimed and waiting to execute in the same batch - Fix heartbeat status check: 'error' → 'failed' to match actual API - Add comprehensive regression test suite (10 tests) covering: - Schedule change recalculation - Force mode execution - Isolated job wake time scheduling - allowUnsafeExternalContent persistence on payload patches - Far-future schedule timer delay capping - Hot-loop prevention while run in progress - Manual run skip while timer-triggered run active - wakeMode now → queued heartbeat degradation when busy - Per-job start time and duration for batched jobs - Claimed running markers not cleared mid-batch after long jobs
openclaw#390) * feat: CRN module — ClawdBrain Resource Names with ref kinds and canonicalization Implements the CRN (ClawdBrain Resource Name) system: - crn:{version}:{service}:{scope}:{resource-type}:{resource-id} - Greedy resource-id field (6th colon onward) for embedded colons - Service registry with URL patterns for codex-web, claude-web, github, slack, notion - Bidirectional URL ↔ CRN conversion with round-trip fidelity - EntityRef canonicalization: auto-enriches refs with CRN and resolved URI - Extended RefKind enum with external platform kinds: codex-web:task, claude-web:task, claude-web:project, github:pr, github:issue, github:repo, github:commit, slack:channel, slack:message, notion:page, notion:database 84 tests covering parse, registry, canonicalization, and round-trips. * chore: fixes
Add a new "Debug & Logging" section in the Admin/Power User settings that provides a full UI for tuning openclaw.json logging and debugging configuration. Gated behind Power User Mode. Covers: - Log level / console level / console style selectors - Redact sensitive toggle - Enhanced logging feature toggles (tool errors, perf outliers, etc.) - Performance threshold sliders (tool call, agent turn, gateway, db op) - Token warning threshold sliders - Tool journal config (enable, file path, retention, redaction) - Suppress subsystem debug logs tag list - Channel debug overrides (add/remove with verbose/debug/trace/suppress) - Feature debug overrides (add/remove with verbose/debug/trace/suppress) - Sticky save/reset bar with dirty state tracking https://claude.ai/code/session_011WdpEacHmK1fMQMFiD3Szu Co-authored-by: Claude <[email protected]>
* fix: update Claude task URL format to /code/ path Claude web task URLs use the format https://claude.ai/code/session_{id} rather than https://claude.ai/chat/{id}. Updated the base URL in the canonicalizer, builder, and tests accordingly. * more work queue/work-item changes * CRN: preserve case for external task IDs
…nclaw#391) * Web: enhance Notion connection UX * Web: harden Notion token test
* feat: Graphiti health probe + search-manager test fix - Add periodic Graphiti health probe (configurable interval, 3-failure threshold) - Gate entity-extract and graph writes behind health probe check - Wire probe start/stop into gateway lifecycle - Add healthProbeIntervalMinutes config option to MemoryGraphitiConfig - Fix pre-existing test failure in search-manager.test.ts (ComposableMemoryManager creates new instances each call, so toBe reference check was incorrect) - Add 10 comprehensive tests for health-probe.ts * fix: minor pr comment
…claw#386) * Web: add Obsidian connection setup * Web: align Obsidian REST API defaults
* fix: improve debug logging for Graphiti client and startup service URLs - Add URL to Graphiti client error logs for ingest and search operations - Log configured external service endpoints (Graphiti, Obsidian, QMD) at startup - Helps debug connectivity issues by showing which URLs are being targeted * feat: add Goal Progress Panel to Overseer view New component that provides detailed per-phase progress tracking for goals: - Overall goal completion percentage with animated progress bar - Status distribution visualization (done/in-progress/blocked/pending) - Per-phase collapsible progress bars with stacked status segments - Individual task listing with dependency indicators - Velocity metrics (tasks/day) and estimated time remaining Files added: - ui/src/ui/views/overseer-progress.ts — Goal progress panel component - ui/src/styles/overseer.css — Extracted overseer styles + new progress panel CSS Integration: - Added expandedPhaseIds state + toggleProgressPhase to overseer controller - Wired renderGoalProgress into main overseer view (shows when goal has plan) - Added CSS import to main styles.css
* feat: work queue logging enhancemenets * chore: unused
…hod catalog from handlers (openclaw#392) * Gateway: align overseer methods * Gateway: include overseer goal startedAt
…w#397) The finalizeJobRun function expects startedAtMs in its opts parameter, but ops.ts was passing runAtMs which doesn't exist in the type. This caused the plugin-sdk:dts build step to fail with TS2353.
…w#398) The finalizeJobRun function expects startedAtMs in its opts parameter, but ops.ts was passing runAtMs which doesn't exist in the type. This caused the plugin-sdk:dts build step to fail with TS2353.
…stions, threshold validation, and power-user gating (openclaw#396) * feat: add Debug & Logging config section to Settings UI Add a new "Debug & Logging" section in the Admin/Power User settings that provides a full UI for tuning openclaw.json logging and debugging configuration. Gated behind Power User Mode. Covers: - Log level / console level / console style selectors - Redact sensitive toggle - Enhanced logging feature toggles (tool errors, perf outliers, etc.) - Performance threshold sliders (tool call, agent turn, gateway, db op) - Token warning threshold sliders - Tool journal config (enable, file path, retention, redaction) - Suppress subsystem debug logs tag list - Channel debug overrides (add/remove with verbose/debug/trace/suppress) - Feature debug overrides (add/remove with verbose/debug/trace/suppress) - Sticky save/reset bar with dirty state tracking https://claude.ai/code/session_011WdpEacHmK1fMQMFiD3Szu * fix: address data loss, UX gaps, and missing fields in debug/logging config Fixes: - Preserve ALL config fields on save (file, redactPatterns, journal.toolFilter, enhanced.gatewayHealthSuppressMethods) via index signature and full-object patching — previously saving clobbered unmodeled fields - Fix dead ternary in enhanced logging defaults (both branches were `true`) - Add proper error state when gateway/config fails to load - Add beforeunload guard to prevent losing unsaved changes on navigation - Token threshold cross-validation: prevent warning >= critical with inline error message and disabled save button - Gate "Debug & Logging" nav item behind power user mode in both desktop and mobile navs (was visible to all users before) New config fields exposed: - logging.file (log file path) - logging.redactPatterns (custom regex redaction patterns) - logging.journal.toolFilter (scope journal to specific tools) - logging.enhanced.gatewayHealthSuppressMethods (suppress health logs for specific RPC methods) UX improvements: - Channel autocomplete suggestions from useChannelsStatusFast() gateway data - Feature autocomplete suggestions from known codebase feature IDs - Extracted reusable TagListEditor component for string[] config fields - Quick-add badge chips for one-click channel/feature addition https://claude.ai/code/session_011WdpEacHmK1fMQMFiD3Szu * tests: relax cron timer timezone expectation * Fix journal toggle default and tool filter help text in DebugLoggingSection (openclaw#399) - Default the journal enabled toggle to true (was false), matching the runtime behavior where startJournalSubscriber treats undefined as enabled - Update tool filter help text to reflect actual backend default (DEFAULT_JOURNAL_TOOLS subset) instead of claiming "all tools" - Expand journal sub-settings when enabled field is unset (consistent with the new default-true toggle) https://claude.ai/code/session_011jGYfDDmG4hSUMkct6YsjR Co-authored-by: Claude <[email protected]> --------- Co-authored-by: Claude <[email protected]>
- TelegramRichMessage tool: renders semantic patterns to Telegram HTML + InlineKeyboardMarkup - Supports all 7 patterns: multiple_choice, confirmation, task_proposal, action_items, status, progress, info_grid - TelegramResponseStore: tracks pending interactive requests with timeout handling - 11 tests passing for rich message tool - Response store for shared use by all interactive tools
…eractive tools - AskTelegramConfirmation: Confirm/Cancel inline buttons, blocks until response - Custom labels, primary/danger style, message update after response - 9 tests passing - AskTelegramQuestion: Single-choice and multi-choice inline keyboard - Multi-choice with toggle mode and Done button - Message update to show selected answer - 8 tests passing - Both tools use callback router + response store integration
Owner
Author
|
Content already merged to main — all 3 commits are upstream. Closing. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds the complete Telegram interactive tool suite, mirroring the existing Slack interaction tools:
New MCP Tools
Architecture
Tests
Work Items Addressed
Build: ✅ | Tests: ✅ (36/36 passing)