dsh-codex-connect 0.1.0-alpha.4.8 → 0.2.0-alpha.1

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.
Files changed (136) hide show
  1. package/INSTALL.md +138 -15
  2. package/MIGRATION.md +71 -0
  3. package/NOTICE +11 -0
  4. package/README.i18n.yaml +3 -3
  5. package/README.md +85 -122
  6. package/VERSIONING.md +67 -0
  7. package/compatibility.json +14 -2
  8. package/cordis.patch.yml +5 -0
  9. package/docs/README.zh.md +85 -122
  10. package/docs/VERSIONING.zh.md +67 -0
  11. package/docs/agent-notes/account-recovery-state.md +9 -0
  12. package/docs/agent-notes/adaptive-runtime-status.md +135 -0
  13. package/docs/agent-notes/adaptive-runtime-validation-2026-09-18.md +45 -0
  14. package/docs/agent-notes/astra-context-audit.md +27 -0
  15. package/docs/agent-notes/auth-diagnostics-safety.md +5 -0
  16. package/docs/agent-notes/canary-maintenance-loop.md +7 -0
  17. package/docs/agent-notes/canary-unverified-doctor.md +9 -0
  18. package/docs/agent-notes/compatibility-refresh.md +17 -0
  19. package/docs/agent-notes/core-transport-decoupling.md +11 -0
  20. package/docs/agent-notes/diagnostic-frame-types-20260928.md +29 -0
  21. package/docs/agent-notes/dispatcher-ownership.md +7 -0
  22. package/docs/agent-notes/dsh-016-candidate-validation.md +27 -0
  23. package/docs/agent-notes/dsh-017-stock-plugin-exec.md +9 -0
  24. package/docs/agent-notes/dsh-020-compatibility.md +17 -0
  25. package/docs/agent-notes/dual-dsh-release.md +9 -0
  26. package/docs/agent-notes/env-proxy-dispatcher-preservation.md +7 -0
  27. package/docs/agent-notes/gpt61-sol-support.md +29 -0
  28. package/docs/agent-notes/image-results-visible-answer.md +7 -0
  29. package/docs/agent-notes/issue-211-root-cause.md +70 -0
  30. package/docs/agent-notes/issue-215-install-triage-2026-09-19.md +43 -0
  31. package/docs/agent-notes/issue-264-isolated-import.md +7 -0
  32. package/docs/agent-notes/issue-270-implementation-checkpoint.md +49 -0
  33. package/docs/agent-notes/issue-270-review-checkpoint.md +107 -0
  34. package/docs/agent-notes/issue-270-sol-live-confirmation.md +59 -0
  35. package/docs/agent-notes/issue-270-transport-checkpoint.md +64 -0
  36. package/docs/agent-notes/issue-271-independent-review.md +47 -0
  37. package/docs/agent-notes/issue-272-post-release-fixes.md +30 -0
  38. package/docs/agent-notes/issue-273-independent-review.md +19 -0
  39. package/docs/agent-notes/oauth-cancel-commit.md +9 -0
  40. package/docs/agent-notes/oauth-jwt-decoding.md +7 -0
  41. package/docs/agent-notes/oauth-manual-callback-validation.md +44 -0
  42. package/docs/agent-notes/original-image-fork-access.md +7 -0
  43. package/docs/agent-notes/plugin-update-scope.md +9 -0
  44. package/docs/agent-notes/ptc-image-presentation.md +18 -0
  45. package/docs/agent-notes/remember-controlled-probes-delivery.md +41 -0
  46. package/docs/agent-notes/remember-delivery-preparation-2026-09-19.md +49 -0
  47. package/docs/agent-notes/remember-recall-investigation-2026-09-18.md +48 -0
  48. package/docs/agent-notes/request-metrics-runtime-candidate.md +27 -0
  49. package/docs/agent-notes/request-response-lifecycle.md +7 -0
  50. package/docs/agent-notes/search-route-runtime-override.md +7 -0
  51. package/docs/agent-notes/shared-reserve-quota.md +9 -0
  52. package/docs/agent-notes/task-activation-ui-retirement.md +11 -0
  53. package/docs/agent-notes/windows-proxy-compressed-fetch.md +7 -0
  54. package/docs/assets/composer-capabilities.jpg +0 -0
  55. package/docs/assets/en/image-generation.png +0 -0
  56. package/docs/assets/en/plugin-configuration.jpg +0 -0
  57. package/docs/assets/en/plugin-entry.jpg +0 -0
  58. package/docs/assets/zh/image-generation.png +0 -0
  59. package/docs/assets/zh/plugin-configuration.jpg +0 -0
  60. package/docs/assets/zh/plugin-entry.jpg +0 -0
  61. package/docs/auto-review.md +26 -0
  62. package/docs/auto-review.zh.md +26 -0
  63. package/docs/design.i18n.yaml +2 -2
  64. package/docs/design.md +32 -4
  65. package/docs/design.zh.md +16 -4
  66. package/docs/experiments/adaptive-task-evaluation.md +34 -0
  67. package/docs/experiments/adaptive-task-phase1-acceptance.md +106 -0
  68. package/docs/experiments/adaptive-task-phase1.md +52 -0
  69. package/docs/experiments/adaptive-task-phase2-acceptance.md +68 -0
  70. package/docs/experiments/adaptive-task-phase2-consent.md +54 -0
  71. package/docs/experiments/adaptive-task-phase2-design.md +155 -0
  72. package/docs/experiments/adaptive-task-phase2-execution.md +49 -0
  73. package/docs/experiments/adaptive-task-phase2-ledger.md +40 -0
  74. package/docs/experiments/adaptive-task-phase2-recovery.md +48 -0
  75. package/docs/experiments/adaptive-task-publication-gate.md +72 -0
  76. package/docs/experiments/dsh-017rc2-compatibility.md +31 -0
  77. package/docs/experiments/evidence/alpha-449-publication.json +26 -0
  78. package/docs/experiments/evidence/alpha-449-release-verification.json +70 -0
  79. package/docs/experiments/evidence/alpha-450-publication.json +67 -0
  80. package/docs/experiments/evidence/alpha-451-publication.json +41 -0
  81. package/docs/experiments/evidence/alpha-452-publication.json +58 -0
  82. package/docs/experiments/evidence/issue-270-sol-selection/live.json +77 -0
  83. package/docs/experiments/evidence/issue-270-sol-selection/offline.json +75 -0
  84. package/docs/experiments/evidence/issue-271-compatibility.json +1184 -0
  85. package/docs/experiments/evidence/issue-272-post-release-fix.json +94 -0
  86. package/docs/experiments/evidence/issue-273-independent-review.json +22 -0
  87. package/docs/experiments/evidence/issue-282-final-review-20260928.json +67 -0
  88. package/docs/experiments/evidence/request-metrics-runtime-review-20260928.json +62 -0
  89. package/docs/experiments/gpt6-sol-luna-compatibility.md +24 -0
  90. package/docs/experiments/issue-211-doctor-diagnostic-2026-09-18.json +153 -0
  91. package/docs/experiments/issue-211-peer-resolution-2026-09-18.json +837 -0
  92. package/docs/experiments/issue-219-diagnostics.md +49 -0
  93. package/docs/experiments/issue-270-image-edit.md +63 -0
  94. package/docs/experiments/native-compaction-durable-m15-2026-09-18-1317.json +129 -0
  95. package/docs/experiments/native-compaction-durable-m15-2026-09-18-1317.md +37 -0
  96. package/docs/experiments/native-compaction-lifecycle.md +85 -0
  97. package/docs/experiments/native-compaction-luna-smoke-m15-2026-09-12.json +89 -0
  98. package/docs/experiments/native-context-switch-acceptance.md +65 -0
  99. package/docs/experiments/phase2-matrix-node22.json +2411 -0
  100. package/docs/experiments/phase2-matrix-node24.json +2411 -0
  101. package/docs/experiments/remember-acceptance.md +60 -0
  102. package/docs/experiments/remember-controlled-acceptance-plan.md +95 -0
  103. package/docs/experiments/remember-controlled-live-m15-2026-09-18-9n7e.json +548 -0
  104. package/docs/experiments/remember-controlled-live-m15-2026-09-18-9n7e.md +33 -0
  105. package/docs/experiments/remember-controlled-offline-evidence.json +1408 -0
  106. package/docs/experiments/remember-recall-offline-diagnostics-2026-09-18.json +553 -0
  107. package/docs/experiments/remember-user-acceptance-plan.md +33 -0
  108. package/docs/licenses/pi-ai-oauth.txt +21 -0
  109. package/docs/licenses/standalone-cli.txt +115 -0
  110. package/docs/maintenance-scope.md +59 -0
  111. package/docs/reference.i18n.yaml +4 -0
  112. package/docs/reference.md +204 -0
  113. package/docs/reference.zh.md +204 -0
  114. package/docs/release-notes/0.2.0-alpha.1.md +31 -0
  115. package/docs/release-notes/alpha-4.37.md +29 -0
  116. package/docs/release-notes/alpha-4.38.md +34 -0
  117. package/docs/release-notes/alpha-4.39.md +36 -0
  118. package/docs/release-notes/alpha-4.42.md +27 -0
  119. package/docs/release-notes/alpha-4.43.md +17 -0
  120. package/docs/release-notes/alpha-4.45.md +21 -0
  121. package/docs/release-notes/alpha-4.46.md +21 -0
  122. package/docs/release-notes/alpha-4.47.md +21 -0
  123. package/docs/request-metrics.md +64 -0
  124. package/docs/request-metrics.zh.md +52 -0
  125. package/docs/versioning.i18n.yaml +4 -0
  126. package/lib/bin.js +7673 -15
  127. package/lib/client.js +7179 -526
  128. package/lib/index.d.ts +687 -106
  129. package/lib/index.js +12159 -2
  130. package/lib/invariant.d.ts +4 -5
  131. package/lib/models-DV5vWzMC.js +946 -0
  132. package/lib/openai-codex-responses-BG-O8Ytj.js +2862 -0
  133. package/lib/undici-runtime-Ctml-NLj.js +21 -0
  134. package/package.json +142 -51
  135. package/lib/bin.d.ts +0 -6
  136. package/lib/src-DztMY1zT.js +0 -1865
package/README.md CHANGED
@@ -1,193 +1,156 @@
1
1
  # Codex Connect
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/dsh-codex-connect?label=npm&color=cb3837)](https://www.npmjs.com/package/dsh-codex-connect)
3
+ [![npm version](https://img.shields.io/npm/v/dsh-codex-connect/alpha?label=npm%20alpha&color=cb3837)](https://www.npmjs.com/package/dsh-codex-connect)
4
4
 
5
5
  English | [中文](docs/README.zh.md)
6
6
 
7
- Connect your ChatGPT subscription to DeepSeek Harness with OAuth, user-controlled defaults, Harness-native approvals, diagnostics, and reliable session recovery.
7
+ Connect your ChatGPT subscription to DeepSeek Harness with OAuth, optional GPT Image generation and editing, user-controlled defaults, Harness-native approvals, diagnostics, and reliable session recovery.
8
8
 
9
- <p align="center">
10
- <img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/hero.jpg" alt="Codex Connect — ChatGPT OAuth for DeepSeek Harness" width="100%">
11
- </p>
12
-
13
- `dsh-codex-connect` adds the `openai-codex` model catalog and a separate ChatGPT OAuth login. Models run through Harness's normal LLM service, so streaming, tool calls, reasoning replay, compaction, filesystem controls, permission gates, and approval prompts remain Harness-owned. It does not turn a ChatGPT subscription into an OpenAI Platform API credential.
9
+ Community Alpha — not affiliated with or endorsed by OpenAI, ChatGPT, Codex, DeepSeek, or DeepSeek Harness.
14
10
 
15
- Installation is additive. The bundle does not replace the current default model or search route, and its standalone search provider and `view_image` tool are disabled until explicitly enabled.
11
+ Codex Connect adds the `openai-codex` model provider to the normal Harness agent loop. Harness continues to manage tools, permissions, approvals, attachments, session persistence, compaction, and recovery. Installing the plugin does not change your default model or search route, and it does not turn a ChatGPT subscription into an OpenAI Platform API key.
16
12
 
17
- Every UI screenshot in this English guide is captured from the English-localized Harness UI. The [Chinese guide](docs/README.zh.md) uses a Chinese capture of the same state. Model and provider identifiers keep their canonical spelling in both languages.
13
+ ## Quick start
18
14
 
19
- ## Quick start (about five minutes)
15
+ This guide describes the published pairing below. Check `dsh --version` first and use `doctor --json` for local diagnostics; the CLI version alone does not prove which model-runtime packages are installed, and missing metadata is reported as unknown. For other versions, use [Installation and upgrades](INSTALL.md). A moving npm tag such as `alpha` is not a compatibility guarantee.
20
16
 
21
- This guide uses the `web` profile. Replace `web` with the name of the Harness profile you already use. You need a working `dsh` installation; from a DeepSeek Harness source checkout, prefix the commands with `pnpm`.
17
+ | Requirement | Verified pairing |
18
+ |---|---|
19
+ | Codex Connect | `0.1.0-alpha.4.54` |
20
+ | DeepSeek Harness | `0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1` or `0.2.0-rc.2` (consistent package set) |
21
+ | Node.js | `^22.19.0 \|\| >=24.0.0` |
22
+ | Account | ChatGPT OAuth with access to the requested Codex model; availability is decided by OpenAI |
22
23
 
23
- ### 1. Install the plugin into one profile
24
+ As of 2026-09-30, npm `alpha` points to 4.54 while `latest` remains 4.50; this publication did not promote `latest`. Use the exact version below for these DSH pairings; a moving npm tag is not a compatibility guarantee for other hosts.
24
25
 
25
- ```sh
26
- dsh plugin --profile web add dsh-codex-connect@alpha
27
- ```
26
+ Alpha 4.54 preserves initial system instructions and tool definitions when DSH 0.2.0-rc.2 calls the pinned Codex provider, corrects diagnostics when the host and plugin own different provider-library versions, and strengthens Canary's normal-request checks. It retains Alpha 4.53's core maintenance changes, existing-task recovery and safety, and 4.52's [opt-in local request metrics](docs/request-metrics.md). Collection stays off until a private directory is configured; unknown usage is not zero. No Task reopening or model-library/OAuth upgrade is included.
28
27
 
29
- Expected result: the package is added to that profile. This does not change the profile's default model or global search route.
28
+ The package passed keyless installation/runtime regression on all four exact DSH versions above. Task controls remain paused: activation is rejected and existing current-host browser regressions show no controls in fresh Sessions. These checks do not establish live OAuth or full user acceptance; 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).
30
29
 
31
- To reproduce this release exactly, use `dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.8`. If npm is unavailable after the matching GitHub prerelease exists, use `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.8'`. A local checkout can be installed as `link:/absolute/path/to/dsh-codex-connect`.
32
-
33
- ### 2. Start Harness
30
+ ### 1. Install
34
31
 
35
32
  ```sh
33
+ dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.54
36
34
  dsh web
37
35
  ```
38
36
 
39
- Expected result: the Harness web UI opens for the selected profile.
37
+ Replace `web` with your existing profile name; use that same profile when starting Harness. From a DSH source checkout, prefix commands with `pnpm`. See [INSTALL.md](INSTALL.md) for other profiles and installation checks.
40
38
 
41
- ### 3. Find the Codex Connect card
39
+ ### 2. Authorize and select a model
42
40
 
43
- Open **Settings → Plugins → Plugin configuration → Codex Connect**.
41
+ Open **Settings → Models → Openai-Codex → Authorize**, then complete approval yourself in the browser. If an embedded window is blocked, select **Open ChatGPT sign-in page**. Choose an `openai-codex` model in the normal Harness model picker.
44
42
 
45
- Expected result: a fresh installation shows **Not signed in** and a **Sign in with ChatGPT** button. The card is where you later manage optional capabilities too.
43
+ Never paste an authorization URL, code, token, or account identifier into an issue, log, chat, or configuration file. For a browser on another device, the optional manual callback form can complete the pending login without forwarding the localhost callback port; follow [Remote browser authorization](docs/reference.md#remote-browser-authorization).
46
44
 
47
- <p align="center">
48
- <img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/plugin-entry.jpg" alt="Collapsed English-localized Codex Connect entry under Harness plugin configuration" width="720">
49
- </p>
50
-
51
- ### 4. Sign in with ChatGPT
45
+ ### 3. Check the installation
52
46
 
53
- Click **Sign in with ChatGPT** and complete the browser approval yourself. Do not copy an authorization URL, code, token, or account identifier into an issue, log, or configuration file.
47
+ ```sh
48
+ dsh plugin --profile web exec dsh-codex-connect status --json
49
+ dsh plugin --profile web exec dsh-codex-connect doctor --json
50
+ ```
54
51
 
55
- Expected result: the account area changes to **Signed in**. The screenshot below is the successful end state after this step; it is not the initial sign-in screen.
52
+ `status --json` exits `0` when signed in and `1` when signed out, without starting OAuth. `doctor --json` reports local installation diagnostics without a network request or raw credentials. A passing diagnostic is not proof of model access; verify that with an actual request.
56
53
 
57
54
  <p align="center">
58
- <img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/oauth-status.jpg" alt="English-localized Codex Connect signed-in state inside Harness plugin configuration" width="720">
55
+ <img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/hero.jpg" alt="Codex Connect — ChatGPT OAuth for DeepSeek Harness" width="100%">
59
56
  </p>
60
57
 
61
- ### 5. Choose a model and make one safe check
58
+ ## Core capabilities
62
59
 
63
- Open Harness's normal model picker and select an `openai-codex` model for the agent or session you are using. This selection is separate from writing the profile's default model or global search route.
64
-
65
- The picker groups the available entries under **OpenAI Codex**. Model identifiers such as `GPT-5.6 Luna` are canonical names, so they intentionally remain un-translated.
60
+ - **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.
61
+ - **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.
62
+ - **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.
63
+ - **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.
64
+ - **Plugin updates:** check for newer Codex Connect releases without installing anything or recommending changes to DSH. Host compatibility is available through explicit local diagnostics.
66
65
 
67
66
  <p align="center">
68
- <img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/model-selector.jpg" alt="OpenAI Codex model group in the English-localized DeepSeek Harness model picker" width="360">
67
+ <img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/composer-capabilities.jpg" alt="Fast Mode and quota controls in the DeepSeek Harness Composer" width="820">
69
68
  </p>
70
69
 
71
- To confirm the configured plugin row locally, run:
70
+ ## Optional capabilities
72
71
 
73
- ```sh
74
- dsh --profile web --dump-config
75
- ```
72
+ Development now follows the [core maintenance scope](docs/maintenance-scope.md): maintain connection, compatibility, diagnostics and recovery; freeze Task orchestration and unproven optimization work. Existing published options are not removed or remotely disabled by this decision.
76
73
 
77
- Expected result: the configuration has exactly one `llm-openai-codex` row. Keep this configuration dump local; it may include unrelated profile settings.
74
+ **Earlier Alpha 4.40/4.41 pairings:** task-level model control is off by default. After explicit task authorization, GPT-5.6 Sol/Medium starts the task, and the active model may continue, change effort, or hand off the main task within the granted scope. The task shares one request ledger and budget; stopping, manual takeover, and restart recovery retain the grant boundary. Phase 2 read-only delegation requires separate consent and does not grant workers write access. Stock DSH `0.1.7-rc.1` with Alpha 4.43 keeps these Task controls paused; do not infer they are available from an older pairing. See [Phase 1](docs/experiments/adaptive-task-phase1.md) and [Phase 2 consent](docs/experiments/adaptive-task-phase2-consent.md).
78
75
 
79
- For secret-free status and diagnostics that do not start OAuth, run:
76
+ Alpha 4.40 also supplies `gpt-6-sol` and `gpt-6-luna` when older provider catalogs omit them, retaining native metadata when present. Both expose Low through Max (including Xhigh); Default omits an explicit effort. Codex Sol's Ultra orchestration mode is not implemented. New task grants can explicitly include these models, but existing grants, GPT-5.6 Sol/Medium startup and Luna Reserve remain unchanged. A catalog entry is not proof of account access. See [compatibility scope and validation](docs/experiments/gpt6-sol-luna-compatibility.md).
80
77
 
81
- ```sh
82
- dsh plugin --profile web exec dsh-codex-connect status --json
83
- dsh plugin --profile web exec dsh-codex-connect doctor --json
84
- ```
78
+ All options below are off on a fresh installation. Edit them in **Settings → Plugins → Plugin configuration → Codex Connect** or **Settings → Models → Openai-Codex → More settings**, then select **Save changes**. A conflict or failed save preserves your draft.
85
79
 
86
- Expected result: `status --json` reports `signed-in` and exits `0`, while `doctor --json` prints one secret-free JSON document. A signed-out `status --json` exits `1`; return to step 4 instead of treating that as a plugin failure.
80
+ | Capability | Enable with | Important behavior |
81
+ |---|---|---|
82
+ | Proxy | `enableProxy` | Credential-free HTTP(S), scoped to this plugin's traffic, including compressed OAuth and quota responses. Unrelated Fetch calls retain the host's original transport. A failed proxy request does not silently retry directly. |
83
+ | Codex Search | `enableSearch` | Selects Codex for the entire profile's search route; disabling restores the previously active route. |
84
+ | Luna Reserve | `enableReserveFallback` | Uses the hidden Reserve route only when the backend explicitly authorizes it for the captured account; never changes global defaults or retries a generic `429`. |
85
+ | Image viewing | `enableImageTool` | Adds `view_image` to vision-capable models for local files and validated public HTTP(S) images. |
86
+ | GPT Image generation and editing | `enableImageGeneration` | Generate from a prompt or edit selected conversation images with ordered references. Availability, dimensions, and quota remain account- and service-controlled. |
87
+ | Auto-review | `enableAutoReview` | Sends bounded approval context, tool arguments, working directory, and the planned action to `chatgpt.com`, with confirmation on first enablement. Failures return to human approval. |
87
88
 
88
- ## Optional capabilities (off by default)
89
+ **Published experiment:** Alpha 4.35 includes Luna Reserve fallback, disabled by default. Real-account Reserve entry and recovery remain unverified; Alpha 4.34 does not include this feature.
89
90
 
90
- The installed bundle is intentionally inert beyond model-provider registration:
91
+ With `enableReserveFallback: true`, the account UI and agent routing share one identity-bound quota state. Background refresh follows the returned quota windows while recently in use; fresh state is reused across agent steps. Ordinary quota reads also share the cache, even with Reserve disabled. The plugin enters `gpt-reserve` only with complete, non-FedRAMP account/user identity and backend Luna Reserve authorization, then restores the session's previous model and reasoning effort after confirmed ordinary-usage recovery. Reserve has its own allowance, is hidden from the model picker, and is not unlimited. The backend decides eligibility; reset times alone do not authorize a switch. This version supports known `gpt-5.6-luna` metadata only. See [Luna Reserve fallback](docs/reference.md#luna-reserve-fallback) for refresh, identity, and verification limits.
91
92
 
92
- ```yaml
93
- - id: llm-openai-codex
94
- config:
95
- enableSearch: false
96
- enableImageTool: false
97
- ```
93
+ Use the image generation capability included with your current GPT subscription. Successful images appear below the conversation answer without opening its processing details; the original tool card remains available there. Generated originals are stored separately from attachment previews; disabling the capability or uninstalling the plugin does not delete them. See [Configuration and recovery](docs/reference.md#search-and-image-tools) for storage and access rules.
98
94
 
99
- Open **Settings → Plugins → Plugin configuration → Codex Connect** to manage the account and these options in one card. **Save changes** affects only this plugin's capability section and applies live. It never selects a default model or a global search route.
95
+ Alpha 4.49 fixes the re-uploaded-copy/original confusion and hidden safe failure reasons found in 4.48. Ambiguous inputs require an explicit selection rather than silently changing the target. The original package remains unchanged; Alpha 4.50 retains both repairs and adds exact DSH rc.2 compatibility while preserving rc.1. Do not mix rc.1 and rc.2 packages or bypass the plugin manager's version checks.
100
96
 
101
- ### Enable only the capability you intend to use
97
+ Auto-review operates after Harness policy requires approval; it does not bypass that policy. See [Auto-review behavior](docs/auto-review.md) before enabling it.
102
98
 
103
- - `enableSearch: true` registers Codex as an available search provider. It does not select the profile's global search route.
104
- - `enableImageTool: true` enables `view_image` for approved local reads and public-network image fetches on vision-capable models.
99
+ ## FAQ and important limits
105
100
 
106
- The screenshot below is an example after someone has explicitly enabled capabilities. It does not show the fresh-install default. This English guide uses the English-localized capture; the Chinese guide shows the matching Chinese-localized state.
101
+ ### Where are my credentials stored?
107
102
 
108
- <p align="center">
109
- <img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/plugin-configuration.jpg" alt="English-localized Codex Connect optional capability configuration after explicit opt-in" width="720">
110
- </p>
103
+ OAuth credentials are stored on the host running DSH and used there to authenticate and send requests to OpenAI. Normal browser account responses return account summaries, not raw tokens. A remote browser device is not necessarily the DSH host.
111
104
 
112
- ### Change a default model or global search route separately
105
+ ### Does uninstalling sign me out?
113
106
 
114
- To make a Codex model the default for new agents, add or update the separate Harness row yourself:
107
+ No. OAuth state is stored separately at `$DSH_HOME/.openai-codex-auth.json` (`~/.dsh` by default). The plugin does not copy or modify `~/.codex/auth.json`. Use **Sign out all accounts**, or `logout` before uninstalling, only when deleting credentials is intentional.
115
108
 
116
- ```yaml
117
- - id: agent-default-model
118
- config:
119
- provider: openai-codex
120
- model: gpt-5.6-sol
121
- ```
109
+ ### Can I switch accounts for different conversations?
122
110
 
123
- Selecting Codex as the profile's global search route is another explicit change:
111
+ Subsequent Codex requests use the selected active account; conversations do not bind their own accounts. Fast Mode is conversation-scoped. Cancelling a new authorization preserves existing accounts; an explicit revoked-refresh response asks for reauthorization, while temporary failures preserve the account for retry. See [Account behavior](docs/reference.md#accounts-models-and-quota).
124
112
 
125
- ```yaml
126
- - id: llm-openai-codex
127
- config:
128
- enableSearch: true
129
- searchMode: live
130
- searchContextSize: medium
113
+ ### Why does a listed model fail?
131
114
 
132
- - id: web
133
- config:
134
- searchProvider: openai-codex
135
- ```
115
+ Model HTTP/SSE failures include bounded, request-local diagnostic metadata after the existing error message. An `overloaded` message alone does not establish an account block. See [persistent-error diagnostics](docs/experiments/issue-219-diagnostics.md) for scope and reproduction.
136
116
 
137
- | Field | Default | Values |
138
- |---|---:|---|
139
- | `enableSearch` | `false` | boolean |
140
- | `enableImageTool` | `false` | boolean |
141
- | `searchModel` | `gpt-5.6-sol` | Codex model id |
142
- | `searchMode` | `cached` | `cached`, `indexed`, `live` |
143
- | `searchContextSize` | `medium` | `low`, `medium`, `high` |
144
- | `searchMaxOutputTokens` | `10000` | positive integer |
117
+ Account permissions, plugin/host compatibility, and network conditions all affect availability. Access on another client does not guarantee this integration will work. OpenAI controls model access, quota, context capacity, and service behavior; catalog entries are not proof of entitlement.
145
118
 
146
- ## Reauthentication, diagnostics, and conflicts
119
+ ### Does changing client headers prevent persistent authorization failures?
147
120
 
148
- - If the card says **Sign in again** or the server asks for reauthentication, click that action and complete the same safe browser flow. It preserves this plugin's capability settings and does not silently change your default model or global search route. Do not run `logout` just to renew a session.
149
- - `doctor` reads process and filesystem metadata only. `doctor --json` emits exactly one secret-free JSON document with schema version 1, package/version/Node metadata, credential-file state and safe mode, capabilities, conflict status, and hints. It omits the absolute credential path and OAuth, account, and expiry data.
150
- - `status --json` emits only signed-in or signed-out state with package metadata. `status --json` reads the credential only to determine sign-in state, but never prints credential contents or starts OAuth.
151
- - OAuth is stored separately at `$DSH_HOME/.openai-codex-auth.json` (`~/.dsh` by default). `~/.codex/auth.json` is never copied or modified. The parent directory and file use owner-only permissions where supported, writes are atomic, and refresh writes use a cross-process file lock.
152
- - By default, the OAuth routes accept loopback browser requests only. When DSH runs on one device and you open it from another device on a trusted network, approve the browser address-bar origin explicitly on the device that runs DSH:
121
+ No such guarantee is established. Codex Connect is a third-party integration; it does not impersonate Codex Desktop or fabricate installation/attestation headers. The pi-ai model/OAuth route and auxiliary routes currently identify themselves differently. OpenAI's [App Server documentation](https://developers.openai.com/codex/app-server/) asks integrations to identify their own client with `clientInfo`; it does not establish acceptance rules for this plugin's direct backend calls. An `overloaded` message is not proof of a block. Capture the bounded error metadata and compare successful and failed windows before attributing the cause; share request IDs privately, never tokens or full session archives.
153
122
 
154
- ```sh
155
- dsh plugin --profile web exec dsh-codex-connect trust-origin http://192.168.1.20:3080
156
- dsh plugin --profile web exec dsh-codex-connect trusted-origins
157
- dsh plugin --profile web exec dsh-codex-connect untrust-origin http://192.168.1.20:3080
158
- ```
123
+ ### Can I keep the original `dsh-codex` plugin installed?
159
124
 
160
- Replace the example with the exact origin from the browser address bar, including scheme and port; do not enter the accessing device's IP, a bare host, a path, a query, or a fragment. Trust only a network you control, never expose this route to the public Internet, and use an SSH tunnel as the fallback when explicit network trust is not appropriate. The browser page only displays and copies this command; it never changes the allowlist itself.
161
- - If startup reports an `openai-codex` collision, an old `dsh-codex` bundle or manual provider row may already own the adapter. Inspect the effective configuration and remove only the confirmed conflicting owner. Do not delete auth files or unrelated providers.
162
- - Removing the package does not delete OAuth state. Run `logout` only when credential removal is intended.
125
+ Not in the same effective configuration: both register `openai-codex`. Follow [MIGRATION.md](MIGRATION.md); remove only the confirmed conflicting entry, not credentials or unrelated providers.
163
126
 
164
- ## Compatibility and security boundary
127
+ ### What do diagnostics prove?
165
128
 
166
- - The only verified compatibility combination is DSH plugin API packages `0.1.0-rc.6`, `@earendil-works/pi-ai` `0.82.1`, and Node.js `^22.19.0 || >=24.0.0`; see [compatibility.json](compatibility.json).
167
- - Upgrade the DSH plugin API packages and `@earendil-works/pi-ai` as one group, then run `dsh-codex-connect doctor --json` and the compatibility check again. This contract does not make claims about future versions.
168
- - ChatGPT plan eligibility, model access, quotas, and backend behavior are controlled by OpenAI and may change.
169
- - The Codex endpoint does not enforce the ordinary Responses `max_output_tokens` field. Harness compaction still works, but that summary cap cannot be imposed server-side on this route.
170
- - Shell, filesystem, skills, MCP, subagents, approvals, permissions, attachments, session persistence, compaction, and recovery continue to come from the active Harness profile.
171
- - Remote `view_image` URLs are limited to public HTTP(S) destinations. Every DNS result and redirect is checked, and the connection is pinned to the validated address so localhost, private networks, link-local services, and cloud metadata endpoints remain unreachable.
172
- - No real OAuth operation is required for installation, build, tests, doctor, or package validation.
129
+ `doctor` is local. Capability and reviewer probes may make network requests and consume quota when their preconditions are met. `auto-review-probe` checks only the reviewer route and structured response, not the full Harness approval integration or execution of the reviewed action. Commands, limits, and exit codes are in the [diagnostics reference](docs/reference.md#capability-probes).
173
130
 
174
- See [INSTALL.md](INSTALL.md) for the idempotent agent runbook, [RELEASING.md](RELEASING.md) for the Alpha release checklist, [MIGRATION.md](MIGRATION.md) for migration from `dsh-codex`, and [docs/design.md](docs/design.md) for architecture details.
131
+ A missing entry in [verified-compatibility.json](verified-compatibility.json) means a DSH/plugin combination is unverified, not known to be broken. Do not infer support for newer hosts from an older pairing.
175
132
 
176
- ## Development
133
+ ## Documentation and development
134
+
135
+ - [Installation and upgrades](INSTALL.md)
136
+ - [Configuration, diagnostics, and recovery](docs/reference.md)
137
+ - [Local request metrics: enable, report, and disable](docs/request-metrics.md)
138
+ - [Migration from `dsh-codex`](MIGRATION.md)
139
+ - [Architecture and security details](docs/design.md)
140
+ - [Auto-review behavior](docs/auto-review.md)
141
+ - [Release runbook](RELEASING.md), [Contributing](CONTRIBUTING.md), and [Security policy](SECURITY.md)
177
142
 
178
143
  ```sh
179
144
  pnpm install --frozen-lockfile
180
145
  pnpm run check
146
+ pnpm run test:browser
147
+ pnpm run check:dsh-install
181
148
  ```
182
149
 
183
- ## Releases
184
-
185
- Maintainers publish alpha versions through the [manual OIDC release workflow](.github/workflows/release.yml); see the [alpha release runbook](RELEASING.md) for the separate, short-lived `latest` promotion step.
186
-
187
- ## Legal / Acknowledgements
150
+ `check` covers static checks, unit tests, build, compatibility, and packaging. `lint:metadata` checks package and release rules; `lint:source` checks host and browser TypeScript for unhandled or misused promises, invalid awaits, duplicate cases, and unreachable code. Browser regression and isolated DSH installation are separate commands. These checks use no real OAuth authorization and do not replace real-account acceptance.
188
151
 
189
- Copyright 2026 Frank Song for the modifications and additional work in Codex Connect. This project includes software derived from [Yan-Zero/dsh-codex](https://github.com/Yan-Zero/dsh-codex); Copyright 2026 Yan-Zero is retained for the upstream material. Both are distributed under Apache-2.0, with details in [NOTICE](NOTICE). This project is not affiliated with or endorsed by OpenAI, ChatGPT, Codex, DeepSeek, or DeepSeek Harness.
152
+ ## License and acknowledgements
190
153
 
191
- ## License
154
+ Copyright 2026 Frank Song for Codex Connect modifications and additional work. This project contains software derived from [Yan-Zero/dsh-codex](https://github.com/Yan-Zero/dsh-codex); Copyright 2026 Yan-Zero is retained for upstream material. Both are distributed under Apache-2.0; see [NOTICE](NOTICE).
192
155
 
193
- Apache-2.0
156
+ The next local candidate adds `gpt-6.1-sol` to the manual model catalog and configuration selector. It exposes Low, Medium, High, Xhigh and Max; Default omits effort, and Ultra orchestration is unsupported. Codex catalog defaults remain 272,000 tokens with an optional 872,000 local ceiling, not the API product window or proof of account access. See [metadata and validation](docs/agent-notes/gpt61-sol-support.md). No Adaptive Task grants are expanded.
package/VERSIONING.md ADDED
@@ -0,0 +1,67 @@
1
+ # Versioning policy
2
+
3
+ English | [中文](docs/VERSIONING.zh.md)
4
+
5
+ Codex Connect versions identify plugin releases independently of DeepSeek Harness. Show the plugin version and its verified DSH pairing together; do not infer one from the other.
6
+
7
+ ## Release identity and phase
8
+
9
+ The current release series starts at `0.2.0-alpha.1` and continues as `0.2.0-alpha.N`. This maintainer-approved numbering cleanup replaces the longer `0.1.0-alpha.4.x` sequence for new releases. It simplifies the independent plugin version; it does not narrow DSH compatibility, require a host upgrade, or promote the plugin to Beta or stable. Published versions and tags keep their original names and contents. A DSH update does not reset the plugin counter.
10
+
11
+ The publishing workflow accepts `MAJOR.MINOR.PATCH-alpha.NUMBER[.NUMBER…]`, with nonnegative integer components and no leading zeroes. Build metadata is not a release counter: SemVer ignores `+build.n` when comparing versions, and the pinned npm publishing implementation removes it. Use a distinct, higher-precedence version for every new package. Never overwrite a published package or move its release tag to different content.
12
+
13
+ The plugin's public behavior includes configuration, tools, commands, and stored data. In the `0.y.z` development period, incompatible changes require explicit release notes and migration guidance; intentionally starting a new incompatible release line increments the plugin minor version. Routine iterations within the current Alpha line increment its prerelease counter. Copying a host's version is not a substitute for deciding the plugin's change scope.
14
+
15
+ Alpha, Beta, RC, and a non-prerelease version describe the plugin's readiness, not DSH's. Phase promotion is a separate maintainer decision backed by recorded verification, including real-account and upgrade acceptance where relevant. A stable DSH release does not make the plugin stable. The current workflow remains Alpha-only; Beta, RC, and stable publishing need a separately reviewed workflow/channel change.
16
+
17
+ ## Compatibility evidence
18
+
19
+ | Information | Maintained in | Meaning |
20
+ |---|---|---|
21
+ | Plugin build version | `package.json.version` | Identity embedded in the build and CLI |
22
+ | Host dependency requirements | `compatibility.json` and dependency declarations | Intended supported runtime constraints, checked for consistency |
23
+ | Verified exact combinations | `verified-compatibility.json` | Evidence from checks of each explicit DSH/plugin pair |
24
+ | User-visible changes | GitHub Release notes and `update-highlights.json` | What changed between plugin releases |
25
+
26
+ Keep the compatibility catalog's `schemaVersion: 1`, `checkedAt`, `latestDshVersion`, and `pluginVersions[].{version,verifiedDshVersions}` fields at the existing URL. Preserve historical entries. An unlisted pair is unverified, not necessarily incompatible. Neither a target dependency nor a green test on a different pairing proves compatibility.
27
+
28
+ Record a new exact pair only after verification. A candidate's verification record does not prove npm publication. Before recommending it publicly, confirm both that the version exists on npm with its matching release tag and that the pair is recorded. The offline lint check verifies the recorded pair and bilingual agreement; it does not contact npm or certify publication.
29
+
30
+ Do not replace V1 in place with a version-keyed object or infer a range from a single successful version. Any future incompatible format needs a versioned endpoint and continued output for installed V1 clients.
31
+
32
+ ## Channels and recommendations
33
+
34
+ - `alpha` is the moving channel written by the current release workflow.
35
+ - `latest` is promoted separately and intentionally. Before the first stable release it may point to a verified Alpha; afterward it must point only to stable releases. Publishing an Alpha does not authorize or perform this promotion.
36
+ - Exact installation commands identify a plugin release; dist-tags do not guarantee compatibility.
37
+ - Keep the public README recommendation on a confirmed published pair while preparing a newer candidate. The recommendation may therefore differ from `package.json.version`.
38
+
39
+ The project newest version and the newest verified plugin for a user's existing DSH are different questions. More precise host-specific recommendations and generated installation sections are follow-up work; this policy does not claim the current update UI computes that choice from every historical record.
40
+
41
+ ## Update highlights
42
+
43
+ Keep V1 highlight entries in increasing SemVer order, with unique versions and known capability kinds. Preserve the existing history. New documentation-only or maintenance releases may be omitted; existing empty `highlights` arrays remain valid. Release notes still describe fixes. Do not invent capabilities or require a contiguous counter sequence just to validate the catalog.
44
+
45
+ ## Numbering migration to 0.2.0 Alpha
46
+
47
+ `0.2.0-alpha.1` sorts above every `0.1.0-alpha.4.x` release, including the last published `0.1.0-alpha.4.54`. Do not reset to `0.1.0-alpha.1`: it sorts below the historical series. The unshipped `0.1.0-alpha.4.55` candidate is replaced by this version and is not a published release.
48
+
49
+ The existing update checker compares both `alpha` and `latest` using SemVer, so it recognizes the new Alpha even while `latest` stays at `0.1.0-alpha.4.50`. It reports an update without installing it or upgrading DSH. Users can install the exact plugin version into their existing profile. Compatibility and highlight history keep their V1 formats; the four declared DSH targets remain `0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1`, and `0.2.0-rc.2`. Exact verification still precedes a new catalog entry.
50
+
51
+ Publication uses the existing Alpha-only workflow, protected environment, `v0.2.0-alpha.1` tag, GitHub prerelease, and npm `alpha` channel. It does not promote `latest`. Any later phase change still requires separate review of the gates and publication/readback path. Keep host upgrades, schema changes, and numbering migration separately reviewable.
52
+
53
+ ## Release checks
54
+
55
+ Follow [RELEASING.md](RELEASING.md) for the complete procedure. Run the frozen install and existing checks separately:
56
+
57
+ ```sh
58
+ pnpm install --frozen-lockfile
59
+ pnpm run check
60
+ pnpm run test:browser
61
+ pnpm run check:dsh-matrix
62
+ npm pack --dry-run
63
+ ```
64
+
65
+ `check` does not include the browser suite or isolated DSH installation. Regenerate the lockfile only when dependency changes require it; do not refresh the dependency tree for a documentation or localization release. Automated checks do not replace real OAuth acceptance. Merge, publish, and `latest` promotion remain distinct operations.
66
+
67
+ Normative references: [SemVer 2.0.0](https://semver.org/spec/v2.0.0.html) and the pinned [npm 11.6.4 publishing implementation](https://github.com/npm/cli/blob/v11.6.4/workspaces/libnpmpublish/lib/publish.js).
@@ -4,11 +4,22 @@
4
4
  "node": "^22.19.0 || >=24.0.0"
5
5
  },
6
6
  "dshPluginApi": {
7
- "version": "0.1.0-rc.6",
7
+ "version": "0.1.7-rc.1",
8
+ "versions": [
9
+ "0.1.7-rc.1",
10
+ "0.1.7-rc.2",
11
+ "0.2.0-rc.1",
12
+ "0.2.0-rc.2"
13
+ ],
8
14
  "packages": [
9
15
  "@deepseek-ai/dsh-agent",
10
16
  "@deepseek-ai/dsh-atomic-write",
11
17
  "@deepseek-ai/dsh-attachment",
18
+ "@deepseek-ai/dsh-client-ui-chat",
19
+ "@deepseek-ai/dsh-client-ui-layout",
20
+ "@deepseek-ai/dsh-client-ui-primitives",
21
+ "@deepseek-ai/dsh-client-ui-tool",
22
+ "@deepseek-ai/dsh-compaction",
12
23
  "@deepseek-ai/dsh-home-paths",
13
24
  "@deepseek-ai/dsh-host-webserver",
14
25
  "@deepseek-ai/dsh-invariants",
@@ -18,11 +29,12 @@
18
29
  "@deepseek-ai/dsh-session",
19
30
  "@deepseek-ai/dsh-settings",
20
31
  "@deepseek-ai/dsh-tools",
32
+ "@deepseek-ai/dsh-util-values",
21
33
  "@deepseek-ai/dsh-web"
22
34
  ]
23
35
  },
24
36
  "piAi": {
25
37
  "package": "@earendil-works/pi-ai",
26
- "version": "0.82.1"
38
+ "version": "0.85.1"
27
39
  }
28
40
  }
package/cordis.patch.yml CHANGED
@@ -4,5 +4,10 @@
4
4
  - id: llm-openai-codex
5
5
  name: dsh-codex-connect
6
6
  config:
7
+ enableProxy: false
7
8
  enableSearch: false
9
+ enableReserveFallback: false
10
+ enableNativeCompaction: false
8
11
  enableImageTool: false
12
+ enableImageGeneration: false
13
+ enableAutoReview: false