Ctrl K
ComunidadGuías…

AGENTS.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Repository Engineering Standards

This file applies to the whole AImanager repository. For work under `apps/`,
also read `apps/AGENTS.md`; that file contains the more specific frontend and
Tauri rules.

## 1. Project Shape
- `apps/`: Next.js frontend plus the Tauri desktop shell.
- `apps/src/`: App Router UI, components, hooks, API clients, runtime helpers,
  i18n, and Zustand state.
- `apps/src-tauri/`: Tauri v2 application shell, desktop lifecycle, tray/window
  behavior, native commands, and desktop RPC client code.
- `crates/core/`: SQLite migrations, storage primitives, auth helpers, and core
  usage/account data structures.
- `crates/service/`: local HTTP/RPC service, gateway routing, protocol adapters,
  account/API key/usage domains, plugins, app settings, and runtime sync.
- `crates/web/`: service-mode Web UI shell, embedded static UI serving, and
  `/api/runtime` / `/api/rpc` proxy behavior.
- `crates/start/`: service-mode launcher that starts service + web together.
- `labcontext-provider/`: independently installable Python MCP Provider for
  bounded workspace, document, evidence, and experiment access.
- `scripts/`, `docker/`, `.github/`: build, release, probe, container, and CI
  automation.

## 2. Ownership Boundaries
- Keep UI behavior in `apps/src/`, desktop shell behavior in `apps/src-tauri/`,
  and service/gateway behavior in `crates/service/`.
- Put schema and persistence foundation changes in `crates/core/`, especially
  SQLite migrations and reusable storage helpers.
- Avoid expanding central entrypoints with unrelated orchestration. Large files
  should be treated as legacy surfaces; new substantial logic should move into
  focused modules, hooks, or domain helpers.
- Do not mix release/script changes with product behavior unless the task
  explicitly requires it.
- Keep filesystem parsing and Provider MCP behavior in `labcontext-provider/`;
  the Router should route and qualify tools rather than duplicate readers.

## 3. API, RPC, and Command Sync
- Frontend code must call backend capabilities through typed wrappers in
  `apps/src/lib/api/`.
- Desktop IPC should use the centralized `invoke` / `invokeFirst` helpers from
  `@/lib/api/transport`; do not use raw `fetch()` for desktop commands.
- Service commands that require a service address should pass parameters through
  `withAddr()`. App-shell commands such as `app_*`, `open_*`, and window/update
  helpers may omit it when no service address is needed.
- Web/service-mode fallback is allowed only through the existing transport
  stack: `transport.ts`, `transport-web-commands.ts`, `rpc-http.ts`, and
  `fetchWithRetry`.
- When adding or renaming a backend command, keep the chain synchronized:
  Rust implementation, Tauri command registry when applicable, service RPC
  dispatch/Web command mapping when applicable, and the frontend API wrapper.
- Preserve the existing underscore command names and camelCase RPC method
  mapping conventions.

## 4. Settings and Persistence
- New persisted settings need explicit defaults, storage behavior, runtime sync
  behavior, and UI/API exposure.
- Check whether a setting affects desktop mode, service mode, web mode, or all
  three before choosing where to implement it.
- New `CODEXMANAGER_*` environment variables require documentation updates and
  should not bypass existing app settings unless startup-time behavior requires
  an environment-level setting.
- SQLite schema changes belong in `crates/core/migrations/` and should include
  storage-level tests when behavior is non-trivial.

## 5. Frontend and Desktop Rules
- Follow `apps/AGENTS.md` for Next.js, Tailwind, shadcn/Base UI, React Query,
  Zustand, glass theme, static export, and Tauri-specific rules.
- The frontend is statically exported for the desktop shell. Keep routing and
  asset paths compatible with `output: "export"` and `trailingSlash: true`.
- The Web UI must continue to work through `codexmanager-web`; a plain static
  page or ordinary Next dev server is not the complete service-mode runtime.

## 6. Rust Service Rules
- Keep gateway/protocol changes localized under `crates/service/src/gateway/`
  and `crates/service/src/http/` unless shared service state is genuinely needed.
- Protocol adapter changes must consider `/v1/responses`, `/v1/chat/completions`,
  streaming SSE, non-streaming JSON, tools, and `tool_calls`.
- Prefer typed request/response structs and existing storage helpers over ad hoc
  JSON or string manipulation.
- Web access, roles, billing/account mode, and API key ownership are security
  boundaries; do not weaken checks for UI convenience.

## 7. Validation
- Frontend-only changes: run at least `pnpm -C apps run build` and, when runtime
  behavior is touched, `pnpm -C apps run test:runtime`.
- Desktop/static-export changes: run `pnpm -C apps run build:desktop`.
- Rust/service changes: run `cargo test --workspace`, or the narrowest relevant
  package test only when the change is clearly isolated.
- Web shell/transport changes: add `cargo test -p codexmanager-web` and the
  relevant runtime probe scripts when available.
- Gateway/protocol changes require targeted regression coverage for streaming,
  non-streaming, tools, and both supported OpenAI-style endpoints.
- LabContext Provider changes: run
  `python -m pytest -q labcontext-provider/tests`; document readers require
  real HTML/PDF fixtures and must retain path, credential, size, page, timeout,
  and response-budget boundaries.
- If a validation step cannot run in the current environment, record the exact
  command and the reason it was not executed.

## 8. Documentation
- Keep `README.md`, localized docs under `docs/`, and app-level docs aligned
  with user-visible behavior, deployment modes, environment variables, and
  release/build commands.
- Root governance docs describe repository-level boundaries. App-specific
  frontend rules belong in `apps/AGENTS.md`.