# Repository Guidance ## Ownership - `apps/agent-console` owns operator interaction. - `apps/ai-gateway-service` owns gateway runtime and Workbench behavior. - `packages/shared-contracts` owns public protocol types. - `packages/shared-sdk` owns reusable clients and adapters. - `packages/shared-config` owns shared configuration. - `packages/shared-utils` owns implementation-neutral helpers. ## Language and Module Policy - For new changes, `apps/agent-console` and `apps/ai-gateway-service` should prefer TypeScript for runtime behavior and refactors. - `packages/*` should remain TypeScript-first for contracts, SDKs, shared engines, and utility layers. - Tooling scripts under `tools/*.mjs` should remain Node.js ESM JavaScript. - Use JSON for schema and contract payloads, and Markdown for runbooks, evidence, and operator documentation. - Introducing a new runtime language (for example Go or Rust) requires a measured rationale, migration boundary, and compatibility plan in the PR. - For every PR that touches runtime code or scripts, follow [Language Selection Playbook](/docs/language-selection-playbook.md): define the workload, compare alternatives, document why the selected language is the best fit, and capture rollback/compatibility impact. PRs that do not include a `Language Selection` section using the playbook checklist are not considered merge-ready. ## Public Repository Rules - Keep application entrypoints under `apps/`. - Keep reusable contracts, SDKs, configuration, and engines under `packages/`. - Do not add generated phase ledgers, one-off verifier trees, or committed runtime evidence to `master`. - Generated evidence belongs under `apps/ai-gateway-service/evidence/` and is ignored except for its README. - Historical engineering artifacts belong on the archive branch, not in the public product tree. - Do not recreate `legacy/`. ## Safety - Never read, print, or commit provider keys, `.env`, raw webhooks, or private authorization records. - Real provider calls require explicit scoped authorization. - Keep the local fake provider as the credential-free default. - Do not silently modify `/chat`, provider selection, deployment, or release behavior. - Do not claim production readiness, L5 autonomy, or AGI without independent evidence. ## Change Discipline - Keep changes focused, reversible, and consistent with existing ownership. - Do not delete runtime code merely because a filename looks old. - Use structured parsers for JSON and configuration changes. - Preserve user changes in a dirty worktree. ## Required Checks Run these before publishing: ```bash pnpm check pnpm test pnpm check:public pnpm verify:public-clone ``` The public-clone verifier must run without credentials and must leave no service process behind. # Unified AI System 项目执行边界 ## 范围与所有权 - 遵守本文件既有的应用和包所有权;改动放入拥有该行为的最小模块,不创建平行实现或新的历史树。 - 审计发现不等于获准一次性采用整份审计建议。只修复当前目标必需、阻断验收或由本次修改造成的问题;相邻独立问题记录后停止。 - 保留“本地所有应用客户端软件的智能化管理”与模型网关的既有产品边界,不把客户端管理悄然缩减为单纯模型路由。 ## 凭据、Provider 与运行时 - 本地 fake provider 是无凭据默认路径。真实 Provider 调用必须获得本次任务的明确、限定授权,并单独报告调用范围和证据。 - 永不读取、打印、修改或提交 `.env`、`.mcp.json`、真实 Provider Key、OAuth 会话、原始 webhook 或私有授权记录;用户明确提供的临时凭据也不得写入持久化规则、日志或证据目录。 - 不静默改变 `/chat`、Provider 选择、模型路径、原生登录、Base URL、配额、部署或发布行为。 - 分开陈述工作树内容、`HEAD`、`master`、标签、当前运行进程和生产环境;文件存在或本地测试通过不等于运行时已加载、远端已发布或生产已验证。 ## 变更与验证 - 先检查脏工作树并保留用户修改。不得覆盖、回退、暂存、提交或推送与当前目标无关的文件。 - TypeScript 运行时代码、共享契约、SDK 和工具脚本遵守既有语言与模块策略;若触发 Language Selection 要求,补齐所需说明,不以重写语言扩大范围。 - 从直接测试开始,再运行受影响模块和集成测试。触及共享接口、共享依赖、发布路径或准备发布时,执行仓库既定门禁:`pnpm check`、`pnpm test`、`pnpm check:public`、`pnpm verify:public-clone`。 - 不以 fake-provider、合成测试、进程发现或单次 smoke 冒充真实 Provider、跨主机高可用、灾难恢复、生产稳定性、市场采用或行业领先证据。 - 生成的运行证据仅放入既有忽略目录;不向公共产品树添加一次性验证器、阶段账本、原始日志、数据库或凭据材料。 ## 外部操作 - 未经当前用户明确授权,不执行 GitHub 推送、PR 合并、标签、Release、部署、生产修改、真实付费调用、远程配置治理或不可逆数据操作。 - 当目标和项目门禁已满足时立即停止;不自动延伸到全仓重构、基础设施升级、生产投放或下一阶段路线图。 # 项目管理规矩(pm-mcp 自动维护段落,可整体删除但不建议) 本项目由 pm-mcp 管理,状态以 .pm/ 目录为准,禁止凭记忆陈述项目状态。 ## 开工(每次会话第一件事) 1. get_status:了解阶段、里程碑、进行中任务与其 checkpoint 下一步 2. 不清楚的模块先 search_code 定位到 file:line 再读文件,不要全量读代码 3. 陈述本次计划:做哪个任务、动哪些文件、验收标准 ## 做事过程 - 长任务:add_task 时给 steps;上下文快满或中断前 checkpoint 存断点 - 走捷径:立刻 add_task(type=debt) 登记债务,不许无声欠债 - 修 bug:完成后 log_debug 记录症状/根因/修法/验证 - 陈述「某功能在某文件」之前,先 search_code 求证 ## 收工(缺一不可) 1. 完成的任务 update_task 置 done + result_note;feature/fix 补 verification 2. 未完成任务 checkpoint(进展 + 下一步具体动作) 3. 落地的功能 register_feature(入口文件 + 测试文件) 4. log_session 如实记录改动文件清单 ## 每个里程碑节点 snapshot_codebase + audit_structure 对账;audit_security 安全体检;audit_license 许可证审计