跳转到内容
首页
Docs/编辑器工具

编辑器工具

代码编辑器之上可以打开十一个工具:JavaScript 调试器、测试运行器、Docker 与监控面板、库目录、后端与 AI 生成器、AI 代码操作、本地网络内的实时协作,以及 问题 和 大纲 视图。它们全部免费。本页如实说明每个工具目前在手机上的真实表现,包括只能部分工作的部分。

工具如何打开

这些工具只存在于代码编辑器内部,不是主分页中的页面。请先打开一个文件或项目,再使用编辑器顶部的扳手按钮。

  1. 1点按编辑器顶部栏中的扳手按钮(更多选项)。会打开一个面板,里面有搜索框 搜索操作…。
  2. 2选择一个分区标签:编辑、视图、转到、Git、AI 或 工具,也可以在搜索框中输入,一次过滤所有操作。
  3. 3在 工具 中,操作分为 运行、项目、协作、实用工具 和 帮助与设置。调试、测试资源管理器和依赖项在 运行 下;Docker 工具、监控和后端生成器在 项目 下;实时协作在 协作 下。
  4. 4问题 和 大纲 在 转到 下。AI 生成器 和 AI 代码操作在 AI 下。
  5. 5命令面板(外接键盘上按 Ctrl+Shift+P)列出的正是同样的操作:菜单和命令面板共用同一个注册表。

各工具的位置

工具位置呈现方式
调试工具 › 运行 › 调试文件,或运行面板上的 调试 按钮停靠在编辑器下方的面板,紧挨运行面板
测试工具 › 运行 › 测试资源管理器底部面板
库工具 › 运行 › 依赖项(仅在磁盘上已打开项目时),或运行面板上的依赖项按钮标题为 库 的底部面板
Docker工具 › 项目 › Docker 工具底部面板
监控工具 › 项目 › 监控底部面板
后端生成器工具 › 项目 › 后端生成器底部面板
AI 生成器AI › AI 生成器底部面板
AI 代码操作AI 分区:AI:解释所选内容、AI:生成测试、AI:重构代码、修复错误 等根据操作不同,为停靠在编辑器下方的面板、重构面板或底部面板
实时协作工具 › 协作 › 实时协作底部面板
问题转到 › 问题,或状态栏中的问题计数全屏对话框
大纲转到 › 大纲编辑器右侧的一列

底部面板、停靠面板、对话框还是侧栏

底部面板

测试、Docker、监控、库、两个生成器和实时协作都以底部面板的形式打开,占窗口高度的 87 %,沿用你的应用主题。它没有关闭按钮:向下滑动、按返回键或点按面板外部即可关闭。

停靠面板

调试和运行面板停靠在编辑器下方(高 150 到 300 dp)。调试面板只在你启动 调试文件 时打开,按返回键关闭。AI 代码操作的结果也以同样方式停靠。

对话框

问题 是一个对话框,宽度为窗口的 95 %(最大 760 dp),高度为 85 %,带有自己的标题栏。

侧栏

大纲 是编辑器右侧一列 200 dp 宽的侧栏。只有当编辑器在文件中找到了区域时才会出现。

快捷键

按键作用
Shift+F5调试文件
F9在光标所在行 切换断点(在项目之外打开的文件和差异视图中不可用)
F5 · F10 · F11调试会话暂停时:调试:继续、调试:单步跳过、调试:单步进入。没有暂停的会话时,F5 运行文件,F11 是禅模式
Ctrl+Shift+M问题
F8 · Shift+F8下一个问题 · 上一个问题
Ctrl+I就所选内容询问 AI
快捷键需要外接键盘。只有图标的按钮,本页按其无障碍标签来称呼。库、Docker 和测试资源管理器会在项目文件夹中查找内容,所以请先打开项目;监控、实时协作、AI 生成器和断点则无需项目。

界面地图

这些工具的每一个界面,以及如何到达、能在那里做什么。

界面如何到达能做什么
更多选项 菜单编辑器顶部栏的扳手按钮搜索并运行所有编辑器操作;分区有 编辑、视图、转到、Git、AI、工具。
调试面板工具 › 运行 › 调试文件;Shift+F5标签页 Console、Variables、Call Stack 和 Breakpoints;继续、单步、重新开始、停止。仅 JavaScript 为真实调试。
编辑断点Breakpoints 标签页某一行上的铅笔设置 条件 或 日志消息(日志断点)。
测试资源管理器工具 › 运行 › 测试资源管理器标签页 浏览器、输出、覆盖率、快照;运行全部、仅失败、监视模式。
Docker 工具工具 › 项目 › Docker 工具标签页 容器、镜像、Compose、构建、Dockerfile、镜像仓库。编辑不需要 Docker;运行则需要设备上有 docker 命令。
容器日志容器上的日志图标最后 200 行,以及实时的 docker logs -f。
监控面板工具 › 项目 › 监控标签页 仪表板、指标、警报、日志、服务器。
警报规则警报 中的 新建规则 或编辑为某个指标创建或编辑规则,设定条件、阈值和严重程度。
库工具 › 运行 › 依赖项标签页 已声明 和 目录;添加、更新和移除四个内置 Kotlin 库。
后端生成器工具 › 项目 › 后端生成器标签页 API 模板、CRUD 生成器、迁移、OpenAPI / Swagger、模拟服务器;保存到项目。
AI 生成器AI › AI 生成器标签页 API、架构(离线模板)、翻译、安全、性能(AI)。
AI 结果面板AI:解释所选内容、AI:生成测试、AI:生成文档、AI:根据注释生成阅读回答;插入 或 应用。
AI 辅助重构AI:重构代码从九种重构类型中选一种,或填写 自定义指令。
AI 结果面板(底部)修复错误、优化、简化、现代化、生成阅读回答,并在预览差异后 应用。
实时协作工具 › 协作 › 实时协作在同一 Wi-Fi 下主持或加入;标签页 会话、成员、聊天。
有人想加入出现在主持人的屏幕上让其加入 或 拒绝。
问题转到 › 问题;Ctrl+Shift+M;状态栏计数;分析风格 (Lint)按来源和严重程度过滤,跳转到某一行,快速修复。
大纲转到 › 大纲过滤并跳转到类、函数、导入和 // region 区域。

调试

调试会在附加调试器的情况下运行当前打开的文件,并在停靠于编辑器下方的面板中显示程序正在做什么。调试器仅对 JavaScript 是真实的(.js、.mjs、.cjs、.jsx,运行在内置的 Node.js 上)。对于其他任何语言,调试文件 只是运行该文件。

工具 › 运行 › 调试文件(Shift+F5),或运行面板上的 调试 按钮。它会同时打开运行面板和调试面板。调试面板没有自己的打开或关闭按钮:按返回键即可关闭。只有当 PocketCode 有适用于当前文件的运行器时,才会列出 调试文件。

断点

  • 点按编辑器中的行号即可添加或移除断点,也可以在光标所在行按 F9(切换断点)。会话开始之前就可以设置。
  • 断点只保存在内存中:关闭应用后就会丢失。
  • Breakpoints 标签页列出所有断点,每个都有开关框。点按一行可跳到当前文件中的对应行,用铅笔编辑,用 ✕ 移除,或点 全部清除。列表为空时显示:“没有断点。点按编辑器中的行号即可添加。”

启动与单步执行

Node 会在第一行暂停启动(--inspect-brk),面板随后附加并放行,程序一直运行到命中断点或遇到未捕获的异常,后者同样会使其暂停(运行输出中会出现“Debugger attached on port N”)。

  • 会话进行中,工具栏提供 继续(程序运行时为 暂停)、单步跳过、单步进入、单步跳出、重新开始 和 停止。单步按钮只在程序暂停时可用。
  • 停止 会分离调试器。进程本身要在运行面板中停止。
  • 火焰图标开关 热重载:保存项目文件时重启调试会话 默认关闭。

四个标签页

标签页名称始终是英文:应用没有翻译它们。

标签页显示什么
Console程序的输出(console.* 和错误),有六个用颜色区分的级别,一个清除按钮,以及“Debug session started”之类的会话消息。
Variables调用栈顶层帧的局部变量,以平铺列表显示。空状态:“Start debugging to inspect variables”、“No variables in current scope”。
Call Stack已暂停程序的各个栈帧。点按一个即可跳到它所在的行。
Breakpoints所有断点,如上所述。

条件与日志断点

断点上的铅笔会打开 编辑断点。条件(“仅当此 JavaScript 表达式为真时暂停”)会让它只在条件成立时停下。日志消息(“记录日志而不暂停。使用 {表达式} 插入值”)会把它变成日志断点:只输出消息,不暂停。两者都填时,只在条件为真时输出。这两个字段只能在这里设置,不能从编辑器边栏设置。

你可以

  • 在内置 Node.js 上调试 JavaScript 文件,支持行断点、条件和日志断点。
  • 单步跳过、单步进入、单步跳出、继续、暂停、重新开始和停止;查看调用栈和顶层帧的局部变量。
  • 遇到未捕获的异常时自动暂停。
  • 如果打开 热重载,每次保存项目文件时都重启会话。
  • 跳转到某个栈帧或某个断点所在的行。

你不能,以及原因

  • 调试 TypeScript、Python、Java、Go 或任何 JavaScript 之外的语言。调试文件 会在没有调试器的情况下运行文件,并输出“⚠ <runner> has no debugger support — running without it.”;断点不起任何作用。尚未提供
  • 对表达式求值:Console 标签页的 求值表达式… 输入框永远回答 undefined,并不会执行你输入的内容。尚未提供
  • 查看嵌套对象或其他栈帧的变量:Variables 只列出顶层帧自己的局部变量,不能展开;选择其他栈帧只会把光标移到它所在的行。尚未提供
  • 添加异常断点:出错时唯一的暂停是针对未捕获异常的自动暂停。尚未提供
  • 关闭应用后保留断点。尚未提供

测试

测试资源管理器会找到项目的测试,用框架自带的命令运行它们并列出结果。它不自带测试运行器:它通过设备的 shell(sh -c)在项目文件夹中运行命令,所以设备上必须有该框架的工具。

工具 › 运行 › 测试资源管理器。请先打开项目:面板会在项目文件夹中查找测试。没有框架时,它显示 未检测到测试框架。

框架与检测

支持十二个框架:Jest、Mocha、Vitest、pytest、unittest、JUnit、Go Test、Cargo Test、PHPUnit、RSpec、Dart Test 和 Swift XCTest。PocketCode 为每个项目选一个:先按配置文件找到的第一个(例如 jest.config.js、pytest.ini、build.gradle、go.mod、Cargo.toml、pubspec.yaml);如果都不匹配,就读取 package.json 来判断 Jest、Vitest 或 Mocha。unittest 没有配置文件,所以不会被自动选中。之后副标题会显示“<框架> · 共 M 个文件,N 个测试”。

四个标签页

标签页作用
浏览器每个测试文件一行,显示通过数。有 搜索测试…、筛选 ✓ 通过、✕ 失败、○ 跳过,以及用来运行整个套件或单个测试的 ▶。失败的测试在运行器输出了相关内容时会显示 期望 和 实际,以及 跳转到第 N 行。
输出命令的原始输出,带颜色,并有 清除。为空时显示:没有测试输出。
覆盖率显示 没有覆盖率数据(见下文)。
快照仅适用于 Jest 和 Vitest。列出在 .snap 文件中找到的内容,有 全部更新 和 删除过时项(会先询问 删除过时的快照?)。

运行

  • 底部有 运行全部、仅失败,运行期间还有 停止。
  • 顶部有 刷新、切换监视模式 和 带覆盖率运行 图标。
  • 测试树来自按名称模式读取你的文件(*.test.*、test_*.py、*_test.go、*Test.kt…),最多 200 个文件,并跳过 node_modules、.git、build、dist、target、.gradle、__pycache__ 和 venv。
  • 监视模式只有 Jest、Mocha 和 Vitest 支持,而且只是把命令的输出持续输送到 输出 中。

你可以

  • 检测项目所用的框架,并列出它的测试文件和测试。
  • 运行全部测试、只运行失败的、一个套件或一个测试;停止运行。
  • 实时查看命令的输出;当运行器给出相关内容时,查看 期望 和 实际 并跳转到出错的行。
  • 为 Jest、Mocha 或 Vitest 启动监视模式。

你不能,以及原因

  • 保证测试一定能运行。每次运行都是 sh -c 加上类似 npx jest --json、python -m pytest、go test、cargo test、./gradlew test、vendor/bin/phpunit、bundle exec rspec、dart test 或 swift test 的命令。面板不会安装这些工具,也不会改动 PATH;缺少其中任何一个时,错误会显示在 输出 中。设备
  • 看到覆盖率报告。带覆盖率运行 会运行框架的覆盖率命令并输出其结果,但 覆盖率 标签页永远收不到数据,编辑器边栏也不显示覆盖率。unittest、RSpec 和 Swift 根本没有覆盖率命令(Coverage no disponible para <framework>)。尚未提供
  • 得到每个测试的精确结果。通过或失败是根据输出文本猜出来的(包含该测试名称的、带 ✓、PASS 或 ok 的行,或带 ✗、FAIL 或 ✕ 的行);两者都没有的测试保持“未运行”。命令要求生成的 JSON 和 JUnit 文件并不会被读取。尚未提供
  • 得到有用的快照。该标签页列出 .snap 条目,并全部标记为通过,所以 全部更新 和 删除过时项 没有实际可操作的对象。尚未提供
  • 对 pytest、Go、Cargo、JUnit 等使用监视模式:它们显示 Watch mode no disponible para <framework>。尚未提供
  • 列出超过 200 个测试文件,这个上限是为了手机上的性能而设。有意为之
  • 调试测试。菜单把测试资源管理器描述为可以“发现、运行和调试测试并查看覆盖率”;而面板并不能调试。尚未提供

Docker 工具

Docker 工具是你设备上已有的 docker 命令行工具的前端。PocketCode 不包含 Docker 或 Docker 守护进程,面板也没有远程主机输入框。所以在典型的手机上,需要 Docker 的标签页会显示 无法访问 Docker,而 Dockerfile 和 Compose 编辑器仍可使用。

工具 › 项目 › Docker 工具。它需要打开一个项目;没有项目时显示 未打开项目(“打开一个项目以管理它的 Dockerfile 和容器。”)。

当 Docker 不存在时

打开时,面板会运行 docker --version。如果失败,容器、镜像、构建 和 镜像仓库 会显示 无法访问 Docker:“PocketCode 在此设备上运行 docker 命令,但没有找到它。你仍然可以编辑 Dockerfile 和 Compose 文件。”它还会给出失败的真实原因和两个按钮:重试 和 编辑 Dockerfile。副标题显示 Docker 不可用。

Dockerfile 与 .dockerignore

这个标签页无需 Docker 即可使用。从 14 个模板中选一个开始:Node.js App、Python App、Java App、Go App、Rust App、Static Site、React App、Next.js、FastAPI、Spring Boot、Django、Ruby on Rails、Laravel、Custom Multi-stage;编辑文本后 保存 为项目中的 Dockerfile。对于 .dockerignore,你可以 生成 一个文件并保存。

Compose

九个模板:Full-stack Node.js、Full-stack Python、Full-stack Java、LAMP Stack、MEAN Stack、Monitoring Stack、ELK Stack、WordPress 和 Dev Tools。编辑后 保存 文件;它总是保存为 docker-compose.yml,尽管面板会读取 docker-compose.yml、docker-compose.yaml、compose.yml 或 compose.yaml。有 Docker 时,Compose up、Compose down、Compose build 和 Compose logs 会运行 docker compose up -d、down、build 和 logs --tail=100;在项目有 Compose 文件之前它们保持禁用。

有 Docker 可用时

标签页作用
容器把 docker ps -a --size 的结果分为 运行中 和 已停止 列出。每个容器可以:查看日志(最后 200 行,然后是标有 实时 的 docker logs -f 实时流)、启动或停止,以及一个包含 重启 和 删除 的菜单(会询问 删除容器?)。因错误而停止的前三个容器还会显示最后 20 行日志。
镜像列出镜像;按名称 拉取 镜像(例如 nginx:alpine);删除镜像(会询问 删除镜像?)。
构建设置 镜像标签(默认 my-app:latest)并点 构建镜像:它会在项目中运行 docker build -t <tag> .,实时输出,并有 取消构建。它需要 Dockerfile(“请先编写或选择一个 Dockerfile。”)。
镜像仓库选择 Docker Hub、GitHub CR 或 Google GCR,并 推送 一个 name:tag(它会运行 docker tag 和 docker push)。

命令的限制

每条命令最多运行 300 秒。名称和标签在传给 Docker 之前会先被检查:只能含字母、数字和 _ : . / @ -,最长 255 个字符,且不能以 - 开头。

你可以

  • 无论有没有 Docker,都可以编写并保存 Dockerfile(14 个模板)、.dockerignore 和 Compose 文件(9 个模板)。
  • 用 重试 重新检查 Docker。
  • 在本地 docker 可用时:列出、启动、停止、重启和删除容器;实时查看其日志;拉取、列出和删除镜像;构建镜像;运行 Compose up、down、build 和 logs;推送到 Docker Hub、GitHub CR 或 Google GCR。

你不能,以及原因

  • 在没有 docker 命令的设备上使用 Docker。PocketCode 不附带 Docker 二进制文件或守护进程;面板只运行它在设备上找到的命令行工具。设备
  • 通过 SSH、DOCKER_HOST 或 context 连接远程 Docker 守护进程:面板没有主机输入框,所有命令都在本设备上运行。尚未提供
  • 登录镜像仓库:没有登录步骤,所以 推送 使用的是本地 Docker 命令行已经配置好的内容。只提供三个镜像仓库。尚未提供

监控

监控测量的是你正在使用的应用以及它所运行的设备,而不是某台服务器。面板打开期间每 2 秒采样一次,关闭后停止。如果要查看你自己的服务器,有一个单独的 服务器 标签页。

工具 › 项目 › 监控(标题 监控面板,副标题 每 2 秒测量一次)。无需项目即可使用。

五个标签页

标签页显示什么
仪表板一个 系统健康 分区,有四张卡片:应用 CPU、内存(设备的内存使用率,单位 %,不是应用的)、电池 和以 MB 为单位的 可用 存储。然后是 热状态(Android 10 及更高版本)和最近的五条警报,或 没有活动警报。
指标最近 60 个样本(两分钟)的序列,以及八个指标的最小值、平均值和最大值:应用 CPU、应用堆内存、设备内存、总内存 (PSS)、电池、网络接收、网络发送 和 可用存储。设备无法报告的指标显示“—”和“此设备尚未报告该指标。”
警报内置四条规则:CPU 过高(CPU 高于 80 %)、设备内存严重不足(高于 90 %)、存储空间不足(低于 200 MB)和 电量低(低于 15 %)。新建规则 用来创建你自己的规则;你可以编辑、关闭、删除(会询问 删除这条告警规则?)以及确认事件。规则在重启后仍然保留。
日志应用自己的日志(按本进程过滤的 logcat),缓冲区为 500 行,每秒最多刷新四次。有 系统日志 开关(默认关闭)、级别筛选、搜索日志…、清除、条目计数和 实时。
服务器把面板指向你自己的、兼容 Prometheus 的服务器。见下文。

警报规则

规则表单包含 指标、条件(大于 或 小于)、阈值(会按该指标的取值范围检查)、持续时间(秒) 和 严重程度(致命、警告、信息)。警报事件只在面板打开时才会被评估和显示;保留最近 100 条,每条规则每分钟最多一条。

服务器:你自己的 Prometheus

服务器 可用于 Prometheus、VictoriaMetrics、Thanos、Mimir、Cortex 或 Grafana 代理。输入 地址,选择 身份验证(无、用户名和密码 或 Bearer 令牌),选择刷新间隔(5 到 300 秒,默认 15),并最多添加 12 条查询;每条都是一个 PromQL 即时查询,必须返回单个值。测试连接 用来检查配置。在你配置之前,该标签页显示“尚未配置服务器。在你配置之前,不会有任何数据离开本设备。”

你可以

  • 查看应用的 CPU、堆内存和总内存、电池、应用的网络流量和可用存储,以及设备的内存和热状态。
  • 阅读应用自己的日志,搜索、按级别过滤并清除。
  • 创建、编辑、关闭和删除警报规则,并在面板打开期间看到它们何时触发。
  • 显示来自你自己的、兼容 Prometheus 的服务器的最多 12 个数值。

你不能,以及原因

  • 查看错误、运行时间、APM 或链路追踪。这些标签页已被移除,因为手机无法为别人的服务测量它们。菜单中对监控的描述仍然写着“错误和可用性”。有意为之
  • 用前四个标签页监控其他进程或机器:它们只测量本应用和本设备。你自己的服务请使用 服务器。有意为之
  • 通过推送、邮件或 Slack 收到警报通知:事件只出现在面板中,而且只在面板打开时出现。尚未提供
  • 让 持续时间(秒) 生效:它会被保存和显示,但规则在当前值越过阈值时立即触发。尚未提供
  • 通过纯 HTTP 查询服务器,除非它是 localhost、127.0.0.1 或 10.0.2.2。Android 会阻止未加密的流量,所以像 http://192.168.1.50:9090 这样的地址会被拒绝:请使用 https://,或使用隧道或 TLS 代理。设备
  • 使用范围查询、返回多个序列的查询或 Sentry。只支持 Prometheus 的即时查询 API。第三方

库

库(菜单中称为 依赖项)不是包管理器。它列出项目在 .pocketcode/dependencies.json 中声明的 Kotlin/JVM 库,并让你从一个封闭的目录中挑选,目录里是随 PocketCode 应用一起提供的四个库。只有完整的 Kotlin 运行器会使用它们。

工具 › 运行 › 依赖项(仅在磁盘上已打开项目时可用),或运行面板上的依赖项按钮。面板标题为 库,副标题显示 .pocketcode/dependencies.json · N 个已声明。

目录

目录 标签页列出 PocketCode 自带的四个库:kotlinx.coroutines 1.10.2、kotlinx.serialization · JSON 1.7.3、kotlinx.serialization · core 1.7.3 和 Okio 3.9.1。每一行的 + 图标(添加 加上库名)会把它加入项目。

已声明

已声明 标签页列出项目的 JSON 所声明的内容,筛选项有 全部、可更新 和 未包含。每一行显示 group:artifact 以及 PocketCode 是否包含它(“PocketCode 已包含。”,或在项目要求另一个版本时显示“a → b”),并带有更新图标和移除图标。底部的 更新 N 个 会更新所有可更新的库,也就是把它设为 PocketCode 自带的版本。标题栏中的刷新图标(立即解析)会重新准备这些库,状态依次为“正在准备库…”和“已就绪:本项目的库已准备好。”没有声明时显示 没有依赖。

未包含的库

如果 JSON 中写了目录之外的内容,该行会说明它不随 PocketCode 提供,“因此本项目将以简易模式运行。请移除它,或改用上面的库。”

你可以

  • 查看项目声明了哪些库,以及每个库是否已包含。
  • 添加四个内置库中的任何一个、移除它,或把它更新到内置版本。
  • 无需网络即可准备库:jar 取自应用本身,并用 SHA-256 校验。

你不能,以及原因

  • 从互联网、npm、pip、Maven、Gradle 或 cargo 安装库。Google Play 不允许应用从 Play 之外下载可执行代码(jar、dex),所以目录是封闭的,内置在应用中,不使用网络。Google Play
  • 添加任意坐标或选择版本:PocketCode 使用它自带的版本,JSON 中的 repositories 字段会被读取并忽略。Google Play
  • 在其他语言中使用这些库:这个列表只服务于完整的 Kotlin 运行器。有意为之

后端生成器

后端生成器根据存储在应用中的模板编写服务端代码。它不是 AI:相同的设置总会得到相同的文件(生成 按钮只是先等一小会儿)。你在面板中阅读结果,打开项目时可以把它保存到 backend/ 下。

工具 › 项目 › 后端生成器。

标签页

标签页作用
API 模板选择 框架(Express.js、FastAPI、Spring Boot、Django REST、Gin、Actix Web、NestJS、Fiber)、数据库(PostgreSQL、MySQL、SQLite、MongoDB、Redis)、身份验证(None、JWT、OAuth2、API Key、Session-based)、选项(Docker、CORS、限流、Swagger / OpenAPI、测试、CI/CD)、项目名称、端口 和 基础 URL,然后点 生成模板。CI/CD 会添加 .github/workflows/ci.yml,其中包含该框架所用语言的环境准备步骤。
CRUD 生成器为模型及其数据表命名,添加 字段(String、Integer、Float、Boolean、Date、DateTime、UUID、JSON、Text、Enum、Array、Binary,每个可设为必填或唯一),勾选 校验、分页、搜索、软删除、审计字段 或 测试,然后点 生成 CRUD。Express 和 NestJS 会得到多个 TypeScript 文件,FastAPI 和 Django REST 会得到多个 Python 文件;Spring Boot、Gin、Actix Web 和 Fiber 只得到一个 src/<model>.ts 文件。
迁移十一种类型:Create Table、Alter Table、Drop Table、Add Column、Drop Column、Add Index、Drop Index、Add Foreign Key、Rename Table、Rename Column 和 Seed Data。添加 列,点 生成迁移,然后阅读 升级迁移 和 回滚迁移 的 SQL,以及 历史记录。
OpenAPI / Swagger填写 标题、版本、接口和 安全(Bearer (JWT)、API 密钥、Basic),选择 YAML 或 JSON,然后点 生成 OpenAPI 规范。

保存到项目

保存到项目 会把生成的文件写入项目的 backend/ 下;迁移会变成 backend/up.sql 和 backend/down.sql,规范会变成 backend/openapi.yaml 或 backend/openapi.json。路径不能跑出项目文件夹。如果已有部分文件存在,它会询问 要覆盖文件吗?(“项目中已存在 N 个文件,将被覆盖。”)。成功时提示“已将 N 个文件保存到项目的 backend/ 目录”,写入失败时提示“无法保存生成的文件”。它需要打开一个项目。

你可以

  • 在设备上、无需网络,生成八个框架的 API 模板、CRUD 文件、SQL 迁移(升级和回滚)以及 YAML 或 JSON 格式的 OpenAPI 规范。
  • 在预览中阅读生成的代码并选中其文本。
  • 把所有内容保存到项目的 backend/ 下,覆盖前会确认。

你不能,以及原因

  • 拥有一个真正可用的模拟服务器。在 模拟服务器 标签页中,启动 只会在一秒后把状态切换为 运行中,然后每隔几秒向 请求日志 添加虚构的请求(随机的路由和延迟)。它不会打开任何端口。尚未提供
  • 为 NestJS 或 Fiber 得到不同的代码:它们复用 Express 和 Gin 的模板。尚未提供
  • 为 Spring Boot、Gin、Actix Web 或 Fiber 得到完整的 CRUD:只有那个单一的 TypeScript 兜底文件。尚未提供
  • 得到针对 MongoDB 或 Redis 的迁移:迁移是 SQL,而且只有 PostgreSQL 有自己的列类型。尚未提供

AI 生成器

AI 生成器 有五个标签页,但只有三个使用 AI。API 和 架构 是在设备上运行的离线模板;翻译、安全 和 性能 会把你粘贴的代码发送给你已连接的 AI 提供商。

AI › AI 生成器(副标题 API • 架构 • 翻译 • 安全 • 性能)。无需项目即可使用。每个标签页都有一个主按钮。

五个标签页

标签页作用
API · 离线描述 API,从 12 个框架中选一个,然后点 生成 API。只用到你描述中第一个有意义的词,作为资源名;你总会得到五个 CRUD 接口和代码。这 12 个框架共用七套模板:NestJS 和 Hono 用 Express 的,Flask 和 Django REST 用 FastAPI 的,Fiber 用 Gin 的。
架构 · 离线选择一个引擎(PostgreSQL、MySQL、SQLite、MongoDB、Redis、Firestore)和输出格式,然后点 生成模式。你总会得到一张以描述中第一个词命名的表,包含 id、name、email、status、created_at 和 updated_at。SQL、Prisma、TypeORM、Django 和 Mongoose 有各自的生成器;Sequelize、SQLAlchemy、Drizzle 和 Knex 返回纯 SQL DDL。
翻译 · AI粘贴代码,在 16 种语言(JavaScript、TypeScript、Python、Java、Kotlin、Swift、Go、Rust、C++、C#、Ruby、PHP、Dart、Scala、Lua、R)中选择 源语言 和 目标语言,用 交换语言 互换,然后点 翻译代码。如果两者相同,会提示“源语言和目标语言相同”。回答包含翻译后的代码、说明和警告。
安全 · AI粘贴代码,然后点 扫描漏洞。提示词要求按 OWASP Top 10、对应 CWE 进行审查。你会得到一个 风险 评分,以及带有严重程度(Critical、High、Medium、Low、Info)、类别、CWE 和 OWASP 引用、行号、建议和修复代码的发现项。
性能 · AI粘贴代码,然后点 分析性能。你会得到 0 到 100 的分数、时间和空间复杂度、问题和 建议。

AI 标签页需要什么

需要已连接的 AI 提供商和互联网。第一次使用时,会有一条提示询问 发送给 <provider>?;发送 会共享你粘贴的代码,取消 则什么都不共享。API 和 架构 既不需要提供商也不需要网络。生成之前,结果区显示“生成后结果会显示在这里。”

你可以

  • 离线生成 REST API 骨架和初始数据库架构。
  • 借助你的 AI 提供商,在 16 种语言之间翻译代码、扫描漏洞并分析性能。
  • 在面板中阅读结果并选中其文本。

你不能,以及原因

  • 使用编辑器中的选区:你需要把代码粘贴到面板中;没有“使用选区”按钮。尚未提供
  • 把结果插入或应用到你的文件:面板只负责显示。尚未提供
  • 根据你的描述得到定制的 API 或架构:API 和 架构 只用描述的第一个词,其余部分不会改变输出。尚未提供
  • 得到 Sequelize、SQLAlchemy、Drizzle 或 Knex 的代码:这四种格式返回的是 SQL DDL。尚未提供
  • 在没有已连接提供商或没有网络时使用 翻译、安全 或 性能。需要网络

AI 代码操作

菜单的 AI 分区里有一组作用于你代码的操作:解释、测试、文档、根据注释生成代码、重构,以及五个快捷操作。它们会在你接受一条提示后,把代码发送给你已连接的 AI 提供商,并显示回答。

更多选项 的 AI 分区,或命令面板。大多数操作需要先选中代码;测试和文档使用光标所在的函数。没有选区时,基于选区的操作什么也不做。

各项操作

操作会发生什么
AI:解释所选内容解释所选代码。回答以 说明 为标题,出现在停靠面板中。
AI:生成测试为光标处的函数编写测试(已生成测试)。插入 会把它们放在光标处。
AI:生成文档为光标处的函数编写文档(文档)。应用 会用回答替换那个函数。
AI:根据注释生成查找至少 10 个字符的注释,例如 // TODO: …、// FIXME: …、// GENERATE: …、// AI: …、// IMPLEMENT: …、// STUB: …、# TODO: … 或 /* TODO: … */,并在一个条中最多显示五条(“N 条可生成代码的注释”)。点按其中一条即可得到 已生成代码,并带有 插入。
AI:重构代码打开 AI 辅助重构:从九种类型中选一种并点 重构。没有选区时,它会重构整个文件。回答为 已重构代码,并带有 应用,它会替换发送出去的那段代码(选区;没有选区时是整个文件)。这九个类型名称始终是西班牙语:Extraer y Simplificar、Mejorar Nomenclatura、Añadir Type Safety、Convertir Patrón、Optimizar Rendimiento、Revisión Seguridad、Mejorar Accesibilidad、Manejo de Errores 和 Personalizado(带有 自定义指令)。
修复错误、优化、简化、现代化作用于选区。回答在底部面板中打开(“Fixed Code”、“Optimized Code”、“Simplified Code”、“Modernized Code”)。应用 会先显示红绿对比的差异预览,然后替换选区(如果选区已不存在,则在光标处插入)。
生成把选区当作你想要内容的描述,比如一条注释(// 返回列表之和的函数)或一句话,并向你的 AI 提供商索取代码。标题为“Generated Code”的底部面板会先显示 AI 正在思考…,然后显示代码;如果提供商无法回答,面板会显示错误并停止加载,点 ✕ 即可关闭。应用 会先显示红绿对比的差异预览,然后把代码插入选区下方的新一行,所以你的描述会保留。复制 会复制它。第一次使用时,会有一条提示询问 发送给 <提供商>?。
就所选内容询问 AI(Ctrl+I)关闭编辑器,并以所选内容作为上下文打开 AI 聊天。

停靠面板中的“应用”和“插入”

停靠面板最高 300 dp,带有一个用来关闭的 ✕。插入 会把回答放在光标处。应用 只会用回答替换发送给 AI 的那段代码(生成文档 是那个函数;重构 是选区,没有选区时是整个文件),没有预览,且只需一步撤销。如果在 AI 回答期间你改动了那段代码,导致找不到它,就不会改动任何内容,面板会提示“AI 回复期间代码已被修改,因此未应用结果。请改为复制。”复制 按钮位于生成的代码旁,会把它复制到剪贴板(“已复制到剪贴板”);底部面板有自己的 复制,用来复制整条回答。

你可以

  • 借助你的 AI 提供商,解释、编写测试、写文档、重构、修复、优化、简化或现代化代码。
  • 把 TODO 或 GENERATE 注释变成代码。
  • 用一条注释或一句话描述你想要的内容,选中它并运行 生成,代码就会插入到它的正下方。
  • 只在发送出去的那个函数或选区上应用生成的文档或重构结果,并可一步撤销。
  • 用 复制 把生成的代码复制到剪贴板,停靠面板和底部面板都有这个按钮。
  • 在应用快捷操作之前先查看差异。
  • 用 就所选内容询问 AI 把选区交给 AI 聊天。

你不能,以及原因

  • 在没有选区时运行 AI:解释所选内容、修复错误、优化、简化、现代化 或 生成:它们什么也不做。有意为之
  • 看到你所用语言的重构类型:它们的名称固定为西班牙语。尚未提供

实时协作

实时协作让两台或更多设备在同一 Wi-Fi 网络下共同编辑同一个文件。它免费、不需要账号,也没有服务器:主持人的手机在你的本地网络中监听,访客找到它、输入六位数字码,由主持人放行。没有任何内容经过互联网。

工具 › 协作 › 实时协作(标题 实时协作)。没有会话时,显示 在同一 Wi-Fi 下主持或加入,并提醒 仅限局域网 — 对等端必须连接同一 Wi-Fi。

主持会话

  1. 1在 在此设备上主持 下输入会话名称,并点按 开始主持。会话共享你当前打开的文件的文本。
  2. 2把六位数字的 配对码 告诉要加入的人(“把这个码告诉要加入的人”)。
  3. 3有人输入了正确的码时,你的设备会询问 有人想加入:“<name> 输入了正确的配对码。让其加入即表示把文件分享给对方的设备。”选择 让其加入 或 拒绝。你最多有 90 秒。
  4. 4用标题栏中的 结束会话 结束它。

加入会话

  1. 1在同一 Wi-Fi 下打开面板。网络中的对等端 会扫描局域网(正在扫描局域网…),如果没有人在主持,则显示 未找到对等端。
  2. 2在 主机的配对码 中输入主持人的六位数字(“没有它谁也进不来。会话不会离开你的网络。”)。
  3. 3点按主持人,并等待它放行(最多 120 秒)。你之前打开的文件的内容会被主持人的文本替换。
  4. 4用标题栏中的 离开 离开。

会话之中

标签页显示什么
会话配对码(仅主持人)、会话 ID、主机(设备型号)、端口、以“n / 10”显示的 参与者、聊天、已连接 列表和 活动。
成员每位参与者,带有“主持人”或“(你)”标记、在线 或 离线,以及光标的“行 l:c”。主持人可以对其他每个人使用 移除 按钮。
聊天文字消息(输入消息…);以三个反引号开头的消息会显示为代码片段。

共享了什么

  • 会话开始时主持人当前文件的文本。一个会话共享一个缓冲区:不是项目树,也不是其他文件。
  • 之后,所有人的编辑会合并(CRDT),远程光标会在编辑器中以名称和颜色显示。
  • 主持人转发一切:访客与主持人通信,而不是彼此通信。
  • 主持人放行的每位访客都可以编辑共享文本。
  • 如果某位访客的连接断开,应用最多重试六次(间隔从 1 秒逐渐增加到 15 秒),并整合期间输入的内容。

网络与权限

从 Android 13 起,主持和加入需要 Android 的附近设备权限(在最新的 Android 版本上是本地网络权限)。当你开始主持、扫描或加入而缺少该权限时,会弹出 Android 自己的权限对话框:允许后再点按一次。如果你拒绝,主持和加入仍会被拒绝(下一次尝试会再次显示说明),直到你在 Android 的应用设置中允许它。权限说明和连接错误会以应用的语言显示。

你可以

  • 主持一个共享当前打开文件的会话;批准或拒绝每位访客;结束会话。
  • 让你接受的每位访客都能编辑共享文本。
  • 需要该权限时,直接在面板内回应 Android 的权限对话框,并以应用的语言阅读其说明。
  • 用 移除 移除一位访客:他的连接会被关闭,之后如果他再次尝试加入,主持人会不经询问直接拒绝。
  • 用六位数字码加入同一 Wi-Fi 下的主持人。
  • 同时编辑同一段文本,看到所有人的光标并聊天。
  • 短暂断线后自动重新连接。

你不能,以及原因

  • 跨不同网络或通过互联网协作:没有中继或云。有意为之
  • 选择你的名字:包括你自己在内的每位参与者都显示为 You,主持人的审批对话框中也是如此。尚未提供
  • 依赖“n / 10”的上限:它只是显示出来,主持人并不限制访客数量。尚未提供
  • 与访客共享终端或调试:这是有意移除的,因为那会把一个 shell 交给另一台设备。有意为之
  • 共享多个文件或整个项目:一个会话只共享一个缓冲区。有意为之

问题

问题是一份汇总列表,列出编辑器在所有打开的标签页中发现的一切问题,并按文件分组。它是一个全屏对话框,而不是底部面板。

转到 › 问题(Ctrl+Shift+M)、编辑器状态栏中的问题计数,或 转到 › 分析风格 (Lint),后者会打开同一个对话框并打开 风格。

筛选

可按来源筛选——编译器/LSP、标记 和 风格,各带有计数——也可按严重程度筛选——错误、警告、信息 和 提示。编译器/LSP 和标记默认开启。风格(lint 规则)只有在你打开它时才会计算,并显示“正在分析风格…”,对话框关闭时不会计算任何内容。

行

问题会去重,并按严重程度再按行号排序。点按一行即可跳转到“行 N,列 M”。当前文件所在的分组有 快速修复,它会打开快速修复面板。F8 和 Shift+F8 无需打开对话框,就能跳到下一个或上一个错误、警告或 TODO 标记。没有内容可显示时显示 未发现问题。

你可以

  • 在一份列表中查看所有打开标签页里来自语言服务器、标记和风格规则的错误、警告、信息和提示。
  • 按来源和严重程度筛选,并跳转到某一行。
  • 为当前文件的问题打开 快速修复。

你不能,以及原因

  • 看到没有在标签页中打开的文件的问题:只会读取打开的标签页。有意为之
  • 在输入时让 风格 始终开启:它每次在你打开时按需计算。有意为之

大纲

大纲是编辑器右侧的一列,列出文件中的类、接口、函数、导入块和 // region 区域,并可跳转到它们。它由一个简单的解析器生成,不使用语言服务器。

转到 › 大纲 可以切换它,面包屑中的符号段也可以。它宽 200 dp,只有当编辑器在文件中找到了区域时才会出现。

它能识别什么

  • 以 class、interface、object、enum class、fun 或 suspend fun 开头并带有 { 的行,即 Kotlin 风格的声明。
  • 由三行或更多连续的、以 import 开头的行组成的块。
  • 以 // region Name 写出并以 // endregion 结束的区域。
  • 它会在你停止输入 0.8 秒后刷新。

使用方法

在 筛选符号… 中输入(匹配文本的一部分,不是模糊匹配),点按一项即可跳转到它所在的行。筛选没有匹配项时显示 无符号。

你可以

  • 查看 Kotlin 文件的结构,并跳转到任何类、函数、导入块或区域。
  • 通过输入来筛选列表。

你不能,以及原因

  • 列出其他语言写法的声明:JavaScript 中的 function、Python 中的 def 或 Java 中的 public class 都不会匹配。在这些文件中你主要得到导入块和 // region 标记。尚未提供
  • 使用语言服务器获取符号:大纲不使用它。尚未提供

免费与 Pro

本页的每个工具都是免费的。它们都没有套餐限制,也没有付费墙。

工具免费Pro
调试、测试资源管理器、Docker 工具、监控、库、后端生成器已包含已包含
AI 生成器和 AI 代码操作已包含;使用你连接的 AI 提供商已包含;同样如此
实时协作已包含已包含
问题和大纲已包含已包含
Pro 不会改变这些工具中的任何东西。关于 Pro 实际解锁了什么,请参阅 套餐与价格。

隐私与安全

逐个工具说明有哪些内容会离开设备。

  • 调试、测试资源管理器、Docker 工具、库、后端生成器、问题和大纲不会把你的代码发送到任何地方。它们运行的命令(npx、docker pull、docker push…)与在任何 shell 中一样,有各自的网络使用。
  • AI 操作,以及 AI 生成器的 翻译、安全 和 性能 标签页,会把你选中或粘贴的代码连同指令通过互联网发送给你的 AI 提供商。事先会有一条提示询问 发送给 <provider>?;取消 不会发送任何内容。API 和 架构 不使用 AI,也不发送任何内容。就所选内容询问 AI 会打开 AI 聊天,它遵循自己的规则。
  • 监控在设备上测量,不发送任何内容。服务器 标签页只会查询你输入的地址,并使用你输入的凭据;密码或令牌会用 Android Keystore 加密存储。在你配置之前,“任何数据都不会离开本机”。
  • 实时协作始终停留在你的本地网络:没有服务器、中继或账号。流量是加密的(ECDH P-256 密钥交换,然后是 AES-128-GCM),访客需要六位数字码和主持人的批准。按设计,主持人对同一 Wi-Fi 下的其他设备是可见的,这样它们才能找到它。
  • 这种加密无法保护你免受下面这种情况:有人得知了这六位数字,而你又放他进来了。码特意设计得很短,好让人能输入。失败五次之后,主持人会关闭会话。

限制

这些工具目前还做不到什么,以及原因。

  • 调试仅对 JavaScript 是真实的;求值表达式… 回答 undefined。尚未提供
  • 测试资源管理器和 Docker 工具通过设备运行命令,并不自带 Node、Python、Go、Cargo、Gradle 或 Docker。设备
  • 覆盖率 标签页永远不显示数据,快照工具也没有可操作的对象。尚未提供
  • 库是一个封闭的、只有四个 Kotlin 库的目录:Google Play 不允许下载可执行代码。Google Play
  • 模拟服务器 标签页只是一个带虚构请求的示意;NestJS 和 Fiber 复用 Express 和 Gin 的模板。尚未提供
  • 在 AI 生成器中,API 和 架构 是离线模板,不是 AI。尚未提供
  • AI 标签页和操作需要已连接的提供商和互联网。需要网络
  • 实时协作只能在同一个本地网络内工作,没有中继或云。有意为之
  • 监控没有推送、邮件或 Slack 警报,并且除非是本地地址,否则无法通过纯 HTTP 访问服务器。设备
  • 大纲只能理解 Kotlin 风格的声明。尚未提供
  • 有些文本没有翻译:调试标签页名称是英文,九种重构类型是西班牙语,少数错误消息是西班牙语(测试资源管理器)或英文(生成器)。尚未提供

故障排查

无法访问 Docker

设备上没有 PocketCode 能运行的 docker 命令。能装的话就装一个;或者继续使用无需它也能工作的 Dockerfile 和 Compose 标签页,然后在有 Docker 的地方运行命令。重试 会重新检查。

未打开项目

Docker 工具针对的是项目文件夹。请打开一个项目,然后再次打开该工具。

未检测到测试框架

项目中没有 PocketCode 能识别的配置文件(jest.config.js、pytest.ini、go.mod、Cargo.toml、phpunit.xml、pubspec.yaml、Package.swift…),而且 package.json 中也没有提到 Jest、Vitest 或 Mocha。unittest 永远不会被自动选中。

Error ejecutando tests: …

测试命令无法启动,或被错误中断;冒号之后的文本是原因。如果命令所需的工具(npx、python、go、cargo、./gradlew…)缺失,shell 会在 输出 中说明,测试保持未运行。无论你用哪种语言,这条消息都是西班牙语。

Coverage no disponible para <framework>

unittest、RSpec 和 Swift XCTest 没有覆盖率命令。对于其他框架,命令会运行,但 覆盖率 标签页仍然为空。

Watch mode no disponible para <framework>

监视模式只有 Jest、Mocha 和 Vitest 支持。

⚠ <runner> has no debugger support — running without it.

只有 JavaScript 文件(.js、.mjs、.cjs、.jsx)会被调试。其他任何文件(包括 TypeScript)都只是运行。

⚠ Could not attach the debugger on port N — the process stays paused.

面板无法连接到 Node 的检查器。请在运行面板中停止运行,然后重新启动 调试文件。

Breakpoint not set at <file>:<line> — <cause>

调试器拒绝了该断点;它会作为警告显示在 Console 标签页中,破折号之后是原因。请在正在运行的文件中改选一个可执行的行。

Android blocks unencrypted HTTP to <host>…

监控 › 服务器 会拒绝纯 HTTP,除非主机是 localhost、127.0.0.1 或 10.0.2.2。请使用 https:// 地址,或在服务器前面放置隧道或 TLS 代理。

Couldn’t start reading this app’s log. The system may not allow it on this device.

监控 › 日志 读取本应用的 logcat;有些设备不允许应用这样做。其他标签页不受影响。

未连接任何 AI 服务。请在设置中连接一个提供商以使用 AI 功能。

AI 操作和三个 AI 标签页需要提供商。请在“设置”中添加密钥或登录,然后重试。参见 AI providers, models & keys。

Translation failed: … · Scan failed: … · Analysis failed: …

提供商返回了错误,或无法连接;冒号之后的文本是原因。生成器自己的消息是英文。

PocketCode 需要使用本地网络并查找附近设备的权限… · 缺少本地网络权限…

实时协作需要 Android 的附近设备(本地网络)权限。当你主持、扫描或加入时,面板会用 Android 的对话框请求它;如果你拒绝了,请在 Android 设置中为 PocketCode 允许它,然后重试。在此之前,主持和加入都会被拒绝,并以应用的语言显示这条提示。

没有响应。主机可能已离线、你们不在同一网络,或 Android 正在拦截本地网络。

请检查主持人是否仍保持着会话,两台设备是否在同一 Wi-Fi 下(隔离设备之间通信的路由器会阻止连接),以及上面的权限是否已授予。

未找到对等端

你的网络中目前没有人在主持,或者设备不在同一 Wi-Fi 下。请让主持人打开 实时协作 并点按 开始主持。

无法加入 <主机>:… · 无法开始主持:…

冒号之后的文字用应用的语言说明原因:无法加入会话。(码错误,或主持人拒绝了你;应用对所有原因都有意用同一句话,所以码错误和被拒绝看起来没有区别)、没有响应……(见上)、对方设备的响应不像 PocketCode,或使用了不兼容的版本。请确认选择了正确的会话后重试。,其余情况则是 无法连接到主持人。

加入失败次数过多,会话已关闭;请新建一个会话以获取新的配对码。

失败五次(码错误、被拒绝或连接失败)之后,主持人会关闭会话。请重新开始主持以获得新的码。

请输入主持人显示的 6 位配对码。

点按主持人之前,请先输入主持人屏幕上 配对码 下显示的六位数字。

主持人已关闭会话。你的文件仍保持打开,内容不变。

主持人结束了会话,或者重试六次后重新连接失败(“无法重新连接到主持人。…”)。你的文件仍然保持打开,其中包含你写下的所有内容,包括断线之后输入的部分。

无符号

大纲筛选没有匹配项。请清空输入框。在 JavaScript、Python 或 Java 文件中,大纲通常只列出导入块和 // region 标记。