Repository files navigation

BB Files

CI

A standalone BB plugin that adds Actions → Files to every thread. The panel is bound to that thread's live environment and uses bb.sdk.files, so the same tree/editor works on the local machine and connected hosts.

Install

BB Files requires BB >=0.35.1. Install the current tagged release:

bb plugin install 'git:https://github.com/Diffuzmetall/bb-plugin-files.git@v0.1.0' --yes

After the plugin is listed in the BB Community marketplace, BB can report and apply compatible tagged updates without installing them automatically:

bb plugin outdated
bb plugin update files

Releases use immutable vX.Y.Z Git tags. Marketplace updates within the current ^0.1.0 range are selected from those tags.

Project documentation

  • ROADMAP.md — detailed product and technical ideas. Highlighted directions include BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, filesystem-watch or adaptive-polling synchronization, performance, and reliability.

Features

  • Multi-Tab Editor: open multiple files simultaneously with a modern tab bar. Tabs persist per thread and are restored when the Files panel is reopened;
  • Resizable Layout: Modern IDE-style interface with the editor on the left and a resizable, collapsible file tree on the right;
  • bounded recursive tree (up to 10,000 files) with fuzzy file search;
  • Depth-first tree rendering: accurately reconstructs project hierarchy with auto-expansion of active file paths;
  • Hidden files support: dynamically probes and reveals common configuration dotfiles (e.g. .env, .gitignore, .github, .vscode, etc.) which are normally excluded by the host lister;
  • UTF-8 editing up to 2 MiB with CodeMirror 6;
  • directly editable WYSIWYG Markdown Preview, exact-source Raw mode, Image Previews, and HTML previews in an inline iframe or separate browser tab;
  • embedded Excalidraw editing for .excalidraw scenes, including theme synchronization and safe external links;
  • 700 ms autosave and Cmd/Ctrl+S;
  • SHA-based compare-and-swap with explicit Reload/Overwrite conflict handling;
  • 10-second tree/file external-change polling;
  • create, rename (safely preserves unsaved drafts), duplicate, recursive delete, copy file content, copy relative path, and download actions;
  • optional MD Annotate integration for opening Markdown files in a review/commenting tab;
  • optional SQL integration for opening .sql files with the preferred host opener (yazydzhi/bb-plugin-sql);
  • Open with preferred… on any file — reopens via BB’s host file flow so Settings → File openers apply (the in-panel editor itself does not);
  • narrow panel navigation with a Back control;
  • symlinks and node_modules remain excluded by BB's host lister.

Development

npm install --legacy-peer-deps
npm run typecheck
npm test
bb plugin build .
bb plugin install "$PWD" --yes

Then open a thread and choose New tab → Actions → Files in its right panel. During development, run bb plugin dev "$PWD".

MD Annotate integration

BB Files integrates optionally with DarrenTsung/bb-plugin-md-annotate, a Google Docs-style review surface for Markdown files.

When a compatible, running md-annotate plugin is detected, Markdown files receive two additional actions:

  • a comment icon in the active file toolbar;
  • Open in Annotate in the file context menu.

The actions are hidden when MD Annotate is not installed, disabled, failed, or frontend-incompatible. BB Files does not import, modify, or control MD Annotate; it asks BB to reopen the selected workspace file using the client's configured file opener.

Compatibility and setup

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • MD Annotate 0.1.x with plugin id md-annotate and opener id annotate;
  • .md, .mdx, and .markdown workspace files;
  • in Settings → File openers, set the Markdown extension you use to Annotate (md-annotate).

Install MD Annotate separately:

bb plugin install git:https://github.com/DarrenTsung/bb-plugin-md-annotate@main

The integration intentionally uses BB's standard file-open flow. Consequently, if Annotate is installed but is not the configured default for that extension, the action opens whichever viewer the client selected instead.

SQL integration

When a compatible, running sql plugin is detected, .sql files receive:

  • a terminal icon in the active file toolbar (Open in SQL);
  • Open in SQL in the file context menu.

Every file also gets Open with preferred… (toolbar + context menu), which asks BB to reopen the workspace path through the host. That honors Settings → File openers (e.g. .sqlSQL). Clicking a file in the Files tree still uses Files’ built-in preview — use these actions to leave it.

Compatibility and setup (SQL)

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • SQL plugin id sql with a compatible app bundle;
  • in Settings → File openers, set .sql to SQL (sql).
bb plugin install git:https://github.com/yazydzhi/bb-plugin-sql.git@^0.1.0 --yes
# or from a local checkout:# bb plugin install /path/to/bb-plugin-sql --yes

Hand-off / Current Status

This is a comprehensive summary of the current implementation for future maintenance and feature development.

What works

  • Multi-Tab Engine: Core useFilesWorkspace hook refactored to support array-based tabs state. Supports concurrent open files with independent draft buffers.
  • Persistence: Tab paths and active tab selection are persisted in localStorage per threadId. Tabs are automatically re-hydrated on panel remount.
  • UI Layout: IDE-like layout with a resizable/collapsible file tree on the right and an editor on the left.
  • Previews:
    • WYSIWYG Markdown preview with direct rendered-text editing and a Raw source fallback.
    • HTML preview with iframe refresh after save and an "Open preview" action.
    • Image preview for common formats.
  • Editor Features: 700ms autosave, SHA-based optimistic concurrency control (CAS) with conflict/overwrite UI, explicit download/copy actions.
  • Robustness: 10,000-entry tree cap, hidden dotfile probing, recursive delete/duplication/rename safety, and tests covering state transitions and persistence.

What is implemented (Key Architecture)

  • State: TabState tracks per-tab draftText, savedText, file metadata, and saveState.
  • Flow: Autosave and polling observe tabs array. File reads are throttled and deduplicated using fileLoadRequestsRef.
  • Sync: Conflict detection checks file SHA against remote every 10s.

Limitations & Known Issues

  • Scroll Position: Tab switching does not currently persist/restore scroll position (Codemirror instance reset).
  • Large Files: Files > 2MiB or non-text binaries are metadata-only (no content access).
  • Tab State: Only the tab path is persisted; draft contents are lost if the browser tab is refreshed (only panel-remount persistence is implemented).

Next Steps / Future Work

See ROADMAP.md for the complete idea backlog and proposed implementation phases. The highlighted directions are BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, replacing constant polling, tree virtualization, and stronger autosave concurrency.

Safety model

The frontend sends only threadId and project-relative paths. Every RPC resolves the thread environment again. Reads and mutations are confined with hostId and rootPath; listPaths receives the resolved absolute root because that SDK method has no rootPath field. Existing-file writes use their last-read SHA. New files use create-only writes. Folder duplication preflights at 501 entries and refuses more than 500.

Binary and oversized files are metadata-only. There is no fallback to the primary machine when the thread environment is unavailable.

BB plugins are full-trust code. Files can read, create, edit, move, duplicate, download, and delete files inside the selected thread environment, including common dotfiles such as .env and .npmrc. Destructive actions are initiated by the user through confirmation UI. The plugin has no telemetry, external service, or outbound network integration, and it does not send workspace contents elsewhere.

License

MIT

About

A standalone BB plugin that adds Actions → Files to every thread.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

BB Files

CI

A standalone BB plugin that adds Actions → Files to every thread. The panel is bound to that thread's live environment and uses bb.sdk.files, so the same tree/editor works on the local machine and connected hosts.

Install

BB Files requires BB >=0.35.1. Install the current tagged release:

bb plugin install 'git:https://github.com/Diffuzmetall/bb-plugin-files.git@v0.1.0' --yes

After the plugin is listed in the BB Community marketplace, BB can report and apply compatible tagged updates without installing them automatically:

bb plugin outdated
bb plugin update files

Releases use immutable vX.Y.Z Git tags. Marketplace updates within the current ^0.1.0 range are selected from those tags.

Project documentation

  • ROADMAP.md — detailed product and technical ideas. Highlighted directions include BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, filesystem-watch or adaptive-polling synchronization, performance, and reliability.

Features

  • Multi-Tab Editor: open multiple files simultaneously with a modern tab bar. Tabs persist per thread and are restored when the Files panel is reopened;
  • Resizable Layout: Modern IDE-style interface with the editor on the left and a resizable, collapsible file tree on the right;
  • bounded recursive tree (up to 10,000 files) with fuzzy file search;
  • Depth-first tree rendering: accurately reconstructs project hierarchy with auto-expansion of active file paths;
  • Hidden files support: dynamically probes and reveals common configuration dotfiles (e.g. .env, .gitignore, .github, .vscode, etc.) which are normally excluded by the host lister;
  • UTF-8 editing up to 2 MiB with CodeMirror 6;
  • directly editable WYSIWYG Markdown Preview, exact-source Raw mode, Image Previews, and HTML previews in an inline iframe or separate browser tab;
  • embedded Excalidraw editing for .excalidraw scenes, including theme synchronization and safe external links;
  • 700 ms autosave and Cmd/Ctrl+S;
  • SHA-based compare-and-swap with explicit Reload/Overwrite conflict handling;
  • 10-second tree/file external-change polling;
  • create, rename (safely preserves unsaved drafts), duplicate, recursive delete, copy file content, copy relative path, and download actions;
  • optional MD Annotate integration for opening Markdown files in a review/commenting tab;
  • optional SQL integration for opening .sql files with the preferred host opener (yazydzhi/bb-plugin-sql);
  • Open with preferred… on any file — reopens via BB’s host file flow so Settings → File openers apply (the in-panel editor itself does not);
  • narrow panel navigation with a Back control;
  • symlinks and node_modules remain excluded by BB's host lister.

Development

npm install --legacy-peer-deps
npm run typecheck
npm test
bb plugin build .
bb plugin install "$PWD" --yes

Then open a thread and choose New tab → Actions → Files in its right panel. During development, run bb plugin dev "$PWD".

MD Annotate integration

BB Files integrates optionally with DarrenTsung/bb-plugin-md-annotate, a Google Docs-style review surface for Markdown files.

When a compatible, running md-annotate plugin is detected, Markdown files receive two additional actions:

  • a comment icon in the active file toolbar;
  • Open in Annotate in the file context menu.

The actions are hidden when MD Annotate is not installed, disabled, failed, or frontend-incompatible. BB Files does not import, modify, or control MD Annotate; it asks BB to reopen the selected workspace file using the client's configured file opener.

Compatibility and setup

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • MD Annotate 0.1.x with plugin id md-annotate and opener id annotate;
  • .md, .mdx, and .markdown workspace files;
  • in Settings → File openers, set the Markdown extension you use to Annotate (md-annotate).

Install MD Annotate separately:

bb plugin install git:https://github.com/DarrenTsung/bb-plugin-md-annotate@main

The integration intentionally uses BB's standard file-open flow. Consequently, if Annotate is installed but is not the configured default for that extension, the action opens whichever viewer the client selected instead.

SQL integration

When a compatible, running sql plugin is detected, .sql files receive:

  • a terminal icon in the active file toolbar (Open in SQL);
  • Open in SQL in the file context menu.

Every file also gets Open with preferred… (toolbar + context menu), which asks BB to reopen the workspace path through the host. That honors Settings → File openers (e.g. .sqlSQL). Clicking a file in the Files tree still uses Files’ built-in preview — use these actions to leave it.

Compatibility and setup (SQL)

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • SQL plugin id sql with a compatible app bundle;
  • in Settings → File openers, set .sql to SQL (sql).
bb plugin install git:https://github.com/yazydzhi/bb-plugin-sql.git@^0.1.0 --yes
# or from a local checkout:# bb plugin install /path/to/bb-plugin-sql --yes

Hand-off / Current Status

This is a comprehensive summary of the current implementation for future maintenance and feature development.

What works

  • Multi-Tab Engine: Core useFilesWorkspace hook refactored to support array-based tabs state. Supports concurrent open files with independent draft buffers.
  • Persistence: Tab paths and active tab selection are persisted in localStorage per threadId. Tabs are automatically re-hydrated on panel remount.
  • UI Layout: IDE-like layout with a resizable/collapsible file tree on the right and an editor on the left.
  • Previews:
    • WYSIWYG Markdown preview with direct rendered-text editing and a Raw source fallback.
    • HTML preview with iframe refresh after save and an "Open preview" action.
    • Image preview for common formats.
  • Editor Features: 700ms autosave, SHA-based optimistic concurrency control (CAS) with conflict/overwrite UI, explicit download/copy actions.
  • Robustness: 10,000-entry tree cap, hidden dotfile probing, recursive delete/duplication/rename safety, and tests covering state transitions and persistence.

What is implemented (Key Architecture)

  • State: TabState tracks per-tab draftText, savedText, file metadata, and saveState.
  • Flow: Autosave and polling observe tabs array. File reads are throttled and deduplicated using fileLoadRequestsRef.
  • Sync: Conflict detection checks file SHA against remote every 10s.

Limitations & Known Issues

  • Scroll Position: Tab switching does not currently persist/restore scroll position (Codemirror instance reset).
  • Large Files: Files > 2MiB or non-text binaries are metadata-only (no content access).
  • Tab State: Only the tab path is persisted; draft contents are lost if the browser tab is refreshed (only panel-remount persistence is implemented).

Next Steps / Future Work

See ROADMAP.md for the complete idea backlog and proposed implementation phases. The highlighted directions are BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, replacing constant polling, tree virtualization, and stronger autosave concurrency.

Safety model

The frontend sends only threadId and project-relative paths. Every RPC resolves the thread environment again. Reads and mutations are confined with hostId and rootPath; listPaths receives the resolved absolute root because that SDK method has no rootPath field. Existing-file writes use their last-read SHA. New files use create-only writes. Folder duplication preflights at 501 entries and refuses more than 500.

Binary and oversized files are metadata-only. There is no fallback to the primary machine when the thread environment is unavailable.

BB plugins are full-trust code. Files can read, create, edit, move, duplicate, download, and delete files inside the selected thread environment, including common dotfiles such as .env and .npmrc. Destructive actions are initiated by the user through confirmation UI. The plugin has no telemetry, external service, or outbound network integration, and it does not send workspace contents elsewhere.

License

MIT

About

A standalone BB plugin that adds Actions → Files to every thread.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BB Files

CI

A standalone BB plugin that adds Actions → Files to every thread. The panel is bound to that thread's live environment and uses bb.sdk.files, so the same tree/editor works on the local machine and connected hosts.

Install

BB Files requires BB >=0.35.1. Install the current tagged release:

bb plugin install 'git:https://github.com/Diffuzmetall/bb-plugin-files.git@v0.1.0' --yes

After the plugin is listed in the BB Community marketplace, BB can report and apply compatible tagged updates without installing them automatically:

bb plugin outdated
bb plugin update files

Releases use immutable vX.Y.Z Git tags. Marketplace updates within the current ^0.1.0 range are selected from those tags.

Project documentation

  • ROADMAP.md — detailed product and technical ideas. Highlighted directions include BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, filesystem-watch or adaptive-polling synchronization, performance, and reliability.

Features

  • Multi-Tab Editor: open multiple files simultaneously with a modern tab bar. Tabs persist per thread and are restored when the Files panel is reopened;
  • Resizable Layout: Modern IDE-style interface with the editor on the left and a resizable, collapsible file tree on the right;
  • bounded recursive tree (up to 10,000 files) with fuzzy file search;
  • Depth-first tree rendering: accurately reconstructs project hierarchy with auto-expansion of active file paths;
  • Hidden files support: dynamically probes and reveals common configuration dotfiles (e.g. .env, .gitignore, .github, .vscode, etc.) which are normally excluded by the host lister;
  • UTF-8 editing up to 2 MiB with CodeMirror 6;
  • directly editable WYSIWYG Markdown Preview, exact-source Raw mode, Image Previews, and HTML previews in an inline iframe or separate browser tab;
  • embedded Excalidraw editing for .excalidraw scenes, including theme synchronization and safe external links;
  • 700 ms autosave and Cmd/Ctrl+S;
  • SHA-based compare-and-swap with explicit Reload/Overwrite conflict handling;
  • 10-second tree/file external-change polling;
  • create, rename (safely preserves unsaved drafts), duplicate, recursive delete, copy file content, copy relative path, and download actions;
  • optional MD Annotate integration for opening Markdown files in a review/commenting tab;
  • optional SQL integration for opening .sql files with the preferred host opener (yazydzhi/bb-plugin-sql);
  • Open with preferred… on any file — reopens via BB’s host file flow so Settings → File openers apply (the in-panel editor itself does not);
  • narrow panel navigation with a Back control;
  • symlinks and node_modules remain excluded by BB's host lister.

Development

npm install --legacy-peer-deps
npm run typecheck
npm test
bb plugin build .
bb plugin install "$PWD" --yes

Then open a thread and choose New tab → Actions → Files in its right panel. During development, run bb plugin dev "$PWD".

MD Annotate integration

BB Files integrates optionally with DarrenTsung/bb-plugin-md-annotate, a Google Docs-style review surface for Markdown files.

When a compatible, running md-annotate plugin is detected, Markdown files receive two additional actions:

  • a comment icon in the active file toolbar;
  • Open in Annotate in the file context menu.

The actions are hidden when MD Annotate is not installed, disabled, failed, or frontend-incompatible. BB Files does not import, modify, or control MD Annotate; it asks BB to reopen the selected workspace file using the client's configured file opener.

Compatibility and setup

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • MD Annotate 0.1.x with plugin id md-annotate and opener id annotate;
  • .md, .mdx, and .markdown workspace files;
  • in Settings → File openers, set the Markdown extension you use to Annotate (md-annotate).

Install MD Annotate separately:

bb plugin install git:https://github.com/DarrenTsung/bb-plugin-md-annotate@main

The integration intentionally uses BB's standard file-open flow. Consequently, if Annotate is installed but is not the configured default for that extension, the action opens whichever viewer the client selected instead.

SQL integration

When a compatible, running sql plugin is detected, .sql files receive:

  • a terminal icon in the active file toolbar (Open in SQL);
  • Open in SQL in the file context menu.

Every file also gets Open with preferred… (toolbar + context menu), which asks BB to reopen the workspace path through the host. That honors Settings → File openers (e.g. .sqlSQL). Clicking a file in the Files tree still uses Files’ built-in preview — use these actions to leave it.

Compatibility and setup (SQL)

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • SQL plugin id sql with a compatible app bundle;
  • in Settings → File openers, set .sql to SQL (sql).
bb plugin install git:https://github.com/yazydzhi/bb-plugin-sql.git@^0.1.0 --yes
# or from a local checkout:# bb plugin install /path/to/bb-plugin-sql --yes

Hand-off / Current Status

This is a comprehensive summary of the current implementation for future maintenance and feature development.

What works

  • Multi-Tab Engine: Core useFilesWorkspace hook refactored to support array-based tabs state. Supports concurrent open files with independent draft buffers.
  • Persistence: Tab paths and active tab selection are persisted in localStorage per threadId. Tabs are automatically re-hydrated on panel remount.
  • UI Layout: IDE-like layout with a resizable/collapsible file tree on the right and an editor on the left.
  • Previews:
    • WYSIWYG Markdown preview with direct rendered-text editing and a Raw source fallback.
    • HTML preview with iframe refresh after save and an "Open preview" action.
    • Image preview for common formats.
  • Editor Features: 700ms autosave, SHA-based optimistic concurrency control (CAS) with conflict/overwrite UI, explicit download/copy actions.
  • Robustness: 10,000-entry tree cap, hidden dotfile probing, recursive delete/duplication/rename safety, and tests covering state transitions and persistence.

What is implemented (Key Architecture)

  • State: TabState tracks per-tab draftText, savedText, file metadata, and saveState.
  • Flow: Autosave and polling observe tabs array. File reads are throttled and deduplicated using fileLoadRequestsRef.
  • Sync: Conflict detection checks file SHA against remote every 10s.

Limitations & Known Issues

  • Scroll Position: Tab switching does not currently persist/restore scroll position (Codemirror instance reset).
  • Large Files: Files > 2MiB or non-text binaries are metadata-only (no content access).
  • Tab State: Only the tab path is persisted; draft contents are lost if the browser tab is refreshed (only panel-remount persistence is implemented).

Next Steps / Future Work

See ROADMAP.md for the complete idea backlog and proposed implementation phases. The highlighted directions are BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, replacing constant polling, tree virtualization, and stronger autosave concurrency.

Safety model

The frontend sends only threadId and project-relative paths. Every RPC resolves the thread environment again. Reads and mutations are confined with hostId and rootPath; listPaths receives the resolved absolute root because that SDK method has no rootPath field. Existing-file writes use their last-read SHA. New files use create-only writes. Folder duplication preflights at 501 entries and refuses more than 500.

Binary and oversized files are metadata-only. There is no fallback to the primary machine when the thread environment is unavailable.

BB plugins are full-trust code. Files can read, create, edit, move, duplicate, download, and delete files inside the selected thread environment, including common dotfiles such as .env and .npmrc. Destructive actions are initiated by the user through confirmation UI. The plugin has no telemetry, external service, or outbound network integration, and it does not send workspace contents elsewhere.

License

MIT

About

A standalone BB plugin that adds Actions → Files to every thread.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BB Files

CI

A standalone BB plugin that adds Actions → Files to every thread. The panel is bound to that thread's live environment and uses bb.sdk.files, so the same tree/editor works on the local machine and connected hosts.

Install

BB Files requires BB >=0.35.1. Install the current tagged release:

bb plugin install 'git:https://github.com/Diffuzmetall/bb-plugin-files.git@v0.1.0' --yes

After the plugin is listed in the BB Community marketplace, BB can report and apply compatible tagged updates without installing them automatically:

bb plugin outdated
bb plugin update files

Releases use immutable vX.Y.Z Git tags. Marketplace updates within the current ^0.1.0 range are selected from those tags.

Project documentation

  • ROADMAP.md — detailed product and technical ideas. Highlighted directions include BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, filesystem-watch or adaptive-polling synchronization, performance, and reliability.

Features

  • Multi-Tab Editor: open multiple files simultaneously with a modern tab bar. Tabs persist per thread and are restored when the Files panel is reopened;
  • Resizable Layout: Modern IDE-style interface with the editor on the left and a resizable, collapsible file tree on the right;
  • bounded recursive tree (up to 10,000 files) with fuzzy file search;
  • Depth-first tree rendering: accurately reconstructs project hierarchy with auto-expansion of active file paths;
  • Hidden files support: dynamically probes and reveals common configuration dotfiles (e.g. .env, .gitignore, .github, .vscode, etc.) which are normally excluded by the host lister;
  • UTF-8 editing up to 2 MiB with CodeMirror 6;
  • directly editable WYSIWYG Markdown Preview, exact-source Raw mode, Image Previews, and HTML previews in an inline iframe or separate browser tab;
  • embedded Excalidraw editing for .excalidraw scenes, including theme synchronization and safe external links;
  • 700 ms autosave and Cmd/Ctrl+S;
  • SHA-based compare-and-swap with explicit Reload/Overwrite conflict handling;
  • 10-second tree/file external-change polling;
  • create, rename (safely preserves unsaved drafts), duplicate, recursive delete, copy file content, copy relative path, and download actions;
  • optional MD Annotate integration for opening Markdown files in a review/commenting tab;
  • optional SQL integration for opening .sql files with the preferred host opener (yazydzhi/bb-plugin-sql);
  • Open with preferred… on any file — reopens via BB’s host file flow so Settings → File openers apply (the in-panel editor itself does not);
  • narrow panel navigation with a Back control;
  • symlinks and node_modules remain excluded by BB's host lister.

Development

npm install --legacy-peer-deps
npm run typecheck
npm test
bb plugin build .
bb plugin install "$PWD" --yes

Then open a thread and choose New tab → Actions → Files in its right panel. During development, run bb plugin dev "$PWD".

MD Annotate integration

BB Files integrates optionally with DarrenTsung/bb-plugin-md-annotate, a Google Docs-style review surface for Markdown files.

When a compatible, running md-annotate plugin is detected, Markdown files receive two additional actions:

  • a comment icon in the active file toolbar;
  • Open in Annotate in the file context menu.

The actions are hidden when MD Annotate is not installed, disabled, failed, or frontend-incompatible. BB Files does not import, modify, or control MD Annotate; it asks BB to reopen the selected workspace file using the client's configured file opener.

Compatibility and setup

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • MD Annotate 0.1.x with plugin id md-annotate and opener id annotate;
  • .md, .mdx, and .markdown workspace files;
  • in Settings → File openers, set the Markdown extension you use to Annotate (md-annotate).

Install MD Annotate separately:

bb plugin install git:https://github.com/DarrenTsung/bb-plugin-md-annotate@main

The integration intentionally uses BB's standard file-open flow. Consequently, if Annotate is installed but is not the configured default for that extension, the action opens whichever viewer the client selected instead.

SQL integration

When a compatible, running sql plugin is detected, .sql files receive:

  • a terminal icon in the active file toolbar (Open in SQL);
  • Open in SQL in the file context menu.

Every file also gets Open with preferred… (toolbar + context menu), which asks BB to reopen the workspace path through the host. That honors Settings → File openers (e.g. .sqlSQL). Clicking a file in the Files tree still uses Files’ built-in preview — use these actions to leave it.

Compatibility and setup (SQL)

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • SQL plugin id sql with a compatible app bundle;
  • in Settings → File openers, set .sql to SQL (sql).
bb plugin install git:https://github.com/yazydzhi/bb-plugin-sql.git@^0.1.0 --yes
# or from a local checkout:# bb plugin install /path/to/bb-plugin-sql --yes

Hand-off / Current Status

This is a comprehensive summary of the current implementation for future maintenance and feature development.

What works

  • Multi-Tab Engine: Core useFilesWorkspace hook refactored to support array-based tabs state. Supports concurrent open files with independent draft buffers.
  • Persistence: Tab paths and active tab selection are persisted in localStorage per threadId. Tabs are automatically re-hydrated on panel remount.
  • UI Layout: IDE-like layout with a resizable/collapsible file tree on the right and an editor on the left.
  • Previews:
    • WYSIWYG Markdown preview with direct rendered-text editing and a Raw source fallback.
    • HTML preview with iframe refresh after save and an "Open preview" action.
    • Image preview for common formats.
  • Editor Features: 700ms autosave, SHA-based optimistic concurrency control (CAS) with conflict/overwrite UI, explicit download/copy actions.
  • Robustness: 10,000-entry tree cap, hidden dotfile probing, recursive delete/duplication/rename safety, and tests covering state transitions and persistence.

What is implemented (Key Architecture)

  • State: TabState tracks per-tab draftText, savedText, file metadata, and saveState.
  • Flow: Autosave and polling observe tabs array. File reads are throttled and deduplicated using fileLoadRequestsRef.
  • Sync: Conflict detection checks file SHA against remote every 10s.

Limitations & Known Issues

  • Scroll Position: Tab switching does not currently persist/restore scroll position (Codemirror instance reset).
  • Large Files: Files > 2MiB or non-text binaries are metadata-only (no content access).
  • Tab State: Only the tab path is persisted; draft contents are lost if the browser tab is refreshed (only panel-remount persistence is implemented).

Next Steps / Future Work

See ROADMAP.md for the complete idea backlog and proposed implementation phases. The highlighted directions are BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, replacing constant polling, tree virtualization, and stronger autosave concurrency.

Safety model

The frontend sends only threadId and project-relative paths. Every RPC resolves the thread environment again. Reads and mutations are confined with hostId and rootPath; listPaths receives the resolved absolute root because that SDK method has no rootPath field. Existing-file writes use their last-read SHA. New files use create-only writes. Folder duplication preflights at 501 entries and refuses more than 500.

Binary and oversized files are metadata-only. There is no fallback to the primary machine when the thread environment is unavailable.

BB plugins are full-trust code. Files can read, create, edit, move, duplicate, download, and delete files inside the selected thread environment, including common dotfiles such as .env and .npmrc. Destructive actions are initiated by the user through confirmation UI. The plugin has no telemetry, external service, or outbound network integration, and it does not send workspace contents elsewhere.

License

MIT

About

A standalone BB plugin that adds Actions → Files to every thread.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

BB Files

CI

A standalone BB plugin that adds Actions → Files to every thread. The panel is bound to that thread's live environment and uses bb.sdk.files, so the same tree/editor works on the local machine and connected hosts.

Install

BB Files requires BB >=0.35.1. Install the current tagged release:

bb plugin install 'git:https://github.com/Diffuzmetall/bb-plugin-files.git@v0.1.0' --yes

After the plugin is listed in the BB Community marketplace, BB can report and apply compatible tagged updates without installing them automatically:

bb plugin outdated
bb plugin update files

Releases use immutable vX.Y.Z Git tags. Marketplace updates within the current ^0.1.0 range are selected from those tags.

Project documentation

  • ROADMAP.md — detailed product and technical ideas. Highlighted directions include BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, filesystem-watch or adaptive-polling synchronization, performance, and reliability.

Features

  • Multi-Tab Editor: open multiple files simultaneously with a modern tab bar. Tabs persist per thread and are restored when the Files panel is reopened;
  • Resizable Layout: Modern IDE-style interface with the editor on the left and a resizable, collapsible file tree on the right;
  • bounded recursive tree (up to 10,000 files) with fuzzy file search;
  • Depth-first tree rendering: accurately reconstructs project hierarchy with auto-expansion of active file paths;
  • Hidden files support: dynamically probes and reveals common configuration dotfiles (e.g. .env, .gitignore, .github, .vscode, etc.) which are normally excluded by the host lister;
  • UTF-8 editing up to 2 MiB with CodeMirror 6;
  • directly editable WYSIWYG Markdown Preview, exact-source Raw mode, Image Previews, and HTML previews in an inline iframe or separate browser tab;
  • embedded Excalidraw editing for .excalidraw scenes, including theme synchronization and safe external links;
  • 700 ms autosave and Cmd/Ctrl+S;
  • SHA-based compare-and-swap with explicit Reload/Overwrite conflict handling;
  • 10-second tree/file external-change polling;
  • create, rename (safely preserves unsaved drafts), duplicate, recursive delete, copy file content, copy relative path, and download actions;
  • optional MD Annotate integration for opening Markdown files in a review/commenting tab;
  • optional SQL integration for opening .sql files with the preferred host opener (yazydzhi/bb-plugin-sql);
  • Open with preferred… on any file — reopens via BB’s host file flow so Settings → File openers apply (the in-panel editor itself does not);
  • narrow panel navigation with a Back control;
  • symlinks and node_modules remain excluded by BB's host lister.

Development

npm install --legacy-peer-deps
npm run typecheck
npm test
bb plugin build .
bb plugin install "$PWD" --yes

Then open a thread and choose New tab → Actions → Files in its right panel. During development, run bb plugin dev "$PWD".

MD Annotate integration

BB Files integrates optionally with DarrenTsung/bb-plugin-md-annotate, a Google Docs-style review surface for Markdown files.

When a compatible, running md-annotate plugin is detected, Markdown files receive two additional actions:

  • a comment icon in the active file toolbar;
  • Open in Annotate in the file context menu.

The actions are hidden when MD Annotate is not installed, disabled, failed, or frontend-incompatible. BB Files does not import, modify, or control MD Annotate; it asks BB to reopen the selected workspace file using the client's configured file opener.

Compatibility and setup

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • MD Annotate 0.1.x with plugin id md-annotate and opener id annotate;
  • .md, .mdx, and .markdown workspace files;
  • in Settings → File openers, set the Markdown extension you use to Annotate (md-annotate).

Install MD Annotate separately:

bb plugin install git:https://github.com/DarrenTsung/bb-plugin-md-annotate@main

The integration intentionally uses BB's standard file-open flow. Consequently, if Annotate is installed but is not the configured default for that extension, the action opens whichever viewer the client selected instead.

SQL integration

When a compatible, running sql plugin is detected, .sql files receive:

  • a terminal icon in the active file toolbar (Open in SQL);
  • Open in SQL in the file context menu.

Every file also gets Open with preferred… (toolbar + context menu), which asks BB to reopen the workspace path through the host. That honors Settings → File openers (e.g. .sqlSQL). Clicking a file in the Files tree still uses Files’ built-in preview — use these actions to leave it.

Compatibility and setup (SQL)

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • SQL plugin id sql with a compatible app bundle;
  • in Settings → File openers, set .sql to SQL (sql).
bb plugin install git:https://github.com/yazydzhi/bb-plugin-sql.git@^0.1.0 --yes
# or from a local checkout:# bb plugin install /path/to/bb-plugin-sql --yes

Hand-off / Current Status

This is a comprehensive summary of the current implementation for future maintenance and feature development.

What works

  • Multi-Tab Engine: Core useFilesWorkspace hook refactored to support array-based tabs state. Supports concurrent open files with independent draft buffers.
  • Persistence: Tab paths and active tab selection are persisted in localStorage per threadId. Tabs are automatically re-hydrated on panel remount.
  • UI Layout: IDE-like layout with a resizable/collapsible file tree on the right and an editor on the left.
  • Previews:
    • WYSIWYG Markdown preview with direct rendered-text editing and a Raw source fallback.
    • HTML preview with iframe refresh after save and an "Open preview" action.
    • Image preview for common formats.
  • Editor Features: 700ms autosave, SHA-based optimistic concurrency control (CAS) with conflict/overwrite UI, explicit download/copy actions.
  • Robustness: 10,000-entry tree cap, hidden dotfile probing, recursive delete/duplication/rename safety, and tests covering state transitions and persistence.

What is implemented (Key Architecture)

  • State: TabState tracks per-tab draftText, savedText, file metadata, and saveState.
  • Flow: Autosave and polling observe tabs array. File reads are throttled and deduplicated using fileLoadRequestsRef.
  • Sync: Conflict detection checks file SHA against remote every 10s.

Limitations & Known Issues

  • Scroll Position: Tab switching does not currently persist/restore scroll position (Codemirror instance reset).
  • Large Files: Files > 2MiB or non-text binaries are metadata-only (no content access).
  • Tab State: Only the tab path is persisted; draft contents are lost if the browser tab is refreshed (only panel-remount persistence is implemented).

Next Steps / Future Work

See ROADMAP.md for the complete idea backlog and proposed implementation phases. The highlighted directions are BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, replacing constant polling, tree virtualization, and stronger autosave concurrency.

Safety model

The frontend sends only threadId and project-relative paths. Every RPC resolves the thread environment again. Reads and mutations are confined with hostId and rootPath; listPaths receives the resolved absolute root because that SDK method has no rootPath field. Existing-file writes use their last-read SHA. New files use create-only writes. Folder duplication preflights at 501 entries and refuses more than 500.

Binary and oversized files are metadata-only. There is no fallback to the primary machine when the thread environment is unavailable.

BB plugins are full-trust code. Files can read, create, edit, move, duplicate, download, and delete files inside the selected thread environment, including common dotfiles such as .env and .npmrc. Destructive actions are initiated by the user through confirmation UI. The plugin has no telemetry, external service, or outbound network integration, and it does not send workspace contents elsewhere.

License

MIT

About

A standalone BB plugin that adds Actions → Files to every thread.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BB Files

CI

A standalone BB plugin that adds Actions → Files to every thread. The panel is bound to that thread's live environment and uses bb.sdk.files, so the same tree/editor works on the local machine and connected hosts.

Install

BB Files requires BB >=0.35.1. Install the current tagged release:

bb plugin install 'git:https://github.com/Diffuzmetall/bb-plugin-files.git@v0.1.0' --yes

After the plugin is listed in the BB Community marketplace, BB can report and apply compatible tagged updates without installing them automatically:

bb plugin outdated
bb plugin update files

Releases use immutable vX.Y.Z Git tags. Marketplace updates within the current ^0.1.0 range are selected from those tags.

Project documentation

  • ROADMAP.md — detailed product and technical ideas. Highlighted directions include BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, filesystem-watch or adaptive-polling synchronization, performance, and reliability.

Features

  • Multi-Tab Editor: open multiple files simultaneously with a modern tab bar. Tabs persist per thread and are restored when the Files panel is reopened;
  • Resizable Layout: Modern IDE-style interface with the editor on the left and a resizable, collapsible file tree on the right;
  • bounded recursive tree (up to 10,000 files) with fuzzy file search;
  • Depth-first tree rendering: accurately reconstructs project hierarchy with auto-expansion of active file paths;
  • Hidden files support: dynamically probes and reveals common configuration dotfiles (e.g. .env, .gitignore, .github, .vscode, etc.) which are normally excluded by the host lister;
  • UTF-8 editing up to 2 MiB with CodeMirror 6;
  • directly editable WYSIWYG Markdown Preview, exact-source Raw mode, Image Previews, and HTML previews in an inline iframe or separate browser tab;
  • embedded Excalidraw editing for .excalidraw scenes, including theme synchronization and safe external links;
  • 700 ms autosave and Cmd/Ctrl+S;
  • SHA-based compare-and-swap with explicit Reload/Overwrite conflict handling;
  • 10-second tree/file external-change polling;
  • create, rename (safely preserves unsaved drafts), duplicate, recursive delete, copy file content, copy relative path, and download actions;
  • optional MD Annotate integration for opening Markdown files in a review/commenting tab;
  • optional SQL integration for opening .sql files with the preferred host opener (yazydzhi/bb-plugin-sql);
  • Open with preferred… on any file — reopens via BB’s host file flow so Settings → File openers apply (the in-panel editor itself does not);
  • narrow panel navigation with a Back control;
  • symlinks and node_modules remain excluded by BB's host lister.

Development

npm install --legacy-peer-deps
npm run typecheck
npm test
bb plugin build .
bb plugin install "$PWD" --yes

Then open a thread and choose New tab → Actions → Files in its right panel. During development, run bb plugin dev "$PWD".

MD Annotate integration

BB Files integrates optionally with DarrenTsung/bb-plugin-md-annotate, a Google Docs-style review surface for Markdown files.

When a compatible, running md-annotate plugin is detected, Markdown files receive two additional actions:

  • a comment icon in the active file toolbar;
  • Open in Annotate in the file context menu.

The actions are hidden when MD Annotate is not installed, disabled, failed, or frontend-incompatible. BB Files does not import, modify, or control MD Annotate; it asks BB to reopen the selected workspace file using the client's configured file opener.

Compatibility and setup

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • MD Annotate 0.1.x with plugin id md-annotate and opener id annotate;
  • .md, .mdx, and .markdown workspace files;
  • in Settings → File openers, set the Markdown extension you use to Annotate (md-annotate).

Install MD Annotate separately:

bb plugin install git:https://github.com/DarrenTsung/bb-plugin-md-annotate@main

The integration intentionally uses BB's standard file-open flow. Consequently, if Annotate is installed but is not the configured default for that extension, the action opens whichever viewer the client selected instead.

SQL integration

When a compatible, running sql plugin is detected, .sql files receive:

  • a terminal icon in the active file toolbar (Open in SQL);
  • Open in SQL in the file context menu.

Every file also gets Open with preferred… (toolbar + context menu), which asks BB to reopen the workspace path through the host. That honors Settings → File openers (e.g. .sqlSQL). Clicking a file in the Files tree still uses Files’ built-in preview — use these actions to leave it.

Compatibility and setup (SQL)

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • SQL plugin id sql with a compatible app bundle;
  • in Settings → File openers, set .sql to SQL (sql).
bb plugin install git:https://github.com/yazydzhi/bb-plugin-sql.git@^0.1.0 --yes
# or from a local checkout:# bb plugin install /path/to/bb-plugin-sql --yes

Hand-off / Current Status

This is a comprehensive summary of the current implementation for future maintenance and feature development.

What works

  • Multi-Tab Engine: Core useFilesWorkspace hook refactored to support array-based tabs state. Supports concurrent open files with independent draft buffers.
  • Persistence: Tab paths and active tab selection are persisted in localStorage per threadId. Tabs are automatically re-hydrated on panel remount.
  • UI Layout: IDE-like layout with a resizable/collapsible file tree on the right and an editor on the left.
  • Previews:
    • WYSIWYG Markdown preview with direct rendered-text editing and a Raw source fallback.
    • HTML preview with iframe refresh after save and an "Open preview" action.
    • Image preview for common formats.
  • Editor Features: 700ms autosave, SHA-based optimistic concurrency control (CAS) with conflict/overwrite UI, explicit download/copy actions.
  • Robustness: 10,000-entry tree cap, hidden dotfile probing, recursive delete/duplication/rename safety, and tests covering state transitions and persistence.

What is implemented (Key Architecture)

  • State: TabState tracks per-tab draftText, savedText, file metadata, and saveState.
  • Flow: Autosave and polling observe tabs array. File reads are throttled and deduplicated using fileLoadRequestsRef.
  • Sync: Conflict detection checks file SHA against remote every 10s.

Limitations & Known Issues

  • Scroll Position: Tab switching does not currently persist/restore scroll position (Codemirror instance reset).
  • Large Files: Files > 2MiB or non-text binaries are metadata-only (no content access).
  • Tab State: Only the tab path is persisted; draft contents are lost if the browser tab is refreshed (only panel-remount persistence is implemented).

Next Steps / Future Work

See ROADMAP.md for the complete idea backlog and proposed implementation phases. The highlighted directions are BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, replacing constant polling, tree virtualization, and stronger autosave concurrency.

Safety model

The frontend sends only threadId and project-relative paths. Every RPC resolves the thread environment again. Reads and mutations are confined with hostId and rootPath; listPaths receives the resolved absolute root because that SDK method has no rootPath field. Existing-file writes use their last-read SHA. New files use create-only writes. Folder duplication preflights at 501 entries and refuses more than 500.

Binary and oversized files are metadata-only. There is no fallback to the primary machine when the thread environment is unavailable.

BB plugins are full-trust code. Files can read, create, edit, move, duplicate, download, and delete files inside the selected thread environment, including common dotfiles such as .env and .npmrc. Destructive actions are initiated by the user through confirmation UI. The plugin has no telemetry, external service, or outbound network integration, and it does not send workspace contents elsewhere.

License

MIT

About

A standalone BB plugin that adds Actions → Files to every thread.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BB Files

CI

A standalone BB plugin that adds Actions → Files to every thread. The panel is bound to that thread's live environment and uses bb.sdk.files, so the same tree/editor works on the local machine and connected hosts.

Install

BB Files requires BB >=0.35.1. Install the current tagged release:

bb plugin install 'git:https://github.com/Diffuzmetall/bb-plugin-files.git@v0.1.0' --yes

After the plugin is listed in the BB Community marketplace, BB can report and apply compatible tagged updates without installing them automatically:

bb plugin outdated
bb plugin update files

Releases use immutable vX.Y.Z Git tags. Marketplace updates within the current ^0.1.0 range are selected from those tags.

Project documentation

  • ROADMAP.md — detailed product and technical ideas. Highlighted directions include BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, filesystem-watch or adaptive-polling synchronization, performance, and reliability.

Features

  • Multi-Tab Editor: open multiple files simultaneously with a modern tab bar. Tabs persist per thread and are restored when the Files panel is reopened;
  • Resizable Layout: Modern IDE-style interface with the editor on the left and a resizable, collapsible file tree on the right;
  • bounded recursive tree (up to 10,000 files) with fuzzy file search;
  • Depth-first tree rendering: accurately reconstructs project hierarchy with auto-expansion of active file paths;
  • Hidden files support: dynamically probes and reveals common configuration dotfiles (e.g. .env, .gitignore, .github, .vscode, etc.) which are normally excluded by the host lister;
  • UTF-8 editing up to 2 MiB with CodeMirror 6;
  • directly editable WYSIWYG Markdown Preview, exact-source Raw mode, Image Previews, and HTML previews in an inline iframe or separate browser tab;
  • embedded Excalidraw editing for .excalidraw scenes, including theme synchronization and safe external links;
  • 700 ms autosave and Cmd/Ctrl+S;
  • SHA-based compare-and-swap with explicit Reload/Overwrite conflict handling;
  • 10-second tree/file external-change polling;
  • create, rename (safely preserves unsaved drafts), duplicate, recursive delete, copy file content, copy relative path, and download actions;
  • optional MD Annotate integration for opening Markdown files in a review/commenting tab;
  • optional SQL integration for opening .sql files with the preferred host opener (yazydzhi/bb-plugin-sql);
  • Open with preferred… on any file — reopens via BB’s host file flow so Settings → File openers apply (the in-panel editor itself does not);
  • narrow panel navigation with a Back control;
  • symlinks and node_modules remain excluded by BB's host lister.

Development

npm install --legacy-peer-deps
npm run typecheck
npm test
bb plugin build .
bb plugin install "$PWD" --yes

Then open a thread and choose New tab → Actions → Files in its right panel. During development, run bb plugin dev "$PWD".

MD Annotate integration

BB Files integrates optionally with DarrenTsung/bb-plugin-md-annotate, a Google Docs-style review surface for Markdown files.

When a compatible, running md-annotate plugin is detected, Markdown files receive two additional actions:

  • a comment icon in the active file toolbar;
  • Open in Annotate in the file context menu.

The actions are hidden when MD Annotate is not installed, disabled, failed, or frontend-incompatible. BB Files does not import, modify, or control MD Annotate; it asks BB to reopen the selected workspace file using the client's configured file opener.

Compatibility and setup

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • MD Annotate 0.1.x with plugin id md-annotate and opener id annotate;
  • .md, .mdx, and .markdown workspace files;
  • in Settings → File openers, set the Markdown extension you use to Annotate (md-annotate).

Install MD Annotate separately:

bb plugin install git:https://github.com/DarrenTsung/bb-plugin-md-annotate@main

The integration intentionally uses BB's standard file-open flow. Consequently, if Annotate is installed but is not the configured default for that extension, the action opens whichever viewer the client selected instead.

SQL integration

When a compatible, running sql plugin is detected, .sql files receive:

  • a terminal icon in the active file toolbar (Open in SQL);
  • Open in SQL in the file context menu.

Every file also gets Open with preferred… (toolbar + context menu), which asks BB to reopen the workspace path through the host. That honors Settings → File openers (e.g. .sqlSQL). Clicking a file in the Files tree still uses Files’ built-in preview — use these actions to leave it.

Compatibility and setup (SQL)

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • SQL plugin id sql with a compatible app bundle;
  • in Settings → File openers, set .sql to SQL (sql).
bb plugin install git:https://github.com/yazydzhi/bb-plugin-sql.git@^0.1.0 --yes
# or from a local checkout:# bb plugin install /path/to/bb-plugin-sql --yes

Hand-off / Current Status

This is a comprehensive summary of the current implementation for future maintenance and feature development.

What works

  • Multi-Tab Engine: Core useFilesWorkspace hook refactored to support array-based tabs state. Supports concurrent open files with independent draft buffers.
  • Persistence: Tab paths and active tab selection are persisted in localStorage per threadId. Tabs are automatically re-hydrated on panel remount.
  • UI Layout: IDE-like layout with a resizable/collapsible file tree on the right and an editor on the left.
  • Previews:
    • WYSIWYG Markdown preview with direct rendered-text editing and a Raw source fallback.
    • HTML preview with iframe refresh after save and an "Open preview" action.
    • Image preview for common formats.
  • Editor Features: 700ms autosave, SHA-based optimistic concurrency control (CAS) with conflict/overwrite UI, explicit download/copy actions.
  • Robustness: 10,000-entry tree cap, hidden dotfile probing, recursive delete/duplication/rename safety, and tests covering state transitions and persistence.

What is implemented (Key Architecture)

  • State: TabState tracks per-tab draftText, savedText, file metadata, and saveState.
  • Flow: Autosave and polling observe tabs array. File reads are throttled and deduplicated using fileLoadRequestsRef.
  • Sync: Conflict detection checks file SHA against remote every 10s.

Limitations & Known Issues

  • Scroll Position: Tab switching does not currently persist/restore scroll position (Codemirror instance reset).
  • Large Files: Files > 2MiB or non-text binaries are metadata-only (no content access).
  • Tab State: Only the tab path is persisted; draft contents are lost if the browser tab is refreshed (only panel-remount persistence is implemented).

Next Steps / Future Work

See ROADMAP.md for the complete idea backlog and proposed implementation phases. The highlighted directions are BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, replacing constant polling, tree virtualization, and stronger autosave concurrency.

Safety model

The frontend sends only threadId and project-relative paths. Every RPC resolves the thread environment again. Reads and mutations are confined with hostId and rootPath; listPaths receives the resolved absolute root because that SDK method has no rootPath field. Existing-file writes use their last-read SHA. New files use create-only writes. Folder duplication preflights at 501 entries and refuses more than 500.

Binary and oversized files are metadata-only. There is no fallback to the primary machine when the thread environment is unavailable.

BB plugins are full-trust code. Files can read, create, edit, move, duplicate, download, and delete files inside the selected thread environment, including common dotfiles such as .env and .npmrc. Destructive actions are initiated by the user through confirmation UI. The plugin has no telemetry, external service, or outbound network integration, and it does not send workspace contents elsewhere.

License

MIT

About

A standalone BB plugin that adds Actions → Files to every thread.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

BB Files

CI

A standalone BB plugin that adds Actions → Files to every thread. The panel is bound to that thread's live environment and uses bb.sdk.files, so the same tree/editor works on the local machine and connected hosts.

Install

BB Files requires BB >=0.35.1. Install the current tagged release:

bb plugin install 'git:https://github.com/Diffuzmetall/bb-plugin-files.git@v0.1.0' --yes

After the plugin is listed in the BB Community marketplace, BB can report and apply compatible tagged updates without installing them automatically:

bb plugin outdated
bb plugin update files

Releases use immutable vX.Y.Z Git tags. Marketplace updates within the current ^0.1.0 range are selected from those tags.

Project documentation

  • ROADMAP.md — detailed product and technical ideas. Highlighted directions include BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, filesystem-watch or adaptive-polling synchronization, performance, and reliability.

Features

  • Multi-Tab Editor: open multiple files simultaneously with a modern tab bar. Tabs persist per thread and are restored when the Files panel is reopened;
  • Resizable Layout: Modern IDE-style interface with the editor on the left and a resizable, collapsible file tree on the right;
  • bounded recursive tree (up to 10,000 files) with fuzzy file search;
  • Depth-first tree rendering: accurately reconstructs project hierarchy with auto-expansion of active file paths;
  • Hidden files support: dynamically probes and reveals common configuration dotfiles (e.g. .env, .gitignore, .github, .vscode, etc.) which are normally excluded by the host lister;
  • UTF-8 editing up to 2 MiB with CodeMirror 6;
  • directly editable WYSIWYG Markdown Preview, exact-source Raw mode, Image Previews, and HTML previews in an inline iframe or separate browser tab;
  • embedded Excalidraw editing for .excalidraw scenes, including theme synchronization and safe external links;
  • 700 ms autosave and Cmd/Ctrl+S;
  • SHA-based compare-and-swap with explicit Reload/Overwrite conflict handling;
  • 10-second tree/file external-change polling;
  • create, rename (safely preserves unsaved drafts), duplicate, recursive delete, copy file content, copy relative path, and download actions;
  • optional MD Annotate integration for opening Markdown files in a review/commenting tab;
  • optional SQL integration for opening .sql files with the preferred host opener (yazydzhi/bb-plugin-sql);
  • Open with preferred… on any file — reopens via BB’s host file flow so Settings → File openers apply (the in-panel editor itself does not);
  • narrow panel navigation with a Back control;
  • symlinks and node_modules remain excluded by BB's host lister.

Development

npm install --legacy-peer-deps
npm run typecheck
npm test
bb plugin build .
bb plugin install "$PWD" --yes

Then open a thread and choose New tab → Actions → Files in its right panel. During development, run bb plugin dev "$PWD".

MD Annotate integration

BB Files integrates optionally with DarrenTsung/bb-plugin-md-annotate, a Google Docs-style review surface for Markdown files.

When a compatible, running md-annotate plugin is detected, Markdown files receive two additional actions:

  • a comment icon in the active file toolbar;
  • Open in Annotate in the file context menu.

The actions are hidden when MD Annotate is not installed, disabled, failed, or frontend-incompatible. BB Files does not import, modify, or control MD Annotate; it asks BB to reopen the selected workspace file using the client's configured file opener.

Compatibility and setup

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • MD Annotate 0.1.x with plugin id md-annotate and opener id annotate;
  • .md, .mdx, and .markdown workspace files;
  • in Settings → File openers, set the Markdown extension you use to Annotate (md-annotate).

Install MD Annotate separately:

bb plugin install git:https://github.com/DarrenTsung/bb-plugin-md-annotate@main

The integration intentionally uses BB's standard file-open flow. Consequently, if Annotate is installed but is not the configured default for that extension, the action opens whichever viewer the client selected instead.

SQL integration

When a compatible, running sql plugin is detected, .sql files receive:

  • a terminal icon in the active file toolbar (Open in SQL);
  • Open in SQL in the file context menu.

Every file also gets Open with preferred… (toolbar + context menu), which asks BB to reopen the workspace path through the host. That honors Settings → File openers (e.g. .sqlSQL). Clicking a file in the Files tree still uses Files’ built-in preview — use these actions to leave it.

Compatibility and setup (SQL)

  • BB >=0.35.1 with Plugin SDK ^0.4.1;
  • SQL plugin id sql with a compatible app bundle;
  • in Settings → File openers, set .sql to SQL (sql).
bb plugin install git:https://github.com/yazydzhi/bb-plugin-sql.git@^0.1.0 --yes
# or from a local checkout:# bb plugin install /path/to/bb-plugin-sql --yes

Hand-off / Current Status

This is a comprehensive summary of the current implementation for future maintenance and feature development.

What works

  • Multi-Tab Engine: Core useFilesWorkspace hook refactored to support array-based tabs state. Supports concurrent open files with independent draft buffers.
  • Persistence: Tab paths and active tab selection are persisted in localStorage per threadId. Tabs are automatically re-hydrated on panel remount.
  • UI Layout: IDE-like layout with a resizable/collapsible file tree on the right and an editor on the left.
  • Previews:
    • WYSIWYG Markdown preview with direct rendered-text editing and a Raw source fallback.
    • HTML preview with iframe refresh after save and an "Open preview" action.
    • Image preview for common formats.
  • Editor Features: 700ms autosave, SHA-based optimistic concurrency control (CAS) with conflict/overwrite UI, explicit download/copy actions.
  • Robustness: 10,000-entry tree cap, hidden dotfile probing, recursive delete/duplication/rename safety, and tests covering state transitions and persistence.

What is implemented (Key Architecture)

  • State: TabState tracks per-tab draftText, savedText, file metadata, and saveState.
  • Flow: Autosave and polling observe tabs array. File reads are throttled and deduplicated using fileLoadRequestsRef.
  • Sync: Conflict detection checks file SHA against remote every 10s.

Limitations & Known Issues

  • Scroll Position: Tab switching does not currently persist/restore scroll position (Codemirror instance reset).
  • Large Files: Files > 2MiB or non-text binaries are metadata-only (no content access).
  • Tab State: Only the tab path is persisted; draft contents are lost if the browser tab is refreshed (only panel-remount persistence is implemented).

Next Steps / Future Work

See ROADMAP.md for the complete idea backlog and proposed implementation phases. The highlighted directions are BB agent integration, breadcrumbs, secure workspace previews, richer HTML/image tooling, replacing constant polling, tree virtualization, and stronger autosave concurrency.

Safety model

The frontend sends only threadId and project-relative paths. Every RPC resolves the thread environment again. Reads and mutations are confined with hostId and rootPath; listPaths receives the resolved absolute root because that SDK method has no rootPath field. Existing-file writes use their last-read SHA. New files use create-only writes. Folder duplication preflights at 501 entries and refuses more than 500.

Binary and oversized files are metadata-only. There is no fallback to the primary machine when the thread environment is unavailable.

BB plugins are full-trust code. Files can read, create, edit, move, duplicate, download, and delete files inside the selected thread environment, including common dotfiles such as .env and .npmrc. Destructive actions are initiated by the user through confirmation UI. The plugin has no telemetry, external service, or outbound network integration, and it does not send workspace contents elsewhere.

License

MIT

About

A standalone BB plugin that adds Actions → Files to every thread.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages