跳转到内容
扉阅Feyxo

扩展包能做什么内容

扩展包是只放数据的文件夹:JSON 和 Markdown,没有代码,也不能联网。文件夹里放什么,决定它能改扉阅的哪一块。现在一共能做 11 类内容:

种类能做什么现成的例子去哪看
语法包
grammar
教扉阅多认一种语法:怎么问、拖进哪几个格子、做对后讲哪句规则
自带:17 章语法
样例:时间状语从句
能改什么
字段参考
外观包
look
换一整套颜色、字体、线条,和句子上每一种标记的样子
自带:高对比、扉阅自带
样例:夜墨、米纸
能改什么
字段参考
讲法
voice
同样的语法换一种口吻:规则卡、短名、问法、格子上的字
自带:扉阅自带
样例:考研版讲法
能改什么
字段参考
语言包
language
整个界面和讲解换成别的语言
自带:English、简体中文
样例:示例语言(加括号)
能改什么
字段参考
节奏
pace
做题的数:错几次给答案、几秒自动往下走、一句最多问几处
自带:扉阅自带
样例:慢一点
能改什么
字段参考
提示词包
prompt
换掉某一步问模型的说明(比如给小模型写短一点的)
样例:初中版说明、小模型说明
能改什么
字段参考
组合
bundle
一份配好的语法开关,可以顺手换上外观、讲法、节奏
自带:雅思、初中、高一(必修)、高二高三(选择性必修)
样例:起步组合、轻松读
能改什么
字段参考
导出模板
export
把做题记录导成别的样子:文件类型、开头结尾、每句怎么写
自带:表格、每行一条的文件
样例:Markdown 笔记
能改什么
字段参考
评测句集
cases
一批带标准答案的句子,给某一步打分
样例:长句主干示例
能改什么
字段参考
欢迎页
welcome
总览里“先在这句上试一下”的练习句
自带:扉阅自带
样例:初中版欢迎页
能改什么
字段参考
网站适配
site
某个网站的正文在哪几块、哪几块别管
样例:示例网站适配
能改什么
字段参考

下面一类一节:这一类能做到什么程度,再摆一个真实的成品。成品都是 SDK 自带的样例或默认扩展包里的原文件,构建官网时现读的,不是手抄的示意;每个样例都通过了 feyxo check。想自己动手,照做第一个扩展包改一个样例最快。

做到什么程度: 多教扉阅一个语法点,从“怎么算一处”到“做对后讲哪句规则”,整条链都由你定。

  • 一个语法点 = 短名、一句英文例句、一句说清“它决定了什么意思”的说明,加一道题和一张规则卡。
  • 题现在能用四种:拖进格子、管到哪、量几倍、跷跷板。题的画法、玩法和判对错是扉阅的,你定的是问什么、放什么、叫什么。拖进格子有时间线、两个世界、温度计、天平等多种场地。
  • 可以放进已有的章,也可以新起一章。
  • 发布前要带至少 10 句自己写的评测句,用 feyxo try 拿你配的模型试。
  • 扉阅自带的 17 类 68 个语法点都是这样的语法包,也是最好的参照:见语法现在支持的样子。

成品:样例 time-clauses(时间状语从句)。 一个语法点“谁先谁后”,把 before / after / until 连着的两件事放上时间线。

文件夹 time-clauses/ 里有:

  • feyxo-plugin.json
  • points/which-first/cases.jsonl
  • points/which-first/detect.md
  • points/which-first/point.json
  • rules.json
  • points/which-first/ (共 4 个文件,这里只列前 3 个)
feyxo-plugin.json
{
"format": "1.2",
"type": "grammar",
"id": "sample/time-clauses",
"version": "1.0.0",
"name": "时间状语从句",
"description": "把 before、after、until 连着的两件事练成一眼看出谁先谁后。",
"author": "sample",
"license": "AGPL-3.0-only",
"engines": ["field@1"],
"audience": ["senior", "cet", "kaoyan"],
"learns": ["en"]
}
points/which-first/point.json
{
"id": "which-first",
"chapter": "adverbial",
"name": "谁先谁后",
"example": "Before the ferry left, the captain checked every lifejacket.",
"meaning": "before、after 连着的两件事谁先谁后;读反了会把先后和因果弄颠倒。",
"texts": {
"actions.fieldTip": "点句子里带虚线的一段,放到“先发生”或“后发生”上;也可以直接拖过去"
},
"level": ["sentence"],
"engine": "field@1",
"order": 35,
"practice": {
"question": "这两件事,哪件先发生?",
"questionOne": "这件事是先发生的,还是后发生的?",
"zones": [
{ "id": "first", "label": "先发生", "tag": "先" },
{ "id": "then", "label": "后发生", "tag": "后" }
],
"shape": {
"kind": "timeline",
"now": 92,
"slots": [
{ "zone": "first", "box": [8, 34], "shape": ["pt", 25] },
{ "zone": "then", "box": [50, 34], "shape": ["pt", 67] }
]
},
"segs": [2, 2]
},
"rules": ["adverbial.before", "adverbial.after", "adverbial.until", "adverbial.once"]
…(后面还有 1 行)
rules.json
{
"cards": [
{
"id": "adverbial.before",
"line": "{form}:主句的事先发生,从句的事在它后面。",
"contrast": {
"used": { "en": "{form}", "zh": "主句先,从句后" },
"confusable": { "en": "after", "zh": "从句先,主句后" }
}
},
{
"id": "adverbial.after",
"line": "{form}:从句的事先做完,主句的事接着发生。",
"contrast": {
"used": { "en": "{form}", "zh": "从句先,主句后" },
"confusable": { "en": "before", "zh": "主句先,从句后" }
}
},
{
"id": "adverbial.until",
"line": "{form}:主句的事一直到从句那件事发生才变。",
"contrast": {
"used": { "en": "{form}", "zh": "一直到那时" },
"confusable": { "en": "before", "zh": "在那之前" }
}
},
{
"id": "adverbial.once",
"line": "{form}:从句的事一做完,主句的事马上跟上。",
"contrast": {
…(后面还有 6 行)

做出来以后,设置页“练什么”的“状语从句”下面多一行,网页上碰到 before / after 就出这道题。写法见语法点。

做到什么程度: 整套换掉看得见的东西。只能整套换、同时只用一套;没写的项用自带的补,所以一个外观包可以很短。

  • 28 个颜色角色(浅色、深色网站各一份)、5 档阴影。
  • 字体(写本机已经有的字体名)、整体字号、圆角、线宽、动效快慢。
  • 句子上 44 种标记(线索、放对、点掉的修饰、压灰的部分等)每一种的字色、底色、下划线、框。
  • 对比度有保底:颜色不够的那一项换回自带的,设置页会说是哪两项。

成品:样例 look-night(夜墨)。 只写了几个颜色、一个英文字体和两种标记。

文件夹 look-night/ 里有:

  • feyxo-plugin.json
  • marks.json
  • theme.json
theme.json
{
"colors": {
"action": { "light": "#1F3FA8", "dark": "#A9B8FF" },
"actionSoft": { "light": "#E3E8FA", "dark": "#232C58" },
"chinese": { "light": "#8A5208", "dark": "#F0B85C" },
"card": { "light": "#FFFFFF", "dark": "#121615" },
"line": { "light": "#D3D9E6", "dark": "#3A4556" },
"lineStrong": { "light": "#7C8392", "dark": "#7B8597" }
},
"fonts": { "en": "\"Charter\", \"Georgia\", serif" },
"radius": { "card": 10, "ask": 10 },
"motion": { "speed": 1.25 }
}
marks.json
{
"clue": {
"text": "textStrong",
"fill": "actionSoft",
"underline": { "color": "action", "style": "dotted", "width": 2 }
},
"segment-placed": {
"fill": "realSoft 60%",
"underline": { "color": "real", "style": "solid", "width": 2 }
},
"candidate": { "frame": { "color": "action", "style": "solid", "width": 2 } }
}

做到什么程度: 同样的语法点、同样的题,换一种口吻讲。只换字,不换题型、格子和答案;同时只用一个。

  • 规则卡那一句话,和“容易混的”那一对词。
  • 语法点的短名、问法、格子上的字、放对后的小标记。
  • 模型写中文解释时的口径(比如“多用语法书上的术语”)。

成品:样例 voice-kaoyan(考研版讲法)。 把时态、被动的说法换成语法书里的术语。

文件夹 voice-kaoyan/ 里有:

  • feyxo-plugin.json
  • voice.json
voice.json
{
"rules": {
"tense.had_done": {
"line": "{form}:过去完成时,表示“过去的过去”。",
"used": "过去完成时",
"confusable": "一般过去时"
},
"tense.had_been": {
"line": "{form}:过去完成进行时,到那时一直在做。",
"used": "过去完成进行时",
"confusable": "过去进行时"
}
},
"points": {
"feyxo/grammar-tense#sequence": {
"name": "时态",
"question": "按时态把这几件事放上时间轴。",
"questionOne": "按时态把这件事放上时间轴。",
"zones": { "before": "过去的过去", "ref": "过去某时" }
},
"feyxo/grammar-passive#direction": {
"name": "被动语态",
"meaning": "be + 过去分词:主语是承受动作的一方,别把“被……”读成“主动做”。",
"texts": {
"actions.fieldTip": "点句子里带虚线的一段,放到逻辑主语、谓语、逻辑宾语的位置上;也可以直接拖过去"
}
}
},
"texts": {
"grammar.title": "语法(考研版)"
},
"explain": "多用语法书上的术语,照考研英语阅读的讲法来,不打生活化的比方。"
}

做到什么程度: 把整个界面和讲解换成别的语言:设置页、弹窗、做题现场的每一句都跟着换。同时只用一个。

  • 自带的简体中文界面一共 26 块、1801 句,每一块一个 JSON 文件,键名一样,你只翻值。
  • 语法点和规则卡的文字也能一起翻。
  • 占位({n}、{name})一个不能多、一个不能少;每句有长度上限;缺的句子用简体中文补上,设置页会说还有几句没翻。
  • 换不了:扩展名、商店里的描述、工具栏图标(浏览器和商店在扩展运行前就读了)。

成品:官方英文语言包 feyxo-language-en(English)。 扉阅自带的、真的翻成英文的完整一份(在 packages/plugins-default)。下面只摆文件清单和其中一块。

文件夹 feyxo-language-en/ 里有:

  • feyxo-plugin.json
  • i18n/zh-Hans.json
  • language.json
  • texts/actions.json
  • texts/chapter.json
  • texts/check.json
  • texts/ (共 26 个文件,这里只列前 3 个)
feyxo-plugin.json
{
"format": "1.1",
"type": "language",
"id": "feyxo/language-en",
"version": "1.0.0",
"name": "English",
"description": "Show Feyxo’s whole interface in English.",
"author": "Feyxo",
"license": "AGPL-3.0-only"
}
language.json
{
"locale": "en",
"fallback": "feyxo/language-en",
"fontLead": "system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial"
}
texts/grammar.json
{
"title": "Grammar",
"lookTitle": "Look",
"pointsTitle": "Grammar points ({cats} categories, {n})",
"pointsLead": "Open a category to see its points. One square per point, filled means on. Tap a partly-on switch to turn all on, again to turn all off. Use the search at the top to find a point.",
"noPoints": "No points yet; more coming",
"catAllOn": "{n} points, all on",
"catAllOff": "{n} points, all off",
"catSome": "{n} grammar points, {on} on",
"stateOn": "On",
"stateOff": "Off",
"stateMixed": "Some on",
"switchChapter": "{name}: whole category",
"switchPoint": "{chapter}: {name}",
"pointSource": "{chapter}: {name}, which source to use",
"sourceLabel": "Which source to use",
…(后面还有 26 行)

做到什么程度: 改“走多快、问多少”,不改“问什么”。现在有 48 个数能写,每个数是整数、有范围,没写的用自带的;同时只用一个。

  • 自动往下走几秒、做错的那一步停不停、一问几个候选。
  • 各类题错几次给答案、划一段错几次浮起点竖线。
  • 一句里同一章最多问几次、最多标几段。

成品:样例 pace-gentle(慢一点)。 只写了 8 个数。

文件夹 pace-gentle/ 里有:

  • feyxo-plugin.json
  • pace.json
pace.json
{
"zhPresses": 4,
"autoNext": 6,
"candidateMisses": 3,
"helpMisses": 3,
"spanMissesToStart": 3,
"spanMissesToAuto": 4,
"fieldSegs": 2,
"whAsks": 1
}

每个数的范围和自带的值见节奏(字段参考)。

做到什么程度: 把某一步问模型的说明整篇换掉,比如给小模型、本地模型换一版更短更直白的。问的永远是你自己配的模型。

  • 可换的任务共 27 个:一层一层画整句结构、找语法点、词认不认识、管到哪等
  • 可以标一句“适合哪类模型”。
  • 找语法点、出题那几步的说明,是按用户开着的语法点拼出来的,你换整篇时也能用同样的记号让它照样拼。

成品:样例 prompt-small(小模型说明)。 把“这个词他认不认识”那一步的说明写短。

文件夹 prompt-small/ 里有:

  • feyxo-plugin.json
  • prompt.json
  • prompts/word-tier.md
prompt.json
{ "for": "Local models around 7B" }
prompts/word-tier.md
A word in an English passage has been selected. You are given the passage (one word per line, written as "index:word") and the index of the selected word. Reply with JSON only; no explanation.
- name: whether it is a name (person, place, organization, product, newspaper). Days, months and ordinary words capitalized at the start of a sentence don't count.
- part: core at the centre of the skeleton (subject, verb, object, predicative); detail an adjective or adverb on the skeleton whose removal doesn't change the meaning; modifier inside a clause, participle phrase, aside, or time or place phrase. For a name, write modifier.
- clue: this_sentence if a word in the same sentence lets its meaning be worked out, other_sentence if only another sentence does, none if nothing does. When part is not core, write none.
- form: grammar small words like auxiliaries, modals, negation and comparison; content content words; other anything else.
Example: Exports surged in May, while imports barely moved. Selected word 1 (surged) →
{"name": false, "part": "core", "clue": "this_sentence", "form": "content"}

做到什么程度: 一份配好的语法开关清单,按阶段或考试配好,一键套用、一键退回。

  • 哪几章、哪几个语法点开着或关着;可以是“照着设成一样”的完整快照,也可以只管写了的。
  • 顺手换上一套外观、讲法、节奏、界面语言、导出模板、提示词。
  • 每一章一句“为什么这样开关”,给人看的。
  • 组合里不能再套组合;“做对了少出一点”那两个数由用户自己在设置里打开,不许写。

成品一:默认扩展包里的“初中”。 参照课标和教材配的,是扉阅自带的四套之一,每一套开了什么见组合。

文件夹 combo-junior/ 里有:

  • bundle.json
  • feyxo-plugin.json
  • i18n/en.json
feyxo-plugin.json
{
"format": "1.1",
"type": "bundle",
"id": "feyxo/combo-junior",
"version": "1.0.0",
"name": "初中",
"description": "适合初中学生:按义务教育英语课程标准选的语法,开着中考会碰到的长难句,别的先关掉。",
"author": "扉阅",
"license": "AGPL-3.0-only",
"audience": ["junior"]
}
bundle.json
{
"note": "按《义务教育英语课程标准(2022年版)》三级(7-9年级)的语法项目配的;高中才系统学的几类先关掉,装好以后在「练什么」里能一个一个再调。",
"switches": {
"exact": true,
"chapters": {
"aside": false,
"emphasis": false,
"inversion": false,
"subjunctive": false
},
"points": {
"feyxo/grammar-comparison#ellipsis": false,
"feyxo/grammar-comparison#most": false,
"feyxo/grammar-comparison#rather": false,
"feyxo/grammar-comparison#the-more": false,
"feyxo/grammar-comparison#times": false,
"feyxo/grammar-comparison#weigh": false,
"feyxo/grammar-modal#be-to": false,
"feyxo/grammar-modal#needless": false,
"feyxo/grammar-modal#past-guess": false,
"feyxo/grammar-modal#should-have": false,
"feyxo/grammar-negation#double-negative": false,
"feyxo/grammar-negation#reversed": false,
"feyxo/grammar-negation#transfer": false,
…(后面还有 25 行)

成品二:样例 bundle-starter(起步一整套)。 一次装好夜墨外观和时间状语从句,先不练生词:把别的样例原样打进来,演示 needs 怎么写。

文件夹 bundle-starter/ 里有:

  • bundle.json
  • feyxo-plugin.json
  • plugins/sample/look-night.json
  • plugins/sample/time-clauses.json
feyxo-plugin.json
{
"format": "1.0",
"type": "bundle",
"id": "sample/bundle-starter",
"version": "1.0.0",
"name": "起步组合",
"description": "一次装好夜墨外观和时间状语从句,先不练生词。",
"author": "sample",
"license": "AGPL-3.0-only",
"needs": {
"sample/look-night": "^1.0",
"sample/time-clauses": "^1.0",
"feyxo/grammar-adverbial": "^1"
}
}
bundle.json
{
"note": "装好以后在设置页“语法”里把“生词”打开就能接着练。",
"switches": {
"chapters": {
"vocab": false
},
"use": {
"look": "sample/look-night"
},
"reasons": {
"vocab": "生词先不练,先把句子结构读熟"
}
}
}

自己的组合不用手写:设置页“扩展包”页“备份与换电脑”里的“导出我的设置”,直接导出你调好的开关。

做到什么程度: 做题记录导出成什么样,由你定:文件类型、开头结尾、每一句怎么写。

  • 文件类型 csv、tsv、md、txt、jsonl。
  • 每一句可以用句子、日期、网站、网址、哪一类、做得怎样、备注这些占位。
  • 引号和转义、Excel 要不要 BOM,都能选。

成品:样例 export-markdown(Markdown 笔记)。 导成一条一句的列表,贴进笔记软件就能用。

文件夹 export-markdown/ 里有:

  • export.json
  • feyxo-plugin.json
export.json
{
"label": "Markdown",
"file": "md",
"head": "# 我读过的长难句\n\n",
"row": "- {sentence}\n - {date} · {site} · {kinds} · {how}\n - 备注:{note}\n",
"quote": "none"
}

做到什么程度: 一批自己写的、带标准答案的句子,给某一步打分用。换了模型、改了提示词,做得怎么样,拿它跑一遍就知道。

  • 说明这批句子给哪一步用,和句子是从哪来的(必须写,说明是自己写的还是公版的)。
  • 句子本身一行一句,带标准答案。
  • 在你自己的电脑上用 feyxo try,拿你配的模型跑,看成绩。

成品:样例 cases-demo(长句主干示例)。 十句自己写的长句,给“画整句结构”那一步,每句写了主干。

文件夹 cases-demo/ 里有:

  • cases.json
  • cases.jsonl
  • feyxo-plugin.json
cases.json
{ "for": "structure", "source": "SDK 样例自己写的句子,没有从别处抄" }
cases.jsonl
{"id": "demo:harbour", "sentence": "The harbour, which had been closed for three weeks after the storm, finally reopened on Monday.", "expect": {"trunk": "The harbour reopened"}}
{"id": "demo:council", "sentence": "Members of the council who voted against the plan said they would raise the issue again next year.", "expect": {"trunk": "Members said"}}
{"id": "demo:orchard", "sentence": "Growing apples in such a dry valley requires patience that few young farmers are willing to spend.", "expect": {"trunk": "Growing apples requires patience"}}
…(后面还有 7 行)

做到什么程度: 换总览最上面“先做这几步”那一块:有哪几步、每步怎么说,和里面的练习句,给初中、雅思这些受众换一套对得上的。同时只用一个;装好时设置页会自己打开,停在总览。

  • 练习句:一句英文、切成几块(主干还是修饰、修饰挂谁),加一句中文大意(打开给整句中文时才用);回答写死,不用配模型。
  • 引导步骤(steps.json):这一块的标题、开头、最后一行和 1 到 6 步,按你写的顺序画在总览里;做完条件都满足了这一块收起来。条件、动作、控件只能从扉阅给的名单里选,不带代码、不带网址;总开关只能用户自己点了才改。

成品:样例 welcome-junior(初中版)。 简单句,先试一下再配模型。写法见欢迎页。

文件夹 welcome-junior/ 里有:

  • feyxo-plugin.json
  • practice.json
  • steps.json
feyxo-plugin.json
{
"format": "1.1",
"type": "welcome",
"id": "sample/welcome-junior",
"version": "1.0.0",
"name": "初中版欢迎页",
"description": "先练一句带修饰的简单句(一个主谓、没有从句),再配模型、开启要读的网站、打开扉阅。",
"author": "sample",
"license": "AGPL-3.0-only",
"audience": ["junior"]
}
steps.json
{
"intro": "读英文卡住的时候,选中那一句,按 {copyKey}。先在下面这一句上练一练,不用任何设置。",
"steps": [
{
"id": "try",
"title": "先在这一句上试一下",
"body": "这句已经替你选好了,直接按 {copyKey}。按一下看句子的主干,再按一下划出“修饰的那一段”,读懂了就按 Esc。",
"tip": "按 Esc 收起,页面跟原来一模一样。",
"control": { "name": "practice" }
},
{
"id": "model",
"title": "再配上你的大模型",
"body": "扉阅直接问你配的模型:填接口格式、地址、密钥、模型名四样,点“试一下”看通不通。",
"control": { "name": "button", "caption": "去配模型", "action": "openSettings" },
"done": {
"when": "modelConfigured",
"status": "配好了",
"control": { "name": "button", "caption": "改设置", "action": "openSettings" }
}
},
{
"id": "sites",
"title": "开启你要读的网站",
"body": "扉阅默认哪个网站都不出来。去要读的英文网站,点右上角的双页图标,再点“在这个网站用扉阅”;也可以在这里直接写网址。",
"control": { "name": "sites" },
"done": { "when": "siteOpened", "status": "已开启" }
},
{
"id": "popup",
…(后面还有 11 行)
practice.json
{
"sentence": "The girl next to me is very good at maths.",
"chunks": [
{ "tokens": [0, 1], "role": "trunk", "center": 1 },
{ "tokens": [2, 4], "role": "modifier", "center": 4, "modifies": 0, "attach": 1 },
{ "tokens": [5, 9], "role": "trunk", "center": 7 }
],
"gist": "我旁边的那个女孩数学很好。"
}

做到什么程度: 告诉扉阅某个网站的正文在哪几块、哪几块别管。绝大多数网站扉阅自己就找得到正文,只有页面结构特别的才需要它。

  • 写域名(*. 开头能匹配所有子域名)、正文的块、别管的块(评论区、广告这类)。
  • 在别管的地方按 ⌘C,就是普通的复制。
  • 它只是找网页上的块,选择器里不许有 url()、花括号等会带出别的东西的写法。

成品:样例 site-demo(示例网站适配)。 一个示例新闻站:正文在文章里,评论区、推荐阅读、订阅栏别管。

文件夹 site-demo/ 里有:

  • feyxo-plugin.json
  • site.json
site.json
{
"sites": [
{
"hosts": ["news.example.org", "*.news.example.org"],
"main": ["article .story-body"],
"skip": [".comments", "aside.related", "[data-role='newsletter']"]
}
]
}

一个扩展包也可以是几样的合集:组合的清单里写 needs,把别的扩展包原样打进来,装一次,几样一起装好。上面“起步一整套”就是这样做的。怎么打、怎么写,见合集和组合。

做好以后怎么发给别人,见怎么分享。