# AI Support

AI Support 是一个以 support case 协作为核心的 polyglot monorepo。当前真正成型的部分是 `ticket-manager` prototype，以及围绕它的 CLI、agent skills、OpenAPI contract 和 dev 部署资产。

## Repo Layout

- `apps/`
  - 入口应用；当前包含 `apps/cli`
- `services/`
  - 后端服务；当前核心是 `services/ticket-manager`
- `packages/`
  - 共享 contract、SDK 和工具库
- `infra/`
  - Docker、Kustomize 等部署资产
- `scripts/`
  - 开发和测试脚本
- `docs/`
  - 当前状态和 roadmap

## Current Components

- `services/ticket-manager`
  - Jira ingest、Dispatch triage、workspace、Agent Gateway-backed Lark adapter
- `apps/cli`
  - Ticket Manager workspace CLI
- `packages/contracts/ticket-manager`
  - ticket-manager HTTP contract
- `infra/images/agent-codex/project-seeds`
  - Agent Codex 项目级 `triage` / `workspace` skills 和全局 Lark integration skills

## Docs

- [docs/current-state.md](docs/current-state.md)
- [docs/roadmap.md](docs/roadmap.md)

## Quick Start

运行 `ticket-manager`：

```bash
cd services/ticket-manager
go run ./cmd/ticket-manager
```

运行测试：

```bash
cd services/ticket-manager
make test
```

运行 ticket-manager workspace timeline local e2e：

```bash
cd services/ticket-manager
make e2e-workspace-timeline-local E2E_CONFIG_FILE=config.local.yaml
```

底层脚本入口也可以直接从仓库根目录调用：

```bash
bash scripts/test/ticket-manager-e2e.sh \
  --mode local \
  --config-file services/ticket-manager/config.local.yaml \
  workspace-timeline
```

## Release

### Staging

1. 针对要发布的 services，执行

  ```bash
  bash scripts/release/release-staging.sh --service <service-1>,<service-2>
  ```

  其会创建 services 对应的 release 分支 `<service>/release-<version>`。

2. 检查各个 services 对应的 release 分支 `<service>/release-<version>` 正确。

3. 执行下面命令，推送 release 分支。

  ```bash
  bash scripts/release/release-staging.sh --service <service-1>,<service-2> --push
  ```

4. 推送 release 分支会触发对应 service 的 github workflow，查看 github workflow 来检查部署状态。

默认情况下，脚本会从 `origin/main` 计算出最新的 version，你也可以通过 `--version` 参数指定 version。

默认情况下脚本不会执行 `git push`，只有传了 `--push` 才会把分支推送到 `origin`。

### Prod

1. 针对要发布的 services，执行

  ```bash
  bash scripts/release/release-prod.sh --service <service-1>,<service-2>
  ```

  其会计算 services 对应的 prod tag `<service>/v<version>`。

1. 检查各个 services 对应的 prod tag `<service>/v<version>` 正确。

2. 执行下面命令，推送 prod tag，并创建对应的 GitHub Release。

  ```bash
  bash scripts/release/release-prod.sh --service <service-1>,<service-2> --push
  ```

4. 推送 prod tag 会触发对应 service 的 github workflow，查看 github workflow 来检查部署状态。

默认情况下，脚本会从 release 分支 `<service>/release-<major.minor>` 计算出最新的 version，你也可以通过 `--version` 参数指定 version。

默认情况下脚本不会执行 `git push` 或创建 GitHub Release，只有传了 `--push` 才会把 tag 推送到 `origin`，并使用 tag 作为 title 创建 release notes 为空的 GitHub Release。
