Commit Graph
110 Commits
Author SHA1 Message Date
Luciano Castillo eabebfd761 support ALLOWED_HOSTS env var, fix Dockerfile missing source files (#12)
- parse ALLOWED_HOSTS into vite server.allowedHosts for LAN/tailscale access
- copy src/, public/, vite.config.ts, tsconfig.json into Docker runtime stage
  (dev server needs these, only dist/ was copied before)
- pass ALLOWED_HOSTS through docker-compose

Ref #10
2026-01-28 12:21:06 -05:00
Luciano Castillo 80c28485f5 feat(monitor): exec events visualization + hierarchical spawn layout (#14)
Merging select features from https://github.com/luccast/crabwalk/pull/11 

* feat(exec-events): bead-1 - add exec protocol and monitor types

* feat(exec-events): bead-2 - parse exec started output completed

* feat(exec-events): bead-3 - add exec collection and aggregation

* feat(exec-events): bead-4 - persist exec events

* feat(exec-events): bead-5 - hydrate exec events after actions

* feat(exec-events): bead-6 - emit exec events in subscription

* feat(exec-events): bead-7 - wire exec events into monitor route

* feat(exec-events): bead-8 - add exec node component

* feat(exec-events): bead-9 - render exec nodes under sessions

* feat(exec-events): bead-10 - final validation and hydrate exec-only data

* fix(parser): remove incorrect sessionKey assignment

* feat(monitor): link subagents to parent sessions via spawnedBy, add timestamps to session nodes

* feat(monitor): add clear completed execs button

- Add clearCompletedExecs() to remove completed/failed execs
- Add getCompletedExecCount() for UI badge count
- Add clearInactiveSessions() for optional inactive session cleanup
- Add "Clear Completed" button in monitor header with badge count
- Button only shows when there are clearable items
- Add keyboard shortcut: Ctrl+K / Cmd+K to clear
- Add vitest test infrastructure with 8 tests covering:
  - Clearing completed execs
  - Clearing failed execs
  - Preserving running execs
  - Counting clearable items
  - Clearing inactive sessions by threshold

* feat(monitor): add copy PID button to ExecNode header

- Copy icon positioned left of status indicator
- Click copies PID to clipboard
- Animated feedback: copy → checkmark for 1.5s
- stopPropagation prevents expand/collapse on click

* feat(monitor): add copy session key button to SessionNode header

- Copy icon positioned left of status indicator
- Click copies full session key to clipboard
- Animated feedback: copy → checkmark for 1.5s
- stopPropagation prevents node selection interference

* feat(ui): horizontal spawn layout for action graph

- Redesigned graph layout algorithm for horizontal spawn positioning
- Sessions arranged in columns (X = spawn depth hierarchy)
- Events within a session flow DOWN vertically (Y = time progression)
- Child sessions appear to the RIGHT at the Y-level where spawned
- Added left/right handles on SessionNode for horizontal spawn edges
- Smoothstep edges connect parent → child sessions horizontally
- Collision avoidance for multiple sessions at same depth
- Orphan nodes (without session) get positioned in separate area
- Compact action nodes (180x80) vs larger session/exec nodes

* fix(ui): improve graph spacing and alignment

- Increase COLUMN_GAP from 300 to 400 for wider horizontal separation
- Increase ROW_GAP from 40 to 80 for more vertical breathing room
- Enlarge NODE_DIMENSIONS for better layout calculations
- Add MIN_SESSION_GAP (120px) for collision avoidance
- Implement adjustSpawnY to shift overlapping sessions down
- Sort sessions by column before positioning (parents first)
- Ensure all nodes in same depth share same X coordinate

* chore: remove non-feature files from contributor PR

Remove planning docs, security audit, vitest config, and revert
package.json/lockfile to original state.

* fix(monitor): add periodic update for session node component

- Introduced useEffect to trigger a state update every 30 seconds
- Simplified relative time calculation for better readability

* fix: Removed the Ctrl+K shortcut. The "clear completed" button in the UI still works — no need for a global keyboard shortcut that conflicts with browser/OS defaults.

* chore: update package dependencies and remove unused packages

- Removed "@types/dagre" and "dagre" from package.json and package-lock.json
- Added "peer": true to several dependencies in package-lock.json for better compatibility

* fix(clawdbot): optimize output chunk truncation logic

The new version iterates forward, accumulating dropped chars from the front until the remaining tail fits within budget. This keeps the maximum number of recent chunks possible.

- Refactored the logic for truncating output chunks to improve performance and readability.
- Changed variable declarations for clarity and adjusted the loop to determine the starting index for slicing the capped array.

* refactor(monitor, graph): introduce nodeData utility for type casting

- Added a utility function `nodeData` to cast domain data to ReactFlow's Node data type for improved type safety.
- Updated the ActionGraph and graph layout components to utilize the new `nodeData` function for data handling.

* fix(monitor): handle clipboard copy errors in ExecNode and SessionNode

- Updated clipboard copy functionality in ExecNode and SessionNode to handle potential errors by adding a catch block to the writeText method.
- Ensured that the user experience remains smooth by maintaining the existing feedback mechanism for copy actions.
2026-01-28 12:16:23 -05:00
Luciano Castillo e690c847fc feat(monitor): infer spawnedBy for subagent sessions (#13)
Client-side workaround for linking subagent sessions to parent sessions
without server support. Tracks recent parent session activity and infers
spawn relationships based on timing (5-second window).

- Add spawnedBy field to SessionInfo and MonitorSession types
- Track parent session activity timestamps
- Infer parent when subagent session first appears
- Preserve spawnedBy once set (immutable)
- Handle inference during hydration
2026-01-28 11:41:13 -05:00
Luciano Castillo c6990f5d86 Merge pull request #8 from yeHHH1g/fix/streaming-content-replace
fix: replace streaming content instead of appending
2026-01-28 09:33:27 -05:00
luccast f5eb110123 docs: add comment about cumulative delta behavior 2026-01-28 09:32:07 -05:00
luccast ad75627e0f Revert "Document behavior of cumulative message content in ChatEvent interface"
This reverts commit 5e53b2a70c.
2026-01-28 09:29:57 -05:00
luccast 5e53b2a70c Document behavior of cumulative message content in ChatEvent interface 2026-01-28 09:29:18 -05:00
Luciano Castillo 78ddc4cea3 Merge pull request #9 from oxngon/add-jq-alternative 2026-01-28 07:40:13 -05:00
django 139f474076 Add jq alternative for gateway token extraction 2026-01-28 01:44:47 +07:00
Ubuntu 9181d11047 fix: replace streaming content instead of appending
Clawdbot gateway sends cumulative text with each delta event
(full message so far), not incremental characters. The previous
append logic caused duplicated/garbled text in chat nodes.
2026-01-27 17:55:28 +00:00
luccast 2155d0cffa Update references from Clawdbot to Moltbot in documentation and UI
- Changed "Clawdbot" to "Moltbot (Clawdbot)" in CLAUDE.md and README.md for consistency.
- Updated the title in the Home component to reflect the new naming convention.
2026-01-27 10:27:07 -05:00
luccast a132a33c6b 1.0.4 v1.0.4 2026-01-27 09:43:33 -05:00
Luciano Castillo c39ae8a375 Merge pull request #6 from llirik0/fix/docker-image-runtime
fix(docker): make image runnable + document CLAWDBOT_URL
2026-01-27 06:46:25 -05:00
Kirill 6811bf7c60 fix(docker): make image runnable + document CLAWDBOT_URL 2026-01-26 23:50:17 -08:00
luccast 271d0c47b2 1.0.3 v1.0.3 2026-01-26 23:08:08 -05:00
Luciano Castillo e403f2788a Merge pull request #4 from luccast/luccast/persistent-background-service
Add persistent background service to monitor
2026-01-26 23:03:13 -05:00
luccast aae5df728c Fix duplicate messages on hydration
Use addAction() during hydration to apply aggregation logic
2026-01-26 22:53:52 -05:00
luccast 6101bd59dd Refactor SettingsPanel to use external open state management
- Removed internal state management for the SettingsPanel component.
- Added props for open state and onOpenChange callback to manage visibility from the parent component.
- Updated MonitorPage to handle the settings panel state and trigger its visibility.
2026-01-26 22:31:25 -05:00
Luciano Castillo e848d6c25f Merge pull request #3 from luccast/luccast-patch-2
Update Buy Me a Coffee username in FUNDING.yml
2026-01-26 21:06:49 -05:00
Luciano Castillo a22ce9ab41 Update Buy Me a Coffee username in FUNDING.yml
Signed-off-by: Luciano Castillo <2213102+luccast@users.noreply.github.com>
2026-01-26 21:06:34 -05:00
luccast 6ccd394838 Add persistence feature to monitor
- Introduced a persistence service to enable data retention across sessions.
- Updated SettingsPanel to manage persistence state and actions.
- Implemented hydration from server persistence in collections.
- Enhanced TRPC router with persistence-related queries and mutations.
- Updated monitor page to handle persistence status and actions.
2026-01-26 20:25:12 -05:00
luccast 37a4db51de 1.0.2 v1.0.2 2026-01-26 19:32:46 -05:00
luccast caf185f917 Refactor Clawdbot client initialization to use configurable WebSocket URL
- Updated the Clawdbot client to accept a WebSocket URL from the environment variable `CLAWDBOT_URL`, defaulting to 'ws://127.0.0.1:18789' if not set. This change enhances flexibility for different deployment environments.
2026-01-26 19:28:39 -05:00
luccast c1a6d38c26 Add gateway token config instructions to README 2026-01-26 17:07:03 -05:00
luccast ef1d8d2052 Fix build output path (dist not .output) v1.0.1 2026-01-26 16:56:05 -05:00
luccast ff50cafe34 Add Docker support and GitHub release workflow 2026-01-26 16:51:47 -05:00
luccast ad791b25af Add version 1.0.1 to package.json 2026-01-26 16:45:52 -05:00
Luciano Castillo 11d642f4e7 Merge pull request #2 from luccast/luccast-patch-1
Update copyright name in LICENSE file
2026-01-26 15:15:09 -05:00
Luciano Castillo d5dbfc0951 Update copyright name in LICENSE file
Signed-off-by: Luciano Castillo <2213102+luccast@users.noreply.github.com>
2026-01-26 15:13:31 -05:00
luccast 1c2e2fa7fc Update README.md to include screenshots of the home and monitor views 2026-01-26 14:59:18 -05:00
Luciano Castillo d585215a6d screenshots 2026-01-26 14:55:04 -05:00
luccast f6bb8ddd0d Update ActionNode component styles for improved readability
- Adjusted text sizing in the ActionNode component to use smaller font sizes for better readability.
- Replaced the overflow handling for truncated content with a line clamp for a cleaner presentation.
- Ensured consistent styling for Markdown content within the component.
2026-01-26 14:49:21 -05:00
luccast a93e938f8f Update styles and enhance connection handling in Monitor component
- Changed the font-family for sub-headlines from display to mono for consistency in styling.
- Improved the connection logic in the MonitorPage component to include retry functionality with a maximum retry limit, enhancing user experience during connection attempts.
- Updated the status indicator to reflect connection states more accurately, providing clearer feedback to users during connection attempts.
2026-01-26 14:40:45 -05:00
luccast 5bf7807659 Enhance Home component with social links and update title
- Introduced social links for GitHub and personal profile, improving user engagement and contribution opportunities.
- Updated the title from "Clawdbot Companion Monitor" to "Open-Source Clawdbot Companion" for better clarity.
- Removed unused CrabSilhouette component to streamline the code and improve performance.
2026-01-26 14:26:39 -05:00
luccast 6bfe22594a Refactor SessionList component styles for improved responsiveness
- Updated the SessionList component to conditionally apply margin and padding based on the collapsed state, enhancing layout responsiveness.
- Simplified button styles by removing unnecessary border properties for a cleaner appearance.
- Adjusted footer styles to ensure consistent spacing and visual appeal when collapsed.
2026-01-26 14:23:06 -05:00
luccast 237d546aba Enhance crab animations by preloading frames in Home component
- Added useEffect to preload all crab animation frames on component mount, improving performance during animations.
- Introduced a constant for all crab animation frame paths to streamline the preloading process.
2026-01-26 14:22:29 -05:00
luccast b78122a9f4 Refactor styles and enhance ActionGraph, ActionNode, and SettingsPanel components
- Simplified styles in the ActionGraph and ActionNode components by removing unnecessary border styles for a cleaner look.
- Updated ActionNode to improve text sizing for better readability and consistency.
- Enhanced SettingsPanel by streamlining button styles and removing redundant border properties, improving overall UI consistency.
- Adjusted layout properties in the SessionList component to enhance responsiveness and visual appeal.
2026-01-26 14:16:30 -05:00
luccast 1b323b3ae3 Add react-markdown dependency and integrate Markdown rendering in ActionNode component
- Added `react-markdown` as a dependency to enable Markdown rendering.
- Updated the `ActionNode` component to display full content using Markdown when expanded, enhancing content presentation.
- Adjusted styles for the Markdown content to ensure readability and visual consistency within the component.
2026-01-26 14:01:12 -05:00
Luciano Castillo ba00a952ea Refactor SessionList component and update styles
- Modified the SessionList component to adjust layout and improve responsiveness based on the collapsed state.
- Updated footer icon links and hover styles for better visual consistency and interaction.
- Removed unused hover styles for the footer icon, streamlining the CSS.
2026-01-26 13:47:03 -05:00
Luciano Castillo 1b3b687600 Add lobster icon to CrabNode component and update styles
- Introduced a new lobster icon in place of the animated crab, enhancing visual representation.
- Updated styles for the lobster icon to improve interactivity and appearance.
- Adjusted the Handle component's z-index for better layering in the UI.
2026-01-26 13:37:09 -05:00
Luciano Castillo 0a195e4e73 Update SessionList component with corrected link to user profile
- Changed the href attribute in the SessionList component from an incorrect user profile link to the correct one for improved navigation.
2026-01-26 12:57:10 -05:00
Luciano Castillo d7e79bee5d Add footer icons and enhance SessionList and SettingsPanel styles
- Introduced a new footer icon component with hover effects for improved user interaction.
- Updated SessionList component to include the new footer icon and refined styling for better visual consistency.
- Adjusted SettingsPanel header styles for improved typography and layout.
- Ensured consistent use of quotation marks and formatting across the codebase.
2026-01-26 12:55:33 -05:00
luccast d3538dab88 Refactor chaser crab behavior in ActionGraph component
- Updated chaser crab state management to include new states: 'wandering' and 'jumping', enhancing movement dynamics.
- Simplified the animation loop for crab movement, implementing step-based updates for smoother animations.
- Improved target detection logic for the chaser crab, allowing it to chase newly added or moved nodes effectively.
- Enhanced click handling for the chaser crab, enabling jump animations and state transitions based on user interaction.
- Refined the ChaserCrabNode component to accommodate new states and improve click event handling.
2026-01-26 10:07:19 -05:00
luccast cd4e164314 Update styles and versioning in SettingsPanel and Home components; enhance .gitignore
- Removed font size and line height from .font-console in styles.css for cleaner typography.
- Updated version number from v3.0 to v1.0.1 in SettingsPanel and Home components for consistency.
- Added .tanstack/tmp/* to .gitignore to prevent tracking of temporary files in the TanStack directory.
2026-01-26 09:20:27 -05:00
luccast e5f390d599 Add JetBrains Mono font files and update styles
- Introduced JetBrains Mono font files (Regular, Medium, SemiBold, Bold) to the project.
- Updated styles.css to include local font-face definitions for JetBrains Mono.
- Replaced 'Space Mono' with 'JetBrains Mono' in the font stack for improved typography consistency.
2026-01-26 09:13:50 -05:00
luccast 0ec6f2530f Remove unused development tools from RootDocument component
- Eliminated TanStackRouterDevtools and associated devtoolsPlugins from the RootDocument, streamlining the component.
- Simplified the structure of the RootDocument to enhance performance and maintainability.
2026-01-26 09:08:35 -05:00
luccast 7ffc975884 Enhance action handling and visualization in Clawdbot integration
- Introduced new action types: 'start', 'streaming', and 'complete' to improve event tracking and state management.
- Updated ActionGraph component to apply edge styling based on action type, enhancing visual representation of action flows.
- Modified ActionNode to display state labels and metadata for completed actions, improving user feedback.
- Refined addAction function to handle new action types and associated metadata, ensuring accurate session tracking.
- Enhanced chatEventToAction and agentEventToAction functions to map new action types and extract relevant metadata.
2026-01-26 09:02:24 -05:00
luccast 14e2eeabe0 Refactor chaser crab logic in ActionGraph component
- Simplified the initialization of the chaser crab node by using a static position and default state on mount.
- Enhanced the animation loop to directly update the chaser crab's position and state, improving performance and clarity.
- Updated the node management to ensure the chaser crab is preserved during layout changes, maintaining its behavior and state.
- Cleaned up dependencies in useEffect hooks for better performance and readability.
2026-01-26 08:58:03 -05:00
luccast ea308967ee Implement chaser crab functionality in ActionGraph component
- Added state management for chaser crab, including position, target, and behavior states (idle, running, attacking).
- Integrated chaser crab into the ActionGraph layout, allowing it to dynamically chase new nodes.
- Removed the ChaserCrab component, consolidating functionality directly within ActionGraph for improved performance and maintainability.
- Enhanced animation loop for chaser crab movement and attack logic, improving interaction dynamics.
2026-01-26 08:55:03 -05:00
luccast 36f806897c Refactor ActionGraph component to include ReactFlowProvider and enhance structure
- Introduced ActionGraphInner as a separate component to utilize ReactFlow hooks.
- Added ChaserCrab overlay to display additional node information.
- Wrapped ActionGraph in ReactFlowProvider for improved context management.
- Updated layout and styling for better visual consistency.
2026-01-26 08:49:44 -05:00