Skip to content

Latest commit

 

History

History
192 lines (110 loc) · 19.3 KB

notebook.md

File metadata and controls

192 lines (110 loc) · 19.3 KB

BeCoder NoteBook 正式产品设计

更新:2026-10-23 · 文档后缀:.bcnb

本文维护 Notebook 的完整产品规则;共享权限与工作区规则引用Beacon 正式 PRD。当前原生实现、格式与验收缺口见实现状态,不由需求确认推定全部流程已交付。

1. 定位与完整体验目标

BeCoder NoteBook 是独立的类 Notebook 核心扩展:在一份持续丰富的学习文档中组织文字、公式、图片、代码、input、实际结果与参考链接。基础编写、保存、阅读及用户运行不依赖 Beacon、BYOK 或 .beaconWork。

题目档案是用户主动请求 Beacon 整理解题经历的使用场景,手写笔记不必来自 AI,也不强制题目身份或生成模板。

以下四条流程是已确认的完整体验目标。按负责人 2026-10-23 的版本决定,v2.0.0 交付当前已实现部分,尚未实现部分归后续版本开发,当前覆盖见实现状态:

  1. 独立笔记:新建、编辑、保存、阅读,包含图片、公式、代码折叠、多组 input 与用户主动编译运行 C/C++。
  2. 源码关联:按路径新建/打开对应笔记,源码与笔记内容各自独立。
  3. Beacon 辅助:文字/代码选区求助,以及明确请求下综合当前会话和授权材料整理/修改,含四平台 OJ 内置网页优先流程。
  4. 改写与备份:以最新编辑稿含未保存内容为基准,先保留最近一份完整备份,成功直接生效;改写失败沿用原生编辑器/保存反馈,不要求强制恢复原稿。

不把这四条缩成 AI 报告阅读器,不引入共享 kernel、解释执行 server、源码同步、集中笔记管理或复杂版本管理作为必要能力。

2. 内容与独立使用

2.1 新建、打开与保存

提供普通文件式“新建 Notebook”,创建后直接编辑,保存时选择文件名与位置。独立笔记与关联笔记共用同一编辑器,独立笔记不必存入 .notebook。

编辑器没有打开文件夹时,直接提示“打开文件夹”,不允许独立新建、关联新建或建立源码关联;Beacon 新建也不绕过此门槛。产品不先建空白笔记或 .notebook,不自动将源文件父目录或 Beacon 根当作编辑器根。

已有 .bcnb 即使没有打开文件夹,也可直接打开、阅读、编辑、保存及由用户主动运行。打开不自动运行或建立关联,也不改变 Beacon 工作区。

2.2 自由块组织与文本

文本块、程序块和独立 input 文本块可自由混排,在任意位置新增、删除、调序。每份 input 的结果随该 input 移动;点击运行时向上查找最近的 C/C++ 程序块,跳过 Markdown 和其他 input。位置决定本次代码归属,但程序块之间不共享执行状态。

文本块编辑时使用 Markdown 源文,阅读时显示渲染结果,可按块切换;支持标题、列表、链接、行内及独立 LaTeX 数学公式。正文代码围栏用于展示或伪代码说明,C/C++ 程序块负责编辑和展示,运行入口位于 input 文本块。

独立类型入口按“BeCoder 自身可完成完整用途”收敛为 C、C++、Markdown、input;不以只有语法高亮作为完整支持。公式、算法图示优先复用随包的 Markdown 数学与 Mermaid 渲染,补齐离线阅读和错误反馈,不宣称完整 TeX 文档编译。其他语言示例可在 Markdown 围栏内展示,普通编辑器及 ipynb 的语言支持不因此移除。图片附件保留原生能力,不增专用按钮或额外流程。

用户可记录不完整代码、函数片段或伪代码,不以可编译作为编辑与保存门槛。Beacon 的五部分骨架是初次生成组织,不是固定表单。

2.3 图片、链接与折叠

粘贴或插入的图片成为笔记内容,随单个 .bcnb 保存、复制与分享后仍可显示,不依赖用户另行搬运图片。普通外部超链接不因此自动下载或保证离线可用。

负责人已认可原生附件路线:Markdown 正文保存短 attachment: 引用,图片 bytes 存在单元格附件中;编辑态不显示整段 base64,阅读态由原生 Markdown 附件渲染显示图片。图片引用和附件通过同次原生编辑进入撤销与保存。不提供独立选图插入按钮或命令;图片通过 Markdown 编辑态粘贴进入原生附件。开发期旧格式和内嵌图片不作迁移。

可保存参考链接与原题 URL。图片输入、图示展示和模型生图是不同能力,不因能插图而自动接入生图。

程序块内部按需折叠/展开代码范围,改变显示而不改变代码。折叠部分仍参与编译运行;用户可展开编辑全部内容,不限于隐藏头文件或辅助逻辑。

3. 程序块、input 与实际结果

3.1 独立执行

用户点击一份 input 的运行按钮,以其上方最近 C/C++ 程序块的完整内容调用 BeCoder 内置 GCC 工具链编译运行,该 input 正文作为 stdin。上方没有程序块就提示添加,不猜其他位置。不同程序块不共享变量或状态,不自动拼接程序,也不自动包装、补全片段。

多组 input 分别为可编辑的纯文本单元格,可命名、添加、删除和调序;页面左上工具栏提供“添加 input 单元格”。运行、停止、状态、编译/运行时间和最近结果属于 input,代码块降级为单纯 C/C++ 编辑和展示区域。原生全部运行/选区运行只执行对应 input,依次开始;停止后不自动开始后续 input。这不是样例判题,不提供 expected/checker。运行中继续输入的灵活终端调试仍使用 Runner。

input 独立注册类型,编辑框保持干净,不显示执行勾号、总耗时或额外状态行;状态与编译/运行时间集中在下方输出区,统一英文标题,如 OK | compile 592 ms | run 7 ms。输出内容保持普通合并流与 debug 库自身 ANSI 颜色。块间原生悬停插入栏提供代码、Markdown、input,位置应落在块间空隙。

运行捕获编辑器最新代码和所点击 input,包括未保存修改;不要求先保存,也不因运行替用户保存整本笔记。结果需能辨认实际使用的代码/input,不能用后续编辑内容冒充当次执行内容。

3.2 结果生命周期

每份 input 只保留最近一次运行尝试的实际结果,可随笔记保存;一份 input 重跑不覆盖其他 input 的结果。输出在界面中只读,可清除,清除不删代码、input 或正文。

结果采用状态、真实编译时间、真实运行时间加朴素连续输出;不分 stdout/stderr 区域,也不按 cout/cerr 身份染色。debug() 自身库输出 ANSI 控制码,渲染按 Runner 同一终端主题颜色显示。编译失败不伪造运行时间。

每次程序运行最多执行 2 秒,计时从程序实际启动开始,不包含编译和启动准备。达到时限后终止本次程序并保留已收集输出,状态为 TLE。单次运行输出最多保留 262,144 字节(256 KiB);超出后终止程序、保留上限内输出并报告至少已观察到但未保留的字节数,状态为 OLE。由于程序会在触限时停止,该数量不代表程序若继续运行时的总输出。两个固定边界不根据“暂时没有输出”推断死循环。

事件 行为
编辑代码或 input,未重新运行 保留旧结果,不显示过期/未重跑提示,不自动运行
开始新运行尝试 立即丢弃旧结果,单一输出区显示本次任务
任务进行中 显示进行状态,逐步展示真正取得的输出;无输出本身不触发判定
编译/运行成功或失败 保留本次真实结果;编译失败不冒充已运行
达到运行时间或输出上限 终止本次程序,保留已收集输出,分别显示 TLE 或 OLE 及具体上限
用户手动停止 显示取消状态,保留本次已有输出,没有输出如实表示
清除结果 丢弃结果,不影响其他块或本块内容

失败或取消不恢复旧结果,不隐藏保留供回退,不在 Notebook 编辑器建立运行历史队列。文档结果留在所属 input,不进入或挤占 Runner/CPH 的两条近期队列。

用户已选择合法可用的 Beacon 工作区且当前笔记位于该根内时,BeCoder 随 input 的用户运行行为,另向 .beaconWork 落盘对 Beacon 有帮助的全套运行证据,绑定笔记、代码块、input 块、当次代码/input、编译和实际结果。它不依赖 Beacon 对话或模型可用,不是修改或替用户保存整本笔记,也不改变笔记正式文件的存放位置;每份 input 仍只显示最近结果。根外笔记不因关联源码在根内而获得该区记录归属。行为证据保留/容量及其与结果清除的生命周期进入技术设计,不套用 Runner/CPH 的 FIFO 次数。

运行结果只能来自用户实际执行。Beacon 整理不自主运行或制造输出;正文可引用真实旧验证或 OJ 判定,但不能填成当前程序块的新结果。本地输出不等于 OJ AC。

4. 源码关联与存放

4.1 匹配规则

关联根为源码所属的编辑器已打开文件夹,多文件夹窗口各根分别使用自己的 .notebook。源码不属于任何打开根时,不支持关联,提示打开或添加对应文件夹;不借用 Beacon 根或其他打开根。

路径规则:打开根/.notebook/<源码相对目录>/<完整源码文件名>.bcnb。例如 比赛/A.cpp 对应 .notebook/比赛/A.cpp.bcnb,main.c 对应 .notebook/main.c.bcnb。同题不同源码、不同目录同名源码及 .c/.cpp 各自对应,不自动共享或合并。

源码位于某打开根的子目录内即可关联,不要求直接父目录另行打开。识别重叠打开根的工程规则留待技术设计,不自行建立自动复用上级 .notebook 的产品能力。

4.2 入口与初始内容

编辑 C/C++ 时右上角按命中状态显示“新建关联的Notebook”或“打开关联的Notebook”。打开源码本身不创建笔记;命中仅正式 .bcnb,不包含备份。

从源码首次新建时,将当前编辑器代码含未保存修改一次性复制为一个程序块,不自动运行或附带结果。不完整代码也能建立笔记。打开已有笔记不重新复制、追加或覆盖。

该初稿规则只适用于源码新建入口,不强制独立新建或 Beacon 整理采用同样内容。

4.3 内容与文件生命周期

关联只负责定位,源码修改不自动更新笔记,笔记修改不反向改源码。学生决定记录什么,可保留旧解法、失败尝试与新思路。

任何源码改名、移动或删除,无论在 BeCoder 内外、同根或跨根,都不带动笔记、备份或另存副本改名、迁移、删除或清理。入口按当前路径重新匹配,不维护旧身份跟随,不全局搜同名或按内容猜测关联。不命中只提供新建入口,不自动生成或覆盖。

旧笔记仍可独立使用,由用户自行处理名称与位置;删除源码不新增“一起删除笔记”选项。

5. Beacon 的求助与整理

5.1 选区提问

选中文字或代码,右键“询问 Beacon”,打开 Beacon 并将选区加入可查看、可移除的草稿,用户补充问题后发送。编辑器代码、PDF 与 Notebook 使用同一交互。

选区入口不直接请求解释,不自动发送整本,不授权关联源码、目录或引用文件,也不触发改写/运行。三档共有的页面能力可以另行按需读取本窗口用户当前打开的 Notebook 页面内容,包括未保存修改及页面已提供的实际结果;这不授权从磁盘补读笔记或关联源码。blackout 可用主动选区及当前打开页面,不从文件/工作区记录入口补读、不落盘、不消费持久化记忆;其他模式按各自权限获取额外记录。

5.2 明确请求与目标条件

用户显式要求形成或修改指定笔记,Beacon 才执行;不随每轮聊天、运行或提交渐进自动生成。目标必须明确,位置/关联规则、读取与写入权限及修改保护条件必须满足。条件满足直接整理,不增加重复目标审批;目标不明只简短询问必要目标,不让用户重新圈素材。

材料综合当前会话相关过程及授权题目、代码、运行与 OJ 记录,不搜索其他会话。当前会话自身压缩前的留存材料可以回读。

目标或权限不满足时不开始写入、不猜测覆盖或另建替代笔记。spot 对 Beacon 根外笔记不写入或创建本次备份,提示用户自行调整根或选择 flood 后重新发起,不增临时单文件写授权。

父级已有 .notebook、编辑器只打开子级且 Beacon 根在父级时,说明情况并建议用户打开父文件夹,再回到原会话继续;默认不直接改父级或重复建子级目录,不自动切换。父级目录存在不等于对应笔记存在,调整后仍正常匹配。确有目标冲突时再确认必要目标,不自行合并/迁移。

5.3 题目档案与质量

题目档案承载个人探索和复习,持续丰富,不是 OJ 提交同步副本。初次整理采用五部分:题目要点、我的探索过程、关键解法、实现与验证、复习收获。记录关键约束、卡点与转折、解法理由及复杂度、真实错误与验证,以及可迁移经验和未解决问题。

一个月后不翻原聊天仍能理解关键解法是质量目标。用户可自由增删重组,不要求写完整成功故事或填满所有章节。

由模型判断材料是否足够真实有用:足够就整理,说明缺失/未解决/未验证;缺关键依据可能写错核心事实时简短询问。未 AC、未完成或部分 OJ 记录不可得不单独拒绝;不能模拟取得材料、编造探索或执行结果。

5.4 OJ 范围

后续 OJ 整理能力目标完整覆盖洛谷、Codeforces、AtCoder、蓝桥云课题库。优先内置网页的完整流程:用户自行登录、提交、查看判题,再求助或整理。外部浏览器主动提供链接/截图路径保留,完整集成不作为同等优先要求。

求助或主动整理时才按需获取本人同题相关提交代码与判题详情,不限当前记录或固定最近条数,不后台同步整个账号,也不因取到记录自动生成笔记。各站实际可得信息如实表达,不承诺完全相同。

用户已经打开的本人提交/判题页可由三档页面能力直接读取,默认用户知情页面可能被 Beacon 阅读;不能借此导航或补取隐藏记录。进一步联网查询本人同题记录,按 PRD 第 3、7 节取得明确许可并匹配工作区/平台/账号;个人信息查询许可不限竞赛场景,可记入 teach tips,但不能由模型自写 tips 生成授权。blackout 不自动查询额外本人记录或消费工作区许可记忆。许可不包含代登录、交题、修改账号或遍历无关题目;历史提交不证明当前编辑稿已通过,不仅凭提交编造当时想法。

6. 备份与修改保护

6.1 开始前

目标笔记尚有运行任务时,暂不开始改写、备份或临时只读,轻量提示等待结束或自行停止后重新发起;不排队、不自动停止。目标以外文档不因改写保护被锁定;Beacon 发送仍遵守 PRD 的执行占用约束。

改写以目标编辑器最新完整内容为基准,包括未保存修改、文字、代码、input、图片及已有真实输出;不要求先保存、不改用磁盘旧稿、不保存无关文件。

6.2 最近一份完整备份

修改已有笔记前先完整备份到同目录,将 .bcnb 后缀改为 .bcnb-backup,例如 A.cpp.bcnb-backup。每份正式笔记只自动维护最近一次改写前的一份,后续改写会更新它;用户另存副本不被自动清理。

首次创建没有旧内容可备份。已有内容备份失败则不开始改写,并说明原因。

备份像普通 Notebook 一样可查看、编辑、主动运行和另存,不参与源码关联,不因编辑后自动成为正式笔记。不提供专用恢复入口,用户自行复制、另存或整改;需要长期保留的旧稿由用户另存。

6.3 改写与交付

改写期间目标笔记可查看,暂不能编辑或通过运行改变结果;限制只作用于该笔记,源码及其他文档不被锁定。仅提问或读取不进入此限制。

成功直接生效,无需再次采纳。负责人最新决定:改写失败无需强制保住或恢复原稿,借鉴原生 Notebook 编辑和保存机制即可,不额外实现回滚或事务提交体系。失败如实反馈当前编辑与保存状态,用户可利用原生编辑能力及最近备份自行处理;不能显示为保存成功。生成/取消尚未应用的内容不写入笔记;已进入编辑或保存阶段的交接沿用原生机制。结束后恢复正常编辑和运行。

修改程序代码或 input 时仍保留原有实际输出,不增加过期提醒,也不将旧输出说成新代码验证。新程序块不填模拟结果。完整备份与如实反馈不保证模型内容必然正确。

7. 专项验收场景

场景 必须达到的结果
不使用 Beacon 可独立编写、保存、阅读和主动运行
无打开文件夹 禁止新建/关联,直接提示;已有笔记可独立使用
多根及范围外源码 各打开根独立关联;根外源码提示打开/添加目录
创建和重新打开关联笔记 初次复制当前含未保存代码,后来打开不覆盖;完整文件名及镜像目录正确
改名、移动、删除源码 旧笔记和备份留原处,按新路径朴素匹配,不同步
文本、图片、程序与折叠 各种块自由调序,输出随 input;Markdown/公式可读;附件图片随文件;折叠不改变执行内容
输入和未保存运行 点击 input 运行上方最近程序块的最新代码,不替用户保存;多份 input 结果各自保留
重跑、失败、取消、清除 开始即丢旧结果,逐步真实输出,仅最近一次,可停止;清除不删内容
Notebook 与 Runner/CPH 程序块文档结果各自保存;区内运行证据独立落盘 .beaconWork,不等模型请求、不占 Runner/CPH 队列
主动选区与打开页面 加草稿由用户发送;三档可按需读当前打开页面,blackout 不沿路径补读磁盘或历史记录、不落盘,提问不改写
主动整理与四平台 OJ 不再圈素材、不跨会话、不虚构;已打开页按页面权限直接读,额外联网本人同题记录取得有效许可后充分按需读取
有限写入与父子目录 目标和范围满足才动手;拒绝不创建替代笔记;指定父子情境建议打开父级
最新编辑稿、备份、失败 备份完整且同目录最近一份;改写失败沿用原生处理并反馈实际保存状态,不要求强制恢复原稿,无再次采纳
运行与改写交接 运行中暂不改写,改写中目标只读,任务结束后正常使用
复习与用户自由 笔记能独立理解,正文可自行改写,备份可正常使用

具体控件、快捷键、图片容量、格式、输出限制、取消响应和质量测评进入技术调研议程。本文借鉴 Jupyter 的块、文本和输出交互,不承诺采用 Jupyter、.ipynb 格式或 Python/kernel。