@smwb/onreel-git-mcp 0.4.0 → 0.6.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.
@@ -0,0 +1,117 @@
1
+ import type { CiEventCategory, CiJob, CiJobFilter, CiLog, CiRun, CiRunFilter, CiRunSortField, CiStatusCategory, CiWorkflow } from './ci.schema.ts';
2
+ import type { AdapterContext, ListCapabilities, ListSort, PageQuery, TrackerPage } from './tracker.types.ts';
3
+ export type CiRunQuery = PageQuery & {
4
+ status?: readonly CiStatusCategory[] | undefined;
5
+ /** Ветка или тег — имя без refs/heads/. */
6
+ ref?: string | undefined;
7
+ sha?: string | undefined;
8
+ event?: readonly CiEventCategory[] | undefined;
9
+ /** GitHub — id или имя файла workflow (`ci.yml`), GitLab — имя пайплайна, SourceCraft — имя workflow из конфига. */
10
+ workflow?: string | undefined;
11
+ /** Кто запустил — логин или slug трекера. */
12
+ actor?: string | undefined;
13
+ /** Ключ PR: прогоны для его головы. */
14
+ pullRequest?: string | undefined;
15
+ createdAfter?: number | undefined;
16
+ createdBefore?: number | undefined;
17
+ updatedAfter?: number | undefined;
18
+ updatedBefore?: number | undefined;
19
+ sort?: ListSort<CiRunSortField> | undefined;
20
+ };
21
+ export type CiJobQuery = PageQuery & {
22
+ status?: readonly CiStatusCategory[] | undefined;
23
+ /** И задания прежних попыток (GitHub filter=all, GitLab include_retried); по умолчанию — только последние. */
24
+ allAttempts?: boolean | undefined;
25
+ };
26
+ export type CiLogQuery = {
27
+ /**
28
+ * Сколько байт текста вернуть: 1..CI_LOG_MAX_BYTES, по умолчанию CI_LOG_DEFAULT_BYTES. Края окна выравниваются
29
+ * по целым строкам (секрет на краю не делится между окнами), поэтому текст бывает короче.
30
+ */
31
+ maxBytes?: number | undefined;
32
+ /** Без курсора: tail (по умолчанию) — конец лога, где обычно причина падения; head — начало. */
33
+ from?: 'head' | 'tail' | undefined;
34
+ /** nextCursor прошлого ответа: текст с этого места вперёд (дочитывание идущего задания); from тогда не читается. */
35
+ cursor?: string | undefined;
36
+ /** Не вычищать ANSI-последовательности и маркеры секций; секреты маскируются всегда. */
37
+ raw?: boolean | undefined;
38
+ };
39
+ /** Окно чтения лога после проверки запроса: resume — место курсора (страница и байт в ней; у GitHub и GitLab страница 0). */
40
+ export type CiLogWindow = {
41
+ bytes: number;
42
+ from: 'head' | 'tail';
43
+ resume?: {
44
+ page: number;
45
+ offset: number;
46
+ } | undefined;
47
+ };
48
+ export type CiTriggerInput = {
49
+ /** Ветка или тег, на котором запустить. */
50
+ ref: string;
51
+ /** Что такое ref; по умолчанию branch (GitHub и GitLab определяют сами, SourceCraft — нет). */
52
+ refType?: 'branch' | 'tag' | undefined;
53
+ /** GitHub — ровно один (id или имя файла), SourceCraft — хотя бы один (имена из конфига), GitLab — не задаётся. */
54
+ workflows?: readonly string[] | undefined;
55
+ /** Параметры: GitHub inputs (не больше 25), SourceCraft values каждого workflow, GitLab — переменные пайплайна. */
56
+ inputs?: Readonly<Record<string, string>> | undefined;
57
+ };
58
+ /** run нет — трекер принял запуск, но не сказал, какой прогон создан. */
59
+ export type CiTriggerResult = {
60
+ run?: CiRun | undefined;
61
+ };
62
+ export type CiRerunInput = {
63
+ /** Только упавшие задания и зависящие от них; GitLab умеет только так. */
64
+ failedOnly?: boolean | undefined;
65
+ /** Отладочное логирование (GitHub enable_debug_logging). */
66
+ debug?: boolean | undefined;
67
+ };
68
+ export type CiJobRerunInput = {
69
+ debug?: boolean | undefined;
70
+ };
71
+ export type CiAdapter = {
72
+ listWorkflows(query: PageQuery): Promise<TrackerPage<CiWorkflow>>;
73
+ listRuns(query: CiRunQuery): Promise<TrackerPage<CiRun>>;
74
+ getRun(key: string): Promise<CiRun>;
75
+ listJobs(runKey: string, query: CiJobQuery): Promise<TrackerPage<CiJob>>;
76
+ getJob(key: string): Promise<CiJob>;
77
+ log(jobKey: string, query: CiLogQuery): Promise<CiLog>;
78
+ trigger(input: CiTriggerInput): Promise<CiTriggerResult>;
79
+ /** Перезапуск прогона; вернётся его свежее состояние. */
80
+ rerun(runKey: string, input: CiRerunInput): Promise<CiRun>;
81
+ /** Перезапуск задания; вернётся свежее состояние прогона, в который оно попало. */
82
+ rerunJob(jobKey: string, input: CiJobRerunInput): Promise<CiRun>;
83
+ /** Отмена; вернётся свежее состояние (может быть ещё running). */
84
+ cancel(runKey: string): Promise<CiRun>;
85
+ cancelJob(jobKey: string): Promise<CiJob>;
86
+ };
87
+ export type CiCapabilities = {
88
+ workflows: boolean;
89
+ runs: ListCapabilities<CiRunFilter, CiRunSortField>;
90
+ jobs: ListCapabilities<CiJobFilter, never>;
91
+ /** live — лог идущего задания читается; cursor — дочитывание по nextCursor. */
92
+ log: {
93
+ live: boolean;
94
+ cursor: boolean;
95
+ };
96
+ trigger: {
97
+ supported: boolean;
98
+ workflows: 'one' | 'many' | 'none';
99
+ inputs: boolean;
100
+ tags: boolean;
101
+ };
102
+ rerun: {
103
+ all: boolean;
104
+ failedOnly: boolean;
105
+ job: boolean;
106
+ debug: boolean;
107
+ };
108
+ cancel: {
109
+ run: boolean;
110
+ job: boolean;
111
+ };
112
+ };
113
+ /** Раздел ci определения трекера (D-005): на том же подключении, что и задачи. */
114
+ export type CiDefinition = {
115
+ capabilities: CiCapabilities;
116
+ create(context: AdapterContext): CiAdapter;
117
+ };
@@ -0,0 +1,2 @@
1
+ import type { CiDefinition } from './ci.types.ts';
2
+ export declare function githubCi(): CiDefinition;
@@ -0,0 +1,2 @@
1
+ import type { CiDefinition } from './ci.types.ts';
2
+ export declare function gitlabCi(): CiDefinition;
@@ -1,4 +1,12 @@
1
- import type { JsonRequest, JsonResponse } from './tracker.types.ts';
1
+ import type { JsonRequest, JsonResponse, TextRequest, TextResponse } from './tracker.types.ts';
2
2
  export declare function requestJson(url: string, request: JsonRequest): Promise<JsonResponse>;
3
+ /**
4
+ * Запрос текста (лог CI): тело читается потоком, в памяти — только окно keep после skip. head — первые keep.bytes,
5
+ * поток отменяется, как только окно набрано; tail — последние keep.bytes в кольцевом буфере. Чтение обрывается
6
+ * на readMax байт тела. Границы окна сдвигаются к целым символам UTF-8: начало — вперёд, конец — назад (и у тела,
7
+ * оборванного посреди символа). Отказ — как у requestJson: missing, rate_limited, failed с телом без секретов.
8
+ * fetch следует редиректам (302 GitHub на подписанный адрес); по спецификации fetch Authorization на чужой origin не уходит.
9
+ */
10
+ export declare function requestText(url: string, request: TextRequest): Promise<TextResponse>;
3
11
  /** Базовый адрес без хвостовых слэшей; не http и не https — отказ подключения. */
4
12
  export declare function baseUrl(value: string | undefined, fallback: string): string;
@@ -3,6 +3,12 @@ export * from './tracker.types.ts';
3
3
  export * from './tracker.lib.ts';
4
4
  export * from './mapping.const.ts';
5
5
  export * from './http.lib.ts';
6
+ export * from './ci.schema.ts';
7
+ export * from './ci.types.ts';
8
+ export * from './ci.lib.ts';
9
+ export * from './github-ci.lib.ts';
10
+ export * from './gitlab-ci.lib.ts';
11
+ export * from './sourcecraft-ci.lib.ts';
6
12
  export * from './registry.lib.ts';
7
13
  export * from './builtin.lib.ts';
8
14
  export * from './secrets.lib.ts';