# v0.11.0 — iframe + 划词引用 + i18n 三合一

v0.8 以来的三波 feature 合并发布：iframe 页面感知、划词/元素引用、多语言（English 默认 + 中文）。

---

## 1. iframe Page Awareness（issue #42）

Pie 现在能看见并操作 iframe（嵌入式编辑器、Notion-like 内嵌视图、嵌入式登录/支付 widget、第三方文档预览等）。

之前所有 page-level 工具只能看到顶层文档；本版 snapshot / extract / get_tab_content 三条读类路径会一次性扫描所有可注入的 frame，写类工具（click / type / select / scroll）通过新的 `frameId` 字段定位元素到具体 frame。

### Tool schema 变化

- `click` / `type` / `select` 现要求 `frameId` 字段（顶层用 0；具体值从 snapshot 输出读取）
- `scroll` 的 `frameId` 可选，缺省 0

LLM 自动适配 — 老 skill / 老对话若残留 in-flight 的旧格式 tool_use，handler 返回 `frameId is required` 错误，LLM 下一轮自纠。

### Cross-origin frame

来自非 top-page origin 的 iframe，wrapper 多一个 `cross_origin="true"` 属性。LLM 看到这个标记后被指引在 cross-origin frame 内输入敏感信息 / 提交表单时更谨慎。无额外 confirm card（confirm 层已删除），由 LLM 自律 + agent-step 事后审计承担不可逆动作。

### 不可达 frame

`<iframe sandbox>` / 严格 X-Frame-Options / chrome-extension child 等场景下，agent 会在 snapshot 里 surface 该 frame 为 `unreachable="true" reason="..."`，让 LLM 不会盲目猜测内容。

### Known limitations

- post-action settle 不观察 child-frame mutation（依赖下一轮 snapshot 自然收敛）
- iframe 内的 keyboard 模拟（CDP）暂仍 tab 粒度
- screenshot 工具暂仍 tab 视区裁剪

---

## 2. Page Content Reference（issue #38 v1）

- **划词引用页内文字**：在任意网页选中文字，浮出 Pie 圆形小图标按钮 → 一键加入 chat 输入框；点 bubble 自动打开 side panel。
- **元素拾取**：点 composer 上的手指图标 → 进入元素拾取模式 → 在页面 hover 高亮 → 点击选定该元素（自动截图 + 抽取 role / name / textContent）。Esc 取消。
- **多 chip 输入**：文字 / 元素 / 图片 chip 共享同一输入区，可混合发送。
- **跨 tab 引用**：引用与 pinned tab 解耦，可来自任意当前 tab。
- **多会话隔离**：引用绑当前 active session；切 session 互不污染。
- **键盘快捷键**：选中文字后用快捷键直接加入引用（不必鼠标点 bubble）。
- **Self-heal**：扩展 reload 后旧 tab 的 content script 失效会自动重注入，引用流程不中断。

### Implementation notes

- 首个常驻 content script (`src/content/quote/`)，仅承担引用功能；click/type/snapshot 等现有 DOM 工具不迁。
- 引用送 LLM 时走新 untrusted wrapper `<untrusted_page_quote>` / `<untrusted_page_element>`，复用 R15 boundary。
- chip 不持久化：send 后 / 切 session / SW 重启即清空（与 textarea 草稿同行为）。

### Deferred to v2

- 划词智能组件边界高亮
- iframe 内引用
- Canvas / OCR 兜底
- chip 容量上限 / 持久化

---

## 3. i18n + UI English-first（PR #54）

- **多语言基础设施**：`I18nProvider` + `useT()` + storage-synced override（chrome.i18n 兜底，最终 fallback 到 `en`）。
- **Settings 新增 Language 选择**：可独立于浏览器语言切换 UI 语言；切换即时生效。
- **Side panel UI 全英文化**：原先中英文混排的 chat / settings / skills list / session drawer / element picker / composer 全部走 `t()` key，默认显示 English，中文用户可在 settings 切回中文。
- **Manifest name + description i18n**：扩展名/描述走 `chrome.i18n __MSG__`，Chrome Web Store 与浏览器扩展页随系统语言展示。
- **Built-in skills 统一英文**：内置 skill 标题/描述/prompt 全部英文，并强制 `enabled=true`；老用户的 enabled_skills 配置走一次性 `enabled_skills_migrated_v1` 静默迁移。

---

## 4. 其他改进

- **list_tabs 不再 50 上限**：默认返回所有可见 tab，避免大量 tab 场景被截断。
- **open_url 等待 navigation commit**：避免点击触发的导航 race 写错 pin（issue #50）。
- **navigation transient origin tolerance**：跨域跳转过程中的瞬态 origin 不再误判为越界，loop 顶部 origin 检查更稳健。
- **Composer picker icon**：原"拾取元素"文字按钮改为手型图标，更小巧。
- **Project Archive 站点**：`docs/archive/` 单文件 archive 站，push 后自动部署到 GitHub Pages（仅档案目录上 Pages，其他 docs/ 不进 Pages）。

---

## Migration & 兼容

- 无 manifest permission 改动 → **用户透明升级，无 Chrome 重授权弹窗**
- 老 session / skill / instance 不受影响
- 旧 archived task 的 tool_use 不带 `frameId` — 归档不会被 resume 跑，panel 渲染层兼容缺省
- 老用户 skill enabled 配置一次性迁移到内置全开 + 仅渲染用户 skill
