Pull to refresh
4K+
1
6
Rating
Send message

Вот это более объективное сравнение.

https://disk.yandex.ru/i/2yKBqjKnCPLeoA

И дополню, что это в плане только поиска кода( 4 инструмента... ну, и редактирования в случае ast-grep). Все прочие инструменты code-index идут бонусом:)

Проведу более объективное исследование, сорри.

Данные по БД самого проекта code-index

Из get_stats, строка repo: "code-index" (C:\MCP-Servers\code-index):

files        108     (исходники проекта)
functions    992
classes      152
imports      413
calls       6 372    (рёбра графа вызовов)
variables     64
text_files    25     (.md / .toml / .yaml и пр.)

То есть весь проект — это 108 файлов, разобранных tree-sitter'ом в 992 функции / 152 класса / 413 импортов / 6 372 вызова / 64 переменные. Плюс сырой исходник каждого файла лежит в file_contents, сжатый zstd.

Парсер раскладывает каждый файл на эти таблицы — буквально в функции write_code_to_db (crates/code-index-core/src/indexer/mod.rs:460): сначала upsert_file (метаданные: путь, content_hash, ast_hash, mtime, file_size), потом insert_functions / insert_classes / insert_imports / insert_calls / insert_variables, и в конце upsert_file_content (zstd-исходник). Структура строки в таблице functions (FunctionRecord) совпадает один-в-один с тем, что агент потом получает в ответе.

Что агент запрашивает и что получает

Агент даёт два поля — репо и имя символа — и получает точную функцию со строками, а не весь файл (который тут ~2000+ строк). Это и есть экономия токенов из статьи.

Запрос:

get_function(repo="code-index", name="write_code_to_db")

Ответ из БД (поля = колонки таблицы functions, тело сокращено):

{
  "_meta": { "dependent_files": ["crates/code-index-core/src/indexer/mod.rs"] },
  "result": [
    {
      "id": 7338,
      "file_id": 552,
      "name": "write_code_to_db",
      "qualified_name": "Indexer<'a>::write_code_to_db",
      "line_start": 460,
      "line_end": 613,
      "args": "(&self, rel_path: &str, content_hash: &str, language: &str, lines_total: usize, ast_hash: &str, parse_result: &ParseResult, skip_delete: bool, mtime: Option<i64>, file_size: Option<i64>, text_for_fts: Option<&str>, raw_content: Option<&str>)",
      "return_type": "Result<()>",
      "docstring": "/// Записать код-файл в БД: метаданные + символы (функции, классы, импорты и т.д.) ...",
      "body": "pub fn write_code_to_db(&self, ...) -> Result<()> { ... }",
      "is_async": false,
      "node_hash": "bff5478a936fbd87f55a194416252fc816090106a51dcafa9a27b6c2c30a01a6",
      "override_type": null,
      "override_target": null
    }
  ]
}

Information

Rating
980-th
Registered
Activity