@smwb/onreel-git-mcp 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tracker/github-repo.lib.d.ts +2 -0
- package/dist/tracker/gitlab-repo.lib.d.ts +2 -0
- package/dist/tracker/http.lib.d.ts +1 -1
- package/dist/tracker/index.d.ts +6 -0
- package/dist/tracker/index.js +485 -147
- package/dist/tracker/index.js.map +1 -1
- package/dist/tracker/repo.lib.d.ts +4 -0
- package/dist/tracker/repo.schema.d.ts +35 -0
- package/dist/tracker/repo.types.d.ts +20 -0
- package/dist/tracker/sourcecraft-repo.lib.d.ts +2 -0
- package/dist/tracker/tracker.const.d.ts +2 -0
- package/dist/tracker/tracker.types.d.ts +23 -0
- package/package.json +1 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RepoAdapter } from './repo.types.ts';
|
|
2
|
+
import type { AdapterContext, TrackerDefinition } from './tracker.types.ts';
|
|
3
|
+
/** Адаптер репозитория трекера (D-008); трекер без раздела repo — TrackerError('unsupported', 'Трекер <title> не ведёт репозиторий.'). */
|
|
4
|
+
export declare function repoAdapterOf(definition: TrackerDefinition, context: AdapterContext): RepoAdapter;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** Видимость репозитория единой модели (#23): GitHub, GitLab и SourceCraft называют её одними словами. */
|
|
3
|
+
export declare const repoVisibilitySchema: z.ZodEnum<{
|
|
4
|
+
internal: "internal";
|
|
5
|
+
private: "private";
|
|
6
|
+
public: "public";
|
|
7
|
+
}>;
|
|
8
|
+
/** Фильтры списка веток — имена полей BranchQuery. */
|
|
9
|
+
export declare const branchFilterSchema: z.ZodEnum<{
|
|
10
|
+
search: "search";
|
|
11
|
+
}>;
|
|
12
|
+
export declare const repoSchema: z.ZodObject<{
|
|
13
|
+
name: z.ZodString;
|
|
14
|
+
defaultBranch: z.ZodOptional<z.ZodString>;
|
|
15
|
+
description: z.ZodOptional<z.ZodString>;
|
|
16
|
+
visibility: z.ZodOptional<z.ZodEnum<{
|
|
17
|
+
internal: "internal";
|
|
18
|
+
private: "private";
|
|
19
|
+
public: "public";
|
|
20
|
+
}>>;
|
|
21
|
+
links: z.ZodArray<z.ZodObject<{
|
|
22
|
+
url: z.ZodString;
|
|
23
|
+
title: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, z.core.$strip>>;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
export declare const branchSchema: z.ZodObject<{
|
|
27
|
+
name: z.ZodString;
|
|
28
|
+
sha: z.ZodOptional<z.ZodString>;
|
|
29
|
+
protected: z.ZodOptional<z.ZodBoolean>;
|
|
30
|
+
isDefault: z.ZodOptional<z.ZodBoolean>;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
export type RepoVisibility = z.infer<typeof repoVisibilitySchema>;
|
|
33
|
+
export type BranchFilter = z.infer<typeof branchFilterSchema>;
|
|
34
|
+
export type Repo = z.infer<typeof repoSchema>;
|
|
35
|
+
export type Branch = z.infer<typeof branchSchema>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Branch, BranchFilter, Repo } from './repo.schema.ts';
|
|
2
|
+
import type { AdapterContext, ListCapabilities, PageQuery, TrackerPage } from './tracker.types.ts';
|
|
3
|
+
export type BranchQuery = PageQuery & {
|
|
4
|
+
/** Подстрока имени ветки: GitLab и SourceCraft фильтруют сервером, GitHub — по полученной странице. */
|
|
5
|
+
search?: string | undefined;
|
|
6
|
+
};
|
|
7
|
+
/** Карточка репозитория и ветки git-хостинга того же подключения. */
|
|
8
|
+
export type RepoAdapter = {
|
|
9
|
+
get(): Promise<Repo>;
|
|
10
|
+
branches(query: BranchQuery): Promise<TrackerPage<Branch>>;
|
|
11
|
+
};
|
|
12
|
+
/** Возможности раздела repo: список веток описан как другие списки (D-004); сортировки веток нет. */
|
|
13
|
+
export type RepoCapabilities = {
|
|
14
|
+
branches: ListCapabilities<BranchFilter, never>;
|
|
15
|
+
};
|
|
16
|
+
/** Раздел repo определения трекера (D-008): на том же подключении, что и задачи. */
|
|
17
|
+
export type RepoDefinition = {
|
|
18
|
+
capabilities: RepoCapabilities;
|
|
19
|
+
create(context: AdapterContext): RepoAdapter;
|
|
20
|
+
};
|
|
@@ -26,6 +26,8 @@ export declare const CI_LOG_DEFAULT_BYTES: number;
|
|
|
26
26
|
export declare const CI_LOG_MAX_BYTES: number;
|
|
27
27
|
/** Потолок чтения тела лога: дальше поток обрывается, лог — truncated. */
|
|
28
28
|
export declare const CI_LOG_READ_MAX_BYTES: number;
|
|
29
|
+
/** Сколько редиректов проходит один запрос к трекеру; следующий — отказ failed. */
|
|
30
|
+
export declare const TRACKER_REDIRECT_MAX = 5;
|
|
29
31
|
/** Таймаут загрузки лога, мс: логи больше ответов API. */
|
|
30
32
|
export declare const CI_LOG_TIMEOUT_MS = 60000;
|
|
31
33
|
/** Сколько страниц лога SourceCraft читается за один вызов log(). */
|
|
@@ -2,12 +2,19 @@ import type { Issue, IssueComment, IssuePriority, IssueStatusCategory, TrackerDe
|
|
|
2
2
|
import type { LocalIssueStore } from '../kernel/store.types.ts';
|
|
3
3
|
import type { CiDefinition } from './ci.types.ts';
|
|
4
4
|
import type { PullRequestDefinition } from './pull.types.ts';
|
|
5
|
+
import type { RepoDefinition } from './repo.types.ts';
|
|
5
6
|
import type { CommentFilter, IssueFilter, IssueSortField } from './tracker.const.ts';
|
|
7
|
+
/**
|
|
8
|
+
* fetch контекста. requestJson и requestText передают redirect: 'manual' и проходят редиректы сами: обёртка
|
|
9
|
+
* потребителя передаёт redirect в свой fetch, иначе за редиректом пойдёт её fetch, а не библиотека. Такой ответ
|
|
10
|
+
* (redirected, адрес на другом origin, opaqueredirect) — отказ failed, а не данные.
|
|
11
|
+
*/
|
|
6
12
|
export type TrackerFetch = (input: string, init?: {
|
|
7
13
|
method?: string;
|
|
8
14
|
headers?: Record<string, string>;
|
|
9
15
|
body?: string;
|
|
10
16
|
signal?: AbortSignal;
|
|
17
|
+
redirect?: 'follow' | 'manual' | 'error';
|
|
11
18
|
}) => Promise<Response>;
|
|
12
19
|
/** Подключение проекта с расшифрованным секретом: живёт только в памяти на время вызова. */
|
|
13
20
|
export type TrackerConnectionData = {
|
|
@@ -119,10 +126,24 @@ export type TrackerDefinition = {
|
|
|
119
126
|
pulls?: PullRequestDefinition | undefined;
|
|
120
127
|
/** CI трекера на том же подключении (D-005); нет — ciAdapterOf отказывает unsupported. */
|
|
121
128
|
ci?: CiDefinition | undefined;
|
|
129
|
+
/** Репозиторий git-хостинга на том же подключении (D-008); нет — repoAdapterOf отказывает unsupported. */
|
|
130
|
+
repo?: RepoDefinition | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Origin API, к которому адаптер (и его разделы pulls, ci и repo) обращается с токеном подключения, например
|
|
133
|
+
* https://api.github.com. Потребитель привязывает к нему токен: правка url на другой origin — повод спросить
|
|
134
|
+
* токен заново. Неверное подключение — TrackerError, как у create. Нет — трекер не объявил origin (у local
|
|
135
|
+
* сети и токена нет).
|
|
136
|
+
*/
|
|
137
|
+
origin?: ((connection: TrackerConnectionData) => string) | undefined;
|
|
122
138
|
};
|
|
123
139
|
export type TrackerFailure = 'failed' | 'unknown_issue' | 'invalid_request' | 'not_found' | 'unsupported' | 'conflict' | 'rate_limited';
|
|
124
140
|
export type JsonRequest = {
|
|
125
141
|
fetch: TrackerFetch;
|
|
142
|
+
/**
|
|
143
|
+
* Origin API подключения: адрес вне него — отказ invalid_request до запроса. Редирект на чужой origin проходит
|
|
144
|
+
* только для GET и без заголовков запроса (Authorization и свои). Нет — origin самого адреса.
|
|
145
|
+
*/
|
|
146
|
+
origin?: string | undefined;
|
|
126
147
|
method?: 'GET' | 'POST' | 'PUT' | 'PATCH';
|
|
127
148
|
headers?: Record<string, string>;
|
|
128
149
|
body?: unknown;
|
|
@@ -143,6 +164,8 @@ export type JsonResponse = {
|
|
|
143
164
|
/** Запрос текста (лог CI): тело читается потоком, в памяти — только окно keep. */
|
|
144
165
|
export type TextRequest = {
|
|
145
166
|
fetch: TrackerFetch;
|
|
167
|
+
/** Origin API подключения — как у JsonRequest.origin. */
|
|
168
|
+
origin?: string | undefined;
|
|
146
169
|
headers?: Record<string, string> | undefined;
|
|
147
170
|
/** Заголовок accept; по умолчанию text/plain. */
|
|
148
171
|
accept?: string | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smwb/onreel-git-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Библиотека модулей, выделенных из onreel: git-операции и безопасные пути, список файлов worktree, жизненный цикл worktree против порта WorktreeStore, адаптеры трекеров GitHub/GitLab/Jira/SourceCraft/локального и MCP-сервер на stdio",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"git",
|