66 Commits

Author SHA1 Message Date
kumarabhirup
ef86960d00
feat(workspace): support browse-mode paths in editors and file tree
Editors and file tree use workspace-paths helpers to route saves and classify system files correctly for absolute and home-relative paths.
2026-03-15 04:17:47 -07:00
kumarabhirup
89289bb31d
feat(chat): multi-session chat tabs with stop controls UI
Tab-based multi-chat system supporting concurrent parent and subagent sessions, per-session stop controls, layout/scroll fixes, and attachment display improvements.
2026-03-15 00:31:55 -07:00
Mark
5f8b9ed98e fix: remove hero animations and ensure new chat tab always exists
- Remove framer-motion animations from hero greeting, input bar, and
  suggestion buttons so they render instantly
- Fix SSR hydration mismatch by deferring hero render until client mount
- Always create a "New Chat" tab on fresh load and when closing last tab

Made-with: Cursor
2026-03-12 21:49:25 -07:00
Mark
f39130c8f7 style: update sidebar animations and accent colors
- Add 'sidebar-animate' class to sidebar elements for improved transition effects.
- Change accent color scheme to a green palette for better visual consistency.
- Ensure sidebar animations are disabled during resizing for smoother user experience.
2026-03-12 21:12:15 -07:00
Mark
d740334da7 refactor: improve sidebar layout and transition effects
- Simplify sidebar visibility logic by removing unnecessary variables.
- Enhance sidebar width handling with smooth transitions for collapsed states.
- Update chat sidebar to adjust width dynamically based on its open state.
- Refactor component structure for better readability and maintainability.
2026-03-12 17:52:00 -07:00
Mark
a62f21bffb polish: refine tab bar, sidebar colors, and session loading
- Fix session load error by handling 404 gracefully
- Unify sidebar backgrounds to stone-100, make main-bg fully opaque
- Add divider + gap before new tab button, hide when last tab active
- Make tab hover cursor default, new tab button fully rounded
- Remove glass background from chat header
- Replace show/hide output button with clickable step labels
- Fix chat sidebar header to use solid background
- Set min-height on tab bar wrapper for loading state

Made-with: Cursor
2026-03-12 17:42:57 -07:00
Mark
6d99d3c959 feat: Chrome-style tabs with curved connectors, new chat tab button, and link handling
- Tab bar uses distinct strip background with curved connectors on active tab
- "+" button creates new chat tabs (like Chrome new tab)
- Markdown links intercepted for in-app navigation and anchor scrolling
- Fix borderColor shorthand conflict in database-viewer spinner
- Align sidebar header height with tab bar

Made-with: Cursor
2026-03-12 14:13:47 -07:00
Mark
fbfdee21a5 feat: redesign workspace UI — glassmorphism dropdowns, Chrome-style tabs, chat popover
- Move chat history from left sidebar to floating popover on tab bar
- Add dench-ui components (Button, Card, Input, Label, Switch) with deps
- Glassmorphism styling for all dropdowns/context menus with dark mode
- Chrome-style active tab that merges with content area
- Align sidebar header with tab bar (34px)
- Condense sidebar header to single line
- Move sidebar expand button into tab bar
- Add next-themes for proper dark mode with system preference support
- Add Tailwind v4 class-based dark mode via @custom-variant
- Add dench-ui CSS tokens (light + dark)
- Restore pointer cursor for all interactive elements
- New chat button always visible in tab bar
- "Delete this chat" label in dropdown menu

Made-with: Cursor
2026-03-12 13:30:04 -07:00
Mark
45db1bcf54 feat: merge file tree and chat history into single left sidebar with tabs
Made-with: Cursor
2026-03-12 12:03:29 -07:00
kumarabhirup
e49b74c990
fix(terminal): keep terminal drawer open when shell process exits
The terminal drawer was flickering closed immediately after opening because
the spawned shell process exited with code 1, triggering handleExited →
closeTerminal → onClose which unmounted the entire drawer within ~500ms.

- Stop auto-closing the drawer on process exit so users can see error output
- Extract URL param building into testable buildWorkspaceSyncParams function
  that correctly includes terminal state, preventing param stripping on navigation
- Add 21 tests covering terminal param preservation across navigation scenarios
2026-03-09 10:06:25 -07:00
kumarabhirup
e7ab121879
fix(workspace): update query parameters to manage terminal state 2026-03-09 09:34:44 -07:00
kumarabhirup
8deeccf646
feat(web): add workspace app tabs and embedded runtime
This makes Dench apps behave like first-class workspace views with persistent tabs and embedded app loading instead of exposing raw folders.
2026-03-08 21:47:41 -07:00
kumarabhirup
e1fc698f2e
feat(web): add in-browser terminal panel (Cmd+J)
xterm.js frontend + node-pty WebSocket server spawning the user's real shell,
with drag-to-resize drawer, multi-terminal tabs, live theme sync, and URL state.
2026-03-08 20:45:10 -07:00
kumarabhirup
8f4fd62d63
fix(workspace): prevent URL sync from wiping params on hydration render
The URL sync effect and hydration effect run in the same React render
cycle. Since React state updates (setActivePath) are batched, the URL
sync effect still saw activePath=null and pushed "/", stripping all
query params. This caused an alternating refresh bug where odd refreshes
showed the homepage and even refreshes worked correctly.

Skip the URL sync effect for one render after hydration completes, giving
React state time to update before the effect writes the URL.
2026-03-06 21:29:03 -08:00
kumarabhirup
d829b73265
refactor(workspace): centralize URL sync and add back/forward navigation
Remove scattered router.replace("/") calls in favor of the URL sync effect.
Add popstate listener to restore app state on browser back/forward.
Preserve object-view params across shell-level URL updates.
Fix ObjectView overwriting URL params on initial mount.
2026-03-05 22:54:31 -08:00
kumarabhirup
7dd38c185c
refactor(workspace): rename replaceUrlToWorkspace to replaceUrlToRoot
URL sync is now handled by the centralized effect, not callers.
2026-03-05 22:54:18 -08:00
kumarabhirup
c21bbb6cea
feat(cron): overhaul dashboard with calendar/timeline/insights views and action bar
Add tabbed views (overview, calendar, timeline, insights) to the cron dashboard, run status filters and action buttons (run now, disable, delete) to job detail, reuse ChatMessage for session transcripts, and wire URL state through workspace content.
2026-03-05 21:20:18 -08:00
kumarabhirup
1c21b039fc
refactor(web): consolidate workspace onto root route with URL state machine
Move the workspace shell from /workspace to / and introduce a typed URL state codec (parseUrlState/serializeUrlState) for deep-linkable workspace params. Legacy /workspace URLs are still recognized for backward compatibility.
2026-03-05 19:09:29 -08:00
kumarabhirup
4d6eec741d
npx denchclaw 2026-03-04 13:23:34 -08:00
kumarabhirup
b2c946b08d
test(web): cover multi-view resolution and scheduling interactions 2026-03-04 11:07:54 -08:00
kumarabhirup
cd7ea43a91
feat(web): add calendar timeline gallery and list object views 2026-03-04 11:07:10 -08:00
kumarabhirup
b5987e931c
feat(web): add multi-view schema and settings persistence 2026-03-04 11:03:27 -08:00
kumarabhirup
68015d6c14
refactor(web): enhance entry detail and object table components for improved data handling
This commit introduces several enhancements across the EntryDetailModal and ObjectTable components. Key changes include the addition of a FormattedFieldValue component for consistent display of various field types, improved handling of entry metadata, and the introduction of input type resolution for fields. Additionally, navigation callbacks for entries have been refined to support better interaction within the object table. These updates aim to streamline data presentation and enhance user experience.
2026-03-03 22:54:12 -08:00
kumarabhirup
8542f07783
refactor(web): improve data handling in DataTable and ObjectTable components
This commit refactors the DataTable and ObjectTable components to enhance state management. In DataTable, the column visibility state is now set more efficiently by defaulting to an empty object when no initial visibility is provided. In ObjectTable, local entries are introduced to maintain alignment with server updates, and a new callback for local value changes is added to EditableCell, improving the responsiveness of the UI during data edits. Additionally, the handling of row selection during bulk delete operations is updated to use local entries, ensuring consistency across the component's state.
2026-03-03 17:58:45 -08:00
kumarabhirup
f6f9a5b157
refactor(web): eliminate SubagentPanel, unify into ChatPanel subagent mode
Delete subagent-panel.tsx (~670 lines) and its test. The SubagentPanel
bypassed the AI SDK's useChat pipeline with a manual createStreamParser,
causing tool events to never render. Instead, add a lightweight subagent
mode to ChatPanel via sessionKey/subagentTask/onBack props that reuses
the same DefaultChatTransport + useChat pipeline, fixing tool event
rendering and persisted message loading for completed subagent sessions.
2026-03-03 15:55:37 -08:00
kumarabhirup
aec4e9d89a
refactor(web): update workspace page and hooks
Use workspace model in page and use-workspace-watcher.
2026-03-03 13:47:18 -08:00
kumarabhirup
3c2138e4bd
feat(web): add workspace-switch component
New workspace-switch component and tests for workspace selection UI.
2026-03-03 13:47:02 -08:00
kumarabhirup
a61aedd51d
refactor(web): update workspace page layout and profile integration 2026-03-02 18:35:48 -08:00
kumarabhirup
a7a89a990e
feat(web): add object-view-active-view module for workspace page 2026-03-02 18:35:41 -08:00
kumarabhirup
6594de6186
Merge Ironclaw changes onto upstream Openclaw 2026.2.22
Replays all Ironclaw-specific changes (176 commits) onto the latest
upstream Openclaw release (2026.2.22). Conflicts auto-resolved in
favor of Ironclaw to guarantee zero change loss.

Merge base: cbc3de6c9 (2026-02-16)
Upstream: a37e12eab (upstream/main, 2026.2.22)
Ironclaw: 3009566c9 (origin/main, 2026.2.15-1.9)
Backup: ironclaw-backup-pre-sync

Conflict resolutions:
- 6 GitHub workflow files: deleted (Ironclaw intentionally stripped)
- src/sessions/session-key-utils.test.ts: kept (Ironclaw modified)
- Duplicate imports from merge: deduplicated
- Unused imports from upstream code Ironclaw overrode: removed
- Broken test indentation from merge: fixed

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 18:06:01 -08:00
kumarabhirup
c8ae7acbf4
fix: restore remaining merge regressions (SKILL.md, MIME types, showHidden, symlink, activeProfileHint) 2026-02-21 14:39:55 -08:00
kumarabhirup
109b88b93c
web: restore functional features dropped by design merge
Restore backend/logic features that were incorrectly auto-merged from the
design branch:

- Spreadsheet viewer (xlsx, csv, ods, etc.) and xlsx dependency
- HTML iframe viewer with source toggle
- Directory picker modal for workspace creation
- Workspace registry for custom-path workspaces
- Session auto-discovery for orphaned sessions
- Workspace init seeding (CRM objects, DuckDB, templates, bootstrap files)
- Symlink resolution and showHidden in tree/browse routes
- Upload to workspace assets/ instead of hidden ~/.ironclaw/uploads/
- Webpack dev watcher config (next.config.ts)
- router.push for back-button navigation history
2026-02-21 13:10:32 -08:00
Mark
ca8ac9fda1 Revert "Merge kumar workspaces to design branch"
This reverts commit bf4445115b911fa7831e6a35f7d0114154bb58ec, reversing
changes made to face53f2341417e339c02d5d7d4c412b961f87f6.
2026-02-20 12:45:42 -08:00
Mark
bf4445115b Merge kumar workspaces to design branch 2026-02-20 12:04:56 -08:00
kumarabhirup
d422c5a540
web: wire up HTML/spreadsheet viewers and use push navigation 2026-02-20 00:43:03 -08:00
Mark
6c6289eb2e Collapsible sidebar 2026-02-19 23:15:39 -08:00
Mark
5da7d46a49 Rename chat title 2026-02-19 22:54:23 -08:00
Mark
fcbec6c4d6 Queue items (edit, send now, delete) 2026-02-19 21:58:10 -08:00
Mark
a0ba55feec Integrate file preview on the side 2026-02-19 17:46:54 -08:00
Mark
4f80c60f88 Unicode + Session delete (API + sidebar + chat header), sidebar loading state and layout, inline “thinking” spinner, chat sidebar CSS variables, and font/heading tweaks in the web app. 2026-02-19 16:50:52 -08:00
Mark
027593b350 Resizable sidebar 2026-02-19 15:42:23 -08:00
kumarabhirup
21f60da24d
🚀 RELEASE: Workspaces 2026-02-19 14:59:34 -08:00
kumarabhirup
c7842901e2
fix: wire compact ChatPanel ref so workspace sidebar drag-and-drop works in file-scoped chat 2026-02-17 01:34:33 -08:00
kumarabhirup
673c122602
fix: resolve no-shadow lint errors in web app 2026-02-17 00:38:09 -08:00
kumarabhirup
b7baae188c
🚀 RELEASE: full table filter 2026-02-17 00:36:01 -08:00
kumarabhirup
dee323b7ad
fix lint/build errors and bump to 2026.2.15-1.4
- Fix all oxlint errors (curly, no-unused-vars, no-base-to-string,
  no-floating-promises, approx-constant, restrict-template-expressions)
- Fix TS build errors: rewrite update-cli.ts as thin wrapper over
  submodules, restore missing chat abort helpers in chat.ts
- Fix web build: wrap handleNewSession in async for ChatPanelHandle,
  add missing safeString helper to entry-detail-modal
- Bump version to 2026.2.15-1.4 and publish

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 00:30:13 -08:00
kumarabhirup
4d2fb1e2a0
🚀 RELEASE: chat start stop 2026-02-15 23:42:13 -08:00
kumarabhirup
170231a54f
🚀 RELEASE: chat sesh stop + queue / workspace.duckdb flexibility / drag to root 2026-02-15 23:00:25 -08:00
Kumar Ethirajulu
4995eb52fe
web(kanban): add drag-and-drop, card detail modal, and column rename
- Cards are draggable between columns via @dnd-kit with optimistic updates
- Clicking a card opens the EntryDetailModal (parity with table view)
- Double-click column headers to rename enum values inline
- New API endpoint for renaming enum values with cascading entry updates
2026-02-15 20:28:47 -08:00
kumarabhirup
840f5c4f08
ironclaw: restore DuckDB-missing state and ?send= URL handler in workspace
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-15 18:19:13 -08:00