@kyo-so/cli 0.6.0 → 0.7.0
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 +19 -0
- package/README.ja.md +19 -5
- package/README.md +19 -5
- package/README.zh-CN.md +19 -5
- package/dist/bin/kyoso.js +31 -6
- package/dist/config/schema.d.ts +2 -0
- package/dist/core/constants.d.ts +1 -1
- package/dist/core/types.d.ts +1 -0
- package/dist/index.js +30 -5
- package/examples/kyoso.toml +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.7.0] - 2026-07-09
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `agents.<name>.effort` config field for Codex and Claude, mirroring
|
|
15
|
+
`agents.<name>.model`. Kyoso sends it once per session as an ACP
|
|
16
|
+
`session/set_config_option` request (`effort` for Claude,
|
|
17
|
+
`reasoning_effort` for Codex). The request is fail-soft: a rejection is
|
|
18
|
+
logged to stderr as a sanitized warning and surfaced to MCP/JSON callers
|
|
19
|
+
via `result.audit.warnings`, and the review continues at the backend's
|
|
20
|
+
own default effort. Settable from both user-global and project TOML
|
|
21
|
+
(same risk profile as `model`: no command execution or env forwarding).
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Documentation still described the default Claude agent timeout as 240
|
|
26
|
+
seconds; README (all languages), the design document, and the example
|
|
27
|
+
config now reflect the 300-second default introduced in 0.6.0.
|
|
28
|
+
|
|
10
29
|
## [0.6.0] - 2026-07-08
|
|
11
30
|
|
|
12
31
|
### Added
|
package/README.ja.md
CHANGED
|
@@ -22,6 +22,16 @@ Kyo-so は Codex と Claude の reviewer を連携させ、次のレビューを
|
|
|
22
22
|
|
|
23
23
|
Kyoso はコード変更を適用しません。
|
|
24
24
|
|
|
25
|
+
## Review Flow
|
|
26
|
+
|
|
27
|
+
3 つの review tool はすべて同じパイプラインで動きます。secret scan の後、read-only の一時スナップショット上で reviewer ensemble を ACP 経由で並列実行し、所見の集約・ゲート適用・決定を行います。
|
|
28
|
+
|
|
29
|
+
<p align="center">
|
|
30
|
+
<img src="https://raw.githubusercontent.com/hokupod/kyoso/main/docs/assets/kyoso-review-flow.ja.svg" alt="Kyo-so のレビュー実行フロー。MCP/CLI リクエストから secret scan、スナップショット、アンサンブルレビュー、集約、ゲート、最終決定まで" width="640">
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
backend が 1 つだけ有効な場合は、2 role の ensemble の代わりに 1 agent が `combined_reviewer` として実行されます。この図の Mermaid ソースは [docs/assets/](docs/assets/) にあります。
|
|
34
|
+
|
|
25
35
|
## Quick Start
|
|
26
36
|
|
|
27
37
|
グローバルインストールは不要です。Kyoso は `npx` または `bunx` で実行します。
|
|
@@ -229,18 +239,20 @@ Default child-agent env allowlist:
|
|
|
229
239
|
|
|
230
240
|
Kyoso は subprocesses の起動に必要な最小限の runtime env も forward します: `PATH`, `HOME`, `TMPDIR`, `TEMP`, `TMP`, `LANG`, `LC_ALL`, `SHELL`, `USER`, `USERNAME`, `SystemRoot`。
|
|
231
241
|
|
|
232
|
-
## Agent Models
|
|
242
|
+
## Agent Models and Effort
|
|
233
243
|
|
|
234
|
-
`agents.<name>.model` を省略すると、各 agent 独自の default を使用します。Codex は `~/.codex/config.toml` などの local Codex config を使用し、Claude は adapter default を使用します。
|
|
244
|
+
`agents.<name>.model` または `agents.<name>.effort` を省略すると、各 agent 独自の default を使用します。Codex は `~/.codex/config.toml` などの local Codex config を使用し、Claude は adapter default を使用します。
|
|
235
245
|
|
|
236
246
|
指定できる model 名は [Claude models overview](https://platform.claude.com/docs/en/about-claude/models/overview) と [Codex models](https://developers.openai.com/codex/models) を参照してください。
|
|
237
247
|
|
|
238
248
|
```toml
|
|
239
249
|
[agents.codex]
|
|
240
250
|
model = "gpt-5.5"
|
|
251
|
+
effort = "medium"
|
|
241
252
|
|
|
242
253
|
[agents.claude]
|
|
243
254
|
model = "claude-sonnet-5"
|
|
255
|
+
effort = "high"
|
|
244
256
|
```
|
|
245
257
|
|
|
246
258
|
Kyoso は model pins を adapter-supported configuration に mapping します。
|
|
@@ -248,6 +260,8 @@ Kyoso は model pins を adapter-supported configuration に mapping します
|
|
|
248
260
|
- Claude: `agents.claude.env` または whitelisted parent env で未設定の場合に `ANTHROPIC_MODEL` を設定します。
|
|
249
261
|
- Codex: `CODEX_CONFIG` が未設定の場合、`CODEX_CONFIG={"model":"..."}` を設定します。model pin と他の Codex session config を組み合わせるには、`agents.codex.env.CODEX_CONFIG` を直接設定してください。
|
|
250
262
|
|
|
263
|
+
effort は仕組みが異なります。Kyoso は env var を設定せず、session ごとに最初の prompt の前に一度、backend agent へ ACP の `session/set_config_option` リクエストを送信します(Claude は `configId: "effort"`、Codex は `configId: "reasoning_effort"`)。有効な値は backend agent のバージョンと選択した model に依存します(例えば Claude は effort levels に対応した model でのみこの option を公開します)。Kyoso は `effort` の値自体を validate しません。backend agent がリクエストを reject した場合、または対応していない場合、Kyoso は stderr に log を出力してレビューを継続します。
|
|
264
|
+
|
|
251
265
|
## Audit
|
|
252
266
|
|
|
253
267
|
Audit traces は次の場所に書き込まれます。
|
|
@@ -269,7 +283,7 @@ Kyoso は次の順に config を load します。
|
|
|
269
283
|
- project TOML: `<cwd>/kyoso.toml`
|
|
270
284
|
- `--network` などの CLI flags
|
|
271
285
|
|
|
272
|
-
Project `kyoso.toml` は declarative で、trust approval は不要です。tools toggles、agent `enabled` / `model` / `role` / `timeoutMs`、workspace byte limits と additive `workspace.deny`、verification settings、advisory judge settings、tightening-only security/network settings を設定できます。
|
|
286
|
+
Project `kyoso.toml` は declarative で、trust approval は不要です。tools toggles、agent `enabled` / `model` / `effort` / `role` / `timeoutMs`、workspace byte limits と additive `workspace.deny`、verification settings、advisory judge settings、tightening-only security/network settings を設定できます。
|
|
273
287
|
|
|
274
288
|
Global TOML は command 実行や env forwarding を含む user-owned settings 用です。
|
|
275
289
|
|
|
@@ -284,7 +298,7 @@ CODEX_CONFIG = '{"model":"gpt-5.5"}'
|
|
|
284
298
|
|
|
285
299
|
`kyoso.config.ts` は deprecated ですが、互換性のため引き続き supported です。trust-on-first-use approval の後にのみ load され、trusted hashes は `~/.kyoso/trusted-configs.json` に保存されます。`kyoso.toml` と `kyoso.config.ts` が両方ある場合、Kyoso は TOML を使用し TypeScript config を無視します。
|
|
286
300
|
|
|
287
|
-
Default agent timeouts は Codex 120 秒、Claude
|
|
301
|
+
Default agent timeouts は Codex 120 秒、Claude 300 秒です。MCP clients は tool calls に少なくとも 360 秒を許可してください。`verification.enabled` が true の場合、Kyoso は追加の cross-agent verification round を実行することがあるため、少なくとも 480 秒を許可してください。
|
|
288
302
|
|
|
289
303
|
Optional finding verification は default で disabled です:
|
|
290
304
|
|
|
@@ -318,7 +332,7 @@ Team admins は organization Usage credits も確認してください。Credits
|
|
|
318
332
|
|
|
319
333
|
## Troubleshooting
|
|
320
334
|
|
|
321
|
-
- MCP timeout: client tool timeouts を少なくとも 360 秒、`verification.enabled` が true の場合は少なくとも 480 秒に設定してください。Kyoso defaults は Codex 120 秒、Claude
|
|
335
|
+
- MCP timeout: client tool timeouts を少なくとも 360 秒、`verification.enabled` が true の場合は少なくとも 480 秒に設定してください。Kyoso defaults は Codex 120 秒、Claude 300 秒、verification 90 秒です。
|
|
322
336
|
- Fresh npm release: safe-chain などの minimum-package-age protection により、publish 直後は `npx @kyo-so/cli` の解決が一時的に block される場合があります。
|
|
323
337
|
- Deprecated TypeScript config: `--trust-config` を渡さない限り、untrusted `kyoso.config.ts` は skip されます。新規設定は `kyoso.toml` を使ってください。
|
|
324
338
|
|
package/README.md
CHANGED
|
@@ -20,6 +20,16 @@ It coordinates Codex and Claude reviewers for:
|
|
|
20
20
|
|
|
21
21
|
Kyoso does not apply code changes.
|
|
22
22
|
|
|
23
|
+
## Review Flow
|
|
24
|
+
|
|
25
|
+
All three review tools run the same pipeline: scan for secrets, snapshot the workspace read-only, run the reviewer ensemble in parallel over ACP, then aggregate findings, apply gates, and decide.
|
|
26
|
+
|
|
27
|
+
<p align="center">
|
|
28
|
+
<img src="https://raw.githubusercontent.com/hokupod/kyoso/main/docs/assets/kyoso-review-flow.en.svg" alt="Kyo-so review execution flow, from MCP/CLI request through secret scan, snapshot, ensemble review, aggregation, gates, and final decision" width="640">
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
With a single backend enabled, one agent runs as `combined_reviewer` instead of the two-role ensemble. The Mermaid sources for this diagram live in [docs/assets/](docs/assets/).
|
|
32
|
+
|
|
23
33
|
## Quick Start
|
|
24
34
|
|
|
25
35
|
No global install is required. Run Kyoso through `npx` or `bunx`.
|
|
@@ -230,18 +240,20 @@ Default child-agent env allowlist:
|
|
|
230
240
|
|
|
231
241
|
Kyoso also forwards minimal runtime env needed to launch subprocesses: `PATH`, `HOME`, `TMPDIR`, `TEMP`, `TMP`, `LANG`, `LC_ALL`, `SHELL`, `USER`, `USERNAME`, and `SystemRoot`.
|
|
232
242
|
|
|
233
|
-
## Agent Models
|
|
243
|
+
## Agent Models and Effort
|
|
234
244
|
|
|
235
|
-
Omit `agents.<name>.model` to use each agent's own default. Codex uses the local Codex config, such as `~/.codex/config.toml`; Claude uses the adapter default.
|
|
245
|
+
Omit `agents.<name>.model` or `agents.<name>.effort` to use each agent's own default. Codex uses the local Codex config, such as `~/.codex/config.toml`; Claude uses the adapter default.
|
|
236
246
|
|
|
237
247
|
For available model names, see the [Claude models overview](https://platform.claude.com/docs/en/about-claude/models/overview) and the [Codex models list](https://developers.openai.com/codex/models).
|
|
238
248
|
|
|
239
249
|
```toml
|
|
240
250
|
[agents.codex]
|
|
241
251
|
model = "gpt-5.5"
|
|
252
|
+
effort = "medium"
|
|
242
253
|
|
|
243
254
|
[agents.claude]
|
|
244
255
|
model = "claude-sonnet-5"
|
|
256
|
+
effort = "high"
|
|
245
257
|
```
|
|
246
258
|
|
|
247
259
|
Kyoso maps model pins to adapter-supported configuration:
|
|
@@ -249,6 +261,8 @@ Kyoso maps model pins to adapter-supported configuration:
|
|
|
249
261
|
- Claude: sets `ANTHROPIC_MODEL` when not already set in `agents.claude.env` or a whitelisted parent env.
|
|
250
262
|
- Codex: sets `CODEX_CONFIG={"model":"..."}` when `CODEX_CONFIG` is not already set. To combine other Codex session config with a model pin, set `agents.codex.env.CODEX_CONFIG` directly.
|
|
251
263
|
|
|
264
|
+
Effort works differently: Kyoso does not set an env var for it. Instead, it sends an ACP `session/set_config_option` request to the backend agent once per session, before the first prompt: `configId: "effort"` for Claude, `configId: "reasoning_effort"` for Codex. Valid values depend on the backend agent version and the selected model (for example, Claude only exposes effort levels for models that support them). Kyoso does not validate `effort` values itself; if the backend agent rejects the request or does not support it, Kyoso logs it to stderr and continues the review.
|
|
265
|
+
|
|
252
266
|
## Audit
|
|
253
267
|
|
|
254
268
|
Audit traces are written to:
|
|
@@ -270,7 +284,7 @@ Kyoso loads config in this order:
|
|
|
270
284
|
- project TOML: `<cwd>/kyoso.toml`
|
|
271
285
|
- CLI flags such as `--network`
|
|
272
286
|
|
|
273
|
-
Project `kyoso.toml` is declarative and does not require trust approval. It can set safe project-scoped keys such as tool toggles, agent `enabled` / `model` / `role` / `timeoutMs`, workspace byte limits and additive `workspace.deny`, verification settings, advisory judge settings, and tightening-only security/network settings.
|
|
287
|
+
Project `kyoso.toml` is declarative and does not require trust approval. It can set safe project-scoped keys such as tool toggles, agent `enabled` / `model` / `effort` / `role` / `timeoutMs`, workspace byte limits and additive `workspace.deny`, verification settings, advisory judge settings, and tightening-only security/network settings.
|
|
274
288
|
|
|
275
289
|
Global TOML is for user-owned settings that can launch commands or forward environment variables:
|
|
276
290
|
|
|
@@ -285,7 +299,7 @@ CODEX_CONFIG = '{"model":"gpt-5.5"}'
|
|
|
285
299
|
|
|
286
300
|
`kyoso.config.ts` is deprecated but still supported for compatibility. It is loaded only after trust-on-first-use approval; trusted hashes are stored in `~/.kyoso/trusted-configs.json`. If both `kyoso.toml` and `kyoso.config.ts` exist, Kyoso uses TOML and ignores the TypeScript config.
|
|
287
301
|
|
|
288
|
-
Default agent timeouts are Codex 120 seconds and Claude
|
|
302
|
+
Default agent timeouts are Codex 120 seconds and Claude 300 seconds. MCP clients should allow at least 360 seconds for tool calls. If `verification.enabled` is true, allow at least 480 seconds because Kyoso may run an additional cross-agent verification round.
|
|
289
303
|
|
|
290
304
|
Optional finding verification is disabled by default:
|
|
291
305
|
|
|
@@ -319,7 +333,7 @@ Team admins should also check organization Usage credits. If credits are enabled
|
|
|
319
333
|
|
|
320
334
|
## Troubleshooting
|
|
321
335
|
|
|
322
|
-
- MCP timeout: set client tool timeouts to at least 360 seconds, or at least 480 seconds when `verification.enabled` is true. Kyoso defaults are Codex 120 seconds, Claude
|
|
336
|
+
- MCP timeout: set client tool timeouts to at least 360 seconds, or at least 480 seconds when `verification.enabled` is true. Kyoso defaults are Codex 120 seconds, Claude 300 seconds, and verification 90 seconds.
|
|
323
337
|
- Fresh npm release: minimum-package-age protection in tools such as safe-chain may briefly block `npx @kyo-so/cli` resolution after publish.
|
|
324
338
|
- Deprecated TypeScript config: untrusted `kyoso.config.ts` is skipped unless you pass `--trust-config`; prefer `kyoso.toml`.
|
|
325
339
|
|
package/README.zh-CN.md
CHANGED
|
@@ -22,6 +22,16 @@ Kyo-so (Kyoso / 協奏) 是面向 AI coding workflows 的 MCP-native、ACP-power
|
|
|
22
22
|
|
|
23
23
|
Kyoso 不会应用代码更改。
|
|
24
24
|
|
|
25
|
+
## Review Flow
|
|
26
|
+
|
|
27
|
+
三个 review tool 都运行同一条流水线:先进行 secret scan,在 read-only 的临时快照上通过 ACP 并行运行 reviewer ensemble,然后聚合发现、应用门禁并作出决定。
|
|
28
|
+
|
|
29
|
+
<p align="center">
|
|
30
|
+
<img src="https://raw.githubusercontent.com/hokupod/kyoso/main/docs/assets/kyoso-review-flow.zh-CN.svg" alt="Kyo-so 评审执行流程:从 MCP/CLI 请求到 secret scan、快照、协奏评审、聚合、门禁与最终决定" width="640">
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
当只启用一个 backend 时,会由 1 个 agent 以 `combined_reviewer` 运行,替代双角色 ensemble。此图的 Mermaid 源文件位于 [docs/assets/](docs/assets/)。
|
|
34
|
+
|
|
25
35
|
## Quick Start
|
|
26
36
|
|
|
27
37
|
无需全局安装。通过 `npx` 或 `bunx` 运行 Kyoso。
|
|
@@ -229,18 +239,20 @@ Default child-agent env allowlist:
|
|
|
229
239
|
|
|
230
240
|
Kyoso 还会 forward 启动 subprocesses 所需的最小 runtime env:`PATH`, `HOME`, `TMPDIR`, `TEMP`, `TMP`, `LANG`, `LC_ALL`, `SHELL`, `USER`, `USERNAME`, and `SystemRoot`。
|
|
231
241
|
|
|
232
|
-
## Agent Models
|
|
242
|
+
## Agent Models and Effort
|
|
233
243
|
|
|
234
|
-
省略 `agents.<name>.model` 时,会使用各 agent 自身的 default。Codex 使用 local Codex config,例如 `~/.codex/config.toml`;Claude 使用 adapter default。
|
|
244
|
+
省略 `agents.<name>.model` 或 `agents.<name>.effort` 时,会使用各 agent 自身的 default。Codex 使用 local Codex config,例如 `~/.codex/config.toml`;Claude 使用 adapter default。
|
|
235
245
|
|
|
236
246
|
可指定的 model 名称请参阅 [Claude models overview](https://platform.claude.com/docs/en/about-claude/models/overview) 与 [Codex models](https://developers.openai.com/codex/models)。
|
|
237
247
|
|
|
238
248
|
```toml
|
|
239
249
|
[agents.codex]
|
|
240
250
|
model = "gpt-5.5"
|
|
251
|
+
effort = "medium"
|
|
241
252
|
|
|
242
253
|
[agents.claude]
|
|
243
254
|
model = "claude-sonnet-5"
|
|
255
|
+
effort = "high"
|
|
244
256
|
```
|
|
245
257
|
|
|
246
258
|
Kyoso 会将 model pins 映射到 adapter-supported configuration:
|
|
@@ -248,6 +260,8 @@ Kyoso 会将 model pins 映射到 adapter-supported configuration:
|
|
|
248
260
|
- Claude: 当 `agents.claude.env` 或 whitelisted parent env 中尚未设置时,设置 `ANTHROPIC_MODEL`。
|
|
249
261
|
- Codex: 当 `CODEX_CONFIG` 尚未设置时,设置 `CODEX_CONFIG={"model":"..."}`。若要将 model pin 与其他 Codex session config 组合,请直接设置 `agents.codex.env.CODEX_CONFIG`。
|
|
250
262
|
|
|
263
|
+
effort 的工作方式不同:Kyoso 不会为它设置 env var,而是在每个 session 中、发送第一个 prompt 之前,向 backend agent 发送一次 ACP `session/set_config_option` 请求(Claude 为 `configId: "effort"`,Codex 为 `configId: "reasoning_effort"`)。有效值取决于 backend agent 的版本和所选的 model(例如,Claude 仅对支持 effort levels 的 model 公开该 option)。Kyoso 本身不会 validate `effort` 的值;如果 backend agent reject 了该请求,或不支持该 option,Kyoso 会将其记录到 stderr 并继续 review。
|
|
264
|
+
|
|
251
265
|
## Audit
|
|
252
266
|
|
|
253
267
|
Audit traces 写入:
|
|
@@ -269,7 +283,7 @@ Kyoso 按以下顺序 load config:
|
|
|
269
283
|
- project TOML: `<cwd>/kyoso.toml`
|
|
270
284
|
- `--network` 等 CLI flags
|
|
271
285
|
|
|
272
|
-
Project `kyoso.toml` 是 declarative config,不需要 trust approval。它可以设置 tools toggles、agent `enabled` / `model` / `role` / `timeoutMs`、workspace byte limits 和 additive `workspace.deny`、verification settings、advisory judge settings,以及 tightening-only security/network settings。
|
|
286
|
+
Project `kyoso.toml` 是 declarative config,不需要 trust approval。它可以设置 tools toggles、agent `enabled` / `model` / `effort` / `role` / `timeoutMs`、workspace byte limits 和 additive `workspace.deny`、verification settings、advisory judge settings,以及 tightening-only security/network settings。
|
|
273
287
|
|
|
274
288
|
Global TOML 用于 user-owned settings,包括 command 启动和 env forwarding。
|
|
275
289
|
|
|
@@ -284,7 +298,7 @@ CODEX_CONFIG = '{"model":"gpt-5.5"}'
|
|
|
284
298
|
|
|
285
299
|
`kyoso.config.ts` 已 deprecated,但为了兼容仍然 supported。它只会在 trust-on-first-use approval 之后 load;trusted hashes 保存在 `~/.kyoso/trusted-configs.json`。如果 `kyoso.toml` 和 `kyoso.config.ts` 同时存在,Kyoso 使用 TOML 并忽略 TypeScript config。
|
|
286
300
|
|
|
287
|
-
Default agent timeouts 是 Codex 120 秒、Claude
|
|
301
|
+
Default agent timeouts 是 Codex 120 秒、Claude 300 秒。MCP clients 应允许 tool calls 至少运行 360 秒。如果 `verification.enabled` 为 true,Kyoso 可能会运行额外的 cross-agent verification round,因此建议至少允许 480 秒。
|
|
288
302
|
|
|
289
303
|
Optional finding verification 默认 disabled:
|
|
290
304
|
|
|
@@ -318,7 +332,7 @@ Team admins 还应检查 organization Usage credits。如果启用了 credits,
|
|
|
318
332
|
|
|
319
333
|
## Troubleshooting
|
|
320
334
|
|
|
321
|
-
- MCP timeout: 将 client tool timeouts 设置为至少 360 秒;当 `verification.enabled` 为 true 时,设置为至少 480 秒。Kyoso defaults 是 Codex 120 秒、Claude
|
|
335
|
+
- MCP timeout: 将 client tool timeouts 设置为至少 360 秒;当 `verification.enabled` 为 true 时,设置为至少 480 秒。Kyoso defaults 是 Codex 120 秒、Claude 300 秒、verification 90 秒。
|
|
322
336
|
- Fresh npm release: safe-chain 等 minimum-package-age protection 可能会在 publish 后短时间内 block `npx @kyo-so/cli` resolution。
|
|
323
337
|
- Deprecated TypeScript config: 除非传入 `--trust-config`,否则 untrusted `kyoso.config.ts` 会被 skip;新配置请使用 `kyoso.toml`。
|
|
324
338
|
|
package/dist/bin/kyoso.js
CHANGED
|
@@ -169774,7 +169774,7 @@ function isAllowedProjectPath(path) {
|
|
|
169774
169774
|
if (top === "tools" && path.length === 2 && ["planReview", "securityReview", "diffReview"].includes(second ?? "")) {
|
|
169775
169775
|
return true;
|
|
169776
169776
|
}
|
|
169777
|
-
if (top === "agents" && path.length === 3 && ["codex", "claude"].includes(second ?? "") && ["enabled", "model", "role", "timeoutMs"].includes(third ?? "")) {
|
|
169777
|
+
if (top === "agents" && path.length === 3 && ["codex", "claude"].includes(second ?? "") && ["enabled", "model", "effort", "role", "timeoutMs"].includes(third ?? "")) {
|
|
169778
169778
|
return true;
|
|
169779
169779
|
}
|
|
169780
169780
|
if (top === "verification" && path.length === 2 && ["enabled", "maxFindings", "timeoutMs"].includes(second ?? "")) {
|
|
@@ -184186,6 +184186,7 @@ var agentSchema = exports_external.object({
|
|
|
184186
184186
|
command: exports_external.string(),
|
|
184187
184187
|
args: exports_external.array(exports_external.string()).default([]),
|
|
184188
184188
|
model: exports_external.string().optional(),
|
|
184189
|
+
effort: exports_external.string().optional(),
|
|
184189
184190
|
role: exports_external.enum([
|
|
184190
184191
|
"implementation_reviewer",
|
|
184191
184192
|
"architecture_security_reviewer",
|
|
@@ -184273,6 +184274,7 @@ function agentConfigLeafPaths(agent) {
|
|
|
184273
184274
|
`agents.${agent}.command`,
|
|
184274
184275
|
`agents.${agent}.args`,
|
|
184275
184276
|
`agents.${agent}.model`,
|
|
184277
|
+
`agents.${agent}.effort`,
|
|
184276
184278
|
`agents.${agent}.role`,
|
|
184277
184279
|
`agents.${agent}.timeoutMs`,
|
|
184278
184280
|
`agents.${agent}.env`,
|
|
@@ -184347,7 +184349,7 @@ var REDACTION = "[KYOSO_REDACTED]";
|
|
|
184347
184349
|
var DEFAULT_AGENT_TIMEOUT_MS = 120000;
|
|
184348
184350
|
var RAW_OUTPUT_MAX_CHARS = 16384;
|
|
184349
184351
|
var KYOSO_CHILD_AGENT = "KYOSO_CHILD_AGENT";
|
|
184350
|
-
var KYOSO_VERSION = "0.
|
|
184352
|
+
var KYOSO_VERSION = "0.7.0";
|
|
184351
184353
|
|
|
184352
184354
|
// src/security/sanitizeText.ts
|
|
184353
184355
|
var SENSITIVE_TEXT_PATTERNS = [
|
|
@@ -203406,7 +203408,7 @@ async function runSubprocessAgent(agent, agentConfig, input2) {
|
|
|
203406
203408
|
error: failure
|
|
203407
203409
|
});
|
|
203408
203410
|
});
|
|
203409
|
-
runAcpClientWorkflow(child, input2, abortController.signal).then((rawText) => {
|
|
203411
|
+
runAcpClientWorkflow(child, input2, abortController.signal, resolveEffortConfigOption(agent, agentConfig.effort)).then(({ rawText, warnings }) => {
|
|
203410
203412
|
stdout = rawText;
|
|
203411
203413
|
resolveOnce({
|
|
203412
203414
|
agent,
|
|
@@ -203415,7 +203417,8 @@ async function runSubprocessAgent(agent, agentConfig, input2) {
|
|
|
203415
203417
|
rawText,
|
|
203416
203418
|
normalized: normalizeAgentOutput(agent, input2.role, rawText),
|
|
203417
203419
|
startedAt,
|
|
203418
|
-
completedAt: new Date().toISOString()
|
|
203420
|
+
completedAt: new Date().toISOString(),
|
|
203421
|
+
...warnings.length > 0 ? { warnings } : {}
|
|
203419
203422
|
});
|
|
203420
203423
|
}).catch((error51) => {
|
|
203421
203424
|
if (abortController.signal.aborted)
|
|
@@ -203450,7 +203453,7 @@ async function runSubprocessAgent(agent, agentConfig, input2) {
|
|
|
203450
203453
|
});
|
|
203451
203454
|
});
|
|
203452
203455
|
}
|
|
203453
|
-
async function runAcpClientWorkflow(child, input2, signal) {
|
|
203456
|
+
async function runAcpClientWorkflow(child, input2, signal, configOption) {
|
|
203454
203457
|
if (!child.stdin || !child.stdout) {
|
|
203455
203458
|
throw new Error("Agent process did not expose stdio streams.");
|
|
203456
203459
|
}
|
|
@@ -203498,15 +203501,36 @@ async function runAcpClientWorkflow(child, input2, signal) {
|
|
|
203498
203501
|
kyosoReadOnly: true
|
|
203499
203502
|
}
|
|
203500
203503
|
}).withSession(async (session) => {
|
|
203504
|
+
const warnings = [];
|
|
203505
|
+
if (configOption) {
|
|
203506
|
+
await ctx.request(methods.agent.session.setConfigOption, { sessionId: session.sessionId, ...configOption }, { cancellationSignal: signal }).catch((error51) => {
|
|
203507
|
+
if (signal.aborted)
|
|
203508
|
+
return;
|
|
203509
|
+
const sanitizedValue = sanitizeTextForDisplay(configOption.value);
|
|
203510
|
+
const detail = sanitizeTextForDisplay(formatAgentErrorDetail(error51));
|
|
203511
|
+
const warning = `rejected effort config option (configId=${configOption.configId}, value=${sanitizedValue}); continuing without it: ${detail}`;
|
|
203512
|
+
warnings.push(warning);
|
|
203513
|
+
console.error(`kyoso: ${warning}`);
|
|
203514
|
+
});
|
|
203515
|
+
}
|
|
203501
203516
|
const promptResponse = session.prompt(input2.prompt, {
|
|
203502
203517
|
cancellationSignal: signal
|
|
203503
203518
|
});
|
|
203504
203519
|
const text = await session.readText();
|
|
203505
203520
|
await promptResponse;
|
|
203506
|
-
return text;
|
|
203521
|
+
return { rawText: text, warnings };
|
|
203507
203522
|
});
|
|
203508
203523
|
});
|
|
203509
203524
|
}
|
|
203525
|
+
function resolveEffortConfigOption(agent, effort) {
|
|
203526
|
+
if (!effort)
|
|
203527
|
+
return;
|
|
203528
|
+
if (agent === "codex")
|
|
203529
|
+
return { configId: "reasoning_effort", value: effort };
|
|
203530
|
+
if (agent === "claude")
|
|
203531
|
+
return { configId: "effort", value: effort };
|
|
203532
|
+
return;
|
|
203533
|
+
}
|
|
203510
203534
|
async function readWorkspaceFile(workspaceDir, requestedPath, line, limit) {
|
|
203511
203535
|
const workspaceRoot = await realpath(workspaceDir);
|
|
203512
203536
|
const candidates = resolveReadablePaths(workspaceRoot, requestedPath);
|
|
@@ -205160,6 +205184,7 @@ async function runReview(tool, request, options = {}) {
|
|
|
205160
205184
|
manager,
|
|
205161
205185
|
trace
|
|
205162
205186
|
});
|
|
205187
|
+
warnings.push(...agentResults.flatMap((result2) => (result2.warnings ?? []).map((warning) => `Agent ${result2.agent} ${warning}`)));
|
|
205163
205188
|
const normalizedAgentResults = agentResults.map(normalizeAgentRunResult);
|
|
205164
205189
|
const agentsUsed = normalizedAgentResults.map((result2) => result2.agent);
|
|
205165
205190
|
const reviewMode = agentsUsed.length === 1 ? "single_agent" : "multi_agent";
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export declare const kyosoConfigSchema: z.ZodObject<{
|
|
|
20
20
|
command: z.ZodString;
|
|
21
21
|
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
22
22
|
model: z.ZodOptional<z.ZodString>;
|
|
23
|
+
effort: z.ZodOptional<z.ZodString>;
|
|
23
24
|
role: z.ZodEnum<{
|
|
24
25
|
implementation_reviewer: "implementation_reviewer";
|
|
25
26
|
architecture_security_reviewer: "architecture_security_reviewer";
|
|
@@ -41,6 +42,7 @@ export declare const kyosoConfigSchema: z.ZodObject<{
|
|
|
41
42
|
command: z.ZodString;
|
|
42
43
|
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
43
44
|
model: z.ZodOptional<z.ZodString>;
|
|
45
|
+
effort: z.ZodOptional<z.ZodString>;
|
|
44
46
|
role: z.ZodEnum<{
|
|
45
47
|
implementation_reviewer: "implementation_reviewer";
|
|
46
48
|
architecture_security_reviewer: "architecture_security_reviewer";
|
package/dist/core/constants.d.ts
CHANGED
|
@@ -4,4 +4,4 @@ export declare const DEFAULT_MAX_DIFF_BYTES = 300000;
|
|
|
4
4
|
export declare const RAW_OUTPUT_MAX_CHARS = 16384;
|
|
5
5
|
export declare const TRACE_DIR = ".kyoso/traces";
|
|
6
6
|
export declare const KYOSO_CHILD_AGENT = "KYOSO_CHILD_AGENT";
|
|
7
|
-
export declare const KYOSO_VERSION = "0.
|
|
7
|
+
export declare const KYOSO_VERSION = "0.7.0";
|
package/dist/core/types.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -183783,6 +183783,7 @@ var agentSchema = exports_external.object({
|
|
|
183783
183783
|
command: exports_external.string(),
|
|
183784
183784
|
args: exports_external.array(exports_external.string()).default([]),
|
|
183785
183785
|
model: exports_external.string().optional(),
|
|
183786
|
+
effort: exports_external.string().optional(),
|
|
183786
183787
|
role: exports_external.enum([
|
|
183787
183788
|
"implementation_reviewer",
|
|
183788
183789
|
"architecture_security_reviewer",
|
|
@@ -183870,6 +183871,7 @@ function agentConfigLeafPaths(agent) {
|
|
|
183870
183871
|
`agents.${agent}.command`,
|
|
183871
183872
|
`agents.${agent}.args`,
|
|
183872
183873
|
`agents.${agent}.model`,
|
|
183874
|
+
`agents.${agent}.effort`,
|
|
183873
183875
|
`agents.${agent}.role`,
|
|
183874
183876
|
`agents.${agent}.timeoutMs`,
|
|
183875
183877
|
`agents.${agent}.env`,
|
|
@@ -184109,7 +184111,7 @@ function isAllowedProjectPath(path) {
|
|
|
184109
184111
|
if (top === "tools" && path.length === 2 && ["planReview", "securityReview", "diffReview"].includes(second ?? "")) {
|
|
184110
184112
|
return true;
|
|
184111
184113
|
}
|
|
184112
|
-
if (top === "agents" && path.length === 3 && ["codex", "claude"].includes(second ?? "") && ["enabled", "model", "role", "timeoutMs"].includes(third ?? "")) {
|
|
184114
|
+
if (top === "agents" && path.length === 3 && ["codex", "claude"].includes(second ?? "") && ["enabled", "model", "effort", "role", "timeoutMs"].includes(third ?? "")) {
|
|
184113
184115
|
return true;
|
|
184114
184116
|
}
|
|
184115
184117
|
if (top === "verification" && path.length === 2 && ["enabled", "maxFindings", "timeoutMs"].includes(second ?? "")) {
|
|
@@ -189141,7 +189143,7 @@ async function runSubprocessAgent(agent, agentConfig, input) {
|
|
|
189141
189143
|
error: failure
|
|
189142
189144
|
});
|
|
189143
189145
|
});
|
|
189144
|
-
runAcpClientWorkflow(child, input, abortController.signal).then((rawText) => {
|
|
189146
|
+
runAcpClientWorkflow(child, input, abortController.signal, resolveEffortConfigOption(agent, agentConfig.effort)).then(({ rawText, warnings }) => {
|
|
189145
189147
|
stdout = rawText;
|
|
189146
189148
|
resolveOnce({
|
|
189147
189149
|
agent,
|
|
@@ -189150,7 +189152,8 @@ async function runSubprocessAgent(agent, agentConfig, input) {
|
|
|
189150
189152
|
rawText,
|
|
189151
189153
|
normalized: normalizeAgentOutput(agent, input.role, rawText),
|
|
189152
189154
|
startedAt,
|
|
189153
|
-
completedAt: new Date().toISOString()
|
|
189155
|
+
completedAt: new Date().toISOString(),
|
|
189156
|
+
...warnings.length > 0 ? { warnings } : {}
|
|
189154
189157
|
});
|
|
189155
189158
|
}).catch((error51) => {
|
|
189156
189159
|
if (abortController.signal.aborted)
|
|
@@ -189185,7 +189188,7 @@ async function runSubprocessAgent(agent, agentConfig, input) {
|
|
|
189185
189188
|
});
|
|
189186
189189
|
});
|
|
189187
189190
|
}
|
|
189188
|
-
async function runAcpClientWorkflow(child, input, signal) {
|
|
189191
|
+
async function runAcpClientWorkflow(child, input, signal, configOption) {
|
|
189189
189192
|
if (!child.stdin || !child.stdout) {
|
|
189190
189193
|
throw new Error("Agent process did not expose stdio streams.");
|
|
189191
189194
|
}
|
|
@@ -189233,15 +189236,36 @@ async function runAcpClientWorkflow(child, input, signal) {
|
|
|
189233
189236
|
kyosoReadOnly: true
|
|
189234
189237
|
}
|
|
189235
189238
|
}).withSession(async (session) => {
|
|
189239
|
+
const warnings = [];
|
|
189240
|
+
if (configOption) {
|
|
189241
|
+
await ctx.request(methods.agent.session.setConfigOption, { sessionId: session.sessionId, ...configOption }, { cancellationSignal: signal }).catch((error51) => {
|
|
189242
|
+
if (signal.aborted)
|
|
189243
|
+
return;
|
|
189244
|
+
const sanitizedValue = sanitizeTextForDisplay(configOption.value);
|
|
189245
|
+
const detail = sanitizeTextForDisplay(formatAgentErrorDetail(error51));
|
|
189246
|
+
const warning = `rejected effort config option (configId=${configOption.configId}, value=${sanitizedValue}); continuing without it: ${detail}`;
|
|
189247
|
+
warnings.push(warning);
|
|
189248
|
+
console.error(`kyoso: ${warning}`);
|
|
189249
|
+
});
|
|
189250
|
+
}
|
|
189236
189251
|
const promptResponse = session.prompt(input.prompt, {
|
|
189237
189252
|
cancellationSignal: signal
|
|
189238
189253
|
});
|
|
189239
189254
|
const text = await session.readText();
|
|
189240
189255
|
await promptResponse;
|
|
189241
|
-
return text;
|
|
189256
|
+
return { rawText: text, warnings };
|
|
189242
189257
|
});
|
|
189243
189258
|
});
|
|
189244
189259
|
}
|
|
189260
|
+
function resolveEffortConfigOption(agent, effort) {
|
|
189261
|
+
if (!effort)
|
|
189262
|
+
return;
|
|
189263
|
+
if (agent === "codex")
|
|
189264
|
+
return { configId: "reasoning_effort", value: effort };
|
|
189265
|
+
if (agent === "claude")
|
|
189266
|
+
return { configId: "effort", value: effort };
|
|
189267
|
+
return;
|
|
189268
|
+
}
|
|
189245
189269
|
async function readWorkspaceFile(workspaceDir, requestedPath, line, limit) {
|
|
189246
189270
|
const workspaceRoot = await realpath(workspaceDir);
|
|
189247
189271
|
const candidates = resolveReadablePaths(workspaceRoot, requestedPath);
|
|
@@ -191169,6 +191193,7 @@ async function runReview(tool, request, options = {}) {
|
|
|
191169
191193
|
manager,
|
|
191170
191194
|
trace
|
|
191171
191195
|
});
|
|
191196
|
+
warnings.push(...agentResults.flatMap((result2) => (result2.warnings ?? []).map((warning) => `Agent ${result2.agent} ${warning}`)));
|
|
191172
191197
|
const normalizedAgentResults = agentResults.map(normalizeAgentRunResult);
|
|
191173
191198
|
const agentsUsed = normalizedAgentResults.map((result2) => result2.agent);
|
|
191174
191199
|
const reviewMode = agentsUsed.length === 1 ? "single_agent" : "multi_agent";
|
package/examples/kyoso.toml
CHANGED