├── .github
└── workflows
│ ├── build.yml
│ └── release.yml
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── LICENSE
├── README.md
└── crates
├── code_assistant
├── Cargo.lock
├── Cargo.toml
├── assets
│ └── icons
│ │ ├── LICENSES
│ │ ├── ai_anthropic.svg
│ │ ├── ai_google.svg
│ │ ├── ai_ollama.svg
│ │ ├── ai_open_ai.svg
│ │ ├── arrow_circle.svg
│ │ ├── arrow_down.svg
│ │ ├── arrow_left.svg
│ │ ├── arrow_right.svg
│ │ ├── arrow_up.svg
│ │ ├── brain.svg
│ │ ├── caret_down.svg
│ │ ├── caret_up.svg
│ │ ├── check.svg
│ │ ├── check_circle.svg
│ │ ├── chevron_down.svg
│ │ ├── chevron_down_small.svg
│ │ ├── chevron_left.svg
│ │ ├── chevron_right.svg
│ │ ├── chevron_up.svg
│ │ ├── chevron_up_down.svg
│ │ ├── circle_stop.svg
│ │ ├── close.svg
│ │ ├── code.svg
│ │ ├── delete.svg
│ │ ├── ellipsis.svg
│ │ ├── ellipsis_vertical.svg
│ │ ├── exit.svg
│ │ ├── expand_vertical.svg
│ │ ├── file_code.svg
│ │ ├── file_generic.svg
│ │ ├── file_icons
│ │ ├── archive.svg
│ │ ├── astro.svg
│ │ ├── audio.svg
│ │ ├── book.svg
│ │ ├── bun.svg
│ │ ├── c.svg
│ │ ├── camera.svg
│ │ ├── code.svg
│ │ ├── coffeescript.svg
│ │ ├── conversations.svg
│ │ ├── cpp.svg
│ │ ├── css.svg
│ │ ├── dart.svg
│ │ ├── database.svg
│ │ ├── docker.svg
│ │ ├── elixir.svg
│ │ ├── elm.svg
│ │ ├── erlang.svg
│ │ ├── eslint.svg
│ │ ├── file.svg
│ │ ├── file_types.json
│ │ ├── folder.svg
│ │ ├── folder_open.svg
│ │ ├── font.svg
│ │ ├── fsharp.svg
│ │ ├── git.svg
│ │ ├── go.svg
│ │ ├── graphql.svg
│ │ ├── hash.svg
│ │ ├── haskell.svg
│ │ ├── heroku.svg
│ │ ├── html.svg
│ │ ├── image.svg
│ │ ├── info.svg
│ │ ├── java.svg
│ │ ├── javascript.svg
│ │ ├── kotlin.svg
│ │ ├── lock.svg
│ │ ├── lua.svg
│ │ ├── magnifying_glass.svg
│ │ ├── nim.svg
│ │ ├── notebook.svg
│ │ ├── ocaml.svg
│ │ ├── package.svg
│ │ ├── phoenix.svg
│ │ ├── php.svg
│ │ ├── prettier.svg
│ │ ├── prisma.svg
│ │ ├── project.svg
│ │ ├── python.svg
│ │ ├── r.svg
│ │ ├── react.svg
│ │ ├── ruby.svg
│ │ ├── rust.svg
│ │ ├── scala.svg
│ │ ├── swift.svg
│ │ ├── tcl.svg
│ │ ├── terraform.svg
│ │ ├── toml.svg
│ │ ├── typescript.svg
│ │ ├── video.svg
│ │ └── vue.svg
│ │ ├── file_tree.svg
│ │ ├── generic_close.svg
│ │ ├── generic_maximize.svg
│ │ ├── generic_minimize.svg
│ │ ├── generic_restore.svg
│ │ ├── history_rerun.svg
│ │ ├── library.svg
│ │ ├── link.svg
│ │ ├── list_tree.svg
│ │ ├── magnifying_glass.svg
│ │ ├── maximize.svg
│ │ ├── menu.svg
│ │ ├── message_bubbles.svg
│ │ ├── minimize.svg
│ │ ├── panel_right_close.svg
│ │ ├── panel_right_open.svg
│ │ ├── pencil.svg
│ │ ├── person.svg
│ │ ├── plus.svg
│ │ ├── replace.svg
│ │ ├── replace_all.svg
│ │ ├── replace_next.svg
│ │ ├── rerun.svg
│ │ ├── return.svg
│ │ ├── reveal.svg
│ │ ├── rotate_ccw.svg
│ │ ├── rotate_cw.svg
│ │ ├── search_code.svg
│ │ ├── send.svg
│ │ ├── settings.svg
│ │ ├── settings_alt.svg
│ │ ├── stop.svg
│ │ ├── terminal.svg
│ │ ├── text_snippet.svg
│ │ ├── theme_dark.svg
│ │ ├── theme_light.svg
│ │ └── trash.svg
├── resources
│ ├── system_message.md
│ └── system_message_tools.md
└── src
│ ├── agent
│ ├── mod.rs
│ ├── runner.rs
│ ├── tests.rs
│ ├── tool_description_generator.rs
│ └── types.rs
│ ├── config.rs
│ ├── explorer.rs
│ ├── main.rs
│ ├── mcp
│ ├── handler.rs
│ ├── mod.rs
│ ├── resources.rs
│ ├── server.rs
│ ├── tests.rs
│ └── types.rs
│ ├── persistence.rs
│ ├── tests
│ ├── gitignore_tests.rs
│ ├── mocks.rs
│ └── mod.rs
│ ├── tools
│ ├── core
│ │ ├── dyn_tool.rs
│ │ ├── mod.rs
│ │ ├── registry.rs
│ │ ├── render.rs
│ │ ├── result.rs
│ │ ├── spec.rs
│ │ └── tool.rs
│ ├── impls
│ │ ├── delete_files.rs
│ │ ├── execute_command.rs
│ │ ├── list_files.rs
│ │ ├── list_projects.rs
│ │ ├── mod.rs
│ │ ├── perplexity_ask.rs
│ │ ├── read_files.rs
│ │ ├── replace_in_file.rs
│ │ ├── search_files.rs
│ │ ├── web_fetch.rs
│ │ ├── web_search.rs
│ │ └── write_file.rs
│ ├── mod.rs
│ ├── parse.rs
│ ├── tests.rs
│ └── types.rs
│ ├── types.rs
│ ├── ui
│ ├── gpui
│ │ ├── assets.rs
│ │ ├── content_renderer.rs
│ │ ├── diff_renderer.rs
│ │ ├── elements.rs
│ │ ├── file_icons.rs
│ │ ├── memory.rs
│ │ ├── messages.rs
│ │ ├── mod.rs
│ │ ├── parameter_renderers.rs
│ │ ├── path_util.rs
│ │ ├── root.rs
│ │ ├── simple_renderers.rs
│ │ ├── theme.rs
│ │ └── ui_events.rs
│ ├── mod.rs
│ ├── streaming
│ │ ├── json_processor.rs
│ │ ├── json_processor_tests.rs
│ │ ├── mod.rs
│ │ ├── test_utils.rs
│ │ ├── xml_processor.rs
│ │ └── xml_processor_tests.rs
│ ├── terminal.rs
│ └── terminal_test.rs
│ └── utils
│ ├── command.rs
│ ├── encoding.rs
│ ├── file_updater.rs
│ ├── mod.rs
│ └── writer.rs
├── llm
├── Cargo.toml
└── src
│ ├── aicore_converse.rs
│ ├── aicore_invoke.rs
│ ├── anthropic.rs
│ ├── anthropic_playback.rs
│ ├── auth.rs
│ ├── config.rs
│ ├── display.rs
│ ├── lib.rs
│ ├── ollama.rs
│ ├── openai.rs
│ ├── openrouter.rs
│ ├── recording.rs
│ ├── tests.rs
│ ├── types.rs
│ ├── utils.rs
│ └── vertex.rs
└── web
├── Cargo.toml
└── src
├── client.rs
├── lib.rs
├── perplexity.rs
└── tests.rs
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build
2 |
3 | on:
4 | push:
5 | branches: ["main"]
6 | pull_request:
7 | branches: ["main"]
8 |
9 | env:
10 | CARGO_TERM_COLOR: always
11 |
12 | jobs:
13 | build:
14 | runs-on: macos-latest
15 |
16 | steps:
17 | - uses: actions/checkout@v4
18 | # - name: Install dependencies
19 | # run: |
20 | # sudo apt-get update
21 | # sudo apt-get install -y libxcb1-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libxkbcommon-x11-dev libx11-dev
22 | - name: Check formatting
23 | run: cargo fmt --all -- --check
24 | # - name: Lint
25 | # run: cargo clippy --all-targets --all-features -- -D warnings
26 | - name: Build
27 | run: cargo build --verbose
28 | - name: Run tests
29 | run: cargo test --verbose
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | /sessions
3 | mcp-config.json
4 | .code-assistant.state.json
5 | tarpaulin-report.html
6 | .DS_Store
7 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [workspace]
2 | members = ["crates/code_assistant", "crates/llm"]
3 |
4 | resolver = "2"
5 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 Stephan Aßmus
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/crates/code_assistant/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "code-assistant"
3 | version = "0.1.6"
4 | edition = "2021"
5 |
6 | [dependencies]
7 | llm = { path = "../llm" }
8 | web = { path = "../web" }
9 |
10 | glob = "0.3"
11 | ignore = "0.4"
12 | walkdir = "2.5"
13 | percent-encoding = "2.3"
14 | tokio = { version = "1.44", features = ["full"] }
15 | tempfile = "3.18"
16 |
17 | # Terminal UI
18 | rustyline = "12.0.0"
19 | crossterm = "0.27.0"
20 |
21 | # GPUI related
22 | gpui = { git = "https://github.com/huacnlee/zed.git", branch = "webview" }
23 | gpui-component = { git = "https://github.com/longbridge/gpui-component.git" }
24 | smallvec = "1.14"
25 | rust-embed = { version = "8.4", features = ["include-exclude"] }
26 |
27 | # JSON (de)serialization
28 | serde = { version = "1.0", features = ["derive"] }
29 | serde_json = "1.0"
30 |
31 | # Error handling
32 | anyhow = "1.0"
33 | thiserror = "1.0"
34 | regex = "1.11"
35 |
36 | # Logging
37 | tracing = "0.1"
38 | tracing-subscriber = { version = "0.3", features = ["env-filter"] }
39 |
40 | # CLI
41 | clap = { version = "4.5", features = ["derive"] }
42 |
43 | async-trait = "0.1"
44 | dotenv = "0.15"
45 | dirs = "5.0"
46 | md5 = "0.7.0"
47 |
48 | # Date and time handling
49 | chrono = { version = "0.4", features = ["serde"] }
50 |
51 | # File content inspection
52 | content_inspector = "0.2"
53 | encoding_rs = "0.8.35"
54 | unicode-segmentation = "1.12.0"
55 | rand = "0.8.5"
56 |
57 | # Diff visualization
58 | similar = { version = "2.5.0", features = ["inline"] }
59 | async-channel = "2.3.1"
60 |
61 | [dev-dependencies]
62 | axum = "0.7"
63 | bytes = "1.10"
64 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/LICENSES:
--------------------------------------------------------------------------------
1 | Lucide License
2 |
3 | ISC License
4 |
5 | Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2022.
6 |
7 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
10 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/ai_anthropic.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/ai_google.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/ai_open_ai.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/arrow_circle.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/arrow_left.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/arrow_right.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/arrow_up.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/brain.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/caret_down.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/caret_up.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/check.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/check_circle.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/chevron_down.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/chevron_down_small.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/chevron_left.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/chevron_right.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/chevron_up.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/chevron_up_down.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/circle_stop.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/close.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/code.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/delete.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/ellipsis.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/ellipsis_vertical.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/exit.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/expand_vertical.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_code.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_generic.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/archive.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/astro.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/audio.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/book.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/bun.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/c.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/camera.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/code.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/coffeescript.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/conversations.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/cpp.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/css.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/dart.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/database.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/docker.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/elixir.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/elm.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/erlang.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/eslint.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/file.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/folder.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/folder_open.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/font.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/fsharp.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/git.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/go.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/graphql.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/hash.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/haskell.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/heroku.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/html.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/image.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/info.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/java.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/javascript.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/kotlin.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/lock.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/lua.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/magnifying_glass.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/nim.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/notebook.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/ocaml.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/package.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/phoenix.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/php.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/prettier.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/prisma.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/project.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/python.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/r.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/react.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/ruby.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/rust.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/scala.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/swift.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/tcl.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/terraform.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/toml.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/typescript.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/video.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_icons/vue.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/file_tree.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/generic_close.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/generic_maximize.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/generic_minimize.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/generic_restore.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/history_rerun.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/library.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/link.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/list_tree.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/magnifying_glass.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/maximize.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/menu.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/message_bubbles.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/minimize.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/panel_right_close.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/panel_right_open.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/pencil.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/person.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/plus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/replace.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/replace_all.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/replace_next.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/rerun.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/return.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/reveal.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/rotate_ccw.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/rotate_cw.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/search_code.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/send.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/settings.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/settings_alt.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/stop.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/terminal.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/text_snippet.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/theme_dark.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/theme_light.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/assets/icons/trash.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/crates/code_assistant/src/agent/mod.rs:
--------------------------------------------------------------------------------
1 | #[cfg(test)]
2 | mod tests;
3 |
4 | mod runner;
5 | mod tool_description_generator;
6 | mod types;
7 |
8 | pub use crate::types::ToolMode;
9 | pub use runner::Agent;
10 |
--------------------------------------------------------------------------------
/crates/code_assistant/src/agent/types.rs:
--------------------------------------------------------------------------------
1 | use crate::tools::core::AnyOutput;
2 | use serde_json::Value;
3 |
4 | /// Represents a tool request from the LLM, derived from ContentBlock::ToolUse
5 | #[derive(Debug, Clone)]
6 | pub struct ToolRequest {
7 | pub id: String,
8 | pub name: String,
9 | pub input: Value,
10 | }
11 |
12 | impl From<&llm::ContentBlock> for ToolRequest {
13 | fn from(block: &llm::ContentBlock) -> Self {
14 | if let llm::ContentBlock::ToolUse { id, name, input } = block {
15 | Self {
16 | id: id.clone(),
17 | name: name.clone(),
18 | input: input.clone(),
19 | }
20 | } else {
21 | panic!("Cannot convert non-ToolUse ContentBlock to ToolRequest")
22 | }
23 | }
24 | }
25 |
26 | /// Record of a tool execution with its result
27 | pub struct ToolExecution {
28 | pub tool_request: ToolRequest,
29 | pub result: Box,
30 | }
31 |
--------------------------------------------------------------------------------
/crates/code_assistant/src/config.rs:
--------------------------------------------------------------------------------
1 | use crate::explorer::Explorer;
2 | use crate::types::{CodeExplorer, Project};
3 | use anyhow::Result;
4 | use std::collections::HashMap;
5 | use std::path::PathBuf;
6 |
7 | /// Get the path to the configuration file
8 | pub fn get_config_path() -> Result {
9 | let home =
10 | dirs::home_dir().ok_or_else(|| anyhow::anyhow!("Could not determine home directory"))?;
11 | let config_dir = home.join(".config").join("code-assistant");
12 | std::fs::create_dir_all(&config_dir)?; // Ensure directory exists
13 | Ok(config_dir.join("projects.json"))
14 | }
15 |
16 | // The main trait for project management
17 | pub trait ProjectManager: Send + Sync {
18 | // Add a temporary project, returns the project name
19 | fn add_temporary_project(&mut self, path: PathBuf) -> Result;
20 | // Get all projects (both configured and temporary)
21 | fn get_projects(&self) -> Result>;
22 | fn get_project(&self, name: &str) -> Result