auriga-cli 1.18.5 → 1.20.0
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/README.md +15 -23
- package/README.zh-CN.md +14 -23
- package/dist/api-types.d.ts +11 -25
- package/dist/apply-handlers.js +11 -9
- package/dist/catalog.d.ts +3 -19
- package/dist/catalog.json +21 -28
- package/dist/cli.js +49 -6
- package/dist/guide.js +10 -9
- package/dist/help.js +1 -1
- package/dist/hooks.js +6 -1
- package/dist/plugins.js +182 -7
- package/dist/scan-catalog.js +11 -87
- package/dist/server.js +1 -1
- package/dist/skills.js +0 -3
- package/dist/state.d.ts +15 -34
- package/dist/state.js +85 -399
- package/dist/utils.d.ts +1 -0
- package/dist/workflow.js +32 -4
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -11,10 +11,10 @@ This repo itself is a fully configured harness project. You can clone it to see
|
|
|
11
11
|
| Module | Description |
|
|
12
12
|
|---|---|
|
|
13
13
|
| **Workflow** | `CLAUDE.md` auriga workflow: requirement clarification -> TDD -> Review, Harness principles, Subagent usage guide |
|
|
14
|
-
| **Skills** |
|
|
14
|
+
| **Skills** | External development process skills — brainstorming, systematic-debugging, TDD, verification, planning, playwright |
|
|
15
15
|
| **Recommended Skills** | Optional utility skills (e.g. `codex-agent`, `claude-code-agent`) you can add on top of the workflow skills |
|
|
16
|
-
| **Plugins** | Recommended Claude Code and Codex plugins — skill-creator, claude-md-management, codex, auriga-go, auriga-git-guards, session-instructions-loader, deep-review |
|
|
17
|
-
| **Hooks** | Claude Code
|
|
16
|
+
| **Plugins** | Recommended Claude Code and Codex plugins — skill-creator, claude-md-management, codex, auriga-go, auriga-git-guards, auriga-workflow-skills, auriga-notify, session-instructions-loader, deep-review |
|
|
17
|
+
| **Hooks** | Legacy Claude Code hook installer. No repo-owned hooks are currently exposed here; `notify` ships as the `auriga-notify` plugin. |
|
|
18
18
|
|
|
19
19
|
## Quick Start
|
|
20
20
|
|
|
@@ -41,14 +41,14 @@ The leading `-y` belongs to `npx` (it auto-confirms package installation), **not
|
|
|
41
41
|
Non-interactive install commands:
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
npx -y auriga-cli install --all # workflow + skills + plugins
|
|
44
|
+
npx -y auriga-cli install --all # workflow + skills + default plugins (atomic)
|
|
45
45
|
npx -y auriga-cli install recommended # opt-in utility skills (not in --all)
|
|
46
46
|
npx -y auriga-cli install plugins --agent codex --plugin session-instructions-loader
|
|
47
47
|
npx -y auriga-cli install <type> [--flags] # one of: workflow | skills | recommended | plugins | hooks
|
|
48
48
|
npx -y auriga-cli --help # full catalog + flags
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
Exit codes: `0` success, `1` fatal (precheck / parse / fetch), `2` partial success — `stderr` lists per-category `[OK]/[FAIL]` and a `Retry:` hint. After install, reload the Claude Code or Codex session so the new `CLAUDE.md` / skills / plugins / hook registrations are picked up.
|
|
51
|
+
Exit codes: `0` success, `1` fatal (precheck / parse / fetch), `2` partial success — `stderr` lists per-category `[OK]/[FAIL]` and a `Retry:` hint. After install, reload the Claude Code or Codex session so the new `CLAUDE.md` / skills / plugins / hook-plugin registrations are picked up.
|
|
52
52
|
|
|
53
53
|
### Web UI (opt-in)
|
|
54
54
|
|
|
@@ -58,7 +58,7 @@ For a browser-based view of what's installed and one-click apply, run:
|
|
|
58
58
|
npx auriga-cli web-ui
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
This boots a local server on `127.0.0.1`, opens your default browser, and serves a dashboard that scans the current project, shows each module's status (installed /
|
|
61
|
+
This boots a local server on `127.0.0.1`, opens your default browser, and serves a dashboard that scans the current project, shows each module's status (installed / not-installed / partial-install), and applies install / uninstall in a queue with live SSE progress. Re-running install is the update path — every installer is idempotent and overwrites in place. The server shuts down on its own ~15 s after the browser closes.
|
|
62
62
|
|
|
63
63
|
The UI is opt-in — `npx auriga-cli` still launches the TTY menu below.
|
|
64
64
|
|
|
@@ -102,9 +102,6 @@ Installs selected skills via `npx skills add`, targeting both Claude Code and Co
|
|
|
102
102
|
| verification-before-completion | [obra/superpowers](https://github.com/obra/superpowers) | Pre-completion verification — evidence before assertions |
|
|
103
103
|
| planning-with-files | [OthmanAdi/planning-with-files](https://github.com/OthmanAdi/planning-with-files) | File-based task planning and progress tracking |
|
|
104
104
|
| playwright-cli | [microsoft/playwright-cli](https://github.com/microsoft/playwright-cli) | Browser automation and testing |
|
|
105
|
-
| test-designer | [Ben2pc/auriga-cli](https://github.com/Ben2pc/auriga-cli) | Independent-Evaluation test designer for TDD red phase |
|
|
106
|
-
| incremental-impl | [Ben2pc/auriga-cli](https://github.com/Ben2pc/auriga-cli) | Decides how to implement a non-trivial change: size, slicing strategy, optional parallel dispatch, per-slice execution discipline |
|
|
107
|
-
| session-compound | [Ben2pc/auriga-cli](https://github.com/Ben2pc/auriga-cli) | Post-merge session compounder — distills the session into an interactive HTML report (timeline + token / cache / tool health + playground for skill installs / AGENTS.md edits / new-skill gaps) |
|
|
108
105
|
|
|
109
106
|
**Recommended Skills (opt-in, not installed by `--all`):**
|
|
110
107
|
|
|
@@ -129,6 +126,8 @@ Examples:
|
|
|
129
126
|
|
|
130
127
|
```bash
|
|
131
128
|
npx -y auriga-cli install plugins --plugin auriga-go
|
|
129
|
+
npx -y auriga-cli install plugins --agent both --plugin auriga-workflow-skills
|
|
130
|
+
npx -y auriga-cli install plugins --plugin auriga-notify
|
|
132
131
|
npx -y auriga-cli install plugins --agent codex --plugin session-instructions-loader
|
|
133
132
|
npx -y auriga-cli install plugins --agent both --plugin auriga-git-guards
|
|
134
133
|
```
|
|
@@ -140,31 +139,24 @@ npx -y auriga-cli install plugins --agent both --plugin auriga-git-guards
|
|
|
140
139
|
| codex | Claude Code | Codex cross-model collaboration |
|
|
141
140
|
| auriga-go | Claude Code / Codex | Workflow autopilot for the auriga workflow. Reminder-based navigation across the `CLAUDE.md` phases. Bundles two skills: `auriga-go` (description-based NL trigger + `/auriga-go`) and `/goalify` (plans an autonomous goal from a spec or work-in-progress and dispatches it via Claude Code's built-in `/goal` command). |
|
|
142
141
|
| auriga-git-guards | Claude Code / Codex | Three git-lifecycle guardrails plus the bundled `git-workflow` skill. Hooks: `commit-reminder` (PostToolUse on `Edit` / `Write` / `MultiEdit` in Claude Code and on `apply_patch` — Codex's canonical file-edit `tool_name` — so it fires in both runtimes → when uncommitted diff vs `HEAD` exceeds 200 lines or 8 files and the last reminder was ≥ 60 s ago, inject a nudge to commit at the next semantic boundary), `pr-create-guard` (PostToolUse on `gh pr create` → fetch the new PR's body via `gh pr view` and inject headings + TODO counts as `additionalContext` so the Agent can self-verify the five-element PR description: scope / acceptance criteria / design decisions / risks / remaining TODOs), and `pr-ready-guard` (PreToolUse on `gh pr ready` → block on stray planning docs at `findings.md` / `progress.md` / `task_plan.md` / `docs/superpowers/specs/*.md`, unfinalized active specs in `docs/specs/*.md`, or unpushed commits; otherwise inject the body snapshot). The two PostToolUse hooks reach full Claude Code / Codex parity; Codex currently fails open on `pr-ready-guard`'s PreToolUse `additionalContext` informational path (block path identical). |
|
|
142
|
+
| auriga-workflow-skills | Claude Code / Codex | Bundles the auriga-owned workflow execution skills: `incremental-impl`, `test-designer`, and `session-compound`. Installed by default through the plugin path instead of `install skills`. |
|
|
143
|
+
| auriga-notify *(opt-in)* | Claude Code | macOS native notification plugin for Claude Code `Notification` events. Focus-aware sound-only mode, click-to-activate, per-project notification grouping, and migrated `config.json` / `icon.png` support. Not installed by `install --all`; install explicitly with `install plugins --plugin auriga-notify`. |
|
|
143
144
|
| session-instructions-loader | Codex | Codex-only SessionStart plugin that injects ancestor `AGENTS.md` files plus repo-configured extra instruction files. |
|
|
144
145
|
| deep-review | Claude Code / Codex | Multi-dimensional PR review orchestrator — dispatches parallel reviewers (spec-conformance, correctness, test-quality, docs-sync, plus conditional robustness/UX/performance/structure/code-quality/skill-plugin-quality) and synthesizes findings into an actionable punch list. Bundles a companion `reviewer-creator` skill for scaffolding project-level custom reviewers under `docs/rules/review/`. Drives the formal-review phase in `CLAUDE.md`. |
|
|
145
146
|
|
|
146
147
|
### Hooks
|
|
147
148
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
| notify *(opt-in)* | Native macOS notification when Claude needs your attention. Shows the brand mark in the small app-icon position; click brings the originating terminal back to focus. **Focus-aware**: when the launching terminal is already frontmost, drops the banner and plays the sound only (toggle via `soundOnlyWhenFocused` in `config.json`). **Per-project group ID**: new notifications cleanly replace older ones in Notification Center, no process accumulation, no cross-project interference. Auto-installs `alerter` via Homebrew (`vjeantet/tap/alerter`). Customize sound and icon by editing `.claude/hooks/notify/config.json` and `.claude/hooks/notify/icon.png`. macOS-only at runtime; silent no-op on other platforms. |
|
|
153
|
-
|
|
154
|
-
Scope choices:
|
|
155
|
-
|
|
156
|
-
- **Project local** (recommended for cross-platform teams): files under `./.claude/hooks/`, registered in `./.claude/settings.local.json` — per-developer, not committed.
|
|
157
|
-
- **Project**: same files, registered in `./.claude/settings.json` — shared with the team via git.
|
|
158
|
-
- **User**: files under `~/.claude/hooks/`, registered in `~/.claude/settings.json` — global across all your projects.
|
|
159
|
-
|
|
160
|
-
Re-running the installer preserves your customized `config.json` and `icon.png`, overwrites the runtime, and never produces duplicate hook entries (idempotent merge by sentinel marker).
|
|
149
|
+
The traditional hook installer remains for compatibility, but this repo no
|
|
150
|
+
longer exposes a repo-owned hook through `install hooks`. New repo-owned hooks
|
|
151
|
+
should be shipped inside plugins. The former `notify` hook is now the
|
|
152
|
+
`auriga-notify` plugin.
|
|
161
153
|
|
|
162
154
|
## Requirements
|
|
163
155
|
|
|
164
156
|
- Node.js >= 18
|
|
165
157
|
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (required for Claude Code Plugins and Hooks modules)
|
|
166
158
|
- Codex CLI (required only for `install plugins --agent codex|both`)
|
|
167
|
-
- [Homebrew](https://brew.sh) (recommended for the `notify`
|
|
159
|
+
- [Homebrew](https://brew.sh) (recommended for the `auriga-notify` plugin to use `alerter`)
|
|
168
160
|
|
|
169
161
|
## Development
|
|
170
162
|
|
package/README.zh-CN.md
CHANGED
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
| 模块 | 说明 |
|
|
12
12
|
|---|---|
|
|
13
13
|
| **Workflow** | `CLAUDE.md` 里的 auriga 工作流:需求澄清 → TDD → Review,Harness 原则,Subagent 使用指南 |
|
|
14
|
-
| **Skills** |
|
|
14
|
+
| **Skills** | 外部开发流程 skills —— brainstorming、systematic-debugging、TDD、verification、planning、playwright |
|
|
15
15
|
| **Recommended Skills** | 可选的工具类 skills(如 `codex-agent`、`claude-code-agent`),在 workflow skills 之外按需追加 |
|
|
16
|
-
| **Plugins** | 推荐的 Claude Code 和 Codex 插件 —— skill-creator、claude-md-management、codex、auriga-go、auriga-git-guards、session-instructions-loader、deep-review |
|
|
17
|
-
| **Hooks** | Claude Code
|
|
16
|
+
| **Plugins** | 推荐的 Claude Code 和 Codex 插件 —— skill-creator、claude-md-management、codex、auriga-go、auriga-git-guards、auriga-workflow-skills、auriga-notify、session-instructions-loader、deep-review |
|
|
17
|
+
| **Hooks** | 传统 Claude Code hook 安装器。目前没有仓库自维护 hook 暴露在这里;`notify` 已迁移为 `auriga-notify` 插件。 |
|
|
18
18
|
|
|
19
19
|
## 快速开始
|
|
20
20
|
|
|
@@ -41,7 +41,7 @@ npx -y auriga-cli guide
|
|
|
41
41
|
非交互安装命令:
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
npx -y auriga-cli install --all # workflow + skills + plugins
|
|
44
|
+
npx -y auriga-cli install --all # workflow + skills + 默认 plugins(原子)
|
|
45
45
|
npx -y auriga-cli install recommended # 可选工具 skills(不在 --all 内)
|
|
46
46
|
npx -y auriga-cli install plugins --agent codex --plugin session-instructions-loader
|
|
47
47
|
npx -y auriga-cli install <type> [--flags] # 单类:workflow | skills | recommended | plugins | hooks
|
|
@@ -52,13 +52,13 @@ npx -y auriga-cli --help # 完整 catalog + flag 说明
|
|
|
52
52
|
|
|
53
53
|
### Web UI(可选)
|
|
54
54
|
|
|
55
|
-
如果想在浏览器里看到“已装 /
|
|
55
|
+
如果想在浏览器里看到“已装 / 未装 / 半装”全景并一键 apply,跑:
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
npx auriga-cli web-ui
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
它会在 `127.0.0.1` 起一个本地 server、自动开浏览器,扫描当前项目并展示 5
|
|
61
|
+
它会在 `127.0.0.1` 起一个本地 server、自动开浏览器,扫描当前项目并展示 5 个分类的状态。勾选要安装/卸载的项目后点 Apply,SSE 实时回传执行进度。需要"升级"时就重新 install——每个安装器都是幂等覆盖。关浏览器后约 15 秒 server 自动退出。
|
|
62
62
|
|
|
63
63
|
Web UI 是显式入口;`npx auriga-cli` 仍然走下面的 TTY 菜单。
|
|
64
64
|
|
|
@@ -102,9 +102,6 @@ npx auriga-cli
|
|
|
102
102
|
| verification-before-completion | [obra/superpowers](https://github.com/obra/superpowers) | 完成前验证,用证据说话 |
|
|
103
103
|
| planning-with-files | [OthmanAdi/planning-with-files](https://github.com/OthmanAdi/planning-with-files) | 文件化任务计划与进度跟踪 |
|
|
104
104
|
| playwright-cli | [microsoft/playwright-cli](https://github.com/microsoft/playwright-cli) | 浏览器自动化与测试 |
|
|
105
|
-
| test-designer | [Ben2pc/auriga-cli](https://github.com/Ben2pc/auriga-cli) | TDD 红灯阶段的 Independent Evaluation 测试设计器 |
|
|
106
|
-
| incremental-impl | [Ben2pc/auriga-cli](https://github.com/Ben2pc/auriga-cli) | 决定如何实现非平凡改动:估算大小、选择切片策略、按需并行派遣、执行片间纪律 |
|
|
107
|
-
| session-compound | [Ben2pc/auriga-cli](https://github.com/Ben2pc/auriga-cli) | PR 合并后的会话复利 skill — 将本次会话沉淀为交互式 HTML 报告(时间线 + token / cache / 工具健康度 + playground:skill 安装 / AGENTS.md 修改 / 新建 skill 缺口) |
|
|
108
105
|
|
|
109
106
|
**Recommended Skills(可选,不在 `--all` 内):**
|
|
110
107
|
|
|
@@ -129,6 +126,8 @@ npx auriga-cli
|
|
|
129
126
|
|
|
130
127
|
```bash
|
|
131
128
|
npx -y auriga-cli install plugins --plugin auriga-go
|
|
129
|
+
npx -y auriga-cli install plugins --agent both --plugin auriga-workflow-skills
|
|
130
|
+
npx -y auriga-cli install plugins --plugin auriga-notify
|
|
132
131
|
npx -y auriga-cli install plugins --agent codex --plugin session-instructions-loader
|
|
133
132
|
npx -y auriga-cli install plugins --agent both --plugin auriga-git-guards
|
|
134
133
|
```
|
|
@@ -140,31 +139,23 @@ npx -y auriga-cli install plugins --agent both --plugin auriga-git-guards
|
|
|
140
139
|
| codex | Claude Code | Codex 跨模型协作 |
|
|
141
140
|
| auriga-go | Claude Code / Codex | auriga 工作流的自动驾驶:按 `CLAUDE.md` 的 phase 做 reminder-based 导航。内置两个 skill:`auriga-go`(按 description 的自然语言触发 + `/auriga-go` slash command)和 `/goalify`(根据 spec 或当前进展 plan 出 goal,并通过 Claude Code 内置的 `/goal` 命令分发执行)。 |
|
|
142
141
|
| auriga-git-guards | Claude Code / Codex | 三个 git-lifecycle guardrail + 内置 `git-workflow` skill。Hooks:`commit-reminder`(Claude Code 下 PostToolUse 匹配 `Edit` / `Write` / `MultiEdit`,Codex 下匹配 `apply_patch`(Codex 文件编辑 canonical `tool_name`),两个 runtime 都触发 —— 未提交 diff 对比 `HEAD` 超过 200 行或 8 个文件,且距上次提醒 ≥ 60 s 时,注入提醒让 Agent 在下一个语义边界 commit)、`pr-create-guard`(`gh pr create` 的 PostToolUse —— 通过 `gh pr view` 拉真实 PR body,扫 `^##` / `^###` headings 并统计 `- [ ]` / `- [x]` 注入 `additionalContext`,让 Agent 对照五要素:scope / acceptance criteria / design decisions / risks / remaining TODOs)、`pr-ready-guard`(`gh pr ready` 的 PreToolUse —— 仅按结构信号拦截:游离 `findings.md` / `progress.md` / `task_plan.md` / `docs/superpowers/specs/*.md`、`docs/specs/*.md` 内未结案的活跃 spec、未 push commits;放行时注入 body 快照)。两个 PostToolUse hook 在 Claude Code / Codex 上完全对齐;Codex 仅对 `pr-ready-guard` 的 PreToolUse `additionalContext` 信息路径 fail-open(block 路径两边一致)。 |
|
|
142
|
+
| auriga-workflow-skills | Claude Code / Codex | 打包 auriga 自维护的工作流执行 skills:`incremental-impl`、`test-designer`、`session-compound`。默认通过插件路径安装,不再通过 `install skills` 作为独立条目安装。 |
|
|
143
|
+
| auriga-notify *(opt-in)* | Claude Code | Claude Code `Notification` 事件的 macOS 原生通知插件。支持焦点感知仅提示音、点击唤起终端、按项目分组通知,并迁移旧 `config.json` / `icon.png`。不随 `install --all` 默认安装,需要显式执行 `install plugins --plugin auriga-notify`。 |
|
|
143
144
|
| session-instructions-loader | Codex | Codex-only SessionStart 插件,注入上层目录的 `AGENTS.md` 和仓库配置的额外 instruction 文件。 |
|
|
144
145
|
| deep-review | Claude Code / Codex | 多维度 PR review 编排器 —— 并行派发各维度 reviewer(spec-conformance、correctness、test-quality、docs-sync,以及条件触发的 robustness/UX/performance/structure/code-quality/skill-plugin-quality),汇总成 punch list。同包内打包了 `reviewer-creator` skill,用于在 `docs/rules/review/` 下生成项目级自定义 reviewer。承担 `CLAUDE.md` 中的正式评审职责。 |
|
|
145
146
|
|
|
146
147
|
### Hooks
|
|
147
148
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|---|---|
|
|
152
|
-
| notify *(opt-in)* | 当 Claude 需要你关注时弹一条原生 macOS 通知。在通知小图标位显示品牌图,点击通知可把发起 Claude 的终端拉回前台。**焦点感知**:发起 Claude 的终端正处于前台时,仅放提示音不弹横幅(通过 `config.json` 的 `soundOnlyWhenFocused` 切换)。**按项目分组**:新通知会干净地替换通知中心里的旧条目,不会进程堆积,也不会跨项目互相覆盖。会自动通过 Homebrew 安装 `alerter`(`vjeantet/tap/alerter`)。改 `.claude/hooks/notify/config.json` 即可换提示音、替换 `.claude/hooks/notify/icon.png` 即可换图标。仅 macOS 运行时生效,其它平台静默 no-op。 |
|
|
153
|
-
|
|
154
|
-
作用域选择:
|
|
155
|
-
|
|
156
|
-
- **Project local**(推荐给跨平台团队):文件落在 `./.claude/hooks/`,注册到 `./.claude/settings.local.json` —— 每个开发者各自安装,不进 git。
|
|
157
|
-
- **Project**:同样的文件,注册到 `./.claude/settings.json` —— 整个团队共享。
|
|
158
|
-
- **User**:文件落在 `~/.claude/hooks/`,注册到 `~/.claude/settings.json` —— 全局生效。
|
|
159
|
-
|
|
160
|
-
重新跑安装器时会保留你修改过的 `config.json` 和 `icon.png`,覆盖运行时本身,并通过 marker 字段幂等去重,绝不会产生重复的 hook 条目。
|
|
149
|
+
传统 hook 安装器仍保留作兼容入口,但本仓库当前不再通过
|
|
150
|
+
`install hooks` 暴露自维护 hook。新的自维护 hook 应随插件分发。原来的
|
|
151
|
+
`notify` hook 已迁移为 `auriga-notify` 插件。
|
|
161
152
|
|
|
162
153
|
## 环境要求
|
|
163
154
|
|
|
164
155
|
- Node.js >= 18
|
|
165
156
|
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code)(Claude Code Plugins 和 Hooks 模块需要)
|
|
166
157
|
- Codex CLI(仅 `install plugins --agent codex|both` 需要)
|
|
167
|
-
- [Homebrew](https://brew.sh)(`notify`
|
|
158
|
+
- [Homebrew](https://brew.sh)(`auriga-notify` 插件使用 `alerter` 时推荐安装)
|
|
168
159
|
|
|
169
160
|
## 开发
|
|
170
161
|
|
package/dist/api-types.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
export type ItemStatus = "installed" | "
|
|
1
|
+
export type ItemStatus = "installed" | "not-installed"
|
|
2
2
|
/** Dual-Agent plugin where some target Agents have the plugin installed
|
|
3
|
-
* and some don't (e.g. Claude side installed, Codex side missing).
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* enumerated in `PluginState.missingAgents`. */
|
|
3
|
+
* and some don't (e.g. Claude side installed, Codex side missing). The
|
|
4
|
+
* user-facing action is "install on the missing side"; the missing
|
|
5
|
+
* agents are enumerated in `PluginState.missingAgents`. */
|
|
7
6
|
| "partial-install";
|
|
8
7
|
/**
|
|
9
8
|
* Per-category scan scope. Each category (workflow / skills / plugins / hooks)
|
|
@@ -29,8 +28,6 @@ export interface StateReport {
|
|
|
29
28
|
}
|
|
30
29
|
export interface WorkflowState {
|
|
31
30
|
status: ItemStatus;
|
|
32
|
-
currentVersion?: string;
|
|
33
|
-
expectedVersion: string;
|
|
34
31
|
/** Which scope the scanner read to produce this row. Reflects the scope
|
|
35
32
|
* scanned, not where the file was found — e.g. when scope=user and
|
|
36
33
|
* ~/.claude/CLAUDE.md is absent, observedScope is still "user". The
|
|
@@ -44,8 +41,6 @@ export interface SkillState {
|
|
|
44
41
|
description: string;
|
|
45
42
|
status: ItemStatus;
|
|
46
43
|
isWorkflow: boolean;
|
|
47
|
-
currentHash?: string;
|
|
48
|
-
expectedHash: string;
|
|
49
44
|
/** Scope the scanner read to produce this row. See WorkflowState comment. */
|
|
50
45
|
observedScope?: ScanScope;
|
|
51
46
|
}
|
|
@@ -59,35 +54,26 @@ export interface PluginState {
|
|
|
59
54
|
* `agents.length === 2` the UI shows a BOTH badge and Apply installs to
|
|
60
55
|
* each agent in turn. Status is aggregated across all targeted agents:
|
|
61
56
|
* `installed` ⇔ all agents installed; `not-installed` ⇔ all not-installed;
|
|
62
|
-
* partial
|
|
63
|
-
* uniform version drift → `update-available`. */
|
|
57
|
+
* mixed → `partial-install` (some installed, some not). */
|
|
64
58
|
agents: ApplyAgent[];
|
|
65
59
|
/** Agents that target this plugin but don't have it installed. Populated
|
|
66
|
-
* iff `status === "partial-install"`.
|
|
67
|
-
*
|
|
68
|
-
* to backfill. Always omitted for `installed` / `not-installed` /
|
|
69
|
-
* `update-available`. */
|
|
60
|
+
* iff `status === "partial-install"`. Drives the "Missing on Codex"
|
|
61
|
+
* UI caption + tells the user exactly which side needs backfill. */
|
|
70
62
|
missingAgents?: ApplyAgent[];
|
|
71
|
-
currentVersion?: string;
|
|
72
|
-
expectedVersion?: string;
|
|
73
|
-
versionSource: "upstream-live" | "catalog";
|
|
74
63
|
/** Scope the scanner read to produce this row. Codex plugins are always
|
|
75
64
|
* "user" (Codex has no project-scope plugin concept). See WorkflowState
|
|
76
65
|
* comment on why this is typed optional. */
|
|
77
66
|
observedScope?: ScanScope;
|
|
78
67
|
/** True for plugins whose source lives in an upstream marketplace, not in
|
|
79
|
-
* this repo (skill-creator / claude-md-management / codex).
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* badge to make the "not our jurisdiction" signal explicit. */
|
|
68
|
+
* this repo (skill-creator / claude-md-management / codex). Pure UI hint
|
|
69
|
+
* since v1.19.0 — the EXTERNAL badge tells users upgrades go through
|
|
70
|
+
* `claude plugins update`, not via auriga-cli. */
|
|
83
71
|
external?: boolean;
|
|
84
72
|
}
|
|
85
73
|
export interface HookState {
|
|
86
74
|
name: string;
|
|
87
75
|
description: string;
|
|
88
76
|
status: ItemStatus;
|
|
89
|
-
currentHash?: string;
|
|
90
|
-
expectedHash: string;
|
|
91
77
|
/** Scope the scanner read to produce this row. See WorkflowState comment. */
|
|
92
78
|
observedScope?: ScanScope;
|
|
93
79
|
}
|
|
@@ -101,7 +87,7 @@ export interface StateWarning {
|
|
|
101
87
|
message: string;
|
|
102
88
|
}
|
|
103
89
|
export type ApplyCategory = "workflow" | "skill" | "recommended-skill" | "plugin" | "hook";
|
|
104
|
-
export type ApplyAction = "install" | "
|
|
90
|
+
export type ApplyAction = "install" | "uninstall";
|
|
105
91
|
/**
|
|
106
92
|
* Installer scope. Carried per-item so the Web UI can mix scopes within a
|
|
107
93
|
* single apply batch.
|
package/dist/apply-handlers.js
CHANGED
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
// hook: installHook(hookDef, "project",…)│ needs HookDef
|
|
18
18
|
// hook: uninstallHook(name, …) │
|
|
19
19
|
//
|
|
20
|
+
// v1.19.0 dropped the "update" action — every installer is idempotent and
|
|
21
|
+
// overwriting, so re-running install IS the update path. Apply receives
|
|
22
|
+
// "install" or "uninstall" only.
|
|
23
|
+
//
|
|
20
24
|
// Spec: docs/architecture/web-ui.md §6.4 (apply execution model).
|
|
21
25
|
import { installHook, loadHooksConfig, uninstallHook } from "./hooks.js";
|
|
22
26
|
import { installPlugins, uninstallPlugin, } from "./plugins.js";
|
|
@@ -24,7 +28,6 @@ import { installRecommendedSkills, installSkills, uninstallSkill, } from "./skil
|
|
|
24
28
|
import { installWorkflow, uninstallWorkflow } from "./workflow.js";
|
|
25
29
|
const ALL_ACTIONS = new Set([
|
|
26
30
|
"install",
|
|
27
|
-
"update",
|
|
28
31
|
"uninstall",
|
|
29
32
|
]);
|
|
30
33
|
function assertAction(action) {
|
|
@@ -43,7 +46,7 @@ export function buildDefaultApplyHandlers(ctx) {
|
|
|
43
46
|
// the Workflow column's EN/ZH-CN picker). Falls back to ctx lang for
|
|
44
47
|
// CLI-mode callers that don't pass it.
|
|
45
48
|
const installLang = requestedLang ?? lang;
|
|
46
|
-
if (action === "install"
|
|
49
|
+
if (action === "install") {
|
|
47
50
|
await installWorkflow(packageRoot, {
|
|
48
51
|
interactive: false,
|
|
49
52
|
cwd,
|
|
@@ -68,7 +71,7 @@ export function buildDefaultApplyHandlers(ctx) {
|
|
|
68
71
|
const skill = async (action, name, { onLog, scope }) => {
|
|
69
72
|
assertAction(action);
|
|
70
73
|
const installScope = scope ?? "project";
|
|
71
|
-
if (action === "install"
|
|
74
|
+
if (action === "install") {
|
|
72
75
|
await installSkills(packageRoot, {
|
|
73
76
|
interactive: false,
|
|
74
77
|
cwd,
|
|
@@ -88,7 +91,7 @@ export function buildDefaultApplyHandlers(ctx) {
|
|
|
88
91
|
const recommendedSkill = async (action, name, { onLog, scope }) => {
|
|
89
92
|
assertAction(action);
|
|
90
93
|
const installScope = scope ?? "project";
|
|
91
|
-
if (action === "install"
|
|
94
|
+
if (action === "install") {
|
|
92
95
|
await installRecommendedSkills(packageRoot, {
|
|
93
96
|
interactive: false,
|
|
94
97
|
cwd,
|
|
@@ -119,7 +122,7 @@ export function buildDefaultApplyHandlers(ctx) {
|
|
|
119
122
|
const failures = [];
|
|
120
123
|
for (const agent of agents) {
|
|
121
124
|
try {
|
|
122
|
-
if (action === "install"
|
|
125
|
+
if (action === "install") {
|
|
123
126
|
await installPlugins(packageRoot, {
|
|
124
127
|
interactive: false,
|
|
125
128
|
cwd,
|
|
@@ -162,10 +165,9 @@ export function buildDefaultApplyHandlers(ctx) {
|
|
|
162
165
|
});
|
|
163
166
|
return;
|
|
164
167
|
}
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
//
|
|
168
|
-
// SSE caller surfaces it as item:done success=false.
|
|
168
|
+
// Look up the HookDef in the bundled registry; unknown name → loud throw
|
|
169
|
+
// so the SSE caller surfaces it as item:done success=false. The hook
|
|
170
|
+
// installer is idempotent; re-running install is the update path.
|
|
169
171
|
const config = loadHooksConfig(packageRoot);
|
|
170
172
|
const hookDef = config.hooks.find((h) => h.name === name);
|
|
171
173
|
if (!hookDef) {
|
package/dist/catalog.d.ts
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
export interface CatalogEntry {
|
|
2
2
|
name: string;
|
|
3
3
|
description: string;
|
|
4
|
-
/** Build-time-baked plugin version. Set ONLY for plugin entries whose
|
|
5
|
-
* source lives in this repo's `plugins/<name>/` directory — the scanner
|
|
6
|
-
* uses it to surface "update-available" when the user's installed copy
|
|
7
|
-
* is older. Absent for skill / hook entries and for external-marketplace
|
|
8
|
-
* plugins (whose manifest lives upstream). Must be baked at build time
|
|
9
|
-
* because `plugins/<name>/.claude-plugin/plugin.json` is NOT shipped in
|
|
10
|
-
* the npm tarball (see `package.json` `files` field). */
|
|
11
|
-
expectedVersion?: string;
|
|
12
4
|
/** Build-time-baked agent map for plugin entries. Derived from
|
|
13
5
|
* `.claude/plugins.json` ∪ `.agents/plugins/install.json` — those config
|
|
14
6
|
* files are NOT shipped in the npm tarball, so the scanner can't read
|
|
@@ -17,21 +9,13 @@ export interface CatalogEntry {
|
|
|
17
9
|
* Absent on skill / hook entries. */
|
|
18
10
|
agents?: ("claude" | "codex")[];
|
|
19
11
|
/** True for plugins whose source lives in an UPSTREAM marketplace
|
|
20
|
-
* (skill-creator / claude-md-management / codex), not in this repo.
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* surfaces an EXTERNAL badge so users know where to look. */
|
|
12
|
+
* (skill-creator / claude-md-management / codex), not in this repo.
|
|
13
|
+
* Pure UI hint since v1.19.0 — the EXTERNAL badge tells users that
|
|
14
|
+
* upgrades go through `claude plugins update`, not us. */
|
|
24
15
|
external?: boolean;
|
|
25
16
|
}
|
|
26
17
|
export interface Catalog {
|
|
27
18
|
generatedAt: string;
|
|
28
|
-
/** Workflow content version baked from `CLAUDE.md`'s `# auriga Workflow (vX.Y.Z)`
|
|
29
|
-
* header at build time. MUST live here rather than be read at runtime
|
|
30
|
-
* because `CLAUDE.md` is NOT in the npm tarball — `package.json` `files`
|
|
31
|
-
* allowlists only `dist/`. Empty string when the header is unparseable;
|
|
32
|
-
* the scanner then degrades to "trust whatever the user has" rather than
|
|
33
|
-
* forcing phantom update-available against an empty expected value. */
|
|
34
|
-
workflowVersion: string;
|
|
35
19
|
workflowSkills: CatalogEntry[];
|
|
36
20
|
recommendedSkills: CatalogEntry[];
|
|
37
21
|
plugins: CatalogEntry[];
|
package/dist/catalog.json
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-05-
|
|
3
|
-
"workflowVersion": "1.7.0",
|
|
2
|
+
"generatedAt": "2026-05-13T06:35:46.774Z",
|
|
4
3
|
"workflowSkills": [
|
|
5
4
|
{
|
|
6
5
|
"name": "brainstorming",
|
|
7
6
|
"description": "You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation."
|
|
8
7
|
},
|
|
9
|
-
{
|
|
10
|
-
"name": "incremental-impl",
|
|
11
|
-
"description": "Plan a non-trivial code change end-to-end — size triage (XS–XL), slicing strategy, optional parallel subagent dispatch, per-slice Implement → Test → Verify → Commit discipline. Use for any multi-file change, refactor across files, executing a planned task from any planning source, cross-cutting modification (analytics sweep / i18n / library migration), or when about to write more than ~100 lines. 也用于增量实现 / 切片落地 / 推进已规划任务 / 跨切面改动。Skip only for trivial XS edits and pure documentation / configuration changes."
|
|
12
|
-
},
|
|
13
8
|
{
|
|
14
9
|
"name": "planning-with-files",
|
|
15
10
|
"description": "Implements Manus-style file-based planning to organize and track progress on complex tasks. Creates task_plan.md, findings.md, and progress.md. Use when asked to plan out, break down, or organize a multi-step project, research task, or any work requiring 5+ tool calls. Supports automatic session recovery after /clear."
|
|
@@ -18,18 +13,10 @@
|
|
|
18
13
|
"name": "playwright-cli",
|
|
19
14
|
"description": "Automate browser interactions, test web pages and work with Playwright tests."
|
|
20
15
|
},
|
|
21
|
-
{
|
|
22
|
-
"name": "session-compound",
|
|
23
|
-
"description": "This skill should be used when the user asks to \"复盘 / 总结 / 沉淀 / wrap up this session\", \"整理一下这次会话\", or \"extract takeaways from this session\". It compounds a single Claude Code or Codex CLI session into a self-contained interactive HTML report (narrative timeline + token / cache / tool health + a playground panel with checkable candidate items for ecosystem-skill installs / AGENTS.md edits / new-skill gaps) so the user can review, tick, and copy back a prompt that lands each item in the right place."
|
|
24
|
-
},
|
|
25
16
|
{
|
|
26
17
|
"name": "systematic-debugging",
|
|
27
18
|
"description": "Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes"
|
|
28
19
|
},
|
|
29
|
-
{
|
|
30
|
-
"name": "test-designer",
|
|
31
|
-
"description": "Design failing tests for complex features using Independent Evaluation — dispatches a context-free agent that sees only the requirement spec and code paths (not the implementation approach), then returns executable failing tests. Use when starting TDD for a non-trivial feature, when the requirement is ambiguous enough that biased tests are a risk, or when the user asks for independent test design."
|
|
32
|
-
},
|
|
33
20
|
{
|
|
34
21
|
"name": "test-driven-development",
|
|
35
22
|
"description": "Use when implementing any feature or bugfix, before writing implementation code"
|
|
@@ -104,8 +91,7 @@
|
|
|
104
91
|
"agents": [
|
|
105
92
|
"claude",
|
|
106
93
|
"codex"
|
|
107
|
-
]
|
|
108
|
-
"expectedVersion": "1.1.0"
|
|
94
|
+
]
|
|
109
95
|
},
|
|
110
96
|
{
|
|
111
97
|
"name": "auriga-git-guards",
|
|
@@ -113,8 +99,22 @@
|
|
|
113
99
|
"agents": [
|
|
114
100
|
"claude",
|
|
115
101
|
"codex"
|
|
116
|
-
]
|
|
117
|
-
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"name": "auriga-workflow-skills",
|
|
106
|
+
"description": "(Claude/Codex) Bundles the auriga-owned workflow execution skills: incremental-impl, test-designer, and session-compound.",
|
|
107
|
+
"agents": [
|
|
108
|
+
"claude",
|
|
109
|
+
"codex"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"name": "auriga-notify",
|
|
114
|
+
"description": "(opt-in) Opt-in macOS native notification hook for Claude Code Notification events; migrates legacy notify config and icon on install.",
|
|
115
|
+
"agents": [
|
|
116
|
+
"claude"
|
|
117
|
+
]
|
|
118
118
|
},
|
|
119
119
|
{
|
|
120
120
|
"name": "deep-review",
|
|
@@ -122,22 +122,15 @@
|
|
|
122
122
|
"agents": [
|
|
123
123
|
"claude",
|
|
124
124
|
"codex"
|
|
125
|
-
]
|
|
126
|
-
"expectedVersion": "0.3.1"
|
|
125
|
+
]
|
|
127
126
|
},
|
|
128
127
|
{
|
|
129
128
|
"name": "session-instructions-loader",
|
|
130
129
|
"description": "(Codex) Injects extra instruction files on session start",
|
|
131
130
|
"agents": [
|
|
132
131
|
"codex"
|
|
133
|
-
]
|
|
134
|
-
"expectedVersion": "1.0.0"
|
|
132
|
+
]
|
|
135
133
|
}
|
|
136
134
|
],
|
|
137
|
-
"hooks": [
|
|
138
|
-
{
|
|
139
|
-
"name": "notify",
|
|
140
|
-
"description": "(opt-in) Native macOS notification when Claude needs your attention (auto-installs alerter via Homebrew)"
|
|
141
|
-
}
|
|
142
|
-
]
|
|
135
|
+
"hooks": []
|
|
143
136
|
}
|
package/dist/cli.js
CHANGED
|
@@ -316,10 +316,22 @@ function validateFilterAgainstCatalog(type, filter) {
|
|
|
316
316
|
const singular = categorySingular(type);
|
|
317
317
|
for (const name of filter) {
|
|
318
318
|
if (!available.includes(name)) {
|
|
319
|
-
|
|
319
|
+
const hint = migratedPluginHint(type, name);
|
|
320
|
+
const hintText = hint ? ` ${hint}` : "";
|
|
321
|
+
parseErr(`unknown ${singular} '${name}';${hintText} available: ${available.join(", ")}`);
|
|
320
322
|
}
|
|
321
323
|
}
|
|
322
324
|
}
|
|
325
|
+
function migratedPluginHint(type, name) {
|
|
326
|
+
if (type === "skills" &&
|
|
327
|
+
["incremental-impl", "test-designer", "session-compound"].includes(name)) {
|
|
328
|
+
return "This skill moved to the auriga-workflow-skills plugin; install it with `install plugins --plugin auriga-workflow-skills`.";
|
|
329
|
+
}
|
|
330
|
+
if (type === "hooks" && name === "notify") {
|
|
331
|
+
return "The notify hook moved to the auriga-notify plugin; install it with `install plugins --plugin auriga-notify`.";
|
|
332
|
+
}
|
|
333
|
+
return undefined;
|
|
334
|
+
}
|
|
323
335
|
function categorySingular(type) {
|
|
324
336
|
return type === "recommended" ? "recommended skill"
|
|
325
337
|
: type === "skills" ? "skill"
|
|
@@ -576,7 +588,29 @@ async function runUi(p, version) {
|
|
|
576
588
|
const { buildScanCatalog } = await import("./scan-catalog.js");
|
|
577
589
|
const { ensureUiBundle } = await import("./ui-fetch.js");
|
|
578
590
|
const cwd = process.cwd();
|
|
579
|
-
|
|
591
|
+
// Two roots, two responsibilities (mirrors the TTY install path's pattern):
|
|
592
|
+
// - tarballRoot: where `dist/catalog.json` + the bundled DEV ui/dist live.
|
|
593
|
+
// Always read from the installed npm package; can't be fetched because
|
|
594
|
+
// dist/ is built artifact, not git content.
|
|
595
|
+
// - contentRoot: where the runtime install recipes live (CLAUDE.md,
|
|
596
|
+
// .claude/plugins.json, .claude/hooks/hooks.json, .agents/plugins/
|
|
597
|
+
// install.json + marketplace.json, skills-lock.json). These files are
|
|
598
|
+
// NOT in the npm tarball — the `files` allowlist only ships `dist/*`
|
|
599
|
+
// + npm defaults. They are fetched from GitHub, pinned to the CLI
|
|
600
|
+
// version tag, by fetchContentRoot(). Under DEV=1 fetchContentRoot
|
|
601
|
+
// short-circuits to the repo root so this is a no-op there.
|
|
602
|
+
// Without the contentRoot fix, tarball-installed Web UI users hit ENOENT
|
|
603
|
+
// on any Codex plugin install (apply handlers read .agents/plugins/
|
|
604
|
+
// install.json from packageRoot).
|
|
605
|
+
const tarballRoot = getPackageRoot();
|
|
606
|
+
let contentRoot;
|
|
607
|
+
try {
|
|
608
|
+
contentRoot = await fetchContentRoot();
|
|
609
|
+
}
|
|
610
|
+
catch (e) {
|
|
611
|
+
log.error(`Failed to fetch content: ${e.message}`);
|
|
612
|
+
return 1;
|
|
613
|
+
}
|
|
580
614
|
// 1. Resolve UI bundle directory.
|
|
581
615
|
let uiDir;
|
|
582
616
|
if (p.uiDir) {
|
|
@@ -588,7 +622,7 @@ async function runUi(p, version) {
|
|
|
588
622
|
}
|
|
589
623
|
else if (process.env.DEV === "1") {
|
|
590
624
|
// Dev convenience: prefer the locally-built ui/dist over a network fetch.
|
|
591
|
-
const localDist = path.join(
|
|
625
|
+
const localDist = path.join(tarballRoot, "ui", "dist");
|
|
592
626
|
if (fs.existsSync(path.join(localDist, "index.html"))) {
|
|
593
627
|
uiDir = localDist;
|
|
594
628
|
}
|
|
@@ -613,7 +647,9 @@ async function runUi(p, version) {
|
|
|
613
647
|
// 2. Build scan catalog → ApplyCatalog + pluginAgentsByName.
|
|
614
648
|
let scanCatalog;
|
|
615
649
|
try {
|
|
616
|
-
|
|
650
|
+
// dist/catalog.json ships in the tarball — read from tarballRoot, not
|
|
651
|
+
// the fetched content root (which doesn't carry build artifacts).
|
|
652
|
+
scanCatalog = await buildScanCatalog(tarballRoot);
|
|
617
653
|
}
|
|
618
654
|
catch (e) {
|
|
619
655
|
log.error(`Failed to build catalog: ${e.message}`);
|
|
@@ -635,7 +671,10 @@ async function runUi(p, version) {
|
|
|
635
671
|
pluginAgentsByName.set(name, def.agents);
|
|
636
672
|
}
|
|
637
673
|
const applyHandlers = buildDefaultApplyHandlers({
|
|
638
|
-
|
|
674
|
+
// contentRoot: install handlers read CLAUDE.md, plugins.json,
|
|
675
|
+
// hooks.json, install.json, marketplace.json — all CONTENT_FILES.
|
|
676
|
+
// Routing them at tarballRoot fails ENOENT for npm-installed users.
|
|
677
|
+
packageRoot: contentRoot,
|
|
639
678
|
cwd,
|
|
640
679
|
pluginAgentsByName,
|
|
641
680
|
});
|
|
@@ -656,7 +695,11 @@ async function runUi(p, version) {
|
|
|
656
695
|
port,
|
|
657
696
|
token,
|
|
658
697
|
cwd,
|
|
659
|
-
|
|
698
|
+
// server reads dist/catalog.json (tarball-shipped) via
|
|
699
|
+
// buildScanCatalog on each /api/state call; install-time content
|
|
700
|
+
// (install.json, plugins.json, CLAUDE.md, …) was already injected
|
|
701
|
+
// into applyHandlers above with contentRoot.
|
|
702
|
+
packageRoot: tarballRoot,
|
|
660
703
|
heartbeatTimeoutMs: UI_HEARTBEAT_TIMEOUT_MS,
|
|
661
704
|
applyHandlers,
|
|
662
705
|
applyCatalog,
|