fix: rename rsheet module to rsheets (fixes missing module crash)

The rsheet→rsheets rename was partially applied - server/index.ts
imported rsheets/mod but the files still lived at rsheet/. This
caused a crash on startup: "Cannot find module '../modules/rsheets/mod'".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-04-10 11:19:32 -04:00
parent 1de038eeab
commit 8887e18dda
6 changed files with 25 additions and 25 deletions

View File

@ -1,5 +1,5 @@
/** /**
* rSheet module collaborative spreadsheets powered by dSheet. * rSheets module collaborative spreadsheets powered by dSheet.
* *
* Embeds @fileverse-dev/dsheet as an external app within the rSpace shell. * Embeds @fileverse-dev/dsheet as an external app within the rSpace shell.
*/ */
@ -108,11 +108,11 @@ routes.get("/", (c) => {
const space = c.req.param("space") || "demo"; const space = c.req.param("space") || "demo";
return c.html( return c.html(
renderExternalAppShell({ renderExternalAppShell({
title: `Spreadsheets — rSheet | rSpace`, title: `Spreadsheets — rSheets | rSpace`,
moduleId: "rsheet", moduleId: "rsheets",
spaceSlug: space, spaceSlug: space,
modules: getModuleInfoList(), modules: getModuleInfoList(),
appUrl: `/rsheet/app`, appUrl: `/rsheets/app`,
appName: "dSheet", appName: "dSheet",
theme: "dark", theme: "dark",
}) })
@ -128,7 +128,7 @@ routes.get("/app", (c) => {
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>rSheet ${space}</title> <title>rSheets ${space}</title>
<style> <style>
* { margin: 0; padding: 0; box-sizing: border-box; } * { margin: 0; padding: 0; box-sizing: border-box; }
html, body, #sheet { width: 100%; height: 100%; background: #0f172a; color: #e2e8f0; } html, body, #sheet { width: 100%; height: 100%; background: #0f172a; color: #e2e8f0; }
@ -265,16 +265,16 @@ export function getRecentSheetsForMI(space: string, limit = 5): { id: string; na
// ── Module definition ── // ── Module definition ──
export const sheetModule: RSpaceModule = { export const sheetsModule: RSpaceModule = {
id: "rsheet", id: "rsheets",
name: "rSheet", name: "rSheets",
icon: "\u{1F4CA}", icon: "\u{1F4CA}",
description: "Collaborative spreadsheets", description: "Collaborative spreadsheets",
scoping: { defaultScope: "space", userConfigurable: false }, scoping: { defaultScope: "space", userConfigurable: false },
docSchemas: [{ pattern: '{space}:sheet:sheets:{sheetId}', description: 'One doc per spreadsheet', init: sheetSchema.init }], docSchemas: [{ pattern: '{space}:sheet:sheets:{sheetId}', description: 'One doc per spreadsheet', init: sheetSchema.init }],
routes, routes,
externalApp: { externalApp: {
url: "/rsheet/app", url: "/rsheets/app",
name: "dSheet", name: "dSheet",
}, },
async onInit(ctx) { _syncServer = ctx.syncServer; }, async onInit(ctx) { _syncServer = ctx.syncServer; },
@ -292,7 +292,7 @@ export const sheetModule: RSpaceModule = {
icon: "\u{1F4CA}", icon: "\u{1F4CA}",
description: "Create or edit a collaborative spreadsheet", description: "Create or edit a collaborative spreadsheet",
type: "navigate" as any, type: "navigate" as any,
href: "/rsheet", href: "/rsheets",
}, },
], ],
}; };

View File

@ -1,5 +1,5 @@
/** /**
* rSheet Automerge document schemas. * rSheets Automerge document schemas.
* *
* Granularity: one Automerge document per sheet. * Granularity: one Automerge document per sheet.
* DocId format: {space}:sheet:sheets:{sheetId} * DocId format: {space}:sheet:sheets:{sheetId}

View File

@ -11,7 +11,7 @@
* rvote (3), rchoices (3), rtrips (4), rcart (4), rexchange (4), rbnb (4), * rvote (3), rchoices (3), rtrips (4), rcart (4), rexchange (4), rbnb (4),
* rvnb (3), crowdsurf (2), rbooks (2), rpubs (2), rmeets (2), rtube (2), * rvnb (3), crowdsurf (2), rbooks (2), rpubs (2), rmeets (2), rtube (2),
* rswag (2), rdesign (2), rsplat (2), rphotos (2), rflows (2), rdocs (1), * rswag (2), rdesign (2), rsplat (2), rphotos (2), rflows (2), rdocs (1),
* rdata (1), rforum (2), rchats (3), rmaps (3), rsheet (2), rgov (2) * rdata (1), rforum (2), rchats (3), rmaps (3), rsheets (2), rgov (2)
* 1 resource: rspace://spaces/{slug} * 1 resource: rspace://spaces/{slug}
*/ */
@ -53,7 +53,7 @@ import { registerDataTools } from "./mcp-tools/rdata";
import { registerForumTools } from "./mcp-tools/rforum"; import { registerForumTools } from "./mcp-tools/rforum";
import { registerChatsTools } from "./mcp-tools/rchats"; import { registerChatsTools } from "./mcp-tools/rchats";
import { registerMapsTools } from "./mcp-tools/rmaps"; import { registerMapsTools } from "./mcp-tools/rmaps";
import { registerSheetTools } from "./mcp-tools/rsheet"; import { registerSheetsTools } from "./mcp-tools/rsheets";
import { registerGovTools } from "./mcp-tools/rgov"; import { registerGovTools } from "./mcp-tools/rgov";
function createMcpServerInstance(syncServer: SyncServer): McpServer { function createMcpServerInstance(syncServer: SyncServer): McpServer {
@ -95,7 +95,7 @@ function createMcpServerInstance(syncServer: SyncServer): McpServer {
registerForumTools(server, syncServer); registerForumTools(server, syncServer);
registerChatsTools(server, syncServer); registerChatsTools(server, syncServer);
registerMapsTools(server, syncServer); registerMapsTools(server, syncServer);
registerSheetTools(server, syncServer); registerSheetsTools(server, syncServer);
registerGovTools(server); registerGovTools(server);
return server; return server;

View File

@ -1,20 +1,20 @@
/** /**
* MCP tools for rSheet (collaborative spreadsheets). * MCP tools for rSheets (collaborative spreadsheets).
* Multi-doc: {space}:sheet:sheets:{sheetId} * Multi-doc: {space}:sheet:sheets:{sheetId}
* *
* Tools: rsheet_list_sheets, rsheet_get_sheet * Tools: rsheets_list_sheets, rsheets_get_sheet
*/ */
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod"; import { z } from "zod";
import type { SyncServer } from "../local-first/sync-server"; import type { SyncServer } from "../local-first/sync-server";
import { sheetDocId } from "../../modules/rsheet/schemas"; import { sheetDocId } from "../../modules/rsheets/schemas";
import type { SheetDoc } from "../../modules/rsheet/schemas"; import type { SheetDoc } from "../../modules/rsheets/schemas";
import { resolveAccess, accessDeniedResponse } from "./_auth"; import { resolveAccess, accessDeniedResponse } from "./_auth";
export function registerSheetTools(server: McpServer, syncServer: SyncServer) { export function registerSheetsTools(server: McpServer, syncServer: SyncServer) {
server.tool( server.tool(
"rsheet_list_sheets", "rsheets_list_sheets",
"List spreadsheets in a space", "List spreadsheets in a space",
{ {
space: z.string().describe("Space slug"), space: z.string().describe("Space slug"),
@ -48,7 +48,7 @@ export function registerSheetTools(server: McpServer, syncServer: SyncServer) {
); );
server.tool( server.tool(
"rsheet_get_sheet", "rsheets_get_sheet",
"Get full sheet data (meta, columns, cells)", "Get full sheet data (meta, columns, cells)",
{ {
space: z.string().describe("Space slug"), space: z.string().describe("Space slug"),

View File

@ -20,7 +20,7 @@ import { getRecentVideosForMI } from "../modules/rtube/mod";
import { getRecentMessagesForMI } from "../modules/rchats/mod"; import { getRecentMessagesForMI } from "../modules/rchats/mod";
import { getRecentPublicationsForMI } from "../modules/rpubs/mod"; import { getRecentPublicationsForMI } from "../modules/rpubs/mod";
import { getRecentDesignsForMI } from "../modules/rswag/mod"; import { getRecentDesignsForMI } from "../modules/rswag/mod";
import { getRecentSheetsForMI } from "../modules/rsheet/mod"; import { getRecentSheetsForMI } from "../modules/rsheets/mod";
import { getLinkedDocsForMI } from "../modules/rdocs/mod"; import { getLinkedDocsForMI } from "../modules/rdocs/mod";
import { getRecentSessionsForMI } from "../modules/rdesign/mod"; import { getRecentSessionsForMI } from "../modules/rdesign/mod";
import { getSharedAlbumsForMI } from "../modules/rphotos/mod"; import { getSharedAlbumsForMI } from "../modules/rphotos/mod";
@ -205,7 +205,7 @@ export function queryModuleContent(
return { ok: true, module, queryType, data: designs, summary: lines.length ? `Store designs:\n${lines.join("\n")}` : "No designs found." }; return { ok: true, module, queryType, data: designs, summary: lines.length ? `Store designs:\n${lines.join("\n")}` : "No designs found." };
} }
case "rsheet": { case "rsheets": {
const sheets = getRecentSheetsForMI(space, limit); const sheets = getRecentSheetsForMI(space, limit);
if (queryType === "count") { if (queryType === "count") {
return { ok: true, module, queryType, data: { count: sheets.length }, summary: `${sheets.length} spreadsheets found.` }; return { ok: true, module, queryType, data: { count: sheets.length }, summary: `${sheets.length} spreadsheets found.` };

View File

@ -33,7 +33,7 @@ import { getRecentVideosForMI } from "../modules/rtube/mod";
import { getRecentMessagesForMI } from "../modules/rchats/mod"; import { getRecentMessagesForMI } from "../modules/rchats/mod";
import { getRecentPublicationsForMI } from "../modules/rpubs/mod"; import { getRecentPublicationsForMI } from "../modules/rpubs/mod";
import { getRecentDesignsForMI } from "../modules/rswag/mod"; import { getRecentDesignsForMI } from "../modules/rswag/mod";
import { getRecentSheetsForMI } from "../modules/rsheet/mod"; import { getRecentSheetsForMI } from "../modules/rsheets/mod";
import { getLinkedDocsForMI } from "../modules/rdocs/mod"; import { getLinkedDocsForMI } from "../modules/rdocs/mod";
import { getRecentSessionsForMI } from "../modules/rdesign/mod"; import { getRecentSessionsForMI } from "../modules/rdesign/mod";
import { getSharedAlbumsForMI } from "../modules/rphotos/mod"; import { getSharedAlbumsForMI } from "../modules/rphotos/mod";
@ -551,7 +551,7 @@ When you need to look up the user's actual data (notes, tasks, events):
[MI_ACTION:{"type":"query-content","module":"rchats","queryType":"recent","limit":5}] [MI_ACTION:{"type":"query-content","module":"rchats","queryType":"recent","limit":5}]
[MI_ACTION:{"type":"query-content","module":"rpubs","queryType":"recent","limit":5}] [MI_ACTION:{"type":"query-content","module":"rpubs","queryType":"recent","limit":5}]
[MI_ACTION:{"type":"query-content","module":"rswag","queryType":"recent","limit":5}] [MI_ACTION:{"type":"query-content","module":"rswag","queryType":"recent","limit":5}]
[MI_ACTION:{"type":"query-content","module":"rsheet","queryType":"recent","limit":5}] [MI_ACTION:{"type":"query-content","module":"rsheets","queryType":"recent","limit":5}]
[MI_ACTION:{"type":"query-content","module":"rdocs","queryType":"recent","limit":5}] [MI_ACTION:{"type":"query-content","module":"rdocs","queryType":"recent","limit":5}]
[MI_ACTION:{"type":"query-content","module":"rdesign","queryType":"recent","limit":5}] [MI_ACTION:{"type":"query-content","module":"rdesign","queryType":"recent","limit":5}]
[MI_ACTION:{"type":"query-content","module":"rphotos","queryType":"recent","limit":5}] [MI_ACTION:{"type":"query-content","module":"rphotos","queryType":"recent","limit":5}]