Skip to content

feat(auth): import Cockpit Tools accounts through safe adapters - #1357

Draft
agentHits wants to merge 6 commits into
lidge-jun:devfrom
agentHits:feat/cockpit-tools-account-import
Draft

feat(auth): import Cockpit Tools accounts through safe adapters#1357
agentHits wants to merge 6 commits into
lidge-jun:devfrom
agentHits:feat/cockpit-tools-account-import

Conversation

@agentHits

@agentHits agentHits commented Aug 9, 2026

Copy link
Copy Markdown

Summary

  • Add a bounded account-import adapter framework with an explicit v1 allowlist for the proven Cockpit Tools Google Antigravity export.
  • Expose the same safe contract through the management API, file/stdin-only CLI, and localized provider dashboard file picker.
  • Validate refresh, provider-derived identity, claimed-email match, and Cloud Code Assist project before an atomic identity upsert.
  • Apply one request/deadline signal to body ingestion and import, and reconcile live state plus caches when cancellation follows a partial commit.
  • Reconcile the existing PR with the latest upstream/dev through a two-parent bridge commit, preserving the previous PR head for a normal fast-forward update without force-push.
  • Supersede the narrower approach from feat(oauth): support importing Google Antigravity accounts from Cockpit Tools JSON (#1076) #1077 while deliberately excluding Codex/OpenAI and unproven Cockpit formats from v1.

Verification

Exact candidate: 91556e82d6bce0b947f313666e97637d845d21a6.

  • PASS: bun run test — 10,457 pass, 7 platform skips, 0 fail, 49,906 assertions across 650 files.
  • PASS: bun test tests/account-import.test.ts tests/oauth-accounts-api.test.ts tests/bounded-body.test.ts — 44 pass, 185 assertions.
  • PASS: bun run typecheck.
  • PASS: bun run privacy:scan.
  • PASS: cd gui && bun test tests — 721 pass, 3,472 assertions across 129 files.
  • PASS: cd gui && bun run lint and bun run lint:i18n through the pinned ESLint installation.
  • PASS: GUI TypeScript/Vite build.
  • PASS: docs Astro build — 221 pages.
  • PASS: git diff --check.
  • PASS: the previous PR head be0db410b062116aee17adcd1ab2674e6b20485c and current upstream/dev d517161aeaa3a974ad3c0360ff0c97b03b4c4520 are both ancestors of the exact candidate.
  • PASS: exact candidate tree is current upstream/dev plus the 34-path Agent Flow checkpoint 0d7dc559080f2991d2d1ed1e58fcd8f245d704fcf1479ab793aee1048ab3c273.
  • PASS: independent architecture and final review found no blocking code findings for the cancellation/deadline corrections.
  • PASS: independent security review found no P0–P2 findings; one documented P3 residual concerns cancellation after an atomic upsert has already begun.

Dashboard screenshot

Cockpit Tools account import in the Google Antigravity Accounts panel

Security review

This changes OAuth credential admission and persistence and therefore requires explicit maintainer security review before merge. The maintainer-owned maintainer-sponsored label is present on the PR.

Local independent review found no security release blocker. The implementation uses file/stdin-only secret input, exact provider/format admission, bounded parsing, provider-derived identity and project validation before persistence, atomic duplicate upsert, fixed result codes, strict fail-closed API/CLI/GUI projection, request cancellation with a bounded deadline, canary non-leakage tests, and post-write state/cache reconciliation.

Residual P3: cancellation that arrives after the atomic upsert has already started can produce an intentionally ambiguous import_cancelled outcome even though the already-validated credential may have committed. The operation remains identity-idempotent and never persists an unvalidated credential.

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.
  • All CI tests are green on my local testing.

  • I pushed my PR to the latest dev commit.

  • I resolved all correct Codex and CodeRabbit findings.

  • My PR is ready for review.

Что сделано:
- добавлен общий bounded adapter framework импорта с v1 allowlist для Google Antigravity;
- реализованы file/stdin CLI, management API и локализованный GUI file picker;
- добавлены live identity/project validation, атомарный identity upsert и secret-free результаты;
- обновлены документация и негативные тесты для лимитов, persistence и canary-утечек.

Зачем:
- заменить узкий старый PR расширяемым контрактом без привязки CLI/API к одному формату реализации;
- исключить попадание refresh token в argv, ответы, логи и DOM;
- сохранять только проверенные провайдером аккаунты поверх актуального dev.

Результат:
- импорт поддерживает доказанный Cockpit Tools Antigravity JSON через файл или stdin;
- неизвестные провайдеры/форматы fail closed, а Codex/OpenAI не включены в v1;
- GUI проверяет размер файла до чтения и строго валидирует успешный DTO до отображения.

Проверка:
- focused backend/API: 16 pass;
- focused CLI: 1 pass;
- focused GUI: 4 pass, full GUI: 711 pass;
- typecheck, ESLint, GUI/docs builds, privacy scan и diff-check прошли;
- полный bun run test: 10331 pass, 7 skip, 1 fail — нерешённый тест lidge-jun#1007 про piped OAuth login URL; Draft PR не заявляет local CI green.
@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Added Cockpit Tools Antigravity JSON account import through the OAuth API, CLI, and dashboard. The change validates input and responses, refreshes Google identity, persists credentials, updates caches, reports aggregate results, and documents supported usage.

Changes

Antigravity account import

Layer / File(s) Summary
Import contracts and processing
src/oauth/account-import/*, tests/account-import.test.ts
Defines import limits, document parsing, provider resolution, per-record outcomes, aggregate results, and sequential processing.
Credential validation and persistence
src/oauth/google-antigravity.ts, src/oauth/account-import/google-antigravity-adapter.ts, src/oauth/store.ts
Validates Google identity, checks Antigravity credentials and project IDs, then inserts or updates credentials by identity.
OAuth import API
src/server/management/oauth-account-routes.ts, tests/oauth-accounts-api.test.ts
Adds the bounded import endpoint, propagates validation errors, reconciles live state, and clears related caches.
CLI import command
src/cli/account.ts, src/cli/account-extended.ts, tests/cli-account.test.ts
Supports bounded file or stdin input, validates server responses, emits text or JSON results, and rejects invalid source usage.
Dashboard, localization, and documentation
gui/src/components/provider-workspace/ProviderAuthPanel.tsx, gui/src/i18n/*.ts, gui/tests/provider-account-import.test.tsx, docs-site/src/content/docs/**/guides/providers.md
Adds the Google Antigravity file picker, safe result display, localized messages, browser coverage, and provider documentation.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant ProviderAuthPanel
  participant OAuthImportRoute
  participant importAccounts
  participant Google
  participant OAuthStore

  User->>ProviderAuthPanel: Select Cockpit Tools JSON file
  ProviderAuthPanel->>OAuthImportRoute: POST account import document
  OAuthImportRoute->>importAccounts: Validate and process records
  importAccounts->>Google: Refresh token and fetch user identity
  Google-->>importAccounts: Normalized email and credentials
  importAccounts->>OAuthStore: Insert or update credential
  OAuthStore-->>importAccounts: Record outcome
  importAccounts-->>OAuthImportRoute: Aggregate import result
  OAuthImportRoute-->>ProviderAuthPanel: Safe result counts
  ProviderAuthPanel-->>User: Display completion status
Loading

Possibly related PRs

Suggested reviewers: lidge-jun, ingwannu, wibias

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 10.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: importing Cockpit Tools accounts through adapter-based authentication support.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the intake: hygiene-blocked Deterministic PR hygiene checks failed label Aug 9, 2026
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

⚠️ Deterministic hygiene checks failed.

  • unsponsored_surface — This changes an authentication, workflow, release-automation, or dependency surface. MAINTAINERS.md requires security review for these; ask a maintainer to apply maintainer-sponsored once they have reviewed it. Paths: src/oauth/account-import/google-antigravity-adapter.ts, src/oauth/account-import/index.ts, src/oauth/account-import/parser.ts, src/oauth/account-import/registry.ts, src/oauth/account-import/service.ts, src/oauth/account-import/types.ts, src/oauth/google-antigravity.ts, src/oauth/store.ts, src/server/management/oauth-account-routes.ts.

@github-actions github-actions Bot added the enhancement New feature or request label Aug 9, 2026
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • review readiness checklist open (3/4 boxes ticked).

What to do

  • Tick all four boxes in the PR description once you're done (currently 3/4).

Review readiness checklist

  • ✅ All CI tests are green on my local testing.
  • ⬜ I pushed my PR to the latest dev commit.
  • ✅ I resolved all correct Codex and CodeRabbit findings.
  • ✅ My PR is ready for review.

3/4 boxes ticked.

This PR stays in draft until every box above is ticked.

Что сделано:
- добавлен проверенный screenshot панели импорта Google Antigravity без email и токенов.

Зачем:
- политика репозитория требует встроенное визуальное доказательство для изменения интерфейса;
- авторизованная браузерная загрузка GitHub недоступна в текущей среде.

Результат:
- Draft PR может встроить стабильный raw asset из ветки форка без стороннего хостинга.

Проверка:
- screenshot визуально проверен основным агентом, QA и reviewer;
- на изображении нет credential content, email или token-shaped данных.
Что сделано:
- исправлен запуск subprocess-теста через канонический fileURLToPath;
- добавлена строгая fail-closed проверка CLI import-result DTO;
- добавлены негативные fixtures для counts, индексов, status/code и утечки canary.

Зачем:
- закрыть сбой lidge-jun#1007 в worktree-путях со скобками;
- не допустить отображения или нормализации повреждённого ответа API.

Результат:
- валидный импорт остаётся совместимым;
- повреждённый HTTP 200 завершается фиксированной безопасной ошибкой.

Проверка:
- bun run test: 10333 pass, 7 skip, 0 fail;
- bun run typecheck и bun run privacy:scan;
- GUI 711/711, lint/build, docs build;
- focused import/API/CLI 113/113.
@agentHits

Copy link
Copy Markdown
Author

@coderabbitai review

@agentHits

Copy link
Copy Markdown
Author

@lidge-jun @Ingwannu — this PR changes OAuth credential admission and persistence. The exact head 57b13d6 has a green local full suite (10333 pass, 7 skip, 0 fail), privacy/typecheck/API/CLI/GUI/docs gates, and independent boundary review with no product finding. Please perform the maintainer security review and, if the boundary is acceptable, apply the maintainer-sponsored label required by MAINTAINERS.md.

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@gui/src/components/provider-workspace/ProviderAuthPanel.tsx`:
- Around line 219-223: Separate the account refresh call in the import flow
around setImportResult and setImportStatus so a rejection from
authHandlers.onRetryAccounts does not enter the import failure catch. Preserve
the validated result and “complete” status after a successful response, while
handling refresh errors independently; add a regression test covering a valid
import followed by a rejected onRetryAccounts call.

In `@gui/src/i18n/ru.ts`:
- Line 1082: Update the Russian translation value for pws.cockpitImportComplete
so the unsupported count uses the grammatically correct noun phrase
“неподдерживаемых — {unsupported}” instead of “не поддерживается —
{unsupported}”, preserving the other summary labels and placeholders.

In `@src/cli/account-extended.ts`:
- Around line 514-520: Update cmdImport to bound the import POST by creating an
AbortController and scheduling cancellation with the existing import timeout
convention, then pass its signal through apiJson options. Ensure the timer is
cleaned up after the request and preserve the existing status === 0 handling via
proxyUnreachable(); if a configurable importTimeoutMs is introduced, add it to
AccountDeps alongside stdinTimeoutMs.
- Around line 474-491: In cmdImport, parse all option flags—wantsJson,
formatArg, fileArg, and fromStdin—before extracting the positional provider with
args.shift(). Preserve the existing admission validation and error behavior,
ensuring options placed before the provider are consumed as flags rather than
treated as the provider.

In `@src/oauth/account-import/index.ts`:
- Around line 2-6: Export ACCOUNT_IMPORT_MAX_REQUEST_BYTES from the
src/oauth/account-import barrel alongside the existing account-import constants,
then update the management OAuth route import to consume it from
../../oauth/account-import instead of ./types. Preserve other imports and keep
internal-only symbols unexported.

In `@tests/cli-account.test.ts`:
- Around line 1681-1688: Expand the account import tests around the existing
source-selection cases to cover both --file and --stdin, neither source option,
and --file with an empty or missing value, asserting each expected rejection.
Add stdin tests using stdinFrom’s isTTY option for stdin_required and
AccountDeps.stdinTimeoutMs for stdin_timeout. Import and use
ACCOUNT_IMPORT_MAX_BYTES in the oversized-input test instead of duplicating 256
* 1024.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c2c6d6a6-33b2-48c6-aeac-4db8a2365746

📥 Commits

Reviewing files that changed from the base of the PR and between 4f746d1 and 57b13d6.

⛔ Files ignored due to path filters (1)
  • docs-site/public/screenshots/cockpit-account-import.png is excluded by !**/*.png
📒 Files selected for processing (27)
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/ja/guides/providers.md
  • docs-site/src/content/docs/ko/guides/providers.md
  • docs-site/src/content/docs/ru/guides/providers.md
  • docs-site/src/content/docs/zh-cn/guides/providers.md
  • gui/src/components/provider-workspace/ProviderAuthPanel.tsx
  • gui/src/i18n/de.ts
  • gui/src/i18n/en.ts
  • gui/src/i18n/ja.ts
  • gui/src/i18n/ko.ts
  • gui/src/i18n/ru.ts
  • gui/src/i18n/zh.ts
  • gui/tests/provider-account-import.test.tsx
  • src/cli/account-extended.ts
  • src/cli/account.ts
  • src/oauth/account-import/google-antigravity-adapter.ts
  • src/oauth/account-import/index.ts
  • src/oauth/account-import/parser.ts
  • src/oauth/account-import/registry.ts
  • src/oauth/account-import/service.ts
  • src/oauth/account-import/types.ts
  • src/oauth/google-antigravity.ts
  • src/oauth/store.ts
  • src/server/management/oauth-account-routes.ts
  • tests/account-import.test.ts
  • tests/cli-account.test.ts
  • tests/oauth-accounts-api.test.ts

Comment thread gui/src/components/provider-workspace/ProviderAuthPanel.tsx
Comment thread gui/src/i18n/ru.ts Outdated
Comment thread src/cli/account-extended.ts
Comment thread src/cli/account-extended.ts Outdated
Comment thread src/oauth/account-import/index.ts
Comment thread tests/cli-account.test.ts
Что сделано:
- сохранён успешный GUI-результат при сбое обновления списка аккаунтов;
- исправлен порядок CLI-флагов и добавлен ограниченный таймаут import POST;
- восстановлена barrel-граница request-size constant;
- расширены негативные CLI/GUI fixtures и исправлена русская сводка.

Зачем:
- закрыть шесть подтверждённых замечаний CodeRabbit без расширения OAuth-контракта;
- исключить ложный статус ошибки, зависание CLI и непокрытые admission-ветки.

Результат:
- import остаётся fail-closed и secret-safe;
- все подтверждённые review cases покрыты регрессиями.

Проверка:
- bun run test: 10337 pass, 7 skip, 0 fail;
- focused import/API/CLI: 117/117;
- GUI: 712/712, focused 5/5;
- typecheck, privacy, lint, build и diff-check.
@agentHits

Copy link
Copy Markdown
Author

@lidge-jun @Ingwannu — correction to my previous security-review request: the final exact PR head is 4c62216f84cd3d2bd7276b126a4ab4fc35e98d4c.

All six CodeRabbit findings are fixed and resolved. Exact-head local verification is green: the full suite reports 10337 pass, 7 skip, 0 fail, with typecheck, privacy, focused API/CLI/GUI tests, GUI lint/build, and docs build evidence also passing.

Please review the credential/OAuth admission and persistence boundary and, if acceptable, apply the maintainer-owned maintainer-sponsored label required by MAINTAINERS.md. The PR will remain Draft and the final readiness box will remain unchecked until the required exact-head CI is green.

Что сделано:
- объединена существующая ветка PR lidge-jun#1357 со свежим upstream/dev;
- перенесён проверенный v2.11.1 candidate и post-review исправления отмены, DTO и GUI;
- добавлена турецкая локализация и устранено предупреждение React Doctor.

Зачем:
- сохранить историю существующего PR и обновить её обычным fast-forward push без force;
- привязать безопасный импорт credentials к актуальной интеграционной ветке.

Результат:
- двухродительский merge commit сохраняет старый PR head и свежий dev в ancestry;
- итоговый diff содержит ровно 32 проверенных пути.

Проверка:
- runtime: 10434 pass, 7 skip, 0 fail;
- GUI: 721 pass, 0 fail;
- focused backend: 133 pass, 0 fail;
- typecheck, privacy scan, React Doctor, GUI/docs builds и git diff --check: PASS.
@agentHits

Copy link
Copy Markdown
Author

@lidge-jun @Ingwannu @Wibias — updated maintainer security-review request for the current exact candidate.

The branch is now updated to the latest dev without force-push.

Exact candidate: be0db410b062116aee17adcd1ab2674e6b20485c
Latest upstream/dev: ba1df18ac6caeffbdc6e393795113f2e6c504152

Local verification on the candidate tree is complete:

  • Runtime: 10,434 passed, 7 platform skips, 0 failed
  • GUI: 721 passed, 0 failed
  • Focused account-import/API/CLI: 133 passed, 0 failed
  • Typecheck, privacy scan, React Doctor, GUI build, and 221-page docs build passed
  • Independent QA verified byte-for-byte parity with Agent Flow layer fa6c1b4fb83eb4b1e6cdccd6382f77852bafe638091a7b06a2d2fd1468b85f99
  • Independent security review found no P0–P2 findings

This PR changes OAuth credential admission and persistence and therefore requires maintainer security review and the maintainer-owned maintainer-sponsored label.

Could a maintainer please review this exact head and, if the boundary is acceptable, apply maintainer-sponsored? The PR will remain Draft and the final readiness checkbox will remain unchecked until the exact-head GitHub CI is green.

@Wibias Wibias left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes on the current reviewed head be0db410b062116aee17adcd1ab2674e6b20485c.

I found two P2 lifecycle/availability issues in the account-import path:

  1. Cancellation after a partial commit skips post-write reconciliation/cache invalidation. importAccounts() can commit one or more records and then collapse a later abort to { ok: false, status: 408, code: "import_cancelled" }, discarding the already-completed results. The management route returns immediately on !imported.ok, so reconcileLiveStateStores(), model-cache clearing, routed-model inflight clearing, and quota-cache clearing do not run even though auth.json may already have changed. Please preserve an internal changed/committed signal (or conservatively reconcile on import_cancelled) and add a deterministic regression where record 1 commits, record 2 blocks, then the request aborts.

  2. The 10-minute server deadline does not bound request-body ingestion. The route creates a deadline AbortController, but readBoundedJsonRequestBody(req, ...) reads with req.signal; the deadline controller is only passed later to importAccounts(). A slow trickling upload can therefore continue beyond the advertised server deadline. Please let the bounded body reader accept a signal override (or otherwise compose the deadline with req.signal) and ensure a deadline/abort is reported as 408 import_cancelled, not 400 invalid_document. Add a regression for a body read that remains active until the deadline fires.

The broader security design looks solid: exact provider/format admission before credential traversal, bounded input, provider-derived identity/project validation before persistence, atomic identity upsert, and fixed secret-free API/CLI/GUI projections. I did not find a credential leak or unsafe credential-admission path beyond the lifecycle issues above.

@Wibias Wibias added the maintainer-sponsored Maintainer sponsors this change to an auth, workflow, release, or dependency surface label Aug 9, 2026 — with ChatGPT Codex Connector
@github-actions github-actions Bot removed the intake: hygiene-blocked Deterministic PR hygiene checks failed label Aug 9, 2026
Что сделано:
- добавлен ограниченный импорт учётных записей Google Antigravity из экспорта Cockpit Tools через API, CLI и интерфейс;
- отмена и серверный срок теперь охватывают чтение тела и импорт, а частично сохранённые данные согласуются с живым состоянием и кешами;
- добавлены проверки ошибок, отмены, конфиденциальности, локализации и пользовательского интерфейса.

Зачем:
- дать безопасный способ переноса учётных записей без раскрытия токенов и без зависания запроса;
- сохранить корректное состояние после отмены, включая редкий случай уже выполненной записи.

Риски:
- изменения затрагивают OAuth, хранение учётных данных и management API; границы проверены отрицательными сценариями и полным набором тестов.

Проверки:
- команды и результаты будут повторно привязаны к итоговому объединяющему коммиту перед отправкой;
- ограничение: окончательная готовность зависит от новых проверок GitHub CI и повторного maintainer review.
@agentHits

Copy link
Copy Markdown
Author

@Wibias — both requested P2 lifecycle fixes are now included in exact head 91556e82d6bce0b947f313666e97637d845d21a6.

  1. Partial-commit cancellation now carries an internal committed-change signal. The management route reconciles live state and clears model, routed-model, provider-quota, and account-quota caches before returning the fixed secret-free 408 {"code":"import_cancelled"} response.
  2. The same request/deadline AbortSignal now bounds request-body ingestion and account import. A stalled body ends as 408 import_cancelled; completed malformed JSON remains 400 invalid_document.

Deterministic regressions cover same-record and later-record post-commit cancellation, route-level partial commit plus cache invalidation, stalled body cancellation, and malformed JSON classification.

The branch was fast-forwarded without force through a two-parent bridge containing both the prior PR head be0db410b062116aee17adcd1ab2674e6b20485c and current upstream/dev d517161aeaa3a974ad3c0360ff0c97b03b4c4520.

Exact-head local verification:

  • runtime: 10,457 pass, 7 platform skips, 0 fail;
  • focused P2 suite: 44 pass, 0 fail;
  • GUI: 721 pass, 0 fail;
  • typecheck, privacy scan, GUI lint/i18n/build, docs 221-page build, and diff check passed.

Please re-review the resolved P2 findings on this exact head when convenient. The PR remains draft until the new GitHub CI is green.

@agentHits
agentHits requested a review from Wibias August 10, 2026 00:14
@Wibias
Wibias marked this pull request as ready for review August 10, 2026 00:43
@github-actions
github-actions Bot marked this pull request as draft August 10, 2026 00:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request maintainer-sponsored Maintainer sponsors this change to an auth, workflow, release, or dependency surface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants