Skip to content

xichan96/dinotty-plugins

Repository files navigation

dinotty-plugins

Plugin collection for dinotty -- a set of tools that extend the dinotty desktop application with developer productivity features.

Plugins

Plugin Version Description Description (中文)
CC Switch 2.0.0 Quick switch Claude Code API Provider (based on cc-switch CLI) 快速切换 Claude Code API Provider (基于 cc-switch CLI)
Command Bookmarks 1.0.0 Bookmark and batch-send commands to multiple terminals 命令收藏夹,支持批量发送到多个终端
Whiteboard 1.0.0 Infinite canvas whiteboard with freehand drawing, shapes, text and images 无限画布白板工具,支持自由绘图、图形、文本和图片
JSON Formatter 1.0.0 JSON formatting, minifying and validation tool JSON 格式化、压缩与验证工具
Skill Manager 1.0.0 Manage Claude Code Agent Skills (~/.claude/skills/) 管理 Claude Code Agent Skills (~/.claude/skills/)
Text Diff 1.0.0 Text diff comparison tool with line-by-line highlighting 文本差异对比工具,支持逐行对比与高亮显示
Claude Code 1.0.0 Visual conversation manager for Claude Code Claude Code 可视化对话管理 — 浏览历史、新建和恢复会话

Installation

Each plugin can be installed independently through the dinotty plugin manager, or by cloning this repository and pointing to the desired plugin subdirectory.

Prerequisites

  • dinotty desktop application
  • Node.js (for plugins that require a build step)

Some plugins have additional dependencies:

Plugin Dependencies
CC Switch cc-switch CLI, jq, bash, python3, curl
Command Bookmarks None
Whiteboard Node.js + esbuild (for building from source)
JSON Formatter None
Skill Manager git, curl
Text Diff None
Claude Code claude CLI (in PATH), 需先安装 Claude Code CLI

Plugin Architecture

Each plugin follows a standard manifest-driven structure:

plugin-name/
  plugin.json    # Plugin manifest (id, name, version, entry, styles, commands)
  main.js        # Entry point (or dist/main.js for compiled plugins)
  styles.css     # Plugin styles

plugin.json

{
  "id": "plugin-id",
  "name": "Plugin Name",
  "version": "1.0.0",
  "description": "Short description",
  "icon": "icon-name",
  "entry": "main.js",
  "styles": "styles.css",
  "commands": [
    { "id": "command-id", "title": "Command Title" }
  ]
}

Plugin API

Plugins receive a PluginContext object providing access to dinotty's runtime features:

export default function activate(ctx) {
  // Reactive state
  const count = ctx.ref(0);
  const state = ctx.reactive({ items: [] });
  const doubled = ctx.computed(() => count.value * 2);

  // Command palette
  ctx.commands.register('my-command', 'My Command', () => { /* ... */ });

  // Persistent storage
  ctx.storage.get('key');
  ctx.storage.set('key', value);

  // Shell execution
  ctx.exec.run('echo hello');

  // Terminal interaction
  ctx.terminal.send(paneId, 'command\n');
  ctx.terminal.listPanes();
  ctx.terminal.activePaneId();

  // UI
  ctx.ui.notify('Hello!');
  ctx.ui.confirm('Are you sure?').then(ok => { /* ... */ });

  // Lifecycle
  ctx.onMounted(() => { /* ... */ });
  ctx.onUnmounted(() => { /* ... */ });

  // Virtual DOM (Vue-like hyperscript)
  return () => ctx.h('div', { class: 'my-plugin' }, [
    ctx.h('button', { onClick: () => count.value++ }, `Count: ${count.value}`)
  ]);
}

Project Structure

dinotty-plugins/
  registry.json              # Plugin registry manifest
  cc-switch/                 # API provider switcher (TypeScript + Bash)
  command-bookmarks/         # Terminal command bookmarks (JavaScript)
  dinotty-whiteboard/        # Infinite canvas whiteboard (JavaScript, esbuild)
  json-formatter/            # JSON tools (JavaScript)
  skill-manager/             # Claude Code skill manager (TypeScript)
  text-diff/                 # Text diff tool (JavaScript)
  claude-code/               # Claude Code conversation manager (TypeScript)

Development

Building from source

Plugins with TypeScript sources need to be compiled before use:

CC Switch

cd cc-switch
esbuild src/ui.ts --bundle --format=esm --outfile=dist/main.js

Whiteboard

cd dinotty-whiteboard
npm install
npm run build

Skill Manager

cd skill-manager
esbuild src/ui.ts --bundle --format=esm --outfile=dist/main.js

Claude Code

cd claude-code
npm install
npm run build

Plugins written in plain JavaScript (Command Bookmarks, JSON Formatter, Text Diff) require no build step -- edit main.js directly.

Adding a new plugin

  1. Create a directory with your plugin ID
  2. Add a plugin.json manifest
  3. Implement the entry point (main.js) exporting an activate(ctx) function
  4. Add styles in styles.css
  5. Register the plugin in registry.json at the repository root

Tech Stack

  • Runtime: dinotty desktop application (Vue.js-based plugin system)
  • Languages: JavaScript, TypeScript, Bash
  • Build: esbuild
  • DOM: Virtual DOM via ctx.h() hyperscript

License

See individual plugin directories for license information.

About

Dinotty Terminal Plugin

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors