点图标就有聊天窗
点击工具栏图标,在当前页面正上方弹出一个可拖动、可缩放的悬浮窗:上面是聊天区,下面是输入框。位置和尺寸会被记住,双击标题栏或双击图标即可恢复默认。
不是简单套个聊天框,下面这些是真正花时间的地方。
点击工具栏图标,在当前页面正上方弹出一个可拖动、可缩放的悬浮窗:上面是聊天区,下面是输入框。位置和尺寸会被记住,双击标题栏或双击图标即可恢复默认。
不需要本地装 GCC,插件自带 C / C++ 编译环境,模型写完的代码可以直接编译运行,拿到真实的报错文本再回去改。
内置一个自定义 agent loop:请求模型 → 执行工具 → 把结果回灌 → 再来一轮。支持多轮追问、流式输出,回答里的 Markdown 和数学公式都会渲染。
PTA 的 onpaste 是平台反抄袭控制,实测「写剪贴板 + 真 Ctrl+V」编辑器纹丝不动。所以写代码这条路,键盘事件是唯一通道。
判题状态归一化的顺序即优先级:先 AC/WA/RE/TLE/MLE/CE/PE/OLE,再中文词表,而且具体状态排在泛化词前面——否则「编译错误」会被当成「错误」报成 WA,模型就会一直改算法而不碰那句语法错误。
content script 注入 Shadow DOM 宿主节点再挂载 React,悬浮窗的样式不会和 PTA 自己的样式互相污染。
模型能调用的基础工具,agent loop 会自己决定什么时候用哪个。
js_inject直接注入 JS 代码到浏览器页面。complie_and_run_C编译并运行 C 语言代码。simulate_keyboard_input模拟键盘输入,是写代码进编辑器的唯一可靠通道。read_problem获取题目要求。read_editor_code获取用户代码。write_editor_code覆写用户代码。write_document编写文档并下载到用户的浏览器。date获取当前日期。url获取当前页面的 url。插件没有签名,两个内核的装法不一样,别混着来。
这里只列了步骤。想要每一步都对着截图做,看图文版使用教程。
插件没有签名,所以每个浏览器的装法都不一样。先记住:Chromium 系只认「解压后的文件夹」,Gecko 系可以直接选 xpi。解压后一定要选到「里面有 manifest.json 的那一层」,别选到套了两层目录的,也别选项目根目录。
pta-assist-v1.0.zip 并解压。Windows 右键「全部解压缩」,macOS 双击会自动解压出一个文件夹。直接选 zip 会报「无法加载清单」。chrome://extensions、edge://extensions、brave://extensions、vivaldi://extensions、opera://extensions。manifest.json 的那个文件夹。pta-assistant-v1.0.xpi。about:debugging#/runtime/this-firefox。.xpi(或先解压再选里面的 manifest.json)。background 跑 agent loop,content script 管界面。
manifest/manifest.json 手写清单(Chrome 用),Firefox 版本构建时按差异打补丁
vite.config.ts 一次构建一个入口(background / content),target 决定产物目录
src/
background/
index.ts 图标点击、消息路由、维护进行中的请求
agent.ts agent loop:请求模型 → 执行工具 → 回灌结果 → 再来一轮
deepseek.ts 调用 /chat/completions,解析 SSE 文本增量与 tool_calls 分片
js-inject.ts 在页面主世界执行模型给的 JS(含超时与隔离世界回退)
settings.ts 设置读写(chrome.storage.local),API Key 只留在这里
content/
index.tsx 注入 Shadow DOM 宿主节点并挂载 React
App.tsx 悬浮窗主体(对话 / 设置两个视图)
pageTools.ts 页面侧工具:url 取当前地址,write_document 触发下载
hooks/ useChat(消息、流式增量、工具事件)、useSettings
components/ 消息列表、输入框、设置面板等页面是在装插件之前打开的,刷新一下页面即可。另外 chrome:// 这类浏览器内部页面不允许注入,这是正常现象。
它默认不固定。点拼图图标 → 找到「PTA 助手」→ 点图钉。
拖标题栏移动、拉右下角改大小,位置与尺寸会被记住。双击标题栏或双击工具栏图标恢复默认。
点右上角齿轮填 API Key,默认接硅基流动,接口地址旁边有「教程」按钮。API Key 只存在 chrome.storage.local 里。
这类纯净浏览器默认会拦截部分扩展 API,多半是隐私设置把站点权限挡了,给站点权限即可。
来自仓库 README 的路线图。