feat(goals): Wire Goals/Overseer with real data + inline editing#23
Closed
feat(goals): Wire Goals/Overseer with real data + inline editing#23
Conversation
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.
…nclaw#211) * [autodev] Command Palette: Add nested sub-command menus and category filtering Task 1 - Nested/sub-command menus: - Replaced single page state with a page stack (PageEntry[]) for arbitrary nesting depth - Added per-agent sub-menus: Agents > {AgentName} > View Details/Chat/Sessions/Edit Config - Multi-level breadcrumb navigation with clickable intermediate crumbs - Back navigation via Backspace (empty search) or clicking breadcrumb entries - Agent sub-pages show agent info (role, status, current task) Task 2 - Category filtering in search: - Added filter chips bar that appears when searching on root page - Categories: All, Quick Actions, Navigation, Agents, Appearance, Settings - Active filter highlighted with primary color, dismissible via X button - When filtering, shows all items in that category (not just top 3/5) - Appearance and Settings items surface in search results when filtering * [autodev] Mark command palette nested menus and category filtering as complete
…aw#212) * [autodev] Add progress indicators for long-running operations New components: - useAsyncOperation hook: State machine (idle → running → success/error) with progress tracking, auto-reset, and callbacks - OperationProgress component: Visual indicator with three variants (inline, banner, compact) showing progress bar, step info, error/retry Features: - Step-by-step progress reporting (current/total/message/percent) - Indeterminate progress bar for operations without step count - Auto-reset to idle after configurable timeout - Error state with retry button - Success state with dismiss option - Three display variants: inline (card), banner (full-width), compact (single-line) Test coverage: 10 tests (all passing) covering state transitions, progress tracking, auto-reset, callbacks, error handling Barrel exports added to composed/index.ts and hooks/index.ts * [autodev] Mark progress indicators task as complete
- Gap 1 (HIGH): Add streaming block replies during the event loop via blockReplyBreak/blockReplyChunking params. Supports "message_end" (flush at message boundaries) and "text_end" (per-chunk) modes, matching Pi embedded's streaming delivery. Final onBlockReply is skipped when streaming was active to avoid duplicate delivery. - Gap 2 (MEDIUM): Add onReasoningStream callback support. Extract thinking/reasoning text from SDK events classified as "system" and emit via the new callback, enabling reasoning display in UIs. - Gap 3 (MEDIUM): Reset chunks/assistantSoFar at message boundaries so onPartialReply reflects only the current message, not accumulated text from all prior turns. - Gap 5 (LOW-MED): Add enforceFinalTag support. When enabled, only content inside <final>...</final> tags is returned, preventing intermediate narration leakage from non-Claude models. Adds shared extractFinalTagContent() utility. - Gap 6 (LOW-MED): Map all payload fields (mediaUrl, mediaUrls, replyToId, replyToTag, replyToCurrent, audioAsVoice) in adaptSdkResultToPiResult to prevent silent field loss. Wire all new params through the full chain: executor.ts → AgentRuntimeRunParams → sdk-agent-runtime → sdk-runner-adapter → sdk-runner https://claude.ai/code/session_013FRzxnpzCwncubghL7GGCF
…-processing-djLHt
Resolve merge conflicts in meridia scoring module by taking origin/main's refactored multi-factor scoring system (scorer.ts, defaults.ts, updated types/factors/index). Remove HEAD-only scoring/config.ts and scoring.test.ts that used the old API (origin/main has proper tests in factors.test.ts and scorer.test.ts). Co-Authored-By: Claude Opus 4.6 <[email protected]>
…cron types (openclaw#217) - 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]>
* feat: event system for meridia * fix: archive buffered moments after session summary to prevent inflation Buffered moments were never transitioned after being consumed by session-capture, causing them to be re-counted on every subsequent /new command. Now transitions them to 'archived' after saving the summary. Co-Authored-By: Claude Opus 4.6 <[email protected]> --------- Co-authored-by: Claude Opus 4.6 <[email protected]>
* feat: add configurable subsystem debug log suppression * docs: add changelog entry and test script for suppressSubsystemDebugLogs * docs: add implementation summary * feat(meridia): multi-factor memory relevance scoring system 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) * SDK runner: close message processing parity gaps with Pi embedded agent - Gap 1 (HIGH): Add streaming block replies during the event loop via blockReplyBreak/blockReplyChunking params. Supports "message_end" (flush at message boundaries) and "text_end" (per-chunk) modes, matching Pi embedded's streaming delivery. Final onBlockReply is skipped when streaming was active to avoid duplicate delivery. - Gap 2 (MEDIUM): Add onReasoningStream callback support. Extract thinking/reasoning text from SDK events classified as "system" and emit via the new callback, enabling reasoning display in UIs. - Gap 3 (MEDIUM): Reset chunks/assistantSoFar at message boundaries so onPartialReply reflects only the current message, not accumulated text from all prior turns. - Gap 5 (LOW-MED): Add enforceFinalTag support. When enabled, only content inside <final>...</final> tags is returned, preventing intermediate narration leakage from non-Claude models. Adds shared extractFinalTagContent() utility. - Gap 6 (LOW-MED): Map all payload fields (mediaUrl, mediaUrls, replyToId, replyToTag, replyToCurrent, audioAsVoice) in adaptSdkResultToPiResult to prevent silent field loss. Wire all new params through the full chain: executor.ts → AgentRuntimeRunParams → sdk-agent-runtime → sdk-runner-adapter → sdk-runner https://claude.ai/code/session_013FRzxnpzCwncubghL7GGCF * additional merge conflict resolution --------- Co-authored-by: Claude <[email protected]>
* feat: meridian memory clasiffication * fix: minor safety check around config missing
…ross 13 files) (openclaw#207) Cover all new V2 modules: event normalizer, gates/budget, sanitize/redact, phenomenology (taxonomy, prompt, heuristic), artifacts collector, kit builder and resolver, retrieve (intent, ranker, vector-adapter), reconstitution pack-builder, and fanout dispatcher. Export renderKit from resolver for testability. https://claude.ai/code/session_01Ko4xrCYytJBNW5VAxzfemE Co-authored-by: Claude <[email protected]>
…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]>
* worker fixes * feat(web): add Playwright test mode to bypass auth guards - Add VITE_PLAYWRIGHT_TEST_MODE env var to disable all auth - Create isPlaywrightTestMode() utility in src/lib/test-mode.ts - Bypass GatewayAuthGuard, OnboardingGuard, UnlockGuard in test mode - SecurityProvider returns always-unlocked state in test mode - Skip gateway auto-connect in test mode (main.tsx) - Root layout renders with AppShell but skips all guard wrappers - Add visual '🎭 Playwright Test Mode' banner when active - Add dev:test and dev:playwright npm scripts - Add .env.playwright config file Usage: pnpm dev:playwright # or VITE_PLAYWRIGHT_TEST_MODE=true pnpm dev
* 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]> * feat(browser): persist Playwright storageState across context resets When the CDP connection drops and a new browser context is created, cookies and localStorage were lost because browser.newContext() starts fresh. This adds storageState persistence so auth sessions survive reconnections: - Save/restore storageState (cookies + localStorage) to a JSON file inside each profile's user-data directory - Auto-save storageState on browser disconnect (best-effort) - Load saved storageState when creating a new context (fallback path) - New HTTP endpoints: POST /storage-state/save and /storage-state/restore - Register storageState path per profile on ensureBrowserAvailable https://claude.ai/code/session_01FXjaQLR6ZDroPgPiK2TrL3 * feat(browser): import cookies from user's real Chrome profile Adds the ability to import cookies from the user's installed Chrome, Chromium, or Brave browser into the Playwright-managed browser context. This lets you reuse existing web logins (ChatGPT, GitHub, etc.) without re-authenticating, proving out the value of cookie persistence. Implementation: - chrome-cookie-import.ts: reads Chrome's SQLite cookie DB via node:sqlite, decrypts v10/v11 cookies on Linux (PBKDF2 "peanuts") and macOS (Keychain), filters by domain, skips expired cookies - GET /chrome-profiles: discover installed Chrome profiles - POST /import-chrome-cookies: import cookies into current Playwright context with optional domain filtering (e.g. ["chatgpt.com", "openai.com"]) Example usage: POST /import-chrome-cookies { "domains": ["chatgpt.com", "auth0.com", "openai.com"] } https://claude.ai/code/session_01FXjaQLR6ZDroPgPiK2TrL3 --------- Co-authored-by: Claude <[email protected]>
* feat(telegram): add TelegramRichMessage MCP tool + response store - 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 * feat(telegram): add AskTelegramConfirmation + AskTelegramQuestion interactive 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 * feat(telegram): add AskTelegramForm conversational multi-step form tool
…error handling
Phase 3: Config & Wiring
- Add NotionConfig types to src/config/types.notion.ts
- NotionWebhookConfig: webhook.enabled, webhook.secret, webhook.path
- NotionToolsConfig: tools.enabled, tools.apiKey
- NotionConfig: botId, webhook, tools
- Add notion field to OpenClawConfig
- Create src/gateway/notion-wiring.ts — gateway integration module:
- resolveNotionConfig(): Reads config + env vars (NOTION_API_KEY,
NOTION_WEBHOOK_SECRET, NOTION_BOT_ID) with fallbacks
- setupNotionWebhook(): Registers /webhooks/notion HTTP route via
plugin registry with event router for memory ingest / session wake
- setupNotionTools(): Creates 7 Notion agent tools
- setupNotion(): One-call combined setup for gateway startup
- Auto-enable: webhook enables when secret exists, tools enable when
API key exists
Fix: Tool error handling
- Wrap all 7 tool execute functions in try/catch at the top level so
readStringParam throws (required params) are caught and returned as
jsonResult({ error }) instead of propagating as uncaught exceptions
Docs: NOTION-BIDIRECTIONAL-WEBHOOK-SETUP.md
- Complete setup guide covering integration creation, config, env vars,
webhook subscription, architecture, event types, security, and
troubleshooting
Tests: 65 tests passing (17 new wiring tests + 48 existing)
- Add audit log toggle button in Overseer header actions - Wire renderAuditLog component into overseer.ts with proper props - Add OverseerProps: auditLogState, showAuditLog, filter/expand handlers - Add comprehensive CSS for audit log: timeline, filters, badges, events - Responsive design for mobile with light theme support - Event timeline with color-coded dots, badges, expandable JSON data - Time range, event type, goal, and search filters
Both files had uncommitted debug log statements referencing 'log' without importing createSubsystemLogger. This broke the DTS build (build:plugin-sdk:dts step).
…nto Overseer view
…openclaw#407) - Created shared utility ui/src/ui/utils/optimistic.ts with: - optimistic() helper for apply/rollback/mutate/refresh pattern - snapshot() helper for shallow state cloning - Automatic error toast on API failure via existing toast system - Sessions controller (ui/src/ui/controllers/sessions.ts): - deleteSession: immediately removes session from list, rollback on error - abortSession: immediately shows abortedLastRun=true state - abortAllSessions: marks all active sessions as aborting - abortSessionsForAgent: marks agent sessions as aborting - All operations rollback to snapshot on API error with toast - Cron controller (ui/src/ui/controllers/cron.ts): - toggleCronJob: immediately toggles enabled state in UI - removeCronJob: immediately removes job from list and clears runs - Both rollback to snapshot on API error with toast - Updated BACKLOG.md to mark task complete Closes P3 backlog item: Implement optimistic UI updates
openclaw#408) Apply the optimistic UI update pattern (from optimistic.ts utility) to the automations and skills controllers. Actions like toggle-suspend, delete, enable/disable now provide instant visual feedback with automatic rollback on API failure.
- Add updateGoal API call to overseer.ts (overseer.goal.update RPC) - Wire useUpdateGoal mutation to real gateway API with optimistic updates - Add successCriteria and constraints fields to Goal/OverseerGoal types - Create GoalInlineEditor component with InlineTextField and InlineListField - Update GoalDetailPanel with inline editing for title, description, success criteria, and constraints - Remove old Edit Goal button in favor of click-to-edit inline UX - Map successCriteria/constraints from gateway goal detail response Closes: apps/web P1 Goals/Overseer wiring work item
Owner
Author
|
Already merged as PR openclaw#409 on main. Closing duplicate. |
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
Wire the Goals/Overseer page in apps/web to real gateway data and add inline editing capabilities.
Changes
API Layer (
lib/api/overseer.ts):updateGoal()function callingoverseer.goal.updateRPCOverseerGoalUpdateParamsinterfaceOverseerGoaltype withsuccessCriteriaandconstraintsfieldsMutation Hooks (
hooks/mutations/useGoalMutations.ts):useUpdateGoalwith real implementationNew Component (
GoalInlineEditor.tsx):InlineTextField— Click-to-edit text fieldsInlineListField— Click-to-edit ordered list with add/removeGoalDetailPanel updates:
Work Item
Closes: apps/web P1: Wire Goals/Overseer (56c39afc)