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
4 changes: 2 additions & 2 deletions README.ar.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale وكيل مفتوح المصدر يقرأ مشروعك ويعدّل الملفات ويشغّل الأوامر ويتحقق من عمله باستخدام نموذج مستضاف أو محلي تختاره. ابدأ بمهمة واحدة في الطرفية. وللأعمال الأكبر، وزّع أجزاء العمل على وكلاء بنماذج وأدوار مختلفة.

![Codewhale يعمل في طرفية](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale يعمل في طرفية](web/public/codewhale-tui-5765d80.png)

*معاينة للطرفية من بنية تطوير للإصدار v0.10.0.*

Expand Down
4 changes: 2 additions & 2 deletions README.ca.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale és un agent de codi obert que llegeix el teu projecte, edita fitxers, executa ordres i comprova la seva feina amb un model allotjat o local que tu tries. Comença amb una tasca al terminal. Per a una feina més gran, assigna parts de la feina a agents amb models i rols diferents.

![Codewhale executant-se en un terminal](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale executant-se en un terminal](web/public/codewhale-tui-5765d80.png)

*Previsualització del terminal d’una compilació de desenvolupament de la v0.10.0.*

Expand Down
4 changes: 2 additions & 2 deletions README.de.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale ist ein Open-Source-Agent, der dein Projekt liest, Dateien bearbeitet, Befehle ausführt und seine Arbeit mit einem gehosteten oder lokalen Modell deiner Wahl prüft. Starte mit einer Aufgabe im Terminal. Teile eine größere Aufgabe auf Agenten mit verschiedenen Modellen und Rollen auf.

![Codewhale in einem Terminal](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale in einem Terminal](web/public/codewhale-tui-5765d80.png)

*Terminalvorschau aus einem Entwicklungsbuild von v0.10.0.*

Expand Down
4 changes: 2 additions & 2 deletions README.es-419.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale es un agente de código abierto que lee tu proyecto, edita archivos, ejecuta comandos y comprueba su trabajo con un modelo alojado o local que tú eliges. Empieza con una tarea en la terminal. Para un trabajo más grande, asigna partes del trabajo a agentes con distintos modelos y roles.

![Codewhale ejecutándose en una terminal](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale ejecutándose en una terminal](web/public/codewhale-tui-5765d80.png)

*Vista previa de la terminal de una compilación de desarrollo de v0.10.0.*

Expand Down
4 changes: 2 additions & 2 deletions README.fr.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale est un agent open source qui lit votre projet, modifie des fichiers, exécute des commandes et vérifie son travail avec un modèle hébergé ou local de votre choix. Commencez par une tâche dans votre terminal. Pour un travail plus important, confiez-en des parties à des agents utilisant différents modèles et rôles.

![Codewhale en cours d’exécution dans un terminal](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale en cours d’exécution dans un terminal](web/public/codewhale-tui-5765d80.png)

*Aperçu du terminal dans une version de développement de la v0.10.0.*

Expand Down
4 changes: 2 additions & 2 deletions README.hi.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale एक ओपन सोर्स एजेंट है जो आपकी पसंद के होस्ट किए गए या लोकल मॉडल से आपका प्रोजेक्ट पढ़ता है, फ़ाइलें संपादित करता है, कमांड चलाता है और अपने काम की जाँच करता है। टर्मिनल में एक काम से शुरुआत करें। बड़े काम के हिस्से अलग-अलग मॉडल और भूमिकाओं वाले एजेंटों को सौंपें।

![टर्मिनल में चलता Codewhale](web/public/codewhale-tui-d7a9a1c.png)
![टर्मिनल में चलता Codewhale](web/public/codewhale-tui-5765d80.png)

*v0.10.0 के विकासाधीन बिल्ड से टर्मिनल का पूर्वावलोकन।*

Expand Down
4 changes: 2 additions & 2 deletions README.id.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale adalah agen sumber terbuka yang membaca proyek, mengedit berkas, menjalankan perintah, dan memeriksa hasil kerjanya dengan model yang dihosting atau model lokal pilihan Anda. Mulailah dengan satu tugas di terminal. Untuk pekerjaan yang lebih besar, bagikan sebagian pekerjaan kepada agen dengan model dan peran yang berbeda.

![Codewhale berjalan di terminal](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale berjalan di terminal](web/public/codewhale-tui-5765d80.png)

*Pratinjau terminal dari build pengembangan v0.10.0.*

Expand Down
4 changes: 2 additions & 2 deletions README.it.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale è un agente open source che legge il tuo progetto, modifica file, esegue comandi e verifica il proprio lavoro usando un modello ospitato o locale a tua scelta. Parti da un’attività nel terminale. Per un lavoro più grande, assegna parti del lavoro ad agenti con modelli e ruoli diversi.

![Codewhale in esecuzione in un terminale](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale in esecuzione in un terminale](web/public/codewhale-tui-5765d80.png)

*Anteprima del terminale da una build di sviluppo della v0.10.0.*

Expand Down
4 changes: 2 additions & 2 deletions README.ja-JP.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale は、選んだホスト型またはローカルのモデルを使ってプロジェクトを読み、ファイルを編集し、コマンドを実行して、自分の作業結果を確認するオープンソースのエージェントです。まずはターミナルで一つのタスクから始めましょう。大きな仕事では、異なるモデルや役割を持つエージェントに作業の一部を分担させられます。

![ターミナルで動作する Codewhale](web/public/codewhale-tui-d7a9a1c.png)
![ターミナルで動作する Codewhale](web/public/codewhale-tui-5765d80.png)

*v0.10.0 の開発ビルドによるターミナルのプレビュー。*

Expand Down
4 changes: 2 additions & 2 deletions README.ko-KR.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale은 사용자가 선택한 호스팅 모델이나 로컬 모델로 프로젝트를 읽고, 파일을 편집하고, 명령을 실행하며, 작업 결과를 확인하는 오픈 소스 에이전트입니다. 터미널에서 하나의 작업으로 시작하세요. 더 큰 작업은 서로 다른 모델과 역할을 가진 에이전트에게 나누어 맡길 수 있습니다.

![터미널에서 실행 중인 Codewhale](web/public/codewhale-tui-d7a9a1c.png)
![터미널에서 실행 중인 Codewhale](web/public/codewhale-tui-5765d80.png)

*v0.10.0 개발 빌드의 터미널 미리보기입니다.*

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ agents with different models and roles.
[![Discord](https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white)](https://discord.gg/37gfS3ksug)

<picture>
<source media="(prefers-color-scheme: dark)" srcset="web/public/codewhale-tui-d7a9a1c.png">
<img src="web/public/codewhale-tui-d7a9a1c.png" alt="A Codewhale terminal session" width="720">
<source media="(prefers-color-scheme: dark)" srcset="web/public/codewhale-tui-5765d80.png">
<img src="web/public/codewhale-tui-5765d80.png" alt="A Codewhale terminal session" width="720">
</picture>

*Terminal preview from a v0.10.0 development build.*
Expand Down
4 changes: 2 additions & 2 deletions README.pl.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale to agent o otwartym kodzie źródłowym, który czyta Twój projekt, edytuje pliki, wykonuje polecenia i sprawdza swoją pracę przy użyciu wybranego przez Ciebie modelu hostowanego lub lokalnego. Zacznij od jednego zadania w terminalu. Przy większej pracy powierz jej części agentom korzystającym z różnych modeli i pełniącym różne role.

![Codewhale działający w terminalu](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale działający w terminalu](web/public/codewhale-tui-5765d80.png)

*Podgląd terminala z rozwojowej kompilacji v0.10.0.*

Expand Down
4 changes: 2 additions & 2 deletions README.pt-BR.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale é um agente de código aberto que lê seu projeto, edita arquivos, executa comandos e verifica o próprio trabalho usando um modelo hospedado ou local à sua escolha. Comece com uma tarefa no terminal. Para um trabalho maior, distribua partes do trabalho entre agentes com diferentes modelos e funções.

![Codewhale em execução em um terminal](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale em execução em um terminal](web/public/codewhale-tui-5765d80.png)

*Prévia do terminal em uma build de desenvolvimento da v0.10.0.*

Expand Down
4 changes: 2 additions & 2 deletions README.ru.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale — агент с открытым исходным кодом, который читает ваш проект, редактирует файлы, выполняет команды и проверяет свою работу с помощью выбранной вами облачной или локальной модели. Начните с одной задачи в терминале. Для большой работы поручайте её части агентам с разными моделями и ролями.

![Codewhale работает в терминале](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale работает в терминале](web/public/codewhale-tui-5765d80.png)

*Предварительный вид терминала из сборки v0.10.0, находившейся в разработке.*

Expand Down
4 changes: 2 additions & 2 deletions README.tr.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale, seçtiğiniz barındırılan veya yerel bir modeli kullanarak projenizi okuyan, dosyaları düzenleyen, komutları çalıştıran ve yaptığı işi kontrol eden açık kaynaklı bir ajandır. Terminalde tek bir görevle başlayın. Daha büyük bir işte, işin bölümlerini farklı model ve rollere sahip ajanlara verin.

![Terminalde çalışan Codewhale](web/public/codewhale-tui-d7a9a1c.png)
![Terminalde çalışan Codewhale](web/public/codewhale-tui-5765d80.png)

*v0.10.0 geliştirme derlemesinden terminal önizlemesi.*

Expand Down
4 changes: 2 additions & 2 deletions README.uk.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale — агент із відкритим кодом, який читає ваш проєкт, редагує файли, виконує команди й перевіряє свою роботу за допомогою обраної вами хмарної або локальної моделі. Почніть з одного завдання в терміналі. Для великої роботи доручайте її частини агентам із різними моделями й ролями.

![Codewhale працює в терміналі](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale працює в терміналі](web/public/codewhale-tui-5765d80.png)

*Попередній вигляд термінала зі збірки v0.10.0, що перебувала в розробці.*

Expand Down
4 changes: 2 additions & 2 deletions README.vi.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale là tác nhân mã nguồn mở có thể đọc dự án, chỉnh sửa tệp, chạy lệnh và kiểm tra công việc của mình bằng mô hình do nhà cung cấp lưu trữ hoặc mô hình cục bộ mà bạn chọn. Hãy bắt đầu với một tác vụ trong terminal. Với công việc lớn hơn, bạn có thể giao từng phần cho các tác nhân dùng mô hình và đảm nhiệm vai trò khác nhau.

![Codewhale đang chạy trong terminal](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale đang chạy trong terminal](web/public/codewhale-tui-5765d80.png)

*Hình xem trước terminal từ bản dựng phát triển v0.10.0.*

Expand Down
4 changes: 2 additions & 2 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale 是一款开源智能体,可使用你选择的托管模型或本地模型读取项目、编辑文件、运行命令并检查自己的工作。从终端中的一项任务开始。对于较大的工作,可以将其中的部分任务交给使用不同模型、承担不同角色的智能体。

![Codewhale 在终端中运行](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale 在终端中运行](web/public/codewhale-tui-5765d80.png)

*终端预览截图来自 v0.10.0 的开发构建。*

Expand Down
4 changes: 2 additions & 2 deletions README.zh-TW.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- source: README.md sha256:bbb8bfb61e57 -->
<!-- source: README.md sha256:ccb7a0b00317 -->
# Codewhale

Codewhale 是一款開源代理,可使用你選擇的託管模型或本機模型讀取專案、編輯檔案、執行指令,並檢查自己的工作。從終端機中的一項任務開始。對於較大的工作,可以將部分任務交給使用不同模型、擔任不同角色的代理。

![Codewhale 在終端機中執行](web/public/codewhale-tui-d7a9a1c.png)
![Codewhale 在終端機中執行](web/public/codewhale-tui-5765d80.png)

*終端機預覽截圖來自 v0.10.0 的開發建置版本。*

Expand Down
107 changes: 101 additions & 6 deletions crates/tui/tests/cucumber/launch_card_pty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,75 @@
use std::time::Duration;

use super::qa_harness;
use qa_harness::harness::{Harness, SealedWorkspace, make_sealed_workspace};
use qa_harness::harness::{
Harness, SealedWorkspace, make_sealed_workspace, make_sealed_workspace_in_home,
};
use qa_harness::keys;

const WAIT: Duration = Duration::from_secs(15);
const SIZES: [(u16, u16); 5] = [(12, 40), (16, 60), (24, 80), (32, 100), (40, 140)];
const TITLE: &str = "Recent proof";
const SAVED_TEXT: &str = "Restored conversation proof";

/// Published codewhale.net terminal media. Default Underwater theme, no
/// motion, a home-relative workspace, and only states a fresh install really
/// reaches: the first-run provider picker, home, a typed draft, and /help.
#[test]
#[ignore = "opt-in website media; empty isolated session, no provider calls"]
fn website_current_terminal_capture() {
assert!(std::env::var_os("QA_LAUNCH_CAPTURE_DIR").is_some());
let (_workspace, mut tui) =
start_with_options(24, 100, false, &[], Some("shoreline"), true, false);
let workspace = make_sealed_workspace_in_home("my-project").unwrap();
let (_workspace, mut tui) = start_in(
workspace,
Launch {
rows: 24,
cols: 100,
// The fixture Ctrl+U leaves a "Ctrl+Z restores" receipt that
// never expires on an idle, motionless screen.
keep_composer: true,
..Launch::default()
},
|tui| capture(tui, "website-provider-picker"),
);
// Capture only actual application output: no fabricated history, usage,
// connected tools, model response or completed work.
tui.wait_for_idle(Duration::from_secs(4), WAIT).unwrap();
tui.wait_for_idle(Duration::from_secs(1), WAIT).unwrap();
assert_website_frame(&mut tui);
capture(&mut tui, "website-home");

// Backspace, not Ctrl+U: clearing by Ctrl+U raises a receipt that would
// be published with the frame.
let prompt = "Add a --json flag to the export command";
tui.send(keys::key::backspaces(80)).unwrap();
wait(&mut tui, "Type a message");
tui.send(prompt).unwrap();
wait(&mut tui, prompt);
wait(&mut tui, "[↵]");
assert_website_frame(&mut tui);
capture(&mut tui, "website-composer");
tui.send(keys::key::backspaces(prompt.len())).unwrap();
wait(&mut tui, "Type a message");

tui.paste("/help").unwrap();
tui.wait_for_idle(Duration::from_millis(300), WAIT).unwrap();
tui.send(keys::key::enter()).unwrap();
wait(&mut tui, "/model");
capture(&mut tui, "website-help");
tui.shutdown();
}

/// The published frame names the project the way a user's shell would and
/// never leaks the sealed tempdir.
fn assert_website_frame(tui: &mut Harness) {
tui.pump();
let text = tui.frame().text();
assert!(
text.contains("~/my-project") && !text.contains(".tmp"),
"website frame must show ~/my-project and no tempdir: {}",
tui.diagnostics()
);
}

fn start(rows: u16, cols: u16, with_mcp: bool) -> (SealedWorkspace, Harness) {
start_titled(rows, cols, with_mcp, TITLE)
}
Expand Down Expand Up @@ -61,7 +109,52 @@ fn start_with_options(
animated: bool,
no_color: bool,
) -> (SealedWorkspace, Harness) {
let workspace = make_sealed_workspace().unwrap();
start_in(
make_sealed_workspace().unwrap(),
Launch {
rows,
cols,
with_mcp,
titles,
theme,
animated,
no_color,
keep_composer: false,
},
|_| {},
)
}

#[derive(Default)]
struct Launch<'a> {
rows: u16,
cols: u16,
with_mcp: bool,
titles: &'a [&'a str],
theme: Option<&'a str>,
animated: bool,
no_color: bool,
/// Skip the post-launch Ctrl+U that empties the composer.
keep_composer: bool,
}

/// Launch into `workspace` and walk first-run onboarding to home.
/// `on_provider_picker` sees the real first-run provider picker.
fn start_in(
workspace: SealedWorkspace,
launch: Launch<'_>,
on_provider_picker: impl FnOnce(&mut Harness),
) -> (SealedWorkspace, Harness) {
let Launch {
rows,
cols,
with_mcp,
titles,
theme,
animated,
no_color,
keep_composer,
} = launch;
let trust = workspace.workspace().join(".deepseek");
let sessions = workspace.home().join(".codewhale/sessions");
for directory in [&trust, &sessions] {
Expand Down Expand Up @@ -123,6 +216,7 @@ fn start_with_options(
.seal_home(workspace.home())
.env("CODEWHALE_DISABLE_MODELS_DEV_FETCH", "1")
.env("CODEWHALE_NO_UPDATE_CHECK", "1")
.env("CODEWHALE_DISABLE_LOCAL_OLLAMA_PROBE", "1")
.env("NO_ANIMATIONS", if animated { "0" } else { "1" })
.env("COLORTERM", "truecolor")
.env("NO_COLOR", if no_color { "1" } else { "" })
Expand All @@ -137,11 +231,12 @@ fn start_with_options(
.spawn()
.unwrap();
wait(&mut tui, "Choose your model provider");
on_provider_picker(&mut tui);
tui.send(keys::key::ctrl('o')).unwrap();
wait(&mut tui, "You're ready.");
tui.send(keys::key::enter()).unwrap();
wait(&mut tui, "New session");
if animated {
if animated || keep_composer {
return (workspace, tui);
}
tui.wait_for_idle(Duration::from_millis(300), WAIT).unwrap();
Expand Down
Loading
Loading