# 本地浏览器工作台

工作台通过 MoonBit native 服务生成真实上下文，提供普通打包、任务预算和代码补读三种工作方式。左侧浏览结果文件，中间查看正文或完整 JSON，右侧设置请求；底部复制 CLI / 请求 JSON，下载最后成功结果与审计。页面使用本地 HTML/CSS/JavaScript 和系统字体。

## 启动

安装 v0.6.0 后，在要处理的项目目录运行：

```sh
moon-repomix --webui
```

指定其他项目时运行 `moon-repomix ./project --webui`，打开终端显示的 `http://127.0.0.1:8765`。更换端口可用 `--webui-port 8795`。

也可在源码仓库根目录执行；首次运行先执行 `moon update`：

```sh
moon run src/cmd/moon-repomix --release -- --webui
```

项目默认使用 native。标准 `_build/native/{debug,release}/build/cmd/moon-repomix/` 中的 CLI 自动定位仓库的 `assets/`；安装后的 CLI 使用 `share/moon-repomix/`。词表旁须有 `webui/index.html`、`webui/app.css`、`webui/app.js`，安装和归档会一并提供。移动安装目录时保留 `bin/` 与 `share/` 的相对位置。自定义构建目录可传入 `--tokenizer-path`。按 Ctrl+C 停止服务。

等待顶栏显示 Native 在线；连接失败时点击状态按钮重试。“资源限制”显示当前工作区、版本、端口与实际限额。目录浏览器只允许选择启动命令授权工作区中的可用子目录，根目录用 `.` 表示。文件路径相对所选目录解释。

## 普通打包

1. 工作方式选择“普通打包”，选择全文、骨架或混合策略。
2. 高级文件规则中的 Include 与 Keep full 每行一个 glob；Include 留空使用默认入选规则。Keep full 仅在混合模式发送，两类生效规则合计最多 64 条，每条最多 1,024 个 UTF-8 字节。
3. 输入正整数预算，点击“生成上下文”或按 Cmd/Ctrl+Enter。
4. 打开结果文件，通过“原文 / 处理后”核对正文，或打开 `context.json` 查看完整 JSON。底部 CLI 对应当前配置。

token 数针对完整渲染 JSON，包含目录、包装和元数据。普通打包超预算仍保留完整输出并提示。全文对照与所选策略分别通过安全打包流程读取；两次均接受输入限额和扫描，比较时应保持源码稳定。

## 任务预算

1. 工作方式选择“任务预算”，添加任务并填写唯一任务 ID。
2. 添加必选文件，指定全文或骨架；添加可选文件，指定全文、骨架或自动选择，并设置 0–100 的优先级。路径是字面路径，不是 glob。
3. 设置整文硬上限并生成。多个任务共享同一份文档，重复文件去重。
4. 查看本次选择审计，核对哪些候选被选中、哪些省略以及原因。审计可单独打开和下载。

最多 16 个任务、128 个不同候选路径。高级 JSON 可提交完整 [任务规格](task-context.md)；启用后以 JSON 内的 `maxTokens` 为准，基础表单不参与请求。

`complete` 表示完成；`with_omissions` 表示必选满足，但有可选内容省略。必选超限等失败不会替换上次成功正文。上下文硬上限只计算交付文档，选择审计是单独文档，页面分别显示和下载其精确 token 与字节数。

## 代码补读

1. 工作方式选择“代码补读”，添加字面文件路径和读取方式。
2. 符号按每行一个精确名称填写，可选择补充依赖；范围使用如 `1-20, 80-96` 的一基包含范围。也可选择全文或符号目录。
3. 设置首轮累计预算，点击“开始代码读取”。结果中的 token 数是本轮完整 JSON 的成本，另显示累计已用、剩余和成功轮数。
4. 调整请求后点击“继续补读”，继续使用原预算；点击“开始代码读取”则开启新会话。

最多 32 个不同路径；每文件最多 16 个符号或 16 个范围。符号与目录适用于 JavaScript / JSX / TypeScript / TSX / Python；全文与范围适用于所有有效 UTF-8 文件。详细选择规则见 [代码读取](code-context.md)。

最多成功三轮，失败不扣预算；达到轮数或耗尽额度后不能续读。续读不能提高预算或更换目录，成功结果使用新的会话 ID。普通打包或任务规划成功后，原补读会话失效。HTTP 服务中的会话由该服务的调用者共享。

分离的范围各自显示来源行号，不拼成虚假的连续源码；复制范围或目录时保留结构化 JSON。代码读取的审计已包含在交付 JSON 中，计数包含它，不额外相加。任务与补读不生成、读取或传输未请求的原文对照。

## 结果与键盘操作

修改配置会将现有结果标为旧结果；文件树、标签页、计数和正文下载仍属于最后成功响应，直到下一次成功。失败提示与本次审计用于解释最新请求，不能当成成功正文。零文件成功清除旧文件，打开新响应的完整 JSON。

下载与复制完整 JSON 保留 Native 返回的原始序列化字符串。普通打包底部提供 CLI；任务与补读提供实际 HTTP 请求 JSON，高级 JSON 启用时保留对应规格。

文件树支持方向键、Home/End、Enter/空格。标签页支持左右键、Home/End 与 Delete 关闭。目录对话框按 Escape 关闭并返回触发按钮。底部“命令与导出”可折叠，收起后不可聚焦。手机上各区纵向排列，代码区独立滚动。

## 工作区与资源限制

服务只监听 `127.0.0.1`；路径不能越过授权根，也不能通过符号链接进入外部目录。仓库配置不自动加载，扫描始终启用；完整原文扫描先于骨架或代码投影。扫描覆盖范围见 [安全说明](../SECURITY.md)。

| 项目 | 工作台上限 |
| --- | ---: |
| 单次过滤后普通候选 | 2,000 |
| 每次调用原始读取 | 16 MiB |
| 单文件 | 2 MiB |
| 完整 HTTP JSON 响应 | 16 MiB |
| 请求体 | 64 KiB |
| 单次生成 | 60 秒 |

命令行指定更小的文件数、总读取或单文件限额时使用更小值。三种生成方式共享忙碌锁，一次只处理一个请求。任务与代码规格还受各自候选、投影和计数次数限制。

这是可信本机用户的只读服务：不执行仓库命令，不向仓库写输出；下载由浏览器保存。HTTP Host、Origin、自定义请求头、Content-Type 和 CSP 限制跨站访问。它不是多用户托管接口，不隔离并发敌对文件系统修改。

## 常见问题

- **端口占用**：更换 `--webui-port` 并打开新地址。
- **找不到页面资源**：保留安装包的完整 `bin/`、`share/` 布局；自定义构建位置显式指定词表路径。
- **请求失败**：按提示缩小目录、文件或候选。409 表示引擎忙，413 表示资源超限；失败不会把旧正文标为新结果。
- **请求超时或连接中断**：浏览器 65 秒超时不证明后端取消，服务可能已提交结果。页面丢弃不确定的补读会话句柄；待服务可用后开始新读取。
- **复制不可用**：页面打开包含完整文本的手动复制窗口。
- **文件或符号没有出现**：查看审计；文件也可能被 ignore、类型或扫描排除。详细入选解释见 [选择说明](selection-explanation.md)。

[README](../README.md) 的动图展示普通打包的实际 Native 服务操作。
