144 lines
3.2 KiB
Markdown
144 lines
3.2 KiB
Markdown
|
|
# API Specs
|
||
|
|
|
||
|
|
## Repository api: `/repositories`
|
||
|
|
|
||
|
|
### Resolve
|
||
|
|
|
||
|
|
Get file or directory content from local repositories
|
||
|
|
|
||
|
|
**URL:** `/repositories/{name}/resolve/{path}`
|
||
|
|
|
||
|
|
**Method:** `GET`
|
||
|
|
|
||
|
|
**Request examples:**
|
||
|
|
|
||
|
|
- Get directory content
|
||
|
|
|
||
|
|
```shell
|
||
|
|
curl --request GET \
|
||
|
|
--url http://localhost:8080/repositories/https_github.com_TabbyML_tabby.git/resolve/
|
||
|
|
|
||
|
|
curl --request GET \
|
||
|
|
--url http://localhost:9090/repositories/https_github.com_TabbyML_tabby.git/resolve/ee/tabby-webserver/
|
||
|
|
```
|
||
|
|
|
||
|
|
- Get file content
|
||
|
|
|
||
|
|
```shell
|
||
|
|
curl --request GET \
|
||
|
|
--url http://localhost:8080/repositories/https_github.com_TabbyML_tabby.git/resolve/package.json
|
||
|
|
|
||
|
|
curl --request GET \
|
||
|
|
--url http://localhost:9090/repositories/https_github.com_TabbyML_tabby.git/resolve/ee/tabby-webserver/src/api.rs
|
||
|
|
```
|
||
|
|
|
||
|
|
**Response examples:**
|
||
|
|
|
||
|
|
- All directory query will return a list of string, with each string represents an entry under that directory. The `Content-Type` for directory query is `application/vnd.directory+json`.
|
||
|
|
|
||
|
|
For `/repositories/https_github.com_TabbyML_tabby.git/resolve/ee/tabby-webserver/`, the response is:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"entries": [
|
||
|
|
"ee/tabby-webserver/src",
|
||
|
|
"ee/tabby-webserver/ui",
|
||
|
|
"ee/tabby-webserver/examples",
|
||
|
|
"ee/tabby-webserver/Cargo.toml",
|
||
|
|
"ee/tabby-webserver/graphql"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
- The file query will return file content, the `Content-Type` will be guessed from the file extension.
|
||
|
|
|
||
|
|
For request `/repositories/https_github.com_TabbyML_tabby.git/resolve/package.json`, the content type is `application/json`, and the response is:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"private": true,
|
||
|
|
"workspaces": [
|
||
|
|
"clients/tabby-agent",
|
||
|
|
"clients/vscode",
|
||
|
|
"clients/vim",
|
||
|
|
"clients/intellij"
|
||
|
|
],
|
||
|
|
"engines": {
|
||
|
|
"node": ">=18"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
For request `/repositories/https_github.com_TabbyML_tabby.git/resolve/ee/tabby-webserver/src/api.rs`, the content type is `text/x-rust`, and the response is:
|
||
|
|
|
||
|
|
```text
|
||
|
|
use async_trait::async_trait;
|
||
|
|
use juniper::{GraphQLEnum, GraphQLObject};
|
||
|
|
use serde::{Deserialize, Serialize};
|
||
|
|
use tabby_common::api::{
|
||
|
|
code::{CodeSearch, CodeSearchError, SearchResponse},
|
||
|
|
event::RawEventLogger,
|
||
|
|
};
|
||
|
|
use thiserror::Error;
|
||
|
|
use tokio_tungstenite::connect_async;
|
||
|
|
|
||
|
|
use crate::websocket::WebSocketTransport;
|
||
|
|
|
||
|
|
#[derive(GraphQLEnum, Serialize, Deserialize, Clone, Debug)]
|
||
|
|
pub enum WorkerKind {
|
||
|
|
Completion,
|
||
|
|
Chat,
|
||
|
|
}
|
||
|
|
|
||
|
|
......omit......
|
||
|
|
```
|
||
|
|
|
||
|
|
### Meta
|
||
|
|
|
||
|
|
Get dataset entry for each indexed file in the repository
|
||
|
|
|
||
|
|
**URL:** `/repositories/{name}/meta/{path}`
|
||
|
|
|
||
|
|
**Method:** `GET`
|
||
|
|
|
||
|
|
**Request example:**
|
||
|
|
|
||
|
|
```shell
|
||
|
|
curl --request GET \
|
||
|
|
--url http://localhost:9090/repositories/https_github.com_TabbyML_tabby.git/meta/ee/tabby-webserver/src/lib.rs
|
||
|
|
```
|
||
|
|
|
||
|
|
**Response example:**
|
||
|
|
|
||
|
|
The `Content-Type` for successful response is always `application/json`.
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"git_url": "https://github.com/TabbyML/tabby.git",
|
||
|
|
"filepath": "ee/tabby-webserver/src/lib.rs",
|
||
|
|
"language": "rust",
|
||
|
|
"max_line_length": 88,
|
||
|
|
"avg_line_length": 26.340782,
|
||
|
|
"alphanum_fraction": 0.56416017,
|
||
|
|
"tags": [
|
||
|
|
{
|
||
|
|
"range": {
|
||
|
|
"start": 0,
|
||
|
|
"end": 12
|
||
|
|
},
|
||
|
|
"name_range": {
|
||
|
|
"start": 8,
|
||
|
|
"end": 11
|
||
|
|
},
|
||
|
|
"line_range": {
|
||
|
|
"start": 0,
|
||
|
|
"end": 12
|
||
|
|
},
|
||
|
|
"is_definition": true,
|
||
|
|
"syntax_type_name": "module"
|
||
|
|
},
|
||
|
|
......omit......
|
||
|
|
]
|
||
|
|
}
|
||
|
|
```
|