扩展包能做什么内容
扩展包是只放数据的文件夹: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.jsonpoints/which-first/cases.jsonlpoints/which-first/detect.mdpoints/which-first/point.jsonrules.json- points/which-first/ (共 4 个文件,这里只列前 3 个)
{ "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"]}{ "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 行){ "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.jsonmarks.jsontheme.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 }}{ "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.jsonvoice.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.jsoni18n/zh-Hans.jsonlanguage.jsontexts/actions.jsontexts/chapter.jsontexts/check.json- texts/ (共 26 个文件,这里只列前 3 个)
{ "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"}{ "locale": "en", "fallback": "feyxo/language-en", "fontLead": "system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial"}{ "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.jsonpace.json
{ "zhPresses": 4, "autoNext": 6, "candidateMisses": 3, "helpMisses": 3, "spanMissesToStart": 3, "spanMissesToAuto": 4, "fieldSegs": 2, "whAsks": 1}每个数的范围和自带的值见节奏(字段参考)。
提示词包
小节标题“提示词包”做到什么程度: 把某一步问模型的说明整篇换掉,比如给小模型、本地模型换一版更短更直白的。问的永远是你自己配的模型。
- 可换的任务共 27 个:一层一层画整句结构、找语法点、词认不认识、管到哪等
- 可以标一句“适合哪类模型”。
- 找语法点、出题那几步的说明,是按用户开着的语法点拼出来的,你换整篇时也能用同样的记号让它照样拼。
成品:样例 prompt-small(小模型说明)。 把“这个词他认不认识”那一步的说明写短。
文件夹 prompt-small/ 里有:
feyxo-plugin.jsonprompt.jsonprompts/word-tier.md
{ "for": "Local models around 7B" }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.jsonfeyxo-plugin.jsoni18n/en.json
{ "format": "1.1", "type": "bundle", "id": "feyxo/combo-junior", "version": "1.0.0", "name": "初中", "description": "适合初中学生:按义务教育英语课程标准选的语法,开着中考会碰到的长难句,别的先关掉。", "author": "扉阅", "license": "AGPL-3.0-only", "audience": ["junior"]}{ "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.jsonfeyxo-plugin.jsonplugins/sample/look-night.jsonplugins/sample/time-clauses.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" }}{ "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.jsonfeyxo-plugin.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.jsoncases.jsonlfeyxo-plugin.json
{ "for": "structure", "source": "SDK 样例自己写的句子,没有从别处抄" }{"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.jsonpractice.jsonsteps.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"]}{ "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 行){ "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.jsonsite.json
{ "sites": [ { "hosts": ["news.example.org", "*.news.example.org"], "main": ["article .story-body"], "skip": [".comments", "aside.related", "[data-role='newsletter']"] } ]}一次放几样:整套
小节标题“一次放几样:整套”一个扩展包也可以是几样的合集:组合的清单里写 needs,把别的扩展包原样打进来,装一次,几样一起装好。上面“起步一整套”就是这样做的。怎么打、怎么写,见合集和组合。
做好以后怎么发给别人,见怎么分享。