main.go 是 CLI 入口。cmd/ 存放 Cobra 命令,如 init、pack、update、validate、config。核心实现位于 internal/:generator/ 负责生成 .kontext 元数据,packer/ 负责组装 Prompt 文档,updater/ 负责刷新生成物,schema/ 负责 YAML 结构校验,llm/ 负责封装 OpenAI 兼容客户端。templates/ 保存嵌入式模板,docs/ 保存设计文档。dist/ 和 .kontext/ 视为生成产物。
请使用 Go 1.24.2 或更高版本。
go run . init --scan:在当前仓库中本地运行 CLI。go build -o dist/kontext .:构建当前平台二进制到dist/。go test ./...:运行全部测试。task build:通过Taskfile.yml构建当前平台版本。task build:all:交叉构建 Darwin、Linux、Windows 发布产物。
遵循标准 Go 格式化,使用 gofmt 或 go fmt ./... 处理缩进和空白。包名保持小写,导出标识符使用 PascalCase,内部辅助函数使用 camelCase。新增 Cobra 命令文件时,沿用现有 cmd/<command>.go 命名模式。修改面向用户的文本时,保持结构化 slog 日志风格,并确保中英双语帮助文案一致。
测试使用 Go 内置 testing 包,并与源码并列放在 *_test.go 中。优先编写小而聚焦的单元测试,参考 internal/packer 与 internal/schema 中已有用例。凡是涉及 YAML 校验、Prompt 组装、文件筛选逻辑的行为变更,都应同步补充或更新测试。提交 PR 前运行 go test ./...。
提交历史采用 Conventional Commit 风格,例如 feat(cmd/pack.go): ... 或 fix(internal/generator/engine.go): ...,scope 使用受影响的包或文件路径。每次提交应尽量聚焦,并说明用户可感知的变化,而不是只描述重构。PR 应包含简短说明、验证时执行的命令,以及交互式 CLI 流程变更对应的示例输出或截图。匹配 v* 的 tag 会触发发布流程,因此仅在完成测试后再创建发布 tag。
不要提交 .env、API Key,或生成的 .kontext/ 缓存、Prompt、日志文件。LLM 本地配置优先使用环境变量或 ~/.kontext/config.yaml。
本项目使用 Kontext 生成了结构化上下文,存放在 .kontext/ 目录中。开始任务前请先阅读以下制品:
.kontext/PROJECT_MANIFEST.yaml— 项目清单(定位、技术栈、核心流程).kontext/ARCHITECTURE_MAP.yaml— 架构分层与模块归属.kontext/CONVENTIONS.yaml— 编码规范与约束.kontext/module_contracts/— 各模块的职责边界与接口契约
请基于这些上下文理解项目结构后再进行开发。