dsh-ops 0.2.2 → 0.2.4
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/CHANGELOG.md +16 -0
- package/PROVENANCE.md +35 -0
- package/README.en.md +31 -9
- package/README.md +20 -6
- package/README.zh.md +20 -6
- package/cordis.patch.yml +20 -155
- package/docs/manual-validation.md +10 -5
- package/docs/schema-current.json +20 -13
- package/docs/schema-measurement.md +29 -9
- package/dsh-plugin.json +38 -10
- package/icon.png +0 -0
- package/lib/components/background/icon.png +0 -0
- package/lib/components/background/index.js +3 -0
- package/lib/components/background/locale/en.json +6 -0
- package/lib/components/background/locale/zh.json +6 -0
- package/lib/components/background/package.json +6 -0
- package/lib/components/file/icon.png +0 -0
- package/lib/components/file/index.js +3 -0
- package/lib/components/file/locale/en.json +6 -0
- package/lib/components/file/locale/zh.json +6 -0
- package/lib/components/file/package.json +6 -0
- package/lib/components/shell/icon.png +0 -0
- package/lib/components/shell/index.js +3 -0
- package/lib/components/shell/locale/en.json +6 -0
- package/lib/components/shell/locale/zh.json +6 -0
- package/lib/components/shell/package.json +6 -0
- package/lib/index.js +46 -32
- package/lib/policy.js +16 -7
- package/lib/runtime-pool.js +42 -0
- package/lib/session-pwsh.js +31 -0
- package/lib/tools.js +64 -16
- package/locale/en.json +2 -2
- package/locale/zh.json +2 -2
- package/package.json +20 -5
- package/icon.svg +0 -12
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,22 @@ All notable changes to this package are recorded here.
|
|
|
5
5
|
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and
|
|
6
6
|
this package adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.4] — Independently toggled components
|
|
9
|
+
|
|
10
|
+
- Split the market bundle into shell (on), file (on), and background (off) rows with exported per-component titles, descriptions, icons and locales.
|
|
11
|
+
- Publish five tools by default, nine with background enabled. Stop publishing duplicate foreground ops_run. Preserve the bash/PowerShell 7 routing and the object-root bash schema.
|
|
12
|
+
- Own separate prompt sections for each component; visibility and shutdown withdraw only the matching guidance/tools. Do not append to AGENTS.md.
|
|
13
|
+
- Share one ref-counted plugin-owned FastCtx connection for file/background. Drain in-flight calls and attempt to kill only remembered owned jobs when background stops; report cleanup failures.
|
|
14
|
+
- Replace the unconditional bundle pwshPath override with a runtime-only official config lifecycle overlay; shell OFF recomputes the executor's current owning raw config without persisting changes.
|
|
15
|
+
- Document release-age version selection and the limits of token savings. No host/vendor implementation, old regression suite, or Actions changes.
|
|
16
|
+
|
|
17
|
+
## [0.2.3] — Strict-argument guidance and display metadata
|
|
18
|
+
|
|
19
|
+
- Add one routing-section reminder: `ops_* arguments are strict: pass only declared fields.` Keep FastCtx's portable schema subset and runtime guards unchanged.
|
|
20
|
+
- Use `dsh-ops` as the display title in both locales and align package/install descriptions with the maintainer's Windows bash, PowerShell 7, and Rust tools wording.
|
|
21
|
+
- Replace the display icon with the maintainer-provided image, resized without cropping to a 256×256 PNG (119,677 bytes), below the official host's 256 KiB limit.
|
|
22
|
+
- Reuse all three runtime payload dependencies at 0.2.1; preserve the 0.2.2 bash object-root schema fix.
|
|
23
|
+
|
|
8
24
|
## [0.2.2] — Bash parameter schema hotfix
|
|
9
25
|
|
|
10
26
|
- Fix `ops_bash` parameters to use a JSON Schema object root with `properties`, `required: ['command']`, and `additionalProperties: false`. The previous field map was forwarded unchanged by the official host and rejected by the model API before tool execution.
|
package/PROVENANCE.md
CHANGED
|
@@ -3,6 +3,41 @@
|
|
|
3
3
|
What this repository is, where its parts came from, what was verified, and what
|
|
4
4
|
was not.
|
|
5
5
|
|
|
6
|
+
## 0.2.4 Component lifecycle
|
|
7
|
+
|
|
8
|
+
Three exported subpath plugins replace the single bundle row: shell/file on by
|
|
9
|
+
default, background off. Each owns its registrations and system-prompt section;
|
|
10
|
+
file and background lease one plugin-owned MCP connection scoped to the Cordis root.
|
|
11
|
+
No global host registry or service methods are replaced. Foreground ops_run is no
|
|
12
|
+
longer published. Background shutdown drains tracked calls, attempts to kill only
|
|
13
|
+
remembered job IDs, then releases its connection lease; disconnect can still lose
|
|
14
|
+
ownership, so cleanup is not guaranteed for unknown durable jobs.
|
|
15
|
+
|
|
16
|
+
The unconditional pwsh-sandbox patch is removed. Shell mounts an internal/config
|
|
17
|
+
waterfall hook targeted at the official pwsh-sandbox row, then uses public
|
|
18
|
+
Fiber.update(rawConfig, true) to apply/revoke the temporary path via the official
|
|
19
|
+
config lifecycle (noSave). Removing the hook recomputes from the latest owning raw
|
|
20
|
+
config, not a stale saved copy. It does not mutate a service/config reference, write
|
|
21
|
+
profile files, change OS defaults or cancel existing host shell processes. An
|
|
22
|
+
isolated real Cordis/ToolRuntime inspection verified independent tool/prompt
|
|
23
|
+
withdrawal, permission-gated commands, shared-client leases, and config restoration
|
|
24
|
+
with a stand-in executor. Real desktop marketplace toggles and the real sandbox
|
|
25
|
+
executor require user validation; no model requests/old suites were run.
|
|
26
|
+
|
|
27
|
+
Default schema bytes drop from 10,700 (0.2.3 ten tools) to 7,685 (five tools).
|
|
28
|
+
This is a byte metric, not a tokenizer or proof of lower whole-task usage.
|
|
29
|
+
|
|
30
|
+
## 0.2.3 Prompt and display update
|
|
31
|
+
|
|
32
|
+
Add one model-facing sentence in `lib/policy.js`: `ops_* arguments are strict:
|
|
33
|
+
pass only declared fields.` FastCtx strips `additionalProperties` from published
|
|
34
|
+
schemas for provider portability but retains its runtime unknown-field guards;
|
|
35
|
+
this prompt reminder does not change schemas or Rust behaviour. No files under
|
|
36
|
+
`vendor/fastctx` were modified. The display title and bilingual descriptions use
|
|
37
|
+
the maintainer's wording. The new icon is an operator-supplied image resized,
|
|
38
|
+
without cropping, to a 256×256 PNG under the official host's 256 KiB limit;
|
|
39
|
+
no independent authorship or licence verification of that image is claimed.
|
|
40
|
+
|
|
6
41
|
## 0.2.2 Bash schema hotfix
|
|
7
42
|
|
|
8
43
|
The maintainer reported a model API rejection after official marketplace installation:
|
package/README.en.md
CHANGED
|
@@ -41,10 +41,12 @@ dsh plugin --profile dsh-tui add dsh-ops
|
|
|
41
41
|
Update by repeating the npx install command, or official `add dsh-ops@latest`.
|
|
42
42
|
Reload/restart as the application requests; replacing loaded code may require restart.
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
Version `0.2.4` adds three independently toggled components and retains the bash
|
|
45
|
+
object-root schema fix and custom icon. Runtime dependencies remain at `0.2.1` and
|
|
46
|
+
install automatically. Desktop pnpm's 24-hour release-age policy may show new metadata
|
|
47
|
+
but select an older package for a bare name: specify `dsh-ops@0.2.4` from the official
|
|
48
|
+
npm registry, confirm the installed version, then fully quit/restart. See the original
|
|
49
|
+
[payload release record](docs/release-0.2.1.md).
|
|
48
50
|
|
|
49
51
|
```console
|
|
50
52
|
npx --yes dsh-ops@latest status --profile desktop
|
|
@@ -56,11 +58,32 @@ also remove profile dependency references. Runtime files are package dependencie
|
|
|
56
58
|
not a new shared provisioned directory. System shells, other profiles and package
|
|
57
59
|
manager caches are never manually deleted. Clean legacy provisioned files separately
|
|
58
60
|
with `npx --yes dsh-ops@latest uninstall --yes`; `~/.fastctx/` is kept unless
|
|
59
|
-
`--purge-fastctx` is explicit.
|
|
61
|
+
`--purge-fastctx` is explicit. Background OFF drains in-flight calls and attempts to
|
|
62
|
+
kill only jobs remembered by this component on its current connection; failures warn.
|
|
63
|
+
Lost ownership after disconnect and permission downgrade do not guarantee termination.
|
|
64
|
+
|
|
65
|
+
## Components and prompts
|
|
66
|
+
|
|
67
|
+
| Component | Default | Capability |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| dsh-ops-bash & powershell 7 | On | Prefer ops_bash for general commands; bundled PowerShell 7 for Windows-native work |
|
|
70
|
+
| dsh-ops-file | On | Rust batch reads, search, path discovery and replacement |
|
|
71
|
+
| dsh-ops-background | Off | Scientific simulations, model training and other long-running tasks |
|
|
72
|
+
|
|
73
|
+
Each row owns its tools and runtime prompt section; OFF withdraws both. Nothing is
|
|
74
|
+
appended to AGENTS.md. Shell ON adds a runtime-only configuration overlay for the
|
|
75
|
+
stock pwsh-sandbox path; OFF recomputes its latest owning raw configuration via the
|
|
76
|
+
official lifecycle, without writing profile files. It does not change the OS default
|
|
77
|
+
terminal or cancel already-running host commands. File/background share one owned
|
|
78
|
+
FastCtx connection; turning one off does not stop the other. Default tool count is
|
|
79
|
+
five; duplicate ops_run is no longer published. Reduced fixed schema cost is not a
|
|
80
|
+
promise of lower task-total tokens. Minimal's complete persona excludes extra sections;
|
|
81
|
+
PTC invokes the tools through its generated SDK with unchanged permission checks.
|
|
60
82
|
|
|
61
83
|
## Configuration and tools
|
|
62
84
|
|
|
63
|
-
Edit the dsh-ops row's
|
|
85
|
+
Edit the corresponding dsh-ops/shell, dsh-ops/file or dsh-ops/background row's config.
|
|
86
|
+
Unknown keys fail; normal component enablement is available in the marketplace.
|
|
64
87
|
|
|
65
88
|
```yaml
|
|
66
89
|
config:
|
|
@@ -75,8 +98,8 @@ config:
|
|
|
75
98
|
# bashPath: 'C:\tools\bash.exe'
|
|
76
99
|
```
|
|
77
100
|
|
|
78
|
-
`enableShellTools` controls the
|
|
79
|
-
bash. Both additionally require authoritative session `danger-full-access`; bash
|
|
101
|
+
`enableShellTools` controls the background component's four run/job tools; file never
|
|
102
|
+
publishes commands. `publishBashTool` controls bash. Both additionally require authoritative session `danger-full-access`; bash
|
|
80
103
|
also requires the host subprocess service. `promptPolicy` controls compact routing;
|
|
81
104
|
`extraGuidance` appends text. RPC wait timeout does not prove server termination.
|
|
82
105
|
`required` fails activation on unavailable runtime. Explicit binary/bash paths are
|
|
@@ -90,7 +113,6 @@ authoritative. `shellPolicy: deny-host-shell` blocks `deniedHostTools` (default
|
|
|
90
113
|
| ops_glob | Multiple path patterns and exclusions | No command gate¹ |
|
|
91
114
|
| ops_replace | Mechanical cross-file replacement; host edit for precise edits | No command gate¹ |
|
|
92
115
|
| ops_bash | Preferred general bash executor | Required |
|
|
93
|
-
| ops_run | Bounded bash result | Required |
|
|
94
116
|
| ops_run_background | Start background jobs | Required |
|
|
95
117
|
| ops_job_output / ops_job_list / ops_job_kill | Operate on this session's owned jobs | Required |
|
|
96
118
|
| Host pwsh | Bundled PowerShell 7 Windows-native operations | Host policy |
|
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ dsh plugin --profile dsh-tui add dsh-ops
|
|
|
40
40
|
|
|
41
41
|
**更新**:重新运行相同的 `npx --yes dsh-ops@latest install --profile ...`,或用官方 CLI `add dsh-ops@latest`。按应用提示重载;替换已加载代码时重启应用。
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
当前版本 `0.2.4` 支持三个独立组件;bash 参数 schema 修复和自定义图标保留。三个二进制依赖继续使用 `0.2.1`,它们会自动安装,不影响主插件版本。新发布版本可能受桌面 pnpm 的 24 小时安全冷却策略影响:如果市场分析版号与安装结果不一致,指定 `dsh-ops@0.2.4` 并选择 npm 官方源,确认实际版本后完全退出并重启。原始载荷记录见 [docs/release-0.2.1.md](docs/release-0.2.1.md)。
|
|
44
44
|
|
|
45
45
|
**卸载与查看状态**:
|
|
46
46
|
|
|
@@ -51,14 +51,29 @@ npx --yes dsh-ops@latest uninstall --profile desktop
|
|
|
51
51
|
|
|
52
52
|
把 `desktop` 换成 `web` 或 `tui` 即可。也可在市场卸载,或执行官方 `dsh plugin --profile ... remove dsh-ops`。二进制随 profile 的插件依赖管理;卸载移除依赖引用,不误删系统 shell、其它 profile 的副本或包管理器共享缓存。
|
|
53
53
|
|
|
54
|
-
旧版显式 provision 的 `<DSH_HOME>/dsh-ops/` 文件需单独清理:`npx --yes dsh-ops@latest uninstall --yes`。默认不删 `~/.fastctx/` 持久状态;需要时显式加 `--purge-fastctx
|
|
54
|
+
旧版显式 provision 的 `<DSH_HOME>/dsh-ops/` 文件需单独清理:`npx --yes dsh-ops@latest uninstall --yes`。默认不删 `~/.fastctx/` 持久状态;需要时显式加 `--purge-fastctx`。关闭后台组件会等待已发出的调用,然后尝试终止该组件当前连接记住的自有任务;失败会告警。断线丢失归属的旧任务及单纯降权不保证终止,先处理自己的任务。
|
|
55
|
+
|
|
56
|
+
## 组件开关与提示词
|
|
57
|
+
|
|
58
|
+
官方市场显示三个组件,分别启停,首次安装默认开启前两个:
|
|
59
|
+
|
|
60
|
+
| 组件 | 介绍 | 默认 | 发布的工具 |
|
|
61
|
+
| --- | --- | --- | --- |
|
|
62
|
+
| `dsh-ops-bash & powershell 7` | 将默认终端改为bash,以及bash覆盖不到时提供powershell7 | 开 | `ops_bash`;宿主 `pwsh` 使用随包 PowerShell 7 |
|
|
63
|
+
| `dsh-ops-file` | 更快、更高性能、输出更精简更省token的rust文件检索 | 开 | 四个文件工具 |
|
|
64
|
+
| `dsh-ops-background` | 为科研仿真、模型训练及其他长进程后台任务提供托管 | 关 | 启动、输出、列出、终止后台任务 |
|
|
65
|
+
|
|
66
|
+
“默认终端改为 bash”指模型提示优先使用 `ops_bash`,**不修改系统默认终端、PATH 或宿主原有 shell 工具名称**。Shell 组件开时,通过官方配置生命周期临时指定 `pwsh-sandbox` 的 PowerShell 7 路径;关时按执行器最新原配置恢复,不写 profile 配置。执行器配置切换不代表取消已在运行的宿主命令。
|
|
67
|
+
|
|
68
|
+
提示词注册为独立运行时段,**不写 AGENTS.md**:Shell 关就撤销 bash/pwsh 路由;文件关就撤销检索说明;后台关就不发布后台工具及自有 job 指导。文件与后台共享一个插件拥有的 FastCtx 连接,关闭其中一个不关闭另一个。默认仅新增五个工具,不发布重复前台 `ops_run`。这些改变减少固定声明成本,**不保证任意任务总 token 降低**。极简预设会覆盖附加 system sections;PTC 模式经 SDK 调用底层工具,权限门不变。
|
|
55
69
|
|
|
56
70
|
## 配置方式与工具列表
|
|
57
71
|
|
|
58
|
-
在 DSH
|
|
72
|
+
在 DSH 的配置编辑器中找到对应的 `dsh-ops/shell`、`dsh-ops/file` 或 `dsh-ops/background` 行,调整 `config` 后保存;未知配置键会点名报错。也可直接在市场切换组件。主要配置:
|
|
59
73
|
|
|
60
74
|
```yaml
|
|
61
75
|
config:
|
|
76
|
+
# background component only; its market row is disabled by default
|
|
62
77
|
enableShellTools: true
|
|
63
78
|
publishBashTool: true
|
|
64
79
|
promptPolicy: true
|
|
@@ -70,9 +85,9 @@ config:
|
|
|
70
85
|
# bashPath: 'C:\tools\bash.exe'
|
|
71
86
|
```
|
|
72
87
|
|
|
73
|
-
- `enableShellTools
|
|
88
|
+
- `enableShellTools`:后台组件的部署开关,开启仍须会话 `danger-full-access` 才发布四个后台工具;文件组件不发布命令工具。
|
|
74
89
|
- `publishBashTool`:是否发布 `ops_bash`,同样要求完全权限和宿主 subprocess 服务。
|
|
75
|
-
- `promptPolicy
|
|
90
|
+
- `promptPolicy`:是否注入该组件的运行时说明;可用 `extraGuidance` 追加指导。
|
|
76
91
|
- `toolCallTimeoutMs`:FastCtx RPC 等待超时,不代表服务端工作已终止。
|
|
77
92
|
- `required`:运行时不可用时是否拒绝激活。
|
|
78
93
|
- `shellPolicy`:默认 `advise`;`deny-host-shell` 拒绝 `deniedHostTools` 列表中的宿主 shell(默认 `[pwsh, bash, pwsh_persistent]`)。这也会禁用第三层 pwsh,谨慎开启。
|
|
@@ -85,7 +100,6 @@ config:
|
|
|
85
100
|
| `ops_glob` | 多模式找路径,支持排除 | 无命令权限门¹ |
|
|
86
101
|
| `ops_replace` | 跨文件批量替换;精确编辑仍用宿主 edit | 无命令权限门¹ |
|
|
87
102
|
| `ops_bash` | 优先的通用 bash 命令执行器 | 是 |
|
|
88
|
-
| `ops_run` | 有界 bash 命令结果 | 是 |
|
|
89
103
|
| `ops_run_background` | 启动后台任务 | 是 |
|
|
90
104
|
| `ops_job_output` / `ops_job_list` / `ops_job_kill` | 查看、列出、停止当前会话启动的任务 | 是 |
|
|
91
105
|
| 宿主 `pwsh` | 使用随包 PowerShell 7 的 Windows 原生操作 | 沿用宿主策略 |
|
package/README.zh.md
CHANGED
|
@@ -40,7 +40,7 @@ dsh plugin --profile dsh-tui add dsh-ops
|
|
|
40
40
|
|
|
41
41
|
**更新**:重新运行相同的 `npx --yes dsh-ops@latest install --profile ...`,或用官方 CLI `add dsh-ops@latest`。按应用提示重载;替换已加载代码时重启应用。
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
当前版本 `0.2.4` 支持三个独立组件;bash 参数 schema 修复和自定义图标保留。三个二进制依赖继续使用 `0.2.1`,它们会自动安装,不影响主插件版本。新发布版本可能受桌面 pnpm 的 24 小时安全冷却策略影响:如果市场分析版号与安装结果不一致,指定 `dsh-ops@0.2.4` 并选择 npm 官方源,确认实际版本后完全退出并重启。原始载荷记录见 [docs/release-0.2.1.md](docs/release-0.2.1.md)。
|
|
44
44
|
|
|
45
45
|
**卸载与查看状态**:
|
|
46
46
|
|
|
@@ -51,14 +51,29 @@ npx --yes dsh-ops@latest uninstall --profile desktop
|
|
|
51
51
|
|
|
52
52
|
把 `desktop` 换成 `web` 或 `tui` 即可。也可在市场卸载,或执行官方 `dsh plugin --profile ... remove dsh-ops`。二进制随 profile 的插件依赖管理;卸载移除依赖引用,不误删系统 shell、其它 profile 的副本或包管理器共享缓存。
|
|
53
53
|
|
|
54
|
-
旧版显式 provision 的 `<DSH_HOME>/dsh-ops/` 文件需单独清理:`npx --yes dsh-ops@latest uninstall --yes`。默认不删 `~/.fastctx/` 持久状态;需要时显式加 `--purge-fastctx
|
|
54
|
+
旧版显式 provision 的 `<DSH_HOME>/dsh-ops/` 文件需单独清理:`npx --yes dsh-ops@latest uninstall --yes`。默认不删 `~/.fastctx/` 持久状态;需要时显式加 `--purge-fastctx`。关闭后台组件会等待已发出的调用,然后尝试终止该组件当前连接记住的自有任务;失败会告警。断线丢失归属的旧任务及单纯降权不保证终止,先处理自己的任务。
|
|
55
|
+
|
|
56
|
+
## 组件开关与提示词
|
|
57
|
+
|
|
58
|
+
官方市场显示三个组件,分别启停,首次安装默认开启前两个:
|
|
59
|
+
|
|
60
|
+
| 组件 | 介绍 | 默认 | 发布的工具 |
|
|
61
|
+
| --- | --- | --- | --- |
|
|
62
|
+
| `dsh-ops-bash & powershell 7` | 将默认终端改为bash,以及bash覆盖不到时提供powershell7 | 开 | `ops_bash`;宿主 `pwsh` 使用随包 PowerShell 7 |
|
|
63
|
+
| `dsh-ops-file` | 更快、更高性能、输出更精简更省token的rust文件检索 | 开 | 四个文件工具 |
|
|
64
|
+
| `dsh-ops-background` | 为科研仿真、模型训练及其他长进程后台任务提供托管 | 关 | 启动、输出、列出、终止后台任务 |
|
|
65
|
+
|
|
66
|
+
“默认终端改为 bash”指模型提示优先使用 `ops_bash`,**不修改系统默认终端、PATH 或宿主原有 shell 工具名称**。Shell 组件开时,通过官方配置生命周期临时指定 `pwsh-sandbox` 的 PowerShell 7 路径;关时按执行器最新原配置恢复,不写 profile 配置。执行器配置切换不代表取消已在运行的宿主命令。
|
|
67
|
+
|
|
68
|
+
提示词注册为独立运行时段,**不写 AGENTS.md**:Shell 关就撤销 bash/pwsh 路由;文件关就撤销检索说明;后台关就不发布后台工具及自有 job 指导。文件与后台共享一个插件拥有的 FastCtx 连接,关闭其中一个不关闭另一个。默认仅新增五个工具,不发布重复前台 `ops_run`。这些改变减少固定声明成本,**不保证任意任务总 token 降低**。极简预设会覆盖附加 system sections;PTC 模式经 SDK 调用底层工具,权限门不变。
|
|
55
69
|
|
|
56
70
|
## 配置方式与工具列表
|
|
57
71
|
|
|
58
|
-
在 DSH
|
|
72
|
+
在 DSH 的配置编辑器中找到对应的 `dsh-ops/shell`、`dsh-ops/file` 或 `dsh-ops/background` 行,调整 `config` 后保存;未知配置键会点名报错。也可直接在市场切换组件。主要配置:
|
|
59
73
|
|
|
60
74
|
```yaml
|
|
61
75
|
config:
|
|
76
|
+
# background component only; its market row is disabled by default
|
|
62
77
|
enableShellTools: true
|
|
63
78
|
publishBashTool: true
|
|
64
79
|
promptPolicy: true
|
|
@@ -70,9 +85,9 @@ config:
|
|
|
70
85
|
# bashPath: 'C:\tools\bash.exe'
|
|
71
86
|
```
|
|
72
87
|
|
|
73
|
-
- `enableShellTools
|
|
88
|
+
- `enableShellTools`:后台组件的部署开关,开启仍须会话 `danger-full-access` 才发布四个后台工具;文件组件不发布命令工具。
|
|
74
89
|
- `publishBashTool`:是否发布 `ops_bash`,同样要求完全权限和宿主 subprocess 服务。
|
|
75
|
-
- `promptPolicy
|
|
90
|
+
- `promptPolicy`:是否注入该组件的运行时说明;可用 `extraGuidance` 追加指导。
|
|
76
91
|
- `toolCallTimeoutMs`:FastCtx RPC 等待超时,不代表服务端工作已终止。
|
|
77
92
|
- `required`:运行时不可用时是否拒绝激活。
|
|
78
93
|
- `shellPolicy`:默认 `advise`;`deny-host-shell` 拒绝 `deniedHostTools` 列表中的宿主 shell(默认 `[pwsh, bash, pwsh_persistent]`)。这也会禁用第三层 pwsh,谨慎开启。
|
|
@@ -85,7 +100,6 @@ config:
|
|
|
85
100
|
| `ops_glob` | 多模式找路径,支持排除 | 无命令权限门¹ |
|
|
86
101
|
| `ops_replace` | 跨文件批量替换;精确编辑仍用宿主 edit | 无命令权限门¹ |
|
|
87
102
|
| `ops_bash` | 优先的通用 bash 命令执行器 | 是 |
|
|
88
|
-
| `ops_run` | 有界 bash 命令结果 | 是 |
|
|
89
103
|
| `ops_run_background` | 启动后台任务 | 是 |
|
|
90
104
|
| `ops_job_output` / `ops_job_list` / `ops_job_kill` | 查看、列出、停止当前会话启动的任务 | 是 |
|
|
91
105
|
| 宿主 `pwsh` | 使用随包 PowerShell 7 的 Windows 原生操作 | 沿用宿主策略 |
|
package/cordis.patch.yml
CHANGED
|
@@ -1,160 +1,25 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
3
|
-
# ============================================================================
|
|
4
|
-
# This is the plugin's "mount declaration". DSH applies every bundle patch in
|
|
5
|
-
# the profile's `dsh.profile.bundles` order at startup; this file inserts the
|
|
6
|
-
# dsh-ops row into that tree.
|
|
7
|
-
#
|
|
8
|
-
# Install:
|
|
9
|
-
# dsh plugin --profile desktop add <path to this package>
|
|
10
|
-
# dsh plugin --profile web add <path to this package>
|
|
11
|
-
#
|
|
12
|
-
# The row's config is validated by lib/config.js; every key below is optional
|
|
13
|
-
# and the values shown are the defaults. An unknown key fails the plugin at load
|
|
14
|
-
# rather than being ignored.
|
|
15
|
-
# ----------------------------------------------------------------------------
|
|
16
|
-
|
|
1
|
+
# Three independent market components; no unconditional host executor override.
|
|
2
|
+
# Shell and file are enabled by default. Background is explicitly opt-in.
|
|
17
3
|
- insert:
|
|
18
|
-
- id: dsh-ops
|
|
19
|
-
name: dsh-ops
|
|
4
|
+
- id: dsh-ops-shell
|
|
5
|
+
name: dsh-ops/shell
|
|
20
6
|
config:
|
|
21
|
-
# Absolute path to the FastCtx executable. When set, the plugin hosts
|
|
22
|
-
# exactly this file and fails loud if it is unusable.
|
|
23
|
-
# binaryPath: 'C:\path\to\fastctx.exe'
|
|
24
|
-
|
|
25
|
-
# The FastCtx server's own name, used to attribute the server
|
|
26
|
-
# instructions this plugin publishes as a prompt section. The model
|
|
27
|
-
# never sees it: this plugin speaks MCP to the server it spawns itself
|
|
28
|
-
# and registers every tool under its own ops_<tool> name.
|
|
29
|
-
serverName: fastctx
|
|
30
|
-
|
|
31
|
-
# Deployment opt-in only. Command/job tools are published per session
|
|
32
|
-
# only when sandboxPolicy.resolve() reports danger-full-access.
|
|
33
|
-
enableShellTools: true
|
|
34
|
-
|
|
35
|
-
# Per-call deadline for one FastCtx tool call, in milliseconds.
|
|
36
|
-
toolCallTimeoutMs: 300000
|
|
37
|
-
|
|
38
|
-
# Fail plugin activation when the FastCtx server cannot start. Keep
|
|
39
|
-
# false so a missing runtime degrades to "prompt policy only" instead of
|
|
40
|
-
# taking the plugin down.
|
|
41
|
-
required: false
|
|
42
|
-
|
|
43
|
-
# 'advise' — inject the prompt policy only.
|
|
44
|
-
# 'deny-host-shell' — additionally refuse the host shell tools below at
|
|
45
|
-
# the tools/pre-execute gate.
|
|
46
|
-
shellPolicy: advise
|
|
47
|
-
|
|
48
|
-
# Host tool names refused under 'deny-host-shell'.
|
|
49
|
-
deniedHostTools:
|
|
50
|
-
- pwsh
|
|
51
|
-
- bash
|
|
52
|
-
- pwsh_persistent
|
|
53
|
-
|
|
54
|
-
# Inject the repository-tooling prompt section.
|
|
55
7
|
promptPolicy: true
|
|
56
|
-
|
|
57
|
-
# ---- L2: the plugin's own bash -------------------------------------
|
|
58
|
-
# Absolute path to the bash this plugin runs `ops_bash` through. When
|
|
59
|
-
# set, the plugin runs exactly this file and refuses the rung when it is
|
|
60
|
-
# unusable; leave it unset to search the plugin's own bundled copy
|
|
61
|
-
# first, then PATH, then the well-known Git for Windows locations.
|
|
62
|
-
# bashPath: 'C:\Program Files\Git\bin\bash.exe'
|
|
63
|
-
|
|
64
|
-
# Layer 2: preferred executor for general commands, pipelines and scripts.
|
|
65
|
-
# Requires a resolved bash, host subprocess and session full access.
|
|
66
8
|
publishBashTool: true
|
|
67
|
-
|
|
68
|
-
# Fall back to a system-installed bash when the plugin carries no copy
|
|
69
|
-
# of its own. Set false to confine the bash rung to plugin-provided
|
|
70
|
-
# shells. (L3 needs no such switch: whether the host's pwsh row runs
|
|
71
|
-
# the plugin's own pwsh is decided by the executable's presence — see
|
|
72
|
-
# the L3 override below.)
|
|
9
|
+
shellPolicy: advise
|
|
73
10
|
allowSystemShellFallback: true
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
# packages/shell/pwsh-local/src/resolve.ts:67-79). The expression keeps exactly
|
|
90
|
-
# four guards:
|
|
91
|
-
#
|
|
92
|
-
# 1. the platform gate, matching the row's own `disabled` gate: this override
|
|
93
|
-
# is meaningless off Windows, where `pwsh-sandbox` is not mounted;
|
|
94
|
-
# 2. an existence check over the SAME THREE PLACES, IN THE SAME ORDER, as the
|
|
95
|
-
# plugin's own probe in `lib/shells.js` (`PWSH_LAYOUT_ORDER`): first the
|
|
96
|
-
# provisioned store, `<DSH_HOME>/dsh-ops/shells/pwsh/<version>/bin/pwsh.exe`
|
|
97
|
-
# (what `dsh-ops provision-shells` installs, and the copy the plugin
|
|
98
|
-
# prefers), then `@dsh-ops/pwsh-<platform>-<arch>` with the shell at
|
|
99
|
-
# `bin/pwsh.exe` (a deployment that installed the platform package), then
|
|
100
|
-
# the vendored `vendor/pwsh/<platform>-<arch>/pwsh.exe` (a checkout that
|
|
101
|
-
# carries its own copy). Keeping the order identical is what makes the
|
|
102
|
-
# ladder's L3 and the host row the same fact rather than two guesses;
|
|
103
|
-
# 3. a `lstat`-based usability test, so a Windows Store execution alias (a
|
|
104
|
-
# symlink whose target is not statable) counts, while a directory named
|
|
105
|
-
# `pwsh.exe` does not — the same rule `resolveShells` applies;
|
|
106
|
-
# 4. a wrapping `try`/`catch` around the whole body, plus a `try` each for the
|
|
107
|
-
# store scan, the plugin-package resolution, and the platform-package
|
|
108
|
-
# resolution: an absent store, an unresolvable package, and a malformed
|
|
109
|
-
# manifest alike may not fail the boot. The store scan sits outside the
|
|
110
|
-
# plugin resolution on purpose — a provisioned copy is an absolute path
|
|
111
|
-
# under `DSH_HOME`, so a profile whose `baseUrl` cannot resolve `dsh-ops`
|
|
112
|
-
# still gets it rather than losing the rung.
|
|
113
|
-
#
|
|
114
|
-
# The store scan picks the greatest version name that holds the executable —
|
|
115
|
-
# the identical comparison `provisionedShell` makes in `lib/shells.js`, which is
|
|
116
|
-
# why it is one expression rather than a version list repeated here. The store's
|
|
117
|
-
# root mirrors `dshHome` there too: `DSH_HOME` when the deployment names one,
|
|
118
|
-
# `~/.dsh` otherwise.
|
|
119
|
-
#
|
|
120
|
-
# Until one of those three places actually carries the executable, the
|
|
121
|
-
# expression yields `undefined` and the host row is left completely untouched.
|
|
122
|
-
#
|
|
123
|
-
# "Installed means used" is the point of the rung: a deployment that carries
|
|
124
|
-
# the plugin's pwsh 7 wants the host's pwsh tool to run it, not the machine's.
|
|
125
|
-
# A deployment that does NOT want this rewrite removes or edits this patch
|
|
126
|
-
# entry in its OWN profile `cordis.patch.yml` — that layer applies after every
|
|
127
|
-
# bundle layer (docs/user/develop/basic/publish.md:118-130), so it has the last
|
|
128
|
-
# word. There is deliberately no plugin config key for it: a bundle patch is
|
|
129
|
-
# evaluated before any dsh-ops row is mounted (the Loader defers a row's `!!js`
|
|
130
|
-
# interpolation until that row's own injections are active), so a config key
|
|
131
|
-
# could not reach this expression, and a key that pretends to is a ladder that
|
|
132
|
-
# lies about the row it never changed.
|
|
133
|
-
#
|
|
134
|
-
# `!!js` SCOPE, VERIFIED IN THE VENDORED LOADER. The Loader evaluates these
|
|
135
|
-
# expressions as `with (ctx) { return eval(expr) }`
|
|
136
|
-
# (vendor/loader/src/config/utils.ts:5-9), so bare `baseUrl` (the owning config
|
|
137
|
-
# tree's base URL) and `ctx` are both in scope — the same convention the shipped
|
|
138
|
-
# bundle uses at packages/bundle/web-app/presets/cordis.patch.yml:147.
|
|
139
|
-
# `dsh-ops` is a dependency of the profile, so
|
|
140
|
-
# `createRequire(baseUrl).resolve('dsh-ops/package.json')` finds the package
|
|
141
|
-
# whether it was installed as a link or from the registry.
|
|
142
|
-
#
|
|
143
|
-
# WHOLE-OBJECT REPLACEMENT — AUDITED, NOT ASSUMED. A patch replaces the target
|
|
144
|
-
# row's ENTIRE `config` object rather than deep-merging it
|
|
145
|
-
# (docs/user/develop/basic/publish.md:129), so every non-default field of the
|
|
146
|
-
# target must be restated here. The base row this targets is
|
|
147
|
-
# packages/bundle/base/cordis.patch.yml:241-243:
|
|
148
|
-
#
|
|
149
|
-
# - id: pwsh-sandbox
|
|
150
|
-
# name: '@deepseek-ai/dsh-pwsh-sandbox'
|
|
151
|
-
# disabled: !!js process.platform !== 'win32'
|
|
152
|
-
#
|
|
153
|
-
# It declares NO `config` at all, and this patch writes only `config` (the
|
|
154
|
-
# row's `name` and its platform `disabled` gate are untouched), so there is no
|
|
155
|
-
# non-default field to restate and nothing is silently dropped. If the base row
|
|
156
|
-
# ever gains one, it must be restated here.
|
|
157
|
-
# ----------------------------------------------------------------------------
|
|
158
|
-
- id: pwsh-sandbox
|
|
159
|
-
config:
|
|
160
|
-
pwshPath: !!js "(() => { if (process.platform !== 'win32') return undefined; try { const builtin = (name) => process.getBuiltinModule(name); const fs = builtin('node:fs'); const nodePath = builtin('node:path'); const win = process.platform + '-' + process.arch; const usable = (file) => { try { const stat = fs.lstatSync(file); return stat.isFile() || stat.isSymbolicLink(); } catch { return false; } }; const named = process.env.DSH_HOME; const home = typeof named === 'string' && named.trim() !== '' ? nodePath.resolve(named) : nodePath.join(builtin('node:os').homedir(), '.dsh'); const layouts = []; try { const store = nodePath.join(home, 'dsh-ops', 'shells', 'pwsh'); const versions = fs.readdirSync(store, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort().reverse(); for (const version of versions) layouts.push(nodePath.join(store, version, 'bin', 'pwsh.exe')); } catch {} try { const requires = builtin('node:module').createRequire(String(baseUrl).replace(/[^/]*$/, 'noop.json')); const dir = nodePath.dirname(requires.resolve('dsh-ops/package.json')); try { const pluginRequire = builtin('node:module').createRequire(nodePath.join(dir, 'package.json')); const pkg = nodePath.dirname(pluginRequire.resolve('@dsh-ops/pwsh-' + win + '/package.json')); layouts.push(nodePath.join(pkg, 'bin', 'pwsh.exe')); } catch {} layouts.push(nodePath.join(dir, 'vendor', 'pwsh', win, 'pwsh.exe')); } catch {} for (const candidate of layouts) { if (usable(candidate)) return candidate; } return undefined; } catch { return undefined; } })()"
|
|
11
|
+
- id: dsh-ops-file
|
|
12
|
+
name: dsh-ops/file
|
|
13
|
+
config:
|
|
14
|
+
promptPolicy: true
|
|
15
|
+
enableShellTools: false
|
|
16
|
+
required: false
|
|
17
|
+
toolCallTimeoutMs: 300000
|
|
18
|
+
- id: dsh-ops-background
|
|
19
|
+
name: dsh-ops/background
|
|
20
|
+
disabled: true
|
|
21
|
+
config:
|
|
22
|
+
promptPolicy: true
|
|
23
|
+
enableShellTools: true
|
|
24
|
+
required: false
|
|
25
|
+
toolCallTimeoutMs: 300000
|
|
@@ -4,13 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
## 工具发布与提示词
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
- `
|
|
9
|
-
- `enableShellTools
|
|
7
|
+
- 组件列表恰为三个:shell/file 默认开启,background 默认关闭。分别核验组件名称、中文介绍、图标,以及实际版本。
|
|
8
|
+
- `workspace-write`、`read-only`:只有开启的四个 ops 文件工具;没有 ops_bash/后台工具,提示词不广告不存在的命令。
|
|
9
|
+
- `danger-full-access`:默认四个文件工具 + ops_bash;仅后台组件开且 enableShellTools=true 时增加四个后台工具。任何组合都不发布 ops_run。
|
|
10
|
+
- 文件与后台共享一个 FastCtx;关文件仍能管理后台,关后台仍能读搜改,重开不积累注册。
|
|
11
|
+
- `enableShellTools: false`、无 sandboxPolicy 服务、无会话:后台组不出现。
|
|
10
12
|
- 同时开受限会话与完全权限会话:两者目录互不污染。受限子 agent 不继承祖先的命令组。
|
|
11
13
|
- 同一会话切换受限 → 完全权限 → 受限:每次下一请求目录/提示词跟随变化,不重连 FastCtx;旧命令句柄不能继续调用。
|
|
12
14
|
- 受限会话不发布 `ops_bash`;完全权限 + publishBashTool=true + bash 可解析 + subprocess 可用时出现,通用命令优先走它。FastCtx 缺失或 enableShellTools=false 时 bash 层仍独立可用。
|
|
13
|
-
-
|
|
15
|
+
- 提示词按组件分段 `dsh-ops:repository-tooling:{file,shell,background}`:开关只移除对应段;bash/pwsh 路由仅 shell 开时出现,后台关闭不出现后台指导。不写 AGENTS.md,没有旧 host-shell 段或 mcp:fastctx。
|
|
16
|
+
- shell 开时宿主 pwsh-sandbox 采用随包 pwsh7,关时恢复最新宿主原配置;profile 文件不得被改动。开关期间用户更改执行器原配置后也应恢复新值。
|
|
17
|
+
- 极简预设 complete persona 可排除附加提示;PTC 通过 SDK 使用同一工具层,权限/组件开关仍应生效。
|
|
14
18
|
- publishBashTool=false 隐去 bash 这一层;bash 权限动态切换、受限子 agent 继承过滤和卸载清理一起验证。
|
|
15
19
|
- `promptPolicy: false`:不发布路由提示词。
|
|
16
20
|
- `deny-host-shell`:有无 ops 命令组都应拒绝配置的宿主 shell;若工具来自继承层,目录也应遮蔽。无可用执行器时不推荐不可调用的 ops 命令。
|
|
@@ -35,6 +39,7 @@
|
|
|
35
39
|
- 完成/kill 后仍能读取自己已有 ID 的日志。
|
|
36
40
|
- job_list status/limit/offset 是自己的分页,不暴露全局总数/offset;空列表明确为空。
|
|
37
41
|
- 大全局 job 存储扫描不完整时必须报告 Partial,不冒充完整;原工具结果的 Complete/Partial 续页提示不能丢。
|
|
42
|
+
- 关闭后台组件/卸载:等待已发调用,再尝试终止当前组件已知的自有 ID;不能杀别的会话或组件任务。清理失败有告警。断线后已丢归属的任务不保证终止。
|
|
38
43
|
- 重连后不认领旧 ID;操作者可通过上游工具清理持久 job。权限降级不自动杀已运行任务,须操作者管理。
|
|
39
44
|
|
|
40
45
|
## 生命周期与边界
|
|
@@ -42,7 +47,7 @@
|
|
|
42
47
|
- 服务端断线立即撤下工具与对应提示词项,恢复后重新出现。
|
|
43
48
|
- 卸载后工具/提示词/限制全部消失;共享注册表方法未改写,外来同名工具仍可按自己的 scope 注册。
|
|
44
49
|
- 未知配置键报错点名;required=true 的缺失/不可用二进制拒绝激活。
|
|
45
|
-
- 取消/传输超时只表明停止等待,不把它误读为命令已停止。
|
|
50
|
+
- 取消/传输超时只表明停止等待,不把它误读为命令已停止。ops_bash 的宿主执行器截止时间独立于 MCP 等待超时。
|
|
46
51
|
|
|
47
52
|
## 数字复核
|
|
48
53
|
|
package/docs/schema-current.json
CHANGED
|
@@ -38,11 +38,6 @@
|
|
|
38
38
|
"bytes": 1511,
|
|
39
39
|
"approximateTokens": 378
|
|
40
40
|
},
|
|
41
|
-
{
|
|
42
|
-
"name": "ops_run",
|
|
43
|
-
"bytes": 751,
|
|
44
|
-
"approximateTokens": 188
|
|
45
|
-
},
|
|
46
41
|
{
|
|
47
42
|
"name": "ops_run_background",
|
|
48
43
|
"bytes": 635,
|
|
@@ -50,28 +45,40 @@
|
|
|
50
45
|
}
|
|
51
46
|
],
|
|
52
47
|
"total": {
|
|
53
|
-
"bytes":
|
|
54
|
-
"approximateTokens":
|
|
48
|
+
"bytes": 8988,
|
|
49
|
+
"approximateTokens": 2247
|
|
55
50
|
},
|
|
56
51
|
"fileOnly": {
|
|
57
52
|
"bytes": 6724,
|
|
58
53
|
"approximateTokens": 1681
|
|
59
54
|
},
|
|
60
55
|
"fileOnlyPrompt": {
|
|
61
|
-
"bytes":
|
|
62
|
-
"approximateTokens":
|
|
56
|
+
"bytes": 498,
|
|
57
|
+
"approximateTokens": 125
|
|
63
58
|
},
|
|
64
59
|
"bashSchema": {
|
|
65
60
|
"bytes": 961,
|
|
66
61
|
"approximateTokens": 241
|
|
67
62
|
},
|
|
63
|
+
"defaultWithBash": {
|
|
64
|
+
"bytes": 7685,
|
|
65
|
+
"approximateTokens": 1922
|
|
66
|
+
},
|
|
68
67
|
"fullWithBash": {
|
|
69
|
-
"bytes":
|
|
70
|
-
"approximateTokens":
|
|
68
|
+
"bytes": 9949,
|
|
69
|
+
"approximateTokens": 2488
|
|
70
|
+
},
|
|
71
|
+
"shellPrompt": {
|
|
72
|
+
"bytes": 492,
|
|
73
|
+
"approximateTokens": 123
|
|
74
|
+
},
|
|
75
|
+
"backgroundPrompt": {
|
|
76
|
+
"bytes": 269,
|
|
77
|
+
"approximateTokens": 68
|
|
71
78
|
},
|
|
72
79
|
"toolingPrompt": {
|
|
73
|
-
"bytes":
|
|
74
|
-
"approximateTokens":
|
|
80
|
+
"bytes": 878,
|
|
81
|
+
"approximateTokens": 220
|
|
75
82
|
},
|
|
76
83
|
"publishedServerInstructions": {
|
|
77
84
|
"bytes": 0,
|
|
@@ -1,17 +1,37 @@
|
|
|
1
1
|
# Schema measurement
|
|
2
2
|
|
|
3
|
-
Manual measurement only; not
|
|
3
|
+
Manual measurement only; not a tokenizer, CI, or proof of whole-task savings.
|
|
4
|
+
Metric: compact UTF-8 JSON `{name,description,parameters}` bytes, tokens ≈ ceil(bytes/4).
|
|
5
|
+
Runtime is FastCtx 0.2.6; only plugin publication/presentation changes.
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
## 0.2.4 component surface
|
|
6
8
|
|
|
7
|
-
|
|
|
9
|
+
| Enabled components | Tools | Schema bytes | Approximate tokens |
|
|
8
10
|
| --- | ---: | ---: | ---: |
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
11
|
+
| File only | 4 | 6,724 | 1,681 |
|
|
12
|
+
| Shell + file (default, full access) | 5 | 7,685 | 1,922 |
|
|
13
|
+
| Shell + file + background (full access) | 9 | 9,949 | 2,488 |
|
|
14
|
+
| 0.2.3 full surface (historical) | 10 | 10,700 | 2,675 |
|
|
12
15
|
|
|
13
|
-
|
|
16
|
+
Default reduces plugin schema bytes by 28.2% versus 0.2.3. Background contributes
|
|
17
|
+
2,264 bytes only when enabled; duplicate ops_run (751 bytes) is no longer published.
|
|
18
|
+
The host tool declarations remain additive and are not included in this table.
|
|
19
|
+
Restricted sessions have no ops_bash or background command tools.
|
|
14
20
|
|
|
15
|
-
|
|
21
|
+
Prompt sections are component-owned and independently removed: file 498 bytes,
|
|
22
|
+
shell 492 bytes, background 269 bytes. These sum when multiple components are on;
|
|
23
|
+
`toolingPrompt` in the snapshot is the legacy combined CLI renderer, not the actual
|
|
24
|
+
sum of separately registered sections. Minimal's complete persona can exclude them.
|
|
25
|
+
No raw server instructions or old host-shell policy segment is published.
|
|
16
26
|
|
|
17
|
-
|
|
27
|
+
## Historical comparison
|
|
28
|
+
|
|
29
|
+
The unchanged baseline is dee3c57 before description compression: nine FastCtx
|
|
30
|
+
schemas 18,889 bytes; four file schemas 12,807. File descriptions remain 6,724 bytes
|
|
31
|
+
(47.5% reduction). ops_grep: 3,766 → 2,019; inspect: 4,375 → 1,968. These are plugin
|
|
32
|
+
old/new comparisons, NOT official-host versus plugin comparisons.
|
|
33
|
+
|
|
34
|
+
Reproduce with `node scripts/measure-schemas.mjs docs/schema-current.json`.
|
|
35
|
+
It initializes and lists schemas without tool execution. Preserve baseline JSON.
|
|
36
|
+
Actual request count, cache pricing, tool output and repeated history can outweigh
|
|
37
|
+
fixed schema savings; no percentage here predicts task-total provider tokens.
|