Skip to content

feat(ce): Phase 2a-2b++++++ embed, filebrowser, partition, rubber-band split - #22

Open
benjsmith wants to merge 12 commits into
mainfrom
feat/skill-shell-rationalization
Open

benjsmith wants to merge 12 commits into
mainfrom
feat/skill-shell-rationalization

Conversation

@benjsmith

@benjsmith benjsmith commented Sep 18, 2026

Copy link
Copy Markdown
Owner

Summary

Phase 2a–2b+++++ (prior)

Embed prefix, filebrowser, FS mutate, packs, curation replay, wiki partition, workspace registry + CM export (712fd45).

Phase 2b++++++ (this — 38e067d)

  • Classic rubber-band split targeting: Ctrl/⌘-drag marquee; Shift-click multi-select; click toggle; Alt/right-click flips move↔copy (entities/concepts default copy).
  • SplitPanel syncs with Graph.splitEnter / splitExit; listens ce:split-selection, ce:split-proposal, sy:split-proposal; POSTs /api/split via ceApi (embed v2 / CE_PUBLIC_BASE=/embed/ce).
  • Pure helpers: packages/knowledge-atlas rubberBand.ts + vitest.
  • Atlas: splitEnter/splitExit seed engine multi-select (canvas marquee still deferred).

Test plan

  • cd packages/knowledge-atlas && npm test -- rubberBand partitionSelection
  • node --check on graph.js / split.js / atlas.js / main.js
  • Manual: CE_PUBLIC_BASE=/embed/ce viewer; ?split=1; Ctrl-drag nodes → Split

Do not merge until Ben reviews umbrella E2E evidence (charter).

@benjsmith benjsmith changed the title feat(ce): Phase 2a — /embed/ce proxy prefix + hosted hook + migration intake feat(ce): Phase 2a/2b — embed prefix + filebrowser slice + replay hook Sep 18, 2026

Copy link
Copy Markdown
Owner Author

Phase 2b landed on feat/skill-shell-rationalization (19c1e30).

Landed

  • GET /api/tree{ok, roots:[vault,wiki], files, count} (embed-prefix aware)
  • Wiki-view Files mode: browse / search / highlight / right-click Open·Copy·Reveal
  • KA playReplayTimeline animation scheduler + vitest

Deferred

  • Pack file_routes, FS mutate, drop-ingest, SVG replay UI, split

Verify

python3 -m unittest tests.test_filebrowser tests.test_public_base -v
# optional: CE_PUBLIC_BASE=/embed/ce + curl /embed/ce/api/tree ; viewer ?filebrowser=1
cd packages/knowledge-atlas && npx vitest run tests/replayTimeline.test.ts

Do not merge (charter).

@benjsmith benjsmith changed the title feat(ce): Phase 2a/2b — embed prefix + filebrowser slice + replay hook feat(ce): Phase 2a/2b/2b+ — embed prefix + filebrowser + partition/split Sep 18, 2026

Copy link
Copy Markdown
Owner Author

Phase 2b+ landed on feat/skill-shell-rationalization @ b2b04da (not merged).

  • CE wiki partition: wiki_partition.py + POST/GET /api/split (keeps CE_PUBLIC_BASE + filebrowser working)
  • Atlas partitionSelection helpers + minimal wiki-view split panel (?split=1)
  • Tests: 22 unittest (partition+filebrowser+public_base) + 4 vitest (partition+replay)
  • Still deferred: rubber-band UI, Switchbay workspace registry, CM subgraph_export parity, heal agents, pack routes / SVG replay

@benjsmith benjsmith changed the title feat(ce): Phase 2a/2b/2b+ — embed prefix + filebrowser + partition/split feat(ce): Phase 2a–2b+++++ embed, filebrowser, partition, registry + CM export Sep 19, 2026
@benjsmith benjsmith changed the title feat(ce): Phase 2a–2b+++++ embed, filebrowser, partition, registry + CM export feat(ce): Phase 2a-2b+++++ embed, filebrowser, partition, registry + CM export Sep 19, 2026
@benjsmith benjsmith changed the title feat(ce): Phase 2a-2b+++++ embed, filebrowser, partition, registry + CM export feat(ce): Phase 2a-2b++++++ embed, filebrowser, partition, rubber-band split Sep 19, 2026
Add CE_PUBLIC_BASE (/embed/ce) stripping and HTML bootstrap (ceApi),
X-CE-Host/?host=switchbay|okbay stub via /api/hosted, ADR-001, and
Switchbay→CE filebrowser/animation/split intake map. Keep 127.0.0.1
loopback; bare viewer.sh port 8090 unchanged.
Land GET /api/tree (vault/ + wiki/), wiki-view Pages|Files browser with
search/highlight/context menu, and knowledge-atlas playReplayTimeline.
Keep CE_PUBLIC_BASE/hosted working; split deferred. Update migration intake.
Land CE-owned page move/copy partition: wiki_partition + POST/GET
/api/split (CE_PUBLIC_BASE + CE_SPLIT_HOME), atlas partitionSelection
helpers, and a minimal wiki-view split panel. Shells keep workspace
registry; rubber-band UI and CM subgraph_export parity remain deferred.
Sandboxed create/rename/move/delete/duplicate under vault|wiki, Switchbay-
shaped /api/fs/* + /api/file-routes discovery, minimal Files context menu,
and escape-boundary tests. Animation SVG still deferred.
Add wiki-view replay overlay (play/pause/scrub/step) driven by
HistoryDoc / playReplayTimeline contract. Serve GET /api/curation/history
from data.json (optional workbench cache). Pure buildHistoryFromGraph
helpers + tests. Pack action dispatch left for follow-up.
List/enable/local-install packs from pack.json; POST
/api/packs/<pack>/action/<action> queues a sandboxed run ({run_id}).
Wire filebrowser context-menu hooks. Agent/LLM skill execution,
git install, reveal-in-OS, and drop-ingest remain Switchbay-only.
Ship the Switchbay-parity slice for split follow-through without rubber-band UI:
CE-owned workspace registry persistence (auto-register on POST /api/split) and
an optional curiosity-merge subgraph_export subprocess hook with dry-run.
Classic wiki-view: Ctrl/⌘-drag rubber-band, Shift-click multi-select,
click toggle, Alt/right-click move↔copy; SplitPanel syncs selection and
POSTs /api/split via ceApi (embed v2 / CE_PUBLIC_BASE). Pure rubberBand
helpers + vitest; Atlas splitEnter seeds engine select (no canvas marquee).
Opening autoplay on ?replay=1, enter fade/radius inflate/settle+overlay
fade, easeAutoFit after ticks and major scrub jumps, synthetic history
ordering by created/type-tier, and pure replayCamera helpers + tests.
Atlas canvas binding and git-log rebuild remain deferred.
@benjsmith
benjsmith force-pushed the feat/skill-shell-rationalization branch from 17f9678 to 0d7b541 Compare September 19, 2026 22:05
Ctrl/⌘-drag marquee on Atlas (hitTester.boxQuery) mirrors Classic split
selection; CurationReplay.bindViewer + fitToContent land ?replay=1 polish
on the live Atlas camera after SVG overlay fade. Pure helpers
(computeAtlasCameraFit, clientToScenePoint) + vitest; vendor IIFE refreshed.
Toward Switchbay parity: POST /api/fs/reveal|open-external (vault/wiki
sandbox), POST /api/ingest/from-upload|from-path (DEFAULT_EXTS allowlist
→ vault/raw/ + ingest-runs queue), and packs install via git clone
--depth 1. Wire context-menu Reveal in OS / Open externally and
drag-drop on the filebrowser pane. Honor CE_PUBLIC_BASE.
Easy import of an Obsidian vault into a CE workspace without a
Work/symlink dance. Maps vault root → wiki/, preserves [[wikilinks]],
sandboxes sources like filebrowser/workspace registry, zip-slip safe.

API POST /api/import/obsidian (JSON path or multipart zip) honours
CE_PUBLIC_BASE. CLI: python3 obsidian_import.py (ce import-obsidian).
Unit tests cover sandbox, zip extract, and wikilink presence.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant