Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ itertools = "0.14.0"
keyring = { version = "3.6", default-features = false }
lazy_static = "1"
libc = "0.2.182"
lru = "0.12"
multimap = "0.10.1"
model2vec = "0.3.0"
notify = "8.2.0"
Expand Down
10 changes: 0 additions & 10 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -267,16 +267,6 @@ TUI/CLI を使ってください。どちらの surface も同じローカル De

変更について議論するには issue または pull request を開いてください。

## Star 履歴

<a href="https://www.star-history.com/?repos=7df-lab%2Fdevo&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&legend=top-left" />
</picture>
</a>

## ライセンス

このプロジェクトは [MIT License](./LICENSE) のもとで公開されています。
Expand Down
10 changes: 0 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -280,16 +280,6 @@ Contributions are welcome while the project is still early:

Open an issue or pull request to discuss changes.

## Star History

<a href="https://www.star-history.com/?repos=7df-lab%2Fdevo&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&theme=dark&legend=top-left&sealed_token=MnUnrvz2y0jVX7ra8V0X5Z6AvrYDpTndpzZkHP-0ilm9g4EpwuNEvvmJfE8I2qMI8tDhAkn5a2T5dks7vIrGvP1eVw3ov01-m4_l7zJyWuuAFP-f4MSHSvyRJVhkhWmoioiwBNutxCcNuvDtZkufcwHISOkZglpGH7tZhIZDj-ITupTBDzZmBVfI-_DU" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&legend=top-left&sealed_token=MnUnrvz2y0jVX7ra8V0X5Z6AvrYDpTndpzZkHP-0ilm9g4EpwuNEvvmJfE8I2qMI8tDhAkn5a2T5dks7vIrGvP1eVw3ov01-m4_l7zJyWuuAFP-f4MSHSvyRJVhkhWmoioiwBNutxCcNuvDtZkufcwHISOkZglpGH7tZhIZDj-ITupTBDzZmBVfI-_DU" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&legend=top-left&sealed_token=MnUnrvz2y0jVX7ra8V0X5Z6AvrYDpTndpzZkHP-0ilm9g4EpwuNEvvmJfE8I2qMI8tDhAkn5a2T5dks7vIrGvP1eVw3ov01-m4_l7zJyWuuAFP-f4MSHSvyRJVhkhWmoioiwBNutxCcNuvDtZkufcwHISOkZglpGH7tZhIZDj-ITupTBDzZmBVfI-_DU" />
</picture>
</a>

## License

This project is licensed under the [MIT License](./LICENSE).
Expand Down
10 changes: 0 additions & 10 deletions README.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -281,16 +281,6 @@ Devo runtime.

Откройте issue или pull request, чтобы обсудить изменения.

## История звезд

<a href="https://www.star-history.com/?repos=7df-lab%2Fdevo&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&legend=top-left" />
</picture>
</a>

## Лицензия

Проект распространяется по [MIT License](./LICENSE).
Expand Down
10 changes: 0 additions & 10 deletions README.zh-Hans.md
Original file line number Diff line number Diff line change
Expand Up @@ -256,16 +256,6 @@ provider 与 binding,把 key 存入用户级 `auth.json`,并将 `invocation_

请打开 issue 或 pull request 讨论变更。

## Star 历史

<a href="https://www.star-history.com/?repos=7df-lab%2Fdevo&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&legend=top-left" />
</picture>
</a>

## 许可证

本项目采用 [MIT License](./LICENSE) 授权。
Expand Down
10 changes: 0 additions & 10 deletions README.zh-Hant.md
Original file line number Diff line number Diff line change
Expand Up @@ -256,16 +256,6 @@ provider 與 binding,把 key 存入使用者級 `auth.json`,並將 `invocati

請開啟 issue 或 pull request 討論變更。

## Star 歷史

<a href="https://www.star-history.com/?repos=7df-lab%2Fdevo&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=7df-lab/devo&type=date&legend=top-left" />
</picture>
</a>

## 授權

本專案採用 [MIT License](./LICENSE) 授權。
Expand Down
36 changes: 0 additions & 36 deletions apps/desktop/packages/devo-ai-sdk/src/v2/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,7 @@ import type {
GoalStatusResult,
InputItem,
ThreadGoalStatus,
TurnQueueRemoveResult,
TurnQueueSteerResult,
TurnStartResult,
TurnSteerResult,
RequestUserInputRespondParams,
WorkspaceChangeCoverage,
WorkspaceChangeScope,
Expand Down Expand Up @@ -836,8 +833,6 @@ class AcpClient {
}

turn = {
// User requirement: busy composer follow-ups can be queued first, then converted
// to steer from the composer status stack without creating transcript-only state.
start: async (params: {
sessionID: string
parts: PromptPartInput[]
Expand All @@ -860,37 +855,6 @@ class AcpClient {
})) as TurnStartResult
return { data: result }
},
steer: async (params: {
sessionID: string
expectedTurnID: string
parts: PromptPartInput[]
}) => {
const result = (await this.request("turn/steer", {
session_id: params.sessionID,
expected_turn_id: params.expectedTurnID,
input: inputItemsFromPromptParts(params.parts),
})) as TurnSteerResult
return { data: result }
},
removeQueued: async (params: { sessionID: string; queuedInputID: string }) => {
const result = (await this.request("turn/queue/remove", {
session_id: params.sessionID,
queued_input_id: params.queuedInputID,
})) as TurnQueueRemoveResult
return { data: result }
},
steerQueued: async (params: {
sessionID: string
expectedTurnID: string
queuedInputID: string
}) => {
const result = (await this.request("turn/queue/steer", {
session_id: params.sessionID,
expected_turn_id: params.expectedTurnID,
queued_input_id: params.queuedInputID,
})) as TurnQueueSteerResult
return { data: result }
},
}

permission = {
Expand Down
28 changes: 18 additions & 10 deletions apps/web/content/docs/using-devo/model-picker.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,16 @@ Use `/model` to switch the active model for the current session.
/model
```

The picker opens in the bottom pane. Use `Up` and `Down` to move, `Enter` to
select, and `Esc` to close without changing the model.
The picker opens in the bottom pane and replaces the composer input area:

- `Up` / `Down` (or `j` / `k`) move through the model list
- `Left` / `Right` cycle reasoning effort for the focused model when that model
supports it
- `Enter` applies the focused model and selected effort together
- `Esc` closes without changing the model

When there are many saved bindings, the model list shows at most eight rows and
scrolls so the focused row stays visible.

## What The Picker Shows

Expand All @@ -36,16 +44,16 @@ match either, Devo still sets the requested model name for the turn context.

## Reasoning Effort

Some models expose configurable reasoning effort. When you select one of those
models, Devo may open a second picker for reasoning effort before finalizing
the model change.
Some models expose configurable reasoning effort. For those models, the picker
shows a horizontal effort strip below the model list. Changing the focused
model updates the available options; if the previously selected effort is still
supported it is preserved, otherwise Devo falls back to that model's default.

The reasoning effort picker uses the model's configured capability and reasoning-effort
options. If the model does not expose options, Devo applies the model
immediately.
If the focused model does not expose effort options, the strip is hidden and
`Enter` applies the model alone.

After selection, Devo updates the header and sends the model and reasoning effort
selection to the runtime as turn context.
After confirmation, Devo updates the header and sends the model and reasoning
effort selection to the runtime as turn context.

## Session Scope

Expand Down
15 changes: 11 additions & 4 deletions apps/web/content/docs/using-devo/model-picker.zh.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,14 @@ description: 在已配置的 model bindings 之间切换。
/model
```

Picker 会在底部 pane 打开。使用 `Up` 和 `Down` 移动,`Enter` 选择,`Esc` 关闭且不修改模型。
Picker 会在底部 pane 打开,并替换 composer 输入区域:

- `Up` / `Down`(或 `j` / `k`)在模型列表中移动
- `Left` / `Right` 在当前聚焦模型支持的推理强度选项间切换
- `Enter` 一次应用聚焦的模型与所选推理强度
- `Esc` 关闭且不修改模型

当保存的 binding 较多时,模型列表最多显示 8 行,并滚动以保持聚焦行可见。

## Picker 显示什么

Expand All @@ -29,11 +36,11 @@ Picker 来自保存的 model bindings。每个条目显示 display name,并在

## Reasoning Effort

某些模型暴露 configurable reasoning effort。当你选择这些模型时,Devo 可能先打开第二个 picker 选择 reasoning effort,再完成模型切换
某些模型暴露 configurable reasoning effort。对这些模型,picker 在模型列表下方显示横向推理强度选项。切换聚焦模型时会更新可用选项;若先前选中的强度仍被支持则保留,否则回退到该模型的默认值

Reasoning effort picker 使用模型配置的 capability 和 reasoning-effort options。如果模型没有暴露选项,Devo 会直接应用模型
若聚焦模型没有暴露选项,强度行会隐藏,`Enter` 只应用模型

选择后,Devo 更新 header,并把 model 和 reasoning effort selection 作为 turn context 发送给 runtime。
确认后,Devo 更新 header,并把 model 和 reasoning effort selection 作为 turn context 发送给 runtime。

## Session Scope

Expand Down
2 changes: 2 additions & 0 deletions crates/cli/src/agent_command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ pub(crate) async fn run_agent(
reasoning_effort_selection: model_reasoning_effort_selection,
permission_preset,
sandbox_profile,
compaction_token_limit: app_config.compaction_token_limit,
default_collaboration_mode: app_config.default_collaboration_mode,
// TODO: why do we need cwd here, maybe remove it ?
cwd,
},
Expand Down
4 changes: 2 additions & 2 deletions crates/cli/src/prompt_command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ pub(crate) async fn run_prompt(
session_id: session_state.id.clone(),
transcript_path: String::new(),
cwd: cwd.clone(),
permission_mode: Some("auto-approve".to_string()),
permission_mode: Some("yolo".to_string()),
agent_id: None,
agent_type: None,
},
Expand Down Expand Up @@ -499,7 +499,7 @@ fn write_query_event_jsonl(session_id: &str, event: &QueryEvent) -> Result<()> {
QueryEvent::ContextCompactionStarted => {
write_jsonl(&PromptJsonlEvent::ContextCompactionStarted { session_id })
}
QueryEvent::ContextCompactionCompleted => {
QueryEvent::ContextCompactionCompleted { .. } => {
write_jsonl(&PromptJsonlEvent::ContextCompactionCompleted { session_id })
}
QueryEvent::ContextCompactionFailed { message } => {
Expand Down
1 change: 1 addition & 0 deletions crates/client/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ The short `ws://` listen target uses `127.0.0.1:3210`.
`session_permissions_update`, `session_sandbox_profile_update`: update session
metadata shown by clients.
- `session_compact`, `session_fork`, `session_rollback`: manage session history
(`session_compact` returns `TurnStartResult` for the compaction turn)
and derived sessions.
- `agent_list`, `agent_spawn`, `agent_close`: inspect and manage background
agents.
Expand Down
64 changes: 61 additions & 3 deletions crates/client/src/client_core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,13 @@ impl ServerClientCore {
.await
}

pub(crate) async fn session_compaction_update(
&mut self,
params: SessionCompactionUpdateParams,
) -> Result<SessionCompactionUpdateResult> {
self.request_devo("session/compaction/update", params).await
}

pub(crate) async fn session_sandbox_profile_update(
&mut self,
params: SessionSandboxProfileUpdateParams,
Expand All @@ -475,10 +482,17 @@ impl ServerClientCore {
pub(crate) async fn session_compact(
&mut self,
params: SessionCompactParams,
) -> Result<SessionCompactResult> {
) -> Result<TurnStartResult> {
self.request_devo("session/compact", params).await
}

pub(crate) async fn session_cancel(
&mut self,
params: AcpCancelParams,
) -> Result<AcpEmptyResult> {
self.request(ACP_SESSION_CANCEL_METHOD, params).await
}

pub(crate) async fn goal_create(
&mut self,
params: GoalCreateParams,
Expand Down Expand Up @@ -652,8 +666,46 @@ impl ServerClientCore {
self.request_devo("turn/interrupt", params).await
}

pub(crate) async fn turn_steer(&mut self, params: TurnSteerParams) -> Result<TurnSteerResult> {
self.request_devo("turn/steer", params).await
pub(crate) async fn session_queue_push(
&mut self,
params: canonical::rpc_turn::SessionQueuePushParams,
) -> Result<canonical::rpc_turn::SessionQueuePushResult> {
self.request_devo("session/queue/push", params).await
}

pub(crate) async fn session_queue_list(
&mut self,
params: canonical::rpc_turn::SessionQueueListParams,
) -> Result<canonical::rpc_turn::SessionQueueListResult> {
self.request_devo("session/queue/list", params).await
}

pub(crate) async fn session_queue_update(
&mut self,
params: canonical::rpc_turn::SessionQueueUpdateParams,
) -> Result<canonical::rpc_turn::SessionQueueUpdateResult> {
self.request_devo("session/queue/update", params).await
}

pub(crate) async fn session_queue_remove(
&mut self,
params: canonical::rpc_turn::SessionQueueRemoveParams,
) -> Result<canonical::rpc_turn::SessionQueueRemoveResult> {
self.request_devo("session/queue/remove", params).await
}

pub(crate) async fn session_queue_steer(
&mut self,
params: canonical::rpc_turn::SessionQueueSteerParams,
) -> Result<canonical::rpc_turn::SessionQueueSteerResult> {
self.request_devo("session/queue/steer", params).await
}

pub(crate) async fn subscription_create(
&mut self,
params: canonical::event::SubscriptionCreateParams,
) -> Result<canonical::event::SubscriptionCreateResult> {
self.request_devo("subscription/create", params).await
}

pub(crate) async fn reference_search_start(
Expand Down Expand Up @@ -1028,8 +1080,11 @@ fn acp_session_metadata_from_start_params(
prompt_token_estimate: 0,
last_query_usage: None,
last_query_total_tokens: 0,
last_context_occupancy: None,
status: SessionRuntimeStatus::Idle,
collaboration_mode: Default::default(),
effective_context_window: None,
permission_preset: None,
}
}

Expand Down Expand Up @@ -1066,8 +1121,11 @@ fn acp_session_metadata_from_session_info(session_info: &AcpSessionInfo) -> Sess
prompt_token_estimate: 0,
last_query_usage: None,
last_query_total_tokens: 0,
last_context_occupancy: None,
status: SessionRuntimeStatus::Idle,
collaboration_mode: Default::default(),
effective_context_window: None,
permission_preset: None,
}
}

Expand Down
Loading
Loading