Files
jackwener__opencli/clis/mubu/docs.js
SherlockSalvatore 2aee4caa10 feat(mubu): add Mubu adapter with 5 commands (#964)
* feat(mubu): add mubu (mubu.com) adapter with 5 commands

Commands: doc, docs, notes, recent, search.

- Uses COOKIE strategy; API calls via in-page XHR with Jwt-Token
  from localStorage (matches the web app's own mechanism).
- Renders node trees to Markdown (default) or plain text;
  supports tables, tasks, images, emoji, mentions, strikethrough,
  underline, and nested structures.
- notes supports flexible time ranges: single day, month, year,
  or custom --from/--to spans, plus a --list overview mode.
- search returns full-text matches with hit count and snippets
  for both folders and documents.

* fix(manifest): register mubu commands in runtime manifest

---------

Co-authored-by: jackwener <jakevingoo@gmail.com>
2026-04-13 16:50:32 +08:00

44 lines
1.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { cli, Strategy } from '@jackwener/opencli/registry';
import { formatDate, mubuPost } from './utils.js';
cli({
site: 'mubu',
name: 'docs',
description: '列出幕布文档(默认根目录,--starred 查看快速访问列表)',
domain: 'mubu.com',
strategy: Strategy.COOKIE,
args: [
{ name: 'folder', default: '0', help: '文件夹 ID(默认根目录 0)' },
{ name: 'starred', type: 'bool', default: false, help: '只显示快速访问的文档和文件夹' },
{ name: 'limit', type: 'int', default: 50, help: '最多显示条数' },
],
columns: ['type', 'id', 'name', 'updated', 'stared'],
func: async (page, kwargs) => {
const folderId = kwargs.folder;
const starred = kwargs.starred;
const limit = kwargs.limit;
await page.goto('https://mubu.com/app');
const body = starred ? { source: 'star' } : { folderId };
const data = await mubuPost(page, '/list/get', body);
const folders = (data.folders ?? []).map((f) => ({
type: '📁',
id: f.id,
name: f.name,
updated: formatDate(f.updateTime),
stared: f.stared ? '★' : '',
}));
const docs = (data.documents ?? []).map((doc) => ({
type: '📄',
id: doc.id,
name: doc.name,
updated: formatDate(doc.updateTime),
stared: doc.stared ? '★' : '',
}));
return [...folders, ...docs].slice(0, limit);
},
});