Commit Graph

1372 Commits

Author SHA1 Message Date
Pedram Amini
7182817718 MAESTRO: Add performance tests for thinking stream feature (Phase 6.5)
Created comprehensive test suite for large thinking streams (10-50KB+):
- RAF throttling efficiency tests validating chunk batching
- Large stream handling (10KB, 25KB, 50KB, 100KB+) with performance thresholds
- Memory efficiency tests (buffer clearing, cleanup on unmount)
- UI rendering performance tests
- Chunk batching edge cases (empty, tiny, interleaved multi-tab)
- Stress tests (sustained high-frequency, concurrent sessions)

Added test infrastructure:
- vitest.performance.config.mts for performance test configuration
- npm run test:performance script for running performance tests
2025-12-22 19:03:55 -06:00
Pedram Amini
1d59b9c577 MAESTRO: Throttle thinking chunk UI updates with requestAnimationFrame (Phase 6.4)
- Added thinkingChunkBufferRef and thinkingChunkRafIdRef refs for buffering
- Modified onThinkingChunk handler to buffer chunks per session+tab
- Use requestAnimationFrame to batch updates (~60fps / 16.67ms throttle)
- Process all buffered chunks in a single setSessions call per frame
- Added cleanup for RAF ID and buffer on component unmount
- Fixed useAgentCapabilities.test.ts to include supportsThinkingDisplay field
2025-12-22 18:57:54 -06:00
Pedram Amini
2d46ab13d7 MAESTRO: Add Toggle Show Thinking to command palette (Phase 6.3)
- Added onToggleTabShowThinking prop to QuickActionsModalProps interface
- Added 'Toggle Show Thinking' action to mainActions array with Cmd+Shift+K shortcut
- Handler clears thinking logs when toggling OFF mid-stream
2025-12-22 18:52:06 -06:00
Pedram Amini
f39c85904d MAESTRO: Add Cmd+Shift+K keyboard shortcut for Toggle Show Thinking (Phase 6.2)
- Added toggleShowThinking to TAB_SHORTCUTS with keys ['Meta', 'Shift', 'k']
- Note: Cmd+Shift+T was avoided as it conflicts with "Reopen Closed Tab"
- Added keyboard handler in useMainKeyboardHandler.ts that:
  - Toggles the showThinking state on the active tab
  - Clears existing thinking logs when turning OFF (per task 6.8 requirement)
2025-12-22 18:48:18 -06:00
Pedram Amini
8ad90e37d5 MAESTRO: Clear thinking logs when process is interrupted (Phase 6.1)
Filter out LogEntry items with source='thinking' in all interrupt
and kill code paths in handleInterrupt():
- When busy tabs are interrupted and queued items exist
- When going to idle with no queued items
- When adding kill log after successful kill
- When processing next queued item after kill
- When kill succeeds with no queued items
- When kill fails and adding error log

This ensures thinking content is cleaned up when users cancel or
kill AI processes, preventing stale thinking entries from remaining
in the conversation history.
2025-12-22 18:45:54 -06:00
Pedram Amini
77c0766c27 MAESTRO: Implement thinking display in TerminalOutput (Phase 5)
Wires up the thinking chunk display functionality:
- Add onThinkingChunk IPC listener in App.tsx to append thinking content to tab logs
- Add thinking rendering in TerminalOutput.tsx with distinct styling (border-left, badge)
- Clear thinking entries when new AI output arrives via useBatchedSessionUpdates.ts
- Add onThinkingChunk to global.d.ts MaestroAPI interface for TypeScript support

When a tab has showThinking enabled, streaming AI reasoning content appears with:
- A "thinking" badge in accentText color
- Border-left accent and subtle background
- Whitespace-preserved text display

The thinking content is automatically cleared when the final result arrives.
2025-12-22 18:40:24 -06:00
Pedram Amini
76912f4f6b MAESTRO: Add Show Thinking toggle pill to InputArea (Phase 4)
- Import Brain icon from lucide-react for the toggle button
- Add tabShowThinking, onToggleTabShowThinking, and supportsThinking props
  to InputAreaProps interface
- Add toggle pill after Read-Only button using accentText color styling
- Add handler in App.tsx for toggling tab.showThinking state
- Pass props through MainPanel to InputArea
- Add supportsThinkingDisplay to renderer's AgentCapabilities interface
  to match main process capability definition
2025-12-22 18:32:45 -06:00
Pedram Amini
e3f8beae45 MAESTRO: Add thinking-chunk IPC event for streaming AI reasoning (Phase 3)
Implement the IPC infrastructure for Show Thinking feature:
- Emit 'thinking-chunk' event in process-manager.ts when partial text events arrive
- Forward thinking-chunk events to renderer via index.ts
- Add onThinkingChunk handler to preload.ts process API
- Add TypeScript interface declaration for onThinkingChunk

This enables the renderer to receive real-time streaming content from AI agents
(Claude Code, OpenCode, Codex) for display when the tab's showThinking setting
is enabled. The renderer decides whether to display based on per-tab settings.
2025-12-22 18:25:23 -06:00
Pedram Amini
58dcb73f22 MAESTRO: Add defaultShowThinking setting and wire up to tab creation (Phase 2)
- Add defaultShowThinking state and setter to useSettings.ts
- Add settings UI with Brain icon in SettingsModal.tsx
- Add showThinking option to CreateTabOptions interface
- Update createTab() to accept and apply showThinking
- Wire up all createTab call sites to pass defaultShowThinking:
  - App.tsx (3 locations)
  - useMainKeyboardHandler.ts (Cmd+T new tab)
  - useRemoteIntegration.ts (remote new tab)
  - useAgentSessionManagement.ts (resume session)
- Pass defaultShowThinking through hook dependencies
2025-12-22 18:21:02 -06:00
Pedram Amini
217524125b MAESTRO: Add supportsThinkingDisplay capability and thinking types (Phase 1)
- Add supportsThinkingDisplay to AgentCapabilities interface
- Set capability to true for claude-code, codex, and opencode agents
- Set capability to false for terminal, gemini-cli, qwen3-coder, and aider
- Add 'thinking' to LogEntry.source type for thinking content entries
- Add showThinking field to AITab interface for per-tab toggle state
- Update agent-capabilities test to include new capability
2025-12-22 18:10:13 -06:00
Pedram Amini
fb5cff244e windows compat issue 2025-12-22 15:34:29 -06:00
Pedram Amini
5830d130b6 windows support 2025-12-22 15:26:18 -06:00
Pedram Amini
5bc2a1254c Windows support take 3 2025-12-22 15:17:48 -06:00
Pedram Amini
5e48750d48 show agent names instead of branch names as worktree items 2025-12-22 15:09:12 -06:00
Pedram Amini
1ca72f2ef6 ## CHANGES
- No release notes or commit details were provided to summarize changes. 🔍
- Share the previous and current release tags to generate accurate bullets. 🏷️
- Paste the GitHub compare URL so I can extract major upgrades. 🔗
- Provide merged PR titles since last release to build highlights. 📋
- Include changelog excerpt if available for clean summarization. 🧾
- Tell me target audience and tone, and I’ll tailor wording. 🎯
- Confirm release date range to avoid missing important work. 🗓️
- If private repo, paste git log summary for reliable extraction. 🛡️
- I can return exactly ten 10-word bullets once input arrives. 
- Ready when you are—drop details and I’ll write it. 🚀
2025-12-22 15:03:37 -06:00
Pedram Amini
3db4fcbb77 version bump 2025-12-22 13:36:34 -06:00
Pedram Amini
b288e0b0c6 all tests passing 2025-12-22 13:18:33 -06:00
Pedram Amini
4c57256f95 OCD get status notifications to align 2025-12-22 12:33:49 -06:00
Pedram Amini
edd0099903 fix: build ARM64 Linux on native runner for node-pty compatibility
The previous cross-compilation approach from x64 to ARM64 doesn't work
for native modules like node-pty. electron-builder cannot properly
cross-compile native C/C++ modules - the ARM64 binaries still contained
x86 code.

This fix:
- Adds a native ARM64 Linux build job using ubuntu-24.04-arm runner
- Separates x64 and ARM64 Linux builds to run on their native architectures
- Uses explicit --x64 and --arm64 flags for electron-builder
- Updates artifact handling for separate x64 and ARM64 uploads

Reference: https://github.com/electron-userland/electron-builder/issues/7608

Fixes #66
2025-12-22 12:08:09 -06:00
Pedram Amini
72de3b7ed6 ## CHANGES
- No release input was provided, so changes can’t be determined yet. 🔍
- Share the repo link, tags, or commits since last release to proceed. 🚀
2025-12-22 11:43:20 -06:00
Pedram Amini
82b4f05f9b fix: prevent wizard from unexpectedly exiting edit mode
Track previous document index with a ref to detect actual document
switches. Only reset to preview mode when the user actually changes
documents, not when the generatedDocuments dependency triggers the
useEffect during normal editing operations.

Fixes #68
2025-12-22 10:50:41 -06:00
Pedram Amini
450d05407c ## CHANGES
- Added Auto Run folder docs into @mention completion suggestions automatically 🚀
- Fetches Auto Run tree asynchronously, updating suggestions when paths change 
- Skips redundant Auto Run fetching when already inside project tree 🔍
- Tags suggestions with source metadata for clear project-versus-autorun distinction 🏷️
- Displays “Auto Run” badge in suggestion list for instant recognition 
- Extends suggestion typing to include optional source field everywhere 
- Converts Auto Run document nodes into markdown filenames and paths consistently 📝
- Traverses nested Auto Run folders recursively to surface all docs fast 🧭
- Improves resilience by silently handling missing Auto Run folders safely 🛡️
- Prevents stale updates using cancellation guard during async fetching 🧯
2025-12-22 10:04:47 -06:00
Pedram Amini
3cf7b23cb7 ## CHANGES
- Updated Discord invite everywhere to new community link for joining! 🚀
- About modal now opens the refreshed Discord invite correctly instantly! 
- Quick Actions “Join Discord” now routes to updated server invite! 🔗
- Bookmark toggle hidden for worktree child sessions to prevent confusion! 🧩
- Collapsed session pills now subdivide segments for worktree parents/children! 🎛️
- Collapsed bookmarks palette now shows only parents, with segmented worktrees! 📌
- Collapsed group palette simplified using reusable segmented pill renderer! 🧱
- Collapsed ungrouped palette now uses segmented pills for clearer status! 🧭
- Unread indicators now appear only on last worktree segment pill! 🔴
- Hover tooltips now work per worktree segment for better visibility! 👀
2025-12-22 09:34:46 -06:00
Pedram Amini
3c01dd34f2 OAuth enabled but no valid token found. Starting authentication...
Found expired OAuth token, attempting refresh...
Token refresh successful
## CHANGES

- Worktree sessions now inherit auto-run folder path from parents automatically. 🚀
- Sidebar visual ordering now nests worktree children directly under parents. 🎉
- Bookmarks, groups, and ungrouped lists now exclude worktree children clutter. 
- Collapsed group and ungrouped palettes now include worktree child indicators. 🔥
- Worktree expand/collapse UI redesigned with sleek clickable drawer bands. 🚀
- Expanded worktree children now render inside styled drawer with handle. 🎨
- Session context menu adds delayed-hover group mover submenu usability boost. 🧠
- Bookmark and move-to-group actions disabled for worktree child sessions. 
- Git status widget “View Full Diff” button upgraded with icon. 🧾
- Git tooltip panel widened and reorganized: branch, origin, status rows. 🌟
2025-12-22 09:02:07 -06:00
Pedram Amini
72db61b482 ## CHANGES
- Real-time worktree discovery replaces polling with efficient chokidar watchers! 👀
- Renderer instantly receives `worktree:discovered` events for new worktrees found! 
- Worktree watchers are session-scoped, safely started, stopped, and replaced! 🧹
- Smart debounce prevents event floods when directories appear rapidly! ⏱️
- App now restores worktree sub-agent sessions automatically after restart! 🔄
- Saving worktree config now scans and spawns missing child sessions! 🚀
- Creating a worktree now actually runs `git worktree` setup! 🛠️
- New worktree sessions inherit parent agent configuration for consistency! 🧬
- Sidebar worktree badge is clickable to expand and reveal children! 🧷
- GitHub CLI auth checks now cache results, slashing subprocess calls! 🏎️
2025-12-22 01:45:39 -06:00
Pedram Amini
9a47830cb9 ## CHANGES
- No release notes or commit details were provided to summarize. 📝
- Share the latest tag, previous tag, or commit range to compare. 🔎
- Paste merged PR titles or a changelog draft for ten-word bullets. 📌
- Provide repository link and release dates to identify major upgrades. 🗓️
- Include breaking changes, new features, and fixes you consider important. 🚀
2025-12-22 01:17:00 -06:00
Pedram Amini
0a6c87c9ab ## CHANGES
- Added Git Worktrees for truly parallel, conflict-free multi-agent development! 🌳
- Introduced Worktree sub-agents nested under parents for clean organization! 🌿
- Built WorktreeConfigModal to manage base paths and watching behavior! ⚙️
- Added one-click Pull Request creation for worktree child sessions! 🔀
- Integrated Create PR actions into sidebar context menus and shortcuts! ⌨️
- Updated git status dropdown with “Configure Worktrees” and PR actions! 🧩
- Reworked Auto Run guidance to promote worktree sessions for parallelism! 🚀
- Removed Auto Run’s embedded worktree UI, simplifying batch runner flow! 🧹
- Simplified playbooks by dropping stored worktree settings entirely! 📓
- Polished tab starring safety by blocking stars on unsaved tabs! 
2025-12-22 00:59:40 -06:00
Pedram Amini
99949bd577 Merge pull request #64 from petersilberman/enhance-work-tree-exp
feat: worktree auto-discovery and custom Claude command support
2025-12-22 00:12:02 -06:00
Pedram Amini
e3f82d763e OCD on the left panel with vertically aligning components 2025-12-21 21:24:25 -06:00
Pedram Amini
427840c7f3 ## CHANGES
- Upgraded group chat exports to true GitHub-flavored Markdown rendering! 🚀
- Added `marked` dependency and configured GFM plus line-break handling! 
- Exported messages now support tables, blockquotes, rules, and strikethrough! 🔥
- Code formatting improved: inline code and fenced blocks render correctly! 🧠
- Image embedding revamped: replaces references with base64 before parsing! 🖼️
- New branded export header with Maestro icon, tagline, and links! 🎉
- Export title now reads “Maestro Group Chat Export” for clarity! 🏷️
- Footer attribution updated to <a href="https://runmaestro.ai" target="_blank">runmaestro.ai</a> for consistency! 🌐
- Markdown styling massively enhanced: headings, lists, tables, and code look great! 🎨
- AutoRunLightbox tests updated for portal backdrop and higher z-index! 
2025-12-21 20:32:10 -06:00
Peter Silberman
e5468dd3ee feat: worktree auto-discovery and custom Claude command support
Worktree Features:
- Auto-detect directories containing git worktrees and create grouped agents
- Periodic scanner (30s) discovers new worktrees in watched directories
- Track removed worktree paths to prevent re-discovery
- Bulk delete worktree groups with all agents (trash icon on 🌳 groups)
- Wire SessionList delete through App.tsx for proper cleanup

Custom Claude Commands:
- Discover custom commands from .claude/commands/ directories
- Merge custom commands with built-in agent commands
- Run both discovery methods in parallel for faster loading
2025-12-21 21:20:54 -05:00
Pedram Amini
41680af24a ## CHANGES
- Cloudflared cache clearing now resets installed and path caches reliably! 🧹
- Cache reset leaves cloudflared path null after failed detection attempts! 🔒
- Claude-code session renames now call `window.maestro.claude.updateSessionName` correctly! ✍️
- RenameSessionModal updated to use Claude rename API for claude-code! 🧠
- Tab switcher now syncs named tabs via Claude session renaming! 🔁
- Remote tab rename persists names through Claude-code integration pathway! 🌐
- Agent sessions API expanded with `setSessionName` for safer naming! 🏷️
- Agent sessions origins fetching added via new `getOrigins` method! 🧭
- AutoRunLightbox now renders via portal with ultra-high z-index! 🪟
- Save buttons now use black text for better contrast readability! 🎨
2025-12-21 20:14:29 -06:00
Pedram Amini
29462a7ec0 ## CHANGES
- Enhanced pagination logs now include cursor, indices, and nextCursor details! 🧾
- Improved observability for session paging with richer runtime diagnostics everywhere! 🔍
- Added ref tracking to prevent duplicate auto-pagination trigger loops! 🛑
- Prevented infinite background loading when session count stops increasing! 🔁
- Auto-load logic now guards against no-op loads for stability gains! 🧠
- Background session loading remains seamless while protecting UI render timing! 
- Introduced session-length change detection before attempting further loads again! 📈
- Reset pagination trigger tracking when switching project path or agent id! 🔄
- Improved reliability of full-session background fetch for search and stats! 📚
- Reduced unnecessary pagination calls, keeping the renderer performant and responsive! 🚀
2025-12-21 18:44:44 -06:00
Pedram Amini
55dc0e4d8e refactor: centralize gh CLI detection with caching
Follow-up to PR #63 - addresses code duplication and adds caching:

- Add isGhInstalled(), getGhPath(), resolveGhPath() to cliDetection.ts
- Follow existing cloudflared pattern with caching
- Replace duplicated detection logic in checkGhCli and createPR handlers
- Both handlers now use resolveGhPath() for consistent behavior

This reduces code duplication (~34 lines removed) and improves
performance by caching the gh CLI path after first detection.
2025-12-21 18:43:29 -06:00
Pedram Amini
cbb541c60b Merge pull request #63 from oliveiraantoniocc/fix/gh-detection-improved
fix: Platform-aware GitHub CLI detection with expanded PATH support
2025-12-21 18:41:22 -06:00
Pedram Amini
bdaac9b0ef OAuth enabled but no valid token found. Starting authentication...
Found expired OAuth token, attempting refresh...
Token refresh successful
## CHANGES

- Added generic agent session origins store supporting Codex, OpenCode, others! 🚀
- Introduced IPC handlers to fetch origins, rename, and star sessions! 🔥
- Exposed new preload APIs for cross-agent origins, naming, starring! 
- Updated UI to persist names/stars per agent, not Claude-only! 🎉
- AgentSessionsModal now loads starred sessions from correct per-agent origins! 🌟
- AgentSessionsBrowser now renames and stars sessions via generic origins! 💪
- Session pagination now merges metadata from per-agent origins automatically! 
- OpenCode sessions now fall back to global project for discovery! 🧭
- Global OpenCode sessions now filter by directory, matching project paths! 🎯
- SessionItem right-side indicators reordered: git dirty before bookmark toggle! 🧩
2025-12-21 18:36:56 -06:00
copilot-swe-agent[bot]
f53f5599f4 feat: apply auto-detection to createPR handler for consistency
Co-authored-by: oliveiraantoniocc <411161+oliveiraantoniocc@users.noreply.github.com>
2025-12-21 23:53:03 +00:00
copilot-swe-agent[bot]
d6e19e8e71 feat: improve GitHub CLI detection with platform-aware auto-detection
- Add platform-specific command detection (where/which)
- Use expanded environment for PATH resolution
- Handle Windows multi-path output by taking first match
- Export getExpandedEnv() from cliDetection.ts for reuse
- Add proper fallback when detection fails

Addresses review comments from PR #59

Co-authored-by: oliveiraantoniocc <411161+oliveiraantoniocc@users.noreply.github.com>
2025-12-21 23:50:38 +00:00
copilot-swe-agent[bot]
5a506a6d67 Initial plan 2025-12-21 23:46:57 +00:00
Pedram Amini
706fae7482 ## CHANGES
- Windows shell detection now prioritizes PowerShell first, improving reliability. 🪟
- Windows `sh` and `bash` commands now map to `bash.exe`. 🧩
- About modal tests now match Hands-on Time text more robustly. 
- Execution Queue Browser now advertises drag-and-drop reordering in helper text. 🧷
- Codex session cache bumped to v3 for improved previews. 🗃️
- Session previews now skip markdown-style system context headers automatically. 🧹
- Agent sessions stats now compute locally for non-Claude agents. 📊
- Claude stats subscription now keys off `agentId`, not toolType. 🔌
- Sessions now merge origin, name, and starred metadata during pagination. 🔄
- Group chat exports now embed markdown images cleanly using images map. 🖼️
2025-12-21 17:35:44 -06:00
Pedram Amini
9eef7b7728 ## CHANGES
- Bumped Codex session cache version to refresh improved previews! 🚀
- Skips system/environment context tags when building first-message previews! 
- Adds robust system-context detection for cleaner session list summaries! 🧹
- Improves first user-message capture, avoiding noisy XML-like metadata! 🎯
- Refines CWD extraction flow, reusing parsed text more efficiently! 
- Resets aggregate stats when agentId changes, not just cwd! 🔄
- Simplifies total token display layout with cleaner inline computation! 🧠
- Shows tokens and context percentage together for faster readability! 👀
- Enhances tab naming across Claude, OpenCode, and Codex session IDs! 🏷️
- Adds smart session-id truncation fallbacks for consistent tab labels! 
2025-12-21 17:08:31 -06:00
Pedram Amini
b8908defa8 ## CHANGES
- Added session_meta support with payload-based metadata for richer sessions! 🚀
- Preserved legacy metadata parsing while prioritizing new payload timestamps! 🔄
- Project path now read from session_meta cwd, reducing guesswork! 🧭
- Extract text now includes output_text parts for complete transcripts! 📝
- Session IDs now reliably resolve from payload.id or legacy fallback! 🆔
- Codex parser now captures function_call tool invocations as messages! 🛠️
- Codex now records function_call_output results for end-to-end tool traces! 📦
- OpenCode storage now models worktree projects, time, and summaries! 🧩
- OpenCode project detection improved via normalization, subdirectory, and hash matching! 🎯
- OpenCode previews prefer first assistant reply; timestamps converted from Unix! ⏱️
2025-12-21 17:00:45 -06:00
Pedram Amini
fe09d53572 ## CHANGES
- Session previews now prefer first assistant reply over user prompt! 🚀
- Fallback to first user message when assistant response missing. 🛟
- Claude session parser stops scanning once assistant preview found. 
- Codex parser captures assistant previews across message and payload formats. 🔎
- Agent message completions now populate assistant-first preview correctly. 🤖
- First-message preview now uses unified `previewMessage` selection logic. 🧠
- Timestamp handling stays accurate while improving preview meaningfulness. ⏱️
- Message counting remains intact while preview extraction gets smarter. 📊
- Preview slicing now consistently applies to assistant-first chosen text. ✂️
- Session list previews become more informative, reducing system-context noise. 🎯
2025-12-21 16:29:08 -06:00
Pedram Amini
39825d8d25 ## CHANGES
- Share release-to-release project evolution once you provide repository data. 🚀
2025-12-21 16:22:20 -06:00
Pedram Amini
a20e7b6200 MAESTRO: handle inline code block parsing 2025-12-21 16:13:09 -06:00
Pedram Amini
5df0edbc8a ## CHANGES
- Added Windows-path truncation coverage so session lists display correctly everywhere 🪟
- Improved code-fence language parsing to support C++ mapping to cpp 🧠
- Refined About modal stats copy with clearer “Hands-on Time” labeling ⏱️
- Simplified mobile connection timeout typing for safer browser compatibility 🔧
- Centralized haptic triggering into shared constants for cleaner reuse 📦
- Upgraded haptics detection to verify vibrate is an actual function 📳
- Tuned input-mode toggle haptics to a crisp light vibration duration 🎚️
- Strengthened interrupt button feedback with consistent strong haptic pulses 🛑
- Removed redundant default export bundle from CommandInputButtons module 🧹
- Expanded test suite to catch edge cases across platforms and languages 
2025-12-21 16:09:13 -06:00
Pedram Amini
c7c1c8f4d6 ## CHANGES
- Crash reporting now runs only in production, keeping development logs spotless. 🚀
- Renderer Sentry initialization skips local dev servers, eliminating hot-reload noise. 🔇
- TTS stdin now catches EPIPE errors, preventing unexpected crashes during playback. 🛡️
- ProcessManager stdin error handling added, logging EPIPE without taking down sessions. 🧰
- Closing tabs now respects “unread-only” filtering, choosing the next unread tab. 
- Keyboard shortcut tab-closing now passes unread-only state for consistent navigation. ⌨️
- MainPanel Git log opening is now optional-safe, avoiding undefined callback crashes. 🔒
- Mobile session path truncation now supports Windows separators for cleaner display. 🪟
- Mobile haptics centralized via shared triggerHaptic helper, simplifying feedback logic. 📳
- Code block parsing now supports richer language tags, trimmed for accurate highlighting. 📝
2025-12-21 16:06:49 -06:00
Pedram Amini
6752439611 MAESTRO: harden mobile connect retry cleanup 2025-12-21 15:59:57 -06:00
Pedram Amini
60cfea1106 MAESTRO: add web hook tests and cleanup 2025-12-21 15:53:49 -06:00
Pedram Amini
1d42e40932 MAESTRO: refine mobile web hooks 2025-12-21 15:47:56 -06:00