@hi-man/himan 0.1.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nvmrc +1 -0
- package/CHANGELOG.md +65 -0
- package/README.md +75 -66
- package/dist/adapters/git/repo-manager.js +41 -6
- package/dist/adapters/resource/resource-scanner.js +3 -1
- package/dist/adapters/source/git-source-adapter.js +103 -17
- package/dist/bin/himan-project.js +7 -0
- package/dist/bin/himan-resource.js +7 -0
- package/dist/bin/himan-source.js +7 -0
- package/dist/bin/himan.js +7 -0
- package/dist/{index.js → bin/shared.js} +3 -5
- package/dist/cli/agent-commands.js +93 -0
- package/dist/cli/builders.js +72 -0
- package/dist/cli/index.js +3 -318
- package/dist/cli/project-commands.js +127 -0
- package/dist/cli/resource-commands.js +104 -0
- package/dist/cli/shared.js +69 -0
- package/dist/cli/source-commands.js +58 -0
- package/dist/services/index.js +261 -70
- package/dist/state/index-cache-store.js +4 -3
- package/dist/state/project-config-store.js +43 -0
- package/dist/state/project-lock-store.js +4 -0
- package/dist/state/state-store.js +5 -1
- package/dist/utils/agent-configs.js +71 -0
- package/dist/utils/errors.js +2 -0
- package/dist/{version.js → utils/version.js} +1 -1
- package/docs/development.md +83 -0
- package/docs/error-codes.md +132 -0
- package/docs/mvp/README.md +143 -0
- package/docs/mvp/create-resource.md +129 -0
- package/docs/mvp/impl.md +111 -0
- package/package.json +31 -7
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Development
|
|
2
|
+
|
|
3
|
+
本文面向 `himan` 仓库开发者和 npm 包维护者。用户安装和使用 CLI 请优先阅读 [README.md](../README.md)。
|
|
4
|
+
|
|
5
|
+
## 环境要求
|
|
6
|
+
|
|
7
|
+
- Node.js 22.x;本仓库开发环境由 [.nvmrc](../.nvmrc) 固定为 `22.22.1`。
|
|
8
|
+
- pnpm 10.32.1;包管理器版本由 [package.json](../package.json) 固定。
|
|
9
|
+
- Git;测试和发布流程会使用本地 Git。
|
|
10
|
+
|
|
11
|
+
## 本地源码开发
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pnpm install
|
|
15
|
+
pnpm run build
|
|
16
|
+
pnpm run dev -- --help
|
|
17
|
+
node dist/bin/himan.js --help
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 开发与测试
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pnpm test
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
常用脚本:
|
|
27
|
+
|
|
28
|
+
| 命令 | 作用 |
|
|
29
|
+
|------|------|
|
|
30
|
+
| `pnpm run clean` | 删除 `dist/` |
|
|
31
|
+
| `pnpm run build` | 清理并编译 TypeScript 到 `dist/` |
|
|
32
|
+
| `pnpm run typecheck` | 运行 TypeScript 类型检查,不输出文件 |
|
|
33
|
+
| `pnpm test` | 运行 Vitest 一次 |
|
|
34
|
+
| `pnpm run verify` | 依次运行 typecheck、test、build |
|
|
35
|
+
|
|
36
|
+
## 发布 npm 包(维护者)
|
|
37
|
+
|
|
38
|
+
### 流程概览
|
|
39
|
+
|
|
40
|
+
1. **在分支上完成开发与合并前检查**
|
|
41
|
+
本地可执行 `pnpm run verify`(类型检查、单测、`build`),确认通过后再提 PR。PR 会自动运行同一组核心校验。
|
|
42
|
+
|
|
43
|
+
2. **更新 `package.json` 中的 `version` 与 `CHANGELOG.md`**
|
|
44
|
+
npm 不允许重复发布同一版本号。合并进 `master` 前,在 PR 里把版本改成 registry 上尚未存在的号,并把用户可见变更记录到 [CHANGELOG.md](../CHANGELOG.md)。
|
|
45
|
+
- 手动改 `version` 字段,或
|
|
46
|
+
- 在分支上执行其一(只改版本号,**不会**发包):`pnpm run version:patch` / `version:minor` / `version:major`(使用 `npm version … --no-git-tag-version`,需自行 `git add` / `commit` 版本变更)。
|
|
47
|
+
Git 标签约定:与 `version` 对应、带前缀 **`v`**(如 `1.2.0` → 标签 `v1.2.0`)。
|
|
48
|
+
|
|
49
|
+
3. **合并到 `master`**
|
|
50
|
+
推送合并后的 `master` 会触发 GitHub Actions 工作流 [`.github/workflows/publish-npm.yml`](https://github.com/himan-group/himan/blob/master/.github/workflows/publish-npm.yml):安装依赖后执行 **`pnpm run release`**(即再次 `verify` + `npm publish`)。
|
|
51
|
+
npm 发布认证使用 **Trusted Publishing**,不使用长期 `NPM_TOKEN`。需在 npmjs.com 的 `@hi-man/himan` 包设置中添加 Trusted Publisher:
|
|
52
|
+
- Provider: GitHub Actions
|
|
53
|
+
- Organization or user: `himan-group`
|
|
54
|
+
- Repository: `himan`
|
|
55
|
+
- Workflow filename: `publish-npm.yml`
|
|
56
|
+
workflow 已授予 OIDC 所需的 `id-token: write` 权限,并在发布前升级 npm CLI 到支持 Trusted Publishing 的版本。
|
|
57
|
+
|
|
58
|
+
4. **手动从 CI 再发一次(可选)**
|
|
59
|
+
在 GitHub **Actions → Publish to npm → Run workflow** 可手动运行同一流程(例如在修复密钥后重试)。
|
|
60
|
+
|
|
61
|
+
### 本地命令(与 CI 中的 `pnpm run release` 一致)
|
|
62
|
+
|
|
63
|
+
| 命令 | 作用 |
|
|
64
|
+
|------|------|
|
|
65
|
+
| `pnpm run verify` | 仅检查(类型 / 测试 / 构建) |
|
|
66
|
+
| `pnpm run release:dry` | 检查 + `npm publish --dry-run`(演练,不上传) |
|
|
67
|
+
| `pnpm run release:test` | 检查 + 将版本打成 `*-test.*` 预发布号并发布到 **`@test` 标签** |
|
|
68
|
+
| `pnpm run release` | 检查 + 发布 **latest**(维护者本地发包时用;**请写 `pnpm run release`**,勿用裸命令 `pnpm publish`,二者不是同一套流程) |
|
|
69
|
+
| `pnpm run version:patch` / `version:minor` / `version:major` | 仅提升 `package.json` 版本号,不发包 |
|
|
70
|
+
|
|
71
|
+
发测试标签后,安装示例:`npm i @hi-man/himan@test`。
|
|
72
|
+
|
|
73
|
+
### CI:PR 校验、发布与合并后打 Git 标签
|
|
74
|
+
|
|
75
|
+
| 工作流 | 文件 | 说明 |
|
|
76
|
+
|--------|------|------|
|
|
77
|
+
| **PR verify** | [`.github/workflows/pr-verify.yml`](https://github.com/himan-group/himan/blob/master/.github/workflows/pr-verify.yml) | 目标分支为 `master` 的 PR:安装依赖后依次运行 `pnpm run typecheck`、`pnpm run test`、`pnpm run build`。 |
|
|
78
|
+
| **PR version tag check** | [`.github/workflows/pr-master-version-tag.yml`](https://github.com/himan-group/himan/blob/master/.github/workflows/pr-master-version-tag.yml) | 目标分支为 `master` 的 PR:读取 **PR 头提交**上的 `package.json` 的 `version`,若远端已存在同名标签 **`v{version}`**,则 **检查失败**(用于在合并前拦截重复版本)。 |
|
|
79
|
+
| **Tag version on master** | [`.github/workflows/push-master-version-tag.yml`](https://github.com/himan-group/himan/blob/master/.github/workflows/push-master-version-tag.yml) | 向 `master` **推送**后(含合并 PR):在 **当前推送提交**上创建并推送注释标签 **`v{version}`**。若标签已存在、创建或 `git push` 失败,仅输出 **告警**(`::warning::`),**工作流仍成功**,不撤销已发生的 merge;请按日志提示在本机补打标签并 `git push origin v{x.y.z}`。 |
|
|
80
|
+
|
|
81
|
+
**启用「合并前拦截」**:在 GitHub **Settings → Branches** 中为 `master` 配置分支保护,勾选 **Require status checks to pass before merging**,并勾选必选检查 **`PR verify / verify`** 和 **`PR version tag check / version-tag-available`**(名称以仓库里 Actions 界面为准)。
|
|
82
|
+
|
|
83
|
+
说明:来自 fork 的 PR 同样会跑上述 PR 检查;打标签工作流需要 **Actions 对仓库有写权限**(工作流内已设 `contents: write`)。若组织策略禁止 `GITHUB_TOKEN` 写标签,推送标签会失败,需按告警手动推送。
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# himan 错误码说明
|
|
2
|
+
|
|
3
|
+
本文档面向 CLI 使用者与自动化脚本维护者,说明 `himan` 的错误码、典型触发场景和建议处理方式。
|
|
4
|
+
|
|
5
|
+
## `--json` 错误输出格式
|
|
6
|
+
|
|
7
|
+
当命令带 `--json` 且执行失败时,CLI 会输出结构化错误(输出到 `stderr`)。
|
|
8
|
+
该规则同时覆盖:
|
|
9
|
+
|
|
10
|
+
- 命令执行业务错误(如资源不存在)
|
|
11
|
+
- 参数/命令解析错误(如缺参数、未知命令)
|
|
12
|
+
|
|
13
|
+
输出格式:
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"ok": false,
|
|
18
|
+
"error": {
|
|
19
|
+
"code": "E_RESOURCE_NOT_FOUND",
|
|
20
|
+
"message": "Resource not found: rule/code-review",
|
|
21
|
+
"details": {
|
|
22
|
+
"key": "value"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
字段说明:
|
|
29
|
+
|
|
30
|
+
- `ok`: 固定为 `false`
|
|
31
|
+
- `error.code`: 稳定错误码,建议脚本优先按此分流
|
|
32
|
+
- `error.message`: 人类可读错误信息
|
|
33
|
+
- `error.details`: 可选,附加上下文
|
|
34
|
+
|
|
35
|
+
## 错误码列表
|
|
36
|
+
|
|
37
|
+
### `E_CONFIG_NOT_FOUND`
|
|
38
|
+
|
|
39
|
+
- **含义**:未找到源配置。
|
|
40
|
+
- **常见触发**:首次使用前直接执行 `list/install/dev/publish`。
|
|
41
|
+
- **建议处理**:先执行 `himan init <git_repo>`,或检查 `~/.himan/config.json` 是否存在。
|
|
42
|
+
|
|
43
|
+
### `E_NOT_IMPLEMENTED`
|
|
44
|
+
|
|
45
|
+
- **含义**:功能已预留但尚未实现。
|
|
46
|
+
- **常见触发**:使用 registry 相关路径。
|
|
47
|
+
- **建议处理**:改用 Git source;关注后续版本计划。
|
|
48
|
+
|
|
49
|
+
### `E_INVALID_INPUT`
|
|
50
|
+
|
|
51
|
+
- **含义**:输入参数不合法。
|
|
52
|
+
- **常见触发**:source 名称不符合 kebab-case、git source 未提供 repo、install mode 不是 `link|copy`、agent 名称不支持等。
|
|
53
|
+
- **建议处理**:按命令帮助修正参数格式。
|
|
54
|
+
|
|
55
|
+
### `E_RESOURCE_NOT_FOUND`
|
|
56
|
+
|
|
57
|
+
- **含义**:资源或来源不存在。
|
|
58
|
+
- **常见触发**:安装不存在的资源、切换到不存在的 source 名称、发布目标资源不存在。
|
|
59
|
+
- **建议处理**:先执行 `himan list <type>` / `himan source list` 确认名称。
|
|
60
|
+
|
|
61
|
+
### `E_VERSION_NOT_FOUND`
|
|
62
|
+
|
|
63
|
+
- **含义**:指定版本不存在。
|
|
64
|
+
- **常见触发**:`install <type> <name@version>` 中版本号不在 tag 历史内。
|
|
65
|
+
- **建议处理**:先执行 `himan history <type> <name>` 查看可用版本。
|
|
66
|
+
|
|
67
|
+
### `E_INSTALL_NOT_FOUND`
|
|
68
|
+
|
|
69
|
+
- **含义**:项目内未找到已安装目标。
|
|
70
|
+
- **常见触发**:未安装直接 `dev`、或手动删除了 `.cursor/*/<name>` 等安装目标。
|
|
71
|
+
- **建议处理**:先重新执行 `himan install <type> <name[@version]>`。
|
|
72
|
+
|
|
73
|
+
### `E_LOCK_NOT_FOUND`
|
|
74
|
+
|
|
75
|
+
- **含义**:未找到 lock 文件,或 lock 中无资源可恢复。
|
|
76
|
+
- **常见触发**:项目未生成 `himan.lock` 就执行 `himan install`(无参数)。
|
|
77
|
+
- **建议处理**:先安装至少一个资源以生成 lock,或检查 `himan.lock` 路径。
|
|
78
|
+
|
|
79
|
+
### `E_LOCK_INVALID`
|
|
80
|
+
|
|
81
|
+
- **含义**:`himan.lock` 存在但格式不合法。
|
|
82
|
+
- **常见触发**:手动编辑导致 JSON 结构损坏、`version/resources` 字段异常。
|
|
83
|
+
- **建议处理**:修复 lock JSON,或删除后重新通过 `install <type> <name[@version]>` 生成。
|
|
84
|
+
|
|
85
|
+
### `E_CLI_USAGE`
|
|
86
|
+
|
|
87
|
+
- **含义**:CLI 参数或命令解析错误(Commander 层)。
|
|
88
|
+
- **常见触发**:缺少必填参数、未知命令、未知选项。
|
|
89
|
+
- **建议处理**:检查命令拼写与参数数量,使用 `himan <command> --help` 查看正确用法。
|
|
90
|
+
- **附加信息**:`error.details.commanderCode` 可用于进一步区分错误类别(如 `commander.missingArgument`)。
|
|
91
|
+
|
|
92
|
+
### `E_RESOURCE_EXISTS`
|
|
93
|
+
|
|
94
|
+
- **含义**:资源已存在,无法重复创建。
|
|
95
|
+
- **常见触发**:重复执行 `create <type> <name>`。
|
|
96
|
+
- **建议处理**:改名,或显式使用 `--force`。
|
|
97
|
+
|
|
98
|
+
### `E_TEMPLATE_NOT_FOUND`
|
|
99
|
+
|
|
100
|
+
- **含义**:模板不存在。
|
|
101
|
+
- **常见触发**:`create` 使用了不支持的模板名。
|
|
102
|
+
- **建议处理**:使用当前支持模板(默认 `basic`)。
|
|
103
|
+
|
|
104
|
+
### `E_INVALID_RESOURCE_NAME`
|
|
105
|
+
|
|
106
|
+
- **含义**:资源名不符合命名规则。
|
|
107
|
+
- **常见触发**:使用非 kebab-case 的名称。
|
|
108
|
+
- **建议处理**:改为 `kebab-case`(如 `code-review`)。
|
|
109
|
+
|
|
110
|
+
### `E_INVALID_RESOURCE_METADATA`
|
|
111
|
+
|
|
112
|
+
- **含义**:资源元数据不合法,无法发布或读取为有效资源。
|
|
113
|
+
- **常见触发**:`publish` 目标缺少 `himan.yaml`,`name/type/entry` 不匹配,或 `entry` 指向的入口文件不存在。
|
|
114
|
+
- **建议处理**:检查资源目录下的 `himan.yaml`,确认 `name`、`type`、`entry` 与命令参数和文件结构一致。
|
|
115
|
+
|
|
116
|
+
### `E_PUBLISH_NO_CHANGES`
|
|
117
|
+
|
|
118
|
+
- **含义**:发布时没有可提交的资源变更。
|
|
119
|
+
- **常见触发**:重复发布已写入相同内容和版本的资源目录。
|
|
120
|
+
- **建议处理**:确认资源内容或元数据已经变更,再重新执行 `publish`。
|
|
121
|
+
|
|
122
|
+
### `E_UNSUPPORTED_RESOURCE_TYPE`
|
|
123
|
+
|
|
124
|
+
- **含义**:资源类型不受支持。
|
|
125
|
+
- **常见触发**:输入了 `rule|command|skill` 之外的类型。
|
|
126
|
+
- **建议处理**:修正类型为 `rule`、`command` 或 `skill`。
|
|
127
|
+
|
|
128
|
+
### `E_UNKNOWN`
|
|
129
|
+
|
|
130
|
+
- **含义**:未映射到业务错误码的通用异常。
|
|
131
|
+
- **常见触发**:程序运行期意外错误、普通 `Error` 抛出。
|
|
132
|
+
- **建议处理**:保留完整命令与错误文本,提交 issue 或定位堆栈来源。
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# himan MVP 功能点与技术设计
|
|
2
|
+
|
|
3
|
+
> 状态说明:本文记录 MVP 设计和当前实现范围的收敛版。当前 CLI 行为以仓库根目录 [README.md](../../README.md) 和 [Codex repo map](../codex/repo-map.md) 为准。
|
|
4
|
+
|
|
5
|
+
## 1. MVP 目标
|
|
6
|
+
|
|
7
|
+
在 1 周内交付一个可实际使用的最小版本,完成资源资产的管理与发布闭环。
|
|
8
|
+
|
|
9
|
+
**当前实现范围:**
|
|
10
|
+
- 默认源模型:Git(`himan init <git_repo>`,本地缓存仓库并写配置);已支持命名 source 的 `add/use/list`,业务命令按当前 default source 生效。
|
|
11
|
+
- 本地 CLI,命令说明见仓库根目录 [README.md](../../README.md)
|
|
12
|
+
- 资源版本以 Git Tag 为准,格式 `<type>/<name>@<semver>`
|
|
13
|
+
- 资源类型能力:
|
|
14
|
+
- `rule`:`create` / `list` / `history` / `install` / `dev` / `publish` / `uninstall`
|
|
15
|
+
- `command`:`create` / `list` / `history` / `install` / `dev` / `publish` / `uninstall`
|
|
16
|
+
- `skill`:`create` / `list` / `history` / `install` / `dev` / `publish` / `uninstall`
|
|
17
|
+
- 远程 Registry 源:仅占位,二期实现
|
|
18
|
+
|
|
19
|
+
**不包含:** 可用 Registry、AI 搜索、PR 自动发布。
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 2. MVP 功能清单
|
|
24
|
+
|
|
25
|
+
### 2.1 `init`
|
|
26
|
+
|
|
27
|
+
- `himan init <git_repo>`
|
|
28
|
+
- 克隆或更新远程仓库到用户目录下的缓存路径,并记录默认源配置。
|
|
29
|
+
|
|
30
|
+
### 2.2 `list`
|
|
31
|
+
|
|
32
|
+
- `himan list [type]`,`--json` 可选
|
|
33
|
+
- 扫描源仓库中各类型目录下的 `himan.yaml`,返回名称、描述、目标 agent、入口文件等。
|
|
34
|
+
|
|
35
|
+
### 2.3 `history`
|
|
36
|
+
|
|
37
|
+
- `himan history <type> <name>`
|
|
38
|
+
- 按 tag 模式 `<type>/<name>@*` 列出历史,semver 合法项排序输出。
|
|
39
|
+
|
|
40
|
+
### 2.4 `install`
|
|
41
|
+
|
|
42
|
+
- `himan install <type> <name>` 或 `<name>@version`,`type` 支持 `rule|command|skill`
|
|
43
|
+
- 也支持 `himan install`(无参数)按 `himan.lock` 批量复现安装。
|
|
44
|
+
- 未指定版本则安装该资源最新 tag 对应版本。
|
|
45
|
+
- 若本地 store 中已有该版本缓存,则复用、不重新从 Git 导出;否则导出到 store。
|
|
46
|
+
- 在项目下按安装模式创建目标(默认 `--mode link` 软链;`--mode copy` 复制)。
|
|
47
|
+
- 目标路径由 agent 和资源类型共同决定:
|
|
48
|
+
- `cursor` -> `.cursor/{rules|commands|skills}/<name>`
|
|
49
|
+
- `claude-code` -> `.claude/{rules|commands|skills}/<name>`
|
|
50
|
+
- `codex` -> `.agents/{rules|commands|skills}/<name>`
|
|
51
|
+
- `openclaw` -> `.openclaw/{rules|commands|skills}/<name>`
|
|
52
|
+
|
|
53
|
+
### 2.5 `dev`
|
|
54
|
+
|
|
55
|
+
- `himan dev <type> <name>`,`type` 支持 `rule|command|skill`;需先 `install`。
|
|
56
|
+
- 将当前安装内容复制到项目开发目录(已存在则默认不覆盖),再按安装模式更新项目目标:
|
|
57
|
+
- `rule`:`.himan/dev/rule/<name>`
|
|
58
|
+
- `command`:`.himan/dev/command/<name>`
|
|
59
|
+
- `skill`:`.himan/dev/skill/<name>`
|
|
60
|
+
|
|
61
|
+
### 2.6 `publish`
|
|
62
|
+
|
|
63
|
+
- `himan publish <type> <name> --patch|--minor|--major`(默认 patch,三选一)
|
|
64
|
+
- 发布内容优先取项目 `.himan/dev/<type>/<name>`,否则取源仓库内对应资源目录。
|
|
65
|
+
- 新版本:基于已有 tag 最新 semver 递增;无任何历史时从 `0.0.0` 起算。
|
|
66
|
+
- 写回源仓库、提交、打 tag、推送,并将该版本同步到本地 store。
|
|
67
|
+
- 若该资源在项目中已有安装目标,会按 lock 中的安装模式同步到新版本目录。
|
|
68
|
+
|
|
69
|
+
### 2.7 `create`
|
|
70
|
+
|
|
71
|
+
- `himan create <type> <name>` 及常用选项(描述、目标 agent、dry-run、force、json 等)
|
|
72
|
+
- 生成 `rule` / `command` / `skill` 标准目录与 `himan.yaml`、入口模板
|
|
73
|
+
- 与 `publish` 衔接:`create → 编辑 → publish`
|
|
74
|
+
|
|
75
|
+
### 2.8 `agent`
|
|
76
|
+
|
|
77
|
+
- `himan agent list` 查看支持的 agent。
|
|
78
|
+
- `himan agent use <agent[,agent]>` 设置当前项目默认 agent;加 `--global` 设置全局默认 agent。
|
|
79
|
+
- `himan agent current` 查看当前项目、全局和最终生效的默认 agent。
|
|
80
|
+
- `himan agent clear` 清除默认 agent 配置;默认清除当前项目,加 `--global` 清除全局配置。
|
|
81
|
+
- 默认 agent 解析顺序:显式 `--agent` > 当前项目配置 > 全局配置 > 资源 metadata > `cursor`。
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 3. MVP 技术架构
|
|
86
|
+
|
|
87
|
+
### 3.1 分层(概念)
|
|
88
|
+
|
|
89
|
+
- **CLI**:解析参数、格式化输出、帮助与错误信息
|
|
90
|
+
- **编排**:初始化源、列表、历史、安装、开发态、发布、创建等资源生命周期
|
|
91
|
+
- **领域**:资源类型、版本、路径约定
|
|
92
|
+
- **适配**:Git 实现 + Registry 预留;扫描与解析元数据;版本计算;配置与全局路径
|
|
93
|
+
|
|
94
|
+
**原则:** store 按版本目录追加、不覆盖已有缓存;开发目录与项目安装目标分离;项目侧默认以软链引用资源,也支持复制。
|
|
95
|
+
|
|
96
|
+
### 3.2 目录与数据
|
|
97
|
+
|
|
98
|
+
**用户目录(如 `~/.himan`):**
|
|
99
|
+
- `repos/…`:Git 源缓存
|
|
100
|
+
- `store/<type>/<name>/<version>/`:按版本的资源快照
|
|
101
|
+
- `config.json`:当前源类型(git / registry 预留)、仓库地址、全局默认 agent 等
|
|
102
|
+
|
|
103
|
+
**项目目录:**
|
|
104
|
+
- `.cursor` / `.claude` / `.agents` / `.openclaw`:按 agent 和资源类型保存运行态目标(软链或副本)
|
|
105
|
+
- `.himan/config.json`:项目默认 agent 配置
|
|
106
|
+
- `.himan/dev/<type>/<name>`:资源开发态可编辑副本
|
|
107
|
+
|
|
108
|
+
**源仓库内资源布局:**
|
|
109
|
+
- `rules/<name>/`、`commands/<name>/`、`skills/<name>/`,各含 `himan.yaml` 与约定入口文件(如 `content.md`、`SKILL.md`)。
|
|
110
|
+
|
|
111
|
+
### 3.3 技术依赖(概要)
|
|
112
|
+
|
|
113
|
+
- Git:克隆、拉取、tag、按 tag 导出目录、提交与推送
|
|
114
|
+
- Semver:排序与下一版本计算
|
|
115
|
+
- YAML:资源元数据
|
|
116
|
+
- 文件系统:目录复制、符号链接
|
|
117
|
+
|
|
118
|
+
更细的实现说明见 [impl.md](./impl.md);创建资源见 [create-resource.md](./create-resource.md)。
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 4. 非功能要求
|
|
123
|
+
|
|
124
|
+
- 幂等:`install` / `dev` 重复执行不破坏合理预期状态
|
|
125
|
+
- 可恢复:发布失败可重试,不依赖未文档化的中间态
|
|
126
|
+
- 可诊断:错误信息能指向仓库、tag、路径或权限问题
|
|
127
|
+
- 可测试:主流程有自动化测试覆盖
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 5. 测试策略
|
|
132
|
+
|
|
133
|
+
- 自动化测试覆盖:版本解析、元数据扫描、配置、以及 CLI 主流程(含临时用户目录与模拟 Git 远端)。
|
|
134
|
+
- 建议人工补充:真实网络 clone、鉴权失败、推送拒绝、脏工作区等。
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 6. 交付标准
|
|
139
|
+
|
|
140
|
+
- 命令可执行,帮助信息完整
|
|
141
|
+
- 主流程在自动化测试中可回归
|
|
142
|
+
- 用户文档(根 README)与本 MVP 文档一致
|
|
143
|
+
- 配置与适配层为二期 Registry 预留扩展空间
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# himan `create` 命令说明(rule / command / skill)
|
|
2
|
+
|
|
3
|
+
说明「新建资源」的命令、目录与元数据约定,支撑 `create -> edit -> publish` 工作流。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. 设计目标
|
|
8
|
+
|
|
9
|
+
- 支持三类资源:`rule`、`command`、`skill`
|
|
10
|
+
- 统一目录结构、`himan.yaml` 与默认入口内容
|
|
11
|
+
- 与 `list` / `history` / `publish` / `install` / `dev` / `uninstall` 对所有类型保持一致
|
|
12
|
+
|
|
13
|
+
**本阶段不做:** AI 生成正文、通过 Registry 在线创建、创建后自动发布。
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 2. 命令
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
himan create <type> <name> [options]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- `name`:kebab-case,例如 `code-review`
|
|
24
|
+
|
|
25
|
+
**常用选项:**
|
|
26
|
+
|
|
27
|
+
- `--description`:描述
|
|
28
|
+
- `--agent`:目标 Agent,逗号分隔;未指定时使用当前项目默认 agent、全局默认 agent,最终回退到 `cursor`
|
|
29
|
+
- `--entry`:入口文件名(各类型有默认值)
|
|
30
|
+
- `--template`:模板名;MVP 仅内置 **basic**,其它名称会报错
|
|
31
|
+
- `--force`:目录已存在时覆盖
|
|
32
|
+
- `--dry-run`:只展示将创建的内容,不写盘
|
|
33
|
+
- `--json`:结构化输出
|
|
34
|
+
|
|
35
|
+
**默认入口文件:**
|
|
36
|
+
|
|
37
|
+
- `rule`、`command` → `content.md`
|
|
38
|
+
- `skill` → `SKILL.md`
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 3. 资源目录与元数据
|
|
43
|
+
|
|
44
|
+
创建后的仓库结构示例:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
repo/
|
|
48
|
+
rules/<name>/
|
|
49
|
+
himan.yaml
|
|
50
|
+
content.md
|
|
51
|
+
commands/<name>/
|
|
52
|
+
himan.yaml
|
|
53
|
+
content.md
|
|
54
|
+
skills/<name>/
|
|
55
|
+
himan.yaml
|
|
56
|
+
SKILL.md
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`himan.yaml` 最小字段示例:
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
name: code-review
|
|
63
|
+
type: rule
|
|
64
|
+
version: 0.1.0
|
|
65
|
+
entry: content.md
|
|
66
|
+
description: enforce code review standards
|
|
67
|
+
agents:
|
|
68
|
+
- cursor
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
- `version` 为初始占位;**正式发布版本以 Git Tag 为准**
|
|
72
|
+
- `agents` 来自 `--agent` 或默认 agent 解析结果
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 4. 流程概要
|
|
77
|
+
|
|
78
|
+
1. 读取本地配置,确认已初始化源
|
|
79
|
+
2. 校验类型与资源名格式
|
|
80
|
+
3. 解析目标路径 `rules|commands|skills/<name>`
|
|
81
|
+
4. 目录已存在且无 `--force` → 报错
|
|
82
|
+
5. 生成 `himan.yaml` 与入口模板(`--dry-run` 则不落盘)
|
|
83
|
+
6. 终端或 `--json` 输出结果;下一步由用户编辑再 `publish`
|
|
84
|
+
|
|
85
|
+
创建能力随源类型走同一抽象:**Git 已实现,Registry 未实现。**
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 5. 模板
|
|
90
|
+
|
|
91
|
+
- 当前仅 **basic**:最简结构与提示性说明
|
|
92
|
+
- 后续可扩展更多模板名;自定义模板目录可作为后续增强
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 6. 错误场景(产品语义)
|
|
97
|
+
|
|
98
|
+
- 资源目录已存在
|
|
99
|
+
- 模板不存在(含请求了尚未支持的模板名)
|
|
100
|
+
- 资源名不合法
|
|
101
|
+
- 不支持的资源类型
|
|
102
|
+
- 源未初始化或当前源不支持创建
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 7. 测试关注点
|
|
107
|
+
|
|
108
|
+
- 名称与类型校验、默认 entry/agents、重复创建与 `--force`、`--dry-run` 不写盘、创建后 `list` 可见
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 8. 与资源工作流衔接
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
create → edit → publish
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`create` 会在当前 Git source 缓存仓库中生成资源目录;用户编辑该目录后执行 `publish`。资源已有发布版本并安装到项目后,可再进入 `dev` 工作流:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
himan create rule code-review --description "enforce standards"
|
|
122
|
+
himan publish rule code-review --patch
|
|
123
|
+
himan install rule code-review
|
|
124
|
+
himan dev rule code-review
|
|
125
|
+
# 编辑 .himan/dev/rule/code-review/
|
|
126
|
+
himan publish rule code-review --patch
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
创建与发布职责分离,便于审核与版本治理。
|
package/docs/mvp/impl.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# himan MVP 详细技术实现方案
|
|
2
|
+
|
|
3
|
+
本文档从**行为与技术选型**说明 MVP 如何实现,不绑定具体源码文件或符号名。
|
|
4
|
+
|
|
5
|
+
> 状态说明:本文是 MVP 设计落地说明;当前 CLI 行为以仓库根目录 [README.md](../../README.md) 和 [Codex repo map](../codex/repo-map.md) 为准。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. 技术栈与原则
|
|
10
|
+
|
|
11
|
+
- TypeScript,运行于 Node.js LTS
|
|
12
|
+
- CLI 解析、Git 封装、YAML 解析、Semver、基于 Promise 的文件与软链操作
|
|
13
|
+
|
|
14
|
+
**原则:**
|
|
15
|
+
|
|
16
|
+
- 本地 store 按版本存放,已存在的版本目录不被覆盖(安装时复用缓存)
|
|
17
|
+
- 开发目录 `.himan/dev` 与运行态 agent 目录(`.cursor` / `.claude` / `.agents` / `.openclaw`)分离
|
|
18
|
+
- 正式发布版本以 **Git Tag** 为唯一事实来源;`himan.yaml` 中的 version 在发布时会与 tag 对齐
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. 功能到实现要点
|
|
23
|
+
|
|
24
|
+
### 2.1 `init <git_repo>`
|
|
25
|
+
|
|
26
|
+
- 确保全局目录(缓存仓库、store、配置)存在
|
|
27
|
+
- 由仓库 URL 推导稳定 id,首次克隆、后续拉取(含 tags)
|
|
28
|
+
- 写入本地配置:当前源为 Git、仓库地址与 id
|
|
29
|
+
- CLI 仅提供「Git URL」初始化;Registry 类型虽可在配置中预留,但尚无可用实现
|
|
30
|
+
|
|
31
|
+
### 2.2 `list [type]`
|
|
32
|
+
|
|
33
|
+
- 在缓存仓库内按类型扫描子目录,读取 `himan.yaml`
|
|
34
|
+
- 校验类型与必填字段(如 name、entry),不符的目录跳过
|
|
35
|
+
- 支持人类可读与 `--json` 输出
|
|
36
|
+
|
|
37
|
+
### 2.3 `history <type> <name>`
|
|
38
|
+
|
|
39
|
+
- 列出匹配 `<type>/<name>@*` 的 tag,解析 semver,非法 tag 忽略
|
|
40
|
+
- 按版本倒序输出
|
|
41
|
+
|
|
42
|
+
### 2.4 `install <type> <name>[@version]`
|
|
43
|
+
|
|
44
|
+
- 命令层接受 `rule|command|skill`
|
|
45
|
+
- 无版本则取该资源历史中的最新 semver
|
|
46
|
+
- 若本地 store 已有该版本目录则不再从 Git 导出;否则从对应 tag 导出资源树到 store
|
|
47
|
+
- 在项目中按 agent 和资源类型创建/更新安装目标,例如 `cursor -> .cursor/{rules|commands|skills}`、`codex -> .agents/{rules|commands|skills}`;默认软链到 store 中该版本,也可通过 `--mode copy` 复制内容
|
|
48
|
+
|
|
49
|
+
### 2.5 `dev <type> <name>`
|
|
50
|
+
|
|
51
|
+
- 命令层接受 `rule|command|skill`;依赖已安装(能解析当前安装目标)
|
|
52
|
+
- 将当前安装内容复制到 `.himan/dev/<type>/<name>`(目录已存在则默认不覆盖)
|
|
53
|
+
- 按安装模式将项目目标更新为 dev 目录的软链或副本
|
|
54
|
+
|
|
55
|
+
### 2.6 `publish <type> <name>`
|
|
56
|
+
|
|
57
|
+
- 发布源:优先项目 `.himan/dev/<type>/<name>`,否则缓存仓库内该资源目录
|
|
58
|
+
- 下一版本:基于历史最新 tag;无历史则从 `0.0.0` 按 patch/minor/major 递增
|
|
59
|
+
- 将内容同步回缓存仓库中的规范路径,更新元数据中的版本字段,提交、打 tag、推送
|
|
60
|
+
- 将新 tag 对应内容拉取到 store 新版本目录
|
|
61
|
+
- 若当前项目已安装该资源,则按 lock 中的安装模式同步更新项目内对应类型目标到新版本
|
|
62
|
+
|
|
63
|
+
### 2.7 `create <type> <name>`
|
|
64
|
+
|
|
65
|
+
- 校验类型与资源命名规则
|
|
66
|
+
- 在缓存仓库中创建 `rules|commands|skills/<name>` 及 `himan.yaml`、入口模板
|
|
67
|
+
- 支持覆盖、试运行、JSON 输出;创建后不自动发布
|
|
68
|
+
|
|
69
|
+
### 2.8 `agent`
|
|
70
|
+
|
|
71
|
+
- 命令层支持 `agent list|use|current|clear`
|
|
72
|
+
- 当前项目默认 agent 写入 `.himan/config.json`
|
|
73
|
+
- 全局默认 agent 写入 `~/.himan/config.json`
|
|
74
|
+
- 默认 agent 生效顺序:显式 `--agent` > 当前项目配置 > 全局配置 > 资源 metadata > `cursor`
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 3. 架构:源适配与编排
|
|
79
|
+
|
|
80
|
+
为避免上层与「一定是 Git」强耦合:
|
|
81
|
+
|
|
82
|
+
- 抽象一层 **资源源**:初始化、列表、历史、按版本拉取内容、发布、创建
|
|
83
|
+
- **Git** 为当前唯一完整实现
|
|
84
|
+
- **Registry** 为占位:调用即提示未实现,二期对接 API 与下载/上传
|
|
85
|
+
|
|
86
|
+
编排层负责:解析配置选择源、默认 agent、资源 store 路径、dev 拷贝、项目目标 materialize(软链或复制);与具体 Git 子命令细节隔离。
|
|
87
|
+
|
|
88
|
+
配置中可区分源类型并预留 Registry 所需字段(如 endpoint);当前 CLI 初始化路径只写入 Git 源。
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 4. 其他实现注意点
|
|
93
|
+
|
|
94
|
+
- 全局路径与用户主目录约定一致,避免魔法字符串散落
|
|
95
|
+
- 错误应能区分:未初始化、资源不存在、版本不存在、模板不支持、重复创建等
|
|
96
|
+
- 幂等与重试:安装、dev、发布在合理重复执行下行为可预期
|
|
97
|
+
- 平台:优先保证 macOS/Linux;Windows 软链与路径差异可后续单独验证
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 5. 测试
|
|
102
|
+
|
|
103
|
+
- 运行仓库内测试脚本(如 `pnpm test`),包含单元场景与 CLI 端到端场景(临时 HOME、本地裸仓库模拟远端等)
|
|
104
|
+
- 仍建议补充:真实网络失败、Windows、并发安装等
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 6. 文档与示例
|
|
109
|
+
|
|
110
|
+
- 命令参数与快速上手以根 README 为准
|
|
111
|
+
- 创建资源字段与目录约定见 [create-resource.md](./create-resource.md)
|
package/package.json
CHANGED
|
@@ -1,33 +1,57 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hi-man/himan",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Prompt and agent asset management CLI",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai",
|
|
7
|
+
"agent",
|
|
8
|
+
"prompt",
|
|
9
|
+
"prompt-management",
|
|
10
|
+
"cli",
|
|
11
|
+
"git",
|
|
12
|
+
"codex",
|
|
13
|
+
"cursor",
|
|
14
|
+
"claude"
|
|
15
|
+
],
|
|
5
16
|
"license": "MIT",
|
|
6
17
|
"type": "module",
|
|
7
18
|
"packageManager": "pnpm@10.32.1",
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=22 <23"
|
|
21
|
+
},
|
|
8
22
|
"repository": {
|
|
9
23
|
"type": "git",
|
|
10
|
-
"url": "git+https://github.com/
|
|
24
|
+
"url": "git+https://github.com/himan-group/himan.git"
|
|
11
25
|
},
|
|
12
26
|
"bugs": {
|
|
13
|
-
"url": "https://github.com/
|
|
27
|
+
"url": "https://github.com/himan-group/himan/issues"
|
|
14
28
|
},
|
|
15
|
-
"homepage": "https://github.com/
|
|
29
|
+
"homepage": "https://github.com/himan-group/himan#readme",
|
|
16
30
|
"files": [
|
|
17
31
|
"dist",
|
|
32
|
+
"docs/development.md",
|
|
33
|
+
"docs/mvp",
|
|
34
|
+
"docs/error-codes.md",
|
|
18
35
|
"README.md",
|
|
19
|
-
"
|
|
36
|
+
"CHANGELOG.md",
|
|
37
|
+
"LICENSE",
|
|
38
|
+
".nvmrc"
|
|
20
39
|
],
|
|
21
40
|
"publishConfig": {
|
|
22
41
|
"access": "public",
|
|
23
42
|
"registry": "https://registry.npmjs.org/"
|
|
24
43
|
},
|
|
25
44
|
"bin": {
|
|
26
|
-
"himan": "dist/
|
|
45
|
+
"himan": "dist/bin/himan.js",
|
|
46
|
+
"himan-source": "dist/bin/himan-source.js",
|
|
47
|
+
"himan-resource": "dist/bin/himan-resource.js",
|
|
48
|
+
"himan-project": "dist/bin/himan-project.js"
|
|
27
49
|
},
|
|
28
50
|
"scripts": {
|
|
51
|
+
"clean": "rm -rf dist",
|
|
52
|
+
"prebuild": "rm -rf dist",
|
|
29
53
|
"build": "tsc -p tsconfig.json",
|
|
30
|
-
"dev": "tsx src/
|
|
54
|
+
"dev": "tsx src/bin/himan.ts",
|
|
31
55
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
32
56
|
"test": "vitest run",
|
|
33
57
|
"test:watch": "vitest",
|