跳到主要内容

打包与两条分发路

打包:用 channek plugin pack,别手工 zip

制品(.channekplugin)只能用官方打包命令打:

channek plugin pack <插件目录>

它按与安装侧同一份内容黑名单先把包剥干净(.git*.npmrcnode_modules、编译缓存、疑似密钥文件)——而安装侧对这些是整包拒。手工 zip 出来的包能上架、能下载、指纹也对,最后卡在每个用户的机器上,你收不到任何信号;实测多数只因为夹带了一个 .gitignore

node_modules 不随包分发:它按机器与平台装出来,打进去既臃肿又装不上。插件目录里带 package.json 依赖 + package-lock.json 即可——宿主会自动给用户一颗「就地安装依赖」的按钮(用 app 自带的 node、逐包校验完整性、不跑生命周期脚本)。T2 逻辑入口更推荐全量 bundle 成单文件 CJS,连这一步都省掉。

两条到达用户的路

它们不是二选一,是同一个插件的两种到达方式。

① 独立分发——插件是插件

用户拿到插件目录(下载 / 解压 / 商店安装),经「设置 → 第三方插件 → 导入」装到 ~/.channek/plugins/<id>/

  • 适用:通用能力(一条 TTS、一个主题、一个查看器)——跟任何具体频道无关。
  • 本地目录安装(含开发期 symlink)不要求签名;T2 另过安装前知情同意(按版本 + 摘要 + 权限清单批准,变了重新确认)。

② 随卡包捎带——插件跟着风格卡

导出 .channekcard 时,卡依赖的插件一并打进包里;收卡人导入卡包,插件被逐个送去过同一条信任门。

  • 适用:复刻一个频道——卡说「我要这些能力」,包里就带着它们,收卡人解开即是完整一套。
  • 谁被带上:卡 requires.plugins(含从步序反推的)∩ 本机已装 ∩ 非内置——只带卡要求的,不夹带你机器上装的其它东西。
  • 签名闸:离线侧载没有商店索引可比对,签名是唯一防篡改锚——包内 T1/T2 插件无有效签名一律拒装(T0 纯数据免签)。装不上的插件不牵连卡:卡是数据、先进库,失败逐条报告。
  • 导入永不静默:收卡人会看到「本包含 N 个可执行插件 · 最高信任级」的披露,逐个确认后才安装。

怎么选

你在做什么走哪条
发布一个通用能力给所有人独立分发
把自己的频道整套交给别人复刻随卡包走(卡 + 它依赖的插件)
本地开发中ln -s 进发现目录

卡不是插件的替代品:能力做成插件、可复用;卡只是把它们用起来的那份描述。同一个插件既能独立发布,也能被任意多张卡带走——两条路指向同一份东西。

用到的官方 npm 包

全部 Apache-2.0,与 app 本体分开授权——你可以自由使用、修改、再分发这些接口层:

用它做什么
@channek/sandbox-sdkT1 沙箱桥(握手 / 白名单 op / 主题 / 存储),打进你的 bundle
@channek/plugin-kitmanifest 类型与 JSON Schema、校验
@channek/ipc-contract桥应答的精确 DTO 类型(类型层依赖,运行时零依赖)
@channek/style-card按语义 id 解析卡与工件(写卡相关插件用)
@channek/project-format.channek 工程格式类型(提议 EditTransaction 用)
@channek/core跨包共用的类型与纯函数