oryxos-init · git:20260630.bf2f1ff · 2026-06-30 · sha256 17ed28dae29a8174

oryxos-init git:20260630.bf2f1ffA

Immutable. This exact content is served forever at /api/v1/blob/17ed28dae29a8174.

---
name: oryxos-init
description: >-
  初始化 OryxOS(或同类 JDK 21 + Spring Boot 3.x 企业级单体)的工程地基:Maven 多模块骨架、
  结构化日志、Actuator + Prometheus 监控、Spring MVC + 虚拟线程、springdoc OpenAPI、
  统一响应体与全局异常/错误码、Google 格式 + 阿里编码规约(Spotless + 阿里 P3C + Checkstyle)、
  代码安全检查(SpotBugs + Find Security Bugs + PMD + OWASP Dependency-Check),以及 CI 与 pre-commit。
  当用户要「初始化项目 / 搭工程骨架 / 起脚手架 / 加日志监控 / 加开发规范 / 加代码安全检查」时使用。
---

# OryxOS 项目初始化 Skill

把"工程地基"一次性、标准化地装好——业务逻辑(五大核心能力)不在本 skill 范围内。

## 什么时候用

- 新建 OryxOS 仓库、或给空仓库起工程骨架时
- 要给项目补齐日志 / 监控 / API 规范 / 开发规范 / 安全检查时
- 任何 JDK 21 + Spring Boot 3.x 的企业级单体,想一次到位地装好工程地基时

## 不做什么(边界)

- 不实现五大核心能力(Provider / ReAct / Memory / Tool / Web)——那是业务模块,走 Spec-Kit 的 user story 拆解
- 不硬编码任何密钥 / token / API key——一律用环境变量占位(`${ENV_VAR}`)
- 不替换已存在的业务代码;只新增基础设施与配置

## 前置约定(来自 OryxOS constitution)

实施前确认这些硬约束,写进配置:
- JDK 21、Spring Boot 3.x、Maven 多模块、单二进制(fat JAR)部署
- HTTP 层用 Spring MVC + Java 21 虚拟线程(不引入响应式)
- 持久化 SQLite + Spring Data JPA;长期记忆走 MEMORY.md(本 skill 只配数据源,不建业务表)
- 审计表 `tool_invocations` / `llm_calls` 的建表脚本预留位(day one 落库)
- 代码必须过 Google 格式 + 阿里编码规约 + 安全扫描,才能合并

---

## 初始化步骤(按顺序执行,每步完成后 `git commit`)

### 0. 确认参数
向用户确认:`groupId`、根 `artifactId`、模块清单(默认 OryxOS 9 模块)、端口(默认 8080)、JDK(21)。

### 1. Maven 多模块骨架
建父 `pom.xml`(packaging=pom,统一版本管理)+ 9 个子模块:
`oryxos-core`、`oryxos-provider`、`oryxos-memory`、`oryxos-tool`、`oryxos-web`、
`oryxos-storage`、`oryxos-boot`、`oryxos-cli`、`oryxos-channel-cli`。
`oryxos-boot` 为启动模块(含 `main`),打 fat JAR。

### 2. 基础依赖与版本管理(父 pom `dependencyManagement` / `pluginManagement`)
固定 Spring Boot BOM、Spring AI Alibaba BOM、SQLite JDBC、Picocli、SnakeYAML、
logstash-logback-encoder、springdoc 等版本。**具体版本号以实施时最新稳定版为准,先锁定再开发。**

### 3. 日志(结构化)
`oryxos-boot/src/main/resources/logback-spring.xml`:
- 开发环境:彩色 console pattern
- 生产环境(profile=prod):JSON 输出(`LogstashEncoder`),带 `traceId`(MDC)
- 统一通过 SLF4J 打日志,禁止 `System.out`

### 4. 监控(Actuator + Micrometer + Prometheus)
依赖:`spring-boot-starter-actuator`、`micrometer-registry-prometheus`。
`application.yaml`:
```yaml
management:
  endpoints.web.exposure.include: health,info,prometheus,metrics
  endpoint.health.probes.enabled: true
  metrics.tags.application: oryxos
```
暴露 `/actuator/health`、`/actuator/info`、`/actuator/prometheus`。

### 5. HTTP Server(Spring MVC + 虚拟线程)
依赖:`spring-boot-starter-web`。`application.yaml`:
```yaml
server.port: 8080
spring.threads.virtual.enabled: true   # JDK 21 虚拟线程,单机扛高并发
```

### 6. API 规范(OpenAPI + 统一响应 / 错误码)
- 依赖:`springdoc-openapi-starter-webmvc-ui`(Swagger UI 在 `/swagger-ui.html`,spec 在 `/v3/api-docs`)
- 在 `oryxos-web` 建:
  - `ApiResponse<T>`:统一响应体(`code` / `message` / `data` / `timestamp`)
  - `GlobalExceptionHandler`(`@RestControllerAdvice`):异常 → 标准 JSON 错误(`errorCode` / `message` / `timestamp`),覆盖 400 / 404 / 500 / 503
  - REST 约定:资源名词复数、`/api/v1` 前缀、合理 HTTP 状态码

### 7. 开发规范(Google 格式 + 阿里编码规约,两层互补)

职责分开,互不冲突:
- **格式层 — Google**:Spotless + google-java-format,管缩进、import 顺序、空白、换行——`apply` 一键自动修。
- **编码规约层 — 阿里巴巴 Java 开发手册**:通过 **P3C(p3c-pmd ruleset)** 落地,管命名、并发、异常处理、集合、OOP、日志、SQL 等"怎么写才对"的规约。
- **兜底 — Checkstyle**(`google_checks.xml`)+ 根目录 `.editorconfig`。

**格式:Spotless + google-java-format**
```xml
<plugin>
  <groupId>com.diffplug.spotless</groupId>
  <artifactId>spotless-maven-plugin</artifactId>
  <version>${spotless.version}</version>
  <configuration>
    <java>
      <googleJavaFormat><style>GOOGLE</style></googleJavaFormat>
      <removeUnusedImports/>
      <importOrder/>
    </java>
  </configuration>
  <executions><execution><goals><goal>check</goal></goals></execution></executions>
</plugin>
```

**编码规约:阿里 P3C(挂在 PMD 上)**
```xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-pmd-plugin</artifactId>
  <version>${pmd.version}</version>
  <configuration>
    <rulesets>
      <ruleset>rulesets/java/ali-pmd.xml</ruleset>     <!-- 阿里 P3C 规约 -->
      <ruleset>rulesets/java/ali-concurrent.xml</ruleset>
      <ruleset>rulesets/java/ali-exception.xml</ruleset>
    </rulesets>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>com.alibaba.p3c</groupId>
      <artifactId>p3c-pmd</artifactId>
      <version>${p3c.version}</version>
    </dependency>
  </dependencies>
  <executions><execution><goals><goal>check</goal></goals></execution></executions>
</plugin>
```

> 分工原则:**Google 管「长什么样」(格式),阿里管「怎么写才对」(规约)**,两者职责不同、可并存。
> 若个别风格规则冲突,以 google-java-format 为准(因为它能自动修,省争论)。开发者本地可装
> 「阿里巴巴 Java 编码规约」IDEA/VS Code 插件,写代码时即时提示。

### 8. 代码安全检查
父 pom 加四件套:
- **SpotBugs** + **Find Security Bugs**(findsecbugs 插件,覆盖 OWASP Top 10:SQL 注入、XSS、路径穿越、弱加密、XXE、不安全反序列化等)
- **PMD**(源码层规则)
- **OWASP Dependency-Check**(`dependency-check-maven`,扫第三方依赖已知 CVE,设 `failBuildOnCVSS`)

```xml
<plugin>
  <groupId>com.github.spotbugs</groupId>
  <artifactId>spotbugs-maven-plugin</artifactId>
  <version>${spotbugs.version}</version>
  <configuration>
    <effort>Max</effort><threshold>Low</threshold>
    <plugins><plugin>
      <groupId>com.h3xstream.findsecbugs</groupId>
      <artifactId>findsecbugs-plugin</artifactId>
      <version>${findsecbugs.version}</version>
    </plugin></plugins>
  </configuration>
</plugin>
```

### 9. CI + pre-commit
- **pre-commit**(本地):提交前跑 `mvn spotless:check`(或 `spotless:apply`)+ 快速 SpotBugs
- **CI**(GitHub Actions):`mvn verify` 串起 spotless:check → checkstyle → spotbugs → pmd → dependency-check;任一不过则红,禁止合并

### 10. 验证
- `mvn clean verify` 全绿
- `mvn -pl oryxos-boot spring-boot:run` 起得来
- 访问 `/actuator/health`(UP)、`/actuator/prometheus`(有指标)、`/swagger-ui.html`(能打开)
- 故意写一行不规范代码 → `spotless:check` 报错;故意引一个有 CVE 的旧依赖 → depcheck 报警

---

## 检查清单(Definition of Done)

- [ ] 9 个 Maven 模块骨架建好,`mvn clean package` 出 fat JAR
- [ ] 结构化日志(prod 为 JSON,含 traceId),无 `System.out`
- [ ] `/actuator/health` `/info` `/prometheus` 可访问
- [ ] 虚拟线程开启(`spring.threads.virtual.enabled=true`)
- [ ] springdoc:`/swagger-ui.html` 可打开,统一 `ApiResponse` + `GlobalExceptionHandler` 就位
- [ ] Spotless(Google 格式)+ 阿里 P3C(编码规约)+ Checkstyle + `.editorconfig` 全部生效
- [ ] SpotBugs + Find Security Bugs + PMD + OWASP Dependency-Check 接入 `mvn verify`
- [ ] pre-commit + CI 跑通,任一检查失败即阻断
- [ ] 敏感配置全用 `${ENV_VAR}` 占位,无明文密钥

---

## 与 constitution / Spec-Kit 的分工

- **本 skill**:把上面这套工程地基"装上"(一次性、可复用、跨模块)
- **constitution**:把硬约束"钉死"(JDK 21、Google 规范、必须过安全扫描、Spring AI 只用一半…),让 AI 每次都遵守
- **CI + pre-commit**:把检查"强制执行"(机器把关,不靠人自觉)
- **Spec-Kit user story**:地基起好后,再按五大核心能力逐个开发

> 版本号、插件坐标、`google_checks.xml` 路径等以实施时官方文档为准;本 skill 给的是流程与配置骨架,不锁死具体版本。