helloagents 3.0.16-beta.1 → 3.0.17-beta.1

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "helloagents",
3
- "version": "3.0.16-beta.1",
3
+ "version": "3.0.17-beta.1",
4
4
  "description": "HelloAGENTS — The orchestration kernel that makes any AI CLI smarter. Adds intelligent routing, quality verification (Ralph Loop), safety guards, and notifications.",
5
5
  "author": {
6
6
  "name": "HelloWind",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "helloagents",
3
- "version": "3.0.16-beta.1",
3
+ "version": "3.0.17-beta.1",
4
4
  "description": "HelloAGENTS — Quality-driven orchestration kernel for AI CLIs with intelligent routing, quality verification (Ralph Loop), safety guards, and notifications.",
5
5
  "author": {
6
6
  "name": "HelloWind",
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  **A workflow layer for AI coding CLIs: skills, project knowledge, delivery checks, safer config writes, and resumable execution.**
10
10
 
11
- [![Version](https://img.shields.io/badge/version-3.0.16-orange.svg)](./package.json)
11
+ [![Version](https://img.shields.io/badge/version-3.0.17-orange.svg)](./package.json)
12
12
  [![npm](https://img.shields.io/npm/v/helloagents.svg)](https://www.npmjs.com/package/helloagents)
13
13
  [![Node](https://img.shields.io/badge/node-%3E%3D18-339933.svg)](./package.json)
14
14
  [![Skills](https://img.shields.io/badge/skills-14-6366f1.svg)](./skills)
@@ -30,7 +30,7 @@
30
30
  ## Contents
31
31
 
32
32
  - [What HelloAGENTS Does](#what-helloagents-does)
33
- - [What Changed Since v3.0.15](#what-changed-since-v3015)
33
+ - [What Changed Since v3.0.16](#what-changed-since-v3016)
34
34
  - [Core Features](#core-features)
35
35
  - [Quick Start](#quick-start)
36
36
  - [CLI Management](#cli-management)
@@ -77,17 +77,15 @@ HelloAGENTS adds a workflow layer on top of Claude Code, Gemini CLI, and Codex C
77
77
  | Completion is vague | Natural language says “done” | Delivery checks use state, evidence, and verification |
78
78
  | Config writes are risky | CLI files can drift | Install, update, cleanup, and doctor flows check managed files |
79
79
 
80
- ## What Changed Since v3.0.15
80
+ ## What Changed Since v3.0.16
81
81
 
82
- These are the main user-visible changes in `v3.0.16`, compared with `v3.0.15 beta`:
82
+ These are the main user-visible changes in `v3.0.17`, compared with `v3.0.16 beta`:
83
83
 
84
- - Codex notifications now handle both Codex TUI and `codex exec` completion events, so turn-state gates, delivery checks, and completion notifications stay consistent across Codex entrypoints.
85
- - Codex on Windows now writes the managed notify command through the command shim, reducing failures caused by direct script paths or shell-specific resolution.
86
- - Runtime configuration reads now reuse the current session cache when available, reducing repeated `~/.helloagents/helloagents.json` reads while preserving explicit refresh behavior.
87
- - Persistent carrier files no longer snapshot user settings; runtime injection and final output formatting resolve current settings at execution time.
88
- - Install tracking is stricter after partial host setup, so `helloagents update --all` can preserve each CLI’s detected or tracked mode more reliably.
89
- - UI rule boundaries are clearer: the shared UI baseline is the minimum quality line, and `hello-ui` adds concrete design, implementation, and visual validation rules in global mode, activated projects, or explicit UI workflows.
90
- - One-shot installers now support `HELLOAGENTS_ACTION=cleanup` for host cleanup without uninstalling the package.
84
+ - Managed host configuration now uses `helloagents-js.cmd` as the single stable entrypoint across Windows, macOS, and Linux.
85
+ - Codex `notify` now writes `notify = ["helloagents-js.cmd", "codex-notify"]`, so a synced `config.toml` no longer needs OS-specific command names.
86
+ - Claude Code and Gemini CLI standby hooks now use the same managed entrypoint as Codex, keeping host configuration wording and behavior consistent.
87
+ - The package exposes `helloagents-js.cmd` as an npm bin alias while keeping the runtime command path independent of Node global package locations.
88
+ - Runtime-root refresh now retries transient Windows filesystem rename errors, reducing occasional update/install failures when files are still being released.
91
89
 
92
90
  ## Core Features
93
91
 
@@ -235,10 +233,10 @@ The CLI manages host files explicitly:
235
233
  npm install -g helloagents
236
234
  ```
237
235
 
238
- If another executable named `helloagents` already exists in your `PATH`, use the stable alias:
236
+ If another executable named `helloagents` already exists in your `PATH`, use the stable managed-entry alias:
239
237
 
240
238
  ```bash
241
- helloagents-js
239
+ helloagents-js.cmd
242
240
  ```
243
241
 
244
242
  By default, `postinstall` installs the package command, initializes `~/.helloagents/helloagents.json`, and syncs runtime files to `~/.helloagents/helloagents`. No host CLI is deployed unless you set `HELLOAGENTS=target[:mode]`, such as `HELLOAGENTS=codex:global`.
@@ -316,7 +314,7 @@ If you omit `--standby` or `--global`, HelloAGENTS first reuses the tracked/dete
316
314
 
317
315
  Use these when you do not want to depend on the `helloagents` binary being available during package updates. In `HELLOAGENTS=target[:mode]`, target can be `all`, `claude`, `gemini`, or `codex`; mode can be `standby` or `global`, and defaults to `standby`.
318
316
 
319
- Host configs use the stable `helloagents-js` entrypoint and runtime root `~/.helloagents/helloagents`, so Node global package paths can change without breaking managed hooks or Codex `notify`.
317
+ Host configs use the stable `helloagents-js.cmd` entrypoint and runtime root `~/.helloagents/helloagents`, so Node global package paths can change without breaking managed hooks or Codex `notify`. The same managed `config.toml` works across Windows, macOS, and Linux.
320
318
 
321
319
  #### npm commands
322
320
 
@@ -643,7 +641,7 @@ Codex is rules-file driven by default.
643
641
 
644
642
  - standby writes `~/.codex/AGENTS.md`
645
643
  - standby writes a managed `model_instructions_file = "~/.codex/AGENTS.md"`
646
- - standby writes a managed `notify = ["helloagents-js", "codex-notify"]` command for closeout notification
644
+ - standby writes a managed `notify = ["helloagents-js.cmd", "codex-notify"]` command for closeout notification
647
645
  - standby creates `~/.codex/helloagents -> ~/.helloagents/helloagents`
648
646
  - global mode installs the native local-plugin chain
649
647
  - HelloAGENTS does not enable Codex hooks by default
package/README_CN.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  **面向 AI 编码 CLI 的工作流层:技能、知识库、交付检查、更安全的配置写入,以及可恢复的执行流程。**
10
10
 
11
- [![Version](https://img.shields.io/badge/version-3.0.16-orange.svg)](./package.json)
11
+ [![Version](https://img.shields.io/badge/version-3.0.17-orange.svg)](./package.json)
12
12
  [![npm](https://img.shields.io/npm/v/helloagents.svg)](https://www.npmjs.com/package/helloagents)
13
13
  [![Node](https://img.shields.io/badge/node-%3E%3D18-339933.svg)](./package.json)
14
14
  [![Skills](https://img.shields.io/badge/skills-14-6366f1.svg)](./skills)
@@ -30,7 +30,7 @@
30
30
  ## 目录
31
31
 
32
32
  - [HelloAGENTS 做什么](#helloagents-做什么)
33
- - [相对 v3.0.15 的真实变化](#相对-v3015-的真实变化)
33
+ - [相对 v3.0.16 的真实变化](#相对-v3016-的真实变化)
34
34
  - [核心功能](#核心功能)
35
35
  - [快速开始](#快速开始)
36
36
  - [CLI 管理](#cli-管理)
@@ -77,17 +77,15 @@ HelloAGENTS 叠加在 Claude Code、Gemini CLI 和 Codex CLI 之上,帮助模
77
77
  | 完成态模糊 | 自然语言说“完成” | 按状态、证据和验证结果交付 |
78
78
  | 配置容易漂移 | CLI 文件可能不一致 | 安装、更新、清理和 doctor 会检查受管文件 |
79
79
 
80
- ## 相对 v3.0.15 的真实变化
80
+ ## 相对 v3.0.16 的真实变化
81
81
 
82
- 下面是当前 `v3.0.16` 相对 `v3.0.15 beta` 的主要可见变化:
82
+ 下面是当前 `v3.0.17` 相对 `v3.0.16 beta` 的主要可见变化:
83
83
 
84
- - Codex 通知现在同时覆盖 Codex TUI `codex exec` 的完成事件,turn-state 门控、交付检查和完成通知在不同入口下保持一致。
85
- - Windows 下的 Codex 受管通知命令改用命令 shim,减少直接脚本路径或 shell 解析差异导致的失败。
86
- - 运行时配置读取会优先复用当前会话缓存,减少重复读取 `~/.helloagents/helloagents.json`,同时保留显式刷新行为。
87
- - 持久 carrier 文件不再快照用户设置;运行时注入和最终输出格式在执行时解析当前配置。
88
- - 部分宿主安装成功后,安装追踪更严格,`helloagents update --all` 可以更可靠地保留每个 CLI 的检测模式或追踪模式。
89
- - UI 规则边界更清晰:共享 UI 基线是最低质量线;在全局模式、已激活项目或显式 UI 工作流中,`hello-ui` 补充具体设计、实现和视觉验收规则。
90
- - 一键安装脚本新增 `HELLOAGENTS_ACTION=cleanup`,可只清理宿主集成而不卸载包。
84
+ - 受管宿主配置统一使用 `helloagents-js.cmd` 作为 Windows、macOS Linux 三端稳定入口。
85
+ - Codex `notify` 统一写入 `notify = ["helloagents-js.cmd", "codex-notify"]`,同步同一份 `config.toml` 时不再需要区分系统。
86
+ - Claude Code 与 Gemini CLI 的标准模式 hooks 也使用同一受管入口,与 Codex 的配置行为和文档表述保持一致。
87
+ - npm 包新增 `helloagents-js.cmd` bin alias,同时保持运行命令不依赖 Node 全局包的实际安装路径。
88
+ - 稳定运行根目录刷新增加 Windows 临时文件系统重试,减少文件释放延迟导致的偶发更新/安装失败。
91
89
 
92
90
  ## 核心功能
93
91
 
@@ -235,10 +233,10 @@ CLI 显式管理宿主文件:
235
233
  npm install -g helloagents
236
234
  ```
237
235
 
238
- 如果系统里已经有别的 `helloagents` 可执行文件,可以使用稳定别名:
236
+ 如果系统里已经有别的 `helloagents` 可执行文件,可以使用稳定的受管入口别名:
239
237
 
240
238
  ```bash
241
- helloagents-js
239
+ helloagents-js.cmd
242
240
  ```
243
241
 
244
242
  默认情况下,`postinstall` 会安装包命令、初始化 `~/.helloagents/helloagents.json`,并把运行时文件同步到 `~/.helloagents/helloagents`。如果希望 npm 在安装或更新后直接部署,设置 `HELLOAGENTS=目标[:模式]`,例如 `HELLOAGENTS=codex:global`。
@@ -316,7 +314,7 @@ helloagents doctor codex --json
316
314
 
317
315
  当你不想依赖更新过程中的 `helloagents` 可执行文件时,用 npm 或一键脚本。`HELLOAGENTS=目标[:模式]` 中,目标支持 `all`、`claude`、`gemini`、`codex`;模式支持 `standby`、`global`,省略时默认 `standby`。
318
316
 
319
- 宿主配置使用稳定的 `helloagents-js` 入口和运行根目录 `~/.helloagents/helloagents`,Node 全局包路径变化不会破坏受管 hooks 或 Codex `notify`。
317
+ 宿主配置使用稳定的 `helloagents-js.cmd` 入口和运行根目录 `~/.helloagents/helloagents`,Node 全局包路径变化不会破坏受管 hooks 或 Codex `notify`。同一份受管 `config.toml` 可在 Windows、macOS 和 Linux 之间同步。
320
318
 
321
319
  #### npm 命令
322
320
 
@@ -645,7 +643,7 @@ Codex 默认走规则文件驱动。
645
643
 
646
644
  - 标准模式写入 `~/.codex/AGENTS.md`
647
645
  - 标准模式写入受管 `model_instructions_file = "~/.codex/AGENTS.md"`
648
- - 标准模式写入受管 `notify = ["helloagents-js", "codex-notify"]` 命令用于收尾通知
646
+ - 标准模式写入受管 `notify = ["helloagents-js.cmd", "codex-notify"]` 命令用于收尾通知
649
647
  - 标准模式创建 `~/.codex/helloagents -> ~/.helloagents/helloagents`
650
648
  - 全局模式安装原生本地插件流程
651
649
  - HelloAGENTS 默认不启用 Codex hooks
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "helloagents",
3
- "version": "3.0.16-beta.1",
3
+ "version": "3.0.17-beta.1",
4
4
  "description": "Quality-driven orchestration kernel for AI CLIs",
5
5
  "contextFileName": "bootstrap.md",
6
6
  "author": "HelloWind",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "helloagents",
3
- "version": "3.0.16-beta.1",
3
+ "version": "3.0.17-beta.1",
4
4
  "type": "module",
5
5
  "description": "HelloAGENTS — The orchestration kernel that makes any AI CLI smarter. Adds intelligent routing, quality verification (Ralph Loop), safety guards, and notifications.",
6
6
  "author": "HelloWind",
@@ -13,6 +13,7 @@
13
13
  "bin": {
14
14
  "helloagents": "cli.mjs",
15
15
  "helloagents-js": "cli.mjs",
16
+ "helloagents-js.cmd": "cli.mjs",
16
17
  "helloagents-turn-state": "scripts/turn-state-cli.mjs"
17
18
  },
18
19
  "scripts": {
@@ -7,9 +7,7 @@ import {
7
7
  export const CODEX_PLUGIN_CONFIG_HEADER = '[plugins."helloagents@local-plugins"]'
8
8
  export const CODEX_MANAGED_TOML_COMMENT = '# helloagents-managed'
9
9
  export const CODEX_MANAGED_MODEL_INSTRUCTIONS_PATH = '~/.codex/AGENTS.md'
10
- export const CODEX_MANAGED_NOTIFY_COMMAND = process.platform === 'win32'
11
- ? 'helloagents-js.cmd'
12
- : 'helloagents-js'
10
+ export const CODEX_MANAGED_NOTIFY_COMMAND = 'helloagents-js.cmd'
13
11
  export const CODEX_MANAGED_NOTIFY_VALUE = `["${CODEX_MANAGED_NOTIFY_COMMAND}", "codex-notify"]`
14
12
 
15
13
  function normalizePath(value = '') {
@@ -33,11 +31,7 @@ export function isManagedCodexModelInstruction(line = '') {
33
31
 
34
32
  export function isManagedCodexNotify(line = '') {
35
33
  const value = String(line || '').replace(/\\/g, '/')
36
- return value.includes(CODEX_MANAGED_TOML_COMMENT)
37
- || (
38
- value.includes('helloagents-js')
39
- && value.includes('codex-notify')
40
- )
34
+ return value.includes(CODEX_MANAGED_NOTIFY_VALUE)
41
35
  }
42
36
 
43
37
  export function isManagedCodexBackupInstruction(line = '') {
@@ -87,7 +87,7 @@ HelloAGENTS v${pkgVersion} — The orchestration kernel for AI CLIs
87
87
  ${msg('安装', 'Install')}:
88
88
  npm install -g helloagents ${msg('(安装命令并同步稳定运行根目录;CLI 部署需显式执行 helloagents install ...)', '(installs the command and syncs the stable runtime root; deploy to CLIs explicitly with helloagents install ...)')}
89
89
  HELLOAGENTS=codex:global npm install -g helloagents
90
- helloagents-js ${msg('(稳定别名,避免与系统中同名可执行文件冲突)', '(stable alias to avoid conflicts with system executables of the same name)')}
90
+ helloagents-js.cmd ${msg('(受管宿主配置的跨平台稳定入口)', '(cross-platform stable entrypoint for managed host configs)')}
91
91
 
92
92
  ${msg('模式切换', 'Mode switching')}:
93
93
  helloagents --global ${msg('全局模式(自动尝试 Claude/Gemini 插件或扩展;Codex 自动装原生本地插件)', 'Global mode (auto-attempts Claude/Gemini plugins or extensions; native local plugin auto-install for Codex)')}
@@ -43,6 +43,26 @@ function samePath(left, right) {
43
43
  return process.platform === 'win32' ? a.toLowerCase() === b.toLowerCase() : a === b
44
44
  }
45
45
 
46
+ function wait(ms) {
47
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms)
48
+ }
49
+
50
+ function retryTransientFs(operation) {
51
+ let lastError
52
+ for (let attempt = 0; attempt < 6; attempt += 1) {
53
+ try {
54
+ return operation()
55
+ } catch (error) {
56
+ lastError = error
57
+ if (!['EPERM', 'EBUSY', 'ENOTEMPTY'].includes(error?.code) || attempt === 5) {
58
+ throw error
59
+ }
60
+ wait(40 * (attempt + 1))
61
+ }
62
+ }
63
+ throw lastError
64
+ }
65
+
46
66
  /** Sync package runtime files into the stable root without copying repo-only files. */
47
67
  export function syncRuntimeRoot(sourceRoot, runtimeRoot) {
48
68
  const source = resolve(sourceRoot)
@@ -57,8 +77,10 @@ export function syncRuntimeRoot(sourceRoot, runtimeRoot) {
57
77
 
58
78
  try {
59
79
  copyEntries(source, staging, RUNTIME_ROOT_ENTRIES)
60
- removeIfExists(target)
61
- renameSync(staging, target)
80
+ retryTransientFs(() => {
81
+ removeIfExists(target)
82
+ renameSync(staging, target)
83
+ })
62
84
  return { synced: true, root: target }
63
85
  } catch (error) {
64
86
  removeIfExists(staging)
@@ -132,9 +132,9 @@ export function cleanSettingsHooks(settingsPath, cleanPermissions = false) {
132
132
 
133
133
  function rewriteHookCommandToCli(command = '', pathVar = '') {
134
134
  const replacements = new Map([
135
- [`node "${pathVar}/scripts/notify.mjs"`, 'helloagents-js notify'],
136
- [`node "${pathVar}/scripts/guard.mjs"`, 'helloagents-js guard'],
137
- [`node "${pathVar}/scripts/ralph-loop.mjs"`, 'helloagents-js ralph-loop'],
135
+ [`node "${pathVar}/scripts/notify.mjs"`, 'helloagents-js.cmd notify'],
136
+ [`node "${pathVar}/scripts/guard.mjs"`, 'helloagents-js.cmd guard'],
137
+ [`node "${pathVar}/scripts/ralph-loop.mjs"`, 'helloagents-js.cmd ralph-loop'],
138
138
  ]);
139
139
 
140
140
  let next = command;