一个最小、无权限的 .aplg 插件源码示例:使用原生 HTML/CSS/JavaScript 实现文本统计,不需要 Rust,不上传文本,不读写文件,也不依赖框架。
A minimal, permission-free .aplg plugin source example. It counts Unicode code points and lines using plain web technologies. No Rust or host permissions are required.
当前状态: 可独立预览、测试和构建。
@ai-switch/tauri-plugin-runtime与@ai-switch/tauri-plugin-devkit尚未发布,因此本例暂不依赖它们,不提供自制替代 runtime/打包器。真实宿主装载、正式.aplg打包和 plugin-store 自动发布尚未接通,也尚未完成桌面/Web 宿主端兼容验收。
要求 Node.js 22.12 或更高版本、pnpm 10.12.4。
pnpm install --frozen-lockfile
pnpm dev打开终端显示的本地地址。开发服务器只绑定 127.0.0.1。
pnpm test
pnpm build
pnpm preview构建输出在 dist/,资源使用相对路径;运行时清单 aplg.json 的入口是 dist/index.html。浏览器预览需要通过 HTTP 服务打开,不要直接双击 dist/index.html。
- 实时统计 Unicode 码点数、非空白码点数和行数。
- 提供“载入示例”和“清空”按钮、键盘焦点、窄屏布局与明暗模式。
- 内容只存在于页面内存中,刷新或关闭页面后不保留。
- 无 Rust、网络、文件、剪贴板或持久存储权限。
- Node 内置测试覆盖空文本、emoji、组合字符、Unicode 空白和不同换行格式。
- GitHub Actions 只做安装、测试和构建,不申请发布权限或密钥。
字符统计按 Unicode 码点,不是 UTF-16 长度、字数或视觉字素簇。组合字符和多码点 emoji 可能包含多个码点。字符数包含换行;CRLF、CR、LF 各表示一个换行分隔符,尾随换行产生空的末行,空文本为 0 行。页面输入上限是 200,000 个 UTF-16 代码单元。
aplg.json 插件清单和空权限声明
index.html 可访问的页面结构
src/analyze-text.js 可测试的纯统计函数
src/main.js 输入事件和结果呈现
src/styles.css 本地样式,无外部字体
vite.config.js 相对资源路径配置
tests/ 行为测试
.github/workflows/ci.yml 只读 CI
这个项目是插件源码示例,不是通用插件宿主示例。纯 UI 演示暂不需要 runtime API;未来使用文件或其他宿主能力时,应使用公共 runtime 和 devkit,不直接调用 Tauri internals、宿主管理 API 或另造桥接协议。
点击 GitHub 的 Use this template 创建自己的仓库。复制后至少修改:
aplg.json的id、名称、说明、版本及贡献页面名称。package.json的项目名、版本和源码仓库地址;同步更新锁文件。- README、LICENSE 和项目资源中的作者/版权说明。
- 只声明实际需要的权限,不为方便预先申请文件、网络或原生权限。
示例 ID io.github.ai-switch.plugin-example 不能用于发布你自己的插件。engines.aplg: ^1.0.0 表示目标设计契约,不表示该宿主版本已经发布。
公开发布入口:ai-switch/plugin-store。任何人都可以提交 PR,维护者审核后才允许发布。
当前商店的自动构建、签名和 Release 工作流尚未实现。待公共工具链上线后,按商店贡献规范提交:
plugins/<plugin-id>/entry.json:插件与维护者登记。plugins/<plugin-id>/versions/<version>.json:固定源码仓库数字 ID、完整 commit、相对根路径和aplg.jsonSHA-256 的版本申请。
商店 CI 将负责受控打包和 Release 分发;不要把编译后的 .aplg、dist/、私钥或 token 提交到 Git。也不要在本项目 CI 中加入商店写权限或自动批准投稿的逻辑。
本仓库目前没有插件 Release,没有自动向商店提交 PR,也不将普通 pnpm build 输出声称为经过签名的可安装插件包。
MIT。复制模板后应保留已有版权说明,并为自己的新增代码正确标注作者。