feat: v0.11.0 VS Code-like explorer, markdown preview, search in files
build-deb / Lint, test, package (push) Successful in 2m29s
build-deb / Deploy to CT 126 (push) Successful in 7s
build-deb / Notify on failure (push) Skipped

- Explorer: context menus, multi-select, inline rename/new, drag to move
  or copy, desktop drag-and-drop uploads (folders too), cut/copy/paste,
  duplicate, download, delete to a 7-day trash with Undo. Server side in
  libexec/devdesk-fsops.sh with bats tests. Closes #54
- Markdown preview in a shadow root: headings with anchors and outline,
  highlighted code with copy, callouts, task lists, front matter, links
  that open files, live split view. Editor status bar, multi-cursor,
  closeBrackets, Ctrl+G, tab menus and reordering. Closes #55
- Search in files (Ctrl+Shift+F) via git grep / grep. Closes #56
- Fix: nested $(...) path checks now fail hard (set -e does not reach
  them; an escape created /x in testing); newest folder listing wins;
  sessionAction returns the reply JSON.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WHRLCCdXYm41Qx5kNhehaP
This commit is contained in:
2026-10-22 21:25:43 -04:00
co-authored by Claude Opus 5.5
parent e60f1ad066
commit 65114165e7
15 changed files with 2166 additions and 167 deletions
+6 -3
View File
@@ -15,7 +15,7 @@
#
# The web UI calls `devdesk attach --list | --repo NAME | --alerts | --investigate SESSION UID |
# --upload SESSION FILE BYTES | --new NAME [PROJECT] [--worktree] | --rename OLD NEW | --end NAME |
# --last-reply NAME | --unsplit NAME | --existing NAME`
# --last-reply NAME | --unsplit NAME | --fs-* SESSION … | --existing NAME`
# through ttyd; those print JSON.
set -euo pipefail
@@ -29,6 +29,8 @@ set -euo pipefail
. "$DEVDESK_LIBEXEC/devdesk-history.sh"
# shellcheck source=libexec/devdesk-ops.sh
. "$DEVDESK_LIBEXEC/devdesk-ops.sh"
# shellcheck source=libexec/devdesk-fsops.sh
. "$DEVDESK_LIBEXEC/devdesk-fsops.sh"
usage() {
sed -n '2,13s/^# \{0,1\}//p' "$0"
@@ -164,7 +166,7 @@ dd_worktree_add() {
else
"${g[@]}" worktree add -q -b "$branch" "$wt" HEAD >&2 || dd_die "git worktree add failed"
fi
wt=$(realpath -e -- "$wt")
wt=$(realpath -e -- "$wt") || dd_die "git worktree add failed"
# shellcheck disable=SC2016 # jq variables
dd_registry_update '.sessions[$n] = ((.sessions[$n] // {}) + {worktree: {path: $w, repo: $r, branch: $b}})' \
--arg n "$name" --arg w "$wt" --arg r "$top" --arg b "$branch"
@@ -378,7 +380,8 @@ cmd_attach() {
dd_linger
return
;;
--fs-list | --fs-find | --fs-read | --fs-write | --git-status | --git-show | --asset)
--fs-list | --fs-find | --fs-read | --fs-write | --git-status | --git-show | --asset | \
--fs-mkdir | --fs-move | --fs-copy | --fs-delete | --fs-restore | --fs-put | --fs-download | --fs-grep)
local action=${1#--}
shift
"cmd_${action//-/_}" "$@"