helloagents 3.0.15-beta.1 → 3.0.16-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.
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +27 -19
- package/README_CN.md +29 -21
- package/bootstrap-lite.md +7 -8
- package/bootstrap.md +7 -8
- package/gemini-extension.json +1 -1
- package/install.ps1 +4 -1
- package/install.sh +4 -1
- package/package.json +1 -1
- package/scripts/capability-registry.mjs +1 -1
- package/scripts/cli-codex-config.mjs +4 -1
- package/scripts/cli-lifecycle-hosts.mjs +29 -7
- package/scripts/cli-lifecycle.mjs +15 -6
- package/scripts/cli-runtime-carrier.mjs +3 -24
- package/scripts/notify-events.mjs +3 -1
- package/scripts/notify-route.mjs +1 -1
- package/scripts/notify-ui.mjs +10 -13
- package/scripts/notify.mjs +12 -4
- package/scripts/workflow-core.mjs +1 -1
- package/skills/commands/commit/SKILL.md +1 -1
- package/skills/commands/help/SKILL.md +3 -1
- package/skills/hello-ui/SKILL.md +3 -3
- package/skills/helloagents/SKILL.md +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "helloagents",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.16-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.
|
|
3
|
+
"version": "3.0.16-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
|
-
[](./package.json)
|
|
12
12
|
[](https://www.npmjs.com/package/helloagents)
|
|
13
13
|
[](./package.json)
|
|
14
14
|
[](./skills)
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
## Contents
|
|
31
31
|
|
|
32
32
|
- [What HelloAGENTS Does](#what-helloagents-does)
|
|
33
|
-
- [What Changed Since v3.0.
|
|
33
|
+
- [What Changed Since v3.0.15](#what-changed-since-v3015)
|
|
34
34
|
- [Core Features](#core-features)
|
|
35
35
|
- [Quick Start](#quick-start)
|
|
36
36
|
- [CLI Management](#cli-management)
|
|
@@ -77,20 +77,17 @@ 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.
|
|
80
|
+
## What Changed Since v3.0.15
|
|
81
81
|
|
|
82
|
-
These are the main user-visible changes in `v3.0.
|
|
82
|
+
These are the main user-visible changes in `v3.0.16`, compared with `v3.0.15 beta`:
|
|
83
83
|
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
- Output-format settings stay aligned across carriers and runtime injection, reducing cases where the final closeout layout is missed.
|
|
92
|
-
- Debugging, testing, verification, and planning flows now include feedback loops, vertical-slice TDD, domain language, and AFK/HITL task markers while reusing the existing skills and templates.
|
|
93
|
-
- Runtime prompts now use more consistent wording, and the docs explicitly state that AI CLI sessions must be restarted after reinstalling, refreshing, or switching modes.
|
|
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.
|
|
94
91
|
|
|
95
92
|
## Core Features
|
|
96
93
|
|
|
@@ -116,7 +113,7 @@ HelloAGENTS includes 14 `hello-*` skills. They are loaded only when the current
|
|
|
116
113
|
| `hello-reflect` | reusable lessons and knowledge updates |
|
|
117
114
|
|
|
118
115
|
All UI work first follows the shared UI quality baseline.
|
|
119
|
-
In activated projects or explicit UI workflows, `hello-ui` adds deeper design-contract execution, design-system mapping, and visual validation.
|
|
116
|
+
In global mode, activated projects, or explicit UI workflows, `hello-ui` adds deeper design-contract execution, design-system mapping, and visual validation on top of that baseline.
|
|
120
117
|
When visual evidence is required, HelloAGENTS records it in the current session `artifacts/visual.json`.
|
|
121
118
|
|
|
122
119
|
### 2) Commands for different work styles
|
|
@@ -386,6 +383,9 @@ HELLOAGENTS=claude:standby HELLOAGENTS_ACTION=update curl -fsSL https://raw.gith
|
|
|
386
383
|
# Switch branch
|
|
387
384
|
HELLOAGENTS=all:global HELLOAGENTS_ACTION=switch-branch HELLOAGENTS_BRANCH=beta curl -fsSL https://raw.githubusercontent.com/hellowind777/helloagents/main/install.sh | sh
|
|
388
385
|
|
|
386
|
+
# Cleanup host integration without uninstalling the package
|
|
387
|
+
HELLOAGENTS=codex:standby HELLOAGENTS_ACTION=cleanup curl -fsSL https://raw.githubusercontent.com/hellowind777/helloagents/main/install.sh | sh
|
|
388
|
+
|
|
389
389
|
# Uninstall
|
|
390
390
|
HELLOAGENTS=gemini HELLOAGENTS_ACTION=uninstall curl -fsSL https://raw.githubusercontent.com/hellowind777/helloagents/main/install.sh | sh
|
|
391
391
|
```
|
|
@@ -402,6 +402,9 @@ $env:HELLOAGENTS="claude:standby"; $env:HELLOAGENTS_ACTION="update"; irm https:/
|
|
|
402
402
|
# Switch branch
|
|
403
403
|
$env:HELLOAGENTS="all:global"; $env:HELLOAGENTS_ACTION="switch-branch"; $env:HELLOAGENTS_BRANCH="beta"; irm https://raw.githubusercontent.com/hellowind777/helloagents/main/install.ps1 | iex
|
|
404
404
|
|
|
405
|
+
# Cleanup host integration without uninstalling the package
|
|
406
|
+
$env:HELLOAGENTS="codex:standby"; $env:HELLOAGENTS_ACTION="cleanup"; irm https://raw.githubusercontent.com/hellowind777/helloagents/main/install.ps1 | iex
|
|
407
|
+
|
|
405
408
|
# Uninstall
|
|
406
409
|
$env:HELLOAGENTS="gemini"; $env:HELLOAGENTS_ACTION="uninstall"; irm https://raw.githubusercontent.com/hellowind777/helloagents/main/install.ps1 | iex
|
|
407
410
|
```
|
|
@@ -561,8 +564,7 @@ UI work follows this priority:
|
|
|
561
564
|
|
|
562
565
|
1. current `plan.md` or PRD UI decisions
|
|
563
566
|
2. `.helloagents/DESIGN.md`
|
|
564
|
-
3. shared UI quality baseline
|
|
565
|
-
4. `hello-ui` implementation and validation rules
|
|
567
|
+
3. `hello-ui` implementation and validation rules, together with the shared UI quality baseline
|
|
566
568
|
|
|
567
569
|
For heavier UI work, `contract.json` can require:
|
|
568
570
|
|
|
@@ -589,7 +591,7 @@ Config file:
|
|
|
589
591
|
~/.helloagents/helloagents.json
|
|
590
592
|
```
|
|
591
593
|
|
|
592
|
-
Default shape:
|
|
594
|
+
Default shape. `host_install_modes` is added when per-CLI modes are tracked:
|
|
593
595
|
|
|
594
596
|
```json
|
|
595
597
|
{
|
|
@@ -601,7 +603,8 @@ Default shape:
|
|
|
601
603
|
"kb_create_mode": 1,
|
|
602
604
|
"project_store_mode": "local",
|
|
603
605
|
"commit_attribution": "",
|
|
604
|
-
"install_mode": "standby"
|
|
606
|
+
"install_mode": "standby",
|
|
607
|
+
"host_install_modes": {}
|
|
605
608
|
}
|
|
606
609
|
```
|
|
607
610
|
|
|
@@ -616,6 +619,7 @@ Default shape:
|
|
|
616
619
|
| `project_store_mode` | `"local"` | `local` or `repo-shared` |
|
|
617
620
|
| `commit_attribution` | `""` | optional text appended to commit messages |
|
|
618
621
|
| `install_mode` | `"standby"` | current default install mode |
|
|
622
|
+
| `host_install_modes` | `{}` | managed per-CLI mode map, such as `{ "codex": "standby" }`; used before falling back to `install_mode` |
|
|
619
623
|
|
|
620
624
|
## How Each CLI Is Integrated
|
|
621
625
|
|
|
@@ -665,6 +669,10 @@ The current test suite covers:
|
|
|
665
669
|
|
|
666
670
|
## FAQ
|
|
667
671
|
|
|
672
|
+
### What is the role of `docs/`?
|
|
673
|
+
|
|
674
|
+
`docs/` is reference material for users and AI agents. It may lag behind implementation; runtime behavior is defined by source code, bootstrap files, skills, templates, and tests.
|
|
675
|
+
|
|
668
676
|
### Is this a CLI tool or a prompt framework?
|
|
669
677
|
|
|
670
678
|
Both.
|
package/README_CN.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
**面向 AI 编码 CLI 的工作流层:技能、知识库、交付检查、更安全的配置写入,以及可恢复的执行流程。**
|
|
10
10
|
|
|
11
|
-
[](./package.json)
|
|
12
12
|
[](https://www.npmjs.com/package/helloagents)
|
|
13
13
|
[](./package.json)
|
|
14
14
|
[](./skills)
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
## 目录
|
|
31
31
|
|
|
32
32
|
- [HelloAGENTS 做什么](#helloagents-做什么)
|
|
33
|
-
- [相对 v3.0.
|
|
33
|
+
- [相对 v3.0.15 的真实变化](#相对-v3015-的真实变化)
|
|
34
34
|
- [核心功能](#核心功能)
|
|
35
35
|
- [快速开始](#快速开始)
|
|
36
36
|
- [CLI 管理](#cli-管理)
|
|
@@ -77,20 +77,17 @@ HelloAGENTS 叠加在 Claude Code、Gemini CLI 和 Codex CLI 之上,帮助模
|
|
|
77
77
|
| 完成态模糊 | 自然语言说“完成” | 按状态、证据和验证结果交付 |
|
|
78
78
|
| 配置容易漂移 | CLI 文件可能不一致 | 安装、更新、清理和 doctor 会检查受管文件 |
|
|
79
79
|
|
|
80
|
-
## 相对 v3.0.
|
|
80
|
+
## 相对 v3.0.15 的真实变化
|
|
81
81
|
|
|
82
|
-
下面是当前 `v3.0.
|
|
82
|
+
下面是当前 `v3.0.16` 相对 `v3.0.15 beta` 的主要可见变化:
|
|
83
83
|
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
- 输出格式配置在 carrier 与运行时注入中保持一致,减少收尾格式偶发不生效的问题。
|
|
92
|
-
- 调试、测试、验证和规划流程补充反馈循环、垂直切片 TDD、领域语言和 AFK/HITL 任务标记,仍复用现有 skills 与模板体系。
|
|
93
|
-
- 运行时提示统一为更自然的中文表述,并明确重装、刷新或切换模式后需要重启 AI CLI 或新开会话。
|
|
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`,可只清理宿主集成而不卸载包。
|
|
94
91
|
|
|
95
92
|
## 核心功能
|
|
96
93
|
|
|
@@ -116,7 +113,7 @@ HelloAGENTS 内置 14 个 `hello-*` 技能。技能只在当前阶段需要时
|
|
|
116
113
|
| `hello-reflect` | 可复用经验和知识更新 |
|
|
117
114
|
|
|
118
115
|
所有 UI 任务都会先受共享的 UI 质量基线约束。
|
|
119
|
-
|
|
116
|
+
在全局模式、已激活项目或明确的 UI 工作流里,`hello-ui` 会在该基线之上补充设计契约执行、设计系统映射与视觉验收。
|
|
120
117
|
当需要视觉证据时,HelloAGENTS 会写入当前会话的 `artifacts/visual.json`。
|
|
121
118
|
|
|
122
119
|
### 2)面向不同工作方式的命令
|
|
@@ -386,6 +383,9 @@ HELLOAGENTS=claude:standby HELLOAGENTS_ACTION=update curl -fsSL https://raw.gith
|
|
|
386
383
|
# 切换分支
|
|
387
384
|
HELLOAGENTS=all:global HELLOAGENTS_ACTION=switch-branch HELLOAGENTS_BRANCH=beta curl -fsSL https://raw.githubusercontent.com/hellowind777/helloagents/main/install.sh | sh
|
|
388
385
|
|
|
386
|
+
# 只清理宿主集成,不卸载包
|
|
387
|
+
HELLOAGENTS=codex:standby HELLOAGENTS_ACTION=cleanup curl -fsSL https://raw.githubusercontent.com/hellowind777/helloagents/main/install.sh | sh
|
|
388
|
+
|
|
389
389
|
# 卸载
|
|
390
390
|
HELLOAGENTS=gemini HELLOAGENTS_ACTION=uninstall curl -fsSL https://raw.githubusercontent.com/hellowind777/helloagents/main/install.sh | sh
|
|
391
391
|
```
|
|
@@ -402,6 +402,9 @@ $env:HELLOAGENTS="claude:standby"; $env:HELLOAGENTS_ACTION="update"; irm https:/
|
|
|
402
402
|
# 切换分支
|
|
403
403
|
$env:HELLOAGENTS="all:global"; $env:HELLOAGENTS_ACTION="switch-branch"; $env:HELLOAGENTS_BRANCH="beta"; irm https://raw.githubusercontent.com/hellowind777/helloagents/main/install.ps1 | iex
|
|
404
404
|
|
|
405
|
+
# 只清理宿主集成,不卸载包
|
|
406
|
+
$env:HELLOAGENTS="codex:standby"; $env:HELLOAGENTS_ACTION="cleanup"; irm https://raw.githubusercontent.com/hellowind777/helloagents/main/install.ps1 | iex
|
|
407
|
+
|
|
405
408
|
# 卸载
|
|
406
409
|
$env:HELLOAGENTS="gemini"; $env:HELLOAGENTS_ACTION="uninstall"; irm https://raw.githubusercontent.com/hellowind777/helloagents/main/install.ps1 | iex
|
|
407
410
|
```
|
|
@@ -439,7 +442,7 @@ npm uninstall -g helloagents
|
|
|
439
442
|
|-----|----------|----------|
|
|
440
443
|
| Claude Code | 原生插件安装 | 由 Claude Code 插件系统管理 |
|
|
441
444
|
| Gemini CLI | 原生扩展安装 | 由 Gemini 扩展系统管理 |
|
|
442
|
-
| Codex CLI |
|
|
445
|
+
| Codex CLI | 原生本地插件流程 | `~/.agents/plugins/marketplace.json`、`~/plugins/helloagents/`、`~/.codex/plugins/cache/local-plugins/helloagents/local/`、`~/.codex/config.toml`、`~/.codex/helloagents -> ~/plugins/helloagents` |
|
|
443
446
|
|
|
444
447
|
全局模式下,HelloAGENTS 会自动尝试宿主原生命令。若宿主命令不可用,再手动执行:
|
|
445
448
|
|
|
@@ -563,8 +566,7 @@ UI 任务遵循以下优先级:
|
|
|
563
566
|
|
|
564
567
|
1. 当前 `plan.md` 或 PRD 中的 UI 决策
|
|
565
568
|
2. `.helloagents/DESIGN.md`
|
|
566
|
-
3.
|
|
567
|
-
4. `hello-ui` 的实现和验收规则
|
|
569
|
+
3. `hello-ui` 的实现和验收规则,与共享 UI 质量基线共同生效
|
|
568
570
|
|
|
569
571
|
更重的 UI 任务可以通过 `contract.json` 要求:
|
|
570
572
|
|
|
@@ -591,7 +593,7 @@ UI 任务遵循以下优先级:
|
|
|
591
593
|
~/.helloagents/helloagents.json
|
|
592
594
|
```
|
|
593
595
|
|
|
594
|
-
|
|
596
|
+
默认结构。`host_install_modes` 会在需要记录单个 CLI 模式时写入:
|
|
595
597
|
|
|
596
598
|
```json
|
|
597
599
|
{
|
|
@@ -603,7 +605,8 @@ UI 任务遵循以下优先级:
|
|
|
603
605
|
"kb_create_mode": 1,
|
|
604
606
|
"project_store_mode": "local",
|
|
605
607
|
"commit_attribution": "",
|
|
606
|
-
"install_mode": "standby"
|
|
608
|
+
"install_mode": "standby",
|
|
609
|
+
"host_install_modes": {}
|
|
607
610
|
}
|
|
608
611
|
```
|
|
609
612
|
|
|
@@ -618,6 +621,7 @@ UI 任务遵循以下优先级:
|
|
|
618
621
|
| `project_store_mode` | `"local"` | `local` 或 `repo-shared` |
|
|
619
622
|
| `commit_attribution` | `""` | 提交信息附加署名 |
|
|
620
623
|
| `install_mode` | `"standby"` | 当前默认安装模式 |
|
|
624
|
+
| `host_install_modes` | `{}` | 受管的单 CLI 模式记录,如 `{ "codex": "standby" }`;优先于 `install_mode` |
|
|
621
625
|
|
|
622
626
|
## 各 CLI 集成方式
|
|
623
627
|
|
|
@@ -643,7 +647,7 @@ Codex 默认走规则文件驱动。
|
|
|
643
647
|
- 标准模式写入受管 `model_instructions_file = "~/.codex/AGENTS.md"`
|
|
644
648
|
- 标准模式写入受管 `notify = ["helloagents-js", "codex-notify"]` 命令用于收尾通知
|
|
645
649
|
- 标准模式创建 `~/.codex/helloagents -> ~/.helloagents/helloagents`
|
|
646
|
-
-
|
|
650
|
+
- 全局模式安装原生本地插件流程
|
|
647
651
|
- HelloAGENTS 默认不启用 Codex hooks
|
|
648
652
|
|
|
649
653
|
## 验证
|
|
@@ -667,6 +671,10 @@ npm test
|
|
|
667
671
|
|
|
668
672
|
## FAQ
|
|
669
673
|
|
|
674
|
+
### `docs/` 的作用是什么?
|
|
675
|
+
|
|
676
|
+
`docs/` 只作为用户和 AI 理解项目的参考材料,可能滞后于实现。运行时行为以源码、bootstrap 文件、skills、templates 和测试为准。
|
|
677
|
+
|
|
670
678
|
### 这是 CLI 工具还是提示词框架?
|
|
671
679
|
|
|
672
680
|
两者都是。
|
package/bootstrap-lite.md
CHANGED
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
## 配置
|
|
6
6
|
配置文件: ~/.helloagents/helloagents.json
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
在受限 CLI(如工作区限制导致家目录不可读)中,确需读取但失败时必须明确说明,并按默认值或当前已知设置执行;禁止静默回退或假装读取成功。
|
|
7
|
+
`output_language` 非空时,所有用户可见文本使用该语言;为空则跟随用户当前语言。
|
|
8
|
+
会话级缓存优先:当前上下文已有"当前用户设置"、原始 JSON 或读取摘要,且覆盖所需配置项时,直接复用。
|
|
9
|
+
仅在缺少所需项、用户要求刷新,或本轮修改后需要核验时读取;输出格式只在缺少 `output_format` 已知值时触发读取。
|
|
10
|
+
同一会话内,同一路径的配置文件、模块、SKILL、模板只读一次并跨轮复用;读取失败必须明示,并按默认值或已知设置执行。
|
|
12
11
|
|
|
13
12
|
## 编码原则
|
|
14
13
|
- 代码是唯一判断依据,文档与代码不一致时以代码为准
|
|
@@ -55,8 +54,8 @@
|
|
|
55
54
|
- 项目已有技术栈、设计系统或方案包时必须遵循既有决策
|
|
56
55
|
|
|
57
56
|
### UI 质量基线(涉及视觉/交互任务时,全阶段生效)
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
任务涉及界面视觉、交互体验、页面结构、组件外观、信息呈现或设计需求时,统一遵循以下基线;适用于标准模式未激活项目、标准模式已激活项目与全局模式。
|
|
58
|
+
纯逻辑修复、纯文案修改、纯数据处理、纯后端实现等不涉及视觉/交互变化的任务,不触发本节。本基线是最低质量线;已有 `plan.md` / PRD、`DESIGN.md` 或 `hello-ui` 约束时,与其共同生效,不覆盖上层决策。
|
|
60
59
|
|
|
61
60
|
- 先判断本次视觉变更是延续既有风格、演进式优化还是探索性方案,再形成简短但明确的内部设计简报:界面目的、目标用户与场景、主要视口、情绪方向、记忆点;不得直接滑入泛化风格标签或模型默认审美
|
|
62
61
|
- 已有项目优先复用现有组件、token、品牌资产、内容语气与交互模式;先建立最小设计系统:至少明确背景/表面/正文/弱化/强调/语义色,以及 display/headline/body/caption 等排版角色;缺少关键设计上下文时明确说明,不凭空发明视觉语言
|
|
@@ -207,7 +206,7 @@
|
|
|
207
206
|
路径: {CWD}/.helloagents/
|
|
208
207
|
所有文件的创建和更新必须按 templates/ 目录中对应模板的格式执行,不可自由发挥格式。
|
|
209
208
|
说明:
|
|
210
|
-
- `.helloagents/`
|
|
209
|
+
- `.helloagents/` 表示项目级存储路径,也是标准模式的项目激活信号
|
|
211
210
|
- `state_path` 指向的状态文件、当前会话 `capsule.json`、`events.jsonl`、`artifacts/*.json`、`artifacts/loop-results.tsv` 等运行态文件始终保留在项目本地 `.helloagents/sessions/{branch}/{session}/`
|
|
212
211
|
- `state_path` 是状态文件的唯一位置。宿主提供会话标识时,写入 `.helloagents/sessions/{branch}/{session}/STATE.md`;没有稳定会话标识时,写入 `.helloagents/sessions/{branch}/default/STATE.md`
|
|
213
212
|
- 若 helloagents.json 中 `project_store_mode = "repo-shared"`,`context.md`、`guidelines.md`、`CHANGELOG.md`、`verify.yaml`、`DESIGN.md`、`modules/`、`plans/`、`archive/` 改按当前上下文中已注入的“当前项目存储”/“项目知识/方案目录”解析;未注入具体路径时,按当前存储模式自行解析,不要假定这些文件一定实际位于当前工作树中
|
package/bootstrap.md
CHANGED
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
## 配置
|
|
6
6
|
配置文件: ~/.helloagents/helloagents.json
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
在受限 CLI(如工作区限制导致家目录不可读)中,确需读取但失败时必须明确说明,并按默认值或当前已知设置执行;禁止静默回退或假装读取成功。
|
|
7
|
+
`output_language` 非空时,所有用户可见文本使用该语言;为空则跟随用户当前语言。
|
|
8
|
+
会话级缓存优先:当前上下文已有"当前用户设置"、原始 JSON 或读取摘要,且覆盖所需配置项时,直接复用。
|
|
9
|
+
仅在缺少所需项、用户要求刷新,或本轮修改后需要核验时读取;输出格式只在缺少 `output_format` 已知值时触发读取。
|
|
10
|
+
同一会话内,同一路径的配置文件、模块、SKILL、模板只读一次并跨轮复用;读取失败必须明示,并按默认值或已知设置执行。
|
|
12
11
|
|
|
13
12
|
## 编码原则
|
|
14
13
|
- 代码是唯一判断依据,文档与代码不一致时以代码为准
|
|
@@ -55,8 +54,8 @@
|
|
|
55
54
|
- 项目已有技术栈、设计系统或方案包时必须遵循既有决策
|
|
56
55
|
|
|
57
56
|
### UI 质量基线(涉及视觉/交互任务时,全阶段生效)
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
任务涉及界面视觉、交互体验、页面结构、组件外观、信息呈现或设计需求时,统一遵循以下基线;适用于标准模式未激活项目、标准模式已激活项目与全局模式。
|
|
58
|
+
纯逻辑修复、纯文案修改、纯数据处理、纯后端实现等不涉及视觉/交互变化的任务,不触发本节。本基线是最低质量线;已有 `plan.md` / PRD、`DESIGN.md` 或 `hello-ui` 约束时,与其共同生效,不覆盖上层决策。
|
|
60
59
|
|
|
61
60
|
- 先判断本次视觉变更是延续既有风格、演进式优化还是探索性方案,再形成简短但明确的内部设计简报:界面目的、目标用户与场景、主要视口、情绪方向、记忆点;不得直接滑入泛化风格标签或模型默认审美
|
|
62
61
|
- 已有项目优先复用现有组件、token、品牌资产、内容语气与交互模式;先建立最小设计系统:至少明确背景/表面/正文/弱化/强调/语义色,以及 display/headline/body/caption 等排版角色;缺少关键设计上下文时明确说明,不凭空发明视觉语言
|
|
@@ -276,7 +275,7 @@ hello-* 技能读取路径:`{HELLOAGENTS_READ_ROOT}/skills/{技能名}/SKILL.m
|
|
|
276
275
|
路径: {CWD}/.helloagents/
|
|
277
276
|
所有文件的创建和更新必须按 templates/ 目录中对应模板的格式执行,不可自由发挥格式。
|
|
278
277
|
说明:
|
|
279
|
-
- `.helloagents/`
|
|
278
|
+
- `.helloagents/` 表示项目级存储路径,也是标准模式的项目激活信号
|
|
280
279
|
- `state_path` 指向的状态文件、当前会话 `capsule.json`、`events.jsonl`、`artifacts/*.json`、`artifacts/loop-results.tsv` 等运行态文件始终保留在项目本地 `.helloagents/sessions/{branch}/{session}/`
|
|
281
280
|
- `state_path` 是状态文件的唯一位置。宿主提供会话标识时,写入 `.helloagents/sessions/{branch}/{session}/STATE.md`;没有稳定会话标识时,写入 `.helloagents/sessions/{branch}/default/STATE.md`
|
|
282
281
|
- 若 helloagents.json 中 `project_store_mode = "repo-shared"`,`context.md`、`guidelines.md`、`CHANGELOG.md`、`verify.yaml`、`DESIGN.md`、`modules/`、`plans/`、`archive/` 改按当前上下文中已注入的“当前项目存储”/“项目知识/方案目录”解析;未注入具体路径时,按当前存储模式自行解析,不要假定这些文件一定实际位于当前工作树中
|
package/gemini-extension.json
CHANGED
package/install.ps1
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#
|
|
3
3
|
# Environment:
|
|
4
4
|
# HELLOAGENTS=all|claude|gemini|codex[:standby|global]
|
|
5
|
-
# HELLOAGENTS_ACTION=install|update|uninstall|switch-branch|branch
|
|
5
|
+
# HELLOAGENTS_ACTION=install|update|cleanup|uninstall|switch-branch|branch
|
|
6
6
|
# HELLOAGENTS_TARGET=all|claude|gemini|codex
|
|
7
7
|
# HELLOAGENTS_MODE=standby|global
|
|
8
8
|
# HELLOAGENTS_BRANCH=main|beta|...
|
|
@@ -97,6 +97,9 @@ switch ($Action) {
|
|
|
97
97
|
}
|
|
98
98
|
Sync-Hosts
|
|
99
99
|
}
|
|
100
|
+
"cleanup" {
|
|
101
|
+
Cleanup-Hosts
|
|
102
|
+
}
|
|
100
103
|
"switch-branch" {
|
|
101
104
|
if (-not $Branch -and -not $env:HELLOAGENTS_PACKAGE) {
|
|
102
105
|
throw "HELLOAGENTS_BRANCH or HELLOAGENTS_PACKAGE is required for switch-branch"
|
package/install.sh
CHANGED
|
@@ -5,7 +5,7 @@ set -eu
|
|
|
5
5
|
#
|
|
6
6
|
# Environment:
|
|
7
7
|
# HELLOAGENTS=all|claude|gemini|codex[:standby|global]
|
|
8
|
-
# HELLOAGENTS_ACTION=install|update|uninstall|switch-branch|branch
|
|
8
|
+
# HELLOAGENTS_ACTION=install|update|cleanup|uninstall|switch-branch|branch
|
|
9
9
|
# HELLOAGENTS_TARGET=all|claude|gemini|codex
|
|
10
10
|
# HELLOAGENTS_MODE=standby|global
|
|
11
11
|
# HELLOAGENTS_BRANCH=main|beta|...
|
|
@@ -97,6 +97,9 @@ case "$ACTION" in
|
|
|
97
97
|
fi
|
|
98
98
|
sync_hosts
|
|
99
99
|
;;
|
|
100
|
+
cleanup)
|
|
101
|
+
cleanup_hosts
|
|
102
|
+
;;
|
|
100
103
|
switch-branch|branch)
|
|
101
104
|
if [ -z "$BRANCH" ] && [ -z "${HELLOAGENTS_PACKAGE:-}" ]; then
|
|
102
105
|
echo "HELLOAGENTS_BRANCH or HELLOAGENTS_PACKAGE is required for switch-branch" >&2
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "helloagents",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.16-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",
|
|
@@ -39,7 +39,7 @@ export function selectCapabilities({ cwd, skillName = '', options = {} }) {
|
|
|
39
39
|
if (plan?.contract?.ui?.required || existsSync(getProjectDesignContractPath(cwd))) {
|
|
40
40
|
capabilities.push({
|
|
41
41
|
id: 'design-contract',
|
|
42
|
-
description: `UI 契约:仅在 UI 场景按需读取当前 plan.md / prd/03-ui-design.md、${describeProjectStoreFile(cwd, 'DESIGN.md')} 与 hello-ui
|
|
42
|
+
description: `UI 契约:仅在 UI 场景按需读取当前 plan.md / prd/03-ui-design.md、${describeProjectStoreFile(cwd, 'DESIGN.md')} 与 hello-ui,并与 UI 质量基线共同生效。`,
|
|
43
43
|
})
|
|
44
44
|
}
|
|
45
45
|
if (visualRequirement.required) {
|
|
@@ -7,7 +7,10 @@ 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
|
|
10
|
+
export const CODEX_MANAGED_NOTIFY_COMMAND = process.platform === 'win32'
|
|
11
|
+
? 'helloagents-js.cmd'
|
|
12
|
+
: 'helloagents-js'
|
|
13
|
+
export const CODEX_MANAGED_NOTIFY_VALUE = `["${CODEX_MANAGED_NOTIFY_COMMAND}", "codex-notify"]`
|
|
11
14
|
|
|
12
15
|
function normalizePath(value = '') {
|
|
13
16
|
return String(value || '').replace(/\\/g, '/')
|
|
@@ -33,8 +33,9 @@ function runHostCommand(command, args) {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
function buildNativeResult(result, successCN, successEN, manualCN, manualEN) {
|
|
36
|
-
if (result.ok) return { noteCN: successCN, noteEN: successEN }
|
|
36
|
+
if (result.ok) return { ok: true, noteCN: successCN, noteEN: successEN }
|
|
37
37
|
return {
|
|
38
|
+
ok: false,
|
|
38
39
|
noteCN: `${manualCN}${result.output ? `;原因:${result.output}` : ''}`,
|
|
39
40
|
noteEN: `${manualEN}${result.output ? `; reason: ${result.output}` : ''}`,
|
|
40
41
|
}
|
|
@@ -64,6 +65,8 @@ function reportHostAction(runtime, action, host, mode, result = {}) {
|
|
|
64
65
|
const isCleanup = action === 'cleanup' || action === 'uninstall'
|
|
65
66
|
if (result.skipped) {
|
|
66
67
|
console.log(runtime.msg(` - ${label} 未检测到,跳过`, ` - ${label} not detected, skipped`))
|
|
68
|
+
} else if (result.ok === false && !isCleanup) {
|
|
69
|
+
console.log(runtime.msg(` - ${label} 自动配置未完成`, ` - ${label} automatic setup did not complete`))
|
|
67
70
|
} else if (isCleanup) {
|
|
68
71
|
runtime.ok(runtime.msg(`${label} 已清理(${mode} 模式)`, `${label} cleaned (${mode} mode)`))
|
|
69
72
|
} else if (mode === 'standby') {
|
|
@@ -151,24 +154,43 @@ function cleanupHostGlobal(runtime, host) {
|
|
|
151
154
|
}
|
|
152
155
|
|
|
153
156
|
function installStandby(runtime) {
|
|
154
|
-
|
|
155
|
-
if (
|
|
157
|
+
const results = {}
|
|
158
|
+
if (installClaudeStandby(runtime.home, runtime.pkgRoot)) {
|
|
159
|
+
runtime.ok(runtime.msg('Claude Code 已配置(standby 模式)', 'Claude Code configured (standby mode)'))
|
|
160
|
+
results.claude = {}
|
|
161
|
+
} else {
|
|
162
|
+
results.claude = { skipped: true }
|
|
163
|
+
}
|
|
164
|
+
if (installGeminiStandby(runtime.home, runtime.pkgRoot)) {
|
|
165
|
+
runtime.ok(runtime.msg('Gemini CLI 已配置(standby 模式)', 'Gemini CLI configured (standby mode)'))
|
|
166
|
+
results.gemini = {}
|
|
167
|
+
} else {
|
|
168
|
+
results.gemini = { skipped: true }
|
|
169
|
+
}
|
|
156
170
|
if (installCodexStandby(runtime.home, runtime.pkgRoot)) {
|
|
157
171
|
cleanupCodexGlobalResidueForStandby(runtime.home)
|
|
158
172
|
runtime.ok(runtime.msg('Codex CLI 已配置(standby 模式)', 'Codex CLI configured (standby mode)'))
|
|
173
|
+
results.codex = {}
|
|
174
|
+
} else {
|
|
175
|
+
console.log(runtime.msg(' - Codex CLI 未检测到,跳过', ' - Codex CLI not detected, skipped'))
|
|
176
|
+
results.codex = { skipped: true }
|
|
159
177
|
}
|
|
160
|
-
|
|
178
|
+
return results
|
|
161
179
|
}
|
|
162
180
|
|
|
163
181
|
function installGlobal(runtime) {
|
|
182
|
+
const results = {}
|
|
164
183
|
for (const host of ['claude', 'gemini', 'codex']) {
|
|
165
|
-
|
|
184
|
+
const result = installHostGlobal(runtime, host)
|
|
185
|
+
reportHostAction(runtime, 'install', host, 'global', result)
|
|
186
|
+
results[host] = result
|
|
166
187
|
}
|
|
188
|
+
return results
|
|
167
189
|
}
|
|
168
190
|
|
|
169
191
|
export function installAllHosts(runtime, mode) {
|
|
170
|
-
if (mode === 'global') installGlobal(runtime)
|
|
171
|
-
|
|
192
|
+
if (mode === 'global') return installGlobal(runtime)
|
|
193
|
+
return installStandby(runtime)
|
|
172
194
|
}
|
|
173
195
|
|
|
174
196
|
export function uninstallAllHosts(runtime) {
|
|
@@ -115,7 +115,6 @@ function resolveHostMode(host, explicitMode, settings) {
|
|
|
115
115
|
if (explicitMode) return explicitMode
|
|
116
116
|
return detectHostMode(host)
|
|
117
117
|
|| getTrackedHostMode(settings, host)
|
|
118
|
-
|| (!hasTrackedHostModes(settings) ? (settings.install_mode || '') : '')
|
|
119
118
|
|| DEFAULTS.install_mode
|
|
120
119
|
}
|
|
121
120
|
|
|
@@ -183,21 +182,31 @@ function runAllHostsLifecycle(action, explicitMode) {
|
|
|
183
182
|
}
|
|
184
183
|
|
|
185
184
|
const settings = readSettings(true)
|
|
186
|
-
if (
|
|
185
|
+
if (!explicitMode) {
|
|
187
186
|
for (const host of HOSTS) {
|
|
188
187
|
const mode = resolveHostMode(host, '', settings)
|
|
189
188
|
const result = runHostLifecycle(runtime, action, host, mode)
|
|
190
|
-
if (!result.skipped) setTrackedHostMode(settings, host, mode)
|
|
189
|
+
if (!result.skipped && result.ok !== false) setTrackedHostMode(settings, host, mode)
|
|
190
|
+
else clearTrackedHostMode(settings, host)
|
|
191
191
|
}
|
|
192
192
|
writeSettings(settings)
|
|
193
|
-
|
|
193
|
+
const modes = Object.values(settings.host_install_modes || {})
|
|
194
|
+
const displayMode = modes.length && modes.every((mode) => mode === modes[0])
|
|
195
|
+
? modes[0]
|
|
196
|
+
: settings.install_mode || DEFAULTS.install_mode
|
|
197
|
+
runtime.printInstallMsg(displayMode, action === 'update' ? 'refresh' : 'install')
|
|
194
198
|
return
|
|
195
199
|
}
|
|
196
200
|
|
|
197
201
|
const mode = resolveInstallMode(explicitMode, settings)
|
|
198
202
|
if (explicitMode) settings.install_mode = explicitMode
|
|
199
|
-
installAllHosts(runtime, mode)
|
|
200
|
-
|
|
203
|
+
const results = installAllHosts(runtime, mode)
|
|
204
|
+
settings.host_install_modes = {}
|
|
205
|
+
for (const host of HOSTS) {
|
|
206
|
+
if (!results?.[host]?.skipped && results?.[host]?.ok !== false) {
|
|
207
|
+
settings.host_install_modes[host] = mode
|
|
208
|
+
}
|
|
209
|
+
}
|
|
201
210
|
writeSettings(settings)
|
|
202
211
|
runtime.printInstallMsg(mode, action === 'update' ? 'refresh' : 'install')
|
|
203
212
|
}
|
|
@@ -1,36 +1,15 @@
|
|
|
1
1
|
import { join } from 'node:path'
|
|
2
2
|
|
|
3
|
-
import { DEFAULTS } from './cli-config.mjs'
|
|
4
3
|
import { safeJson } from './cli-utils.mjs'
|
|
5
4
|
|
|
6
|
-
const CARRIER_SETTING_KEYS = [
|
|
7
|
-
'output_language',
|
|
8
|
-
'output_format',
|
|
9
|
-
'notify_level',
|
|
10
|
-
'ralph_loop_enabled',
|
|
11
|
-
'guard_enabled',
|
|
12
|
-
'kb_create_mode',
|
|
13
|
-
'project_store_mode',
|
|
14
|
-
'commit_attribution',
|
|
15
|
-
]
|
|
16
|
-
|
|
17
|
-
function pickCarrierSettings(settings) {
|
|
18
|
-
const merged = { ...DEFAULTS, ...(settings || {}) }
|
|
19
|
-
return Object.fromEntries(CARRIER_SETTING_KEYS.map((key) => [key, merged[key]]))
|
|
20
|
-
}
|
|
21
|
-
|
|
22
5
|
export function readCarrierSettings(home) {
|
|
23
|
-
return
|
|
6
|
+
return safeJson(join(home, '.helloagents', 'helloagents.json')) || {}
|
|
24
7
|
}
|
|
25
8
|
|
|
26
9
|
export function buildRuntimeCarrier(bootstrapContent, settings = {}) {
|
|
10
|
+
void settings
|
|
27
11
|
const normalized = String(bootstrapContent || '').trim()
|
|
28
12
|
if (!normalized) return ''
|
|
29
13
|
|
|
30
|
-
|
|
31
|
-
const snapshot = Object.keys(carrierSettings).length
|
|
32
|
-
? `\n\n## 当前用户设置\n\`\`\`json\n${JSON.stringify(carrierSettings, null, 2)}\n\`\`\``
|
|
33
|
-
: ''
|
|
34
|
-
|
|
35
|
-
return `${normalized}${snapshot}\n`
|
|
14
|
+
return `${normalized}\n`
|
|
36
15
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export function shouldIgnoreCodexNotifyClient(client) {
|
|
2
|
-
|
|
2
|
+
if (!client) return false;
|
|
3
|
+
const normalized = String(client).trim().toLowerCase().replace(/[_\s]+/g, '-');
|
|
4
|
+
return normalized !== 'codex' && !normalized.startsWith('codex-');
|
|
3
5
|
}
|
|
4
6
|
|
|
5
7
|
export function shouldIgnoreFormattedSubagent(lastMsg, outputFormatEnabled) {
|
package/scripts/notify-route.mjs
CHANGED
|
@@ -11,7 +11,7 @@ function shouldBypassRoute(prompt) {
|
|
|
11
11
|
|
|
12
12
|
function buildHelpExtraRules(skillName) {
|
|
13
13
|
if (skillName !== 'help') return ''
|
|
14
|
-
return ' 这是 HelloAGENTS 的帮助命令,不是宿主 CLI 的内置帮助。仅显示 HelloAGENTS
|
|
14
|
+
return ' 这是 HelloAGENTS 的帮助命令,不是宿主 CLI 的内置帮助。仅显示 HelloAGENTS 的帮助和当前设置;优先使用当前会话上下文中已注入的“当前用户设置”、配置文件原始 JSON 或此前读取结果摘要,上下文不存在或缺少要展示的配置项时才读取一次 ~/.helloagents/helloagents.json;自动激活技能说明仅在全局模式或已激活项目中生效。不要调用宿主 CLI 的帮助工具(如 cli_help 或 /help),不要使用子代理,不要读取项目文件;若受工作区限制无法读取配置,必须明确说明并按已知默认值或已注入设置展示。'
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
function routeExplicitCommand({
|
package/scripts/notify-ui.mjs
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { platform } from 'node:os';
|
|
6
6
|
import { join } from 'node:path';
|
|
7
7
|
import { existsSync } from 'node:fs';
|
|
8
|
-
import {
|
|
8
|
+
import { spawnSync } from 'node:child_process';
|
|
9
9
|
|
|
10
10
|
const PLAT = platform();
|
|
11
11
|
|
|
@@ -55,16 +55,13 @@ function resolveWav(pkgRoot, event) {
|
|
|
55
55
|
return existsSync(p) ? p : null;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
function
|
|
58
|
+
function runSync(command, args) {
|
|
59
59
|
try {
|
|
60
|
-
const
|
|
61
|
-
detached: true,
|
|
60
|
+
const result = spawnSync(command, args, {
|
|
62
61
|
stdio: 'ignore',
|
|
63
62
|
windowsHide: true,
|
|
64
63
|
});
|
|
65
|
-
|
|
66
|
-
child.unref();
|
|
67
|
-
return true;
|
|
64
|
+
return !result.error && result.status === 0;
|
|
68
65
|
} catch {
|
|
69
66
|
return false;
|
|
70
67
|
}
|
|
@@ -76,15 +73,15 @@ export function playSound(pkgRoot, event) {
|
|
|
76
73
|
if (!wav) { process.stderr.write('\x07'); return; }
|
|
77
74
|
try {
|
|
78
75
|
if (PLAT === 'win32') {
|
|
79
|
-
|
|
76
|
+
runSync('powershell', [
|
|
80
77
|
'-NoProfile',
|
|
81
78
|
'-c',
|
|
82
79
|
`(New-Object Media.SoundPlayer '${wav.replace(/'/g, "''")}').PlaySync()`,
|
|
83
80
|
]);
|
|
84
81
|
} else if (PLAT === 'darwin') {
|
|
85
|
-
|
|
82
|
+
runSync('afplay', [wav]);
|
|
86
83
|
} else {
|
|
87
|
-
|
|
84
|
+
if (!runSync('aplay', ['-q', wav]) && !runSync('paplay', [wav])) process.stderr.write('\x07');
|
|
88
85
|
}
|
|
89
86
|
} catch { process.stderr.write('\x07'); }
|
|
90
87
|
}
|
|
@@ -127,16 +124,16 @@ export function desktopNotify(pkgRoot, event, extra) {
|
|
|
127
124
|
try {
|
|
128
125
|
if (PLAT === 'win32') {
|
|
129
126
|
const iconPath = join(pkgRoot, 'assets', 'icons', 'icon.png').replace(/\//g, '\\');
|
|
130
|
-
|
|
127
|
+
runSync('powershell', ['-NoProfile', '-c', buildWindowsToastScript(notification, iconPath)]);
|
|
131
128
|
} else if (PLAT === 'darwin') {
|
|
132
129
|
const subtitle = notification.sourceLabel
|
|
133
130
|
? ` subtitle "${escapeAppleScriptText(notification.sourceLabel)}"`
|
|
134
131
|
: '';
|
|
135
|
-
|
|
132
|
+
runSync('osascript', ['-e',
|
|
136
133
|
`display notification "${escapeAppleScriptText(notification.message)}" with title "${escapeAppleScriptText(notification.title)}"${subtitle}`],
|
|
137
134
|
);
|
|
138
135
|
} else {
|
|
139
|
-
|
|
136
|
+
if (!runSync('notify-send', [notification.title, notification.body])) process.stderr.write('\x07');
|
|
140
137
|
}
|
|
141
138
|
} catch { process.stderr.write('\x07'); }
|
|
142
139
|
}
|
package/scripts/notify.mjs
CHANGED
|
@@ -47,8 +47,12 @@ function normalizeNotifyLevel(value) {
|
|
|
47
47
|
|
|
48
48
|
function notifyByLevel(event, extra, settings = getSettings()) {
|
|
49
49
|
const level = normalizeNotifyLevel(settings.notify_level ?? 0);
|
|
50
|
-
if (level ===
|
|
51
|
-
if (level ===
|
|
50
|
+
if (level === 1) desktopNotify(event, extra);
|
|
51
|
+
if (level === 2) playSound(event);
|
|
52
|
+
if (level === 3) {
|
|
53
|
+
desktopNotify(event, extra);
|
|
54
|
+
playSound(event);
|
|
55
|
+
}
|
|
52
56
|
}
|
|
53
57
|
|
|
54
58
|
function buildNotifyExtra(payload = {}, options = {}) {
|
|
@@ -254,7 +258,7 @@ function cmdStop() {
|
|
|
254
258
|
}
|
|
255
259
|
|
|
256
260
|
const settings = getSettings();
|
|
257
|
-
if (shouldProcess) {
|
|
261
|
+
if (shouldProcess || !turnState) {
|
|
258
262
|
notifyByLevel('complete', buildNotifyExtra(payload), settings);
|
|
259
263
|
}
|
|
260
264
|
consumeMainTurnState(cwd, turnState, turnPayload);
|
|
@@ -291,7 +295,11 @@ function cmdCodexNotify() {
|
|
|
291
295
|
if (turnState && turnState.kind !== 'complete') consumeMainTurnState(cwd, turnState, turnPayload);
|
|
292
296
|
return;
|
|
293
297
|
}
|
|
294
|
-
if (!turnState)
|
|
298
|
+
if (!turnState) {
|
|
299
|
+
notifyByLevel('complete', buildNotifyExtra(data), getSettings());
|
|
300
|
+
clearRouteContext({ cwd, payload: turnPayload });
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
295
303
|
if (turnState.kind !== 'complete') {
|
|
296
304
|
consumeMainTurnState(cwd, turnState, turnPayload);
|
|
297
305
|
clearRouteContext({ cwd, payload: turnPayload });
|
|
@@ -167,7 +167,7 @@ export function buildUiContractHint(cwd, snapshot) {
|
|
|
167
167
|
if (visualValidationRequired) {
|
|
168
168
|
extraHints.push('若当前 UI 契约要求视觉验收,收尾前需写当前会话 `artifacts/visual.json` 记录关键视口、状态与结论')
|
|
169
169
|
}
|
|
170
|
-
return `UI 约束提示:如本次属于视觉/交互任务,设计决策优先级固定为:当前活跃 plan.md / prd/03-ui-design.md → ${describeProjectStoreFile(cwd, 'DESIGN.md')} → hello-ui
|
|
170
|
+
return `UI 约束提示:如本次属于视觉/交互任务,设计决策优先级固定为:当前活跃 plan.md / prd/03-ui-design.md → ${describeProjectStoreFile(cwd, 'DESIGN.md')} → hello-ui,并与 UI 质量基线共同生效。${extraHints.length > 0 ? ` ${extraHints.join(';')}。` : ''}`
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
export { normalizeTaskFile, readStateSnapshot, listPlanPackages, getWorkflowSnapshot }
|
|
@@ -15,7 +15,7 @@ Trigger: ~commit [message]
|
|
|
15
15
|
3. 生成 conventional commit message(如未提供)
|
|
16
16
|
- 格式: type(scope): description
|
|
17
17
|
- type: feat|fix|refactor|docs|test|chore|style|perf
|
|
18
|
-
4.
|
|
18
|
+
4. 先一次性解析会话中已知设置:优先使用当前会话上下文中已注入的“当前用户设置”、该配置文件原始 JSON 或此前读取结果摘要;上下文不存在或缺少 `commit_attribution` / `kb_create_mode` 时,才读取一次 `~/.helloagents/helloagents.json`
|
|
19
19
|
5. 复用上一步已解析的设置获取 `commit_attribution`:
|
|
20
20
|
- ""(空,默认)→ 不添加归属
|
|
21
21
|
- 有内容(如 "Co-Authored-By: HelloAGENTS")→ 添加该内容到 commit message
|
|
@@ -39,7 +39,7 @@ Trigger: ~help
|
|
|
39
39
|
完成时:hello-verify, hello-reflect
|
|
40
40
|
|
|
41
41
|
### 当前设置
|
|
42
|
-
|
|
42
|
+
优先使用当前会话上下文中已注入的“当前用户设置”、该配置文件原始 JSON 或此前读取结果摘要显示;若会话上下文不存在该信息,或缺少下表任一配置项,才读取一次 `~/.helloagents/helloagents.json`,并在后续轮次复用。
|
|
43
43
|
如果当前 CLI 存在工作区限制导致家目录不可读,则明确说明“无法直接读取配置文件,以下按已注入设置或默认值展示”,不要改用无关工具或伪造已读取结果。
|
|
44
44
|
| 配置项 | 默认值 | 作用 | 适用 CLI |
|
|
45
45
|
|--------|-------|------|---------|
|
|
@@ -51,3 +51,5 @@ Trigger: ~help
|
|
|
51
51
|
| kb_create_mode | 1 | 0=关闭/1=已激活项目或全局模式中编码自动/2=已激活项目或全局模式中始终 | Claude Code + Gemini CLI + Codex CLI |
|
|
52
52
|
| project_store_mode | "local" | "local"=知识库/方案包保留在项目本地 `.helloagents/`;"repo-shared"=本地 `.helloagents/` 仅保留激活/STATE/运行态,知识库与方案包改写到 `~/.helloagents/projects/<repo-key>/` | Claude Code + Gemini CLI + Codex CLI |
|
|
53
53
|
| commit_attribution | "" | 空=不添加/填写内容则添加到 commit message | Claude Code + Gemini CLI + Codex CLI |
|
|
54
|
+
| install_mode | "standby" | 当前默认安装模式 | Claude Code + Gemini CLI + Codex CLI |
|
|
55
|
+
| host_install_modes | {} | 单 CLI 模式记录,优先于 install_mode | Claude Code + Gemini CLI + Codex CLI |
|
package/skills/hello-ui/SKILL.md
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hello-ui
|
|
3
|
-
description: 已进入显式 UI
|
|
3
|
+
description: 已进入显式 UI 工作流、全局模式中的 UI 任务、已激活项目的视觉变更、设计系统改造或需要视觉验收时使用;在通用 UI 基线之上补充项目契约执行、设计系统映射与视觉验证。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
本 skill 不是 UI 质量的唯一来源。当前已加载 bootstrap 中的 UI 质量基线负责所有 UI 任务的基础水准;本 skill 在显式 UI 工作流和复杂 UI 任务中,补充更明确的契约执行、实现映射与视觉验收。
|
|
7
7
|
`.helloagents/` 在本 skill 中统一按项目级存储路径理解:会话证据使用当前 `state_path` 所在目录下的 `artifacts/*.json`;若 `project_store_mode=repo-shared`,`DESIGN.md` 与方案包按当前上下文中已注入的项目知识/方案目录解析。
|
|
8
8
|
|
|
9
9
|
## 适用边界
|
|
10
|
-
已进入显式 UI
|
|
10
|
+
已进入显式 UI 规划/实现/验证路径、全局模式中的 UI 任务,或当前项目已激活且任务涉及整页新建、跨多个组件的视觉重做、设计系统改造、需要截图验收的界面任务时,读取本 skill。
|
|
11
11
|
标准模式未激活项目中的普通 UI 请求,仍只受当前 bootstrap 的 UI 质量基线约束;修复 bug、调整文案、改业务逻辑等不涉及视觉变更的任务,不读取本 skill。在已有设计系统中工作时,保留已建立的模式、结构和视觉语言。
|
|
12
12
|
|
|
13
13
|
## 设计契约优先级
|
|
14
14
|
进入 UI 相关的规划、实现、验证时,按以下顺序做设计决策:
|
|
15
15
|
1. 当前活跃方案包 `plan.md` 或 PRD 中已确认的 UI 决策
|
|
16
16
|
2. `.helloagents/DESIGN.md`(按当前项目存储模式解析)
|
|
17
|
-
3. 本 skill
|
|
17
|
+
3. 本 skill 的具体 UI 审美与实现规则,并与 UI 质量基线共同生效
|
|
18
18
|
缺少上层产物时,才直接依赖下层规则;不得用通用审美覆盖已确认的项目契约。
|
|
19
19
|
|
|
20
20
|
## 核心职责
|
|
@@ -23,7 +23,7 @@ description: 按任务类型适用 — 建立质量驱动工作流,通过技
|
|
|
23
23
|
### 流程纪律(执行时)
|
|
24
24
|
- 执行 command skill 时,公共阶段边界以当前已加载 bootstrap 为准;command skill 只补充该命令的专属动作和边界
|
|
25
25
|
- 统一执行流程的六个阶段(ROUTE/TIER→SPEC→PLAN→BUILD→VERIFY→CONSOLIDATE)按当前 Delivery Tier 和实际任务推进;未进入的阶段不强行补齐,已进入的阶段不可跳过
|
|
26
|
-
- 所有 UI 任务先受当前 bootstrap 的 UI
|
|
26
|
+
- 所有 UI 任务先受当前 bootstrap 的 UI 质量基线约束;已激活项目、全局模式或显式 UI 工作流中的设计约束优先级固定为:当前 `plan.md` / PRD UI 决策 → `.helloagents/DESIGN.md`(按当前项目存储模式解析) → `hello-ui` 具体 UI 审美与实现规则,并与 UI 质量基线共同生效
|
|
27
27
|
- 方案包存在 `contract.json` 时,验证分流、reviewer / tester 关注边界、可选 style advisor / visual validation 与交付检查优先按它执行,不再从自然语言总结里回推
|
|
28
28
|
- 因阻塞判定而必须等待用户输入时,遵循当前 bootstrap 的等待输入规则,不得把等待输入包装成完成态
|
|
29
29
|
- ~plan 的需求澄清与方案确认不可跳过,不可一个问题就出方案
|
|
@@ -57,7 +57,7 @@ Layer 3 — 资源文件(技能内引用时读取):
|
|
|
57
57
|
禁止行为:
|
|
58
58
|
- 禁止在 ROUTE / TIER / SPEC 阶段读取实现类技能(hello-ui/hello-test/hello-verify 等)
|
|
59
59
|
- 禁止因为"可能用到"就提前读取技能文件——等到真正需要时再读
|
|
60
|
-
-
|
|
60
|
+
- 同一会话内,同一路径的配置文件、模块、SKILL、模板只读一次并跨轮复用;缺少所需内容、读取失败、用户要求刷新或本轮修改后才重新读取
|
|
61
61
|
- ~command 命令只读取对应的 command SKILL.md,不连带读取其他技能
|
|
62
62
|
|
|
63
63
|
## 技能查找路径
|