@smwb/onreel-git-mcp 0.13.0 → 0.14.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 +90 -32
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/tracker/declarative/declarative.const.d.ts +1 -1
- package/dist/tracker/gitverse-ci.lib.d.ts +2 -0
- package/dist/tracker/gitverse-pull.lib.d.ts +2 -0
- package/dist/tracker/gitverse-repo.lib.d.ts +2 -0
- package/dist/tracker/gitverse.const.d.ts +10 -0
- package/dist/tracker/gitverse.lib.d.ts +2 -0
- package/dist/tracker/http.lib.d.ts +21 -0
- package/dist/tracker/index.d.ts +5 -0
- package/dist/tracker/index.js +978 -137
- package/dist/tracker/index.js.map +1 -1
- package/dist/tracker/mapping.const.d.ts +18 -0
- package/dist/tracker/tracker.types.d.ts +2 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
- **листинги** — список записей одного каталога worktree для ревью;
|
|
10
10
|
- **жизненный цикл worktree** — замки, двухфазное создание и очистка, сверка при старте, свип и корзина —
|
|
11
11
|
против портов хранения, которые реализует потребитель;
|
|
12
|
-
- **адаптеры трекеров** — единая модель задач и
|
|
13
|
-
трекер поверх хранилища потребителя; у GitHub, GitLab и
|
|
14
|
-
и раздел репозитория — карточка и ветки (D-008); свои трекеры пользователя —
|
|
15
|
-
(D-010, D-015);
|
|
12
|
+
- **адаптеры трекеров** — единая модель задач и шесть адаптеров: GitHub, GitLab, Jira, SourceCraft, GitVerse и
|
|
13
|
+
локальный трекер поверх хранилища потребителя; у GitHub, GitLab, SourceCraft и GitVerse есть разделы pull
|
|
14
|
+
request-ов и CI (D-005) и раздел репозитория — карточка и ветки (D-008); свои трекеры пользователя —
|
|
15
|
+
декларативным конфигом без кода (D-010, D-015);
|
|
16
16
|
- **MCP stdio-сервер** — JSON-RPC 2.0 поверх stdin/stdout, инструменты строятся из таблицы команд вызывающего.
|
|
17
17
|
|
|
18
18
|
Пакет ESM, рантайм-зависимости — `zod` и `yaml` (разбор конфигов своих трекеров). Публичная поверхность
|
|
@@ -38,7 +38,7 @@ CI и тесты идут на образе `node:24-bookworm`; в репози
|
|
|
38
38
|
| `…/git` | `runGit`, `GitError`, управление пулом, операции над репозиторием и worktree, безопасные пути, маскирование секретов | [git](#git) |
|
|
39
39
|
| `…/files` | `listWorktreeDir`, `DirRefusal` | [files](#files) |
|
|
40
40
|
| `…/worktree` | замки, `finishPreparing`/`finishCleaning`, reconciler, корзина — против порта `WorktreeStore` | [worktree](#worktree) |
|
|
41
|
-
| `…/tracker` | типы портов, реестр, `registerBuiltinTrackers()`,
|
|
41
|
+
| `…/tracker` | типы портов, реестр, `registerBuiltinTrackers()`, шесть фабрик адаптеров, свои трекеры из конфига (`definitionFromConfig`, `setUserTrackers`), файловое хранилище токенов | [tracker](#tracker) |
|
|
42
42
|
| `…/mcp` | `serveMcp`, `mcpToolSpecs`, сборщики инструментов, выбор принципала | [mcp](#mcp) |
|
|
43
43
|
| `…/package.json` | манифест пакета | [package.json](#packagejson) |
|
|
44
44
|
|
|
@@ -276,7 +276,8 @@ try {
|
|
|
276
276
|
}
|
|
277
277
|
```
|
|
278
278
|
|
|
279
|
-
Фабрики: `localTracker()`, `sourcecraftTracker()`, `githubTracker()`, `gitlabTracker()`, `jiraTracker()
|
|
279
|
+
Фабрики: `localTracker()`, `sourcecraftTracker()`, `githubTracker()`, `gitlabTracker()`, `jiraTracker()`,
|
|
280
|
+
`gitverseTracker()` (подробнее о GitVerse — в подразделе «GitVerse» ниже).
|
|
280
281
|
Сопоставление статусов и приоритетов — открытые таблицы (`SOURCECRAFT_STATUSES`, `JIRA_PRIORITIES`,
|
|
281
282
|
`GITHUB_PRIORITY_LABELS`, `GITLAB_PRIORITY_LABELS`, …), чтобы потребитель видел, во что именно преводится его
|
|
282
283
|
статус. Свои трекеры добавляют в реестр явным `registerTracker(definition)`; повторный `kind` — исключение, а не
|
|
@@ -293,11 +294,13 @@ try {
|
|
|
293
294
|
Таймаут запроса к трекеру — `TRACKER_TIMEOUT_MS` (15 с), тело ответа ошибки обрезают до
|
|
294
295
|
`TRACKER_ERROR_BODY_MAX` (300 символов) и маскируют; 404 с `missingIsIssue` — `unknown_issue`, а не «неверный
|
|
295
296
|
адрес». 404 с заданным `missing` отдаёт его код и текст (`not_found`), статус из `conflictOn` — `conflict`,
|
|
296
|
-
429 и 403, который выглядит лимитом частоты (`x-ratelimit-remaining: 0
|
|
297
|
-
|
|
297
|
+
429 и 403, который выглядит лимитом частоты (`x-ratelimit-remaining: 0`, `gitverse-ratelimit-remaining: 0`,
|
|
298
|
+
`gitverse-ratelimit-user-remaining: 0`, `retry-after` или `gitverse-ratelimit-retry-after`) — `rate_limited`
|
|
299
|
+
(подробнее — в подразделе ниже). Заголовок `accept` запроса задаёт поле `accept` у `JsonRequest` (по умолчанию
|
|
300
|
+
`application/json`) и `TextRequest` (по умолчанию `text/plain`): он же уходит на переход на чужой origin.
|
|
298
301
|
|
|
299
302
|
Origin API подключения отдаёт необязательная функция определения `origin(connection)`: у `sourcecraftTracker()`,
|
|
300
|
-
`githubTracker()`, `gitlabTracker()` и `
|
|
303
|
+
`githubTracker()`, `gitlabTracker()`, `jiraTracker()` и `gitverseTracker()` она есть, у `localTracker()` — нет (сети и токена у него
|
|
301
304
|
нет). `requestJson` и `requestText` принимают `origin` в запросе и сами проходят редиректы, не больше
|
|
302
305
|
`TRACKER_REDIRECT_MAX` (5), поэтому обёртка `fetch` потребителя передаёт `init.redirect` дальше; подробнее — в
|
|
303
306
|
разделе «Безопасность».
|
|
@@ -330,6 +333,7 @@ Origin API подключения отдаёт необязательная фу
|
|
|
330
333
|
| GitLab | все `ISSUE_FILTERS` | `status` | `created`, `updated`, `priority`, `title` | `updatedAfter` (на странице); `asc`, `desc` |
|
|
331
334
|
| Jira | все `ISSUE_FILTERS` | — | `created`, `updated`, `priority`, `title` | как у GitLab |
|
|
332
335
|
| SourceCraft | все `ISSUE_FILTERS` | `assignee` | `created`, `updated`, `priority`, `title` | как у GitLab |
|
|
336
|
+
| GitVerse | все `ISSUE_FILTERS` | `status`, `labels`, `assignee`, `search`, `createdAfter`, `createdBefore` | `created`, `updated` | `updatedAfter` (на странице); `asc`, `desc`; страницы — адаптер |
|
|
333
337
|
| локальный | без `author` | без `status` | — | `updatedAfter` (на странице); `asc` |
|
|
334
338
|
|
|
335
339
|
У GitHub фильтры `search` и диапазоны `created*`/`updated*` идут через Search API (30 запросов/мин,
|
|
@@ -374,7 +378,7 @@ Origin API подключения отдаёт необязательная фу
|
|
|
374
378
|
| `not_found` | 404 сущности, заданный через `missing` (PR, прогон, задание) | `not_found` |
|
|
375
379
|
| `unsupported` | фильтр/сортировка вне возможностей, неподдержанная операция | `capability_unsupported` |
|
|
376
380
|
| `conflict` | статус из `conflictOn` (405/409/422): переход сейчас невозможен | `lifecycle_conflict` |
|
|
377
|
-
| `rate_limited` | 429, 403 с `x-ratelimit-remaining: 0` и 403 с `retry-after` (вторичные лимиты GitHub: Search API — 30 запросов/мин); задержка — из `retry-after`, иначе `x-ratelimit-reset` (GitHub),
|
|
381
|
+
| `rate_limited` | 429, 403 с `x-ratelimit-remaining: 0` (или `gitverse-ratelimit-remaining`/`gitverse-ratelimit-user-remaining: 0` у GitVerse) и 403 с `retry-after` (вторичные лимиты GitHub: Search API — 30 запросов/мин); задержка — из `retry-after` или `gitverse-ratelimit-retry-after`, иначе `x-ratelimit-reset` (GitHub), `ratelimit-reset` (GitLab) или `gitverse-ratelimit-reset` | `rate_limited` |
|
|
378
382
|
|
|
379
383
|
Все четыре кода уже есть в каталоге ошибок контракта (`errorCatalog`), срез контракта не меняется.
|
|
380
384
|
Исчерпывающий `switch` по `TrackerFailure` у потребителя после обновления нужно дополнить.
|
|
@@ -383,9 +387,9 @@ Origin API подключения отдаёт необязательная фу
|
|
|
383
387
|
|
|
384
388
|
Pull request-ы — раздел `pulls` определения трекера (D-005), а не отдельный реестр и не новые методы
|
|
385
389
|
`TrackerAdapter`: адаптер PR живёт на том же подключении (`target`, `token`, `url`) и в том же `AdapterContext`,
|
|
386
|
-
что и задачи. Раздел ведут GitHub, GitLab и
|
|
390
|
+
что и задачи. Раздел ведут GitHub, GitLab, SourceCraft и GitVerse; у локального трекера и Jira его нет, и
|
|
387
391
|
`pullRequestAdapterOf(definition, context)` для них бросает `TrackerError('unsupported')`, не сделав ни одного
|
|
388
|
-
запроса. Фабрики разделов — `githubPulls()`, `gitlabPulls()` и `
|
|
392
|
+
запроса. Фабрики разделов — `githubPulls()`, `gitlabPulls()`, `sourcecraftPulls()` и `gitversePulls()`: каждая возвращает
|
|
389
393
|
`PullRequestDefinition` (`capabilities` + `create(context)`), и определение трекера получает раздел полем `pulls`.
|
|
390
394
|
|
|
391
395
|
```ts
|
|
@@ -431,10 +435,12 @@ GitLab iid, SourceCraft slug), для клиента непрозрачная с
|
|
|
431
435
|
| GitHub | `status`, `author`, `labels`, `search`, `created*`/`updated*` | `created`, `updated` | `true` / `true` | `title`, `description`, `target` | `open`, `closed` | `merge`, `squash`, `rebase` | `false` |
|
|
432
436
|
| GitLab | `status` | `created`, `updated`, `title` | `true` / `true` | те же | `draft`, `open`, `closed` | `merge`, `squash` | `true` |
|
|
433
437
|
| SourceCraft | `labels`, `search`, `created*`/`updated*` | `created`, `updated`, `title` | `true` / `true` | те же | `draft`, `open`, `closed` | `merge`, `squash`, `rebase` | `true` |
|
|
438
|
+
| GitVerse | все фильтры | `created`, `updated` | `true` / `true` | те же | `open`, `closed` | — (нет в API) | `false` |
|
|
434
439
|
|
|
435
|
-
У всех
|
|
440
|
+
У всех четырёх `list.filters` — весь `pullRequestFilterSchema`. Комментарии: у GitHub `updatedAfter` фильтрует сам
|
|
436
441
|
трекер и порядок только `asc`; у GitLab и SourceCraft `updatedAfter` проверяется по странице, порядки `asc` и
|
|
437
|
-
`desc
|
|
442
|
+
`desc`; у GitVerse маршрут комментариев не принимает ни параметров страниц, ни `updatedAfter`, поэтому и страницы,
|
|
443
|
+
и `updatedAfter`, и порядки `asc`/`desc` — на стороне адаптера (курсор — смещение в списке). `comment` — `true` у всех.
|
|
438
444
|
|
|
439
445
|
Сопоставление состояний — открытые таблицы, как у задач: `GITLAB_MERGE_REQUEST_STATES` (`locked` — слияние идёт,
|
|
440
446
|
MR ещё открыт, поэтому `open`) и `SOURCECRAFT_PULL_STATUSES` (`merging` — `open` с именем `merging`, `discarded`
|
|
@@ -462,14 +468,14 @@ PUT, GitHub — PATCH, SourceCraft не дёргает эндпоинт сост
|
|
|
462
468
|
`PullRequest`, `PullRequestStatusCategory`, `PullRequestFilter`, `PullRequestSortField` и `MergeMethod`; типы
|
|
463
469
|
`PullRequestQuery`, `NewPullRequestInput`, `PullRequestPatchInput`, `MergeInput`, `PullRequestAdapter`,
|
|
464
470
|
`PullRequestCapabilities` и `PullRequestDefinition`; помощник `pullRequestAdapterOf` и фабрики разделов
|
|
465
|
-
`githubPulls()`, `gitlabPulls()` и `
|
|
471
|
+
`githubPulls()`, `gitlabPulls()`, `sourcecraftPulls()` и `gitversePulls()`. Всё это выходит из субпути `…/tracker` — нового субпути
|
|
466
472
|
нет (D-001, D-005). За модель отвечают таблицы сопоставления и запись D-005, отказ до запроса — правило R-002.
|
|
467
473
|
|
|
468
474
|
### CI
|
|
469
475
|
|
|
470
476
|
Прогоны CI — необязательный раздел `ci` того же `TrackerDefinition`, на том же подключении, что задачи (D-005):
|
|
471
477
|
возможности `CiCapabilities` плюс фабрика `create(context)` на том же `AdapterContext`. Раздел строят фабрики
|
|
472
|
-
`githubCi()`, `gitlabCi()` и `
|
|
478
|
+
`githubCi()`, `gitlabCi()`, `sourcecraftCi()` и `gitverseCi()`; у локального трекера и Jira раздела нет. Адаптер раздела —
|
|
473
479
|
`ciAdapterOf(definition, context)`; у трекера без `ci` это `TrackerError('unsupported', 'Трекер <title> не ведёт CI.')`.
|
|
474
480
|
`CiAdapter` умеет: `listWorkflows`, `listRuns`, `getRun`, `listJobs`, `getJob`, `log`, `trigger`, `rerun`,
|
|
475
481
|
`rerunJob`, `cancel`, `cancelJob`. Каждый возвращённый объект проходит parse своей схемы zod (`ciWorkflowSchema`,
|
|
@@ -514,17 +520,17 @@ SourceCraft (`SOURCECRAFT_CI_STATUSES` — `status` прогона, workflow, з
|
|
|
514
520
|
`ref`, `sha`, `event`, `workflow`, `actor`, `pullRequest`, `createdAfter`, `createdBefore`, `updatedAfter`,
|
|
515
521
|
`updatedBefore`):
|
|
516
522
|
|
|
517
|
-
| Поле | GitHub Actions | GitLab | SourceCraft |
|
|
518
|
-
|
|
519
|
-
| `workflows` | да (`listWorkflows`) | нет | нет |
|
|
520
|
-
| `runs.filters` | все | все | кроме `ref` и `sha` |
|
|
521
|
-
| `runs.clientSide` | `status`, `event`, `updatedAfter`, `updatedBefore` | `status`, `event` | все фильтры |
|
|
522
|
-
| `runs.sorts` | — | `created`, `updated` | — |
|
|
523
|
-
| `jobs` | фильтры `status`, `allAttempts`; `status` на странице | фильтры `status`, `allAttempts` | фильтр `status`; `status` на странице |
|
|
524
|
-
| `log` | `live: false`, курсор есть | `live: true`, курсор есть | `live: true`, курсор есть |
|
|
525
|
-
| `trigger` | ровно один workflow, `inputs`, теги | без workflow, `inputs`, теги | хотя бы один workflow, `inputs`, теги |
|
|
526
|
-
| `rerun` | всё, включая задание и `debug` | только `failedOnly` и задание | не поддерживается |
|
|
527
|
-
| `cancel` | прогон | прогон и задание | не поддерживается |
|
|
523
|
+
| Поле | GitHub Actions | GitLab | SourceCraft | GitVerse |
|
|
524
|
+
|---|---|---|---|---|
|
|
525
|
+
| `workflows` | да (`listWorkflows`) | нет | нет | да (`listWorkflows`) |
|
|
526
|
+
| `runs.filters` | все | все | кроме `ref` и `sha` | кроме `created*` и `updated*` (нет в API) |
|
|
527
|
+
| `runs.clientSide` | `status`, `event`, `updatedAfter`, `updatedBefore` | `status`, `event` | все фильтры | `status`, `ref`, `sha`, `event`, `pullRequest` |
|
|
528
|
+
| `runs.sorts` | — | `created`, `updated` | — | — |
|
|
529
|
+
| `jobs` | фильтры `status`, `allAttempts`; `status` на странице | фильтры `status`, `allAttempts` | фильтр `status`; `status` на странице | фильтр `status`; `status` на странице |
|
|
530
|
+
| `log` | `live: false`, курсор есть | `live: true`, курсор есть | `live: true`, курсор есть | `live: false`, курсор есть |
|
|
531
|
+
| `trigger` | ровно один workflow, `inputs`, теги | без workflow, `inputs`, теги | хотя бы один workflow, `inputs`, теги | ровно один workflow, `inputs`, теги (экспериментально) |
|
|
532
|
+
| `rerun` | всё, включая задание и `debug` | только `failedOnly` и задание | не поддерживается | прогон и задание (экспериментально) |
|
|
533
|
+
| `cancel` | прогон | прогон и задание | не поддерживается | прогон (экспериментально) |
|
|
528
534
|
|
|
529
535
|
Запросы списков — `CiRunQuery` (`PageQuery` плюс фильтры из таблицы и `sort` по `created`/`updated`) и
|
|
530
536
|
`CiJobQuery` (`status`, `allAttempts` — задания прежних попыток); имена допустимых фильтров и полей сортировки
|
|
@@ -584,7 +590,7 @@ for (;;) {
|
|
|
584
590
|
`CI_LOG_PAGES_MAX` страниц за вызов: у более длинного лога это конец первой прочитанной пачки, а не всего
|
|
585
591
|
лога — остальное добирается по `nextCursor`.
|
|
586
592
|
|
|
587
|
-
Символы субпути: фабрики `githubCi()`, `gitlabCi()`, `sourcecraftCi()`, `ciAdapterOf`, типы `CiAdapter`,
|
|
593
|
+
Символы субпути: фабрики `githubCi()`, `gitlabCi()`, `sourcecraftCi()`, `gitverseCi()`, `ciAdapterOf`, типы `CiAdapter`,
|
|
588
594
|
`CiCapabilities`, `CiDefinition`, `CiWorkflow`, `CiRun`, `CiJob`, `CiLog`, `CiStatus`, `CiStatusCategory`,
|
|
589
595
|
`CiEventCategory`, `CiRunQuery`, `CiJobQuery`, `CiLogQuery`, `CiLogWindow`, `CiTriggerInput`,
|
|
590
596
|
`CiTriggerResult`, `CiRerunInput`, `CiJobRerunInput`, наборы значений запроса — типы `CiRunFilter`,
|
|
@@ -595,7 +601,8 @@ for (;;) {
|
|
|
595
601
|
`cleanLogText`, `isFinished` и константы `CI_LOG_DEFAULT_BYTES`, `CI_LOG_MAX_BYTES`, `CI_LOG_READ_MAX_BYTES`,
|
|
596
602
|
`CI_LOG_TIMEOUT_MS`, `CI_LOG_PAGES_MAX`, `CI_FINISHED_STATUSES`. Таблицы сопоставления — `GITHUB_RUN_STATUSES`,
|
|
597
603
|
`GITHUB_RUN_CONCLUSIONS`, `GITHUB_RUN_EVENTS`, `GITLAB_CI_STATUSES`, `GITLAB_PIPELINE_SOURCES`,
|
|
598
|
-
`SOURCECRAFT_CI_STATUSES`, `SOURCECRAFT_RUN_EVENTS` (содержание — выше
|
|
604
|
+
`SOURCECRAFT_CI_STATUSES`, `SOURCECRAFT_RUN_EVENTS`, `GITVERSE_CI_STATUSES`, `GITVERSE_RUN_EVENTS` (содержание — выше
|
|
605
|
+
и в подразделе «GitVerse»). Загрузку текста наружу держит
|
|
599
606
|
`requestText(url, TextRequest): TextResponse` — тело читается потоком, `skip` пропускает байты от начала
|
|
600
607
|
(дочитывание по курсору), `keep: { bytes, from: 'head' | 'tail' }` удерживает окно кольцевым буфером,
|
|
601
608
|
`readMax` и `timeoutMs` перекрывают потолки по умолчанию. Модель лога — запись D-006.
|
|
@@ -604,7 +611,7 @@ for (;;) {
|
|
|
604
611
|
|
|
605
612
|
Карточка репозитория и список веток — раздел `repo` того же `TrackerDefinition`, на том же подключении, что и
|
|
606
613
|
задачи (D-005, D-008): возможности `RepoCapabilities` плюс фабрика `create(context)` на том же `AdapterContext`.
|
|
607
|
-
Раздел строят фабрики `githubRepo()`, `gitlabRepo()` и `
|
|
614
|
+
Раздел строят фабрики `githubRepo()`, `gitlabRepo()`, `sourcecraftRepo()` и `gitverseRepo()`; у локального трекера и Jira его нет,
|
|
608
615
|
и `repoAdapterOf(definition, context)` для них бросает `TrackerError('unsupported', 'Трекер <title> не ведёт
|
|
609
616
|
репозиторий.')`, не сделав ни одного запроса.
|
|
610
617
|
|
|
@@ -647,6 +654,7 @@ GitLab читает `^` в начале и `$` в конце `search` как я
|
|
|
647
654
|
| GitHub | `GET /repos/{owner}/{repo}` | `GET /repos/{owner}/{repo}/branches` | на странице | номер страницы по `Link` | да | — |
|
|
648
655
|
| GitLab | `GET /api/v4/projects/{id}` | `GET /api/v4/projects/{id}/repository/branches` | параметр сервера, якоря снимаются | `x-next-page` | да | да (`default`) |
|
|
649
656
|
| SourceCraft | `GET /repos/{org}/{repo}` | `GET /repos/{org}/{repo}/branches` | параметр `filter` | `next_page_token` | — | — |
|
|
657
|
+
| GitVerse | `GET /repos/{owner}/{repo}` | `GET /repos/{owner}/{repo}/branches` | параметр `q` и на странице | номер страницы по `Link` и `x-total-count` | да | — |
|
|
650
658
|
|
|
651
659
|
Список веток GitHub не отдаёт признак ветки по умолчанию, а список веток SourceCraft — ни его, ни признак
|
|
652
660
|
защиты: ветку по умолчанию потребитель читает из карточки (`Repo.defaultBranch`), а не из элементов списка.
|
|
@@ -656,7 +664,7 @@ GitLab читает `^` в начале и `$` в конце `search` как я
|
|
|
656
664
|
Публичные символы раздела — схемы `repoSchema`, `branchSchema`, `repoVisibilitySchema` и `branchFilterSchema`
|
|
657
665
|
с выведенными типами `Repo`, `Branch`, `RepoVisibility` и `BranchFilter`; типы `BranchQuery`, `RepoAdapter`,
|
|
658
666
|
`RepoCapabilities` и `RepoDefinition`; помощник `repoAdapterOf` и фабрики разделов `githubRepo()`,
|
|
659
|
-
`gitlabRepo()` и `
|
|
667
|
+
`gitlabRepo()`, `sourcecraftRepo()` и `gitverseRepo()`. Всё это выходит из субпути `…/tracker` — нового субпути нет (D-001, D-005).
|
|
660
668
|
За модель отвечает запись D-008, отказ до запроса — правило R-002.
|
|
661
669
|
|
|
662
670
|
### Свои трекеры из конфига
|
|
@@ -748,6 +756,56 @@ assignee. `result` — путь JSON (`$.a.b`, `$.items[0]`, `$.labels[*].name`)
|
|
|
748
756
|
разворачиваний ссылок YAML с учётом вложенности: якорь считается тоже, поэтому сотня ссылок на один якорь — уже
|
|
749
757
|
отказ), `TRACKER_CONFIG_DEPTH_MAX` (16 уровней вложенности под корнем конфига). Правила безопасности — в разделе «Безопасность».
|
|
750
758
|
|
|
759
|
+
### GitVerse
|
|
760
|
+
|
|
761
|
+
`gitverseTracker()` — задачи репозитория [GitVerse](https://gitverse.ru) (`target` — `owner/repo`, `token` —
|
|
762
|
+
токен REST, `url` — адрес API on-prem; по умолчанию `GITVERSE_API` — `https://api.gitverse.ru`, веб-ссылки —
|
|
763
|
+
от `GITVERSE_WEB`, `https://gitverse.ru`) с разделами `gitversePulls()`, `gitverseCi()` и `gitverseRepo()` на том
|
|
764
|
+
же подключении (D-005, D-007, D-008). Поддержка экспериментальная (D-014): поведение снято живой проверкой
|
|
765
|
+
облачного gitverse.ru и спецификацией его API, on-prem не проверялся. Адаптер учитывает особенности протокола:
|
|
766
|
+
|
|
767
|
+
- **accept.** Каждый запрос шлёт `accept: GITVERSE_ACCEPT` (`application/vnd.gitverse.object+json;version=1`) через
|
|
768
|
+
поле `accept` у `JsonRequest` и `TextRequest`: без него и с `application/json` GitVerse отвечает 415.
|
|
769
|
+
Авторизация REST — только `Authorization: Bearer <token>`.
|
|
770
|
+
- **Лимит запросов** читается из заголовков `gitverse-ratelimit-*`: 429 и 403 с исчерпанным остатком — отказ
|
|
771
|
+
`rate_limited`, задержка — из `gitverse-ratelimit-retry-after` или `gitverse-ratelimit-reset`.
|
|
772
|
+
- **Страницы.** Курсор — номер страницы. Адрес `rel="next"` заголовка `Link` у GitVerse указывает на другой
|
|
773
|
+
origin (`gitverse.ru/public/api`), и по нему адаптер не ходит: `linkNextPage(link)` берёт из него только
|
|
774
|
+
параметр `page`, а `requestJson` и `requestText` отклоняют адрес вне origin подключения до сети. Нет `Link` —
|
|
775
|
+
курсор считает `nextPageCursor({ headers, page, perPage, count, total? })` по `x-total-count` (или полю
|
|
776
|
+
`total_count`), иначе по полноте страницы.
|
|
777
|
+
- **Шлюз** не принимает `/` в значениях параметров запроса: такие метки, ветки и поиск не уходят серверу и
|
|
778
|
+
проверяются по полученной странице (поэтому эти фильтры объявлены в `clientSide`).
|
|
779
|
+
|
|
780
|
+
| Операция | GitVerse | Пометка |
|
|
781
|
+
|---|---|---|
|
|
782
|
+
| Задачи: список, просмотр, создание, комментарии | да; список отдаёт и PR — адаптер их пропускает, а номер PR отклоняется `unknown_issue` во всём разделе (`get`, `update`, `comment`, `comments`): маршруты и нумерация у задач и PR общие, поэтому проверка стоит одного `GET` задачи перед записью и перед чтением комментариев | создание задач в живой проверке не прошло (403 тестового токена), маршруты проверены на номерах PR |
|
|
783
|
+
| Правка задачи: заголовок, описание, метки, исполнитель | да; метки — имена с заменой списка, исполнитель `null` — снять | — |
|
|
784
|
+
| Метки: добавить или снять одну | такой операции в API нет, метки меняются только заменой всего списка: одна метка правится как GET + PATCH (`get`, затем `update({ labels })` со всем списком) — не атомарно, параллельная правка меток теряется | нет в API |
|
|
785
|
+
| Неизвестные метки | GitVerse молча отбрасывает их при правке — адаптер сверяет имена со списком меток репозитория до запроса и отвечает `invalid_request`, ничего не меняя | — |
|
|
786
|
+
| Статус задачи `open` / `done` | `PATCH state`; если GitVerse его не применил — перенос в колонку проекта (проект — из поля ответа задачи `project_id`, иначе `project.id`; колонка «Готово» для `done` и колонка по умолчанию для `open`) и перечитывание; проекта в ответе нет или перенос не применился — `conflict` с подсказкой | экспериментально: `project_id`/`project_status_id` спецификация объявляет только у тела запроса, у ответа задачи (`response.Issue`) поля проекта нет, и живьём оно не проверено |
|
|
787
|
+
| Статусы `in_progress`, `declined`, приоритет | `unsupported` до запроса | нет в API |
|
|
788
|
+
| Удаление задач, вехи, связи кроме родителя и подзадачи | в порте адаптера нет; в API GitVerse тоже нет | нет в API |
|
|
789
|
+
| Комментарии | весь список одним ответом: страницы, `updatedAfter` и `order` — на стороне адаптера, курсор — смещение | — |
|
|
790
|
+
| PR: список, просмотр, создание (и черновиком), правка, закрытие, переоткрытие, комментарии | да; комментарии — маршрут комментариев задач | — |
|
|
791
|
+
| PR: в черновик и из черновика | `unsupported` | нет в API |
|
|
792
|
+
| PR: `merge` | `unsupported` до запроса с подсказкой: влить PR можно только в веб-интерфейсе | нет в API |
|
|
793
|
+
| CI: workflow, прогоны, задания, лог законченного задания | да; задание с `failed_step` — `failed`, что бы ни говорил его `status`, прогон ждёт одобрения — `waiting` | — |
|
|
794
|
+
| CI: запуск, перезапуск прогона и задания, отмена прогона | да (`dispatches`, `rerun`, `cancel`); ответ 406 или 409 — `conflict`: площадка операцию не приняла | экспериментально: в живой проверке не запускались |
|
|
795
|
+
| CI: «только упавшие», `debug`, отмена задания, прежние попытки | `unsupported` до запроса | нет в API |
|
|
796
|
+
| Репозиторий: карточка и ветки | да; признак защиты есть, ветки по умолчанию в списке нет | — |
|
|
797
|
+
|
|
798
|
+
Статусы и события — открытые таблицы `mapping.const`: `GITVERSE_ISSUE_STATES` (state задачи → категория),
|
|
799
|
+
`GITVERSE_ISSUE_STATE_NAMES` (категория → state), `GITVERSE_DONE_COLUMN` (заголовок колонки «Готово»),
|
|
800
|
+
`GITVERSE_PULL_STATES` (state PR; `draft` и `merged` — поля PR), `GITVERSE_CI_STATUSES` (status прогона, задания
|
|
801
|
+
и шага: `waiting` — в очереди, `blocked` — ждёт одобрения) и `GITVERSE_RUN_EVENTS`.
|
|
802
|
+
|
|
803
|
+
Самостоятельный MCP-сервер выберет провайдера по remote репозитория: хосты `GITVERSE_REMOTE_HOSTS`
|
|
804
|
+
(`gitverse.ru`) — трекер `gitverse`, токен — из переменной `GITVERSE_TOKEN_ENV` (`GITVERSE_TOKEN`). Символы
|
|
805
|
+
GitVerse: фабрики `gitverseTracker()`, `gitversePulls()`, `gitverseCi()`, `gitverseRepo()`, константы
|
|
806
|
+
`GITVERSE_API`, `GITVERSE_WEB`, `GITVERSE_ACCEPT`, `GITVERSE_REMOTE_HOSTS`, `GITVERSE_TOKEN_ENV`, таблицы выше и
|
|
807
|
+
общие помощники `linkNextPage` и `nextPageCursor` из `http.lib`. Всё выходит из субпути `…/tracker`.
|
|
808
|
+
|
|
751
809
|
## mcp
|
|
752
810
|
|
|
753
811
|
`serveMcp` — построчный JSON-RPC 2.0 на stdio, только инструменты: `initialize`, `ping`, `tools/list`,
|
|
@@ -911,7 +969,7 @@ console.log(manifest.name, manifest.version);
|
|
|
911
969
|
слот у неё третий параметр, а у трёх остальных — четвёртый, после `sink`.
|
|
912
970
|
- **Токен — только своему origin.** `origin(connection)` в `TrackerDefinition` — origin API, куда адаптер (и его
|
|
913
971
|
разделы `pulls`, `ci` и `repo`) ходит с токеном: `https://api.github.com`, `https://gitlab.com`,
|
|
914
|
-
`https://api.sourcecraft.tech` по умолчанию, иначе origin `url` подключения; у Jira `url` обязателен. Потребитель
|
|
972
|
+
`https://api.sourcecraft.tech`, `https://api.gitverse.ru` по умолчанию, иначе origin `url` подключения; у Jira `url` обязателен. Потребитель
|
|
915
973
|
привязывает к нему введённый токен: после правки `url` на другой origin токен спрашивают заново. Неверное
|
|
916
974
|
подключение — `TrackerError('invalid_request')`, как у `create`. Встроенные адаптеры передают этот origin в
|
|
917
975
|
`requestJson` и `requestText` (поле `origin` у `JsonRequest` и `TextRequest`; нет — origin самого адреса): адрес
|
package/dist/index.js
CHANGED
|
@@ -60,8 +60,8 @@ import {
|
|
|
60
60
|
// package.json
|
|
61
61
|
var package_default = {
|
|
62
62
|
name: "@smwb/onreel-git-mcp",
|
|
63
|
-
version: "0.
|
|
64
|
-
description: "\u0411\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430 \u043C\u043E\u0434\u0443\u043B\u0435\u0439, \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u0438\u0437 onreel: git-\u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0435 \u043F\u0443\u0442\u0438, \u0441\u043F\u0438\u0441\u043E\u043A \u0444\u0430\u0439\u043B\u043E\u0432 worktree, \u0436\u0438\u0437\u043D\u0435\u043D\u043D\u044B\u0439 \u0446\u0438\u043A\u043B worktree \u043F\u0440\u043E\u0442\u0438\u0432 \u043F\u043E\u0440\u0442\u0430 WorktreeStore, \u0430\u0434\u0430\u043F\u0442\u0435\u0440\u044B \u0442\u0440\u0435\u043A\u0435\u0440\u043E\u0432 GitHub/GitLab/Jira/SourceCraft/\u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0438 MCP-\u0441\u0435\u0440\u0432\u0435\u0440 \u043D\u0430 stdio",
|
|
63
|
+
version: "0.14.0",
|
|
64
|
+
description: "\u0411\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430 \u043C\u043E\u0434\u0443\u043B\u0435\u0439, \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u0438\u0437 onreel: git-\u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0435 \u043F\u0443\u0442\u0438, \u0441\u043F\u0438\u0441\u043E\u043A \u0444\u0430\u0439\u043B\u043E\u0432 worktree, \u0436\u0438\u0437\u043D\u0435\u043D\u043D\u044B\u0439 \u0446\u0438\u043A\u043B worktree \u043F\u0440\u043E\u0442\u0438\u0432 \u043F\u043E\u0440\u0442\u0430 WorktreeStore, \u0430\u0434\u0430\u043F\u0442\u0435\u0440\u044B \u0442\u0440\u0435\u043A\u0435\u0440\u043E\u0432 GitHub/GitLab/Jira/SourceCraft/GitVerse/\u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0438 MCP-\u0441\u0435\u0440\u0432\u0435\u0440 \u043D\u0430 stdio",
|
|
65
65
|
keywords: [
|
|
66
66
|
"git",
|
|
67
67
|
"worktree",
|
|
@@ -71,6 +71,7 @@ var package_default = {
|
|
|
71
71
|
"gitlab",
|
|
72
72
|
"jira",
|
|
73
73
|
"sourcecraft",
|
|
74
|
+
"gitverse",
|
|
74
75
|
"onreel",
|
|
75
76
|
"typescript"
|
|
76
77
|
],
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/index.ts"],"sourcesContent":["{\n \"name\": \"@smwb/onreel-git-mcp\",\n \"version\": \"0.
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/index.ts"],"sourcesContent":["{\n \"name\": \"@smwb/onreel-git-mcp\",\n \"version\": \"0.14.0\",\n \"description\": \"Библиотека модулей, выделенных из onreel: git-операции и безопасные пути, список файлов worktree, жизненный цикл worktree против порта WorktreeStore, адаптеры трекеров GitHub/GitLab/Jira/SourceCraft/GitVerse/локального и MCP-сервер на stdio\",\n \"keywords\": [\n \"git\",\n \"worktree\",\n \"mcp\",\n \"issue-tracker\",\n \"github\",\n \"gitlab\",\n \"jira\",\n \"sourcecraft\",\n \"gitverse\",\n \"onreel\",\n \"typescript\"\n ],\n \"type\": \"module\",\n \"engines\": {\n \"node\": \">=24\"\n },\n \"files\": [\n \"dist\"\n ],\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://git.sourcecraft.dev/elfenmail/onreel-git-mcp.git\"\n },\n \"homepage\": \"https://git.sourcecraft.dev/elfenmail/onreel-git-mcp\",\n \"license\": \"MIT\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./git\": {\n \"types\": \"./dist/git/index.d.ts\",\n \"import\": \"./dist/git/index.js\",\n \"default\": \"./dist/git/index.js\"\n },\n \"./files\": {\n \"types\": \"./dist/files/index.d.ts\",\n \"import\": \"./dist/files/index.js\",\n \"default\": \"./dist/files/index.js\"\n },\n \"./worktree\": {\n \"types\": \"./dist/worktree/index.d.ts\",\n \"import\": \"./dist/worktree/index.js\",\n \"default\": \"./dist/worktree/index.js\"\n },\n \"./tracker\": {\n \"types\": \"./dist/tracker/index.d.ts\",\n \"import\": \"./dist/tracker/index.js\",\n \"default\": \"./dist/tracker/index.js\"\n },\n \"./mcp\": {\n \"types\": \"./dist/mcp/index.d.ts\",\n \"import\": \"./dist/mcp/index.js\",\n \"default\": \"./dist/mcp/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"build\": \"tsup && tsc -p tsconfig.build.json\",\n \"typecheck\": \"tsc -p tsconfig.json && tsc -p tsconfig.examples.json\",\n \"lint\": \"oxlint --type-aware\",\n \"test\": \"node --test \\\"test/**/*.test.ts\\\"\",\n \"changeset\": \"changeset\",\n \"version\": \"changeset version\",\n \"release\": \"npm run build && changeset publish\"\n },\n \"dependencies\": {\n \"yaml\": \"^2.9.1\",\n \"zod\": \"^4.6.5\"\n },\n \"devDependencies\": {\n \"@changesets/cli\": \"2.29.2\",\n \"@types/node\": \"24.19.1\",\n \"oxlint\": \"1.87.0\",\n \"oxlint-tsgolint\": \"7.0.2003\",\n \"tsup\": \"8.5.1\",\n \"typescript\": \"7.0.2\"\n }\n}\n","// Корневой подпуть пакета @smwb/onreel-git-mcp: срез контракта (константы, схемы, типы, чистые\n// функции) и версия пакета. Всё без побочных эффектов при импорте (R-001). Швы ядра\n// (SecretSink, WorktreeStore, LocalIssueStore) и модули git/files/worktree/tracker/mcp\n// экспортируют свои подпути — см. exports в package.json и README.\nimport pkg from '../package.json' with { type: 'json' };\n\nexport * from './contract/contract.const.ts';\nexport * from './contract/contract.schema.ts';\nexport * from './contract/contract.types.ts';\nexport * from './contract/contract.lib.ts';\n\n// Версия пакета — из version в package.json: статический импорт JSON, его значение tsup подставляет\n// в бандл на сборке, поэтому VERSION не расходится с релизом changesets (тот правит только version).\nexport const VERSION: string = pkg.version;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,MAAQ;AAAA,EACR,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,OAAS;AAAA,IACP;AAAA,EACF;AAAA,EACA,aAAe;AAAA,EACf,eAAiB;AAAA,IACf,QAAU;AAAA,IACV,UAAY;AAAA,EACd;AAAA,EACA,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,UAAY;AAAA,EACZ,SAAW;AAAA,EACX,SAAW;AAAA,IACT,KAAK;AAAA,MACH,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,SAAS;AAAA,MACP,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,WAAW;AAAA,MACT,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,cAAc;AAAA,MACZ,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,aAAa;AAAA,MACX,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,SAAS;AAAA,MACP,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,kBAAkB;AAAA,EACpB;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,WAAa;AAAA,IACb,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,WAAa;AAAA,IACb,SAAW;AAAA,IACX,SAAW;AAAA,EACb;AAAA,EACA,cAAgB;AAAA,IACd,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,iBAAmB;AAAA,IACjB,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,QAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,MAAQ;AAAA,IACR,YAAc;AAAA,EAChB;AACF;;;AC5EO,IAAM,UAAkB,gBAAI;","names":[]}
|
|
@@ -7,4 +7,4 @@ export declare const TRACKER_CONFIG_YAML_ALIAS_MAX = 100;
|
|
|
7
7
|
/** Предел вложенности объектов и списков конфига. */
|
|
8
8
|
export declare const TRACKER_CONFIG_DEPTH_MAX = 16;
|
|
9
9
|
/** Виды встроенных трекеров библиотеки: конфиг их не занимает. */
|
|
10
|
-
export declare const BUILTIN_TRACKER_KINDS: readonly ['local', 'sourcecraft', 'github', 'gitlab', 'jira'];
|
|
10
|
+
export declare const BUILTIN_TRACKER_KINDS: readonly ['local', 'sourcecraft', 'github', 'gitlab', 'jira', 'gitverse'];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** API облачного GitVerse по умолчанию; у on-prem — url подключения. */
|
|
2
|
+
export declare const GITVERSE_API = "https://api.gitverse.ru";
|
|
3
|
+
/** Веб-интерфейс облачного GitVerse: ссылки на задачи, PR и репозиторий строятся от него только без url подключения. */
|
|
4
|
+
export declare const GITVERSE_WEB = "https://gitverse.ru";
|
|
5
|
+
/** accept REST GitVerse: без него и с application/json API отвечает 415. */
|
|
6
|
+
export declare const GITVERSE_ACCEPT = "application/vnd.gitverse.object+json;version=1";
|
|
7
|
+
/** Хосты remote git, которые относятся к трекеру gitverse: по ним самостоятельный MCP-сервер выберет провайдера. */
|
|
8
|
+
export declare const GITVERSE_REMOTE_HOSTS: readonly string[];
|
|
9
|
+
/** Переменная окружения с токеном GitVerse для самостоятельного MCP-сервера. */
|
|
10
|
+
export declare const GITVERSE_TOKEN_ENV = "GITVERSE_TOKEN";
|
|
@@ -10,3 +10,24 @@ export declare function requestJson(url: string, request: JsonRequest): Promise<
|
|
|
10
10
|
export declare function requestText(url: string, request: TextRequest): Promise<TextResponse>;
|
|
11
11
|
/** Базовый адрес без хвостовых слэшей; не http и не https — отказ подключения. */
|
|
12
12
|
export declare function baseUrl(value: string | undefined, fallback: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Номер следующей страницы из заголовка Link (rel="next"): из адреса берётся только параметр page, по самому адресу
|
|
15
|
+
* запрос не идёт. Так читаются страницы GitVerse: его Link указывает на другой origin (gitverse.ru/public/api), а
|
|
16
|
+
* адрес вне origin подключения requestJson и requestText отклоняют до сети. Нет rel="next" или номера — undefined.
|
|
17
|
+
*/
|
|
18
|
+
export declare function linkNextPage(link: string | null | undefined): number | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Курсор следующей страницы списка с номерами страниц (GitVerse): номер из Link rel="next" (linkNextPage), иначе по
|
|
21
|
+
* общему числу (x-total-count или поле total ответа) — есть ли элементы за этой страницей, иначе Link без next —
|
|
22
|
+
* последняя страница, иначе полная страница (count не меньше perPage) — возможно, есть следующая. count — сколько
|
|
23
|
+
* элементов вернул трекер, до фильтров на странице.
|
|
24
|
+
*/
|
|
25
|
+
export declare function nextPageCursor(input: {
|
|
26
|
+
headers: Headers;
|
|
27
|
+
page: number;
|
|
28
|
+
perPage: number;
|
|
29
|
+
count: number;
|
|
30
|
+
total?: unknown;
|
|
31
|
+
}): {
|
|
32
|
+
nextCursor?: string;
|
|
33
|
+
};
|
package/dist/tracker/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export * from './ci.lib.ts';
|
|
|
9
9
|
export * from './github-ci.lib.ts';
|
|
10
10
|
export * from './gitlab-ci.lib.ts';
|
|
11
11
|
export * from './sourcecraft-ci.lib.ts';
|
|
12
|
+
export * from './gitverse-ci.lib.ts';
|
|
12
13
|
export * from './registry.lib.ts';
|
|
13
14
|
export * from './builtin.lib.ts';
|
|
14
15
|
export * from './secrets.lib.ts';
|
|
@@ -17,18 +18,22 @@ export * from './github.lib.ts';
|
|
|
17
18
|
export * from './gitlab.lib.ts';
|
|
18
19
|
export * from './jira.lib.ts';
|
|
19
20
|
export * from './sourcecraft.lib.ts';
|
|
21
|
+
export * from './gitverse.const.ts';
|
|
22
|
+
export * from './gitverse.lib.ts';
|
|
20
23
|
export * from './pull.schema.ts';
|
|
21
24
|
export * from './pull.types.ts';
|
|
22
25
|
export * from './pull.lib.ts';
|
|
23
26
|
export * from './github-pull.lib.ts';
|
|
24
27
|
export * from './gitlab-pull.lib.ts';
|
|
25
28
|
export * from './sourcecraft-pull.lib.ts';
|
|
29
|
+
export * from './gitverse-pull.lib.ts';
|
|
26
30
|
export * from './repo.schema.ts';
|
|
27
31
|
export * from './repo.types.ts';
|
|
28
32
|
export * from './repo.lib.ts';
|
|
29
33
|
export * from './github-repo.lib.ts';
|
|
30
34
|
export * from './gitlab-repo.lib.ts';
|
|
31
35
|
export * from './sourcecraft-repo.lib.ts';
|
|
36
|
+
export * from './gitverse-repo.lib.ts';
|
|
32
37
|
export type { ListLocalIssuesInput, LocalCommentRow, LocalIssuePatch, LocalIssueRow, LocalIssueStore, NewLocalIssue, Page, PageInput, WorktreeCleanupFlags, WorktreeCleanupInput, WorktreeStore, WorktreeTx, WorktreeWriteContext, } from '../kernel/store.types.ts';
|
|
33
38
|
export type { SecretSink } from '../kernel/log.types.ts';
|
|
34
39
|
export { setSecretSink } from '../kernel/redact.lib.ts';
|