@extenshi/cli

中文文档
0.54.0发布于 2026/11/13ES Module近 30 天下载 6488

预印浏览器扩展的安全扫描器

中文使用文档
文档目录3 节
  1. 构建地图
  2. 本地化扩展名
  3. 独立薪酬

@extenshi/ cli (英语)

见 CLI 文档 用于扫描、项目设置和出版.

构建地图

extenshi map 打开一个本地页面,以显示您扩展的构建情况,作为步骤地图:做了哪些工作,代理正在做哪些工作,等待什么,以及这个扩展不需要什么。 它继续运行 127.0.0.1 只是,不需要网络,并读取磁盘上的工程(明显,图标, _locales,存储资产,构建, CI 工作流程)加上 Dojo 绑定在 .extenshi/project.json。 。 。 .

extenshi map             # start the map for this project and open it
extenshi map status      # progress, steps waiting on you, steps that can start; --json for everything
extenshi map stop        # stop the map server
extenshi map decline     # record that you do not want the map, so agents stop offering it
extenshi map step        # an agent reports a step: start, progress, done (with --file proof), stop
extenshi map review      # an agent offers you variants to choose from (icons, screenshots, listing copy)
extenshi map wait        # the agent waits until you pick one or ask for another round
extenshi map choose      # the agent records your answer from the chat

每个项目都有一张地图。 运行 extenshi map 再次从另一个终端或另一个代理找到已经运行并打印其地址而不是启动第二个地址的服务器;打开的标签不重复。 在一个 git worktree 中,地图属于主检出,因此在平行工作树工作的代理商都向同页报到. 国家生活在 .extenshi/build-map.json ;服务器在1小时后自行停止,没有打开页面,并保留其端口供下次启动.

只有您可以在外部完成的步骤, 如商店开发者账户或 Dojo 创建的反馈表, 才会有 标记为已完成 按钮,带有可选注释。 标记是写给 .extenshi/build-map.json每个经纪人和工作树木都看见它; 撤销 在任务旁边 把它拿回来.

在去商店的路上,不需要一个付费的计划。 步骤背后的工具是属于我们的,步骤面板会主动提出自己完成(https链接您自己的隐私政策,未安装调查或反馈表,您自己的许可理由,您上传的存储)或跳过,以及跳过的成本. 您给的链接是一个编码代理来写入 src/extenshi.config.js店家要的跳出一步 就会在店家仪表板上列出该做什么 如果没有 Dojo 的发布准备, 列表准备状态会在当地检查, 存储步骤会显示磁盘上的软件包, 粘贴值以及您按下前的仪表板链接 我把它提交审查。 。 。 .

花费Extenshi信用(安全扫描、合规自我检查、确定发现、特殊研究、图标概念、上市副本)的步骤显示还剩下多少这类信用。 每个账户都有一次免费;没有账户,步骤提议 注册免费信用,与 extenshi login,用代码检查地图。 一旦免费贷款用完, 便自动打开标识, 在有地图的项目中, extenshi scan 叶子 .extenshi/scan.json,而其名称在磁盘上没有变化的软件包时,地图会计算扫描.

对于图标概念,截图和上市副本,一个代理在地图上为您提供变体 extenshi map review。打开步骤的每个预览,然后选择一个或写出要为另一回合改变什么;代理获得的答案 extenshi map wait。预览会在沙盒中从您的工程文件中提供,所以无法到达地图。 后取出另一种变体后将从旧取取回所建造的台阶再发回跑道.

每一步都说它所依赖的:你的标记,项目文件(路径和sha256)或道场记录. 映射服务器在同一文件中每一步保留一个证据日记:当一个事实出现或消失,以及每个标记和撤销. 只按你的话做的一个步骤就有一个空洞的支票; extenshi map status 列出这些步骤,以及 map status --json 添加每个步骤 basis 还有日记.

本地化扩展名

关于带有英文正文的无包装扩展, localize init ./extension --output ./extension-localized 创建一个带有本地化显示字段和静态HTML文本/播放属性(CLI 02.7.0+)的新副本. 输出必须是新和输入外的,并带有现有的父目录. 外部包装 extenshi-i18n.js 应用信件而不替换标记。 JavaScript、格式提交值和不支持的模板/CSP/编码/搜索箱页面保持不变,并在 LOCALIZATION-REPORT.mdZIP和JS/AST的提取不包括在内.

免费 localize 工作流程运行于 已解开的国际化扩展目录它要求 manifest.json 与 default_locale 财务报告和审定财务报表 _locales/<default_locale>/messages.json它为您自己的翻译或编码代理编写请求;它不调用翻译服务。 通常的CLI遥测偏好仍然适用.

extenshi localize prepare ./extension --lang fr,de,es --output ./translation-request
# Translate messages in translation-request/localization-request.json.
# Review every requested message and add "reviewed": true to each locale object.
extenshi localize apply ./extension --translations ./translation-request/localization-request.json
extenshi localize check ./extension

可选 localization.json 在扩展根中:

{
  "version": 1,
  "sourceLocale": "en",
  "targetLocales": ["fr", "de", "es"],
  "protectedTerms": ["Acme"]
}

有了这个配置, --lang 是可选的。 所有三个命令都接受 --protect Acme,Product 添加在原始信息中出现时必须留下的确切术语。 编写的请求包括已配置的术语。 在 localization.json,或重复 --protect 应用/检查时.

经审查的请求有这种形状(实际来源是: prepare:

{
  "version": 1,
  "sourceLocale": "en",
  "locales": {
    "fr": {
      "reviewed": true,
      "sourceHashes": { "greeting": "sha256-from-prepare" },
      "messages": { "greeting": { "message": "Bonjour" } }
    }
  }
}

请求中仅出现缺失,未跟踪,源变化或目标编辑的密钥. 居住地也可以包括: removeKeys 对于从源中删除的密钥; 在设定前审查这些清除 reviewed: true。应用从目标目录和跟踪状态中删除它们,如果密钥在源中返回,则拒绝删除。 当应用了其他密钥时,现有译名仍然完整. .extenshi-localization.json 记录源和经审查的目标散列只有在成功应用之后;保持源控制。 直接目标编辑需要再次审查. 旧的仅源状态还需要在 check 通过。 未经修改的第二份准备没有本地地址请求 。 每次使用新输出目录:准备拒绝覆盖翻译工作.

应用需要一个已审查的捆绑并拒绝未知密钥,空信件,已更改的占位符,已更改的位置替代或美元逃逸,缺少被保护的名词, stale source hashes,无效的地块路径和并联的工作空间文件. 它在写出和检查本地化的显示长度之前验证所有请求的本地化,加上现有上市风险规则对默认本地化的新发现. 明细检查在测量可见文本之前解决不敏感大小写消息名称,静态命名占位符和美元逃出. 需要运行时位置参数的显式字符串被拒绝; 使用静态内容 。 检查是高压的,不能证明翻译准确性或存储接受。 每个应用地块都需要完整的翻译;稀有浏览器倒回目录需要先翻译出缺失的密钥.

check 打印 JSON 和 状态 1 的出处,用于丢失、 stale、未审查或无效的翻译,包括已配置但未创建的目标本地化。 保存自己翻译的工程(例如,每页写出一个脚本) messages.json无 .extenshi-localization.json,所以没有任何内容通过准备/申请来审查。 没有那个文件 check 运行在 parity-only 模式,或运行 check ./extension --parity-only 自己: 将每个地方与缺漏或额外密钥的默认地方比较, 更改 $NAME$, (中文(简体) ), $1 财务报告和审定财务报表 $$ 标志和 placeholders 定义,空的或错误的,保留 @@ 名称、 只重写、 缺少 default_locale 目录和地块目录 Chrome忽略了,加上相同的上市风险和显示长度的结论审查模式报告;它忽略了审查状态. 规则列表参见本地化指南. JSON的报告 "mode" 当自动选择模式时,a note。该工作流程涵盖扩展消息目录,包括本地化的显示文本。 全库描述和截图需要单独本地化. RTL文本被接受用于支持的地块,但视觉方向,外溢和交互需要测试目标浏览器.

独立薪酬

extenshi pay 工作时没有本地寄存器、项目装订或Extenshi开发项目。 它需要有一个后端,并有独立的支付支持和明确的支付权限,在您的 API 密钥上 API 密钥。现有密钥默认无法付费访问.

extenshi pay list
extenshi pay create --input '{"name":"My extension"}' --apply
extenshi pay readiness --input '{"appId":"<application-uuid>"}'
extenshi pay connect --input '{"appId":"<application-uuid>"}' --apply
extenshi pay seller --input '{"appId":"<application-uuid>"}'
extenshi pay profile --input-file seller-profile.json --apply
extenshi pay offer-upsert --input-file offer.json --apply
extenshi pay enable --input '{"appId":"<application-uuid>","enabled":true}' --apply
extenshi pay export --input '{"appId":"<application-uuid>","resource":"payments"}' --output payments.jsonl

每次变异都要求 --apply;这是明确的操作,而不是干跑的终点. connect 返回作者完成 Stripe KYC 的 URL。 协议必须在浏览器中被接受. 发射前必须检查SDK登记册的准备程度和实际可用性。 CLI从来不接受协议或创建平台自有销售商.

使用 link 与 { "appId": "...", "projectId": "..." } 附加一个任择发展项目 unlink 删除链接. archive 保存现有付款数据. offer-archive 带 appId 财务报告和审定财务报表 sku。 。 。 . trial 带 appId 财务报告和审定财务报表 trialDays (0-365,或 null 以结束自由审判. rotate-key 生成一个新的可公布的 SDK 密钥; 以前的公用密钥仍然为已安装的建筑所接受。 这不是秘密撤销 超时后不要盲目重试创建、连接或旋转 .

简介 JSON: { "appId": "...", "profile": { "displayName": "Author-confirmed name", "supportUrl": "https://example.com/support", "termsUrl": "https://example.com/terms" } }提供JSON: { "appId": "...", "sku": "pro", "kind": "subscription", "interval": "month", "amountMinor": 499, "currency": "usd", "title": "Pro", "features": ["premium"] }一次性或终身提供 interval: null。 。 。 .

extenshi pay payment-evidence --input '{"appId":"..."}' 打印Extenshi的付款分类账所证明的应用程序,每个模式:结账、发放许可证、一个装置收到签署的许可证、第二次安装时恢复、退款被撤销。 它来源于提供商签名的webhooks,仅携带不透明的ID和时间戳,也是同样的证据 extenshi release status 用于链接项目的付款核对。 只有现场采购符合释放付款要求.

extenshi pay test-cycle --app <appId> [--sku pro] [--refund-key-env NAME] 对照卖方处于测试模式并打印出证据的应用程序,经营一项Frede TEST-Mode采购。 它拒绝现场销售者、不测试的退票环节和不测试的退票钥匙。 CLI作为安装:它打开出票口,用4242 4242 4242卡打印主机URL支付,等待网约车,验证所签的许可证,可选择退款与命名为"Frede TEST"的秘密 --refund-key-env 并检查签名的撤销。 测试模式的购买记录和显示,但不能满足放行付款要求.

无 --output导出返回一页 nextCursor; 将光标递回下一页。 与 --output,所有页面被流到一个新的私密(0600)JSONL文件;现有的文件从不被覆盖,失败会去除不完整的文件. 资源:报价、付款、订阅、应享权利、客户。 保持出口隐私。 只有可公布的 SDK 密钥属于扩展码.

版本与发布记录

@extenshi/cli 共发布 80 个版本,首次发布于 2026/06/05;过去 12 个月发布了 80 个版本。

版本发布日期距今
0.54.0latest2026/11/131 天前
0.53.52026/11/122 天前
0.53.62026/11/122 天前
0.53.42026/11/112 天前
0.53.32026/11/112 天前
0.52.02026/11/112 天前

关于 @extenshi/cli 的常见问题

@extenshi/cli 是什么?

预印浏览器扩展的安全扫描器

如何安装 @extenshi/cli?

在项目目录运行 npm install @extenshi/cli,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 extenshi,可以用 npx extenshi 直接运行。

@extenshi/cli 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/extenshi__cli 是否存在。

@extenshi/cli 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@extenshi/cli 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@extenshi/cli 可以商用吗?

@extenshi/cli 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@extenshi/cli 的下载量有多少?

根据 npm 官方下载统计,@extenshi/cli 在 2026/10/14 – 2026/11/12 这 30 天内被下载 6,488 次,日均约 216 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@extenshi/cli 还在维护吗?

最新版本 0.54.0 发布于 2026/11/13(1 天前);至今共发布 80 个版本,其中过去 12 个月发布了 80 个;首次发布于 2026/06/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。