@mulmoclaude/accounting-plugin
v5.0.0
Published
Double-entry accounting plugin for MulmoClaude and MulmoTerminal. Three surfaces: ./shared (isomorphic enums/meta, browser-safe), ./vue (chat View/Preview + canvas app), ./server (createAccountingRouter — the workspace-file-backed backend, wired via depen
Readme
@mulmoclaude/accounting-plugin
Double-entry accounting plugin for MulmoClaude and MulmoTerminal. Three surfaces: ./shared (isomorphic enums/meta, browser-safe), ./vue (chat View/Preview + canvas app), ./server (createAccountingRouter — the workspace-file-backed backend, wired via dependency injection so it pulls zero host-only infra).
A plugin for MulmoClaude and MulmoTerminal — loaded by the host, not run standalone.
Host wiring
A single-workspace host (MulmoClaude) wires three calls once at boot:
configureAccountingServer({ workspaceRoot, logger });
initAccountingEventPublisher(pubsub);
app.use(createAccountingRouter());A host that serves one root per project directory (MulmoTerminal) wires the same three differently:
configureAccountingServer({
workspaceRoot: null, // explicit-root mode: a forgotten root throws
logger,
channelScopeForRoot: (root) => projectIdForRoot(root), // opaque id, or null for the default root
});
initAccountingEventPublisher(pubsub); // unchanged — the scope comes from the dep above
app.use(createAccountingRouter({ resolveWorkspaceRoot: (req) => rootForRequest(req) }));
configureAccountingHost({ apiCall, subscribe, localeTag, projectScope }); // the Vue surfaceBoth are opt-in and default to today's behaviour. The invariants behind them:
- A bookId is unique within a root and nowhere else. Anything keyed by bookId alone — a channel, a rebuild queue, a card — is a cross-project collision waiting to happen.
workspaceRoot: nullis the safety net. With N roots, a forgotten root is not a crash but a silent read or write against the wrong project; explicit-root mode turns it into a clear throw.- A project is named by an opaque id, never a path. Channel names and card envelopes reach the browser; an absolute root there publishes the user's home directory.
- The model never picks a project.
manageAccounting's schema has no project parameter (pinned by a test), and this package never resolves one off a request body — only the host's ownresolveWorkspaceRootdoes.
Dev loop
yarn workspace @mulmoclaude/accounting-plugin run build
yarn workspace @mulmoclaude/accounting-plugin run testRelated projects
Used by both MulmoClaude and MulmoTerminal, and published from the MulmoClaude monorepo by Receptron.
- MulmoClaude — an open-source AI assistant platform that runs on your own computer. Claude Code as the engine, a personal wiki for long-term memory, schema-driven collections for your data, and chat that summons the right GUI (markdown, charts, forms, spreadsheets, wikis) for each task.
- MulmoTerminal — a terminal-first cockpit for running many AI coding agents in parallel. One roster showing every session's summary and PR status, tmux-backed session persistence, git-worktree isolation, one-click PRs, and mobile push with remote reply.
- MulmoTerminal manual — setup, workflows, feature reference, configuration, mobile notifications, and alternative / local model providers. Available in English and Japanese.
