auriga-cli 1.30.0 → 1.30.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/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/catalog.json +1 -1
- package/dist/plugins.js +25 -43
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -136,7 +136,7 @@ npx -y auriga-cli install plugins --agent codex --plugin session-instructions-lo
|
|
|
136
136
|
| claude-md-management | Claude Code / Codex | Audit and improve AGENTS.md / CLAUDE.md |
|
|
137
137
|
| playground | Claude Code / Codex | Build interactive HTML playgrounds |
|
|
138
138
|
| codex | Claude Code | Codex cross-model collaboration |
|
|
139
|
-
| auriga-workflow | Claude Code / Codex | The auriga workflow plugin — workflow skills plus the git lifecycle hooks that enforce them. Skills: `incremental-impl`, `test-designer`, `spec-design`, `arch-design`, `code-simplify`, `session-compound`, `goalify` (plans an autonomous goal and dispatches it via the built-in `/goal` command), `deep-review` (multi-dimensional PR review orchestrator — parallel per-dimension reviewers synthesized into an actionable punch list), `reviewer-creator` (scaffolds project-level custom reviewers under `docs/rules/review/`), `git-workflow` (git lifecycle skill), and `documentation-and-adrs` (architecture decision records and project documentation discipline — ADRs archived under `docs/architecture/`). Hooks: `commit-reminder` (PostToolUse on file edits — `Edit` / `Write` / `MultiEdit` in Claude Code, `apply_patch` in Codex — nudges to commit at the next semantic boundary when uncommitted diff vs `HEAD` exceeds 200 lines or 8 files), `pr-create-guard` (PostToolUse on `gh pr create` → injects a PR-body snapshot for five-element self-verification and flags non-Conventional-Commits titles), `pr-ready-guard` (PreToolUse on `gh pr ready` and non-draft `gh pr create` → blocks on stray planning docs, unfinalized active specs under `docs/specs/`, or unpushed commits), and `pr-merge-guard` (PreToolUse on `gh pr merge` → blocks while the PR body's Acceptance criteria section still has unchecked checklist items). 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). Installed by default through the plugin path. |
|
|
139
|
+
| auriga-workflow | Claude Code / Codex | The auriga workflow plugin — workflow skills plus the git lifecycle hooks that enforce them. Skills: `incremental-impl`, `test-designer`, `spec-design`, `arch-design`, `code-simplify`, `session-compound`, `goalify` (plans an autonomous goal and dispatches it via the built-in `/goal` command), `deep-review` (multi-dimensional PR review orchestrator — parallel per-dimension reviewers synthesized into an actionable punch list), `reviewer-creator` (scaffolds project-level custom reviewers under `docs/rules/review/`), `git-workflow` (git lifecycle skill), and `documentation-and-adrs` (architecture decision records and project documentation discipline — ADRs archived under `docs/architecture/`). Hooks: `commit-reminder` (PostToolUse on file edits — `Edit` / `Write` / `MultiEdit` in Claude Code, `apply_patch` in Codex — nudges to commit at the next semantic boundary when uncommitted diff vs `HEAD` exceeds 200 lines or 8 files), `pr-create-guard` (PostToolUse on `gh pr create` → injects a PR-body snapshot for five-element self-verification and flags non-Conventional-Commits titles), `pr-ready-guard` (PreToolUse on `gh pr ready` and non-draft `gh pr create` → blocks on stray planning docs, unfinalized active specs under `docs/specs/`, or unpushed commits), and `pr-merge-guard` (PreToolUse on `gh pr merge` → blocks while the PR body's Acceptance criteria or Test plan section still has unchecked checklist items). 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). Installed by default through the plugin path. |
|
|
140
140
|
| 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`. |
|
|
141
141
|
| session-instructions-loader | Codex | Codex-only SessionStart plugin that injects ancestor `AGENTS.md` files plus repo-configured extra instruction files. |
|
|
142
142
|
|
package/README.zh-CN.md
CHANGED
|
@@ -136,7 +136,7 @@ npx -y auriga-cli install plugins --agent codex --plugin session-instructions-lo
|
|
|
136
136
|
| claude-md-management | Claude Code / Codex | 审计和改进 AGENTS.md / CLAUDE.md |
|
|
137
137
|
| playground | Claude Code / Codex | 构建交互式 HTML playground |
|
|
138
138
|
| codex | Claude Code | Codex 跨模型协作 |
|
|
139
|
-
| auriga-workflow | Claude Code / Codex | auriga 工作流插件 —— 工作流 skill 加上强制执行工作流的 git 生命周期 hook。Skills:`incremental-impl`、`test-designer`、`spec-design`、`arch-design`、`code-simplify`、`session-compound`、`goalify`(plan 出自驱 goal 并通过内置 `/goal` 命令分发执行)、`deep-review`(多维度 PR review 编排器——并行派发各维度 reviewer,汇总成可执行的 punch list)、`reviewer-creator`(在 `docs/rules/review/` 下生成项目级自定义 reviewer)、`git-workflow`(git 生命周期 skill)、`documentation-and-adrs`(架构决策记录与项目文档规范,ADR 归档到 `docs/architecture/`)。Hooks:`commit-reminder`(文件编辑的 PostToolUse —— Claude Code 匹配 `Edit` / `Write` / `MultiEdit`,Codex 匹配 `apply_patch` —— 未提交 diff 对比 `HEAD` 超过 200 行或 8 个文件时,提醒在下一个语义边界 commit)、`pr-create-guard`(`gh pr create` 的 PostToolUse —— 注入 PR body 快照供五要素自检,并对不符合 Conventional Commits 的标题提示)、`pr-ready-guard`(`gh pr ready` 与非 draft `gh pr create` 的 PreToolUse —— 拦截游离规划文档、`docs/specs/` 内未结案的活跃 spec、未 push commits)、`pr-merge-guard`(`gh pr merge` 的 PreToolUse —— PR body
|
|
139
|
+
| auriga-workflow | Claude Code / Codex | auriga 工作流插件 —— 工作流 skill 加上强制执行工作流的 git 生命周期 hook。Skills:`incremental-impl`、`test-designer`、`spec-design`、`arch-design`、`code-simplify`、`session-compound`、`goalify`(plan 出自驱 goal 并通过内置 `/goal` 命令分发执行)、`deep-review`(多维度 PR review 编排器——并行派发各维度 reviewer,汇总成可执行的 punch list)、`reviewer-creator`(在 `docs/rules/review/` 下生成项目级自定义 reviewer)、`git-workflow`(git 生命周期 skill)、`documentation-and-adrs`(架构决策记录与项目文档规范,ADR 归档到 `docs/architecture/`)。Hooks:`commit-reminder`(文件编辑的 PostToolUse —— Claude Code 匹配 `Edit` / `Write` / `MultiEdit`,Codex 匹配 `apply_patch` —— 未提交 diff 对比 `HEAD` 超过 200 行或 8 个文件时,提醒在下一个语义边界 commit)、`pr-create-guard`(`gh pr create` 的 PostToolUse —— 注入 PR body 快照供五要素自检,并对不符合 Conventional Commits 的标题提示)、`pr-ready-guard`(`gh pr ready` 与非 draft `gh pr create` 的 PreToolUse —— 拦截游离规划文档、`docs/specs/` 内未结案的活跃 spec、未 push commits)、`pr-merge-guard`(`gh pr merge` 的 PreToolUse —— PR body 的验收标准或测试计划章节仍有未勾选清单项时拦截合并)。两个 PostToolUse hook 在 Claude Code / Codex 上完全对齐;Codex 仅对 `pr-ready-guard` 的 PreToolUse `additionalContext` 信息路径 fail-open(block 路径两边一致)。默认通过插件路径安装。 |
|
|
140
140
|
| auriga-notify *(opt-in)* | Claude Code | Claude Code `Notification` 事件的 macOS 原生通知插件。支持焦点感知仅提示音、点击唤起终端、按项目分组通知,并迁移旧 `config.json` / `icon.png`。不随 `install --all` 默认安装,需要显式执行 `install plugins --plugin auriga-notify`。 |
|
|
141
141
|
| session-instructions-loader | Codex | Codex-only SessionStart 插件,注入上层目录的 `AGENTS.md` 和仓库配置的额外 instruction 文件。 |
|
|
142
142
|
|
package/dist/catalog.json
CHANGED
package/dist/plugins.js
CHANGED
|
@@ -3,7 +3,7 @@ import os from "node:os";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { checkbox, select } from "@inquirer/prompts";
|
|
5
5
|
import { parse as parseToml } from "smol-toml";
|
|
6
|
-
import {
|
|
6
|
+
import { validateCodexMarketplace, } from "./codex-plugin-config.js";
|
|
7
7
|
import { validateMarketplaceField } from "./marketplace.js";
|
|
8
8
|
import { atomicWriteFile, exec, execAsync, log, withEsc } from "./utils.js";
|
|
9
9
|
// Plugin names and plugin-package names end up in `claude plugins ...`
|
|
@@ -467,12 +467,15 @@ function codexSupportsPluginAdd() {
|
|
|
467
467
|
}
|
|
468
468
|
}
|
|
469
469
|
// `--enable plugins` turns on the global Codex plugins feature; `--enable
|
|
470
|
-
// plugin_hooks`
|
|
471
|
-
// feature
|
|
472
|
-
//
|
|
473
|
-
//
|
|
474
|
-
//
|
|
475
|
-
//
|
|
470
|
+
// plugin_hooks` turns on the global plugin-hooks feature. Both are plain
|
|
471
|
+
// Codex feature toggles (`-c features.<name>=true`), not per-plugin state —
|
|
472
|
+
// `plugin_hooks` is appended for first-party plugins, which ship hooks, and
|
|
473
|
+
// is harmless for any that don't (the feature simply has no hooks to run).
|
|
474
|
+
// We do not inspect plugin payload to decide this: Codex owns plugin
|
|
475
|
+
// content via `codex plugin add`, and the published CLI never fetches the
|
|
476
|
+
// payload anyway. The plugin key (`<name>@<marketplace>`) is validated
|
|
477
|
+
// upstream (PLUGIN_NAME_RE / MARKETPLACE_NAME_RE), so no shell
|
|
478
|
+
// metacharacter can reach this interpolated command.
|
|
476
479
|
function codexPluginAddCommand(pluginKey, hasHooks) {
|
|
477
480
|
const enable = hasHooks
|
|
478
481
|
? "--enable plugins --enable plugin_hooks"
|
|
@@ -524,16 +527,6 @@ function readCodexMarketplaceSource(marketplaceName) {
|
|
|
524
527
|
function isCodexMarketplaceDifferentSource(error) {
|
|
525
528
|
return /already added from a different source/i.test(commandErrorText(error));
|
|
526
529
|
}
|
|
527
|
-
function pluginHasHooks(packageRoot, plugin) {
|
|
528
|
-
const relativeManifestPath = codexManifestPath(plugin);
|
|
529
|
-
if (!relativeManifestPath)
|
|
530
|
-
return false;
|
|
531
|
-
const manifestPath = path.join(packageRoot, relativeManifestPath);
|
|
532
|
-
if (!fs.existsSync(manifestPath))
|
|
533
|
-
return false;
|
|
534
|
-
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf-8"));
|
|
535
|
-
return typeof manifest.hooks === "string" || Array.isArray(manifest.hooks);
|
|
536
|
-
}
|
|
537
530
|
function resolveSelectedCodexMarketplacePlugins(localMarketplace, localSelected) {
|
|
538
531
|
const localMpByName = new Map(localMarketplace.plugins.map((p) => [p.name, p]));
|
|
539
532
|
return localSelected.map((p) => {
|
|
@@ -544,17 +537,6 @@ function resolveSelectedCodexMarketplacePlugins(localMarketplace, localSelected)
|
|
|
544
537
|
return plugin;
|
|
545
538
|
});
|
|
546
539
|
}
|
|
547
|
-
function ensureCodexPluginManifests(packageRoot, plugins) {
|
|
548
|
-
for (const plugin of plugins) {
|
|
549
|
-
const manifestPath = codexManifestPath(plugin);
|
|
550
|
-
if (!manifestPath) {
|
|
551
|
-
throw new Error(`Codex marketplace.json: plugin ${plugin.name} must use a local source.path`);
|
|
552
|
-
}
|
|
553
|
-
if (fs.existsSync(path.join(packageRoot, manifestPath)))
|
|
554
|
-
continue;
|
|
555
|
-
throw new Error(`Codex plugin ${plugin.name} manifest missing at ${manifestPath}`);
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
540
|
async function addCodexMarketplaceWithRetry(marketplaceName, addCommand, expectedSource, opts, marketplaceExecOpts, failures) {
|
|
559
541
|
const registeredSource = readCodexMarketplaceSource(marketplaceName);
|
|
560
542
|
if (registeredSource !== null) {
|
|
@@ -599,20 +581,22 @@ async function addCodexMarketplaceWithRetry(marketplaceName, addCommand, expecte
|
|
|
599
581
|
}
|
|
600
582
|
}
|
|
601
583
|
// Builds the `codex plugin add` work list: one entry per selected plugin.
|
|
602
|
-
// Local plugins
|
|
603
|
-
//
|
|
604
|
-
//
|
|
605
|
-
//
|
|
606
|
-
//
|
|
607
|
-
//
|
|
608
|
-
|
|
584
|
+
// Local (first-party) plugins always enable `plugin_hooks` — they ship
|
|
585
|
+
// hooks, and the flag is a harmless global toggle for any that don't. We
|
|
586
|
+
// deliberately do not inspect plugin payload to decide this: Codex owns
|
|
587
|
+
// plugin content via `codex plugin add`, and the published CLI never
|
|
588
|
+
// fetches the payload. External plugins emit a key straight from
|
|
589
|
+
// extra_plugin_configs.json (Codex CLI fetches the upstream manifest
|
|
590
|
+
// itself) and never set `hasHooks` — acceptable while no external plugin
|
|
591
|
+
// ships hooks; once one does, add an explicit flag to the extra config entry.
|
|
592
|
+
function composeCodexPluginAdds(localMarketplace, selectedMarketplacePlugins, externalSelected) {
|
|
609
593
|
const adds = [];
|
|
610
594
|
if (localMarketplace) {
|
|
611
595
|
for (const plugin of selectedMarketplacePlugins) {
|
|
612
596
|
adds.push({
|
|
613
597
|
key: `${plugin.name}@${localMarketplace.name}`,
|
|
614
598
|
name: plugin.name,
|
|
615
|
-
hasHooks:
|
|
599
|
+
hasHooks: true,
|
|
616
600
|
});
|
|
617
601
|
}
|
|
618
602
|
}
|
|
@@ -708,16 +692,14 @@ async function installCodexPlugins(packageRoot, opts) {
|
|
|
708
692
|
await addCodexMarketplaceWithRetry(mp.name, codexExternalMarketplaceAddCommand(mp.source), codexExternalMarketplaceSource(mp.source), opts, marketplaceExecOpts, failures);
|
|
709
693
|
}
|
|
710
694
|
if (failures.length === 0) {
|
|
711
|
-
//
|
|
712
|
-
//
|
|
713
|
-
//
|
|
714
|
-
//
|
|
715
|
-
// marketplace snapshot registered above — no manual cache copy.
|
|
695
|
+
// The plugin payload is materialized by `codex plugin add` from the
|
|
696
|
+
// marketplace snapshot registered above — no manual cache copy, and no
|
|
697
|
+
// local manifest inspection. A plugin missing from the snapshot surfaces
|
|
698
|
+
// as a `codex plugin add` failure, already caught and aggregated below.
|
|
716
699
|
const selectedMarketplacePlugins = localMarketplace
|
|
717
700
|
? resolveSelectedCodexMarketplacePlugins(localMarketplace, localSelected)
|
|
718
701
|
: [];
|
|
719
|
-
|
|
720
|
-
const pluginAdds = composeCodexPluginAdds(packageRoot, localMarketplace, selectedMarketplacePlugins, externalSelected);
|
|
702
|
+
const pluginAdds = composeCodexPluginAdds(localMarketplace, selectedMarketplacePlugins, externalSelected);
|
|
721
703
|
for (const entry of pluginAdds) {
|
|
722
704
|
try {
|
|
723
705
|
exec(codexPluginAddCommand(entry.key, entry.hasHooks), marketplaceExecOpts);
|