dsh-codex-connect 0.1.0-alpha.4.46 → 0.1.0-alpha.4.48

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/INSTALL.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Installation Runbook for CLI Agents
2
2
 
3
- Published Alpha 4.43 is verified with the exact DSH `0.1.7-rc.1` model-runtime pairing and pi-ai `0.85.1`. Earlier DSH pairings retain their separately published plugin versions below.
3
+ Published Alpha 4.47 is verified with the exact DSH `0.1.7-rc.1` model-runtime pairing and pi-ai `0.85.1`. Earlier DSH pairings retain their separately published plugin versions below.
4
4
 
5
5
  Install `dsh-codex-connect` into one requested DeepSeek Harness profile without changing its current default model, search route, global configuration, or OAuth state.
6
6
 
7
- Channel snapshot on 2026-09-24: npm `alpha` and `latest` both point to `0.1.0-alpha.4.45`. Use the exact-version command for the installed DSH version. Publishing an Alpha and promoting the default installation channel are separate actions.
7
+ Channel snapshot on 2026-09-24: npm `alpha` and `latest` both point to `0.1.0-alpha.4.47`. Use the exact-version command for the installed DSH version; moving npm tags are not compatibility guarantees.
8
8
 
9
9
  ## Safety requirements
10
10
 
@@ -30,13 +30,19 @@ Check `dsh --version` before changing the requested profile. Use `dsh --help` to
30
30
  | `0.1.5-alpha.1` | `0.1.0-alpha.4.41` |
31
31
  | `0.1.5-rc.1` | `0.1.0-alpha.4.41` |
32
32
  | `0.1.5-rc.2` | `0.1.0-alpha.4.41` |
33
- | `0.1.7-rc.1` | `0.1.0-alpha.4.45` |
33
+ | `0.1.7-rc.1` | `0.1.0-alpha.4.47` |
34
34
 
35
35
  If your exact DSH version is unknown or not listed, preserve the installed host, report that the combination is unverified, and verify it before making installation changes. A missing record does not prove incompatibility, and the catalog's latest verified DSH version is not the latest upstream release. Do not recommend upgrading or downgrading DSH merely to match a row. Investigate any specific failure and seek verification of the installed combination. Do not blindly install `dsh-codex-connect@alpha`: `alpha` is a moving tag, not a compatibility guarantee. Do not infer support for newer DSH versions from these rows.
36
36
 
37
- Alpha 4.43 requires one consistent DSH `0.1.7-rc.1` plugin API and pi-ai `0.85.1`; Node.js remains `^22.19.0 || >=24.0.0`. It does not support the older DSH rows. Alpha 4.41 remains the choice for DSH `0.1.2-rc.1` with pi-ai `^0.84.2`, or `0.1.5-alpha.1`, `0.1.5-rc.1`, and `0.1.5-rc.2` with pi-ai `0.85.1`. Mixed host versions and other DSH/pi-ai combinations remain unverified. Alpha 4.25 remains the verified choice for DSH `0.1.2-alpha.5`, Alpha 4.23 for DSH `0.1.2-alpha.2`, Alpha 4.21 for DSH `0.1.1-rc.2`, and Alpha 4.14 for DSH `0.1.0-rc.7`. Changing DSH is a separate operation requiring the user's explicit request; a plugin update request does not authorize it. The repository's `pnpm --silent run check:compatibility` remains a strict development/release dependency gate, not a recommendation to change a user's host.
37
+ Alpha 4.47 requires one consistent DSH `0.1.7-rc.1` plugin API and pi-ai `0.85.1`; its direct runtime imports include `@deepseek-ai/schemastery` `3.18.4` and `@earendil-works/pi-ai` `0.85.1` so an isolated profile need not already provide them. Node.js remains `^22.19.0 || >=24.0.0`. It does not support the older DSH rows. Alpha 4.41 remains the choice for DSH `0.1.2-rc.1` with pi-ai `^0.84.2`, or `0.1.5-alpha.1`, `0.1.5-rc.1`, and `0.1.5-rc.2` with pi-ai `0.85.1`. Mixed host versions and other DSH/pi-ai combinations remain unverified. Alpha 4.25 remains the verified choice for DSH `0.1.2-alpha.5`, Alpha 4.23 for DSH `0.1.2-alpha.2`, Alpha 4.21 for DSH `0.1.1-rc.2`, and Alpha 4.14 for DSH `0.1.0-rc.7`. Changing DSH is a separate operation requiring the user's explicit request; a plugin update request does not authorize it. The repository's `pnpm --silent run check:compatibility` remains a strict development/release dependency gate, not a recommendation to change a user's host.
38
38
 
39
- The Alpha 4.43 recommendation follows [exact-release main CI](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35887810404) on Node 22/24, Chromium and Windows checks, plus the stock DSH `0.1.7-rc.1` same-artifact installation matrix. The [original publish run](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35888766215) uploaded the verified npm package but timed out waiting for public registry readback; do not rerun publication. Once npm exposed the exact version and `alpha` tag, the [recovery-only run](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35889959811) verified the archive against that original artifact and created the matching Git tag and prerelease without republishing. These checks used synthetic providers, not a real ChatGPT account. Stock rc.1 keeps Task controls paused; migration of old Task grants across a Harness upgrade remains unverified.
39
+ The Alpha 4.47 recommendation follows [exact-release main CI](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35994106350) on Node 22/24, browser and keyless Windows checks, plus the stock DSH `0.1.7-rc.1` same-artifact installation matrix. The [original publish run](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35994578156) uploaded the verified package but failed during npm public readback; do not rerun publication. Recovery-only local verification matched the public npm archive byte-for-byte to the original artifact and created the [Git tag and prerelease](https://github.com/franksong2702/dsh-codex-connect/releases/tag/v0.1.0-alpha.4.47) without republishing. npm `alpha` and `latest` were independently read back as 4.47. These checks are not fresh real Chrome OAuth, live model/tool/image requests, or Windows application acceptance. Stock rc.1 keeps Task controls paused; migration of old Task grants across a Harness upgrade remains unverified.
40
+
41
+ Historical Alpha 4.46 evidence:
42
+
43
+ The Alpha 4.46 recommendation follows [exact-release main CI](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35982530538) on Node 22/24, browser and keyless Windows checks, plus the stock DSH `0.1.7-rc.1` same-artifact installation matrix. The [original publish run](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35983101557) uploaded the verified package but timed out waiting for npm's public readback; it must not be rerun. After the exact version and `alpha` tag appeared, the [recovery-only run](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35984180679) matched the public npm archive byte-for-byte to the original artifact and created the Git tag and prerelease without republishing. The fix's real Chrome OAuth and quota refresh on the original Windows PC remain unverified; these checks did not promote npm `latest` or establish real-account acceptance. Stock rc.1 keeps Task controls paused; migration of old Task grants across a Harness upgrade remains unverified.
44
+
45
+ The historical Alpha 4.43 recommendation followed [exact-release main CI](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35887810404) on Node 22/24, Chromium and Windows checks, plus the stock DSH `0.1.7-rc.1` same-artifact installation matrix. The [original publish run](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35888766215) uploaded the verified npm package but timed out waiting for public registry readback; do not rerun publication. Once npm exposed the exact version and `alpha` tag, the [recovery-only run](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35889959811) verified the archive against that original artifact and created the matching Git tag and prerelease without republishing. These checks used synthetic providers, not a real ChatGPT account. Stock rc.1 keeps Task controls paused; migration of old Task grants across a Harness upgrade remains unverified.
40
46
 
41
47
  The Alpha 4.41 recommendation follows successful [exact-release main CI](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35817909046) on Node 22 and 24 (1,282 unit tests each), 52 Chromium tests, and a four-host same-artifact installation matrix. After npm processing completed, the [recovery verification](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35819017165) matched the public npm archive byte-for-byte to the original verified release artifact, then created the matching Git tag and GitHub prerelease. The [original release run](https://github.com/franksong2702/dsh-codex-connect/actions/runs/35818489220) remains failed because npm's public readback was not available within its bounded retry period; do not rerun publication. These are synthetic-provider installation/lifecycle checks, not new real-account acceptance or a newly exercised published-package upgrade. Task-level model control remains opt-in; a new grant preselects only GPT-5.6 Sol / Medium and displays its scope and request limit before Start. Existing grants are not silently narrowed. Stock DSH 0.1.6-alpha.1 and alpha.2 remain undeclared; their separate compatibility trackers are not broadened by this release.
42
48
 
@@ -73,10 +79,10 @@ Alpha 4.33 omits the `modelErrors` profile field required by RC model packages,
73
79
  dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.41
74
80
  ```
75
81
 
76
- For the exact DSH `0.1.7-rc.1` pairing, use Alpha 4.43:
82
+ For the exact DSH `0.1.7-rc.1` pairing, use Alpha 4.47:
77
83
 
78
84
  ```sh
79
- dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.45
85
+ dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.47
80
86
  ```
81
87
 
82
88
  For DSH `0.1.2-alpha.5`, use Alpha 4.25:
@@ -85,7 +91,9 @@ Alpha 4.33 omits the `modelErrors` profile field required by RC model packages,
85
91
  dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.25
86
92
  ```
87
93
 
88
- If npm is unavailable after the matching GitHub prerelease is created, use `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.21'` only for the DSH `0.1.1-rc.2` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.23'` only for the DSH `0.1.2-alpha.2` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.25'` only for the DSH `0.1.2-alpha.5` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.41'` only for the DSH `0.1.2-rc.1`, `0.1.5-alpha.1`, `0.1.5-rc.1`, and `0.1.5-rc.2` combinations, or `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.45'` only for DSH `0.1.7-rc.1`.
94
+ If npm is unavailable after the matching GitHub prerelease is created, use `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.21'` only for the DSH `0.1.1-rc.2` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.23'` only for the DSH `0.1.2-alpha.2` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.25'` only for the DSH `0.1.2-alpha.5` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.41'` only for the DSH `0.1.2-rc.1`, `0.1.5-alpha.1`, `0.1.5-rc.1`, and `0.1.5-rc.2` combinations, or `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.46'` only for DSH `0.1.7-rc.1`.
95
+
96
+ For the current DSH `0.1.7-rc.1` pairing, if npm is unavailable after the matching GitHub prerelease is created, use `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.47'`.
89
97
 
90
98
  3. Run `dsh web --help` once to compose the installed profile without starting the server. DSH `0.1.2-rc.1` prepares profile plugin dependency fallback during this step.
91
99
  4. Run `dsh --profile web --dump-config` and require exactly one `llm-openai-codex` row loading `dsh-codex-connect`.
package/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # git hash-object README.md docs/README.zh.md
5
- README.md: 3dd09c3af313022796d95809cad3b53130eb6a1a
6
- docs/README.zh.md: 3c5b9bf71227a795131522821424574b72d24088
5
+ README.md: 6758656bc0916de3460b0359eed96f32e1f65c72
6
+ docs/README.zh.md: 380041f418a4420409a82adc93fe9ff119803663
package/README.md CHANGED
@@ -16,19 +16,19 @@ This guide describes the published pairing below. Check `dsh --version` first an
16
16
 
17
17
  | Requirement | Verified pairing |
18
18
  |---|---|
19
- | Codex Connect | `0.1.0-alpha.4.45` |
19
+ | Codex Connect | `0.1.0-alpha.4.47` |
20
20
  | DeepSeek Harness | `0.1.7-rc.1` |
21
21
  | Node.js | `^22.19.0 \|\| >=24.0.0` |
22
22
  | Account | ChatGPT OAuth with access to the requested Codex model; availability is decided by OpenAI |
23
23
 
24
- As of 2026-09-24, npm `alpha` points to 4.43 while `latest` remains on 4.41. Use the exact version below for this DSH pairing; publishing an Alpha and changing the default installation channel are separate actions.
24
+ As of 2026-09-24, npm `alpha` and `latest` both point to 4.47. Use the exact version below for this DSH pairing; a moving npm tag is not a compatibility guarantee for other hosts.
25
25
 
26
26
  On stock DSH `0.1.7-rc.1`, ordinary Composer works, but Task controls remain paused: activation is rejected and fresh Sessions do not show them. Migration of earlier Task grants across a Harness upgrade is not verified. Older supported pairings and their task behavior are documented in [Installation and upgrades](INSTALL.md).
27
27
 
28
28
  ### 1. Install
29
29
 
30
30
  ```sh
31
- dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.45
31
+ dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.47
32
32
  dsh web
33
33
  ```
34
34
 
@@ -57,7 +57,7 @@ dsh plugin --profile web exec dsh-codex-connect doctor --json
57
57
 
58
58
  - **Accounts:** save up to 16 accounts on the DSH host and manually select the active account for subsequent requests. Account selection is not a per-session binding. Requests keep their captured account; the plugin does not rotate accounts or silently fail over.
59
59
  - **Models and Astra support:** the currently verified DSH and plugin combination supports `gpt-6-astra`. The plugin supplies its missing model definition with Low, Medium, High, Xhigh, and Max reasoning levels; Default preserves the provider default. Saved Off/Minimal selections require an [explicit update](MIGRATION.md#astra-reasoning-selections). When the installed dependency catalog includes Astra, the plugin preserves its native metadata while retaining these five calibrated reasoning choices. A model appearing in the list does not mean the current account has permission to use it; overall compatibility with new dependency versions still requires separate verification.
60
- - **Fast Mode:** request priority service for one conversation, off by default. Actual speed and quota consumption depend on the service; no fixed speed multiplier is guaranteed.
60
+ - **Fast Mode:** request priority service for one conversation, off by default. Optional, separate profile settings can enable it for newly started top-level or subagent conversations without changing existing conversations. Actual speed and quota consumption depend on the service; no fixed speed multiplier is guaranteed.
61
61
  - **Quota:** show the server-returned `5h` and `7d` windows and reset times, normally refreshed every 60 seconds while signed in and the tab is visible; failures back off. Missing windows are not invented; Spark uses its separate quota bucket.
62
62
  - **Plugin updates:** check for newer Codex Connect releases without installing anything or recommending changes to DSH. Host compatibility is available through explicit local diagnostics.
63
63
 
package/docs/README.zh.md CHANGED
@@ -16,19 +16,19 @@ Codex Connect 为标准 Harness agent loop 添加 `openai-codex` 模型提供方
16
16
 
17
17
  | 要求 | 已验证组合 |
18
18
  |---|---|
19
- | Codex Connect | `0.1.0-alpha.4.45` |
19
+ | Codex Connect | `0.1.0-alpha.4.47` |
20
20
  | DeepSeek Harness | `0.1.7-rc.1` |
21
21
  | Node.js | `^22.19.0 \|\| >=24.0.0` |
22
22
  | 账户 | 通过 ChatGPT OAuth 使用所请求的 Codex 模型;可用性由 OpenAI 决定 |
23
23
 
24
- 截至 2026-09-24,npm `alpha` 指向 4.43,`latest` 仍指向 4.41。安装此 DSH 组合请使用下方精确版本命令;发布 Alpha 与提升默认安装渠道是两项独立操作。
24
+ 截至 2026-09-24,npm `alpha` 和 `latest` 均指向 4.47。安装此 DSH 组合请使用下方精确版本命令;会移动的 npm tag 不保证其他宿主版本的兼容性。
25
25
 
26
26
  在原版 DSH `0.1.7-rc.1` 上,普通 Composer 可用,但 Task 控件仍暂停:激活请求会被拒绝,新 Session 不显示这些控件。跨 Harness 升级迁移旧任务授权尚未验证。较旧组合及其任务行为见[安装与升级](../INSTALL.md)。
27
27
 
28
28
  ### 1. 安装
29
29
 
30
30
  ```sh
31
- dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.45
31
+ dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.47
32
32
  dsh web
33
33
  ```
34
34
 
@@ -57,7 +57,7 @@ dsh plugin --profile web exec dsh-codex-connect doctor --json
57
57
 
58
58
  - **账户:**在 DSH 主机上保存最多 16 个账户,手动选择后续请求使用的活动账户,不按会话绑定。请求保持已固定的账户,插件不会自动轮换或静默故障切换。
59
59
  - **模型与 Astra 支持:**当前已验证的 DSH 与插件组合已支持 `gpt-6-astra`。插件补充缺失的模型定义,提供 Low、Medium、High、Xhigh 和 Max 五档推理强度;Default 保持提供方默认值。已保存的 Off/Minimal 选择需要[明确更新](../MIGRATION.md#astra-reasoning-selections)。安装的依赖目录包含 Astra 时,插件保留其原生元数据,同时维持这五档已校准的推理选择。模型出现在列表中,不代表当前账户具有调用权限;新依赖版本的整体兼容性仍需单独验证。
60
- - **Fast Mode:**为单个对话请求优先服务,默认关闭。实际速度和额度消耗取决于服务端,不保证固定提速倍数。
60
+ - **Fast Mode:**为单个对话请求优先服务,默认关闭。可分别为新建主对话和新建子代理对话启用默认值,不改变已有对话。实际速度和额度消耗取决于服务端,不保证固定提速倍数。
61
61
  - **额度:**显示服务端返回的 `5h`、`7d` 窗口及重置时间,已登录且标签页可见时通常每 60 秒刷新一次;失败后延长重试间隔。不虚构缺失窗口;Spark 使用独立额度桶。
62
62
  - **插件更新:**检查 Codex Connect 新版本,不自动安装,也不建议更改 DSH。宿主兼容性信息通过主动运行的本地诊断查看。
63
63
 
@@ -0,0 +1,7 @@
1
+ # Install libraries imported by the runtime bundle
2
+
3
+ The Cordis bundle's `lib/index.js` imports `@deepseek-ai/schemastery` and `@earendil-works/pi-ai` at module load. Alpha 4.46 declared both only as peers, so a profile that supplied the DSH host packages but not these two libraries could fail before plugin activation. Resolving an older host-level schemastery also exposed a `.volatile()` method mismatch. A profile-local dependency workaround confirmed that the missing libraries, not credentials or plugin configuration, caused the reported failure.
4
+
5
+ The plugin now declares exact, plugin-owned runtime dependencies for schemastery `3.18.4` and pi-ai `0.85.1`. DSH, Cordis, and React remain peers because they are host-owned APIs whose module identity must remain shared. The runtime bundle continues to externalize these imports; the package manager installs the two direct dependencies beside the plugin instead of relying on incidental profile hoisting.
6
+
7
+ `check:isolated-import` copies the built package into a disposable profile, exposes the declared host peers except these two libraries, links only the plugin's declared direct dependencies beside its package, and imports the real built entry point in a fresh Node process. Before the manifest change, the same check failed on missing schemastery. The DSH install matrix exercises the packed artifact with the declared host version and remains the compatibility gate; the isolated import check does not claim a real-account or Windows acceptance run.
@@ -0,0 +1,49 @@
1
+ # Issue #270: local integrated editing candidate — 2026-09-25
2
+
3
+ Historical integrated-candidate checkpoint. Continue from [the subsequent source review and regression fixes](issue-270-review-checkpoint.md); retain the evidence and limits below for the original candidate.
4
+
5
+ Repository `franksong2702/dsh-codex-connect`; branch `franksong2702/issue-270-image-edit`. This work continues local transport commit `70668f68fe0460f0b03f373739ae6d20210d5847`, based on main `b1b6efcd93be434bc4b7dd8b9da692803102844e`. It does not restart from remote main or modify the other worktrees. The commit containing this checkpoint is a local, unreleased candidate, not an acceptance/release claim for public Alpha 4.47.
6
+
7
+ ## Implemented beyond the foundation
8
+
9
+ The existing tool now has explicit edit intent, one target and ordered reference purposes. Session-only selection resolves admitted uploads, complete supported attachment metadata, native generated originals and successful nested image results. Inputs are checked against host limits and fully validated stored images before editing. Missing/foreign inputs, ambiguous preview-to-original mapping, invalid references and missing host policy fail without provider calls. Original access remains bounded to ownership or the actual inherited fork prefix. A model/browser reference is never proof of permission.
10
+
11
+ Each edit creates a fresh original and preview. V2 metadata and the PTC content envelope preserve canonical input selections and output identity; old v1/preview-only results remain readable. Tests exercise subsequent edits and returning to an earlier result. Legacy previews require explicit selection; an unavailable original is not silently substituted.
12
+
13
+ The result form selects a concrete image, waits for modification instructions and submits through the existing host conversation API. It does not spend an image request merely when opened. Multi-image results require a choice, retries retain target/reference order, repeating an edit uses its original inputs, and new editing uses the output as a new target. Synchronous local submission guards prevent duplicate clicks; uncertain requests are not automatically replayed. Production components observe the saved feature setting and retain history/downloads when new actions are disabled. English and Chinese disclosure text now explains selected-image transmission.
14
+
15
+ Contract and usage details: [conversation image editing](../experiments/issue-270-image-edit.md). There is no new API-key route, arbitrary path/URL loader, mask editor, batch editor, model-selection policy or Task activation change.
16
+
17
+ ## Actual local validation
18
+
19
+ Exact environment: Node `v22.22.3`, pnpm `10.30.3`, installed DSH packages `0.1.7-rc.1`, pi-ai `0.85.1`.
20
+
21
+ | Command / evidence | Actual result |
22
+ | --- | --- |
23
+ | `pnpm run check` | Exit 0: 123 files / 1,396 tests; lint, host/client typecheck, build, proxy/isolated imports, capability CLI, compatibility and packaging passed. |
24
+ | `pnpm run test:browser` | Exit 0: 13 files / 69 Chromium tests, including 8 new edit workflow cases. |
25
+ | Final supplemental `pnpm exec vitest run tests/image-edit-session.spec.ts && pnpm run typecheck` | Exit 0: both real-host/physical-JSONL tests pass with additional assertions that the actual model request contains the upload ID, the generated original ID and the restored original ID. |
26
+ | `pnpm run check:dsh-install` | Exit 0 on exact DSH 0.1.7-rc.1. Isolated archive `e6cddc8a5fcfda95da5030277c2af9ebc52196047fc6c1000fba65e827f80c49`; defaults unchanged, runtime disposal verified, existing generated-image/PTC/download/fork regressions passed. This checker does not itself add a full real-account editing acceptance. |
27
+ | `git diff --check` | Passed during final review. |
28
+
29
+ The final supplemental model-context assertions only change a test. They do not change product bytes or the installation candidate. This checkpoint and the historical-note link were added after the installation archive was packed, so the recorded archive hash identifies that tested archive, not a later documentation-only repack.
30
+
31
+ Product byte identity for the passing runtime/browser candidate:
32
+
33
+ - `lib/index.js`: `ffd9c2999a159a0c1b4b1c86028e6633f817a183978141499e8fad22f0cf3c52`
34
+ - `lib/client.js`: `cb04906d2d37c34d77308c0a1b31d036c634220b6b298b9b2284fdf9587f12f5`
35
+ - `src/image-input-contract.ts`: `d2963ca421c64605dd387f05a053167cc87fe4ec0a18bbea1bb2523185d320f6`
36
+ - `src/image-inputs.ts`: `1c5cf7b38848d88fd7c5cdf7d0efdcd972e3e529e16379bac1aa19b80160c5a1`
37
+ - `src/image-history.ts`: `c8a0aae23c452aa277e71e44df5644abeb00932606efe2cf95abd7018e5e2d03`
38
+
39
+ ## Evidence limits and next gate
40
+
41
+ Every model/image response and credential in these tests is synthetic. The session fixture uses the complete plugin, real AgentLoop, file-backed originals/attachments and physical JSONL (none/zstd), then replaces the host service graph and resumes from disk. It proves that the model request can see the image handles and that explicit valid edits survive normal durable restoration. It does not prove a real model always selects the right image from natural language.
42
+
43
+ The new browser tests run real Chromium with mocked session transport at a narrow viewport; they do not certify the complete installed daily Session page, an actual phone or Windows application. The installation checker separately certifies its bounded packaged-host scope. No real OAuth request, real image editing quality, process-crash recovery or arbitrary cross-version migration is accepted here. Older plugins are not promised to decode new v2 edit provenance; older v1 results remain readable in this candidate.
44
+
45
+ Next: independent review of this candidate and a separately authorized bounded real-provider / full installed-session acceptance, including a single image, multiple references and two consecutive edits. Use non-sensitive approved fixtures. Do not change channels or silently fall back to generation if the real service rejects editing. No push, PR, merge, release, npm-tag change, daily deployment or 3080/3081 operation is authorized by this checkpoint.
46
+
47
+ ## Retained development failures
48
+
49
+ The first expanded type checks caught test-fixture vocabulary/type errors; these were corrected to the installed host contracts rather than suppressed. The first complete regression run failed one old exact help-text assertion after the new image-transmission disclosure was added; both EN/ZH assertions were updated to the intended wording and the complete check passed. A repeated exact edit anchor was rejected transactionally before writes and was resubmitted with a unique anchor. No platform authorization denial blocked the source implementation in this continuation. Previous transport-only and denied-call records remain historical, not evidence that the current tool is unavailable.
@@ -0,0 +1,107 @@
1
+ # Issue #270: source review and regression fixes — 2026-09-25
2
+
3
+ Historical review and first bounded live run. The final adapter selection gate was subsequently confirmed using the explicitly requested **GPT-6 Sol** route: see [final live-selection confirmation](issue-270-sol-live-confirmation.md). Preserve the failures, budget accounting and scope below as evidence for the earlier round. This is not a release.
4
+
5
+ ## Identity and review boundary
6
+
7
+ Repository: `franksong2702/dsh-codex-connect`. Branch: `franksong2702/issue-270-image-edit`. Reviewed candidate: `291c35609f02a1f0cc627651e28bdf214ea83998`, after transport foundation `70668f68fe0460f0b03f373739ae6d20210d5847`, based on main `b1b6efcd93be434bc4b7dd8b9da692803102844e`.
8
+
9
+ This was a fresh source review by the assistant continuing the task, backed by failing reproductions before fixes. It was not an independent human or second-agent approval. The containing commit identifies the resulting reviewed tree. Other worktrees, real credentials and daily services were untouched.
10
+
11
+ ## Confirmed findings and fixes
12
+
13
+ ### R1 — complete attachment references lost their occurrence identity
14
+
15
+ A normalized, content-addressed image can appear twice with different valid display names. The single-value inventory overwrote the earlier record, so a complete earlier attachment reference was incorrectly rejected. It could also promote an explicitly selected upload to a generated original sharing those normalized bytes.
16
+
17
+ The inventory now retains canonical occurrence references per attachment ID and every preview-to-original relation. Complete selectors match an actual recorded occurrence; bare IDs still refuse ambiguous original mappings. Unknown occurrence metadata remains refused, and the selected complete upload is not promoted to a different generated occurrence.
18
+
19
+ Evidence: a failing two-upload/different-name test before the fix, plus final tests for original upload selection and rejection of an unrecorded name.
20
+
21
+ ### R2 — inherited nested edits could be editable but not downloadable
22
+
23
+ The separate original-download helper did not trim recorded tool arguments, while the editing tool and history parser did. A successful v2 nested edit with surrounding prompt whitespace therefore failed its download provenance comparison. Both supported nested event names were affected.
24
+
25
+ Original downloads now reuse `inheritedImageOriginal`, the same successful-result, normalized-prompt and immutable-fork-prefix logic used for editing. Two pre-fix tests returned 404 instead of 200; both now pass. The packaged check additionally creates a real nested edit, forks its session and downloads the edited original.
26
+
27
+ ### R3 — failed native-result metadata was accepted as inheritance evidence
28
+
29
+ The pre-existing download helper decoded native result metadata without requiring a successful result. A deliberately constructed failed host event retaining valid original metadata therefore returned 200 rather than refusing an inherited download. The editing history reader already checked success.
30
+
31
+ Sharing the history reader makes both operations reject failed-result metadata while retaining normal owner and successful inherited access. The negative test now passes. This is a reproduced defensive authorization inconsistency using a synthetic host record; it is not evidence of an observed private-image disclosure or an externally reachable exploit.
32
+
33
+ ### R4 — a draft could carry over to another original with the same preview
34
+
35
+ The form's React identity used only the session and preview IDs. Replacing the result with a different original sharing the preview retained instructions intended for the first original.
36
+
37
+ The form key now includes the original asset identities. Option, download and detail keys distinguish separate occurrences. A late submission completion from an unmounted form cannot close its replacement. The Chromium reproduction initially retained the old draft, then passed after the correction without submitting a provider request.
38
+
39
+ ## Expanded packaged acceptance
40
+
41
+ `check-installed-images.mjs` now exercises generation, a nested edit, an edit of that result, v2 source recovery, inherited edited-original download, denial for the earlier fork, and missing-input refusal without generation fallback. Its expected counts are two generations, two edits and two PTC dispatches. Provider replies, preview storage and code execution are synthetic; the registered tool, PTC bridge and original asset files are real.
42
+
43
+ The matrix report validator now requires the edit counts and source/inheritance/invalid-input evidence. Four negative validator cases ensure those new requirements cannot silently disappear. No workflow permission or production default was changed.
44
+
45
+ ## Verification performed
46
+
47
+ Exact runtime: Node `v22.22.3`, pnpm `10.30.3`, DSH `0.1.7-rc.1`, pi-ai `0.85.1`.
48
+
49
+ | Check | Actual outcome |
50
+ | --- | --- |
51
+ | Pre-fix backend reproductions, selected with `-t review:` | Four failures as expected: repeated attachment occurrence, both nested-event whitespace cases, and failed-result inheritance. Other tests were filtered, not counted as passing. |
52
+ | Pre-fix Chromium draft reproduction | One failure as expected; eight other tests filtered. |
53
+ | Focused backend verification after initial fixes | Four files / 59 tests passed; two additional occurrence cases were added afterward and included in the full run. |
54
+ | Typecheck and focused edit Chromium suite | Passed; nine browser tests. |
55
+ | Final `pnpm run check` after live-findings fixes | Exit 0; 124 files / 1,405 tests passed, including lint, host/client types, build, proxy preservation, isolated imports, capability CLI, compatibility and packing. |
56
+ | Final `pnpm run test:browser` | Exit 0; 13 files / 70 Chromium tests passed. |
57
+ | Rebuilt package with existing exact host dependencies | Exit 0; two generations, two edits, two PTC dispatches, source and inherited-edit checks, negative-input refusal, zero real-provider requests. This is not a fresh installation. |
58
+ | First `pnpm --silent run check:dsh-matrix` attempt | Failed during registry resolution, before plugin execution: `exact DSH fixture resolution failed: fetch failed`. No policy or endpoint workaround was applied. |
59
+ | Fresh final `pnpm run check:dsh-install` | Exit 0 on exact DSH 0.1.7-rc.1 after the adapter handle projection. Defaults unchanged; two synthetic generations, two edits, source/inheritance/refusal checks and existing runtime/disposal/compaction regressions passed. |
60
+
61
+ Successful final isolated archive SHA-256: `42b9d7fe55877580e6c207cb2d0dd6973e4dbf68fd79aa16ff80a1b2c90e4d33`.
62
+ This archive includes the final adapter projection and settings-help wording. It predates only the evidence-note update that records its own hash, so it identifies the tested runtime/package content rather than a byte-for-byte release artifact after this note was written.
63
+
64
+ Product byte identities after the final live-findings fix and successful full check:
65
+
66
+ - src/adapter.ts: c72b8682dc342cebe878534ef5dd79bcb987f00220bd0086a59ffec51ee7f680
67
+ - src/image-tool.ts: c3ec17be5443452be5c9020699fdca5cf608887865f59ebadc1295cf4c9e918b
68
+ - src/image-input-contract.ts: 2191857a8b2d5f10c3070d65e609fde61b0f0e835187503a021a2e510c15ae78
69
+ - lib/index.js: 0ace9ac73f9697614a888b176c7fb83bfa7f1ef6b4420f547118c2986c999e50
70
+ - src/client/locales.ts: 0da18ac561f0550f20c24458c05b46dc168c53ce5cf11059bc6aebca8f172712
71
+ - lib/client.js: 3ee42b3ea7082a1178d103b4da95291d9b2b6cb29bbb3958eff063eee43d486f
72
+ - tests/image-handle-projection.spec.ts: d6df0cf4ecf036177de960276c026c7b8ad5852e4fc025e0e1469710237d3449
73
+ - tests/image-edit-session.spec.ts: b85d66fe13e571fcd6a9d2deb72ebfd5bcd4acefaf1fa71a5d9e6054a30973d1
74
+
75
+ ## Bounded live-provider acceptance
76
+
77
+ The maintainer explicitly authorized at most three real image-edit requests and eight ordinary model requests, using only non-sensitive generated fixtures, no automatic retries, no daily-service changes, and no credential disclosure. The normal credential-store APIs selected an already signed-in profile; raw access/refresh tokens and authorization headers were never printed or copied into the report.
78
+
79
+ ### Real image backend
80
+
81
+ The fixed Codex OAuth edit route was called exactly three times and all three returned valid PNG results. No ordinary model request was needed for these three calls.
82
+
83
+ 1. Single-image edit changed the off-white background to pale blue while retaining the central red square and green circle.
84
+ 2. Consecutive edit from result 1 added a yellow border around the red square while retaining the pale-blue background and green circle.
85
+ 3. Three-input edit from result 2 plus two references used the blue color reference and checker texture reference in the background while retaining the red square, yellow border and green circle.
86
+
87
+ Visual inspection was backed by local pixel summaries: yellow pixels were absent in step 1 and appeared in step 2; step 3 retained the red/green/yellow populations while the outer margin changed from a near-uniform pale blue to multiple blue checker shades. There was no fourth real image call.
88
+
89
+ ### Real conversational selection
90
+
91
+ A separate isolated real GPT-5.6 Sol harness blocked the image endpoint locally and captured tool arguments instead.
92
+
93
+ - Natural wording (“FIRST attached image”, “SECOND … reference”) produced one edit call with one reference, but the opaque attachment identities were mapped incorrectly.
94
+ - The same task with explicit attachment IDs in user text mapped target and reference correctly, showing the tool protocol itself was sound.
95
+ - Strengthening only the tool description did not fix the natural ordinal case. This consumed six ordinary model requests total across those diagnostics.
96
+ - Investigation showed the image-capable request carried image bytes without adjacent text binding each occurrence to its opaque attachment ID. The candidate now fixes that at the Codex Connect adapter boundary: when enableImageGeneration is on, every request image is followed only in the provider request projection by a bounded line naming its per-message ordinal and stable attachmentId. Durable session messages are unchanged; when the feature is off, the projection is not applied. Focused and full synthetic AgentLoop tests verify the exact wire ordering.
97
+ - The last two authorized ordinary model calls were used for an intermediate live recheck. The model/tool turn completed, but the acceptance script raised a local variable-name ReferenceError while constructing its final JSON report, after execution. No result classification was persisted, so this run is outcome_unknown, not success. Both calls are conservatively counted against the budget. The intermediate system-prompt approach used for that attempt was subsequently removed after offline tests proved it did not enter the actual request projection.
98
+
99
+ Final live budget accounting: **3/3 real image edits, 8/8 ordinary model requests**. No further live call was made after the budget was exhausted. Therefore the final adapter-level ordinal mapping fix is strongly regression-tested but still requires a newly authorized real-model confirmation before claiming natural “first/second image” selection is live-accepted.
100
+
101
+ ## Remaining acceptance and explicit limits
102
+
103
+ The identified findings are fixed and regression-covered; this is not a guarantee that no further defects exist. The bounded real run proves current-account access to the edit endpoint and representative single/continued/multi-input edit quality for the tested fixtures, but it does not establish general backend limits or pixel-perfect preservation. The final adapter handle projection has synthetic wire evidence but no post-fix live-model confirmation because the authorized model budget was exhausted. The full installed everyday Session page, physical mobile, Windows and process-crash behavior remain outside this round's acceptance.
104
+
105
+ The next live gate, if separately authorized, needs no additional image generation: one isolated natural-language “first image / second reference” conversational check is sufficient to confirm the final adapter handle projection. Keep the image endpoint locally blocked and bound ordinary model calls explicitly. Do not reuse the exhausted budget from this round.
106
+
107
+ Real requests in this round used only the already-selected Codex account through normal store/transport APIs; raw credential values were not printed or copied into artifacts. No push, PR, merge, release, npm channel change or daily deployment occurred. Local fixes and evidence remain on the feature branch.
@@ -0,0 +1,59 @@
1
+ # Issue #270 — final GPT-6 Sol image-selection confirmation
2
+
3
+ Status: **PASSED for the bounded selection scenario**. This closes the remaining final-adapter live-selection gate for the user-requested `gpt-6-sol` route. It is not a release, full UI acceptance, a claim of perfect selection reliability, or a post-fix GPT-5.6 Sol benchmark.
4
+
5
+ ## Exact identity and authorization
6
+
7
+ - Repository: `franksong2702/dsh-codex-connect`.
8
+ - Branch: `franksong2702/issue-270-image-edit`.
9
+ - Tested commit: `ff1192393df5fb45a536539f07faee7bf532883a`.
10
+ - Tested `lib/index.js` SHA-256: `0ace9ac73f9697614a888b176c7fb83bfa7f1ef6b4420f547118c2986c999e50`.
11
+ - Acceptance script SHA-256: `b406b0e4773f3a07279c9cf22749207951f0dcd8a4b2413d7a24ae966fa13cf5`.
12
+ - Node: `v22.22.3`; installed host baseline remains DSH `0.1.7-rc.1`.
13
+ - Live run: 2026-09-25 14:23:49–14:23:59 UTC (22:23:49–22:23:59 UTC+8).
14
+
15
+ The user explicitly authorized WebCodex, specified `gpt-6-sol`, and authorized at most two ordinary model requests with zero real image requests. This was a new bounded authorization, not reuse of the previously exhausted 3-image/8-model budget. The existing selected account in the identified DSH Test RC1 3081 profile was accessed only through the plugin's credential-store API. No account rotation, alternate API-key route, credential copying, saved capability changes, or daily-service restart was used.
16
+
17
+ ## What was actually exercised
18
+
19
+ The acceptance script used the compiled candidate, real AgentLoop, production image-tool schema and implementation, and a real temporary attachment store. Two non-sensitive synthetic PNGs had distinct content-addressed IDs and neutral filenames. The ordinary user prompt supplied no attachment IDs:
20
+
21
+ > Edit the FIRST attached image. Change only its background color using the SECOND attached image as a color-palette reference. Keep the red square and green circle unchanged. Use the image editing tool. Do not generate a new unrelated image.
22
+
23
+ The only eligible tool was `codex_connect_image_generate`. The actual provider payload named `gpt-6-sol` and contained the final adapter's numbered stable handles. The returned tool call selected the first attachment as target and the second as the sole reference. The production resolver read the correct two images, and hashes of the ordered image bytes at the edit transport boundary matched those admitted attachments.
24
+
25
+ At that boundary the harness saved its observations, blocked the image request **before any network dispatch**, and cancelled the isolated agent. Thus this run proves real model selection and production input resolution, not a newly rendered image or a normal post-edit completion message.
26
+
27
+ ## Results
28
+
29
+ | Check | Observed result |
30
+ | --- | --- |
31
+ | Offline dry-run with the same script and compiled runtime | Passed; one simulated model response, zero real requests |
32
+ | Requested model / actual request payload | `gpt-6-sol` / `gpt-6-sol` |
33
+ | Real ordinary model requests | **1 of maximum 2**; HTTP 200 |
34
+ | Image-tool calls | **1** |
35
+ | Operation | `edit` |
36
+ | Target | Correct first attachment |
37
+ | References | Exactly one; correct second attachment; nonempty purpose |
38
+ | Resolved image data and order | Exact expected hashes at the edit boundary |
39
+ | Real image requests | **0** |
40
+ | Locally blocked edit attempts | **1**, intentional |
41
+ | Generation fallback / other endpoint attempts / over-budget attempts | **0 / 0 / 0** |
42
+ | Report persistence and isolated resource cleanup | Passed |
43
+ | Process result | Exit 0 |
44
+
45
+ No second real model request was needed. The runner writes quota reservations and selection evidence before cancellation/cleanup, and refuses to replay an existing live run. Before live execution it verifies a passed offline report with identical script and runtime fingerprints. The failed import during preliminary offline route discovery consumed no model/image request and changed no product files.
46
+
47
+ ## Retained evidence
48
+
49
+ - [Offline report](../experiments/evidence/issue-270-sol-selection/offline.json), SHA-256 `111cd185f5fcb4ae4e31cf975357b5cf682a7432e1b423e725ed4ddb8e98325a`.
50
+ - [Live report](../experiments/evidence/issue-270-sol-selection/live.json), SHA-256 `74d5a63b42749a8a02688e222ffea9b4ae5fad393948bd889cfd8aaa92e02cda`.
51
+ - `scripts/check-issue-270-selection.mjs`: opt-in one-off harness, fenced to the reviewed commit/runtime. It is not part of automatic tests, does not enable live testing by default, and must not be rerun under this spent operation authorization. Another acceptance requires its own explicit authorization and source identity.
52
+
53
+ The reports contain only synthetic fixture selectors, boolean checks, request counts, HTTP status and source identities. They contain no tokens, account IDs, credential paths, raw request bodies, or image data.
54
+
55
+ ## Remaining scope and next delivery step
56
+
57
+ Together with the previous three real edits and the recorded 1,405-test / 70-browser-test regression evidence, the final selection check supports moving this candidate to PR/CI review. Previous tests are historical evidence for their exact runtime, not newly rerun in this documentation/harness-only continuation. No production source or bundle was changed in this round.
58
+
59
+ Only GPT-6 Sol was tested here. This does not claim that GPT-5.6 Sol or every model will always choose correctly, nor does it certify arbitrary reference interpretation, full installed-session UI, physical Windows/mobile, crash recovery, or pixel-perfect editing. No additional image result was generated. No push, PR, merge, publication, deployment, or 3080/3081 service modification occurred.
@@ -0,0 +1,64 @@
1
+ # Issue #270: local image edit transport checkpoint — 2026-09-25
2
+
3
+ > Historical foundation checkpoint at `70668f6`. Subsequent local implementation now connects image selection, editing, provenance and UI. Use [the implementation checkpoint](issue-270-implementation-checkpoint.md) for the newer state; the evidence below remains scoped to the original transport commit.
4
+
5
+ Status: partial implementation; not a completed or enabled image-editing feature.
6
+
7
+ ## Identity and scope
8
+
9
+ Repository: `franksong2702/dsh-codex-connect`. Base: `b1b6efcd93be434bc4b7dd8b9da692803102844e`. Local branch: `franksong2702/issue-270-image-edit`. Development took place in a clean isolated worktree; pre-existing worktrees and daily services were not modified.
10
+
11
+ This checkpoint implements the independently testable transport part of Issue #270. The model-callable tool remains prompt-only. No new edit button behavior, DSH input resolver, source history, feature default, model selection, account policy or activation route is enabled by this change.
12
+
13
+ ## Implemented
14
+
15
+ - `src/image-edit-request.ts` validates a complete batch of already-authorized image bytes and snapshots the ordered data URLs and prompt synchronously before any queue/credential await. No file, URL or DSH attachment lookup happens in this module.
16
+ - `src/transport.ts` adds `editImages` on the fixed Codex OAuth `images/edits` route. The optional method is additive to transport API v1: consumers must explicitly detect its presence and must never substitute `generateImages` when it is absent or fails.
17
+ - Generation and editing share the existing account capture, image request governor, proxy, cancellation, timeout, manual-redirect refusal, bounded response read and fixed safe error behavior. Editing does not automatically retry or switch to generation.
18
+ - Input admission occurs before authentication. The final encoded JSON body is size-checked before reading credentials. Generated response bytes are still returned to the existing caller-owned validation/storage layer.
19
+ - The matching `lib/index.js` and `lib/index.d.ts` were rebuilt by the full check.
20
+
21
+ Local defensive limits are five inputs, 10 MiB per image, 20 MiB total input bytes, 32 MiB encoded request body, 50 million pixels per image and 32,768 pixels per side. These are conservative plugin limits, NOT measured service limits or account entitlements. The future host-facing resolver must additionally enforce the exact host limits and session authorization. Existing image-format detection is reused; this checkpoint is not a new full raster-decoder validation guarantee.
22
+
23
+ ## Verification performed
24
+
25
+ Environment: Node `22.22.3`, pnpm `10.30.3`, DSH development packages `0.1.7-rc.1`, pi-ai `0.85.1`.
26
+
27
+ | Command / boundary | Observed result |
28
+ | --- | --- |
29
+ | `pnpm install --frozen-lockfile` | Succeeded; existing lockfile unchanged. |
30
+ | Focused transport tests after first fix | 3 files / 55 tests passed at that intermediate test set. |
31
+ | `pnpm run typecheck` | Host and client typechecking passed. |
32
+ | `pnpm run check` on final source/test content | Exit 0; 120 files / 1,348 tests passed, including 27 new edit-transport cases. Lint, typecheck, build, environment-proxy preservation, isolated import, capability CLI, compatibility and package checks passed. |
33
+ | `pnpm run test:browser` | Exit 0; 12 Chromium test files / 61 tests passed. This is existing UI regression, not new edit-UI acceptance. |
34
+ | `git diff --check` | Passed. |
35
+
36
+ New cases cover distinct ordered images, direct/governed paths, invalid input with zero credential capture and zero provider dispatch, input mutation while awaiting credentials, pre-cancellation, configured model hint, HTTP rejection/redirect, malformed result, uncertain network completion without resubmission, and prompt-only generation compatibility. Providers and credential contents are synthetic, with temporary stores cleaned after each test; no real account/model request was made.
37
+
38
+ The first focused run failed (31 failed / 24 passed) because a response-local `images` binding shadowed the input parameter before dispatch. It was renamed to `outputImages`, and the same focused command then passed. This failed run is retained as history, not counted as successful evidence. Subsequent full checks contain the corrected source and expanded tests.
39
+
40
+ Final tested source identities (SHA-256):
41
+
42
+ - `src/image-edit-request.ts`: `4ddbb9c8f48bb4f76592a4d755ccff0d8bf9c187f746829a5676ffc8b7321a12`
43
+ - `src/transport.ts`: `2d33bfd23cea65bb60d8eae54c04f9a2cbd06cbab7503dc02f8a0421962645a7`
44
+ - `tests/image-edit-transport.spec.ts`: `65778b833fa691ac4b37603c273af6fb0267756f9cbe56d7fd136ceea3671989`
45
+ - `lib/index.js`: `a423cef03f684ae17402f3553df4b9a4ba9513b6f108cf670b1c1d755afe3b6a`
46
+ - `lib/index.d.ts`: `1e3828d751d541c4a0e55782762d99d1ef4b508ec667f4b759b5ded10e4f4166`
47
+
48
+ ## Execution blockers and remaining work
49
+
50
+ Two platform tool calls were blocked with: `因 OpenAI 无法确定请求的安全状态,已拦截此工具调用。`
51
+
52
+ The first was a bounded installed-host/source inspection. The second was a write of `src/image-input-contract.ts`. Those actions and their dependent host input/tool/provenance/UI work were stopped, without an alternate execution route. The input-contract file is absent; do not assume its attempted content was implemented. The block did not affect the independently implemented transport validation above and does not establish a Codex protocol limitation.
53
+
54
+ A separate attempt to import the approved conversation specification into the worktree failed for missing authenticated host-file provenance. The specification remains a conversation attachment; it was not imported by an alternative path. This file is a newly authored implementation checkpoint, not that specification.
55
+
56
+ Outstanding before claiming #270 complete:
57
+
58
+ 1. Verify exact installed-host image/attachment authorization and prompt submission contracts through an authorized execution path.
59
+ 2. Implement trusted target/reference resolution and model-visible edit inputs, with missing/unauthorized inputs causing zero provider calls.
60
+ 3. Persist edit sources and operation through ordinary and nested tool result representations, without widening fork permissions or inventing originals for preview-only history.
61
+ 4. Bind edit and retry controls to an explicit selected image and retain all reference inputs, while leaving ordinary text generation unchanged.
62
+ 5. Complete installed-session, restart/fork, negative, browser and real-account image-effect acceptance. Any live request requires separately scoped authorization; current tests do not prove account access, image-edit quality or backend limits.
63
+
64
+ No push, PR, merge, release, channel promotion, service restart, 3080/3081 operation or real-credential access was performed. Do not close Issue #270 or describe this checkpoint as a user-ready feature.
package/docs/design.md CHANGED
@@ -8,6 +8,8 @@ The bundle patch inserts only `llm-openai-codex`. It never writes `agent-default
8
8
 
9
9
  The Host registers `llm-openai-codex` as the plugin-owned capability settings namespace. DSH's `llm-pi-ai` catalog owns the `openai-codex` configurable-provider directory entry, while Codex Connect registers the active adapter without redeclaring that entry. The browser binds the plugin namespace through Harness's settings-scope transport and renders account, quota, Save/Discard capability controls in the existing Plugin configuration card. Revision-fenced field writes preserve unrelated settings. Committed changes reconcile search and image registrations live. Default-model settings are never written.
10
10
 
11
+ Fast Mode remains per-session process-local state. Separate default-off profile settings seed newly started top-level and subagent sessions through `agent/created`; resume, setting edits, and repeated startup notifications do not change an existing session's Composer choice. The adapter adds `service_tier: 'priority'` only on Codex requests for an enabled session.
12
+
11
13
  ## Task-level model selection (unreleased Phase 1 candidate)
12
14
 
13
15
  The optional conversation control grants a bounded main-model/effort scope to one task, initially Sol/Medium. The task runtime, adapter dispatch wrapper and existing backend governor share durable request accounting. There is no separate Think, Split or Remember product selector. Host-owned permissions, session history and compaction remain their existing owners; model choice grants no new tool authority. See [the consolidated contract and migration](experiments/adaptive-task-phase1.md) for source selection from #232–#235, cancellation, recovery and acceptance limits.
@@ -0,0 +1,77 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "mode": "live",
4
+ "model": "gpt-6-sol",
5
+ "identity": {
6
+ "head": "ff1192393df5fb45a536539f07faee7bf532883a",
7
+ "runtimeSha256": "0ace9ac73f9697614a888b176c7fb83bfa7f1ef6b4420f547118c2986c999e50",
8
+ "scriptSha256": "b406b0e4773f3a07279c9cf22749207951f0dcd8a4b2413d7a24ae966fa13cf5"
9
+ },
10
+ "startedAt": "2026-09-25T14:23:49.293Z",
11
+ "status": "passed",
12
+ "maximumModelRequests": 2,
13
+ "realModelRequests": 1,
14
+ "simulatedModelRequests": 0,
15
+ "realImageRequests": 0,
16
+ "blockedEditRequests": 1,
17
+ "blockedGenerateRequests": 0,
18
+ "blockedOtherRequests": 0,
19
+ "blockedOverBudgetRequests": 0,
20
+ "wire": [
21
+ {
22
+ "model": "gpt-6-sol",
23
+ "handleBindingsPresent": [
24
+ true,
25
+ true
26
+ ]
27
+ }
28
+ ],
29
+ "httpStatuses": [
30
+ 200
31
+ ],
32
+ "editInputBytesCorrect": true,
33
+ "selectionAtDispatch": {
34
+ "toolCalls": 1,
35
+ "operation": "edit",
36
+ "targetCorrect": true,
37
+ "referenceCount": 1,
38
+ "referenceCorrect": true,
39
+ "referencePurposePresent": true,
40
+ "selectors": {
41
+ "target": {
42
+ "attachmentId": "sha256:1c13017141edc8438c317168ad497d00ef68e9b36eee4a22719ec666bbdc31b1"
43
+ },
44
+ "references": [
45
+ {
46
+ "image": {
47
+ "attachmentId": "sha256:03e4f7b48d3b8962b2554aa29f40038ddaf5d488dc9069c1977d45d8861fe2b3"
48
+ },
49
+ "purpose": "Use its background palette: blue upper half and yellow lower half, with a crisp horizontal division."
50
+ }
51
+ ]
52
+ }
53
+ },
54
+ "selection": {
55
+ "toolCalls": 1,
56
+ "operation": "edit",
57
+ "targetCorrect": true,
58
+ "referenceCount": 1,
59
+ "referenceCorrect": true,
60
+ "referencePurposePresent": true,
61
+ "selectors": {
62
+ "target": {
63
+ "attachmentId": "sha256:1c13017141edc8438c317168ad497d00ef68e9b36eee4a22719ec666bbdc31b1"
64
+ },
65
+ "references": [
66
+ {
67
+ "image": {
68
+ "attachmentId": "sha256:03e4f7b48d3b8962b2554aa29f40038ddaf5d488dc9069c1977d45d8861fe2b3"
69
+ },
70
+ "purpose": "Use its background palette: blue upper half and yellow lower half, with a crisp horizontal division."
71
+ }
72
+ ]
73
+ }
74
+ },
75
+ "finishedAt": "2026-09-25T14:23:59.398Z",
76
+ "cleanup": "passed"
77
+ }