dsh-codex-subscription 2.2.3 → 2.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +3 -1
- package/README.md +3 -1
- package/compatibility.json +3 -2
- package/lib/client.js +333 -54
- package/lib/index.js +128 -17
- package/package.json +36 -36
package/README.en.md
CHANGED
|
@@ -35,8 +35,10 @@ Subscription access, model controls, quota management, and image creation in one
|
|
|
35
35
|
| **Reasoning levels** | Choose supported reasoning effort in the composer | Levels vary by model |
|
|
36
36
|
| **Fast mode** | Switch supported models between Standard and Fast, with a lightning indicator | Standard by default; Fast increases usage |
|
|
37
37
|
| **Response verbosity** | Request short, medium, or detailed responses | Follows the model default unless changed |
|
|
38
|
+
| **Input image detail** | Choose Low, High, Original, or Auto detail for images sent to the chat model | Affects input tokens; Auto by default |
|
|
38
39
|
| **Subscription web search** | Use Codex search or choose DSH search | Auto, DSH, and Codex routing options |
|
|
39
40
|
| **Search scope** | Choose live / cached search, disable search, or restrict domains | Configure under Models & runtime |
|
|
41
|
+
| **Stream inactivity timeout** | Set how long a request can receive no streamed data before it is aborted | 10 minutes by default; not an overall response deadline |
|
|
40
42
|
| **Context budget** | Use standard, extended, or custom budgets per model | Limited by the model catalog |
|
|
41
43
|
| **GPT-Reserve** | Select the reserve model when your account offers it | Experimental; no promise of a separate reserve quota |
|
|
42
44
|
|
|
@@ -85,7 +87,7 @@ Subscription access, model controls, quota management, and image creation in one
|
|
|
85
87
|
|
|
86
88
|
## Prepare DSH
|
|
87
89
|
|
|
88
|
-
Compatible with DSH `0.
|
|
90
|
+
Compatible with DSH `0.2.0-rc.1` plugin compatibility checks and settings APIs, while retaining support for previously supported versions.
|
|
89
91
|
|
|
90
92
|
This plugin supports the latest DeepSeek Harness release recorded in its package metadata and requires a ChatGPT account that currently has Codex access.
|
|
91
93
|
|
package/README.md
CHANGED
|
@@ -35,8 +35,10 @@
|
|
|
35
35
|
| **推理等级** | 在输入框选择模型支持的推理档位 | 档位随模型变化 |
|
|
36
36
|
| **高速模式** | 在支持的模型上切换标准 / Fast,输入框显示闪电标识 | 默认标准;Fast 会增加用量消耗 |
|
|
37
37
|
| **输出详略** | 选择简短、适中或详细的回答偏好 | 默认跟随模型 |
|
|
38
|
+
| **输入图片精度** | 为发送给聊天模型的图片选择低、高、原图或自动精度 | 影响输入 token 用量;默认自动 |
|
|
38
39
|
| **订阅联网搜索** | 使用 Codex 搜索,或选择 DSH 搜索 | 可选自动、DSH、Codex 路由 |
|
|
39
40
|
| **搜索范围** | 选择实时 / 缓存搜索、关闭搜索,或限定域名 | 在模型与运行中设置 |
|
|
41
|
+
| **流无响应超时** | 设置连续没有收到流式数据时中断请求的时长 | 默认 10 分钟;不是整体回答时限 |
|
|
40
42
|
| **上下文预算** | 按模型使用标准、扩展或自定义上下文预算 | 受模型目录上限约束 |
|
|
41
43
|
| **GPT-Reserve** | 在账号开放时选择备用模型入口 | 实验性;不承诺独立备用额度 |
|
|
42
44
|
|
|
@@ -85,7 +87,7 @@
|
|
|
85
87
|
|
|
86
88
|
## 准备 DSH
|
|
87
89
|
|
|
88
|
-
已适配 DSH `0.
|
|
90
|
+
已适配 DSH `0.2.0-rc.1` 的插件兼容性检查与设置接口,同时保留已支持版本的兼容。
|
|
89
91
|
|
|
90
92
|
本插件支持软件包元数据中记录的最新版 DeepSeek Harness,并需要一个当前具有 Codex 使用资格的 ChatGPT 账户。
|
|
91
93
|
|
package/compatibility.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"latestTested": "0.
|
|
2
|
+
"latestTested": "0.2.0-rc.1",
|
|
3
3
|
"supported": [
|
|
4
4
|
"0.1.2-rc.1",
|
|
5
5
|
"0.1.5-rc.1",
|
|
6
6
|
"0.1.5-rc.2",
|
|
7
7
|
"0.1.5-rc.3",
|
|
8
8
|
"0.1.7-rc.1",
|
|
9
|
-
"0.1.7-rc.2"
|
|
9
|
+
"0.1.7-rc.2",
|
|
10
|
+
"0.2.0-rc.1"
|
|
10
11
|
],
|
|
11
12
|
"previews": [
|
|
12
13
|
"0.1.5-alpha.1",
|
package/lib/client.js
CHANGED
|
@@ -3298,7 +3298,7 @@ window.__ModuleLoader__.load({
|
|
|
3298
3298
|
const expire = () => {
|
|
3299
3299
|
clear();
|
|
3300
3300
|
generation++;
|
|
3301
|
-
if (state
|
|
3301
|
+
if (state === "drawing") update("failed");
|
|
3302
3302
|
};
|
|
3303
3303
|
return {
|
|
3304
3304
|
get state() {
|
|
@@ -4627,19 +4627,37 @@ window.__ModuleLoader__.load({
|
|
|
4627
4627
|
//#endregion
|
|
4628
4628
|
//#region src/client-locales.js
|
|
4629
4629
|
const zh = {
|
|
4630
|
+
"diagnosticsSnapshotTime": "报告快照时间:",
|
|
4631
|
+
"diagnosticsUnresolved": "仍有其他未恢复的失败记录,见上方摘要。",
|
|
4632
|
+
"diagnosticSeverity_warning": "需关注",
|
|
4633
|
+
"diagnosticSeverity_info": "信息",
|
|
4634
|
+
"diagnosticNext_restart": "重启后重新生成报告;若版本仍不一致,检查插件更新是否生效。",
|
|
4635
|
+
"diagnosticNext_regenerate": "复现问题后立即重新生成报告;若仍不完整,连同操作步骤反馈。",
|
|
4636
|
+
"diagnosticNext_supported-options": "继续使用当前可选档位即可;新增能力需要适配验证,不建议手动填入未知参数。",
|
|
4637
|
+
"diagnosticNext_reproduce": "核对下列操作与时间是否对应你的问题;若持续失败,反馈操作步骤和本报告。",
|
|
4638
|
+
"diagnosticFinding_evidence-truncated": "部分旧记录或宿主作用域未包含在快照中,报告不能覆盖全部历史。",
|
|
4639
|
+
"diagnosticsNoRecordedFailure": "当前记录未发现失败;未执行的功能仍未验证。",
|
|
4640
|
+
"diagnosticFinding_version-mismatch": "前后端版本不一致,请重启 DSH 后重新生成报告。",
|
|
4641
|
+
"diagnosticFinding_collection-incomplete": "部分检查未能完成,请查看详情中的失败或超时项。",
|
|
4642
|
+
"diagnosticFinding_catalog-gap": "在线模型目录包含当前适配层尚未支持的档位或能力;不代表模型不可用。",
|
|
4643
|
+
"diagnosticFinding_recent-failure": "最近 15 分钟有操作或请求失败,且同一操作尚无后续成功记录。请结合发生时间查看详情。",
|
|
4644
|
+
"diagnosticReason_no-readiness-check": "无独立前置检查",
|
|
4645
|
+
"diagnosticReason_inspection-failed": "检查未完成",
|
|
4646
|
+
"diagnosticReason_inspection-timeout": "检查超时",
|
|
4647
|
+
"diagnosticSource_network": "网络请求(非完整回复)",
|
|
4630
4648
|
"diagnosticReason_catalog-online": "在线目录已载入",
|
|
4631
4649
|
"diagnosticReason_catalog-fallback": "使用备用目录",
|
|
4632
4650
|
"diagnosticReason_storage-readable": "预测缓存可读",
|
|
4633
4651
|
"diagnosticReason_tool-registered": "全局工具已注册",
|
|
4634
4652
|
"diagnosticReason_tool-missing": "未找到全局工具",
|
|
4635
|
-
"diagnosticsCoverageHint": "
|
|
4653
|
+
"diagnosticsCoverageHint": "分别展示前置条件与最近 15 分钟的进程级证据;不限定当前账号或会话。接口响应、网络请求和工具结果不能替代完整功能验收。",
|
|
4636
4654
|
"diagnosticsVersionMismatch": "前后端插件版本不同,请重载后重试。",
|
|
4637
4655
|
"diagnosticsPartial": "部分信息未能采集,其余检查结果已保留。请在详情中查看失败或超时项。",
|
|
4638
4656
|
"diagnosticsCapability": "功能",
|
|
4639
4657
|
"diagnosticsReadiness": "前置条件",
|
|
4640
4658
|
"diagnosticsEvidence": "近期操作证据",
|
|
4641
4659
|
"diagnosticsUnverified": "尚未验证",
|
|
4642
|
-
"diagnosticsHostCollected": "
|
|
4660
|
+
"diagnosticsHostCollected": "已采集宿主注册与选中结果。registrant 是宿主标签,可能被压缩,不能据此识别插件或判断干扰。",
|
|
4643
4661
|
"diagnosticsHostUnknown": "宿主界面检查不可用或未挂载,不能据此判断插件干扰。",
|
|
4644
4662
|
"diagnosticsDetails": "展开脱敏详情",
|
|
4645
4663
|
"diagnosticsCopyFailed": "复制失败,可展开详情手动复制。",
|
|
@@ -4706,11 +4724,24 @@ window.__ModuleLoader__.load({
|
|
|
4706
4724
|
compaction_cloud: "开启",
|
|
4707
4725
|
compactionHint: "实验功能,默认关闭。长上下文由 Codex 压缩后继续请求,保留 DSH 历史与原生压缩。开启时该请求使用 SSE;历史改变后重新建立压缩状态。",
|
|
4708
4726
|
advancedModelSearch: "模型与搜索",
|
|
4727
|
+
inputImageDetail: "输入图片精度",
|
|
4728
|
+
inputImageDetailHint: "控制发送给模型的图片精度,精度越高输入 token 用量越大。",
|
|
4729
|
+
inputImageDetail_auto: "自动",
|
|
4730
|
+
inputImageDetail_low: "低",
|
|
4731
|
+
inputImageDetail_high: "高",
|
|
4732
|
+
inputImageDetail_original: "原图",
|
|
4709
4733
|
subagentBackendTitle: "独立子任务",
|
|
4710
4734
|
subagentBackend_dsh: "DSH",
|
|
4711
4735
|
subagentBackend_codex: "Codex",
|
|
4712
4736
|
connectionTitle: "连接方式",
|
|
4713
4737
|
connectionHint: "默认 SSE。WebSocket 实验性复用连接与上下文传输;连接失败可回退 SSE。下次请求生效,不扩大上下文容量。",
|
|
4738
|
+
streamIdleTimeoutTitle: "流无响应超时",
|
|
4739
|
+
streamIdleTimeoutHint: "连续多久没有收到任何流式数据时中断本次请求,不是整体回答时限。调低可能中断较慢但仍在推理的回答,并交由 DSH 重试处理。默认 10 分钟。",
|
|
4740
|
+
streamIdleTimeout_2: "2 分钟",
|
|
4741
|
+
streamIdleTimeout_5: "5 分钟",
|
|
4742
|
+
streamIdleTimeout_10: "10 分钟",
|
|
4743
|
+
streamIdleTimeout_20: "20 分钟",
|
|
4744
|
+
streamIdleTimeout_30: "30 分钟",
|
|
4714
4745
|
subagentBackendHint: "Codex 复用订阅登录和工作区权限;默认继承当前订阅模型。开启 DSH 子任务模型选择并新建会话后,可在聊天中指定允许的订阅模型与推理档位;非订阅会话需指定。共享上下文子任务仍用 DSH。",
|
|
4715
4746
|
subagentBackendUnavailable: "当前宿主缺少子代理服务,请更新 DSH。",
|
|
4716
4747
|
subagentRuntimeMissing: "尚未准备 Codex 子任务运行时,仅影响此选项。普通订阅对话无需安装。",
|
|
@@ -4998,6 +5029,7 @@ window.__ModuleLoader__.load({
|
|
|
4998
5029
|
unlimited: "不限额",
|
|
4999
5030
|
monthlyCreditLimit: "Credits 月度消费上限",
|
|
5000
5031
|
resetCredits: "额度重置",
|
|
5032
|
+
resetCreditsAvailable: "额度重置(可用 {count} 次)",
|
|
5001
5033
|
resetCreditDefaultName: "额度重置",
|
|
5002
5034
|
resetUse: "使用",
|
|
5003
5035
|
resetPreparing: "准备中…",
|
|
@@ -5143,19 +5175,37 @@ window.__ModuleLoader__.load({
|
|
|
5143
5175
|
imageRemoveAnnotation: "删除标注"
|
|
5144
5176
|
};
|
|
5145
5177
|
const en = {
|
|
5178
|
+
"diagnosticsSnapshotTime": "Report captured at:",
|
|
5179
|
+
"diagnosticsUnresolved": "Other failures remain without a later success; see the summary.",
|
|
5180
|
+
"diagnosticSeverity_warning": "Attention",
|
|
5181
|
+
"diagnosticSeverity_info": "Information",
|
|
5182
|
+
"diagnosticNext_restart": "Restart and regenerate. If versions still differ, check that the plugin update took effect.",
|
|
5183
|
+
"diagnosticNext_regenerate": "Regenerate immediately after reproducing. If collection remains incomplete, include the steps with your report.",
|
|
5184
|
+
"diagnosticNext_supported-options": "Keep using supported choices. New capabilities need adapter validation; do not insert unknown parameters manually.",
|
|
5185
|
+
"diagnosticNext_reproduce": "Match the operations and timestamps below to your problem. If failures persist, provide reproduction steps and this report.",
|
|
5186
|
+
"diagnosticFinding_evidence-truncated": "Older records or additional host scopes are omitted. This snapshot does not cover the entire history.",
|
|
5187
|
+
"diagnosticsNoRecordedFailure": "No failure in the current records; unused features remain unverified.",
|
|
5188
|
+
"diagnosticFinding_version-mismatch": "Client and server versions differ. Restart DSH and regenerate the report.",
|
|
5189
|
+
"diagnosticFinding_collection-incomplete": "Some checks could not finish. Inspect failed or timed-out collectors in the details.",
|
|
5190
|
+
"diagnosticFinding_catalog-gap": "The online catalog contains capabilities not supported by this adapter. This does not mean the model is unavailable.",
|
|
5191
|
+
"diagnosticFinding_recent-failure": "An operation or request failed within 15 minutes without a later success for the same operation. Inspect its timestamp and details.",
|
|
5192
|
+
"diagnosticReason_no-readiness-check": "No independent prerequisite check",
|
|
5193
|
+
"diagnosticReason_inspection-failed": "Check incomplete",
|
|
5194
|
+
"diagnosticReason_inspection-timeout": "Check timed out",
|
|
5195
|
+
"diagnosticSource_network": "Network request (not full reply)",
|
|
5146
5196
|
"diagnosticReason_catalog-online": "Online catalog loaded",
|
|
5147
5197
|
"diagnosticReason_catalog-fallback": "Fallback catalog",
|
|
5148
5198
|
"diagnosticReason_storage-readable": "Forecast cache readable",
|
|
5149
5199
|
"diagnosticReason_tool-registered": "Global tool registered",
|
|
5150
5200
|
"diagnosticReason_tool-missing": "Global tool not found",
|
|
5151
|
-
"diagnosticsCoverageHint": "Shows
|
|
5201
|
+
"diagnosticsCoverageHint": "Shows prerequisites and process-wide evidence from the last 15 minutes, not limited to this account or session. RPC, network and tool outcomes are not end-to-end validation.",
|
|
5152
5202
|
"diagnosticsVersionMismatch": "Client and server versions differ. Reload and retry.",
|
|
5153
5203
|
"diagnosticsPartial": "Some inspections failed or timed out. Other results are preserved; see details.",
|
|
5154
5204
|
"diagnosticsCapability": "Capability",
|
|
5155
5205
|
"diagnosticsReadiness": "Prerequisites",
|
|
5156
5206
|
"diagnosticsEvidence": "Recent evidence",
|
|
5157
5207
|
"diagnosticsUnverified": "Unverified",
|
|
5158
|
-
"diagnosticsHostCollected": "Host registrations and selection are included
|
|
5208
|
+
"diagnosticsHostCollected": "Host registrations and selection are included. Registrant labels may be minified; they do not identify packages or prove interference.",
|
|
5159
5209
|
"diagnosticsHostUnknown": "Host inspection unavailable or unmounted; interference cannot be determined.",
|
|
5160
5210
|
"diagnosticsDetails": "Redacted details",
|
|
5161
5211
|
"diagnosticsCopyFailed": "Copy failed. Expand the details to copy manually.",
|
|
@@ -5222,11 +5272,24 @@ window.__ModuleLoader__.load({
|
|
|
5222
5272
|
compaction_cloud: "On",
|
|
5223
5273
|
compactionHint: "Experimental, off by default. Codex compacts long requests while DSH history and native compaction remain available. These requests use SSE; changed history invalidates previous checkpoints.",
|
|
5224
5274
|
advancedModelSearch: "Models and search",
|
|
5275
|
+
inputImageDetail: "Input image detail",
|
|
5276
|
+
inputImageDetailHint: "Controls the detail level of images sent to the model. Higher detail uses more input tokens.",
|
|
5277
|
+
inputImageDetail_auto: "Auto",
|
|
5278
|
+
inputImageDetail_low: "Low",
|
|
5279
|
+
inputImageDetail_high: "High",
|
|
5280
|
+
inputImageDetail_original: "Original",
|
|
5225
5281
|
subagentBackendTitle: "Independent subtasks",
|
|
5226
5282
|
subagentBackend_dsh: "DSH",
|
|
5227
5283
|
subagentBackend_codex: "Codex",
|
|
5228
5284
|
connectionTitle: "Connection",
|
|
5229
5285
|
connectionHint: "SSE by default. Experimental WebSocket reuses connections and context transfers and can fall back to SSE on connection failure. Applies to the next request; context limits stay the same.",
|
|
5286
|
+
streamIdleTimeoutTitle: "Stream inactivity timeout",
|
|
5287
|
+
streamIdleTimeoutHint: "How long a request may receive no streamed data before it is aborted. This is not an overall response deadline. Lower values can abort slow but valid reasoning and hand the request to DSH retry handling. Default: 10 minutes.",
|
|
5288
|
+
streamIdleTimeout_2: "2 min",
|
|
5289
|
+
streamIdleTimeout_5: "5 min",
|
|
5290
|
+
streamIdleTimeout_10: "10 min",
|
|
5291
|
+
streamIdleTimeout_20: "20 min",
|
|
5292
|
+
streamIdleTimeout_30: "30 min",
|
|
5230
5293
|
subagentBackendHint: "Codex reuses subscription login and workspace permissions, inheriting the current subscription model by default. Enable DSH subtask model selection and start a new session to request an allowed subscription model and reasoning effort in chat; other model sessions require an explicit selection. Shared-context subtasks stay in DSH.",
|
|
5231
5294
|
subagentBackendUnavailable: "Subagent services are unavailable. Update DSH to use this option.",
|
|
5232
5295
|
subagentRuntimeMissing: "Codex subtask runtime is not prepared. Subscription chat does not require it.",
|
|
@@ -5514,6 +5577,7 @@ window.__ModuleLoader__.load({
|
|
|
5514
5577
|
unlimited: "Unlimited",
|
|
5515
5578
|
monthlyCreditLimit: "Monthly Credits spending cap",
|
|
5516
5579
|
resetCredits: "Quota resets",
|
|
5580
|
+
resetCreditsAvailable: "Quota resets ({count} available)",
|
|
5517
5581
|
resetCreditDefaultName: "Quota reset",
|
|
5518
5582
|
resetUse: "Use",
|
|
5519
5583
|
resetPreparing: "Preparing…",
|
|
@@ -5787,11 +5851,15 @@ window.__ModuleLoader__.load({
|
|
|
5787
5851
|
.codexSubscriptionCreditBalance strong{font:600 18px/24px ui-monospace,SFMono-Regular,Consolas,monospace;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
|
|
5788
5852
|
.codexSubscriptionCreditRows{display:flex;flex-direction:column;gap:6px}
|
|
5789
5853
|
.codexSubscriptionResetMeta{display:flex;min-width:0;flex-direction:column;gap:1px}
|
|
5854
|
+
.codexSubscriptionResetDisclosure>summary{cursor:pointer;width:fit-content;color:var(--dsw-alias-label-primary);border-radius:6px}
|
|
5855
|
+
.codexSubscriptionResetDisclosure>summary:focus-visible{outline:2px solid currentColor;outline-offset:4px}
|
|
5856
|
+
.codexSubscriptionResetDisclosure[open]>summary{margin-bottom:10px}
|
|
5790
5857
|
.codexSubscriptionResetBalance{display:flex;flex-direction:column;gap:8px}
|
|
5791
5858
|
.codexSubscriptionResetCard{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0;padding:9px 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-module-platform)}
|
|
5792
|
-
.codexSubscriptionResetCard
|
|
5859
|
+
.codexSubscriptionResetCard{flex-wrap:wrap}
|
|
5860
|
+
.codexSubscriptionResetCard .codexSubscriptionResetMeta{flex:1 1 180px}
|
|
5861
|
+
.codexSubscriptionResetCard .codexSubscriptionActions{width:auto;flex:0 0 auto}
|
|
5793
5862
|
.codexSubscriptionResetCard strong{overflow:hidden;font-size:12px;line-height:18px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}
|
|
5794
|
-
.codexSubscriptionResetCard .codexSubscriptionActions{flex:0 0 auto}
|
|
5795
5863
|
.codexSubscriptionResetCard .codexSubscriptionResetUse{min-height:28px;padding:0 10px}
|
|
5796
5864
|
.codexSubscriptionResetBalance .codexSubscriptionActions{justify-content:flex-start}
|
|
5797
5865
|
.codexSubscriptionResetFlow{display:flex;flex-direction:column;gap:10px;border-top:1px solid var(--dsw-alias-border-l2);padding-top:10px}
|
|
@@ -6958,6 +7026,22 @@ window.__ModuleLoader__.load({
|
|
|
6958
7026
|
const OUTPUT_VERBOSITY_MEDIUM = "medium";
|
|
6959
7027
|
const OUTPUT_VERBOSITY_HIGH = "high";
|
|
6960
7028
|
const DEFAULT_OUTPUT_VERBOSITY = OUTPUT_VERBOSITY_DEFAULT;
|
|
7029
|
+
const INPUT_IMAGE_DETAIL_FIELD = "inputImageDetail";
|
|
7030
|
+
const INPUT_IMAGE_DETAILS = Object.freeze([
|
|
7031
|
+
"low",
|
|
7032
|
+
"high",
|
|
7033
|
+
"original",
|
|
7034
|
+
"auto"
|
|
7035
|
+
]);
|
|
7036
|
+
const DEFAULT_INPUT_IMAGE_DETAIL = "auto";
|
|
7037
|
+
const STREAM_IDLE_TIMEOUT_MINUTES_FIELD = "streamIdleTimeoutMinutes";
|
|
7038
|
+
const STREAM_IDLE_TIMEOUT_MINUTES = Object.freeze([
|
|
7039
|
+
2,
|
|
7040
|
+
5,
|
|
7041
|
+
10,
|
|
7042
|
+
20,
|
|
7043
|
+
30
|
|
7044
|
+
]);
|
|
6961
7045
|
const CONTEXT_MODE_FIELD = "contextMode";
|
|
6962
7046
|
const CONTEXT_MODE_STANDARD = "standard";
|
|
6963
7047
|
const CONTEXT_MODE_EXTENDED = "extended";
|
|
@@ -7000,6 +7084,8 @@ window.__ModuleLoader__.load({
|
|
|
7000
7084
|
"medium",
|
|
7001
7085
|
"high"
|
|
7002
7086
|
].includes(value) ? value : DEFAULT_OUTPUT_VERBOSITY;
|
|
7087
|
+
const normalizeInputImageDetail = (value) => INPUT_IMAGE_DETAILS.includes(value) ? value : DEFAULT_INPUT_IMAGE_DETAIL;
|
|
7088
|
+
const normalizeStreamIdleTimeoutMinutes = (value) => STREAM_IDLE_TIMEOUT_MINUTES.includes(value) ? value : 10;
|
|
7003
7089
|
const normalizeSpeedMode = (value) => ["standard", "fast"].includes(value) ? value : DEFAULT_SPEED_MODE;
|
|
7004
7090
|
const normalizeContextMode = (value) => [
|
|
7005
7091
|
"standard",
|
|
@@ -7070,6 +7156,8 @@ window.__ModuleLoader__.load({
|
|
|
7070
7156
|
searchProvider: normalizeSearchProvider(value?.[SEARCH_PROVIDER_FIELD]),
|
|
7071
7157
|
speedMode: normalizeSpeedMode(value?.[SPEED_MODE_FIELD]),
|
|
7072
7158
|
outputVerbosity: normalizeOutputVerbosity(value?.[OUTPUT_VERBOSITY_FIELD]),
|
|
7159
|
+
inputImageDetail: normalizeInputImageDetail(value?.[INPUT_IMAGE_DETAIL_FIELD]),
|
|
7160
|
+
streamIdleTimeoutMinutes: normalizeStreamIdleTimeoutMinutes(value?.[STREAM_IDLE_TIMEOUT_MINUTES_FIELD]),
|
|
7073
7161
|
contextMode: normalizeContextMode(value?.[CONTEXT_MODE_FIELD]),
|
|
7074
7162
|
customContextWindow: normalizeCustomContextWindow(value?.[CUSTOM_CONTEXT_WINDOW_FIELD]),
|
|
7075
7163
|
customContextWindows: {
|
|
@@ -7120,6 +7208,8 @@ window.__ModuleLoader__.load({
|
|
|
7120
7208
|
[SEARCH_PROVIDER_FIELD]: normalizeSearchProvider(value?.[SEARCH_PROVIDER_FIELD]),
|
|
7121
7209
|
[SPEED_MODE_FIELD]: normalizeSpeedMode(value?.[SPEED_MODE_FIELD]),
|
|
7122
7210
|
[OUTPUT_VERBOSITY_FIELD]: normalizeOutputVerbosity(value?.[OUTPUT_VERBOSITY_FIELD]),
|
|
7211
|
+
[INPUT_IMAGE_DETAIL_FIELD]: normalizeInputImageDetail(value?.[INPUT_IMAGE_DETAIL_FIELD]),
|
|
7212
|
+
[STREAM_IDLE_TIMEOUT_MINUTES_FIELD]: normalizeStreamIdleTimeoutMinutes(value?.[STREAM_IDLE_TIMEOUT_MINUTES_FIELD]),
|
|
7123
7213
|
[CONTEXT_MODE_FIELD]: normalizeContextMode(value?.[CONTEXT_MODE_FIELD]),
|
|
7124
7214
|
[CUSTOM_CONTEXT_WINDOW_FIELD]: normalizeCustomContextWindow(value?.[CUSTOM_CONTEXT_WINDOW_FIELD]),
|
|
7125
7215
|
...Object.fromEntries(Object.entries(CUSTOM_CONTEXT_MODEL_FIELDS).map(([modelKey, field]) => [field, normalizeCustomContextWindow(value?.[field] ?? CUSTOM_CONTEXT_MODEL_DEFAULTS[modelKey], CUSTOM_CONTEXT_MODEL_CAPS[modelKey])]))
|
|
@@ -7533,7 +7623,7 @@ window.__ModuleLoader__.load({
|
|
|
7533
7623
|
}
|
|
7534
7624
|
//#endregion
|
|
7535
7625
|
//#region src/version.js
|
|
7536
|
-
const PACKAGE_VERSION = "2.2.
|
|
7626
|
+
const PACKAGE_VERSION = "2.2.5";
|
|
7537
7627
|
//#endregion
|
|
7538
7628
|
//#region src/client-recovery.js
|
|
7539
7629
|
async function recoveryCall(rpc, endpoint, payload = {}, timeoutMs = 1e4) {
|
|
@@ -8702,6 +8792,76 @@ window.__ModuleLoader__.load({
|
|
|
8702
8792
|
})]
|
|
8703
8793
|
});
|
|
8704
8794
|
}
|
|
8795
|
+
function InputImageDetailPreference({ preference, t }) {
|
|
8796
|
+
const snapshot = usePreferenceSnapshot(preference);
|
|
8797
|
+
const writable = snapshot.status === "ready" && snapshot.writable === true;
|
|
8798
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8799
|
+
className: "codexSubscriptionPreference",
|
|
8800
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8801
|
+
className: "codexSubscriptionPreferenceCopy",
|
|
8802
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8803
|
+
className: "codexSubscriptionPreferenceLabel",
|
|
8804
|
+
children: t("inputImageDetail")
|
|
8805
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8806
|
+
className: "codexSubscriptionPreferenceHint",
|
|
8807
|
+
children: t("inputImageDetailHint")
|
|
8808
|
+
})]
|
|
8809
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8810
|
+
className: "codexSubscriptionQuotaModes",
|
|
8811
|
+
"data-saving": snapshot.saving || void 0,
|
|
8812
|
+
"aria-busy": snapshot.saving || void 0,
|
|
8813
|
+
role: "radiogroup",
|
|
8814
|
+
"aria-label": t("inputImageDetail"),
|
|
8815
|
+
children: INPUT_IMAGE_DETAILS.map((value) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
8816
|
+
className: "codexSubscriptionQuotaMode",
|
|
8817
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8818
|
+
type: "radio",
|
|
8819
|
+
name: "codex-input-image-detail",
|
|
8820
|
+
checked: snapshot.inputImageDetail === value,
|
|
8821
|
+
disabled: !writable,
|
|
8822
|
+
onChange: () => {
|
|
8823
|
+
preference.set({ [INPUT_IMAGE_DETAIL_FIELD]: value });
|
|
8824
|
+
}
|
|
8825
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t(`inputImageDetail_${value}`) })]
|
|
8826
|
+
}, value))
|
|
8827
|
+
})]
|
|
8828
|
+
});
|
|
8829
|
+
}
|
|
8830
|
+
function StreamIdleTimeoutPreference({ preference, t }) {
|
|
8831
|
+
const snapshot = usePreferenceSnapshot(preference);
|
|
8832
|
+
const writable = snapshot.status === "ready" && snapshot.writable === true;
|
|
8833
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8834
|
+
className: "codexSubscriptionPreference",
|
|
8835
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8836
|
+
className: "codexSubscriptionPreferenceCopy",
|
|
8837
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8838
|
+
className: "codexSubscriptionPreferenceLabel",
|
|
8839
|
+
children: t("streamIdleTimeoutTitle")
|
|
8840
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8841
|
+
className: "codexSubscriptionPreferenceHint",
|
|
8842
|
+
children: t("streamIdleTimeoutHint")
|
|
8843
|
+
})]
|
|
8844
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8845
|
+
className: "codexSubscriptionQuotaModes",
|
|
8846
|
+
"data-saving": snapshot.saving || void 0,
|
|
8847
|
+
"aria-busy": snapshot.saving || void 0,
|
|
8848
|
+
role: "radiogroup",
|
|
8849
|
+
"aria-label": t("streamIdleTimeoutTitle"),
|
|
8850
|
+
children: STREAM_IDLE_TIMEOUT_MINUTES.map((value) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
8851
|
+
className: "codexSubscriptionQuotaMode",
|
|
8852
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8853
|
+
type: "radio",
|
|
8854
|
+
name: "codex-stream-idle-timeout",
|
|
8855
|
+
checked: snapshot.streamIdleTimeoutMinutes === value,
|
|
8856
|
+
disabled: !writable,
|
|
8857
|
+
onChange: () => {
|
|
8858
|
+
preference.set({ [STREAM_IDLE_TIMEOUT_MINUTES_FIELD]: value });
|
|
8859
|
+
}
|
|
8860
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t(`streamIdleTimeout_${value}`) })]
|
|
8861
|
+
}, value))
|
|
8862
|
+
})]
|
|
8863
|
+
});
|
|
8864
|
+
}
|
|
8705
8865
|
function ContextWindowPreference({ preference, t }) {
|
|
8706
8866
|
const snapshot = usePreferenceSnapshot(preference);
|
|
8707
8867
|
const writable = snapshot.status === "ready" && snapshot.writable === true;
|
|
@@ -8880,46 +9040,58 @@ window.__ModuleLoader__.load({
|
|
|
8880
9040
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ContextWindowPreference, {
|
|
8881
9041
|
preference,
|
|
8882
9042
|
t
|
|
9043
|
+
}),
|
|
9044
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "codexSubscriptionDivider" }),
|
|
9045
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(InputImageDetailPreference, {
|
|
9046
|
+
preference,
|
|
9047
|
+
t
|
|
8883
9048
|
})
|
|
8884
9049
|
]
|
|
8885
9050
|
}),
|
|
8886
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
9051
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
8887
9052
|
className: "codexSubscriptionCard codexSubscriptionPreferencesCard",
|
|
8888
9053
|
"aria-label": t("connectionTitle"),
|
|
8889
|
-
children:
|
|
8890
|
-
|
|
8891
|
-
|
|
8892
|
-
|
|
8893
|
-
|
|
8894
|
-
|
|
8895
|
-
|
|
8896
|
-
|
|
8897
|
-
|
|
8898
|
-
|
|
8899
|
-
|
|
8900
|
-
|
|
8901
|
-
|
|
8902
|
-
|
|
9054
|
+
children: [
|
|
9055
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
9056
|
+
className: "codexSubscriptionPreference",
|
|
9057
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
9058
|
+
className: "codexSubscriptionPreferenceCopy",
|
|
9059
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
9060
|
+
className: "codexSubscriptionPreferenceLabel",
|
|
9061
|
+
children: [
|
|
9062
|
+
t("connectionTitle"),
|
|
9063
|
+
" ",
|
|
9064
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: "Beta" })
|
|
9065
|
+
]
|
|
9066
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
9067
|
+
className: "codexSubscriptionPreferenceHint",
|
|
9068
|
+
children: t("connectionHint")
|
|
9069
|
+
})]
|
|
9070
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
9071
|
+
className: "codexSubscriptionQuotaModes",
|
|
9072
|
+
role: "radiogroup",
|
|
9073
|
+
"aria-label": t("connectionTitle"),
|
|
9074
|
+
"aria-busy": snapshot.saving || void 0,
|
|
9075
|
+
children: ["sse", "websocket"].map((value) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
9076
|
+
className: "codexSubscriptionQuotaMode",
|
|
9077
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
9078
|
+
type: "radio",
|
|
9079
|
+
name: "codex-connection-mode",
|
|
9080
|
+
checked: snapshot.connectionMode === value,
|
|
9081
|
+
disabled: !snapshot.writable,
|
|
9082
|
+
onChange: () => {
|
|
9083
|
+
preference.set({ connectionMode: value });
|
|
9084
|
+
}
|
|
9085
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: value === "sse" ? "SSE" : "WebSocket" })]
|
|
9086
|
+
}, value))
|
|
8903
9087
|
})]
|
|
8904
|
-
}),
|
|
8905
|
-
|
|
8906
|
-
|
|
8907
|
-
|
|
8908
|
-
|
|
8909
|
-
|
|
8910
|
-
|
|
8911
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8912
|
-
type: "radio",
|
|
8913
|
-
name: "codex-connection-mode",
|
|
8914
|
-
checked: snapshot.connectionMode === value,
|
|
8915
|
-
disabled: !snapshot.writable,
|
|
8916
|
-
onChange: () => {
|
|
8917
|
-
preference.set({ connectionMode: value });
|
|
8918
|
-
}
|
|
8919
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: value === "sse" ? "SSE" : "WebSocket" })]
|
|
8920
|
-
}, value))
|
|
8921
|
-
})]
|
|
8922
|
-
})
|
|
9088
|
+
}),
|
|
9089
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "codexSubscriptionDivider" }),
|
|
9090
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(StreamIdleTimeoutPreference, {
|
|
9091
|
+
preference,
|
|
9092
|
+
t
|
|
9093
|
+
})
|
|
9094
|
+
]
|
|
8923
9095
|
}),
|
|
8924
9096
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
|
|
8925
9097
|
className: "codexSubscriptionCard codexSubscriptionPreferencesCard",
|
|
@@ -9512,6 +9684,89 @@ window.__ModuleLoader__.load({
|
|
|
9512
9684
|
]
|
|
9513
9685
|
});
|
|
9514
9686
|
}
|
|
9687
|
+
const areas = {
|
|
9688
|
+
catalog: "models",
|
|
9689
|
+
quota: "quota",
|
|
9690
|
+
search: "search",
|
|
9691
|
+
image: "images",
|
|
9692
|
+
model: "transport",
|
|
9693
|
+
login: "account",
|
|
9694
|
+
"quota-reset": "quota"
|
|
9695
|
+
};
|
|
9696
|
+
function diagnosticEvidence({ operations, history }, now) {
|
|
9697
|
+
return [...(operations?.events ?? []).map((e) => ({
|
|
9698
|
+
capability: e.capability,
|
|
9699
|
+
action: e.action,
|
|
9700
|
+
source: e.source,
|
|
9701
|
+
status: e.status,
|
|
9702
|
+
observedAt: e.observedAt
|
|
9703
|
+
})), ...(history?.events ?? []).map((e) => ({
|
|
9704
|
+
capability: areas[e.area],
|
|
9705
|
+
action: e.area,
|
|
9706
|
+
source: "network",
|
|
9707
|
+
status: e.status === "ok" ? "completed" : "failed",
|
|
9708
|
+
observedAt: e.observedAt
|
|
9709
|
+
}))].filter((e) => Number.isSafeInteger(e.observedAt) && now >= e.observedAt && now - e.observedAt <= 9e5).sort((a, b) => a.observedAt - b.observedAt);
|
|
9710
|
+
}
|
|
9711
|
+
function unresolvedFailures(events) {
|
|
9712
|
+
const failed = /* @__PURE__ */ new Map();
|
|
9713
|
+
for (const event of events) {
|
|
9714
|
+
const key = `${event.source}:${event.action}`;
|
|
9715
|
+
if (event.status === "failed") failed.set(key, event);
|
|
9716
|
+
else if (event.status === "completed") failed.delete(key);
|
|
9717
|
+
}
|
|
9718
|
+
return [...failed.values()];
|
|
9719
|
+
}
|
|
9720
|
+
//#endregion
|
|
9721
|
+
//#region src/diagnostic-summary.js
|
|
9722
|
+
function diagnosticSummary(report, now = Date.now()) {
|
|
9723
|
+
const findings = [];
|
|
9724
|
+
const checks = [...report.inspection?.checks ?? [], ...report.client?.checks ?? []];
|
|
9725
|
+
if (report.version && report.client?.version && report.version !== report.client.version) findings.push({
|
|
9726
|
+
code: "version-mismatch",
|
|
9727
|
+
severity: "warning",
|
|
9728
|
+
next: "restart",
|
|
9729
|
+
evidence: ["version", "client.version"]
|
|
9730
|
+
});
|
|
9731
|
+
if (!report.inspection || report.client?.status === "unknown" || checks.some((check) => ["inspection-failed", "inspection-timeout"].includes(check.reason))) findings.push({
|
|
9732
|
+
code: "collection-incomplete",
|
|
9733
|
+
severity: "warning",
|
|
9734
|
+
next: "regenerate",
|
|
9735
|
+
evidence: checks.filter((c) => c.status === "unknown").map((c) => c.id)
|
|
9736
|
+
});
|
|
9737
|
+
if (report.catalog?.unsupported?.length) findings.push({
|
|
9738
|
+
code: "catalog-gap",
|
|
9739
|
+
severity: "info",
|
|
9740
|
+
next: "supported-options",
|
|
9741
|
+
evidence: ["catalog.unsupported"]
|
|
9742
|
+
});
|
|
9743
|
+
const capturedAt = Date.parse(report.generatedAt);
|
|
9744
|
+
const failures = unresolvedFailures(diagnosticEvidence({
|
|
9745
|
+
operations: report.operations,
|
|
9746
|
+
history: report.requestHistory
|
|
9747
|
+
}, Number.isFinite(capturedAt) ? capturedAt : now));
|
|
9748
|
+
if (failures.length) findings.push({
|
|
9749
|
+
code: "recent-failure",
|
|
9750
|
+
severity: "warning",
|
|
9751
|
+
next: "reproduce",
|
|
9752
|
+
evidence: failures
|
|
9753
|
+
});
|
|
9754
|
+
if ((report.requestHistory?.dropped ?? 0) + (report.operations?.dropped ?? 0) > 0 || report.client?.truncated) findings.push({
|
|
9755
|
+
code: "evidence-truncated",
|
|
9756
|
+
severity: "info",
|
|
9757
|
+
next: "regenerate",
|
|
9758
|
+
evidence: [
|
|
9759
|
+
"requestHistory.dropped",
|
|
9760
|
+
"operations.dropped",
|
|
9761
|
+
"client.truncated"
|
|
9762
|
+
]
|
|
9763
|
+
});
|
|
9764
|
+
return {
|
|
9765
|
+
scope: "recorded-evidence-only",
|
|
9766
|
+
findings,
|
|
9767
|
+
unverified: (report.inspection?.capabilities ?? []).filter((c) => c.execution === "not-verified" && c.readiness !== "not-applicable").length
|
|
9768
|
+
};
|
|
9769
|
+
}
|
|
9515
9770
|
//#endregion
|
|
9516
9771
|
//#region src/client-diagnostics.jsx
|
|
9517
9772
|
function DiagnosticsCard({ rpc, t, diagnostics }) {
|
|
@@ -9527,9 +9782,13 @@ window.__ModuleLoader__.load({
|
|
|
9527
9782
|
setCopyError(false);
|
|
9528
9783
|
Promise.allSettled([recoveryCall(rpc, "diagnostics"), Promise.resolve().then(() => diagnostics?.collect())]).then(([server, client]) => {
|
|
9529
9784
|
setError(server.status === "rejected");
|
|
9530
|
-
|
|
9785
|
+
const combined = {
|
|
9531
9786
|
...server.status === "fulfilled" ? server.value : clientDiagnostic(server.reason),
|
|
9532
9787
|
client: client.status === "fulfilled" && client.value ? client.value : { status: "unknown" }
|
|
9788
|
+
};
|
|
9789
|
+
setReport({
|
|
9790
|
+
...combined,
|
|
9791
|
+
summary: diagnosticSummary(combined)
|
|
9533
9792
|
});
|
|
9534
9793
|
}).finally(() => setBusy(false));
|
|
9535
9794
|
};
|
|
@@ -9580,14 +9839,33 @@ window.__ModuleLoader__.load({
|
|
|
9580
9839
|
className: "codexSubscriptionHelp",
|
|
9581
9840
|
children: t("diagnosticsCoverageHint")
|
|
9582
9841
|
}),
|
|
9583
|
-
report.
|
|
9584
|
-
|
|
9585
|
-
children:
|
|
9842
|
+
report.generatedAt ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
9843
|
+
className: "codexSubscriptionHelp",
|
|
9844
|
+
children: [
|
|
9845
|
+
t("diagnosticsSnapshotTime"),
|
|
9846
|
+
" ",
|
|
9847
|
+
new Date(report.generatedAt).toLocaleString()
|
|
9848
|
+
]
|
|
9586
9849
|
}) : null,
|
|
9587
|
-
|
|
9850
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
9588
9851
|
role: "status",
|
|
9589
|
-
children:
|
|
9590
|
-
|
|
9852
|
+
children: report.summary?.findings.length ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", { children: report.summary.findings.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [
|
|
9853
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t(`diagnosticSeverity_${item.severity}`) }),
|
|
9854
|
+
" · ",
|
|
9855
|
+
t(`diagnosticFinding_${item.code}`),
|
|
9856
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
9857
|
+
className: "codexSubscriptionHelp",
|
|
9858
|
+
children: t(`diagnosticNext_${item.next}`)
|
|
9859
|
+
}),
|
|
9860
|
+
item.code === "recent-failure" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", { children: item.evidence.map((event) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [
|
|
9861
|
+
event.action,
|
|
9862
|
+
" · ",
|
|
9863
|
+
t(`diagnosticSource_${event.source}`),
|
|
9864
|
+
" · ",
|
|
9865
|
+
new Date(event.observedAt).toLocaleTimeString()
|
|
9866
|
+
] }, `${event.source}:${event.action}`)) }) : null
|
|
9867
|
+
] }, item.code)) }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("diagnosticsNoRecordedFailure") })
|
|
9868
|
+
}),
|
|
9591
9869
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("table", {
|
|
9592
9870
|
style: {
|
|
9593
9871
|
width: "100%",
|
|
@@ -9602,7 +9880,7 @@ window.__ModuleLoader__.load({
|
|
|
9602
9880
|
] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tbody", { children: (report.inspection?.capabilities ?? []).map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
|
|
9603
9881
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: t(`diagnosticCapability_${item.id}`) }),
|
|
9604
9882
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("td", { children: [t(`diagnosticReason_${item.reason}`), item.blockedBy ? ` · ${t(`diagnosticCapability_${item.blockedBy}`)}` : ""] }),
|
|
9605
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
9883
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("td", { children: [item.latest ? `${item.latest.action} · ${t(`diagnosticSource_${item.latest.source}`)} · ${t(`diagnosticOutcome_${item.latest.status}`)} · ${new Date(item.latest.observedAt).toLocaleTimeString()}` : t("diagnosticsUnverified"), item.unresolved?.length ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("diagnosticsUnresolved") }) : null] })
|
|
9606
9884
|
] }, item.id)) })]
|
|
9607
9885
|
}),
|
|
9608
9886
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
@@ -10082,9 +10360,9 @@ window.__ModuleLoader__.load({
|
|
|
10082
10360
|
className: "codexSubscriptionCreditBalance",
|
|
10083
10361
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("creditsBalance") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: visibleUsage.credits.unlimited ? t("unlimited") : `${visibleUsage.credits.balance ?? t("unavailable")} ${t("creditsUnit")}` })]
|
|
10084
10362
|
}) : null,
|
|
10085
|
-
visibleUsage?.resetCredits?.availableCount > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("
|
|
10086
|
-
className: "codexSubscriptionCreditBalance",
|
|
10087
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("
|
|
10363
|
+
visibleUsage?.resetCredits?.availableCount > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
|
|
10364
|
+
className: "codexSubscriptionCreditBalance codexSubscriptionResetDisclosure",
|
|
10365
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", { children: fill(t("resetCreditsAvailable"), { count: visibleUsage.resetCredits.availableCount }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ResetCreditList, {
|
|
10088
10366
|
rpc,
|
|
10089
10367
|
t,
|
|
10090
10368
|
count: visibleUsage.resetCredits.availableCount,
|
|
@@ -10352,7 +10630,8 @@ window.__ModuleLoader__.load({
|
|
|
10352
10630
|
declared: !!node,
|
|
10353
10631
|
truncated: occupants.length > 16,
|
|
10354
10632
|
occupants: occupants.slice(0, 16).map((value) => ({
|
|
10355
|
-
|
|
10633
|
+
registrant: typeof value.registrant === "string" && packageName.test(value.registrant) ? value.registrant : "unknown",
|
|
10634
|
+
identity: "unverified-host-label",
|
|
10356
10635
|
active: value.active === true
|
|
10357
10636
|
}))
|
|
10358
10637
|
};
|
package/lib/index.js
CHANGED
|
@@ -211,6 +211,22 @@ const OUTPUT_VERBOSITY_DEFAULT = "default";
|
|
|
211
211
|
const OUTPUT_VERBOSITY_MEDIUM = "medium";
|
|
212
212
|
const OUTPUT_VERBOSITY_HIGH = "high";
|
|
213
213
|
const DEFAULT_OUTPUT_VERBOSITY = OUTPUT_VERBOSITY_DEFAULT;
|
|
214
|
+
const INPUT_IMAGE_DETAIL_FIELD = "inputImageDetail";
|
|
215
|
+
const INPUT_IMAGE_DETAILS = Object.freeze([
|
|
216
|
+
"low",
|
|
217
|
+
"high",
|
|
218
|
+
"original",
|
|
219
|
+
"auto"
|
|
220
|
+
]);
|
|
221
|
+
const DEFAULT_INPUT_IMAGE_DETAIL = "auto";
|
|
222
|
+
const STREAM_IDLE_TIMEOUT_MINUTES_FIELD = "streamIdleTimeoutMinutes";
|
|
223
|
+
const STREAM_IDLE_TIMEOUT_MINUTES = Object.freeze([
|
|
224
|
+
2,
|
|
225
|
+
5,
|
|
226
|
+
10,
|
|
227
|
+
20,
|
|
228
|
+
30
|
|
229
|
+
]);
|
|
214
230
|
const CONTEXT_MODE_FIELD = "contextMode";
|
|
215
231
|
const CONTEXT_MODE_STANDARD = "standard";
|
|
216
232
|
const CONTEXT_MODE_EXTENDED = "extended";
|
|
@@ -248,6 +264,8 @@ const normalizeOutputVerbosity = (value) => [
|
|
|
248
264
|
"medium",
|
|
249
265
|
"high"
|
|
250
266
|
].includes(value) ? value : DEFAULT_OUTPUT_VERBOSITY;
|
|
267
|
+
const normalizeInputImageDetail = (value) => INPUT_IMAGE_DETAILS.includes(value) ? value : DEFAULT_INPUT_IMAGE_DETAIL;
|
|
268
|
+
const normalizeStreamIdleTimeoutMinutes = (value) => STREAM_IDLE_TIMEOUT_MINUTES.includes(value) ? value : 10;
|
|
251
269
|
const normalizeContextMode = (value) => [
|
|
252
270
|
"standard",
|
|
253
271
|
"extended",
|
|
@@ -358,6 +376,16 @@ const PREFERENCE_FIELDS = Object.freeze({
|
|
|
358
376
|
default: DEFAULT_OUTPUT_VERBOSITY,
|
|
359
377
|
error: "Invalid output verbosity preference"
|
|
360
378
|
},
|
|
379
|
+
[INPUT_IMAGE_DETAIL_FIELD]: {
|
|
380
|
+
choices: INPUT_IMAGE_DETAILS,
|
|
381
|
+
default: DEFAULT_INPUT_IMAGE_DETAIL,
|
|
382
|
+
error: "Invalid input image detail preference"
|
|
383
|
+
},
|
|
384
|
+
[STREAM_IDLE_TIMEOUT_MINUTES_FIELD]: {
|
|
385
|
+
choices: STREAM_IDLE_TIMEOUT_MINUTES,
|
|
386
|
+
default: 10,
|
|
387
|
+
error: "Invalid stream idle timeout preference"
|
|
388
|
+
},
|
|
361
389
|
[CONTEXT_MODE_FIELD]: {
|
|
362
390
|
choices: [
|
|
363
391
|
CONTEXT_MODE_STANDARD,
|
|
@@ -370,7 +398,7 @@ const PREFERENCE_FIELDS = Object.freeze({
|
|
|
370
398
|
});
|
|
371
399
|
//#endregion
|
|
372
400
|
//#region src/diagnostic-events.js
|
|
373
|
-
const areas = /* @__PURE__ */ new Set([
|
|
401
|
+
const areas$1 = /* @__PURE__ */ new Set([
|
|
374
402
|
"login",
|
|
375
403
|
"model",
|
|
376
404
|
"catalog",
|
|
@@ -394,7 +422,7 @@ function createDiagnosticEvents({ limit = 32, now = Date.now } = {}) {
|
|
|
394
422
|
let dropped = 0, sequence = 0;
|
|
395
423
|
return {
|
|
396
424
|
record(area, value) {
|
|
397
|
-
if (!areas.has(area) || !["ok", "failed"].includes(value?.status)) return;
|
|
425
|
+
if (!areas$1.has(area) || !["ok", "failed"].includes(value?.status)) return;
|
|
398
426
|
events.push({
|
|
399
427
|
sequence: ++sequence,
|
|
400
428
|
area,
|
|
@@ -1164,7 +1192,8 @@ const SUPPORTED_RUNTIME_VERSIONS = Object.freeze([
|
|
|
1164
1192
|
"0.1.5-rc.2",
|
|
1165
1193
|
"0.1.5-rc.3",
|
|
1166
1194
|
"0.1.7-rc.1",
|
|
1167
|
-
"0.1.7-rc.2"
|
|
1195
|
+
"0.1.7-rc.2",
|
|
1196
|
+
"0.2.0-rc.1"
|
|
1168
1197
|
]);
|
|
1169
1198
|
const require = createRequire(import.meta.url);
|
|
1170
1199
|
const execute = promisify(execFile);
|
|
@@ -2812,6 +2841,34 @@ function normalizeTransportEvent(event, signal) {
|
|
|
2812
2841
|
//#endregion
|
|
2813
2842
|
//#region src/pi-ai-runtime.js
|
|
2814
2843
|
const FAST_SERVICE_TIER = "priority";
|
|
2844
|
+
/** Apply the chosen detail to user and tool-result images after the provider assembles the request. */
|
|
2845
|
+
function withInputImageDetail(payload, detail) {
|
|
2846
|
+
if (!Array.isArray(payload.input)) return payload;
|
|
2847
|
+
let changed = false;
|
|
2848
|
+
const input = payload.input.map((item) => {
|
|
2849
|
+
const field = Array.isArray(item?.content) ? "content" : ["function_call_output", "custom_tool_call_output"].includes(item?.type) && Array.isArray(item.output) ? "output" : void 0;
|
|
2850
|
+
if (field === void 0) return item;
|
|
2851
|
+
let itemChanged = false;
|
|
2852
|
+
const parts = item[field].map((part) => {
|
|
2853
|
+
if (part?.type !== "input_image" || part.detail === detail) return part;
|
|
2854
|
+
itemChanged = true;
|
|
2855
|
+
return {
|
|
2856
|
+
...part,
|
|
2857
|
+
detail
|
|
2858
|
+
};
|
|
2859
|
+
});
|
|
2860
|
+
if (!itemChanged) return item;
|
|
2861
|
+
changed = true;
|
|
2862
|
+
return {
|
|
2863
|
+
...item,
|
|
2864
|
+
[field]: parts
|
|
2865
|
+
};
|
|
2866
|
+
});
|
|
2867
|
+
return changed ? {
|
|
2868
|
+
...payload,
|
|
2869
|
+
input
|
|
2870
|
+
} : payload;
|
|
2871
|
+
}
|
|
2815
2872
|
/**
|
|
2816
2873
|
* Preserve pi-ai's native Codex OAuth provider while allowing DSH's generic
|
|
2817
2874
|
* PiAiAdapter to pass the access token resolved by the host credential store.
|
|
@@ -2824,7 +2881,7 @@ const FAST_SERVICE_TIER = "priority";
|
|
|
2824
2881
|
* persistence, headers, transport, and model behavior remain owned by the
|
|
2825
2882
|
* original provider.
|
|
2826
2883
|
*/
|
|
2827
|
-
function openaiCodexSubscriptionProvider({ resolveSpeedMode = () => void 0, resolveOutputVerbosity = () => OUTPUT_VERBOSITY_DEFAULT, resolveContextMode = () => void 0, resolveCustomContextWindow = () => void 0, catalog, connection, compaction, runNetwork = (_area, operation) => operation() } = {}) {
|
|
2884
|
+
function openaiCodexSubscriptionProvider({ resolveSpeedMode = () => void 0, resolveOutputVerbosity = () => OUTPUT_VERBOSITY_DEFAULT, resolveInputImageDetail = () => void 0, resolveContextMode = () => void 0, resolveCustomContextWindow = () => void 0, catalog, connection, compaction, runNetwork = (_area, operation) => operation() } = {}) {
|
|
2828
2885
|
const provider = createOpenAICodexProvider();
|
|
2829
2886
|
const requestToken = Object.freeze({
|
|
2830
2887
|
name: "DSH-managed Codex OAuth request token",
|
|
@@ -2844,6 +2901,7 @@ function openaiCodexSubscriptionProvider({ resolveSpeedMode = () => void 0, reso
|
|
|
2844
2901
|
const requestedVerbosity = resolveOutputVerbosity();
|
|
2845
2902
|
const textVerbosity = supportsVerbosity(model) ? requestedVerbosity === "default" ? metadata?.defaultVerbosity ?? "medium" : requestedVerbosity : void 0;
|
|
2846
2903
|
const fast = resolveSpeedMode() === "fast" && (metadata?.supportsFast ?? supportsCodexFastMode(model?.id));
|
|
2904
|
+
const inputImageDetail = normalizeInputImageDetail(resolveInputImageDetail());
|
|
2847
2905
|
const onPayload = options.onPayload;
|
|
2848
2906
|
return {
|
|
2849
2907
|
...options,
|
|
@@ -2860,10 +2918,11 @@ function openaiCodexSubscriptionProvider({ resolveSpeedMode = () => void 0, reso
|
|
|
2860
2918
|
};
|
|
2861
2919
|
const managed = compaction?.preparePayload(preferred, model?.contextWindow) ?? preferred;
|
|
2862
2920
|
const next = await onPayload?.(managed, requestModel);
|
|
2921
|
+
const detailed = inputImageDetail === "auto" ? next ?? managed : withInputImageDetail(next ?? managed, inputImageDetail);
|
|
2863
2922
|
return {
|
|
2864
|
-
...
|
|
2923
|
+
...detailed,
|
|
2865
2924
|
...textVerbosity === void 0 ? {} : { text: {
|
|
2866
|
-
...
|
|
2925
|
+
...detailed.text ?? {},
|
|
2867
2926
|
verbosity: textVerbosity
|
|
2868
2927
|
} },
|
|
2869
2928
|
...fast ? { service_tier: FAST_SERVICE_TIER } : {}
|
|
@@ -2951,7 +3010,7 @@ async function readSubscriptionCredentials(getAuth, readCredential, signal) {
|
|
|
2951
3010
|
}
|
|
2952
3011
|
//#endregion
|
|
2953
3012
|
//#region src/version.js
|
|
2954
|
-
const PACKAGE_VERSION = "2.2.
|
|
3013
|
+
const PACKAGE_VERSION = "2.2.5";
|
|
2955
3014
|
const USER_AGENT = `dsh-codex-subscription/${PACKAGE_VERSION}`;
|
|
2956
3015
|
//#endregion
|
|
2957
3016
|
//#region src/model-catalog.js
|
|
@@ -4059,9 +4118,42 @@ const diagnosticCapabilities = Object.freeze([
|
|
|
4059
4118
|
"storage",
|
|
4060
4119
|
"host-ui"
|
|
4061
4120
|
]);
|
|
4121
|
+
const areas = {
|
|
4122
|
+
catalog: "models",
|
|
4123
|
+
quota: "quota",
|
|
4124
|
+
search: "search",
|
|
4125
|
+
image: "images",
|
|
4126
|
+
model: "transport",
|
|
4127
|
+
login: "account",
|
|
4128
|
+
"quota-reset": "quota"
|
|
4129
|
+
};
|
|
4130
|
+
function diagnosticEvidence({ operations, history }, now) {
|
|
4131
|
+
return [...(operations?.events ?? []).map((e) => ({
|
|
4132
|
+
capability: e.capability,
|
|
4133
|
+
action: e.action,
|
|
4134
|
+
source: e.source,
|
|
4135
|
+
status: e.status,
|
|
4136
|
+
observedAt: e.observedAt
|
|
4137
|
+
})), ...(history?.events ?? []).map((e) => ({
|
|
4138
|
+
capability: areas[e.area],
|
|
4139
|
+
action: e.area,
|
|
4140
|
+
source: "network",
|
|
4141
|
+
status: e.status === "ok" ? "completed" : "failed",
|
|
4142
|
+
observedAt: e.observedAt
|
|
4143
|
+
}))].filter((e) => Number.isSafeInteger(e.observedAt) && now >= e.observedAt && now - e.observedAt <= 9e5).sort((a, b) => a.observedAt - b.observedAt);
|
|
4144
|
+
}
|
|
4145
|
+
function unresolvedFailures(events) {
|
|
4146
|
+
const failed = /* @__PURE__ */ new Map();
|
|
4147
|
+
for (const event of events) {
|
|
4148
|
+
const key = `${event.source}:${event.action}`;
|
|
4149
|
+
if (event.status === "failed") failed.set(key, event);
|
|
4150
|
+
else if (event.status === "completed") failed.delete(key);
|
|
4151
|
+
}
|
|
4152
|
+
return [...failed.values()];
|
|
4153
|
+
}
|
|
4062
4154
|
//#endregion
|
|
4063
4155
|
//#region src/diagnostic-capabilities.js
|
|
4064
|
-
function capabilityCoverage({ account, preference, runtime, catalog, tools, storage, checks, operations, now = Date.now() }) {
|
|
4156
|
+
function capabilityCoverage({ account, preference, runtime, catalog, tools, storage, checks, operations, history, now = Date.now() }) {
|
|
4065
4157
|
const disabled = {
|
|
4066
4158
|
images: preference.imageGeneration === false && preference.imageEditing === false,
|
|
4067
4159
|
sketch: preference.imageSketch === false || preference.imageEditing === false,
|
|
@@ -4069,8 +4161,12 @@ function capabilityCoverage({ account, preference, runtime, catalog, tools, stor
|
|
|
4069
4161
|
compaction: preference.compactionMode === "dsh",
|
|
4070
4162
|
subagents: preference.subagentBackend === "dsh"
|
|
4071
4163
|
};
|
|
4164
|
+
const observed = diagnosticEvidence({
|
|
4165
|
+
operations,
|
|
4166
|
+
history
|
|
4167
|
+
}, now);
|
|
4072
4168
|
return diagnosticCapabilities.map((id) => {
|
|
4073
|
-
let readiness = "unknown", reason = "
|
|
4169
|
+
let readiness = "unknown", reason = "no-readiness-check", blockedBy;
|
|
4074
4170
|
if (disabled[id]) {
|
|
4075
4171
|
readiness = "not-applicable";
|
|
4076
4172
|
reason = "disabled-or-host-owned";
|
|
@@ -4103,14 +4199,20 @@ function capabilityCoverage({ account, preference, runtime, catalog, tools, stor
|
|
|
4103
4199
|
readiness = tools[id] ? "pass" : "warn";
|
|
4104
4200
|
reason = tools[id] ? "tool-registered" : "tool-missing";
|
|
4105
4201
|
}
|
|
4106
|
-
const
|
|
4202
|
+
const evidence = observed.filter((event) => event.capability === id || id === "transport" && event.source === "network");
|
|
4203
|
+
const failures = unresolvedFailures(evidence);
|
|
4204
|
+
const recent = evidence.at(-1);
|
|
4205
|
+
const relatedChecks = checks.filter((check) => check.capability === id || ["images", "sketch"].includes(id) && check.id === "tools");
|
|
4206
|
+
const collectionIssue = relatedChecks.find((check) => ["inspection-failed", "inspection-timeout"].includes(check.reason));
|
|
4207
|
+
if (collectionIssue && readiness === "unknown") reason = collectionIssue.reason;
|
|
4107
4208
|
return {
|
|
4108
4209
|
id,
|
|
4109
4210
|
readiness,
|
|
4110
4211
|
reason,
|
|
4111
4212
|
...blockedBy ? { blockedBy } : {},
|
|
4112
|
-
checks:
|
|
4213
|
+
checks: relatedChecks.map((check) => check.id),
|
|
4113
4214
|
execution: recent ? "observed" : "not-verified",
|
|
4215
|
+
...failures.length ? { unresolved: failures } : {},
|
|
4114
4216
|
...recent ? { latest: {
|
|
4115
4217
|
action: recent.action,
|
|
4116
4218
|
source: recent.source,
|
|
@@ -4417,7 +4519,8 @@ async function createSubscriptionDiagnostics({ auth, preferences, login = { phas
|
|
|
4417
4519
|
tools: collected.tools,
|
|
4418
4520
|
storage: collected.storage,
|
|
4419
4521
|
checks,
|
|
4420
|
-
operations: collected.operations
|
|
4522
|
+
operations: collected.operations,
|
|
4523
|
+
history: collected.history
|
|
4421
4524
|
})
|
|
4422
4525
|
},
|
|
4423
4526
|
package: "dsh-codex-subscription",
|
|
@@ -5846,6 +5949,7 @@ function apply(ctx, config = {}) {
|
|
|
5846
5949
|
compaction,
|
|
5847
5950
|
resolveSpeedMode: () => settings.get()[SPEED_MODE_FIELD],
|
|
5848
5951
|
resolveOutputVerbosity: () => normalizeOutputVerbosity(settings.get()[OUTPUT_VERBOSITY_FIELD]),
|
|
5952
|
+
resolveInputImageDetail: () => settings.get()[INPUT_IMAGE_DETAIL_FIELD],
|
|
5849
5953
|
resolveContextMode: () => normalizeContextMode(settings.get()[CONTEXT_MODE_FIELD]),
|
|
5850
5954
|
resolveCustomContextWindow: (modelKey) => {
|
|
5851
5955
|
const overrides = readCapabilitySettings(settings.get())[CUSTOM_CONTEXT_OVERRIDES_FIELD];
|
|
@@ -5870,6 +5974,8 @@ function apply(ctx, config = {}) {
|
|
|
5870
5974
|
[SEARCH_PROVIDER_FIELD]: settings.get()[SEARCH_PROVIDER_FIELD],
|
|
5871
5975
|
[SPEED_MODE_FIELD]: settings.get()[SPEED_MODE_FIELD],
|
|
5872
5976
|
[OUTPUT_VERBOSITY_FIELD]: normalizeOutputVerbosity(settings.get()[OUTPUT_VERBOSITY_FIELD]),
|
|
5977
|
+
[INPUT_IMAGE_DETAIL_FIELD]: normalizeInputImageDetail(settings.get()[INPUT_IMAGE_DETAIL_FIELD]),
|
|
5978
|
+
[STREAM_IDLE_TIMEOUT_MINUTES_FIELD]: normalizeStreamIdleTimeoutMinutes(settings.get()[STREAM_IDLE_TIMEOUT_MINUTES_FIELD]),
|
|
5873
5979
|
[CONTEXT_MODE_FIELD]: normalizeContextMode(settings.get()[CONTEXT_MODE_FIELD]),
|
|
5874
5980
|
[CUSTOM_CONTEXT_WINDOW_FIELD]: normalizeCustomContextWindow(settings.get()[CUSTOM_CONTEXT_WINDOW_FIELD]),
|
|
5875
5981
|
...Object.fromEntries(Object.entries(CUSTOM_CONTEXT_MODEL_FIELDS).map(([modelKey, field]) => [field, normalizeCustomContextWindow(settings.get()[field] ?? CUSTOM_CONTEXT_MODEL_DEFAULTS[modelKey], CUSTOM_CONTEXT_MODEL_CAPS[modelKey])])),
|
|
@@ -5897,7 +6003,6 @@ function apply(ctx, config = {}) {
|
|
|
5897
6003
|
piProvider: provider,
|
|
5898
6004
|
configuredMaxTokens: /* @__PURE__ */ new Map(),
|
|
5899
6005
|
modelErrors: /* @__PURE__ */ new Map(),
|
|
5900
|
-
streamIdleTimeoutMs: 600 * 1e3,
|
|
5901
6006
|
maxRequestImageBytes: MAX_REQUEST_IMAGE_BYTES,
|
|
5902
6007
|
requestImagePixelBudget: REQUEST_IMAGE_PIXEL_BUDGET,
|
|
5903
6008
|
requestImageMaxBytes: REQUEST_IMAGE_MAX_BYTES,
|
|
@@ -5907,15 +6012,21 @@ function apply(ctx, config = {}) {
|
|
|
5907
6012
|
let profileKey;
|
|
5908
6013
|
let profileSnapshot;
|
|
5909
6014
|
const profiles = () => {
|
|
6015
|
+
const preferences = settings.get();
|
|
6016
|
+
const streamIdleTimeoutMinutes = normalizeStreamIdleTimeoutMinutes(preferences[STREAM_IDLE_TIMEOUT_MINUTES_FIELD]);
|
|
5910
6017
|
const key = JSON.stringify([
|
|
5911
6018
|
modelCatalog.revision(),
|
|
5912
|
-
|
|
5913
|
-
|
|
5914
|
-
|
|
6019
|
+
streamIdleTimeoutMinutes,
|
|
6020
|
+
normalizeContextMode(preferences[CONTEXT_MODE_FIELD]),
|
|
6021
|
+
preferences[CUSTOM_CONTEXT_OVERRIDES_FIELD],
|
|
6022
|
+
...Object.values(CUSTOM_CONTEXT_MODEL_FIELDS).map((field) => preferences[field])
|
|
5915
6023
|
]);
|
|
5916
6024
|
if (key !== profileKey) {
|
|
5917
6025
|
profileKey = key;
|
|
5918
|
-
profileSnapshot = /* @__PURE__ */ new Map([[PROVIDER,
|
|
6026
|
+
profileSnapshot = /* @__PURE__ */ new Map([[PROVIDER, Object.freeze({
|
|
6027
|
+
...profile,
|
|
6028
|
+
streamIdleTimeoutMs: streamIdleTimeoutMinutes * 60 * 1e3
|
|
6029
|
+
})]]);
|
|
5919
6030
|
}
|
|
5920
6031
|
return profileSnapshot;
|
|
5921
6032
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-codex-subscription",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.5",
|
|
4
4
|
"description": "Use ChatGPT and Codex subscriptions in DeepSeek Harness with OAuth, quota, safe resets, web search, images, and Fast mode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -77,46 +77,46 @@
|
|
|
77
77
|
},
|
|
78
78
|
"peerDependencies": {
|
|
79
79
|
"@deepseek-ai/cordis": "4.0.1 || 4.0.2 || 4.0.3 || 4.0.4",
|
|
80
|
-
"@deepseek-ai/dsh-api-remotes": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
81
|
-
"@deepseek-ai/dsh-client-connection": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
82
|
-
"@deepseek-ai/dsh-client-locale": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
83
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
84
|
-
"@deepseek-ai/dsh-client-ui-model-selection": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
85
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
86
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
87
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
88
|
-
"@deepseek-ai/dsh-client-ui-tool": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
89
|
-
"@deepseek-ai/dsh-credentials": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
90
|
-
"@deepseek-ai/dsh-llm": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
91
|
-
"@deepseek-ai/dsh-llm-pi-ai": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
92
|
-
"@deepseek-ai/dsh-settings": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
93
|
-
"@deepseek-ai/dsh-tools": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
94
|
-
"@deepseek-ai/dsh-web": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
80
|
+
"@deepseek-ai/dsh-api-remotes": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
81
|
+
"@deepseek-ai/dsh-client-connection": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
82
|
+
"@deepseek-ai/dsh-client-locale": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
83
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
84
|
+
"@deepseek-ai/dsh-client-ui-model-selection": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
85
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
86
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
87
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
88
|
+
"@deepseek-ai/dsh-client-ui-tool": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
89
|
+
"@deepseek-ai/dsh-credentials": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
90
|
+
"@deepseek-ai/dsh-llm": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
91
|
+
"@deepseek-ai/dsh-llm-pi-ai": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
92
|
+
"@deepseek-ai/dsh-settings": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
93
|
+
"@deepseek-ai/dsh-tools": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
94
|
+
"@deepseek-ai/dsh-web": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
95
95
|
"@deepseek-ai/schemastery": "3.18.1 || ^3.18.2",
|
|
96
96
|
"@earendil-works/pi-ai": "0.82.1 || 0.85.1",
|
|
97
97
|
"react": "^18.2.0",
|
|
98
98
|
"react-dom": "^18.2.0",
|
|
99
|
-
"@deepseek-ai/dsh-subagent-codex": "0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2"
|
|
99
|
+
"@deepseek-ai/dsh-subagent-codex": "0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1"
|
|
100
100
|
},
|
|
101
101
|
"devDependencies": {
|
|
102
102
|
"@deepseek-ai/cordis": "4.0.4",
|
|
103
|
-
"@deepseek-ai/dsh-api-remotes": "0.
|
|
104
|
-
"@deepseek-ai/dsh-client-connection": "0.
|
|
105
|
-
"@deepseek-ai/dsh-client-locale": "0.
|
|
106
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.
|
|
107
|
-
"@deepseek-ai/dsh-client-ui-model-selection": "0.
|
|
108
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.
|
|
109
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.
|
|
110
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.
|
|
111
|
-
"@deepseek-ai/dsh-client-ui-tool": "0.
|
|
112
|
-
"@deepseek-ai/dsh-credentials": "0.
|
|
113
|
-
"@deepseek-ai/dsh-invariants": "0.
|
|
114
|
-
"@deepseek-ai/dsh-llm": "0.
|
|
115
|
-
"@deepseek-ai/dsh-llm-pi-ai": "0.
|
|
116
|
-
"@deepseek-ai/dsh-session": "0.
|
|
117
|
-
"@deepseek-ai/dsh-settings": "0.
|
|
118
|
-
"@deepseek-ai/dsh-tools": "0.
|
|
119
|
-
"@deepseek-ai/dsh-web": "0.
|
|
103
|
+
"@deepseek-ai/dsh-api-remotes": "0.2.0-rc.1",
|
|
104
|
+
"@deepseek-ai/dsh-client-connection": "0.2.0-rc.1",
|
|
105
|
+
"@deepseek-ai/dsh-client-locale": "0.2.0-rc.1",
|
|
106
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.1",
|
|
107
|
+
"@deepseek-ai/dsh-client-ui-model-selection": "0.2.0-rc.1",
|
|
108
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.1",
|
|
109
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.1",
|
|
110
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.1",
|
|
111
|
+
"@deepseek-ai/dsh-client-ui-tool": "0.2.0-rc.1",
|
|
112
|
+
"@deepseek-ai/dsh-credentials": "0.2.0-rc.1",
|
|
113
|
+
"@deepseek-ai/dsh-invariants": "0.2.0-rc.1",
|
|
114
|
+
"@deepseek-ai/dsh-llm": "0.2.0-rc.1",
|
|
115
|
+
"@deepseek-ai/dsh-llm-pi-ai": "0.2.0-rc.1",
|
|
116
|
+
"@deepseek-ai/dsh-session": "0.2.0-rc.1",
|
|
117
|
+
"@deepseek-ai/dsh-settings": "0.2.0-rc.1",
|
|
118
|
+
"@deepseek-ai/dsh-tools": "0.2.0-rc.1",
|
|
119
|
+
"@deepseek-ai/dsh-web": "0.2.0-rc.1",
|
|
120
120
|
"@deepseek-ai/schemastery": "3.18.4",
|
|
121
121
|
"@earendil-works/pi-ai": "0.85.1",
|
|
122
122
|
"@heroicons/react": "2.2.0",
|
|
@@ -125,10 +125,10 @@
|
|
|
125
125
|
"react": "18.3.1",
|
|
126
126
|
"react-dom": "18.3.1",
|
|
127
127
|
"tsdown": "0.22.2",
|
|
128
|
-
"@deepseek-ai/dsh-subagent-codex": "0.
|
|
128
|
+
"@deepseek-ai/dsh-subagent-codex": "0.2.0-rc.1"
|
|
129
129
|
},
|
|
130
130
|
"dependencies": {
|
|
131
|
-
"@deepseek-ai/dsh-home-paths": "0.
|
|
131
|
+
"@deepseek-ai/dsh-home-paths": "0.2.0-rc.1",
|
|
132
132
|
"https-proxy-agent": "7.0.6",
|
|
133
133
|
"ws": "8.21.3"
|
|
134
134
|
},
|