@kodax-ai/kodax 0.7.86 → 0.7.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -0
- package/README.md +25 -5
- package/README_CN.md +9 -5
- package/dist/chunks/agent-ZVZPWX5T.js +2 -0
- package/dist/chunks/argument-completer-LF5FUYJI.js +2 -0
- package/dist/chunks/{chunk-A5VQGXH2.js → chunk-4Y6OSDZE.js} +1 -1
- package/dist/chunks/chunk-5247AKGN.js +92 -0
- package/dist/chunks/{chunk-U6HNMLNN.js → chunk-6MGD2A7Z.js} +221 -221
- package/dist/chunks/{chunk-G5FGIRDJ.js → chunk-72H6JNPN.js} +142 -142
- package/dist/chunks/{chunk-XA4ENCAH.js → chunk-GSGNXLDU.js} +2 -2
- package/dist/chunks/{chunk-UKCDCVMD.js → chunk-L2SYMK46.js} +1 -1
- package/dist/chunks/{chunk-HTVLCHWH.js → chunk-O2ZV775M.js} +1 -1
- package/dist/chunks/{chunk-Q6UAGROD.js → chunk-OG4ML65E.js} +11 -11
- package/dist/chunks/chunk-PROPMIT4.js +2 -0
- package/dist/chunks/{chunk-XUKLF26Q.js → chunk-QCXFQFIO.js} +2 -2
- package/dist/chunks/{chunk-B36G256E.js → chunk-RGAMBFT4.js} +254 -254
- package/dist/chunks/chunk-TXZ2XYMA.js +320 -0
- package/dist/chunks/chunk-UNEC2WXJ.js +123 -0
- package/dist/chunks/{chunk-GVGLYVG4.js → chunk-W5RPVR3O.js} +1 -1
- package/dist/chunks/{chunk-AAFFS6RU.js → chunk-WSDVHFBK.js} +3 -3
- package/dist/chunks/{chunk-MFCPQZ7E.js → chunk-ZKJEAQHA.js} +4 -4
- package/dist/chunks/{chunk-2RAXDUC7.js → chunk-ZWRG2GHC.js} +3 -3
- package/dist/chunks/client-ZXBSEDS4.js +2 -0
- package/dist/chunks/compaction-config-HVHPJ6CS.js +2 -0
- package/dist/chunks/{construction-bootstrap-4DGAYOWH.js → construction-bootstrap-HUGXOAUK.js} +1 -1
- package/dist/chunks/dist-VH56OGLV.js +2 -0
- package/dist/chunks/{dist-WWL2DNIJ.js → dist-WILA35IA.js} +1 -1
- package/dist/chunks/host-33L5PX3J.js +2 -0
- package/dist/chunks/run-manager-OOMXDNDA.js +2 -0
- package/dist/chunks/utils-WCVYP3JY.js +2 -0
- package/dist/index.d.ts +19 -19
- package/dist/index.js +5 -5
- package/dist/kodax_bootstrap.js +1 -1
- package/dist/kodax_cli.js +1563 -1560
- package/dist/kodax_resume.js +35 -826
- package/dist/provider-capabilities.json +1349 -1205
- package/dist/runtime-worker.js +1255 -1254
- package/dist/sandbox-workspace-session.js +265 -265
- package/dist/sdk-a2a.d.ts +12 -12
- package/dist/sdk-a2a.js +1 -1
- package/dist/sdk-agent.d.ts +17 -17
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +21 -21
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +4 -4
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +7 -7
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +1 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +16 -16
- package/dist/sdk-repl.js +1 -1
- package/dist/sdk-runtime.d.ts +15 -15
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-sandbox.js +1 -1
- package/dist/sdk-session.d.ts +7 -7
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +59 -59
- package/dist/types-chunks/{base.d-DxG0m09Z.d.ts → base.d-vopO1rml.d.ts} +1 -1
- package/dist/types-chunks/{bash-prefix-extractor.d-QqKtuLZm.d.ts → bash-prefix-extractor.d-DcHi4vz5.d.ts} +4 -4
- package/dist/types-chunks/{capability-learning.d-iPSiAmc_.d.ts → capability-learning.d-CE1tm29C.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-CN_iMqAS.d.ts → capsule.d-CjNNucoy.d.ts} +3 -3
- package/dist/types-chunks/{controller.d-A73Kf6tH.d.ts → controller.d-BcUJlVOt.d.ts} +1 -1
- package/dist/types-chunks/{controller.d-Dzxz22X-.d.ts → controller.d-C-GjOuPV.d.ts} +9 -2
- package/dist/types-chunks/{guardrail.d-Y_AIh8-I.d.ts → guardrail.d-BuI5uypW.d.ts} +11 -5
- package/dist/types-chunks/{history-retrieval.d-Debbzn1z.d.ts → history-retrieval.d-BjJTJtKF.d.ts} +2 -2
- package/dist/types-chunks/{public-api.d-Cg-4GTbK.d.ts → public-api.d-hYcrNiNt.d.ts} +10 -5
- package/dist/types-chunks/{repl.d-Bhrbueab.d.ts → repl.d-DSQdq_FY.d.ts} +5 -5
- package/dist/types-chunks/{resolver.d-C9IW4fmU.d.ts → resolver.d-RyPo99tB.d.ts} +2 -2
- package/dist/types-chunks/{review-inbox.d-DuZqFX-z.d.ts → review-inbox.d-D2EtBlPt.d.ts} +1 -1
- package/dist/types-chunks/{run-manager.d-BS4lJfL3.d.ts → run-manager.d-i7Q30bns.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-fQ_KENev.d.ts → sdk-session-CAL2IZsM.d.ts} +3 -3
- package/dist/types-chunks/{shell-command-sets.d-DRGjd_7Q.d.ts → shell-command-sets.d-BLjNQYPi.d.ts} +1 -1
- package/dist/types-chunks/{side-query.d-CP1LiRiH.d.ts → side-query.d-iH0P9ASy.d.ts} +2 -2
- package/dist/types-chunks/{types.d-DlLBRqZ9.d.ts → types.d-BSFS8--Y.d.ts} +34 -3
- package/dist/types-chunks/{types.d-CgrXrFrq.d.ts → types.d-CK9A9rpP.d.ts} +1 -1
- package/dist/types-chunks/{types.d-Bo4fyMLu.d.ts → types.d-CqIcGQlc.d.ts} +2 -2
- package/dist/types-chunks/{types.d-BRrJU4pb.d.ts → types.d-DNIzbJD_.d.ts} +4 -4
- package/dist/types-chunks/{utils.d-BIhh_BqE.d.ts → utils.d-CeM3tG-E.d.ts} +6 -6
- package/package.json +2 -2
- package/dist/chunks/agent-IO6TXNCV.js +0 -2
- package/dist/chunks/argument-completer-JMICSGL6.js +0 -2
- package/dist/chunks/chunk-R4EHASEN.js +0 -319
- package/dist/chunks/chunk-TRNAWSXP.js +0 -123
- package/dist/chunks/chunk-UH5WNJXF.js +0 -92
- package/dist/chunks/compaction-config-5RMG22CY.js +0 -2
- package/dist/chunks/dist-DFW7MXT7.js +0 -2
- package/dist/chunks/host-6MMHYTI5.js +0 -2
- package/dist/chunks/run-manager-ISQSWCAM.js +0 -2
- package/dist/chunks/utils-LV7FHKYN.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,79 @@ All notable changes to this project will be documented in this file.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
<!-- Keep this section empty between releases. -->
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## [0.7.88] - 2026-08-16
|
|
14
|
+
|
|
15
|
+
> Git tag and GitHub Release are created by the release workflow. npm
|
|
16
|
+
> publication remains a separate manual operator step.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Actor settlement persistence now separates Actor mutation order, process-local
|
|
21
|
+
storage dequeue, writer eligibility, cancellable pre-commit work, canonical
|
|
22
|
+
replacement, and serialized post-commit maintenance. The v2 contract is
|
|
23
|
+
exposed as `actorSettlementConvergence:2`.
|
|
24
|
+
- Startup and resume paths bound their work and defer heavy provider, image,
|
|
25
|
+
LSP, TypeScript, and extension dependencies past the bootstrap boundary.
|
|
26
|
+
- `zai-coding` and `ark-coding` now default to `glm-5.3` while retaining
|
|
27
|
+
`glm-5.2`; Ark retains the `glm-latest` alias. Coding Plan model IDs are sent
|
|
28
|
+
verbatim, without a synthetic context suffix. GLM-5.3 `off` / `none` intent
|
|
29
|
+
is normalized to low effort.
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- Issue 292: storage eligibility, canonical Actor settlement, and post-commit
|
|
34
|
+
maintenance no longer compete for one deadline; authoritative persisted-shape
|
|
35
|
+
readback resolves explicit replacement errors and maintenance failures no
|
|
36
|
+
longer roll back a successful terminal Actor state.
|
|
37
|
+
- Guardrail decision diagnostics now expose a bounded classifier reason.
|
|
38
|
+
- REPL startup learning-recovery notices are dismissed after the first submitted
|
|
39
|
+
query instead of remaining stale over the active conversation.
|
|
40
|
+
- CLI bundle startup no longer eagerly imports the Anthropic SDK or `jimp`,
|
|
41
|
+
restoring the audited startup dependency boundary.
|
|
42
|
+
- Known-issue tracker totals are synchronized with the Issue 292 resolution.
|
|
43
|
+
|
|
44
|
+
### Documentation
|
|
45
|
+
|
|
46
|
+
- Synchronized README/README_CN, PRD/HLD/DD/ADR, feature tracker, public SDK
|
|
47
|
+
guides, `kodax_manual`, `docs/features`, release checklist, and v0.7.88
|
|
48
|
+
regression coverage.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## [0.7.87] - 2026-08-14
|
|
53
|
+
|
|
54
|
+
> Git tag and GitHub Release are created by the release workflow. npm
|
|
55
|
+
> publication remains a separate manual operator step.
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
|
|
59
|
+
- `zhipu-coding` now defaults to GLM-5.3 with its 1M context and 128K output,
|
|
60
|
+
while retaining GLM-5.2 as an explicit rollback route. `zai-coding` retains
|
|
61
|
+
both models but defaults to GLM-5.2 until the overseas account/plan rollout
|
|
62
|
+
grants GLM-5.3 access. The ordinary `zhipu` provider pre-registers the same
|
|
63
|
+
GLM-5.3 metadata without promoting it while the public pay-per-token API is
|
|
64
|
+
still marked as upcoming.
|
|
65
|
+
- GLM-5.3 exposes the upstream low/high/max effort contract: none, minimal,
|
|
66
|
+
light, and low lower to `low`; medium/high lower to `high`; xhigh/max/ultra
|
|
67
|
+
lower to `max`. Anthropic-compatible calls use adaptive thinking plus
|
|
68
|
+
`output_config.effort`; OpenAI-compatible calls use enabled thinking plus
|
|
69
|
+
`reasoning_effort`.
|
|
70
|
+
|
|
71
|
+
### Fixed
|
|
72
|
+
|
|
73
|
+
- Zhipu Coding Plan model IDs are sent verbatim (`glm-5.3` / `glm-5.2`). The
|
|
74
|
+
invalid `[1m]` suffix previously caused upstream `1214 modelCode does not
|
|
75
|
+
exist` failures even though the logical model was available.
|
|
76
|
+
- GLM-5.3 `off` / `none` no longer sends the unsupported disabled-thinking
|
|
77
|
+
shape. It lowers to enabled low-effort thinking, matching the always-thinking
|
|
78
|
+
upstream contract and preventing `1210` request failures.
|
|
79
|
+
- REPL effort controls no longer offer an impossible `off` rung for GLM-5.3;
|
|
80
|
+
legacy saved `off` intent is classified and displayed as `off->low`.
|
|
81
|
+
|
|
9
82
|
---
|
|
10
83
|
|
|
11
84
|
## [0.7.86] - 2026-08-14
|
package/README.md
CHANGED
|
@@ -679,9 +679,29 @@ to normal permission execution; a command that started or may have started is
|
|
|
679
679
|
never replayed. Runtime sandbox capability v3 fences upgrades from older daemon
|
|
680
680
|
policy revisions. Issue
|
|
681
681
|
256's remaining Worker owner-lease boundary
|
|
682
|
-
stays open and
|
|
682
|
+
stays open and was scheduled for v0.7.87. See the
|
|
683
683
|
[v0.7.86 release checklist](docs/release.md#v0786-release-preparation).
|
|
684
684
|
|
|
685
|
+
**v0.7.88 release:** this release contains the Actor settlement convergence v2
|
|
686
|
+
durability contract, bounded startup/resume work, the guarded classifier reason
|
|
687
|
+
diagnostic, and the REPL fix that dismisses stale learning-recovery notices
|
|
688
|
+
after the first submitted query. These are intentional Runtime, Agent, LLM,
|
|
689
|
+
and REPL system-code changes. `zhipu-coding`, `zai-coding`, and `ark-coding`
|
|
690
|
+
default to `glm-5.3` while retaining `glm-5.2` as an explicit route; Ark keeps
|
|
691
|
+
the `glm-latest` alias. Coding Plan model IDs are sent verbatim without a
|
|
692
|
+
synthetic context suffix, and GLM-5.3 `off` / `none` intent is lowered to
|
|
693
|
+
`low`. See the [v0.7.88 release checklist](docs/release.md#v0788-release-preparation).
|
|
694
|
+
|
|
695
|
+
**v0.7.87 GLM provider release:** `zhipu-coding` defaults to `glm-5.3` and
|
|
696
|
+
retains `glm-5.2` as an explicit rollback route. `zai-coding` retained both
|
|
697
|
+
models but defaulted to `glm-5.2` until the overseas Coding Plan rollout
|
|
698
|
+
changed in v0.7.88. Coding Plan model IDs are sent verbatim without a context
|
|
699
|
+
suffix. GLM-5.3 is an always-thinking model, so an `off` / `none` intent is
|
|
700
|
+
lowered to `low` instead of sending an unsupported disabled-thinking request.
|
|
701
|
+
Issue 256's remaining Worker owner-lease boundary remained open after v0.7.87;
|
|
702
|
+
the release assigned no replacement target. See the
|
|
703
|
+
[v0.7.87 release checklist](docs/release.md#v0787-release-preparation).
|
|
704
|
+
|
|
685
705
|
The v0.7.77 release also adds an opt-in, host-configurable Shell Execution Contract.
|
|
686
706
|
Runtime Session settings or an individual Run can select `pwsh`, Windows
|
|
687
707
|
PowerShell, `cmd`, `bash`, `zsh`, or an explicit Git Bash executable; KodaX
|
|
@@ -1635,13 +1655,13 @@ await runInkInteractiveMode({ provider: 'zhipu-coding', effort: 'auto' });
|
|
|
1635
1655
|
| kimi-code | `KIMI_CODE_API_KEY` | Native | k3-256k (Moderato+, 256K, direct upstream ID; `k3` 1M / `kimi-for-coding` K2.7 Code / `kimi-for-coding-highspeed` via `/model`) |
|
|
1636
1656
|
| qwen | `QWEN_API_KEY` | Native | qwen3.5-plus |
|
|
1637
1657
|
| qwen-token-plan | `QWEN_TOKEN_API_KEY` | Native | qwen3.8-max (Anthropic-compat; legacy `qwen3.8-max-preview` plus `qwen3.7-max` / `qwen3.7-plus` / `qwen3.6-flash` / `glm-5.2` / `deepseek-v4-pro` via `/model`; all 1M context; image input on both Qwen 3.8 IDs / 3.7 Plus / 3.6 Flash) |
|
|
1638
|
-
| zhipu | `ZHIPU_API_KEY` | Native | glm-5 (`glm-5.2` 1M ctx
|
|
1639
|
-
| zhipu-coding | `ZHIPU_CODING_API_KEY` | Native | glm-5.
|
|
1640
|
-
| zai-coding | `ZAI_CODING_API_KEY` | Native | glm-5.
|
|
1658
|
+
| zhipu | `ZHIPU_API_KEY` | Native | glm-5 (`glm-5.3` / `glm-5.2` 1M ctx, plus `glm-5.1` / `glm-5-turbo` via `/model`; GLM-5.3 is pre-registered while the public API remains marked upcoming) |
|
|
1659
|
+
| zhipu-coding | `ZHIPU_CODING_API_KEY` | Native | glm-5.3 (1M ctx, 128K output; `glm-5.2` rollback plus `glm-5-turbo` / `glm-4.7` via `/model`; raw upstream IDs) |
|
|
1660
|
+
| zai-coding | `ZAI_CODING_API_KEY` | Native | glm-5.3 (`glm-5.2` rollback; raw upstream IDs; switched from glm-5.2 default on 2026-08-15) |
|
|
1641
1661
|
| minimax-coding | `MINIMAX_CODING_API_KEY` | Native | MiniMax-M3 (Frontier Coding, native multimodal + 1M ctx; legacy `MiniMax-M2.7` / `MiniMax-M2.7-highspeed` remain selectable via `/model`) |
|
|
1642
1662
|
| mimo | `MIMO_API_KEY` | Native | mimo-v2.5-pro (Xiaomi MiMo pay-per-token, Anthropic-compat) |
|
|
1643
1663
|
| mimo-coding | `MIMO_CODING_API_KEY` | Native | mimo-v2.5-pro (Xiaomi Token Plan, Anthropic-compat) |
|
|
1644
|
-
| ark-coding | `ARK_CODING_API_KEY` | Native | glm-5.
|
|
1664
|
+
| ark-coding | `ARK_CODING_API_KEY` | Native | glm-5.3 (Volcengine Ark Coding Plan — GLM-5.3 (1M ctx, 128K out) · GLM-5.2 (alias: `glm-latest`) · Kimi K2.7 Code / K2.6 · MiniMax M3 / M2.7 · DeepSeek V4 Pro / V4 Flash · Doubao Seed 2.0 Code / Pro / Lite · Doubao Seed Code) |
|
|
1645
1665
|
| deepseek | `DEEPSEEK_API_KEY` | Native | deepseek-v4-flash (`deepseek-v4-pro` via `/model`) |
|
|
1646
1666
|
| gemini-cli | Provider CLI authentication (no KodaX API-key variable) | Prompt-only / CLI bridge | (via gemini CLI) |
|
|
1647
1667
|
| codex-cli | Provider CLI authentication (no KodaX API-key variable) | Prompt-only / CLI bridge | (via codex CLI) |
|
package/README_CN.md
CHANGED
|
@@ -245,7 +245,11 @@ v0.7.93。详见 [v0.7.83 发布清单](docs/release.md#v0783-release-preparatio
|
|
|
245
245
|
|
|
246
246
|
**v0.7.85 发布**:本版本包含 F289/F290 的 Memory review drain 与 lesson/verdict 生产管线、F291 的 Session-scoped Runtime Event Journals,以及 F292 的 conversation-first Memory 管理和实验性 SDK 管理 facade。同时包含 Actor settlement convergence、Agent Home/learned-root guardrail、terminal Run 启动时避免重放完整 event journal、repo-intelligence Worker 空闲退役、Windows sandbox/ACL 加固及对应回归指南。这些包含明确的 Runtime/system code 改动。Issue 256 剩余的 Worker owner lease 仍未完成,已改期到 v0.7.86,本版本不将其表述为已交付。详见 [v0.7.85 发布清单](docs/release.md#v0785-release-preparation)。
|
|
247
247
|
|
|
248
|
-
**v0.7.86 加固发布**:本补丁版本加入 abandoned inline Runtime owner 的原子恢复、Runtime 与 learning lock 的 OS process-start identity 校验,以及 Windows sandbox 生命周期 attestation。Sandbox ACL owner marker 持久化并在不同 Runtime profile 间串行恢复;停止流程在 ACL 恢复前等待 process-tree termination proof,保留组合清理错误;如果 Shell effect 未证明已 drain,则继续 fence 后续文件系统 effect,绝不重放可能已经产生副作用的命令。POSIX workspace session 会在策略身份计算前初始化全新的 `KODAX_HOME` 内部目录,仅在既有 Shell abort/deadline 内等待当前 workspace 的 warm-up,并在 lease cleanup 失败后退役失效缓存;进程树或清理结果无法确认时同样保持 fail-closed,不允许旧 session 与替换 session 竞态。规范化 workspace、Agent Home、附加文件系统、toolchain 与网络策略完全一致的命令,可以跨 KodaX 进程共享同一个 Windows sandbox policy group。文件系统 effect 协调锁会在合法进程交接时等待完整的 30 秒 stale-owner 证明窗口,但不同 effect 类别之间原有的一秒 fail-closed 边界不变;不同策略或目标启动前的 sandbox 基础设施失败会回到已经授权的普通权限执行路径,目标已经启动或启动状态未知时绝不重放。Runtime sandbox capability v3 会隔离旧 daemon 的执行策略版本。Issue 256 剩余的 Worker owner lease
|
|
248
|
+
**v0.7.86 加固发布**:本补丁版本加入 abandoned inline Runtime owner 的原子恢复、Runtime 与 learning lock 的 OS process-start identity 校验,以及 Windows sandbox 生命周期 attestation。Sandbox ACL owner marker 持久化并在不同 Runtime profile 间串行恢复;停止流程在 ACL 恢复前等待 process-tree termination proof,保留组合清理错误;如果 Shell effect 未证明已 drain,则继续 fence 后续文件系统 effect,绝不重放可能已经产生副作用的命令。POSIX workspace session 会在策略身份计算前初始化全新的 `KODAX_HOME` 内部目录,仅在既有 Shell abort/deadline 内等待当前 workspace 的 warm-up,并在 lease cleanup 失败后退役失效缓存;进程树或清理结果无法确认时同样保持 fail-closed,不允许旧 session 与替换 session 竞态。规范化 workspace、Agent Home、附加文件系统、toolchain 与网络策略完全一致的命令,可以跨 KodaX 进程共享同一个 Windows sandbox policy group。文件系统 effect 协调锁会在合法进程交接时等待完整的 30 秒 stale-owner 证明窗口,但不同 effect 类别之间原有的一秒 fail-closed 边界不变;不同策略或目标启动前的 sandbox 基础设施失败会回到已经授权的普通权限执行路径,目标已经启动或启动状态未知时绝不重放。Runtime sandbox capability v3 会隔离旧 daemon 的执行策略版本。Issue 256 剩余的 Worker owner lease 边界仍未关闭,曾改期到 v0.7.87。详见 [v0.7.86 发布清单](docs/release.md#v0786-release-preparation)。
|
|
249
|
+
|
|
250
|
+
**v0.7.88 发布**:本版本包含 Actor settlement convergence v2 持久化边界、受界定的启动/恢复工作、guardrail classifier reason 诊断,以及首次提交查询后自动收起过期 learning-recovery 提示的 REPL 修复。这些都是明确的 Runtime、Agent、LLM 与 REPL 系统代码改动。`zhipu-coding`、`zai-coding` 与 `ark-coding` 均默认使用 `glm-5.3`,同时保留 `glm-5.2` 作为显式路由;Ark 继续保留 `glm-latest` 别名。Coding Plan model ID 原样发送,不附加虚假的 context 后缀;GLM-5.3 的 `off` / `none` 会降为 `low`。详见 [v0.7.88 发布清单](docs/release.md#v0788-release-preparation)。
|
|
251
|
+
|
|
252
|
+
**v0.7.87 GLM Provider 发布**:`zhipu-coding` 默认使用 `glm-5.3`,并保留 `glm-5.2` 作为显式回退路由。`zai-coding` 当时保留两个模型但默认使用 `glm-5.2`,直到 v0.7.88 的海外 Coding Plan 路由切换。Coding Plan model ID 原样发送,不附加 context 后缀。GLM-5.3 的思考不可关闭,因此 `off` / `none` 会降级为 `low`,不会发送上游不支持的 disabled-thinking 请求。Issue 256 剩余的 Worker owner lease 边界在 v0.7.87 后仍保持 Open,且本版本不指定新的替代目标。详见 [v0.7.87 发布清单](docs/release.md#v0787-release-preparation)。
|
|
249
253
|
|
|
250
254
|
Windows workspace Shell 还会保留大小写不敏感的 `PATH`/`Path` 与 `PATHEXT` 约定,
|
|
251
255
|
按最终 PATH 和 shell executable 生成有界读取授权,并在 broker 层之间保留 `cmd.exe`
|
|
@@ -772,13 +776,13 @@ dist/binary/linux-x64/
|
|
|
772
776
|
| kimi-code | `KIMI_CODE_API_KEY` | Native | k3-256k(Moderato+,256K,直接请求同名上游模型;可 `/model` 切换 `k3`〔Allegretto+,1M〕/ `kimi-for-coding`〔K2.7 Code〕/ `kimi-for-coding-highspeed`) |
|
|
773
777
|
| qwen | `QWEN_API_KEY` | Native | qwen3.5-plus |
|
|
774
778
|
| qwen-token-plan | `QWEN_TOKEN_API_KEY` | Native | qwen3.8-max(Anthropic 协议;可 `/model` 切换兼容项 `qwen3.8-max-preview` 及 `qwen3.7-max` / `qwen3.7-plus` / `qwen3.6-flash` / `glm-5.2` / `deepseek-v4-pro`;均为 1M ctx;两个 Qwen 3.8 ID / 3.7 Plus / 3.6 Flash 支持图片理解) |
|
|
775
|
-
| zhipu | `ZHIPU_API_KEY` | Native | glm-5(可 `/model` 切换 `glm-5.
|
|
776
|
-
| zhipu-coding | `ZHIPU_CODING_API_KEY` | Native | glm-5.
|
|
777
|
-
| zai-coding | `ZAI_CODING_API_KEY` | Native | glm-5.
|
|
779
|
+
| zhipu | `ZHIPU_API_KEY` | Native | glm-5(可 `/model` 切换 `glm-5.3` / `glm-5.2`,均为 1M ctx,另有 `glm-5.1` / `glm-5-turbo`;GLM-5.3 开放平台 API 仍标注为即将上线) |
|
|
780
|
+
| zhipu-coding | `ZHIPU_CODING_API_KEY` | Native | glm-5.3(1M ctx、128K 最大输出;可回退到 `glm-5.2`,也可切换 `glm-5-turbo` / `glm-4.7`;原样发送上游 ID) |
|
|
781
|
+
| zai-coding | `ZAI_CODING_API_KEY` | Native | glm-5.3(保留 `glm-5.2` 回退;原样发送上游 ID;2026-08-15 起默认从 glm-5.2 切换) |
|
|
778
782
|
| minimax-coding | `MINIMAX_CODING_API_KEY` | Native | MiniMax-M3(Frontier Coding,原生多模态 + 1M ctx;仍可通过 `/model` 显式选择兼容模型 `MiniMax-M2.7` / `MiniMax-M2.7-highspeed`) |
|
|
779
783
|
| mimo | `MIMO_API_KEY` | Native | mimo-v2.5-pro(小米 MiMo 按量计费,Anthropic 协议) |
|
|
780
784
|
| mimo-coding | `MIMO_CODING_API_KEY` | Native | mimo-v2.5-pro(小米 MiMo Token Plan,Anthropic 协议) |
|
|
781
|
-
| ark-coding | `ARK_CODING_API_KEY` | Native | glm-5.
|
|
785
|
+
| ark-coding | `ARK_CODING_API_KEY` | Native | glm-5.3(火山方舟 Coding Plan — GLM-5.3(1M ctx、128K out) · GLM-5.2(别名 `glm-latest`) · Kimi K2.7 Code / K2.6 · MiniMax M3 / M2.7 · DeepSeek V4 Pro / V4 Flash · Doubao Seed 2.0 Code / Pro / Lite · Doubao Seed Code) |
|
|
782
786
|
| deepseek | `DEEPSEEK_API_KEY` | Native | deepseek-v4-flash(可 `/model` 切换 `deepseek-v4-pro`) |
|
|
783
787
|
| gemini-cli | 由 Provider CLI 完成认证(无 KodaX API-key 环境变量) | Prompt-only / CLI bridge | (通过 gemini CLI) |
|
|
784
788
|
| codex-cli | 由 Provider CLI 完成认证(无 KodaX API-key 环境变量) | Prompt-only / CLI bridge | (通过 codex CLI) |
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{Ka as g,Ma as h,Za as i,_a as j,a as c,sa as d,ta as e,ua as f,yc as k}from"./chunk-OG4ML65E.js";import"./chunk-O2ZV775M.js";import"./chunk-6MGD2A7Z.js";import"./chunk-W5RPVR3O.js";import"./chunk-PROPMIT4.js";import"./chunk-UNEC2WXJ.js";import{Jb as a,Kb as b}from"./chunk-72H6JNPN.js";import"./chunk-5247AKGN.js";import"./chunk-ONUPGMER.js";export{e as bucketProviderPayloadSize,g as buildAutoRepoIntelligenceContext,f as checkPromiseSignal,b as cleanupIncompleteToolCalls,h as describeTransientProviderRetry,c as emitResilienceDebug,d as estimateProviderPayloadBytes,k as runKodaX,j as saveRequiredSessionSnapshot,i as saveSessionSnapshot,a as validateAndFixToolHistory};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{Ha as a,Ia as b}from"./chunk-RGAMBFT4.js";import"./chunk-WSDVHFBK.js";import"./chunk-4Y6OSDZE.js";import"./chunk-GSGNXLDU.js";import"./chunk-L2SYMK46.js";import"./chunk-OG4ML65E.js";import"./chunk-O2ZV775M.js";import"./chunk-QCXFQFIO.js";import"./chunk-6MGD2A7Z.js";import"./chunk-W5RPVR3O.js";import"./chunk-PROPMIT4.js";import"./chunk-UNEC2WXJ.js";import"./chunk-72H6JNPN.js";import"./chunk-5247AKGN.js";import"./chunk-ONUPGMER.js";export{a as ArgumentCompleter,b as createArgumentCompleter};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{Ja as c,df as o}from"./chunk-
|
|
2
|
+
import{Ja as c,df as o}from"./chunk-72H6JNPN.js";import{a as n}from"./chunk-ONUPGMER.js";import{readFile as a}from"fs/promises";var i={enabled:!0,triggerPercent:75};async function s(r){let t=c("config.json");try{let e=await f(t);if(e?.compaction)return o({...i,...e.compaction})}catch{}return o(i)}n(s,"loadCompactionConfig");async function f(r){try{let t=await a(r,"utf-8");return JSON.parse(t)}catch{return null}}n(f,"readConfigFile");export{s as a};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{a as n}from"./chunk-ONUPGMER.js";var M={user:0,background:1};function xt(e,t){return M[e]<=M[t]}n(xt,"priorityWithinMax");function me(e,t){return!(e.agentId!==t.agentId||!xt(e.priority,t.maxPriority)||t.mode!==void 0&&e.mode!==t.mode||t.id!==void 0&&e.id!==t.id||t.predicate&&!t.predicate(e))}n(me,"matchesFilter");var U=class{static{n(this,"MessageQueue")}messages=[];nextSeq=1;listeners=new Set;snapshotRef=Object.freeze([]);notify(t){this.snapshotRef=Object.freeze([...this.messages]);for(let o of this.listeners)try{o(t)}catch{}}subscribe=n(t=>(this.listeners.add(t),()=>{this.listeners.delete(t)}),"subscribe");getSnapshot=n(()=>this.snapshotRef,"getSnapshot");enqueue(t){let o=`msg-${this.nextSeq++}`,r={id:o,priority:t.priority,mode:t.mode,content:t.content,agentId:t.agentId,inputArtifacts:t.inputArtifacts,taskResult:t.taskResult,enqueuedAt:Date.now()};return this.messages=[...this.messages,r],this.notify({kind:"enqueued",message:r}),o}dequeue(t){let o=[];for(let d=0;d<this.messages.length;d++){let l=this.messages[d];l&&me(l,t)&&o.push({originalIndex:d,message:l})}o.sort((d,l)=>{let y=M[d.message.priority]-M[l.message.priority];return y!==0?y:d.originalIndex-l.originalIndex});let r=t.limit,i=typeof r=="number"&&o.length>r?o.slice(0,r):o;if(i.length===0)return[];let s=new Set(i.map(d=>d.originalIndex));this.messages=this.messages.filter((d,l)=>!s.has(l));let a=i.map(d=>d.message);return this.notify({kind:"dequeued",messages:a}),a}peek(t){let o=[];for(let s=0;s<this.messages.length;s++){let a=this.messages[s];a&&me(a,t)&&o.push({originalIndex:s,message:a})}o.sort((s,a)=>{let d=M[s.message.priority]-M[a.message.priority];return d!==0?d:s.originalIndex-a.originalIndex});let r=t.limit;return(typeof r=="number"&&o.length>r?o.slice(0,r):o).map(s=>s.message)}size(){return this.messages.length}count(t){return this.peek(t).length}has(t){return this.count(t)>0}clear(){if(this.messages.length===0)return;let t=this.messages;this.messages=[],this.notify({kind:"cleared",messages:t})}},j;function I(){return j||(j=new U),j}n(I,"getMessageQueue");function wt(){j=void 0}n(wt,"_resetMessageQueueForTests");function J(e,t){return e?`actor:${e}:${t}`:t==="/root"?void 0:t}n(J,"actorQueueId");var k=new Map;function Mt(e){k.set(e,(k.get(e)??0)+1);let t=!1;return()=>{if(t)return;t=!0;let o=k.get(e);o===void 0||o<=1?k.delete(e):k.set(e,o-1)}}n(Mt,"registerActiveRootQueueRoute");function Y(){if(k.size!==0){if(k.size===1)return k.keys().next().value;throw new Error("Cannot infer queued follow-up target: multiple Actor root sessions are active. Pass sessionId or agentId explicitly.")}}n(Y,"resolveActiveRootQueueRoute");function St(){k.clear()}n(St,"_resetActiveRootQueueRoutesForTests");var he=new Set(["wait_agent"]);function ye(e){return e.some(o=>he.has(o))?"background":"user"}n(ye,"midTurnDrainPriority");function _t(e){let t=ye(e.lastTurnToolNames);return I().dequeue({agentId:e.agentId,maxPriority:t,limit:e.limit})}n(_t,"maybeDrainMidTurn");var m=class extends Error{static{n(this,"KodaXMediaError")}code;detail;cause;constructor(t,o,r={}){super(o),this.name="KodaXMediaError",this.code=t,this.detail=r.detail,this.cause=r.cause}},x=class extends m{static{n(this,"ImageResizeError")}constructor(t,o={}){super(o.code??"IMAGE_TOO_LARGE",t,o),this.name="ImageResizeError"}};import be from"node:path";var At={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},Kt={".3gp":"video/3gpp",".3gpp":"video/3gpp",".avi":"video/x-msvideo",".flv":"video/x-flv",".mov":"video/quicktime",".mp4":"video/mp4",".mpeg":"video/mpeg",".mpg":"video/mpeg",".webm":"video/webm",".wmv":"video/x-ms-wmv"};function ve(e){return At[be.extname(e).toLowerCase()]}n(ve,"inferImageMediaType");function ke(e){return Kt[be.extname(e).toLowerCase()]}n(ke,"inferVideoMediaType");function Xt(e,t={}){let o=t.mediaType??ve(e);return{kind:"image",path:e,...o?{mediaType:o}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}n(Xt,"createImageArtifactFromPath");function It(e,t={}){if(t.mediaType!==void 0&&t.mimeType!==void 0&&t.mediaType!==t.mimeType)throw new m("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${t.mediaType} != ${t.mimeType}.`);return{kind:"file",path:e,...t.mediaType?{mediaType:t.mediaType}:{},...t.mimeType?{mimeType:t.mimeType}:{},...t.name?{name:t.name}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}n(It,"createFileArtifactFromPath");function Ot(e,t={}){let o=t.mediaType??ke(e);if(!o)throw new m("UNSUPPORTED_MEDIA_TYPE",`Cannot infer video media type from path: ${e}.`);return{kind:"video",path:e,mediaType:o,...t.name?{name:t.name}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}n(Ot,"createVideoArtifactFromPath");var Ce=2e3,Pe=Math.floor(3.75*1024*1024),Dt=[80,60,40];async function Q(e,t={}){let o=t.maxDimension??Ce,r=t.targetBytes??Pe;if(e.length===0)throw new x("Empty image buffer.",{code:"IMAGE_DECODE_FAILED"});let i;try{let{Jimp:u}=await import("jimp");i=await u.read(e)}catch(u){let v=u instanceof Error?u.message:String(u);throw new x(`Failed to decode image: ${v}`,{code:"IMAGE_DECODE_FAILED",cause:u})}let{width:s,height:a}=i.bitmap,d=Math.max(s,a);if(d>o){let u=o/d;i.resize({w:Math.max(1,Math.round(s*u)),h:Math.max(1,Math.round(a*u))})}let l=i.bitmap.width,y=i.bitmap.height;if(t.preferMediaType!=="image/jpeg"){let u=await i.getBuffer("image/png");if(u.length<=r)return{buffer:Buffer.from(u),mediaType:"image/png",width:l,height:y}}for(let u of Dt){let v=await i.getBuffer("image/jpeg",{quality:u});if(v.length<=r)return{buffer:Buffer.from(v),mediaType:"image/jpeg",width:l,height:y}}if(t.preferMediaType==="image/jpeg"){let u=await i.getBuffer("image/png");if(u.length<=r)return{buffer:Buffer.from(u),mediaType:"image/png",width:l,height:y}}throw new x(`Image still exceeds budget (${r} bytes raw) after PNG and JPEG q40 compression. Try a smaller image or take a fresh screenshot of a smaller region.`,{code:"IMAGE_TOO_LARGE"})}n(Q,"normalizePastedImage");import{spawn as Ee}from"node:child_process";import{mkdtemp as Nt,readFile as Bt,rm as Lt}from"node:fs/promises";import{tmpdir as Ft}from"node:os";import Te from"node:path";var xe=5e3;async function we(){switch(process.platform){case"darwin":return jt();case"win32":return Ut();case"linux":return Wt();default:throw new m("UNSUPPORTED_PLATFORM",`Clipboard image fallback is not supported on platform "${process.platform}".`)}}n(we,"readClipboardImage");async function $t(e={}){let t=await we();return t?Q(t,e):null}n($t,"readAndNormalizeClipboardImage");async function Me(e){let t=await Nt(Te.join(Ft(),"kodax-clip-")),o=Te.join(t,"clip.png");try{return await e(o)}finally{await Lt(t,{recursive:!0,force:!0}).catch(r=>{})}}n(Me,"runWithTempPng");async function jt(){return Me(async e=>{let t=`set png_data to (the clipboard as \xABclass PNGf\xBB)
|
|
3
|
+
set fh to open for access POSIX file "${e.replace(/"/g,'\\"')}" with write permission
|
|
4
|
+
write png_data to fh
|
|
5
|
+
close access fh`;return await _e("osascript",["-e",t])?Se(e):null})}n(jt,"readMacClipboard");async function Ut(){return Me(async e=>{let t=["Add-Type -AssemblyName System.Drawing | Out-Null","$img = Get-Clipboard -Format Image","if ($null -eq $img) { exit 1 }",`$img.Save('${e.replace(/'/g,"''")}', [System.Drawing.Imaging.ImageFormat]::Png)`].join("; ");return await _e("powershell",["-NoProfile","-Command",t])?Se(e):null})}n(Ut,"readWinClipboard");async function Wt(){return await Re("wl-paste",["--type","image/png"])??Re("xclip",["-selection","clipboard","-t","image/png","-o"])}n(Wt,"readLinuxClipboard");async function Se(e){try{let t=await Bt(e);return t.length>0?t:null}catch(t){return null}}n(Se,"readNonEmptyFile");function _e(e,t){return new Promise(o=>{let r=!1,i=Ee(e,[...t],{stdio:"ignore",windowsHide:!0}),s=setTimeout(()=>{r||(r=!0,i.kill(),o(!1))},xe);i.once("error",()=>{r||(r=!0,clearTimeout(s),o(!1))}),i.once("exit",a=>{r||(r=!0,clearTimeout(s),o(a===0))})})}n(_e,"runCommand");function Re(e,t){return new Promise(o=>{let r=!1,i=[],s=Ee(e,[...t],{stdio:["ignore","pipe","ignore"],windowsHide:!0}),a=setTimeout(()=>{r||(r=!0,s.kill(),o(null))},xe);s.stdout?.on("data",d=>i.push(d)),s.once("error",()=>{r||(r=!0,clearTimeout(a),o(null))}),s.once("exit",d=>{if(r)return;if(r=!0,clearTimeout(a),d!==0){o(null);return}let l=Buffer.concat(i);o(l.length>0?l:null)})})}n(Re,"collectStdoutBytes");import{createHash as zt}from"node:crypto";import{mkdir as Vt,readdir as Gt,stat as qt,unlink as Ht,writeFile as Jt}from"node:fs/promises";import{tmpdir as Yt}from"node:os";import Z from"node:path";var Ae="KODAX_PASTE_TMP_DIR",Ke=1440*60*1e3;function Xe(){return process.env[Ae]??Z.join(Yt(),"kodax-paste")}n(Xe,"resolvePasteTmpDir");function Qt(e){let t=e?.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return t&&t.length>0?t:"paste"}n(Qt,"sanitizeFileNamePrefix");async function Zt(e,t={}){let o=t.directory??Xe();await Vt(o,{recursive:!0});let r=e.mediaType==="image/jpeg"?".jpg":".png",i=zt("sha256").update(e.buffer).digest("hex").slice(0,16),s=`${Qt(t.fileNamePrefix)}-${i}${r}`,a=Z.join(o,s);return await Jt(a,e.buffer),{type:"image",path:a,mediaType:e.mediaType}}n(Zt,"persistImageAsBlock");async function en(e=Date.now()){let t=Xe(),o;try{o=await Gt(t)}catch(s){return 0}let r=e-Ke,i=0;return await Promise.all(o.filter(s=>/-[0-9a-f]{16}\.(?:png|jpg)$/.test(s)).map(async s=>{let a=Z.join(t,s);try{(await qt(a)).mtimeMs<r&&(await Ht(a),i+=1)}catch(d){}})),i}n(en,"prunePasteTmpDir");import{AsyncLocalStorage as tn}from"node:async_hooks";var nn=new tn;function on(e){let t=nn.getStore()?.credential;return t?O(e,t,new WeakMap):e}n(on,"redactScopedProviderCredential");function O(e,t,o){if(typeof e=="string")return e.split(t).join("[REDACTED_CREDENTIAL]");if(e===null||typeof e!="object")return e;let r=o.get(e);if(r!==void 0)return r;if(e instanceof Error){let s=new Error(O(e.message,t,o));return o.set(e,s),s.name=e.name,e.stack!==void 0&&(s.stack=O(e.stack,t,o)),s}if(Array.isArray(e)){let s=[];o.set(e,s);for(let a of e)s.push(O(a,t,o));return s}let i={};o.set(e,i);for(let[s,a]of Object.entries(Object.getOwnPropertyDescriptors(e))){if(!a.enumerable||!("value"in a))continue;let d=s.split(t).join("[REDACTED_CREDENTIAL]");i[d]=O(a.value,t,o)}return i}n(O,"redactCredentialValue");function W(e,t){return`${e}/${t??""}`}n(W,"capabilityCacheKey");function rn(e,t,o){return e[W(t,o)]?.rejected??[]}n(rn,"getRejectedEfforts");function sn(e,t,o,r,i,s){let a=W(t,o),d=e[a],l=d?.rejected.includes(r)?d.rejected:[...d?.rejected??[],r];return{...e,[a]:{rejected:l,source:i,updatedAt:s}}}n(sn,"addRejectedEffort");function an(e,t,o){if(!t)return{};let r={...e};return delete r[W(t,o)],r}n(an,"removeCacheEntry");function dn(e){if(!e||typeof e!="object")return{};let t={};for(let[o,r]of Object.entries(e)){if(!r||typeof r!="object")continue;let i=r,s=Array.isArray(i.rejected)?i.rejected.filter(l=>typeof l=="string"):[],a=i.source==="probed"?"probed":"observed",d=typeof i.updatedAt=="string"?i.updatedAt:"";t[o]={rejected:s,source:a,updatedAt:d}}return t}n(dn,"sanitizeCapabilityCache");import{AsyncLocalStorage as ln}from"node:async_hooks";var un=new ln,Ie=8,Oe=32;function cn(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}n(cn,"parsePositiveInt");function fn(){let e=ee()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:cn(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??Ie;return Math.max(1,Math.min(Oe,t))}n(fn,"resolveWorkflowMaxConcurrency");function ee(){return un.getStore()}n(ee,"getRunScopedConfig");var D={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},De={...D,multimodalSupport:"image-input"},z={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},Ne={...z,multimodalSupport:"image-input"};function N(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}n(N,"normalizeCapabilityProfile");import{createRequire as Mn}from"node:module";import{parse as li}from"partial-json";var Ki=Mn(import.meta.url);import{createRequire as An}from"node:module";var qi=An(import.meta.url);var Yi=Object.freeze({status:"terminated"}),Qi=Object.freeze({status:"already-exited"}),Zi=Object.freeze({status:"unknown"}),es=String.raw`
|
|
6
|
+
using System;
|
|
7
|
+
using System.Runtime.InteropServices;
|
|
8
|
+
using System.Text;
|
|
9
|
+
public static class KodaXNativeProcessSnapshot {
|
|
10
|
+
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
|
11
|
+
private struct ProcessEntry32 {
|
|
12
|
+
public uint dwSize;
|
|
13
|
+
public uint cntUsage;
|
|
14
|
+
public uint th32ProcessID;
|
|
15
|
+
public IntPtr th32DefaultHeapID;
|
|
16
|
+
public uint th32ModuleID;
|
|
17
|
+
public uint cntThreads;
|
|
18
|
+
public uint th32ParentProcessID;
|
|
19
|
+
public int pcPriClassBase;
|
|
20
|
+
public uint dwFlags;
|
|
21
|
+
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
|
|
22
|
+
public string szExeFile;
|
|
23
|
+
}
|
|
24
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
25
|
+
private static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processId);
|
|
26
|
+
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
27
|
+
private static extern bool Process32First(IntPtr snapshot, ref ProcessEntry32 entry);
|
|
28
|
+
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
29
|
+
private static extern bool Process32Next(IntPtr snapshot, ref ProcessEntry32 entry);
|
|
30
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
31
|
+
private struct FileTime {
|
|
32
|
+
public uint Low;
|
|
33
|
+
public uint High;
|
|
34
|
+
}
|
|
35
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
36
|
+
private static extern IntPtr OpenProcess(uint access, bool inheritHandle, uint processId);
|
|
37
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
38
|
+
private static extern bool GetProcessTimes(IntPtr process, out FileTime creation, out FileTime exit, out FileTime kernel, out FileTime user);
|
|
39
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
40
|
+
private static extern bool TerminateProcess(IntPtr process, uint exitCode);
|
|
41
|
+
[DllImport("kernel32.dll")]
|
|
42
|
+
private static extern void GetSystemTimeAsFileTime(out FileTime systemTime);
|
|
43
|
+
[DllImport("kernel32.dll")]
|
|
44
|
+
private static extern bool CloseHandle(IntPtr handle);
|
|
45
|
+
private static ulong ReadCreationTime(uint processId) {
|
|
46
|
+
var process = OpenProcess(0x1000, false, processId);
|
|
47
|
+
if (process == IntPtr.Zero) return 0;
|
|
48
|
+
try {
|
|
49
|
+
FileTime creation, exit, kernel, user;
|
|
50
|
+
if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
|
|
51
|
+
return ((ulong)creation.High << 32) | creation.Low;
|
|
52
|
+
} finally {
|
|
53
|
+
CloseHandle(process);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
public static int TerminateExact(uint processId, ulong expectedCreationTime) {
|
|
57
|
+
var process = OpenProcess(0x1001, false, processId);
|
|
58
|
+
if (process == IntPtr.Zero) return 0;
|
|
59
|
+
try {
|
|
60
|
+
FileTime creation, exit, kernel, user;
|
|
61
|
+
if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
|
|
62
|
+
var actual = (((ulong)creation.High << 32) | creation.Low) / 10000;
|
|
63
|
+
if (actual != expectedCreationTime) return 2;
|
|
64
|
+
return TerminateProcess(process, 1) ? 1 : 0;
|
|
65
|
+
} finally {
|
|
66
|
+
CloseHandle(process);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
public static string ReadRows() {
|
|
70
|
+
FileTime cutoffTime;
|
|
71
|
+
GetSystemTimeAsFileTime(out cutoffTime);
|
|
72
|
+
var cutoff = (((ulong)cutoffTime.High << 32) | cutoffTime.Low) / 10000;
|
|
73
|
+
var snapshot = CreateToolhelp32Snapshot(2, 0);
|
|
74
|
+
if (snapshot == new IntPtr(-1)) return string.Empty;
|
|
75
|
+
var rows = new StringBuilder();
|
|
76
|
+
var entry = new ProcessEntry32();
|
|
77
|
+
entry.dwSize = (uint)Marshal.SizeOf(entry);
|
|
78
|
+
try {
|
|
79
|
+
if (!Process32First(snapshot, ref entry)) return string.Empty;
|
|
80
|
+
do {
|
|
81
|
+
var creationTime = ReadCreationTime(entry.th32ProcessID) / 10000;
|
|
82
|
+
if (creationTime == 0 || creationTime <= cutoff) {
|
|
83
|
+
rows.Append(entry.th32ProcessID).Append(',').Append(entry.th32ParentProcessID).Append(',').Append(creationTime).Append('\n');
|
|
84
|
+
}
|
|
85
|
+
entry.dwSize = (uint)Marshal.SizeOf(entry);
|
|
86
|
+
} while (Process32Next(snapshot, ref entry));
|
|
87
|
+
return rows.ToString();
|
|
88
|
+
} finally {
|
|
89
|
+
CloseHandle(snapshot);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}`;import We from"node:fs";import ze from"node:os";import Ve from"node:path";var Dn="gpt-5.4",Nn="auto-gemini-3",Bn=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],Ln=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function Ge(e){let t=new Set,o=[];for(let r of e){let i=r.trim();if(!i)continue;let s=i.toLowerCase();t.has(s)||(t.add(s),o.push(i))}return o}n(Ge,"dedupePreserveOrder");function Fn(){let e=Ve.join(ze.homedir(),".codex","config.toml");try{return We.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}n(Fn,"readCodexConfiguredModel");function $n(){let e=Ve.join(ze.homedir(),".gemini","settings.json");try{let t=JSON.parse(We.readFileSync(e,"utf8")),o=typeof t.model=="string"?t.model.trim():"";return o||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}n($n,"readGeminiConfiguredModel");function S(){return Fn()||Dn}n(S,"getCodexCliDefaultModel");function _(){return $n()||Nn}n(_,"getGeminiCliDefaultModel");function B(){return Ge([S(),...Bn])}n(B,"getCodexCliKnownModels");function L(){return Ge([_(),...Ln])}n(L,"getGeminiCliKnownModels");var Ds=_(),Ns=L();var Hs=S(),Js=B();import{existsSync as Qn,readFileSync as Zn}from"node:fs";import K from"node:path";import{fileURLToPath as eo}from"node:url";var qe=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],He=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Je=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Ye=["zai-glm-5.3","zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],Qe=["max_tokens","max_completion_tokens"],Ze=["native","image-input-native","cli-bridge","image-input-cli-bridge"],et=["count-tokens","models-list","minimal-message","unsupported"];function C(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}n(C,"isPlainObject");function w(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}n(w,"requireString");function A(e,t){if(e!==void 0)return w(e,t)}n(A,"optionalString");function ot(e,t){if(e!==void 0){if(typeof e!="string"||!Qe.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Qe.join(", ")}, got ${JSON.stringify(e)}`);return e}}n(ot,"optionalMaxOutputTokensField");function E(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}n(E,"optionalNumber");function h(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}n(h,"optionalBoolean");function tt(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((o,r)=>w(o,`${t}[${r}]`))}}n(tt,"optionalStringArray");function Un(e,t){if(e===void 0)return;if(!C(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let o={};for(let[r,i]of Object.entries(e))o[r]=w(i,`${t}.${r}`);return o}n(Un,"optionalStringMap");function Wn(e,t){if(e!==void 0){if(typeof e!="string"||!Ye.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ye.join(", ")}, got ${JSON.stringify(e)}`);return e}}n(Wn,"optionalReasoningPreset");function oe(e,t){if(typeof e!="string"||!qe.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${qe.join(", ")}, got ${JSON.stringify(e)}`);return e}n(oe,"requireReasoningCapability");function zn(e,t){if(typeof e!="string"||!He.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${He.join(", ")}, got ${JSON.stringify(e)}`);return e}n(zn,"requireEffortStrategy");function Vn(e,t){if(e!==void 0){if(typeof e!="string"||!Je.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Je.join(", ")}, got ${JSON.stringify(e)}`);return e}}n(Vn,"optionalThinkingStrategy");function nt(e,t){if(e===void 0)return;if(!C(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let o=zn(e.effortStrategy,`${t}.effortStrategy`),r=Wn(e.reasoningPreset,`${t}.reasoningPreset`),i=Vn(e.thinkingStrategy,`${t}.thinkingStrategy`),s=A(e.defaultEffort,`${t}.defaultEffort`),a=Un(e.effortAliases,`${t}.effortAliases`),d=tt(e.disabledEfforts,`${t}.disabledEfforts`),l=tt(e.localRejectEfforts,`${t}.localRejectEfforts`),y=h(e.allowCustomEffort,`${t}.allowCustomEffort`),u=h(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),v=h(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),P=h(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),T=h(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),c=h(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),R=h(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),b=h(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),f={effortStrategy:o};if(r!==void 0&&(f.reasoningPreset=r),i!==void 0&&(f.thinkingStrategy=i),s!==void 0&&(f.defaultEffort=s),a!==void 0&&(f.effortAliases=a),d!==void 0&&(f.disabledEfforts=d),l!==void 0&&(f.localRejectEfforts=l),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);f.supportedEfforts=e.supportedEfforts.map((p,g)=>{if(!C(p))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${g}] must be an object`);return{value:w(p.value,`${t}.supportedEfforts[${g}].value`),...A(p.description,`${t}.supportedEfforts[${g}].description`)!==void 0?{description:A(p.description,`${t}.supportedEfforts[${g}].description`)}:{},...h(p.isDefault,`${t}.supportedEfforts[${g}].isDefault`)!==void 0?{isDefault:h(p.isDefault,`${t}.supportedEfforts[${g}].isDefault`)}:{},...h(p.isUserVisible,`${t}.supportedEfforts[${g}].isUserVisible`)!==void 0?{isUserVisible:h(p.isUserVisible,`${t}.supportedEfforts[${g}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!C(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let p={};for(let[g,ge]of Object.entries(e.budgetByEffort))p[g]=E(ge,`${t}.budgetByEffort.${g}`)??0;f.budgetByEffort=p}return y!==void 0&&(f.allowCustomEffort=y),u!==void 0&&(f.supportsReasoningEffort=u),v!==void 0&&(f.supportsReasoningSummary=v),P!==void 0&&(f.supportsEncryptedReasoningReplay=P),T!==void 0&&(f.supportsAdaptiveThinking=T),c!==void 0&&(f.supportsManualThinkingBudget=c),R!==void 0&&(f.supportsDisabledThinking=R),b!==void 0&&(f.requiresEffortBetaHeader=b),f}n(nt,"validateReasoningProfile");function rt(e,t){let o=e.reasoningProfile,r=e.reasoningCapabilityV2;if(o!==void 0&&r!==void 0)throw new Error(`provider-capabilities.json: ${t} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return o!==void 0?nt(o,`${t}.reasoningProfile`):nt(r,`${t}.reasoningCapabilityV2`)}n(rt,"validateReasoningProfileField");function Gn(e,t){if(typeof e!="string"||!Ze.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ze.join(", ")}, got ${JSON.stringify(e)}`);return e}n(Gn,"requireProfileName");function qn(e,t){if(typeof e!="string"||!et.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${et.join(", ")}, got ${JSON.stringify(e)}`);return e}n(qn,"requireVerifyStrategy");function Hn(e,t){if(!C(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let o=w(e.id,`${t}.id`),r=A(e.wireModel,`${t}.wireModel`),i=A(e.displayName,`${t}.displayName`),s=E(e.contextWindow,`${t}.contextWindow`),a=E(e.maxOutputTokens,`${t}.maxOutputTokens`),d=ot(e.maxOutputTokensField,`${t}.maxOutputTokensField`),l=E(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),y=h(e.replayReasoningContent,`${t}.replayReasoningContent`),u=h(e.strictThinkingSignature,`${t}.strictThinkingSignature`),v=E(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),P=e.reasoningCapability===void 0?void 0:oe(e.reasoningCapability,`${t}.reasoningCapability`),T=rt(e,t),c={id:o};return r!==void 0&&(c.wireModel=r),i!==void 0&&(c.displayName=i),s!==void 0&&(c.contextWindow=s),a!==void 0&&(c.maxOutputTokens=a),d!==void 0&&(c.maxOutputTokensField=d),l!==void 0&&(c.thinkingBudgetCap=l),P!==void 0&&(c.reasoningCapability=P),T!==void 0&&(c.reasoningProfile=T),y!==void 0&&(c.replayReasoningContent=y),u!==void 0&&(c.strictThinkingSignature=u),v!==void 0&&(c.streamMaxDurationMs=v),c}n(Hn,"validateModelDescriptor");function Jn(e,t){if(e===void 0)return;if(!C(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let o={};for(let[r,i]of Object.entries(e))o[r]=oe(i,`${t}.${r}`);return o}n(Jn,"validateModelReasoningCapabilities");function Yn(e,t){if(!C(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let o=h(e.cliBridge,`providers.${t}.cliBridge`),r=w(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),i=oe(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=rt(e,`providers.${t}`),a=Gn(e.capabilityProfile,`providers.${t}.capabilityProfile`),d=qn(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(o&&d!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${d}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let l=E(e.contextWindow,`providers.${t}.contextWindow`),y=E(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),u=ot(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),v=E(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),P=h(e.supportsThinking,`providers.${t}.supportsThinking`),T=Jn(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),c=A(e.model,`providers.${t}.model`);if(o&&(c!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!o&&c===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let R;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);R=e.models.map((p,g)=>Hn(p,`providers.${t}.models[${g}]`));let f=new Set([...c===void 0?[]:[c],...R.map(p=>p.id)]);for(let[p,g]of R.entries())if(g.wireModel!==void 0&&!f.has(g.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${p}].wireModel must reference a declared model, got ${JSON.stringify(g.wireModel)}`)}let b={apiKeyEnv:r,reasoningCapability:i,capabilityProfile:a,verifyStrategy:d};return s!==void 0&&(b.reasoningProfile=s),c!==void 0&&(b.model=c),R!==void 0&&(b.models=R),l!==void 0&&(b.contextWindow=l),y!==void 0&&(b.maxOutputTokens=y),u!==void 0&&(b.maxOutputTokensField=u),v!==void 0&&(b.thinkingBudgetCap=v),P!==void 0&&(b.supportsThinking=P),T!==void 0&&(b.modelReasoningCapabilities=T),o&&(b.cliBridge=!0),b}n(Yn,"validateProviderEntry");function it(e){if(!C(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=w(e.updatedAt,"updatedAt");if(!C(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let o={};for(let[r,i]of Object.entries(e.providers))o[r]=Yn(i,r);return{version:1,updatedAt:t,providers:o}}n(it,"validateProviderCapabilitiesJson");var to=Object.freeze({native:D,"image-input-native":De,"cli-bridge":z,"image-input-cli-bridge":Ne}),H=null;function no(){if(process.env.KODAX_BUNDLED==="true")return K.join(K.dirname(process.execPath),"provider-capabilities.json");let e=K.dirname(eo(import.meta.url)),t=[K.join(e,"provider-capabilities.json"),K.join(K.dirname(e),"provider-capabilities.json")];for(let o of t)if(Qn(o))return o;return t[0]}n(no,"resolveJsonPath");function oo(e){if(e.models){for(let t of e.models)t.reasoningProfile&&st(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&st(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}n(oo,"deepFreezeSnapshot");function st(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}n(st,"freezeReasoningProfile");function ro(e){if(e==="gemini-cli"){let t=_();return{model:t,models:L().filter(o=>o!==t).map(o=>({id:o}))}}if(e==="codex-cli"){let t=S();return{model:t,models:B().filter(o=>o!==t).map(o=>({id:o}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}n(ro,"resolveCliBridgeModels");function io(e,t){let o=to[t.capabilityProfile];if(!o)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let i=ro(e),s={model:i.model,models:i.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:o,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(s.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(s.supportsThinking=t.supportsThinking),s}let r={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:o,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(r.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(r.models=t.models),t.modelReasoningCapabilities!==void 0&&(r.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(r.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(r.maxOutputTokens=t.maxOutputTokens),t.maxOutputTokensField!==void 0&&(r.maxOutputTokensField=t.maxOutputTokensField),t.thinkingBudgetCap!==void 0&&(r.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(r.supportsThinking=t.supportsThinking),r}n(io,"buildSnapshot");function at(){if(H)return H;let e=no(),t;try{let i=Zn(e,"utf8");t=JSON.parse(i)}catch(i){let s=i instanceof Error?i.message:String(i);throw new Error(`provider-capabilities loader: failed to read ${e}: ${s}`)}let o=it(t),r={};for(let[i,s]of Object.entries(o.providers))r[i]=oo(io(i,s));return H=Object.freeze(r),H}n(at,"getProviderSnapshots");var X=at();var dt=process.env.KODAX_PROVIDER??"zhipu-coding";var F=["image/png","image/jpeg","image/webp","image/gif"],$=["video/mp4","video/mpeg","video/quicktime","video/x-msvideo","video/x-flv","video/webm","video/x-ms-wmv","video/3gpp"],Xo=[],Io=new Set(["anthropic","openai"]),Oo=new Set(["ark-coding/doubao-seed-2.0-code","ark-coding/doubao-seed-2.0-pro","ark-coding/kimi-k2.6","ark-coding/kimi-k2.7-code","ark-coding/minimax-m3","kimi-code/k3-256k","qwen-token-plan/qwen3.8-max","qwen-token-plan/qwen3.8-max-preview","qwen-token-plan/qwen3.7-plus","qwen-token-plan/qwen3.6-flash"]),Do=new Set(["kimi-code/kimi-for-coding","kimi-code/kimi-for-coding-highspeed","kimi-code/k3","kimi/kimi-k3","kimi/kimi-k2.5","kimi/kimi-k2.6","kimi/kimi-k2.7-code","kimi/kimi-k2.7-code-highspeed","minimax-coding/minimax-m3","minimax/minimax-m3","mimo-coding/mimo-v2.5","mimo/mimo-v2.5"]);function le(e){return{nativeSupported:!1,sdkSupported:!1,status:"unsupported",mediaTypes:[],maxCount:0,reason:e}}n(le,"unsupported");function No(e){return{nativeSupported:!0,sdkSupported:!0,status:"supported",mediaTypes:F,nativeMediaTypes:F,reason:e}}n(No,"supportedImage");function Bo(e){return{nativeSupported:!0,sdkSupported:!1,status:"provider-native-unwired",mediaTypes:[],nativeMediaTypes:$,maxCount:0,reason:e}}n(Bo,"nativeVideoUnwired");function Lo(e){return e.trim().toLowerCase()}n(Lo,"normalizeProvider");function Fo(e){return X[e]?.model}n(Fo,"resolveProviderDefaultModel");function Et(e,t){if(!t)return;let o=t.trim().toLowerCase();if(e==="kimi"){if(o==="k2.5")return"kimi-k2.5";if(o==="k2.6")return"kimi-k2.6";if(o==="k2.7-code")return"kimi-k2.7-code";if(o==="k2.7-code-highspeed")return"kimi-k2.7-code-highspeed"}return(e==="minimax-coding"||e==="minimax")&&o==="minimax-m3"?"minimax-m3":o}n(Et,"normalizeModel");function $o(e){if(!Io.has(e))return!1;let t=X[e];return t?N(t.capabilityProfile).multimodalSupport!=="none":!1}n($o,"hasOfficialImageSupport");function jo(e,t){let o=Et(e,t);if(!o)return!1;let r=`${e}/${o}`;return Do.has(r)}n(jo,"hasSourceBackedNativeMedia");function Uo(e,t){let o=Et(e,t);return o?Oo.has(`${e}/${o}`):!1}n(Uo,"hasSourceBackedImage");function Wo(e,t,o){if(o)return"source-backed";if(t){if(e==="openai")return"openai-official";if(e==="anthropic")return"anthropic-official"}}n(Wo,"resolveImageCapabilityRoute");function zo(e){switch(e){case"openai-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but OpenAI requires non-animated GIF semantics.";case"anthropic-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but Anthropic uses only the first frame of animated GIFs.";case"source-backed":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif; animated-GIF interpretation is provider-owned."}}n(zo,"imageCapabilityReason");function ue(e){let t=Lo(e.provider),o=e.model?.trim()||Fo(t),r=$o(t),i=jo(t,o),s=i||Uo(t,o),a=Wo(t,r,s),d=a!==void 0,l=i;return{text:!0,image:d?No(zo(a)):le("No verified KodaX image-input route for this provider/model."),video:l?Bo("Model route is native-video capable, but KodaX SDK video sending is not wired yet. Reject or downgrade before send."):le("No verified native video route for this provider/model."),file:le("File artifact contract is stable, but KodaX SDK file sending/extraction is not wired yet. Reject or downgrade before send.")}}n(ue,"getModelInputCapabilities");function Vo(e){return F.includes(e)}n(Vo,"isKnownImageMediaType");function Go(e){return $.includes(e)}n(Go,"isKnownVideoMediaType");function ce(e){return`${e.provider}${e.model?`/${e.model}`:""}`}n(ce,"routeLabel");function fe(e){return e.reason?`${e.status}: ${e.reason}`:e.status}n(fe,"capabilityDetail");function pe(e,t){if(e.length===0)return;let o=ue(t);for(let r of e){let i=r;if(i.kind==="image"){if(!o.image.nativeSupported||!o.image.sdkSupported)throw new m("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume image artifacts: ${ce(t)}.`,{detail:fe(o.image)});if(typeof i.mediaType=="string"&&!Vo(i.mediaType))throw new m("UNSUPPORTED_MEDIA_TYPE",`Unsupported image media type: ${i.mediaType}.`);continue}throw i.kind==="video"?typeof i.mediaType!="string"||!Go(i.mediaType)?new m("UNSUPPORTED_MEDIA_TYPE",`Unsupported video media type: ${String(i.mediaType)}.`,{detail:`Supported video media types: ${$.join(", ")}`}):new m("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume video artifacts through this SDK runtime: ${ce(t)}.`,{detail:fe(o.video)}):i.kind==="file"?typeof i.mediaType=="string"&&typeof i.mimeType=="string"&&i.mediaType!==i.mimeType?new m("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${i.mediaType} != ${i.mimeType}.`):new m("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume file artifacts through this SDK runtime: ${ce(t)}.`,{detail:fe(o.file)}):new m("MODEL_INPUT_UNSUPPORTED",`Unsupported input artifact kind: ${String(i.kind)}.`)}}n(pe,"validateInputArtifactsForModel");function qo(e){if(pe(e.inputArtifacts??[],e),e.agentId!==void 0&&e.sessionId!==void 0)throw new Error("enqueueWithArtifacts accepts either agentId or sessionId, not both.");if(e.sessionId!==void 0&&e.sessionId.trim().length===0)throw new Error("enqueueWithArtifacts sessionId must not be empty.");let t=e.agentId??(e.sessionId!==void 0?J(e.sessionId,"/root"):Y());return I().enqueue({priority:e.priority??"user",mode:"prompt",content:e.content,agentId:t,inputArtifacts:e.inputArtifacts})}n(qo,"enqueueWithArtifacts");export{on as a,rn as b,sn as c,an as d,dn as e,fn as f,U as g,I as h,wt as i,J as j,Mt as k,Y as l,St as m,he as n,ye as o,_t as p,m as q,x as r,ve as s,ke as t,Xt as u,It as v,Ot as w,Ce as x,Pe as y,Q as z,we as A,$t as B,Ae as C,Ke as D,Zt as E,en as F,F as G,$ as H,Xo as I,ue as J,pe as K,qo as L};
|