From 6fa84612f887dd0d5e3acdd3017ccf39ca250631 Mon Sep 17 00:00:00 2001 From: tradecatlabs <288998340+tradecatlabs@users.noreply.github.com> Date: Fri, 23 Oct 2026 23:12:56 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20god=20-=20=E8=A1=A5=E9=BD=90=20Pi=20?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E4=B8=8E=E8=BE=93=E5=85=A5=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=20(#229)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/getting-started-AGENTS.md | 2 +- .github/god.md | 14 +++++++++++++- .github/test-source-archive.py | 13 ++++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/.github/getting-started-AGENTS.md b/.github/getting-started-AGENTS.md index ef4ca1e0..84c5c002 100644 --- a/.github/getting-started-AGENTS.md +++ b/.github/getting-started-AGENTS.md @@ -19,7 +19,7 @@ - `god.md` 本身就是给网页版 Chat AI 的完整提示词:文件头要求用户全文复制并逐轮互动;网页 AI 首轮简短说明路线;系统不明时才问系统,已提供的系统/终端信息直接复用;实际终端未确认或未就绪时指导打开/确认本机终端(Android 使用 Termux),若用户尚无检查结果且系统、实际终端已明确且已打开,可直接安排 M0 只读版本检查;已回报目标终端的版本号则复用证据并跳过,已回报错误则按对应错误分支处理、不重复初始检查(仅允许明确规定的条件性重试);Android/Termux 按 Pi 官方 Termux 指南引导,不套用桌面安装命令。再从 M0 引导到 M4,按需检查/安装 Pi CLI、准备网络、连接 OpenAI GPT、验证本机 Bash;若 CLI 已验证可用则跳过安装专用网络检查与安装步骤。安装阶段只核对当前安装路线所需目标,不逐项探测未触发的安装源;短网络探测须设置连接和总时限,并说明超时不等于不可达;OpenAI 模型网络检查仅在 M4.1 按所选登录路线与实际故障执行;Pi 的 OpenAI GPT 路线区分 ChatGPT 订阅 OAuth(provider `openai-codex`)和 OpenAI API Key,不得将 ChatGPT 订阅等同 API 额度;用户另选本地模型时按请求可另行指导,但不计作 OpenAI GPT 验证或满足完成标准第 2 项;仅 API Key 路线可探测 `api.openai.com`,订阅 OAuth 不用该端点代测。安装路线默认优先对应系统的官方安装器,且每轮只展示一条当前路线。必须等全部完成标准有真实证据后才报告完成,不得停在版本号、模型回答或单次命令检查。网页 AI 只核对用户回报,不能冒充本机执行。Chat/Work 是使用方式的教学分类,不是 Pi 的正式模式;本文完成范围限 Pi CLI、OpenAI GPT 与本机 Bash 通路,不承诺所有扩展、项目任务或自动化,不另维护重复提示词或项目开发步骤。 - `god.md` 使用正常 Markdown 排版,标题、段落和链接直接渲染;仅命令和对话示例保留独立代码块,不用外层围栏包住全文。整篇使用 GitHub 文件页右上角的原生全文复制按钮。移除折叠标签、HTML 锚点和页内章节链接;入站链接及历史重定向直接指向 `god.md`,文集链接不生成失效片段。修改时保留经文、操作流程、安全边界和完成标准。经文仅用已核验的《圣经》和合本简体(CUVS)原句,注明书卷、章节、版本与原页;连续节录须注明,不拼接或改写。保留原语境,技术对应另作说明,不以引用或比喻增加执行授权、权限或效果承诺。 - 安装方式、Node.js 版本要求、系统支持和 provider 流程以 Pi 当前官方文档与安装入口为准;链接及命令须明确系统、终端、影响和成功判断。官方资料未说明的内容标为未知,不猜测。 -- 区分 `pi --version`、模型授权/可用和项目任务完成;不把 CLI 安装说成模型已接通或项目环境已就绪。 +- 区分 `pi --version`、模型授权/可用和项目任务完成;不把 CLI 安装说成模型已接通或项目环境已就绪。模型授权前,M4.0 先说明目录资源加载、会话保存与信任提示的影响,再引导用户在目标终端用 `pi` 进入交互界面;`/login`、`/model` 和问题在 Pi 输入框而非系统终端或网页版 AI 输入。已有目标目录的 Pi 会话直接复用,M4.2 不要求重新启动;空目录不是沙箱。 - 不把 WSL、Git、Python、编辑器、代理或项目依赖设为 Pi CLI 安装的通用前置条件。Windows 原生 Git Bash 是内置 Bash 工具的命令环境,不是 CLI 安装本身的要求。 - 可达网络是 Pi 安装/更新和 OpenAI 云端 GPT 路线的基础条件;提示词按用户选择的订阅 OAuth 或 API Key 路线确认实际目标可达,再安装或登录。普通网络可达时跳过代理;只在具体官方分发源或模型服务确实不可达时,才逐步处理网络配置。FlClash 与历史服务商注册链接仅为条件路线,须标明来源和未核验边界;注册链接不是个人订阅链接,个人订阅 URL 属于凭据,只能由用户在本机 FlClash 导入。用户选择 FlClash 路线后,默认目标配置为开启 TUN、系统代理和全局模式;启用前说明流量路由范围、隐私与网络影响、权限和恢复路径,等待用户确认;用户拒绝时不得报告该路线已完成。不默认购买服务。关闭 TLS 或使用非官方源一律不作为排障方案。 - 不要求用户把密码、API Key、Token、cookie、订阅链接或私钥贴给网页 AI。Pi 以启动账户权限运行,不是安全沙箱;提醒用户不要用管理员/root 启动并审阅实际命令与改动。 diff --git a/.github/god.md b/.github/god.md index e746de93..2e8b8ef1 100644 --- a/.github/god.md +++ b/.github/god.md @@ -118,6 +118,18 @@ irm https://pi.dev/install.ps1 | iex > > 经文原在说明教会中恩赐、职事与功用的分别;这里分别核实模型回答与工具执行,不以一项代替另一项。 +### M4.0:进入 Pi 交互界面 + +按[Pi Quickstart](https://pi.dev/docs/latest/quickstart),先让用户选择并切换到空目录或非敏感目录;需要创建目录时先说明影响并等用户决定。目录准备、启动和模型授权分轮处理。先说明 Pi 可能加载目录指令、配置与扩展,并保存会话,等待用户决定后再启动。此举只降低当前目录/项目上下文风险,不是沙箱,也不限制 Pi 访问当前账户可访问的其他路径(见[Pi Security](https://pi.dev/docs/latest/security))。不自动批准目录信任提示;先解释提示涉及的资源,再等用户自行决定。 + +若用户尚未在该目录进入 Pi,让其在 M3 已验证可用的目标终端单独运行: + +```text +pi +``` + +等用户看到 Pi 的对话界面和输入框后再进入 M4.1;若已在该目录的 Pi 会话中,直接复用,不重复启动。`pi` 用于打开交互界面,`pi --version` 只显示版本;下文的 `/login`、`/model` 和问题均在 Pi 输入框中输入,不是在系统终端或网页版 Chat AI 中运行。若启动失败,只请用户回报简短脱敏错误摘要,按真实错误排查,不盲目重装。 + ### M4.1:验证对话能力 本提示词的云端主路线是 OpenAI GPT;Pi 的 `/login` 可使用两条不同的登录路线:ChatGPT 订阅 OAuth 与 OpenAI API Key。先询问用户希望使用且有权使用哪条路线;若不确定,说明订阅 OAuth 使用其账号可用的订阅额度,API Key 则使用单独的 API 账户与计费,再等用户选择。模型可用性、额度与费用按用户账号、Pi 当前提供方列表和 OpenAI 规则核对;两条路线彼此独立,不静默切换。[ChatGPT 网页订阅不等于 OpenAI API 额度](https://help.openai.com/en/articles/9039756-managing-billing-for-chatgpt-and-the-api-platform)。 @@ -137,7 +149,7 @@ irm https://pi.dev/install.ps1 | iex > > 原文处于关于圣灵感动与先知讲论的劝勉中;这里以真实工具调用为证,不把模型自称完成当作执行。 -模型能回答后,建议用户在空目录或非敏感目录启动 Pi。此举只降低当前目录/项目上下文风险,不是沙箱,也不限制 Pi 访问当前账户可访问的其他路径(见[Pi Security](https://pi.dev/docs/latest/security))。再让用户在 Pi 对话中发送: +沿用 M4.1 已验证模型的 Pi 会话,不为工具验证重新启动;让用户在 Pi 输入框中发送: ```text 请只通过当前可用的本机 Bash 工具运行这一条只读命令:printf 'local shell OK\n' diff --git a/.github/test-source-archive.py b/.github/test-source-archive.py index 5f5d4710..3c5433b3 100644 --- a/.github/test-source-archive.py +++ b/.github/test-source-archive.py @@ -305,6 +305,13 @@ class SourceArchiveTest(unittest.TestCase): '启用前须说明流量路由范围、隐私影响和恢复方式', '用户拒绝或当前界面/系统不支持时', '也不得报告网络路线已完成', + '### M4.0:进入 Pi 交互界面', + '先说明 Pi 可能加载目录指令、配置与扩展,并保存会话,等待用户决定后再启动。', + '等用户看到 Pi 的对话界面和输入框后再进入 M4.1', + '若已在该目录的 Pi 会话中,直接复用,不重复启动。', + '`/login`、`/model` 和问题均在 Pi 输入框中输入,不是在系统终端或网页版 Chat AI 中运行。', + '沿用 M4.1 已验证模型的 Pi 会话,不为工具验证重新启动', + '不自动批准目录信任提示', 'Pi 的 `/login` 可使用两条不同的登录路线', '`OpenAI (ChatGPT subscription)`', '`openai-codex`', @@ -337,12 +344,16 @@ class SourceArchiveTest(unittest.TestCase): self.assertNotIn('curl.exe -i https://api.openai.com/v1/models', prompt) self.assertLess(prompt.index('## 字多不看'), prompt.index('## 给网页版 Chat AI 的任务')) self.assertLess(prompt.index('## M1:网络环境'), prompt.index('## M2:预备行各样的善事')) + self.assertLess(prompt.find('### M4.0:进入 Pi 交互界面'), prompt.find('\npi\n')) + self.assertLess(prompt.index('\npi\n'), prompt.index('### M4.1:验证对话能力')) + self.assertNotIn('模型能回答后,建议用户在空目录或非敏感目录启动 Pi。', prompt) self.assertEqual( [(token.info, token.content) for token in tokens if token.type == 'fence'], [ ('text', 'pi --version\n'), ('bash', 'curl -fsSL https://pi.dev/install.sh | sh\n'), ('powershell', 'irm https://pi.dev/install.ps1 | iex\n'), + ('text', 'pi\n'), ('text', "请只通过当前可用的本机 Bash 工具运行这一条只读命令:printf 'local shell OK\\n'\n" '不要运行其他命令、读取文件、创建或修改文件、访问网络。只返回结果;若工具不可用,请直接说明。\n'), ], @@ -354,7 +365,7 @@ class SourceArchiveTest(unittest.TestCase): 'href="https://www.biblegateway.com/passage/?search=John%201%3A14&version=CUVS"'): with self.subTest(rendered_markdown=rendered): self.assertIn(rendered, html) - self.assertEqual(html.count('
'), 4)
+        self.assertEqual(html.count('
'), 5)
         self.assertTrue({'道成了肉身', 'm0检查现状', '官方资料'}.issubset(
             book_views._links.markdown_anchors(Path(__file__).with_name('god.md'))))
         self.assertEqual(book_views.relocated('.github/god.md', 'milestone-2'), ('.github/god.md', ''))