From 784ac4375ccb38af9d931fc6d9f7a22bc58e9bc6 Mon Sep 17 00:00:00 2001 From: Bersabel Tadesse Date: Fri, 21 Aug 2026 00:36:30 -0700 Subject: [PATCH] Add Open in Moss plugin --- README.md | 10 + package-lock.json | 29 +++ plugins/open-in-moss/README.md | 26 +++ plugins/open-in-moss/app.test.tsx | 134 ++++++++++++ plugins/open-in-moss/app.tsx | 101 +++++++++ .../ui/hooks/use-compact-viewport.tsx | 37 ++++ .../components/ui/hooks/use-media-query.ts | 72 ++++++ plugins/open-in-moss/dist/app.css | 133 +++++++++++ plugins/open-in-moss/dist/app.js | 116 ++++++++++ plugins/open-in-moss/dist/app.meta.json | 11 + plugins/open-in-moss/dist/server.js | 174 +++++++++++++++ plugins/open-in-moss/dist/server.js.map | 7 + plugins/open-in-moss/dist/server.meta.json | 11 + plugins/open-in-moss/docs/screenshot.png | Bin 0 -> 176398 bytes plugins/open-in-moss/package.json | 50 +++++ plugins/open-in-moss/server.test.ts | 119 ++++++++++ plugins/open-in-moss/server.ts | 206 ++++++++++++++++++ plugins/open-in-moss/tsconfig.json | 30 +++ plugins/open-in-moss/vitest.config.ts | 8 + 19 files changed, 1274 insertions(+) create mode 100644 plugins/open-in-moss/README.md create mode 100644 plugins/open-in-moss/app.test.tsx create mode 100644 plugins/open-in-moss/app.tsx create mode 100644 plugins/open-in-moss/components/ui/hooks/use-compact-viewport.tsx create mode 100644 plugins/open-in-moss/components/ui/hooks/use-media-query.ts create mode 100644 plugins/open-in-moss/dist/app.css create mode 100644 plugins/open-in-moss/dist/app.js create mode 100644 plugins/open-in-moss/dist/app.meta.json create mode 100644 plugins/open-in-moss/dist/server.js create mode 100644 plugins/open-in-moss/dist/server.js.map create mode 100644 plugins/open-in-moss/dist/server.meta.json create mode 100644 plugins/open-in-moss/docs/screenshot.png create mode 100644 plugins/open-in-moss/package.json create mode 100644 plugins/open-in-moss/server.test.ts create mode 100644 plugins/open-in-moss/server.ts create mode 100644 plugins/open-in-moss/tsconfig.json create mode 100644 plugins/open-in-moss/vitest.config.ts diff --git a/README.md b/README.md index 7c06a25..f75490d 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,16 @@ Renders an inline swatch beside every color literal in a thread — hex, `rgb()` Install: `bb plugin install git:https://github.com/brsbl/bb-plugins.git@plugin/color-swatches --yes` +### Open in Moss + +Makes local Markdown links in bb open directly in Moss, with bb's viewer kept as the fallback. + +![A Markdown file link from bb open in Moss](plugins/open-in-moss/docs/screenshot.png) + +[Source](plugins/open-in-moss) · [README](plugins/open-in-moss/README.md) + +Install: `bb plugin install git:https://github.com/brsbl/bb-plugins.git@plugin/open-in-moss --yes` + ### Timeline Comments Attaches durable discussion threads to selected timeline text. Users and agents can reply, edit, resolve or reopen comments, review them together, and add open feedback to the composer for follow-up. diff --git a/package-lock.json b/package-lock.json index 4c29f21..5fdcb8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2978,6 +2978,10 @@ "resolved": "plugins/mesh-gradient", "link": true }, + "node_modules/bb-plugin-open-in-moss": { + "resolved": "plugins/open-in-moss", + "link": true + }, "node_modules/bb-plugin-prompt-shaper": { "resolved": "plugins/improve-prompt", "link": true @@ -5204,6 +5208,31 @@ "bbPluginSdk": ">=0.4.1" } }, + "plugins/open-in-moss": { + "name": "bb-plugin-open-in-moss", + "version": "0.1.0", + "license": "UNLICENSED", + "devDependencies": { + "@get-bb/plugin-sdk": "file:../../tooling/vendor/get-bb-plugin-sdk-0.4.8.tgz", + "@testing-library/react": "^16.3.2", + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "better-sqlite3": "^12.10.0", + "cron-parser": "^5.5.0", + "hono": "^4.11.9", + "jsdom": "^29.0.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "sonner": "^1.7.4", + "typescript": "^5.7.0", + "vitest": "^4.1.8" + }, + "engines": { + "bb": ">=0.0.34", + "bbPluginSdk": "^0.4.1" + } + }, "plugins/theme-preview": { "name": "bb-plugin-theme-preview", "version": "0.1.0", diff --git a/plugins/open-in-moss/README.md b/plugins/open-in-moss/README.md new file mode 100644 index 0000000..cf859ed --- /dev/null +++ b/plugins/open-in-moss/README.md @@ -0,0 +1,26 @@ +# Open in Moss + +Makes local Markdown links in bb open directly in Moss. + +![A Markdown file link from bb open in Moss](docs/screenshot.png) + +## Install + +```sh +bb plugin install git:https://github.com/brsbl/bb-plugins.git@plugin/open-in-moss --yes +``` + +## Use + +Click any local `.md` or `.markdown` link in bb. It opens in Moss instead of +bb's file viewer. + +Right-click still uses bb's normal menu. If Moss or the local file is +unavailable, bb opens its own viewer and shows a notice. + +## Develop + +```sh +npm install +npm run check --workspace=bb-plugin-open-in-moss +``` diff --git a/plugins/open-in-moss/app.test.tsx b/plugins/open-in-moss/app.test.tsx new file mode 100644 index 0000000..1e6f7fb --- /dev/null +++ b/plugins/open-in-moss/app.test.tsx @@ -0,0 +1,134 @@ +// @vitest-environment jsdom +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { + loadPluginApp, + mountPluginContentScripts, + type MountedPluginContentScripts, +} from "@get-bb/plugin-sdk/testing/app"; +import { toast } from "sonner"; + +vi.mock("sonner", () => ({ + toast: { error: vi.fn() }, +})); + +const app = await loadPluginApp(() => import("./app")); +let mounted: MountedPluginContentScripts; + +function link(href: string): HTMLAnchorElement { + const anchor = document.createElement("a"); + anchor.href = href; + const child = document.createElement("span"); + child.textContent = "Open file"; + anchor.append(child); + document.body.append(anchor); + return anchor; +} + +function click( + target: Element, + init: MouseEventInit = {}, +): MouseEvent { + const event = new MouseEvent("click", { + bubbles: true, + cancelable: true, + button: 0, + ...init, + }); + target.dispatchEvent(event); + return event; +} + +beforeEach(async () => { + mounted = await mountPluginContentScripts(app, { + pluginId: "open-in-moss", + }); +}); + +afterEach(async () => { + await mounted.lifecycle.dispose(); + document.body.replaceChildren(); + vi.clearAllMocks(); + vi.unstubAllGlobals(); +}); + +describe("Markdown link interception", () => { + it("opens encoded Markdown file links through the plugin route", async () => { + const fetch = vi.fn(async () => ({ ok: true })); + vi.stubGlobal("fetch", fetch); + const anchor = link("file:///Users/brsbl/My%20Notes/spec.md#L12"); + const reachedAnchor = vi.fn(); + anchor.addEventListener("click", reachedAnchor); + + const event = click(anchor.firstElementChild!); + + expect(event.defaultPrevented).toBe(true); + expect(reachedAnchor).not.toHaveBeenCalled(); + await vi.waitFor(() => expect(fetch).toHaveBeenCalledOnce()); + expect(fetch).toHaveBeenCalledWith( + "/api/v1/plugins/open-in-moss/http/open", + { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ path: "/Users/brsbl/My Notes/spec.md" }), + }, + ); + expect(toast.error).not.toHaveBeenCalled(); + }); + + it("falls back to the original bb click when Moss cannot open the file", async () => { + vi.stubGlobal("fetch", vi.fn(async () => ({ ok: false }))); + const anchor = link("file:///workspace/spec.markdown"); + const bbPreview = vi.fn((event: Event) => event.preventDefault()); + anchor.addEventListener("click", bbPreview); + + click(anchor); + + await vi.waitFor(() => expect(bbPreview).toHaveBeenCalledOnce()); + expect(toast.error).toHaveBeenCalledWith("Moss couldn’t open this file", { + description: "It was opened in bb instead.", + }); + }); + + it("intercepts modified primary clicks so they cannot open bb's viewer", async () => { + const fetch = vi.fn(async () => ({ ok: true })); + vi.stubGlobal("fetch", fetch); + const anchor = link("file:///workspace/spec.md"); + const event = click(anchor, { metaKey: true, shiftKey: true }); + + expect(event.defaultPrevented).toBe(true); + await vi.waitFor(() => expect(fetch).toHaveBeenCalledOnce()); + }); + + it("leaves non-Markdown, web, and right clicks alone", async () => { + const fetch = vi.fn(async () => ({ ok: true })); + vi.stubGlobal("fetch", fetch); + const cases: Array<[HTMLAnchorElement, MouseEventInit]> = [ + [link("file:///workspace/code.ts"), {}], + [link("https://example.com/readme.md"), {}], + [link("file:///workspace/spec.md"), { button: 2 }], + ]; + + for (const [anchor, init] of cases) { + const reachedAnchor = vi.fn(); + anchor.addEventListener("click", (event) => { + reachedAnchor(); + event.preventDefault(); + }); + click(anchor, init); + expect(reachedAnchor).toHaveBeenCalledOnce(); + } + expect(fetch).not.toHaveBeenCalled(); + }); + + it("removes the interceptor when the plugin is disposed", async () => { + const fetch = vi.fn(async () => ({ ok: true })); + vi.stubGlobal("fetch", fetch); + await mounted.lifecycle.dispose(); + const anchor = link("file:///workspace/spec.md"); + anchor.addEventListener("click", (event) => event.preventDefault()); + + click(anchor); + + expect(fetch).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/open-in-moss/app.tsx b/plugins/open-in-moss/app.tsx new file mode 100644 index 0000000..b7464fe --- /dev/null +++ b/plugins/open-in-moss/app.tsx @@ -0,0 +1,101 @@ +import { definePluginApp } from "@get-bb/plugin-sdk/app"; +import { toast } from "sonner"; + +const MARKDOWN_EXTENSION = /\.(?:md|markdown)$/iu; +const fallbackEvents = new WeakSet(); + +interface MarkdownFileLink { + anchor: HTMLAnchorElement; + path: string; +} + +function markdownFileLinkFromClick(event: MouseEvent): MarkdownFileLink | null { + if ( + event.button !== 0 || + event.defaultPrevented + ) { + return null; + } + + const anchor = event + .composedPath() + .find((target): target is HTMLAnchorElement => + target instanceof HTMLAnchorElement, + ); + if (!anchor) return null; + + let url: URL; + try { + url = new URL(anchor.href); + } catch { + return null; + } + if (url.protocol !== "file:" || url.hostname !== "" || url.search !== "") { + return null; + } + + let filePath: string; + try { + filePath = decodeURIComponent(url.pathname); + } catch { + return null; + } + if (!filePath.startsWith("/") || !MARKDOWN_EXTENSION.test(filePath)) { + return null; + } + return { anchor, path: filePath }; +} + +function openInBb(anchor: HTMLAnchorElement): boolean { + if (!anchor.isConnected) return false; + const fallbackEvent = new MouseEvent("click", { + bubbles: true, + cancelable: true, + button: 0, + }); + fallbackEvents.add(fallbackEvent); + return !anchor.dispatchEvent(fallbackEvent); +} + +async function requestMossOpen( + pluginId: string, + link: MarkdownFileLink, +): Promise { + try { + const response = await fetch( + `/api/v1/plugins/${encodeURIComponent(pluginId)}/http/open`, + { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ path: link.path }), + }, + ); + if (!response.ok) throw new Error("Moss did not accept the file"); + } catch { + const openedInBb = openInBb(link.anchor); + toast.error("Moss couldn’t open this file", { + description: openedInBb + ? "It was opened in bb instead." + : "Right-click the link to choose another app.", + }); + } +} + +export default definePluginApp((app) => { + app.contentScripts.register({ + id: "open-markdown-links", + mount({ pluginId }) { + const handleClick = (event: MouseEvent) => { + if (fallbackEvents.has(event)) return; + const link = markdownFileLinkFromClick(event); + if (link === null) return; + + event.preventDefault(); + event.stopImmediatePropagation(); + void requestMossOpen(pluginId, link); + }; + document.addEventListener("click", handleClick, true); + return () => document.removeEventListener("click", handleClick, true); + }, + }); +}); diff --git a/plugins/open-in-moss/components/ui/hooks/use-compact-viewport.tsx b/plugins/open-in-moss/components/ui/hooks/use-compact-viewport.tsx new file mode 100644 index 0000000..e2adfae --- /dev/null +++ b/plugins/open-in-moss/components/ui/hooks/use-compact-viewport.tsx @@ -0,0 +1,37 @@ +import { + createContext, + createElement, + useContext, + type ReactNode, +} from "react"; + +import { useMediaQuery } from "./use-media-query.js"; + +export const COMPACT_VIEWPORT_QUERY = "(max-width: 767px)"; + +const CompactViewportOverrideContext = createContext(null); + +interface CompactViewportOverrideProviderProps { + children: ReactNode; + isCompactViewport: boolean; +} + +export function CompactViewportOverrideProvider({ + children, + isCompactViewport, +}: CompactViewportOverrideProviderProps) { + return createElement( + CompactViewportOverrideContext.Provider, + { value: isCompactViewport }, + children, + ); +} + +export function useIsCompactViewport(): boolean { + const override = useContext(CompactViewportOverrideContext); + const isCompactViewport = useMediaQuery(COMPACT_VIEWPORT_QUERY); + if (override !== null) { + return override; + } + return isCompactViewport; +} diff --git a/plugins/open-in-moss/components/ui/hooks/use-media-query.ts b/plugins/open-in-moss/components/ui/hooks/use-media-query.ts new file mode 100644 index 0000000..1de6399 --- /dev/null +++ b/plugins/open-in-moss/components/ui/hooks/use-media-query.ts @@ -0,0 +1,72 @@ +import { useSyncExternalStore } from "react"; + +export const DARK_COLOR_SCHEME_QUERY = "(prefers-color-scheme: dark)"; +export const REDUCED_MOTION_QUERY = "(prefers-reduced-motion: reduce)"; + +// One MediaQueryList per query, shared across every caller. This avoids adding +// a browser listener for each row, tooltip, or overlay that subscribes. +type MediaQueryRef = { + mql: MediaQueryList; + subscribe: (notify: () => void) => () => void; +}; + +const mediaQueryCache = new Map(); + +function createMediaQueryRef(query: string): MediaQueryRef | null { + if (typeof window === "undefined" || !window.matchMedia) return null; + + let ref = mediaQueryCache.get(query); + if (ref) return ref; + + const mql = window.matchMedia(query); + const listeners = new Set<() => void>(); + const onChange = () => { + for (const listener of listeners) listener(); + }; + + ref = { + mql, + subscribe(notify) { + const wasEmpty = listeners.size === 0; + listeners.add(notify); + if (wasEmpty) { + mql.addEventListener("change", onChange); + } + return () => { + listeners.delete(notify); + if (listeners.size === 0) { + mql.removeEventListener("change", onChange); + mediaQueryCache.delete(query); + } + }; + }, + }; + mediaQueryCache.set(query, ref); + return ref; +} + +export function subscribeMediaQuery( + query: string, + notify: () => void, +): () => void { + return createMediaQueryRef(query)?.subscribe(notify) ?? (() => {}); +} + +export function getMediaQuerySnapshot(query: string): boolean { + if (typeof window === "undefined" || !window.matchMedia) return false; + return ( + mediaQueryCache.get(query)?.mql.matches ?? window.matchMedia(query).matches + ); +} + +export function useMediaQuery(query: string): boolean { + return useSyncExternalStore( + (notify) => subscribeMediaQuery(query, notify), + () => getMediaQuerySnapshot(query), + () => false, + ); +} + +export function usePrefersReducedMotion(): boolean { + return useMediaQuery(REDUCED_MOTION_QUERY); +} diff --git a/plugins/open-in-moss/dist/app.css b/plugins/open-in-moss/dist/app.css new file mode 100644 index 0000000..0c7527f --- /dev/null +++ b/plugins/open-in-moss/dist/app.css @@ -0,0 +1,133 @@ +/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */ +@layer properties; +@layer theme, utilities; +@layer theme { + :root, :host { + --font-sans: var(--font-sans); + --font-serif: var(--font-serif); + --font-mono: var(--font-mono); + --shadow-2xs: var(--shadow-2xs); + --shadow-xs: var(--shadow-xs); + --shadow-sm: var(--shadow-sm); + --shadow-md: var(--shadow-md); + --shadow-lg: var(--shadow-lg); + --shadow-xl: var(--shadow-xl); + --shadow-2xl: var(--shadow-2xl); + --shadow: var(--shadow); + --shadow-lift: var(--shadow-lift); + } +} +@property --tw-animation-delay { + syntax: "*"; + inherits: false; + initial-value: 0s; +} +@property --tw-animation-direction { + syntax: "*"; + inherits: false; + initial-value: normal; +} +@property --tw-animation-duration { + syntax: "*"; + inherits: false; +} +@property --tw-animation-fill-mode { + syntax: "*"; + inherits: false; + initial-value: none; +} +@property --tw-animation-iteration-count { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-enter-blur { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-enter-opacity { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-enter-rotate { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-enter-scale { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-enter-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-enter-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-blur { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-opacity { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-exit-rotate { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-scale { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-exit-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@layer utilities { + @scope ([data-bb-plugin="open-in-moss"], [data-bb-plugin-root]:not([data-bb-plugin])) { + .absolute { + position: absolute; + } + } +} +@layer properties { + @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { + *, ::before, ::after, ::backdrop { + --tw-animation-delay: 0s; + --tw-animation-direction: normal; + --tw-animation-duration: initial; + --tw-animation-fill-mode: none; + --tw-animation-iteration-count: 1; + --tw-enter-blur: 0; + --tw-enter-opacity: 1; + --tw-enter-rotate: 0; + --tw-enter-scale: 1; + --tw-enter-translate-x: 0; + --tw-enter-translate-y: 0; + --tw-exit-blur: 0; + --tw-exit-opacity: 1; + --tw-exit-rotate: 0; + --tw-exit-scale: 1; + --tw-exit-translate-x: 0; + --tw-exit-translate-y: 0; + } + } +} diff --git a/plugins/open-in-moss/dist/app.js b/plugins/open-in-moss/dist/app.js new file mode 100644 index 0000000..f802f30 --- /dev/null +++ b/plugins/open-in-moss/dist/app.js @@ -0,0 +1,116 @@ +// bb-plugin-runtime-shim:@get-bb/plugin-sdk/app +var runtime = globalThis.__bbPluginRuntime; +if (runtime == null || runtime.pluginSdkApp == null) { + throw new Error('Cannot load "@get-bb/plugin-sdk/app": this bundle must be loaded by the BB app, which provides the shared plugin runtime (globalThis.__bbPluginRuntime).'); +} +var mod = runtime.pluginSdkApp; +var { + Markdown, + ThreadChat, + definePluginApp, + experimental_NewThreadComposer, + experimental_useSidebarThreadActions, + experimental_useSidebarThreadPullRequest, + experimental_useSidebarThreadSplit, + experimental_useSidebarThreads, + useBbContext, + useBbNavigate, + useComposer, + useComposerView, + useRealtime, + useRealtimeConnectionState, + useRpc, + useSettings +} = mod; + +// bb-plugin-runtime-shim:sonner +var runtime2 = globalThis.__bbPluginRuntime; +if (runtime2 == null || runtime2.sonner == null) { + throw new Error('Cannot load "sonner": this bundle must be loaded by the BB app, which provides the shared plugin runtime (globalThis.__bbPluginRuntime).'); +} +var mod2 = runtime2.sonner; +var { + Toaster, + toast, + useSonner +} = mod2; + +// app.tsx +var MARKDOWN_EXTENSION = /\.(?:md|markdown)$/iu; +var fallbackEvents = /* @__PURE__ */ new WeakSet(); +function markdownFileLinkFromClick(event) { + if (event.button !== 0 || event.defaultPrevented) { + return null; + } + const anchor = event.composedPath().find( + (target) => target instanceof HTMLAnchorElement + ); + if (!anchor) return null; + let url; + try { + url = new URL(anchor.href); + } catch { + return null; + } + if (url.protocol !== "file:" || url.hostname !== "" || url.search !== "") { + return null; + } + let filePath; + try { + filePath = decodeURIComponent(url.pathname); + } catch { + return null; + } + if (!filePath.startsWith("/") || !MARKDOWN_EXTENSION.test(filePath)) { + return null; + } + return { anchor, path: filePath }; +} +function openInBb(anchor) { + if (!anchor.isConnected) return false; + const fallbackEvent = new MouseEvent("click", { + bubbles: true, + cancelable: true, + button: 0 + }); + fallbackEvents.add(fallbackEvent); + return !anchor.dispatchEvent(fallbackEvent); +} +async function requestMossOpen(pluginId, link) { + try { + const response = await fetch( + `/api/v1/plugins/${encodeURIComponent(pluginId)}/http/open`, + { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ path: link.path }) + } + ); + if (!response.ok) throw new Error("Moss did not accept the file"); + } catch { + const openedInBb = openInBb(link.anchor); + toast.error("Moss couldn\u2019t open this file", { + description: openedInBb ? "It was opened in bb instead." : "Right-click the link to choose another app." + }); + } +} +var app_default = definePluginApp((app) => { + app.contentScripts.register({ + id: "open-markdown-links", + mount({ pluginId }) { + const handleClick = (event) => { + if (fallbackEvents.has(event)) return; + const link = markdownFileLinkFromClick(event); + if (link === null) return; + event.preventDefault(); + event.stopImmediatePropagation(); + void requestMossOpen(pluginId, link); + }; + document.addEventListener("click", handleClick, true); + return () => document.removeEventListener("click", handleClick, true); + } + }); +}); +export { + app_default as default +}; diff --git a/plugins/open-in-moss/dist/app.meta.json b/plugins/open-in-moss/dist/app.meta.json new file mode 100644 index 0000000..5d0d278 --- /dev/null +++ b/plugins/open-in-moss/dist/app.meta.json @@ -0,0 +1,11 @@ +{ + "sdkMajor": 0, + "sdkVersion": "0.4.8", + "artifactFormatVersion": 1, + "pluginId": "open-in-moss", + "pluginVersion": "0.1.0", + "builtWith": { + "bbVersion": "0.39.0", + "pluginSdkVersion": "0.4.8" + } +} diff --git a/plugins/open-in-moss/dist/server.js b/plugins/open-in-moss/dist/server.js new file mode 100644 index 0000000..1248c7c --- /dev/null +++ b/plugins/open-in-moss/dist/server.js @@ -0,0 +1,174 @@ +import { createRequire as __createRequire } from "node:module"; +import { dirname as __pathDirname } from "node:path"; +import { fileURLToPath as __fileURLToPath } from "node:url"; +const require = __createRequire(import.meta.url); +var __filename = __fileURLToPath(import.meta.url); +var __dirname = __pathDirname(__filename); + +// server.ts +import { execFile } from "node:child_process"; +import { realpath, stat } from "node:fs/promises"; +import { extname, isAbsolute } from "node:path"; +var OpenInMossError = class extends Error { + constructor(code, message) { + super(message); + this.code = code; + this.name = "OpenInMossError"; + } + code; +}; +function isMarkdownPath(filePath) { + const extension = extname(filePath).toLowerCase(); + return extension === ".md" || extension === ".markdown"; +} +function launchMoss(filePath) { + return new Promise((resolve, reject) => { + execFile( + "/usr/bin/open", + ["-a", "Moss", filePath], + { timeout: 15e3 }, + (error) => { + if (error) reject(error); + else resolve(); + } + ); + }); +} +var systemDependencies = { + platform: process.platform, + realpath, + stat, + open: launchMoss +}; +async function openMarkdownInMoss(filePath, dependencies) { + if (dependencies.platform !== "darwin") { + throw new OpenInMossError( + "unsupported_platform", + "Opening Markdown in Moss is available only on macOS." + ); + } + if (!isAbsolute(filePath) || filePath.includes("\0")) { + throw new OpenInMossError( + "invalid_path", + "The Markdown link does not contain a valid absolute file path." + ); + } + if (!isMarkdownPath(filePath)) { + throw new OpenInMossError( + "not_markdown", + "Only .md and .markdown files can be opened in Moss." + ); + } + let canonicalPath; + try { + canonicalPath = await dependencies.realpath(filePath); + } catch { + throw new OpenInMossError( + "not_found", + "That Markdown file is no longer available." + ); + } + if (!isMarkdownPath(canonicalPath)) { + throw new OpenInMossError( + "not_markdown", + "The linked file does not resolve to a Markdown file." + ); + } + let fileStat; + try { + fileStat = await dependencies.stat(canonicalPath); + } catch { + throw new OpenInMossError( + "not_found", + "That Markdown file is no longer available." + ); + } + if (!fileStat.isFile()) { + throw new OpenInMossError( + "not_regular_file", + "That Markdown link does not point to a regular file." + ); + } + try { + await dependencies.open(canonicalPath); + } catch { + throw new OpenInMossError( + "open_failed", + "Moss could not open that Markdown file." + ); + } + return canonicalPath; +} +function errorResponse(context, error) { + const body = { ok: false, error: { code: error.code, message: error.message } }; + switch (error.code) { + case "invalid_path": + case "not_markdown": + return context.json(body, 400); + case "not_found": + return context.json(body, 404); + case "not_regular_file": + return context.json(body, 422); + case "unsupported_platform": + return context.json(body, 409); + case "open_failed": + return context.json(body, 502); + } +} +function createOpenInMossPlugin(dependencies = systemDependencies) { + return async function plugin(bb) { + bb.http.route( + "POST", + "/open", + async (context) => { + let body; + try { + body = await context.req.json(); + } catch { + return context.json( + { + ok: false, + error: { + code: "invalid_path", + message: "The request must contain a Markdown file path." + } + }, + 400 + ); + } + const filePath = typeof body === "object" && body !== null && typeof Reflect.get(body, "path") === "string" ? Reflect.get(body, "path") : null; + if (filePath === null) { + return context.json( + { + ok: false, + error: { + code: "invalid_path", + message: "The request must contain a Markdown file path." + } + }, + 400 + ); + } + try { + const openedPath = await openMarkdownInMoss(filePath, dependencies); + return context.json({ ok: true, opened: true, path: openedPath }); + } catch (error) { + if (error instanceof OpenInMossError) { + bb.log.warn(`Open in Moss failed (${error.code}): ${error.message}`); + return errorResponse(context, error); + } + throw error; + } + }, + { auth: "local" } + ); + bb.log.info("Markdown file links will open in Moss"); + }; +} +var server_default = createOpenInMossPlugin(); +export { + createOpenInMossPlugin, + server_default as default, + openMarkdownInMoss +}; +//# sourceMappingURL=server.js.map diff --git a/plugins/open-in-moss/dist/server.js.map b/plugins/open-in-moss/dist/server.js.map new file mode 100644 index 0000000..9d7f859 --- /dev/null +++ b/plugins/open-in-moss/dist/server.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../server.ts"], + "sourcesContent": ["import { execFile } from \"node:child_process\";\nimport { realpath, stat } from \"node:fs/promises\";\nimport { extname, isAbsolute } from \"node:path\";\nimport type { BbPluginApi } from \"@get-bb/plugin-sdk\";\n\ntype FileStat = { isFile(): boolean };\n\nexport interface OpenInMossDependencies {\n platform: string;\n realpath(filePath: string): Promise;\n stat(filePath: string): Promise;\n open(filePath: string): Promise;\n}\n\ntype OpenErrorCode =\n | \"invalid_path\"\n | \"not_found\"\n | \"not_markdown\"\n | \"not_regular_file\"\n | \"open_failed\"\n | \"unsupported_platform\";\n\nclass OpenInMossError extends Error {\n constructor(\n readonly code: OpenErrorCode,\n message: string,\n ) {\n super(message);\n this.name = \"OpenInMossError\";\n }\n}\n\nfunction isMarkdownPath(filePath: string): boolean {\n const extension = extname(filePath).toLowerCase();\n return extension === \".md\" || extension === \".markdown\";\n}\n\nfunction launchMoss(filePath: string): Promise {\n return new Promise((resolve, reject) => {\n execFile(\n \"/usr/bin/open\",\n [\"-a\", \"Moss\", filePath],\n { timeout: 15_000 },\n (error) => {\n if (error) reject(error);\n else resolve();\n },\n );\n });\n}\n\nconst systemDependencies: OpenInMossDependencies = {\n platform: process.platform,\n realpath,\n stat,\n open: launchMoss,\n};\n\nexport async function openMarkdownInMoss(\n filePath: string,\n dependencies: OpenInMossDependencies,\n): Promise {\n if (dependencies.platform !== \"darwin\") {\n throw new OpenInMossError(\n \"unsupported_platform\",\n \"Opening Markdown in Moss is available only on macOS.\",\n );\n }\n if (!isAbsolute(filePath) || filePath.includes(\"\\0\")) {\n throw new OpenInMossError(\n \"invalid_path\",\n \"The Markdown link does not contain a valid absolute file path.\",\n );\n }\n if (!isMarkdownPath(filePath)) {\n throw new OpenInMossError(\n \"not_markdown\",\n \"Only .md and .markdown files can be opened in Moss.\",\n );\n }\n\n let canonicalPath: string;\n try {\n canonicalPath = await dependencies.realpath(filePath);\n } catch {\n throw new OpenInMossError(\n \"not_found\",\n \"That Markdown file is no longer available.\",\n );\n }\n if (!isMarkdownPath(canonicalPath)) {\n throw new OpenInMossError(\n \"not_markdown\",\n \"The linked file does not resolve to a Markdown file.\",\n );\n }\n\n let fileStat: FileStat;\n try {\n fileStat = await dependencies.stat(canonicalPath);\n } catch {\n throw new OpenInMossError(\n \"not_found\",\n \"That Markdown file is no longer available.\",\n );\n }\n if (!fileStat.isFile()) {\n throw new OpenInMossError(\n \"not_regular_file\",\n \"That Markdown link does not point to a regular file.\",\n );\n }\n\n try {\n await dependencies.open(canonicalPath);\n } catch {\n throw new OpenInMossError(\n \"open_failed\",\n \"Moss could not open that Markdown file.\",\n );\n }\n return canonicalPath;\n}\n\nfunction errorResponse(\n context: Parameters[2]>[0],\n error: OpenInMossError,\n): Response {\n const body = { ok: false, error: { code: error.code, message: error.message } };\n switch (error.code) {\n case \"invalid_path\":\n case \"not_markdown\":\n return context.json(body, 400);\n case \"not_found\":\n return context.json(body, 404);\n case \"not_regular_file\":\n return context.json(body, 422);\n case \"unsupported_platform\":\n return context.json(body, 409);\n case \"open_failed\":\n return context.json(body, 502);\n }\n}\n\nexport function createOpenInMossPlugin(\n dependencies: OpenInMossDependencies = systemDependencies,\n) {\n return async function plugin(bb: BbPluginApi) {\n bb.http.route(\n \"POST\",\n \"/open\",\n async (context) => {\n let body: unknown;\n try {\n body = await context.req.json();\n } catch {\n return context.json(\n {\n ok: false,\n error: {\n code: \"invalid_path\",\n message: \"The request must contain a Markdown file path.\",\n },\n },\n 400,\n );\n }\n\n const filePath =\n typeof body === \"object\" &&\n body !== null &&\n typeof Reflect.get(body, \"path\") === \"string\"\n ? (Reflect.get(body, \"path\") as string)\n : null;\n if (filePath === null) {\n return context.json(\n {\n ok: false,\n error: {\n code: \"invalid_path\",\n message: \"The request must contain a Markdown file path.\",\n },\n },\n 400,\n );\n }\n\n try {\n const openedPath = await openMarkdownInMoss(filePath, dependencies);\n return context.json({ ok: true, opened: true, path: openedPath });\n } catch (error) {\n if (error instanceof OpenInMossError) {\n bb.log.warn(`Open in Moss failed (${error.code}): ${error.message}`);\n return errorResponse(context, error);\n }\n throw error;\n }\n },\n { auth: \"local\" },\n );\n\n bb.log.info(\"Markdown file links will open in Moss\");\n };\n}\n\nexport default createOpenInMossPlugin();\n"], + "mappings": "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", + "names": [] +} diff --git a/plugins/open-in-moss/dist/server.meta.json b/plugins/open-in-moss/dist/server.meta.json new file mode 100644 index 0000000..5d0d278 --- /dev/null +++ b/plugins/open-in-moss/dist/server.meta.json @@ -0,0 +1,11 @@ +{ + "sdkMajor": 0, + "sdkVersion": "0.4.8", + "artifactFormatVersion": 1, + "pluginId": "open-in-moss", + "pluginVersion": "0.1.0", + "builtWith": { + "bbVersion": "0.39.0", + "pluginSdkVersion": "0.4.8" + } +} diff --git a/plugins/open-in-moss/docs/screenshot.png b/plugins/open-in-moss/docs/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..35a2c703238677d766f328546a940c7f4b7ddf58 GIT binary patch literal 176398 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�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%0DbTbCWvC-y*M?Gy;kA?Bo=05(=~MF1R{vg+B=x*! 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.0.34", + "bbPluginSdk": "^0.4.1" + }, + "bb": { + "name": "Open in Moss", + "description": "Open Markdown file links in Moss instead of BB's file viewer.", + "branding": { + "icon": "ExternalLink" + }, + "server": "./server.ts", + "app": "./app.tsx", + "skills": [] + }, + "keywords": [ + "bb-plugin", + "markdown", + "moss" + ], + "scripts": { + "build": "node ../../tooling/build-plugin.mjs", + "check": "npm run typecheck && npm run build && npm test", + "test": "vitest run", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@get-bb/plugin-sdk": "file:../../tooling/vendor/get-bb-plugin-sdk-0.4.8.tgz", + "@testing-library/react": "^16.3.2", + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "better-sqlite3": "^12.10.0", + "cron-parser": "^5.5.0", + "hono": "^4.11.9", + "jsdom": "^29.0.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "sonner": "^1.7.4", + "typescript": "^5.7.0", + "vitest": "^4.1.8" + } +} diff --git a/plugins/open-in-moss/server.test.ts b/plugins/open-in-moss/server.test.ts new file mode 100644 index 0000000..a900941 --- /dev/null +++ b/plugins/open-in-moss/server.test.ts @@ -0,0 +1,119 @@ +import { describe, expect, it, vi } from "vitest"; +import { createFakePluginHost } from "@get-bb/plugin-sdk/testing"; +import { + createOpenInMossPlugin, + type OpenInMossDependencies, +} from "./server"; + +function dependencies( + overrides: Partial = {}, +): OpenInMossDependencies { + return { + platform: "darwin", + realpath: async (filePath) => filePath, + stat: async () => ({ isFile: () => true }), + open: async () => {}, + ...overrides, + }; +} + +async function loadPlugin(deps: OpenInMossDependencies) { + const host = createFakePluginHost({ pluginId: "open-in-moss" }); + await createOpenInMossPlugin(deps)(host.bb); + return host; +} + +async function post( + deps: OpenInMossDependencies, + body: unknown, +): Promise { + const { harness } = await loadPlugin(deps); + return harness.fetchHttp("POST", "/open", { + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + }); +} + +describe("POST /open", () => { + it("resolves and opens a Markdown file in Moss", async () => { + const open = vi.fn(async () => {}); + const realpath = vi.fn(async () => "/real/notes/spec.md"); + const response = await post( + dependencies({ open, realpath }), + { path: "/workspace/spec.md" }, + ); + + expect(response.status).toBe(200); + expect(await response.json()).toEqual({ + ok: true, + opened: true, + path: "/real/notes/spec.md", + }); + expect(realpath).toHaveBeenCalledWith("/workspace/spec.md"); + expect(open).toHaveBeenCalledWith("/real/notes/spec.md"); + }); + + it("rejects malformed, relative, and non-Markdown paths", async () => { + for (const body of [ + null, + {}, + { path: "notes/spec.md" }, + { path: "/workspace/spec.ts" }, + ]) { + const response = await post(dependencies(), body); + expect(response.status).toBe(400); + expect(await response.json()).toMatchObject({ ok: false }); + } + }); + + it("rejects missing files and non-files without launching Moss", async () => { + const missingOpen = vi.fn(async () => {}); + const missing = await post( + dependencies({ + open: missingOpen, + realpath: async () => { + throw new Error("ENOENT"); + }, + }), + { path: "/workspace/gone.md" }, + ); + expect(missing.status).toBe(404); + expect(missingOpen).not.toHaveBeenCalled(); + + const directoryOpen = vi.fn(async () => {}); + const directory = await post( + dependencies({ + open: directoryOpen, + stat: async () => ({ isFile: () => false }), + }), + { path: "/workspace/folder.md" }, + ); + expect(directory.status).toBe(422); + expect(directoryOpen).not.toHaveBeenCalled(); + }); + + it("reports unsupported platforms and launch failures", async () => { + const unsupported = await post( + dependencies({ platform: "linux" }), + { path: "/workspace/spec.md" }, + ); + expect(unsupported.status).toBe(409); + + const failed = await post( + dependencies({ + open: async () => { + throw new Error("Moss is missing"); + }, + }), + { path: "/workspace/spec.md" }, + ); + expect(failed.status).toBe(502); + expect(await failed.json()).toEqual({ + ok: false, + error: { + code: "open_failed", + message: "Moss could not open that Markdown file.", + }, + }); + }); +}); diff --git a/plugins/open-in-moss/server.ts b/plugins/open-in-moss/server.ts new file mode 100644 index 0000000..e2e46ac --- /dev/null +++ b/plugins/open-in-moss/server.ts @@ -0,0 +1,206 @@ +import { execFile } from "node:child_process"; +import { realpath, stat } from "node:fs/promises"; +import { extname, isAbsolute } from "node:path"; +import type { BbPluginApi } from "@get-bb/plugin-sdk"; + +type FileStat = { isFile(): boolean }; + +export interface OpenInMossDependencies { + platform: string; + realpath(filePath: string): Promise; + stat(filePath: string): Promise; + open(filePath: string): Promise; +} + +type OpenErrorCode = + | "invalid_path" + | "not_found" + | "not_markdown" + | "not_regular_file" + | "open_failed" + | "unsupported_platform"; + +class OpenInMossError extends Error { + constructor( + readonly code: OpenErrorCode, + message: string, + ) { + super(message); + this.name = "OpenInMossError"; + } +} + +function isMarkdownPath(filePath: string): boolean { + const extension = extname(filePath).toLowerCase(); + return extension === ".md" || extension === ".markdown"; +} + +function launchMoss(filePath: string): Promise { + return new Promise((resolve, reject) => { + execFile( + "/usr/bin/open", + ["-a", "Moss", filePath], + { timeout: 15_000 }, + (error) => { + if (error) reject(error); + else resolve(); + }, + ); + }); +} + +const systemDependencies: OpenInMossDependencies = { + platform: process.platform, + realpath, + stat, + open: launchMoss, +}; + +export async function openMarkdownInMoss( + filePath: string, + dependencies: OpenInMossDependencies, +): Promise { + if (dependencies.platform !== "darwin") { + throw new OpenInMossError( + "unsupported_platform", + "Opening Markdown in Moss is available only on macOS.", + ); + } + if (!isAbsolute(filePath) || filePath.includes("\0")) { + throw new OpenInMossError( + "invalid_path", + "The Markdown link does not contain a valid absolute file path.", + ); + } + if (!isMarkdownPath(filePath)) { + throw new OpenInMossError( + "not_markdown", + "Only .md and .markdown files can be opened in Moss.", + ); + } + + let canonicalPath: string; + try { + canonicalPath = await dependencies.realpath(filePath); + } catch { + throw new OpenInMossError( + "not_found", + "That Markdown file is no longer available.", + ); + } + if (!isMarkdownPath(canonicalPath)) { + throw new OpenInMossError( + "not_markdown", + "The linked file does not resolve to a Markdown file.", + ); + } + + let fileStat: FileStat; + try { + fileStat = await dependencies.stat(canonicalPath); + } catch { + throw new OpenInMossError( + "not_found", + "That Markdown file is no longer available.", + ); + } + if (!fileStat.isFile()) { + throw new OpenInMossError( + "not_regular_file", + "That Markdown link does not point to a regular file.", + ); + } + + try { + await dependencies.open(canonicalPath); + } catch { + throw new OpenInMossError( + "open_failed", + "Moss could not open that Markdown file.", + ); + } + return canonicalPath; +} + +function errorResponse( + context: Parameters[2]>[0], + error: OpenInMossError, +): Response { + const body = { ok: false, error: { code: error.code, message: error.message } }; + switch (error.code) { + case "invalid_path": + case "not_markdown": + return context.json(body, 400); + case "not_found": + return context.json(body, 404); + case "not_regular_file": + return context.json(body, 422); + case "unsupported_platform": + return context.json(body, 409); + case "open_failed": + return context.json(body, 502); + } +} + +export function createOpenInMossPlugin( + dependencies: OpenInMossDependencies = systemDependencies, +) { + return async function plugin(bb: BbPluginApi) { + bb.http.route( + "POST", + "/open", + async (context) => { + let body: unknown; + try { + body = await context.req.json(); + } catch { + return context.json( + { + ok: false, + error: { + code: "invalid_path", + message: "The request must contain a Markdown file path.", + }, + }, + 400, + ); + } + + const filePath = + typeof body === "object" && + body !== null && + typeof Reflect.get(body, "path") === "string" + ? (Reflect.get(body, "path") as string) + : null; + if (filePath === null) { + return context.json( + { + ok: false, + error: { + code: "invalid_path", + message: "The request must contain a Markdown file path.", + }, + }, + 400, + ); + } + + try { + const openedPath = await openMarkdownInMoss(filePath, dependencies); + return context.json({ ok: true, opened: true, path: openedPath }); + } catch (error) { + if (error instanceof OpenInMossError) { + bb.log.warn(`Open in Moss failed (${error.code}): ${error.message}`); + return errorResponse(context, error); + } + throw error; + } + }, + { auth: "local" }, + ); + + bb.log.info("Markdown file links will open in Moss"); + }; +} + +export default createOpenInMossPlugin(); diff --git a/plugins/open-in-moss/tsconfig.json b/plugins/open-in-moss/tsconfig.json new file mode 100644 index 0000000..8d33bd6 --- /dev/null +++ b/plugins/open-in-moss/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "strict": true, + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "lib": [ + "ES2022", + "DOM" + ], + "types": [ + "node" + ], + "paths": { + "@/*": [ + "./*" + ] + }, + "noEmit": true, + "skipLibCheck": false + }, + "include": [ + "server.ts", + "app.tsx", + "*.test.ts", + "*.test.tsx", + "vitest.config.ts" + ] +} diff --git a/plugins/open-in-moss/vitest.config.ts b/plugins/open-in-moss/vitest.config.ts new file mode 100644 index 0000000..c28115c --- /dev/null +++ b/plugins/open-in-moss/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + include: ["**/*.test.{ts,tsx}"], + exclude: ["dist/**", "node_modules/**"], + }, +});