pi2dsh 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -19
- package/README.zh.md +29 -19
- package/dist/build-DsGYAgiT.mjs +4416 -0
- package/dist/build-DsGYAgiT.mjs.map +1 -0
- package/dist/cli.mjs +2 -2
- package/dist/compat/pi-ai.d.mts +186 -2435
- package/dist/compat/pi-ai.d.mts.map +1 -1
- package/dist/compat/pi-ai.mjs +2771 -4520
- package/dist/compat/pi-ai.mjs.map +1 -1
- package/dist/compat/pi-coding-agent.d.mts +333 -14
- package/dist/compat/pi-coding-agent.d.mts.map +1 -1
- package/dist/compat/pi-coding-agent.mjs +2 -2
- package/dist/compat/pi-tui.mjs +1 -3620
- package/dist/host.mjs +2 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/{mcp-config-jL9w70It.mjs → mcp-config-gqg7GJEE.mjs} +115 -51
- package/dist/mcp-config-gqg7GJEE.mjs.map +1 -0
- package/dist/pi-coding-agent-Z1hTs61i.mjs +5203 -0
- package/dist/pi-coding-agent-Z1hTs61i.mjs.map +1 -0
- package/dist/pi-tui-5CYLcj-_.mjs +4512 -0
- package/dist/pi-tui-5CYLcj-_.mjs.map +1 -0
- package/dist/pi-types-BLt46jaf.d.mts +2494 -0
- package/dist/pi-types-BLt46jaf.d.mts.map +1 -0
- package/dist/{rolldown-runtime-C2Q2p085.mjs → rolldown-runtime-D-uZhY3_.mjs} +3 -2
- package/dist/{runtime-D84Hv_3m.mjs → runtime-oLd2EInK.mjs} +690 -25
- package/dist/runtime-oLd2EInK.mjs.map +1 -0
- package/dist/runtime.d.mts.map +1 -1
- package/dist/runtime.mjs +1 -1
- package/dist/{source-D7Ir-rPT.mjs → source-0sA5z08z.mjs} +6 -2
- package/dist/source-0sA5z08z.mjs.map +1 -0
- package/package.json +4 -1
- package/dist/compat/pi-tui.mjs.map +0 -1
- package/dist/mcp-config-jL9w70It.mjs.map +0 -1
- package/dist/pi-coding-agent-Dsg6_0ua.mjs +0 -2060
- package/dist/pi-coding-agent-Dsg6_0ua.mjs.map +0 -1
- package/dist/pi-tui-utils-CcaVtm-3.mjs +0 -895
- package/dist/pi-tui-utils-CcaVtm-3.mjs.map +0 -1
- package/dist/pi-types-KazmR2O5.d.mts +0 -62
- package/dist/pi-types-KazmR2O5.d.mts.map +0 -1
- package/dist/pi-uuid-Db8ShZsK.mjs +0 -47
- package/dist/pi-uuid-Db8ShZsK.mjs.map +0 -1
- package/dist/runtime-D84Hv_3m.mjs.map +0 -1
- package/dist/source-D7Ir-rPT.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ Three delivery modes:
|
|
|
45
45
|
Three hard rules keep it general:
|
|
46
46
|
|
|
47
47
|
1. The core contains **no `if (packageName === …)`** branching.
|
|
48
|
-
2. Every capability has a **public-API contract test** (`pnpm test`,
|
|
48
|
+
2. Every capability has a **public-API contract test** (`pnpm test`, 49 tests); "some plugin loads" is never the success criterion.
|
|
49
49
|
3. The top-50 corpus is verified **black-box only**: failures file public ABI gaps, and fixing one gap unlocks every package that hits it (e.g. one jiti subpath-alias fix unlocked 4 packages at once).
|
|
50
50
|
|
|
51
51
|
## Progress: Pi catalog top 50 by monthly downloads
|
|
@@ -54,30 +54,28 @@ Status as of 2026-08-14. Static analysis screens; the black-box run certifies. F
|
|
|
54
54
|
|
|
55
55
|
| Tier | Count | Meaning |
|
|
56
56
|
|---|---|---|
|
|
57
|
-
| ✅ **Tested working** | **
|
|
58
|
-
| 🟡 **Mounts, not fully verified** | **
|
|
59
|
-
| ❌ **Not yet supported** | **
|
|
60
|
-
| **Total mountable today** | **
|
|
57
|
+
| ✅ **Tested working** | **41 / 50** | Mounted in a real DSH runtime AND real execution verified: 35 returned success, 6 ran their business logic end-to-end and rejected the synthetic probe arguments (4 additionally passed deep verification: real LSP subprocess, web search/fetch, PNG generation, official `dsh plugin` add/activate/remove; 2 of the 41 verified through host mode) |
|
|
58
|
+
| 🟡 **Mounts, not fully verified** | **9 / 50** | Loads and registers its tools/commands/skills in a real DSH runtime; full execution needs user credentials/services (3), exposes no safely-probeable callable surface — event-hook packages or tools whose names indicate shared-state mutation, which the harness never invokes (4), was still executing when the 20s probe timeout hit — it dispatches a child `pi` process the fixture environment cannot serve (1), or hit a test-harness limitation (1: strict live-agent identity checks in userQuestions — the same path passes in the deep-verification layer) |
|
|
59
|
+
| ❌ **Not yet supported** | **0 / 50** | The last four Pi-internal-runtime packages are bridged: vendored built-in tool constructors, provider factories, a real-semantics `ExtensionRunner` facade, and `createAgentSession` driving genuine DSH child agents |
|
|
60
|
+
| **Total mountable today** | **50 / 50** | 48 through convert/host bundles directly; 2 snapshot-limited packages through host mode ([evidence](community/host-mode-results.json)) |
|
|
61
61
|
|
|
62
62
|
Additional verified layers: a **host bundle** mounting two unmodified packages passed the official plugin-manager flow end-to-end; a **real model run** (`deepseek-v4-flash`) called a migrated Pi tool with the durable session log asserted and zero credential persistence ([evidence](community/live-deepseek-results.json)).
|
|
63
63
|
|
|
64
|
-
###
|
|
64
|
+
### How the last four internal-runtime packages were bridged
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
`@tintinweb/pi-subagents` (calls `createAgentSession`/`createCodingTools` at load), `pi-landstrip` (calls `createBashToolDefinition`, Pi's built-in tool constructors), `pi-provider-litellm` (needs Pi's provider SDK factories; in DSH, model routing belongs to native llm adapters), `pi-fabric` (uses `wrapRegisteredTool` + references build-time-generated worker assets missing from its published tarball).
|
|
66
|
+
Each landed as a reusable public-surface bridge, not a package patch: `pi-landstrip` and `pi-fabric` run on Pi's built-in tool constructors (bash/read/edit/write/grep/find/ls) vendored byte-identical with their pure-logic closure; `pi-provider-litellm` runs on the vendored pi-ai `createProvider` factory (model transports stay native to DSH llm); `pi-fabric` additionally hooks a real-semantics `ExtensionRunner` facade — patching `prototype.getAllRegisteredTools` genuinely filters the tool catalog, as under Pi; `@tintinweb/pi-subagents` runs on `createAgentSession` bridged to genuine DSH child agents through `ctx.agents` — the bridge owns no model loop, so compositions without one fail explicitly instead of simulating a subagent.
|
|
68
67
|
|
|
69
|
-
|
|
70
|
-
`pi-lens` (resource manifest escapes the package root), `pi-hermes-memory` + `@mjasnikovs/pi-task` (Bun-only `bun:sqlite`), `pi-harness-runtime` (imports playwright without declaring it), `mitsupi` (imports googleapis/ws without declaring them).
|
|
68
|
+
### Correction: the "5 package defects" earlier versions reported
|
|
71
69
|
|
|
72
|
-
|
|
73
|
-
`pi-hashline-edit-pro`, `pi-interview` (read package files at runtime that static closure analysis cannot prove; the host bundle keeps the whole package directory).
|
|
70
|
+
An earlier revision of this page (and our launch posts) attributed 5 blocked packages to upstream package defects. On re-verification **all five were faults in this project's own static screening, not in the packages** — high-download packages deserved that skepticism. Concretely: `bun:sqlite` is a host builtin of Pi's Bun-compiled distribution, and both `pi-hermes-memory` and `@mjasnikovs/pi-task` gate it behind runtime detection with proper Node fallbacks (better-sqlite3 / node:sqlite); `pi-harness-runtime`'s playwright and `mitsupi`'s googleapis/ws sit only on lazily-evaluated feature paths that never run at extension load; `pi-lens`'s out-of-tree skills path is skipped by Pi's own loader, and its bundler-stale worker URLs behave identically under Pi. The screener now models load-time vs lazy reachability, treats `bun:*` like `node:*`, and preserves published file layout — after which **all five mount, four grade tested-working, and no upstream issue was warranted**. The screening rules that produced the misjudgment are contract-tested against regressions.
|
|
74
71
|
|
|
75
|
-
### Roadmap
|
|
72
|
+
### Roadmap
|
|
76
73
|
|
|
77
|
-
1. Lift the
|
|
78
|
-
2.
|
|
79
|
-
3.
|
|
80
|
-
4.
|
|
74
|
+
1. Lift the 9 "mounts, not fully verified" to tested-working (credentialed fixtures, per-package probe arguments, a live-agent probe path for userQuestions).
|
|
75
|
+
2. ✅ Done: interactive OAuth host seam — Pi provider `oauth.login/refreshToken/getApiKey` flows run on DSH-native interaction, credentials persist with Pi's `auth.json` semantics with double-checked-lock refresh, and the four official Pi flows ship built in; verified end-to-end against a real ChatGPT Pro account (see "Interactive OAuth" above).
|
|
76
|
+
3. ✅ Done: all four Pi-internal-runtime packages bridged (see above) — every top-50 package mounts.
|
|
77
|
+
4. ✅ Done: the 2 snapshot-limited packages verified through host mode ([evidence](community/host-mode-results.json)).
|
|
78
|
+
5. ✅ Done: re-verified the 5 packages we had wrongly reported as defective; corrected the screener and this page (see above).
|
|
81
79
|
|
|
82
80
|
## Quick start
|
|
83
81
|
|
|
@@ -94,6 +92,18 @@ node dist/cli.mjs mcp-config # Pi mcpServers → DSH patc
|
|
|
94
92
|
dsh plugin --profile headless add file:$PWD/pi-host
|
|
95
93
|
```
|
|
96
94
|
|
|
95
|
+
## Interactive OAuth: sign in with your subscription
|
|
96
|
+
|
|
97
|
+
DSH ships static HTTP headers only; pi2dsh adds the interactive OAuth layer from the Pi ecosystem. Any Pi provider package that registers an `oauth` block gets a working `/login <provider>` command on DSH, driven by the package's own protocol code. Pi's four official flows ship built in (vendored byte-identical): **OpenAI Codex (ChatGPT Plus/Pro)**, **Anthropic**, **GitHub Copilot**, **Kimi Code**.
|
|
98
|
+
|
|
99
|
+
```sh
|
|
100
|
+
# inside a DSH session with a pi2dsh host bundle mounted
|
|
101
|
+
/login openai-codex # prints the authorization URL, spins up the localhost callback
|
|
102
|
+
# → approve in your browser; the credential lands in auth.json (0600)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
What you get, end to end: PKCE + `localhost:1455` callback (device-code fallback for headless boxes), credentials persisted in Pi's `auth.json` format — so packages like `@narumitw/pi-accounts` manage the same file they already know — automatic refresh with Pi's double-checked-lock rotation (5-minute expiry window, refreshed token persisted before release), and `getProviderAuth`/`getApiKeyForProvider` on the extension registry returning live keys. Verified against a real ChatGPT Pro account: browser authorization → callback → token exchange → store → refreshable key (`scripts/verify-oauth-e2e.mjs` reproduces it; on networks that need a proxy, the script honors `HTTPS_PROXY`).
|
|
106
|
+
|
|
97
107
|
## Compatibility boundaries (explicit, never silent)
|
|
98
108
|
|
|
99
109
|
| Area | Mapping |
|
|
@@ -101,7 +111,7 @@ dsh plugin --profile headless add file:$PWD/pi-host
|
|
|
101
111
|
| Tools | Native DSH tools; Pi's in-place `tool_call` argument mutation works for Pi-owned tools (DSH-native tools reject it — DSH logs arguments before policy) |
|
|
102
112
|
| Sessions | Messages project from DSH's durable log; Pi custom entries/labels/names persist in a pi2dsh sidecar (DSH has no out-of-repo plugin-event channel yet) |
|
|
103
113
|
| Pi TUI | Pure logic vendored byte-identical; components construct headlessly; `ui.custom` resolves `undefined` exactly like Pi's own rpc mode |
|
|
104
|
-
| Providers/OAuth |
|
|
114
|
+
| Providers/OAuth | Interactive OAuth is live: `/login <provider>` runs the package's own flow, credentials persist in Pi's `auth.json` with automatic refresh; model transports stay native to DSH `llm` |
|
|
105
115
|
| Session tree writes | `fork`/`navigateTree`/`switchSession` fail explicitly (DSH lists pi-style entry trees as deferred) |
|
|
106
116
|
| Terminal decoration | footer/statusline/shortcuts register but never fire — matching Pi's own non-TUI modes |
|
|
107
117
|
|
|
@@ -110,7 +120,7 @@ Full machine-readable matrix: `pi2dsh matrix --json`. Capability-by-capability a
|
|
|
110
120
|
## Development and verification
|
|
111
121
|
|
|
112
122
|
```sh
|
|
113
|
-
pnpm verify # typecheck +
|
|
123
|
+
pnpm verify # typecheck + 49 contract tests + packaging
|
|
114
124
|
pnpm audit:community # static screening, top 50
|
|
115
125
|
node scripts/blackbox-community.mjs community/blackbox-results.json --exercise
|
|
116
126
|
pnpm test:community # deep runtime + official manager + host e2e
|
package/README.zh.md
CHANGED
|
@@ -45,7 +45,7 @@ DeepSeek Harness 原生服务(Cordis 组合)
|
|
|
45
45
|
保持通用性的三条硬规则:
|
|
46
46
|
|
|
47
47
|
1. 核心**没有任何 `if (packageName === …)`** 包名分支。
|
|
48
|
-
2. 每项能力有**公共 API 契约测试**(`pnpm test`,
|
|
48
|
+
2. 每项能力有**公共 API 契约测试**(`pnpm test`,49 个);"某个插件能加载"从不作为成功标准。
|
|
49
49
|
3. 前 50 只做**黑盒验收**:失败产生公共 ABI 缺口工单,修一个缺口、同类包一起解锁(例:一次 jiti 子路径 alias 修复同时解锁 4 个包)。
|
|
50
50
|
|
|
51
51
|
## 进度:Pi 官方目录下载量前 50
|
|
@@ -54,30 +54,28 @@ DeepSeek Harness 原生服务(Cordis 组合)
|
|
|
54
54
|
|
|
55
55
|
| 档位 | 数量 | 含义 |
|
|
56
56
|
|---|---|---|
|
|
57
|
-
| ✅ **已测可用** | **
|
|
58
|
-
| 🟡 **能接入、未全测** | **
|
|
59
|
-
| ❌ **尚未接入** | **
|
|
60
|
-
| **今天即可挂载** | **
|
|
57
|
+
| ✅ **已测可用** | **41 / 50** | 在真实 DSH runtime 挂载且**真实执行**验证:35 个成功返回,6 个业务逻辑端到端真跑(拒绝了合成探针参数);其中 4 个另通过深度验证:真 LSP 子进程、真搜索/抓取、PNG 真落盘、官方 `dsh plugin` 安装/激活/卸载全流程;41 个中有 2 个经 host 模式验证 |
|
|
58
|
+
| 🟡 **能接入、未全测** | **9 / 50** | 在真实 DSH runtime 加载并注册出工具/命令/skill;完整执行还需用户凭证或外部服务(3 个)、没有可安全探测的调用面——纯事件钩子包或工具名表明会改共享状态、探针从不调用(4 个)、探针 20 秒超时时仍在执行——它要派发一个子 `pi` 进程,探针环境无法提供(1 个)、测试装置限制(1 个:userQuestions 严格校验 live agent 身份——同一链路在深度验证层已通过) |
|
|
59
|
+
| ❌ **尚未接入** | **0 / 50** | 最后 4 个 Pi 内部运行时包已全部桥接:内建工具构造器 vendored、provider 工厂、真语义 `ExtensionRunner` 门面、`createAgentSession` 驱动真实 DSH 子代理 |
|
|
60
|
+
| **今天即可挂载** | **50 / 50** | 48 个经 convert/host bundle 直接挂载;2 个快照受限包经 host 模式([证据](community/host-mode-results.json)) |
|
|
61
61
|
|
|
62
62
|
另有两层验证:**host bundle** 合装两个原样 Pi 包走完官方插件管理器全流程;**真实模型**(deepseek-v4-flash)调用迁移后的 Pi 工具,durable 会话日志逐项断言、凭证零落盘([证据](community/live-deepseek-results.json))。
|
|
63
63
|
|
|
64
|
-
###
|
|
64
|
+
### 最后 4 个内部运行时包是怎么桥接的
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
`@tintinweb/pi-subagents`(加载即调 `createAgentSession`/`createCodingTools`)、`pi-landstrip`(调 `createBashToolDefinition` 等 Pi 内建工具构造器)、`pi-provider-litellm`(要 Pi 的 provider SDK 工厂;DSH 里模型路由属于原生 llm adapter 职权)、`pi-fabric`(用 `wrapRegisteredTool` 内部 API + 引用发布包里根本不存在的构建期生成文件)。
|
|
66
|
+
每个都落成了可复用的公共面桥,不是逐包补丁:`pi-landstrip` 与 `pi-fabric` 跑在 vendored 字节级的 Pi 内建工具构造器上(bash/read/edit/write/grep/find/ls 及其纯逻辑闭包);`pi-provider-litellm` 跑在 vendored 的 pi-ai `createProvider` 工厂上(模型传输始终归 DSH llm 原生);`pi-fabric` 另挂真语义 `ExtensionRunner` 门面——patch `prototype.getAllRegisteredTools` 能真实过滤工具目录,与 Pi 下行为一致;`@tintinweb/pi-subagents` 跑在 `createAgentSession` → 真实 DSH 子代理桥上(经 `ctx.agents` 走宿主 loop 工厂)——桥不自带模型循环,无 loop 的组合显式失败,绝不假装跑了子代理。
|
|
68
67
|
|
|
69
|
-
|
|
70
|
-
`pi-lens`(资源清单越界逃出包根)、`pi-hermes-memory` 与 `@mjasnikovs/pi-task`(Bun 专属 `bun:sqlite`)、`pi-harness-runtime`(import 了未声明的 playwright)、`mitsupi`(import 了未声明的 googleapis/ws)。
|
|
68
|
+
### 更正:早期版本报告的"5 个包缺陷"
|
|
71
69
|
|
|
72
|
-
|
|
73
|
-
`pi-hashline-edit-pro`、`pi-interview`(运行时读包内文件,静态闭包证不出来;host bundle 保留整包目录即可用)。
|
|
70
|
+
本页早期版本(以及我们的发布帖)曾把 5 个被挡的包归因为"包自身缺陷"。复查后确认:**五个全部是本项目静态筛查自己的判定问题,不是包的问题**——大下载量的包本就值得这份怀疑。具体:`bun:sqlite` 是 Pi 官方 Bun 编译发行版的宿主内建,`pi-hermes-memory` 与 `@mjasnikovs/pi-task` 都做了运行时检测并带正规 Node 回退(better-sqlite3 / node:sqlite);`pi-harness-runtime` 的 playwright 和 `mitsupi` 的 googleapis/ws 只出现在惰性求值的功能路径上,扩展加载期根本不会执行;`pi-lens` 的越界 skills 路径 Pi 自己的 loader 也是跳过处理,其打包器残留的 worker 路径在 Pi 下行为完全相同。筛查器现已区分加载期与惰性可达、把 `bun:*` 与 `node:*` 同等对待、并原样保留发布文件布局——修正后**五个包全部可挂载、四个达到已测可用,无需向任何上游提 issue**。产生误判的判定规则已补契约测试防止回归。
|
|
74
71
|
|
|
75
|
-
###
|
|
72
|
+
### 路线图
|
|
76
73
|
|
|
77
|
-
1. 把
|
|
78
|
-
2.
|
|
79
|
-
3.
|
|
80
|
-
4. 2
|
|
74
|
+
1. 把 9 个"能接入、未全测"提升为"已测可用"(带凭证的 fixture、按包定制探针参数、给 userQuestions 补 live agent 探针链路)。
|
|
75
|
+
2. ✅ 已完成:交互式 OAuth host seam——Pi provider 的 `oauth.login/refreshToken/getApiKey` 流跑在 DSH 原生交互上,凭证按 Pi `auth.json` 语义持久化并带双检锁刷新,四条官方流内建;已用真实 ChatGPT Pro 账号端到端验证(见上文"交互式 OAuth")。
|
|
76
|
+
3. ✅ 已完成:4 个 Pi 内部运行时包全部桥接(见上)——前 50 全部可挂载。
|
|
77
|
+
4. ✅ 已完成:2 个快照受限包经 host 模式实测通过([证据](community/host-mode-results.json))。
|
|
78
|
+
5. ✅ 已完成:复查曾被错误报告为"有缺陷"的 5 个包,修正筛查器与本页(见上)。
|
|
81
79
|
|
|
82
80
|
## 快速开始
|
|
83
81
|
|
|
@@ -94,6 +92,18 @@ node dist/cli.mjs mcp-config # Pi mcpServers → DSH patc
|
|
|
94
92
|
dsh plugin --profile headless add file:$PWD/pi-host
|
|
95
93
|
```
|
|
96
94
|
|
|
95
|
+
## 交互式 OAuth:用你的订阅账号登录
|
|
96
|
+
|
|
97
|
+
DSH 原生只有静态 HTTP headers;pi2dsh 把 Pi 生态的交互式 OAuth 层带了过来。任何注册了 `oauth` 块的 Pi provider 包,在 DSH 上都直接获得可用的 `/login <provider>` 命令,登录流程由包自己的协议代码驱动。Pi 的四条官方流内建(vendored 字节级):**OpenAI Codex(ChatGPT Plus/Pro)**、**Anthropic**、**GitHub Copilot**、**Kimi Code**。
|
|
98
|
+
|
|
99
|
+
```sh
|
|
100
|
+
# 在挂载了 pi2dsh host bundle 的 DSH 会话里
|
|
101
|
+
/login openai-codex # 打印授权 URL,同时拉起 localhost 回调服务
|
|
102
|
+
# → 浏览器里点击授权;凭证落盘 auth.json(0600)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
端到端你得到的是:PKCE + `localhost:1455` 回调(无头环境有 device-code 备选)、凭证按 Pi 的 `auth.json` 格式持久化——所以 `@narumitw/pi-accounts` 这类包管理的就是它们熟悉的同一份文件——自动刷新走 Pi 的双检锁轮换(5 分钟过期窗口,轮换后的 token 先落盘再放锁)、扩展注册表的 `getProviderAuth`/`getApiKeyForProvider` 返回真实可用的 key。已用真实 ChatGPT Pro 账号完整验证:浏览器授权 → 回调 → 换 token → 落盘 → 可刷新的 key(`scripts/verify-oauth-e2e.mjs` 可复现;需要代理的网络下脚本尊重 `HTTPS_PROXY`)。
|
|
106
|
+
|
|
97
107
|
## 兼容边界(显式声明,绝不静默)
|
|
98
108
|
|
|
99
109
|
| 领域 | 映射 |
|
|
@@ -101,7 +111,7 @@ dsh plugin --profile headless add file:$PWD/pi-host
|
|
|
101
111
|
| 工具 | 原生 DSH 工具;Pi 的 `tool_call` 原地改参对 Pi 自有工具生效(DSH 原生工具拒绝——DSH 有意先记日志后跑策略) |
|
|
102
112
|
| 会话 | 消息从 DSH durable 日志投影;Pi 自定义 entry/label/name 持久化在 pi2dsh sidecar(DSH 目前没有第三方插件事件通道) |
|
|
103
113
|
| Pi TUI | 纯逻辑 vendored 字节一致;组件类同签名 headless 构造;`ui.custom` 与 Pi 官方 rpc 模式一样返回 undefined |
|
|
104
|
-
| Provider/OAuth |
|
|
114
|
+
| Provider/OAuth | 交互式 OAuth 已可用:`/login <provider>` 跑包自己的流程,凭证按 Pi `auth.json` 持久化并自动刷新;模型传输仍由 DSH `llm` 原生持有 |
|
|
105
115
|
| 会话树写操作 | `fork`/`navigateTree`/`switchSession` 显式失败(DSH 官方将 pi 式 entry tree 列为 deferred) |
|
|
106
116
|
| 终端装饰 | footer/statusline/快捷键注册成功但永不触发——与 Pi 自己的非 TUI 模式一致 |
|
|
107
117
|
|
|
@@ -110,7 +120,7 @@ dsh plugin --profile headless add file:$PWD/pi-host
|
|
|
110
120
|
## 开发与验证
|
|
111
121
|
|
|
112
122
|
```sh
|
|
113
|
-
pnpm verify # 类型检查 +
|
|
123
|
+
pnpm verify # 类型检查 + 49 契约测试 + 打包检查
|
|
114
124
|
pnpm audit:community # 前 50 静态筛查
|
|
115
125
|
node scripts/blackbox-community.mjs community/blackbox-results.json --exercise
|
|
116
126
|
pnpm test:community # 深链路 + 官方插件管理器 + host e2e
|