sqlew 5.2.2 → 5.3.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/CHANGELOG.md +42 -0
- package/README.md +63 -13
- package/dist/cli/hooks/on-prompt.d.ts.map +1 -1
- package/dist/cli/hooks/on-prompt.js +33 -1
- package/dist/cli/hooks/on-prompt.js.map +1 -1
- package/dist/cli/hooks/save.js +1 -1
- package/dist/cli/hooks/save.js.map +1 -1
- package/dist/cli/hooks/stdin-parser.d.ts +10 -3
- package/dist/cli/hooks/stdin-parser.d.ts.map +1 -1
- package/dist/cli/hooks/stdin-parser.js +110 -6
- package/dist/cli/hooks/stdin-parser.js.map +1 -1
- package/dist/tests/integration/hermes-on-prompt.test.d.ts +7 -0
- package/dist/tests/integration/hermes-on-prompt.test.d.ts.map +1 -0
- package/dist/tests/integration/hermes-on-prompt.test.js +34 -0
- package/dist/tests/integration/hermes-on-prompt.test.js.map +1 -0
- package/dist/tests/integration/hermes-pr-adr.test.d.ts +7 -0
- package/dist/tests/integration/hermes-pr-adr.test.d.ts.map +1 -0
- package/dist/tests/integration/hermes-pr-adr.test.js +38 -0
- package/dist/tests/integration/hermes-pr-adr.test.js.map +1 -0
- package/dist/tests/integration/hermes-side-effect-hooks.test.d.ts +7 -0
- package/dist/tests/integration/hermes-side-effect-hooks.test.d.ts.map +1 -0
- package/dist/tests/integration/hermes-side-effect-hooks.test.js +57 -0
- package/dist/tests/integration/hermes-side-effect-hooks.test.js.map +1 -0
- package/dist/tests/unit/hooks/codex-hook-normalization.test.js +3 -0
- package/dist/tests/unit/hooks/codex-hook-normalization.test.js.map +1 -1
- package/dist/tests/unit/hooks/hermes-hook-normalization.test.d.ts +7 -0
- package/dist/tests/unit/hooks/hermes-hook-normalization.test.d.ts.map +1 -0
- package/dist/tests/unit/hooks/hermes-hook-normalization.test.js +104 -0
- package/dist/tests/unit/hooks/hermes-hook-normalization.test.js.map +1 -0
- package/dist/utils/project-root.d.ts +1 -0
- package/dist/utils/project-root.d.ts.map +1 -1
- package/dist/utils/project-root.js +6 -0
- package/dist/utils/project-root.js.map +1 -1
- package/docs/HERMES_HOOKS.md +142 -0
- package/docs/HOOKS_GUIDE.md +33 -8
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,48 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [5.3.0] - 2026-06-27
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
**Hermes (Claude Code / Nous) hook adapter**
|
|
15
|
+
|
|
16
|
+
Hermes uses a different shell-hook wire protocol than Claude Code, Codex, and Grok Build. Without normalization, Hermes payloads (`pre_tool_call` + `terminal`, etc.) fell through to Claude passthrough and every hook handler silently no-oped. sqlew 5.3.0 adds a fourth client adapter in `stdin-parser.ts`, following the Grok/Codex pattern.
|
|
17
|
+
|
|
18
|
+
- **Event mapping** — `pre_tool_call` → `PreToolUse`, `post_tool_call` → `PostToolUse`, `pre_llm_call` → `UserPromptSubmit`, `on_session_start` → `SessionStart`, `subagent_stop` → `SubagentStop`, and related lifecycle events.
|
|
19
|
+
- **Tool mapping** — `terminal` → `Bash`, `write_file` → `Write`, `patch` → `Edit`, `todo` → `TodoWrite`, `delegate_task` → `Task`, `read_file` → `Read`.
|
|
20
|
+
- **Detection** — `isHermesPayload()` with PascalCase guard (avoids misclassifying Claude/Codex when `HERMES_*` env vars are set in the parent shell), `extra` + env fallback, and empty-stdin env detection.
|
|
21
|
+
- **Plan paths** — `.hermes/plans/*.md` recognized by `isPlanFile()`; `tool_input.path` aliased to `file_path` for Hermes file tools.
|
|
22
|
+
- **Project root** — `TERMINAL_CWD` fallback in `getProjectPath()` and `determineProjectRoot()`.
|
|
23
|
+
- **Output protocol** — `sendHermesContext()` for `pre_llm_call` (`{"context":"..."}`); `sendBlock()` emits `{"decision":"block","reason"}` when `HERMES_SESSION_ID` / `HERMES_HOME` / `_HERMES_GATEWAY` are set.
|
|
24
|
+
- **`on-prompt`** — Every-turn plan guidance for Hermes (FULL on first prompt in session, SHORT after); Hermes has no native `permission_mode: plan`.
|
|
25
|
+
- **Tests** — Unit (`hermes-hook-normalization`) and integration (`hermes-on-prompt`, `hermes-pr-adr`, `hermes-side-effect-hooks`).
|
|
26
|
+
- **Docs** — [docs/HERMES_HOOKS.md](docs/HERMES_HOOKS.md) (setup, config snippet, Claude vs Hermes table); [docs/HOOKS_GUIDE.md](docs/HOOKS_GUIDE.md) Hermes section; [README.md](README.md) quick-start.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- **`save` hook** — `.hermes/plans/` paths excluded from implementation-file promotion (same as `.claude/plans/`).
|
|
31
|
+
|
|
32
|
+
### Plugin (sqlew-plugin v5.3.0)
|
|
33
|
+
|
|
34
|
+
Install Hermes integration via the `.hermes-plugin/` bundle:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm i -g sqlew
|
|
38
|
+
hermes plugins install sqlew-io/sqlew-plugin/.hermes-plugin
|
|
39
|
+
hermes plugins enable sqlew
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The plugin merges `mcp_servers.sqlew` and shell `hooks:` into `~/.hermes/config.yaml`, copies planning skills to `~/.hermes/skills/`, and registers hooks on enable.
|
|
43
|
+
|
|
44
|
+
### Upgrade
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm i -g sqlew@5.3.0
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
No database migration in this release. Existing Claude/Codex/Grok hook behavior is unchanged.
|
|
51
|
+
|
|
10
52
|
## [5.2.2] - 2026-06-13
|
|
11
53
|
|
|
12
54
|
### Added
|
package/README.md
CHANGED
|
@@ -43,37 +43,85 @@ npm install -g sqlew
|
|
|
43
43
|
|
|
44
44
|
### 2. Setup
|
|
45
45
|
|
|
46
|
-
Choose the setup that matches your environment
|
|
46
|
+
Choose the setup that matches your environment. Each client has its own install and uninstall steps.
|
|
47
47
|
|
|
48
48
|
#### Claude Code (Plugin)
|
|
49
49
|
|
|
50
|
+
**Install:**
|
|
51
|
+
|
|
50
52
|
```bash
|
|
51
53
|
claude plugin marketplace add sqlew-io/sqlew-plugin
|
|
52
54
|
claude plugin install sqlew
|
|
53
55
|
```
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
Configures MCP server, Skills (Plan Mode guidance), and Hooks (automatic decision capture).
|
|
58
|
+
|
|
59
|
+
**Uninstall:**
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
claude plugin remove sqlew
|
|
63
|
+
```
|
|
56
64
|
|
|
57
65
|
#### Codex CLI (Plugin)
|
|
58
66
|
|
|
67
|
+
**Install:**
|
|
68
|
+
|
|
59
69
|
```bash
|
|
60
70
|
codex plugin marketplace add sqlew-io/sqlew-plugin
|
|
61
71
|
codex plugin install sqlew --source sqlew-plugin
|
|
62
72
|
```
|
|
63
73
|
|
|
64
|
-
After install, open `/hooks` in Codex and trust the bundled sqlew hooks. Enable Plan Mode with `collaboration_modes = true` under `[features]` in your Codex config.
|
|
74
|
+
After install, open `/hooks` in Codex and trust the bundled sqlew hooks. Enable Plan Mode with `collaboration_modes = true` under `[features]` in your Codex config.
|
|
75
|
+
|
|
76
|
+
> Do not duplicate skills in `~/.codex/skills/` or add `[mcp_servers.sqlew]` to `config.toml` when using the plugin. See [Hooks Guide](docs/HOOKS_GUIDE.md).
|
|
77
|
+
|
|
78
|
+
**Uninstall:**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
codex plugin remove sqlew
|
|
82
|
+
```
|
|
65
83
|
|
|
66
84
|
#### Grok Build (Plugin)
|
|
67
85
|
|
|
86
|
+
**Install:**
|
|
87
|
+
|
|
68
88
|
```bash
|
|
69
|
-
npm install -g sqlew
|
|
70
89
|
grok plugin install sqlew-io/sqlew-plugin --trust
|
|
71
90
|
grok plugin update
|
|
72
91
|
```
|
|
73
92
|
|
|
74
|
-
|
|
93
|
+
Configures MCP server, Skills (plan mode guidance), and Hooks (automatic decision capture on `exit_plan_mode`).
|
|
94
|
+
|
|
95
|
+
> Do not duplicate hooks in `~/.grok/hooks/` or add `[mcp_servers.sqlew]` to `~/.grok/config.toml`. See [Hooks Guide](docs/HOOKS_GUIDE.md).
|
|
96
|
+
|
|
97
|
+
**Uninstall:**
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
grok plugin remove sqlew
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### Hermes (Plugin)
|
|
104
|
+
|
|
105
|
+
Requires sqlew **>= 5.3.0**. Hermes uses a separate plugin bundle (`.hermes-plugin/`), not the Claude/Codex plugin manifest.
|
|
106
|
+
|
|
107
|
+
**Install:**
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
hermes plugins install sqlew-io/sqlew-plugin/.hermes-plugin
|
|
111
|
+
hermes plugins enable sqlew
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Merges MCP + shell hooks into `~/.hermes/config.yaml` and copies planning skills to `~/.hermes/skills/`. See [Hermes Hooks Guide](docs/HERMES_HOOKS.md) for wire-protocol details and manual `config.yaml` setup.
|
|
115
|
+
|
|
116
|
+
**Uninstall:**
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
hermes plugins remove sqlew
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
If you merged hooks manually before using the plugin, also remove `mcp_servers.sqlew` and sqlew `hooks:` entries from `~/.hermes/config.yaml`. Skills under `~/.hermes/skills/sqlew-*` are not removed automatically.
|
|
75
123
|
|
|
76
|
-
#### Manual
|
|
124
|
+
#### Manual (MCP only)
|
|
77
125
|
|
|
78
126
|
Add to `.mcp.json` in your project root:
|
|
79
127
|
|
|
@@ -101,7 +149,7 @@ No special commands needed — just plan your work normally, and sqlew captures
|
|
|
101
149
|
- **Fast Queries** — 2-50ms retrieval via SQL, even with thousands of decisions
|
|
102
150
|
- **Duplicate Detection** — Three-tier similarity scoring (0-100) prevents redundant decisions
|
|
103
151
|
- **Constraint Tracking** — Architectural rules and principles as first-class entities
|
|
104
|
-
- **Auto-Capture** — Hooks automatically record decisions from Plan Mode (Claude Code, Codex,
|
|
152
|
+
- **Auto-Capture** — Hooks automatically record decisions from Plan Mode (Claude Code, Codex, Grok Build, and Hermes via sqlew-plugin)
|
|
105
153
|
- **Multi-Database** — SQLite (default), PostgreSQL, MySQL/MariaDB, or Cloud
|
|
106
154
|
- **Git Worktree Ready** — Each worktree shares the same context database
|
|
107
155
|
|
|
@@ -157,7 +205,8 @@ name = "your-project-name"
|
|
|
157
205
|
|-------|-------------|
|
|
158
206
|
| [ADR Concepts](docs/ADR_CONCEPTS.md) | Architecture Decision Records explained |
|
|
159
207
|
| [Configuration](docs/CONFIGURATION.md) | Config file setup, database options |
|
|
160
|
-
| [Hooks Guide](docs/HOOKS_GUIDE.md) | Claude Code, Codex,
|
|
208
|
+
| [Hooks Guide](docs/HOOKS_GUIDE.md) | Claude Code, Codex, Grok Build, and Hermes integration |
|
|
209
|
+
| [Hermes Hooks Guide](docs/HERMES_HOOKS.md) | Hermes-specific setup and wire-protocol notes |
|
|
161
210
|
| [Cross Database](docs/CROSS_DATABASE.md) | Multi-database support |
|
|
162
211
|
| [CLI Usage](docs/CLI_USAGE.md) | Database migration, export/import |
|
|
163
212
|
|
|
@@ -178,15 +227,16 @@ Support development via [GitHub Sponsors](https://github.com/sponsors/sqlew-io).
|
|
|
178
227
|
|
|
179
228
|
## Version
|
|
180
229
|
|
|
181
|
-
Current version: **5.
|
|
230
|
+
Current version: **5.3.0**
|
|
182
231
|
|
|
183
232
|
See [CHANGELOG.md](CHANGELOG.md) for release history.
|
|
184
233
|
|
|
185
|
-
**What's New in v5.
|
|
234
|
+
**What's New in v5.3.0:**
|
|
186
235
|
|
|
187
|
-
- **
|
|
188
|
-
- **
|
|
189
|
-
- **
|
|
236
|
+
- **Hermes support** — Plan-to-ADR via [sqlew-plugin](https://github.com/sqlew-io/sqlew-plugin) `.hermes-plugin` bundle (`hermes plugins install sqlew-io/sqlew-plugin/.hermes-plugin`)
|
|
237
|
+
- **Hook normalization** — Hermes `pre_tool_call` / `pre_llm_call` payloads mapped to canonical Claude-shaped events and tools
|
|
238
|
+
- **Every-turn plan guidance** — `on-prompt` injects FULL/SHORT context via Hermes `pre_llm_call` (`{"context":"..."}`)
|
|
239
|
+
- **`.hermes/plans/`** — Plan files written by the Hermes `plan` skill are tracked for decision extraction
|
|
190
240
|
|
|
191
241
|
## License
|
|
192
242
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"on-prompt.d.ts","sourceRoot":"","sources":["../../../src/cli/hooks/on-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAWH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,iiBAeY,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,oDAAoD,CAAC;AAEnF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,iiBAAmB,CAAC;AAMtD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"on-prompt.d.ts","sourceRoot":"","sources":["../../../src/cli/hooks/on-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAWH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,iiBAeY,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,oDAAoD,CAAC;AAEnF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,iiBAAmB,CAAC;AAMtD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA0FrD"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* @modified v5.0.7 - First/repeat message split, inline template, isPlanMode()
|
|
20
20
|
*/
|
|
21
21
|
import { randomUUID } from 'crypto';
|
|
22
|
-
import { readStdinJson, isPlanMode, getProjectPath } from './stdin-parser.js';
|
|
22
|
+
import { readStdinJson, isPlanMode, getProjectPath, sendHermesContext } from './stdin-parser.js';
|
|
23
23
|
import { loadCurrentPlan, saveCurrentPlan } from '../../config/global-config.js';
|
|
24
24
|
import { findCodexTranscriptPath } from './codex-transcript.js';
|
|
25
25
|
// ============================================================================
|
|
@@ -78,6 +78,38 @@ export async function onPromptCommand() {
|
|
|
78
78
|
if (input.client === 'grok') {
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
|
+
// Hermes: pre_llm_call is the only context-injection point and there is no
|
|
82
|
+
// plan permission mode. Inject FULL guidance once per session, SHORT after.
|
|
83
|
+
if (input.client === 'hermes') {
|
|
84
|
+
const hermesProjectPath = getProjectPath(input);
|
|
85
|
+
if (!hermesProjectPath) {
|
|
86
|
+
sendHermesContext(ENFORCEMENT_FULL);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
let hermesPlanInfo = loadCurrentPlan(hermesProjectPath);
|
|
90
|
+
if (!hermesPlanInfo || !hermesPlanInfo.enforcement_shown_at) {
|
|
91
|
+
sendHermesContext(ENFORCEMENT_FULL);
|
|
92
|
+
if (hermesPlanInfo) {
|
|
93
|
+
hermesPlanInfo.enforcement_shown_at = new Date().toISOString();
|
|
94
|
+
saveCurrentPlan(hermesProjectPath, hermesPlanInfo);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const info = {
|
|
98
|
+
plan_id: randomUUID(),
|
|
99
|
+
plan_file: 'hermes-plan.md',
|
|
100
|
+
plan_updated_at: new Date().toISOString(),
|
|
101
|
+
recorded: false,
|
|
102
|
+
decision_pending: true,
|
|
103
|
+
enforcement_shown_at: new Date().toISOString(),
|
|
104
|
+
};
|
|
105
|
+
saveCurrentPlan(hermesProjectPath, info);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
sendHermesContext(ENFORCEMENT_SHORT);
|
|
110
|
+
}
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
81
113
|
if (!isPlanMode(input)) {
|
|
82
114
|
// Non-plan mode: output nothing (exit 0 = allow, no context injection)
|
|
83
115
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"on-prompt.js","sourceRoot":"","sources":["../../../src/cli/hooks/on-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"on-prompt.js","sourceRoot":"","sources":["../../../src/cli/hooks/on-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAwB,MAAM,+BAA+B,CAAC;AACvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;yCAeS,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,iDAAiD,CAAC;AAEnF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAEtD,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;QAEpC,sEAAsE;QACtE,6DAA6D;QAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,2EAA2E;QAC3E,4EAA4E;QAC5E,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,IAAI,cAAc,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;YACxD,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;gBAC5D,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;gBACpC,IAAI,cAAc,EAAE,CAAC;oBACnB,cAAc,CAAC,oBAAoB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;oBAC/D,eAAe,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;gBACrD,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAoB;wBAC5B,OAAO,EAAE,UAAU,EAAE;wBACrB,SAAS,EAAE,gBAAgB;wBAC3B,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACzC,QAAQ,EAAE,KAAK;wBACf,gBAAgB,EAAE,IAAI;wBACtB,oBAAoB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBAC/C,CAAC;oBACF,eAAe,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YACvC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,uEAAuE;YACvE,OAAO;QACT,CAAC;QAED,gDAAgD;QAChD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,6DAA6D;YAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAE5C,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,cAAc,GAClB,KAAK,CAAC,eAAe;gBACrB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1E,SAAS,CAAC;YACZ,MAAM,aAAa,GAAoB;gBACrC,OAAO,EAAE,UAAU,EAAE;gBACrB,SAAS,EAAE,eAAe;gBAC1B,SAAS,EAAE,cAAc;gBACzB,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACzC,QAAQ,EAAE,KAAK;gBACf,gBAAgB,EAAE,IAAI;aACvB,CAAC;YACF,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAC5C,QAAQ,GAAG,aAAa,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YAChD,wEAAwE;YACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAEvC,4BAA4B;YAC5B,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,oBAAoB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACzD,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,qCAAqC;YACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC"}
|
package/dist/cli/hooks/save.js
CHANGED
|
@@ -33,7 +33,7 @@ function isImplementationFile(filePath) {
|
|
|
33
33
|
if (normalized.endsWith('.md'))
|
|
34
34
|
return false;
|
|
35
35
|
// Exclude plan files explicitly
|
|
36
|
-
if (normalized.includes('.claude/plans/'))
|
|
36
|
+
if (normalized.includes('.claude/plans/') || normalized.includes('.hermes/plans/'))
|
|
37
37
|
return false;
|
|
38
38
|
// Exclude documentation directories
|
|
39
39
|
if (normalized.includes('/docs/'))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../src/cli/hooks/save.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAwB,MAAM,+BAA+B,CAAC;AACvG,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE7F,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,uCAAuC;AACvC,MAAM,kBAAkB,GAAG,aAAsB,CAAC;AAElD,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,SAAS,oBAAoB,CAAC,QAA4B;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAE9D,yBAAyB;IACzB,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7C,gCAAgC;IAChC,IAAI,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../src/cli/hooks/save.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
export interface ToolInput {
|
|
13
13
|
/** File path (Edit, Write tools) */
|
|
14
14
|
file_path?: string;
|
|
15
|
+
/** File path used by Hermes file tools (write_file/read_file/patch) */
|
|
16
|
+
path?: string;
|
|
15
17
|
/** Command (Bash tool) */
|
|
16
18
|
command?: string;
|
|
17
19
|
/** Description (Task tool) */
|
|
@@ -77,8 +79,8 @@ export interface HookInput {
|
|
|
77
79
|
reason?: 'clear' | 'logout' | 'prompt_input_exit' | 'other';
|
|
78
80
|
/** Codex collaboration mode (e.g. plan, default). */
|
|
79
81
|
collaboration_mode?: string;
|
|
80
|
-
/** Originating client, set by normalizeHookInput() (e.g., 'grok', 'codex'). undefined = Claude/native. */
|
|
81
|
-
client?: 'grok' | 'codex' | 'claude';
|
|
82
|
+
/** Originating client, set by normalizeHookInput() (e.g., 'grok', 'codex', 'hermes'). undefined = Claude/native. */
|
|
83
|
+
client?: 'grok' | 'codex' | 'claude' | 'hermes';
|
|
82
84
|
}
|
|
83
85
|
/**
|
|
84
86
|
* Hook-specific output for PreToolUse (v4.2.0+)
|
|
@@ -189,6 +191,11 @@ export declare function sendPostToolUseContext(additionalContext: string): void;
|
|
|
189
191
|
* @param reason - Reason for blocking
|
|
190
192
|
*/
|
|
191
193
|
export declare function sendBlock(reason: string): void;
|
|
194
|
+
/**
|
|
195
|
+
* Emit a Hermes shell-hook context-injection response.
|
|
196
|
+
* Hermes honors {"context": "..."} only on pre_llm_call.
|
|
197
|
+
*/
|
|
198
|
+
export declare function sendHermesContext(context: string): void;
|
|
192
199
|
/**
|
|
193
200
|
* Send an updatedInput response (PreToolUse only)
|
|
194
201
|
*
|
|
@@ -219,7 +226,7 @@ export declare function isPlanMode(input: HookInput): boolean;
|
|
|
219
226
|
*
|
|
220
227
|
* Plan files can be in:
|
|
221
228
|
* - Global: ~/.claude/plans/*.md (e.g., C:/Users/xxx/.claude/plans/my-plan.md)
|
|
222
|
-
* - Project: .claude/plans/*.md (relative path)
|
|
229
|
+
* - Project: .claude/plans/*.md or .hermes/plans/*.md (relative path)
|
|
223
230
|
*
|
|
224
231
|
* @param input - Hook input
|
|
225
232
|
* @returns true if the tool is operating on a plan file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdin-parser.d.ts","sourceRoot":"","sources":["../../../src/cli/hooks/stdin-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,8BAA8B;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;IAChD,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,eAAe,CAAC,EAAE,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,MAAM,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,GAAG,kBAAkB,CAAC;IAC9J,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,uCAAuC;IACvC,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,sBAAsB;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,8DAA8D;IAC9D,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,mBAAmB,GAAG,OAAO,CAAC;IAC5D,qDAAqD;IACrD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,
|
|
1
|
+
{"version":3,"file":"stdin-parser.d.ts","sourceRoot":"","sources":["../../../src/cli/hooks/stdin-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,6 +50,96 @@ const CODEX_TOOL_MAP = {
|
|
|
50
50
|
exit_plan_mode: 'ExitPlanMode',
|
|
51
51
|
};
|
|
52
52
|
const CODEX_NATIVE_TOOLS = new Set(Object.keys(CODEX_TOOL_MAP));
|
|
53
|
+
/**
|
|
54
|
+
* Hermes (Claude Code / Nous) shell-hook event names (snake_case) →
|
|
55
|
+
* sqlew canonical (Claude PascalCase) event names.
|
|
56
|
+
*
|
|
57
|
+
* Hermes has no dedicated UserPromptSubmit event; pre_llm_call fires at the
|
|
58
|
+
* same point and is the only context-injection hook, so we map it to
|
|
59
|
+
* UserPromptSubmit. post_llm_call is the closest analog to Claude's Stop.
|
|
60
|
+
*/
|
|
61
|
+
const HERMES_EVENT_MAP = {
|
|
62
|
+
pre_tool_call: 'PreToolUse',
|
|
63
|
+
post_tool_call: 'PostToolUse',
|
|
64
|
+
pre_llm_call: 'UserPromptSubmit',
|
|
65
|
+
post_llm_call: 'Stop',
|
|
66
|
+
on_session_start: 'SessionStart',
|
|
67
|
+
on_session_end: 'SessionEnd',
|
|
68
|
+
on_session_finalize: 'SessionEnd',
|
|
69
|
+
subagent_stop: 'SubagentStop',
|
|
70
|
+
subagent_start: 'PreToolUse',
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Hermes built-in tool names → sqlew canonical (Claude) tool names.
|
|
74
|
+
* Only the names sqlew's hook handlers branch on need mapping; unknown
|
|
75
|
+
* names pass through unchanged.
|
|
76
|
+
*/
|
|
77
|
+
const HERMES_TOOL_MAP = {
|
|
78
|
+
terminal: 'Bash',
|
|
79
|
+
write_file: 'Write',
|
|
80
|
+
patch: 'Edit',
|
|
81
|
+
read_file: 'Read',
|
|
82
|
+
todo: 'TodoWrite',
|
|
83
|
+
delegate_task: 'Task',
|
|
84
|
+
};
|
|
85
|
+
const HERMES_NATIVE_TOOLS = new Set(Object.keys(HERMES_TOOL_MAP));
|
|
86
|
+
const HERMES_NATIVE_EVENTS = new Set(Object.keys(HERMES_EVENT_MAP));
|
|
87
|
+
function isHermesPayload(raw) {
|
|
88
|
+
const event = raw.hook_event_name;
|
|
89
|
+
if (event && HERMES_NATIVE_EVENTS.has(event)) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
const tool = raw.tool_name;
|
|
93
|
+
if (tool && HERMES_NATIVE_TOOLS.has(tool)) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
// Claude/Codex use PascalCase event names; do not classify as Hermes even when
|
|
97
|
+
// HERMES_* env vars are set in the parent shell (common on dev machines).
|
|
98
|
+
if (event && /^[A-Z]/.test(event)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
const hasHermesEnv = !!(process.env.HERMES_SESSION_ID ||
|
|
102
|
+
process.env.HERMES_HOME ||
|
|
103
|
+
process.env._HERMES_GATEWAY);
|
|
104
|
+
if (raw.extra && typeof raw.extra === 'object' && hasHermesEnv) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
// Env-only fallback for empty or lifecycle payloads spawned by Hermes hooks.
|
|
108
|
+
if (hasHermesEnv && !event && !tool) {
|
|
109
|
+
// Empty stdin is ambiguous — prefer Codex/Grok env when those clients spawned the hook.
|
|
110
|
+
if (process.env.CODEX_SESSION_ID || process.env.CODEX_CWD || process.env.CODEX_HOME) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
if (process.env.GROK_HOOK_EVENT || process.env.GROK_WORKSPACE_ROOT) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
function normalizeHermesPayload(raw) {
|
|
121
|
+
const rawEvent = raw.hook_event_name;
|
|
122
|
+
const rawTool = raw.tool_name;
|
|
123
|
+
const toolInput = raw.tool_input ?? undefined;
|
|
124
|
+
const normalizedToolInput = toolInput
|
|
125
|
+
? {
|
|
126
|
+
...toolInput,
|
|
127
|
+
file_path: toolInput.file_path ??
|
|
128
|
+
toolInput.path,
|
|
129
|
+
}
|
|
130
|
+
: undefined;
|
|
131
|
+
return {
|
|
132
|
+
...raw,
|
|
133
|
+
client: 'hermes',
|
|
134
|
+
hook_event_name: rawEvent
|
|
135
|
+
? HERMES_EVENT_MAP[rawEvent] || rawEvent
|
|
136
|
+
: raw.hook_event_name,
|
|
137
|
+
tool_name: rawTool ? HERMES_TOOL_MAP[rawTool] || rawTool : raw.tool_name,
|
|
138
|
+
tool_input: normalizedToolInput,
|
|
139
|
+
session_id: (raw.session_id || process.env.HERMES_SESSION_ID),
|
|
140
|
+
cwd: (raw.cwd || process.env.TERMINAL_CWD),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
53
143
|
function extractCollaborationMode(raw) {
|
|
54
144
|
const direct = raw.collaboration_mode ?? raw.collaborationMode;
|
|
55
145
|
if (typeof direct === 'string') {
|
|
@@ -123,6 +213,9 @@ export function normalizeHookInput(raw) {
|
|
|
123
213
|
if (isGrok) {
|
|
124
214
|
// Grok branch below
|
|
125
215
|
}
|
|
216
|
+
else if (isHermesPayload(r)) {
|
|
217
|
+
return normalizeHermesPayload(r);
|
|
218
|
+
}
|
|
126
219
|
else if (isCodexPayload(r)) {
|
|
127
220
|
return normalizeCodexPayload(r);
|
|
128
221
|
}
|
|
@@ -268,9 +361,20 @@ export function sendBlock(reason) {
|
|
|
268
361
|
if (process.env.GROK_HOOK_EVENT || process.env.GROK_WORKSPACE_ROOT) {
|
|
269
362
|
console.log(JSON.stringify({ decision: 'deny', reason }));
|
|
270
363
|
}
|
|
364
|
+
// Hermes: pre_tool_call block is read from stdout JSON (decision/block shape).
|
|
365
|
+
if (process.env.HERMES_SESSION_ID || process.env.HERMES_HOME || process.env._HERMES_GATEWAY) {
|
|
366
|
+
console.log(JSON.stringify({ decision: 'block', reason }));
|
|
367
|
+
}
|
|
271
368
|
console.error(reason);
|
|
272
369
|
process.exit(2);
|
|
273
370
|
}
|
|
371
|
+
/**
|
|
372
|
+
* Emit a Hermes shell-hook context-injection response.
|
|
373
|
+
* Hermes honors {"context": "..."} only on pre_llm_call.
|
|
374
|
+
*/
|
|
375
|
+
export function sendHermesContext(context) {
|
|
376
|
+
console.log(JSON.stringify({ context }));
|
|
377
|
+
}
|
|
274
378
|
/**
|
|
275
379
|
* Send an updatedInput response (PreToolUse only)
|
|
276
380
|
*
|
|
@@ -333,7 +437,7 @@ export function isPlanMode(input) {
|
|
|
333
437
|
*
|
|
334
438
|
* Plan files can be in:
|
|
335
439
|
* - Global: ~/.claude/plans/*.md (e.g., C:/Users/xxx/.claude/plans/my-plan.md)
|
|
336
|
-
* - Project: .claude/plans/*.md (relative path)
|
|
440
|
+
* - Project: .claude/plans/*.md or .hermes/plans/*.md (relative path)
|
|
337
441
|
*
|
|
338
442
|
* @param input - Hook input
|
|
339
443
|
* @returns true if the tool is operating on a plan file
|
|
@@ -345,10 +449,9 @@ export function isPlanFile(input) {
|
|
|
345
449
|
}
|
|
346
450
|
// Normalize path separators for cross-platform support
|
|
347
451
|
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
348
|
-
// Match
|
|
349
|
-
//
|
|
350
|
-
|
|
351
|
-
return /[/\\]?\.claude\/plans\/[^/]+\.md$/.test(normalizedPath);
|
|
452
|
+
// Match global + project-local plan paths for Claude (.claude/plans/) and
|
|
453
|
+
// Hermes (.hermes/plans/).
|
|
454
|
+
return /[/\\]?\.(claude|hermes)\/plans\/[^/]+\.md$/.test(normalizedPath);
|
|
352
455
|
}
|
|
353
456
|
/**
|
|
354
457
|
* Check if all todos are completed
|
|
@@ -374,7 +477,8 @@ export function getProjectPath(input) {
|
|
|
374
477
|
return (input.cwd ||
|
|
375
478
|
process.env.CLAUDE_PROJECT_DIR ||
|
|
376
479
|
process.env.CODEX_CWD ||
|
|
377
|
-
process.env.GROK_WORKSPACE_ROOT
|
|
480
|
+
process.env.GROK_WORKSPACE_ROOT ||
|
|
481
|
+
process.env.TERMINAL_CWD);
|
|
378
482
|
}
|
|
379
483
|
/**
|
|
380
484
|
* Returns the best available absolute path to the currently tracked plan file.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdin-parser.js","sourceRoot":"","sources":["../../../src/cli/hooks/stdin-parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stdin-parser.js","sourceRoot":"","sources":["../../../src/cli/hooks/stdin-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAoI9D,+EAA+E;AAC/E,2DAA2D;AAC3D,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,cAAc,GAAiD;IACnE,YAAY,EAAE,YAAY;IAC1B,aAAa,EAAE,aAAa;IAC5B,qBAAqB,EAAE,aAAa;IACpC,kBAAkB,EAAE,kBAAkB;IACtC,aAAa,EAAE,cAAc;IAC7B,WAAW,EAAE,YAAY;IACzB,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,YAAY;CAC1B,CAAC;AAEF;;;GAGG;AACH,MAAM,aAAa,GAA2B;IAC5C,eAAe,EAAE,eAAe;IAChC,cAAc,EAAE,cAAc;IAC9B,cAAc,EAAE,MAAM;IACtB,gBAAgB,EAAE,MAAM;IACxB,SAAS,EAAE,MAAM;CAClB,CAAC;AAEF,sFAAsF;AACtF,MAAM,cAAc,GAA2B;IAC7C,aAAa,EAAE,MAAM;IACrB,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,eAAe;IAChC,cAAc,EAAE,cAAc;CAC/B,CAAC;AAEF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAiD;IACrE,aAAa,EAAE,YAAY;IAC3B,cAAc,EAAE,aAAa;IAC7B,YAAY,EAAE,kBAAkB;IAChC,aAAa,EAAE,MAAM;IACrB,gBAAgB,EAAE,cAAc;IAChC,cAAc,EAAE,YAAY;IAC5B,mBAAmB,EAAE,YAAY;IACjC,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,YAAY;CAC7B,CAAC;AAEF;;;;GAIG;AACH,MAAM,eAAe,GAA2B;IAC9C,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,OAAO;IACnB,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,MAAM;IACjB,IAAI,EAAE,WAAW;IACjB,aAAa,EAAE,MAAM;CACtB,CAAC;AAEF,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAClE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAEpE,SAAS,eAAe,CAAC,GAA4B;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,eAAqC,CAAC;IACxD,IAAI,KAAK,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,SAA+B,CAAC;IACjD,IAAI,IAAI,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+EAA+E;IAC/E,0EAA0E;IAC1E,IAAI,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,CAAC,CACrB,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,eAAe,CAC5B,CAAC;IAEF,IAAI,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,YAAY,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6EAA6E;IAC7E,IAAI,YAAY,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,wFAAwF;QACxF,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;YACnE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,GAA4B;IAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAqC,CAAC;IAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,SAA+B,CAAC;IACpD,MAAM,SAAS,GAAI,GAAG,CAAC,UAAoC,IAAI,SAAS,CAAC;IAEzE,MAAM,mBAAmB,GAA0B,SAAS;QAC1D,CAAC,CAAC;YACE,GAAG,SAAS;YACZ,SAAS,EACN,SAAS,CAAC,SAAgC;gBAC1C,SAAS,CAAC,IAA2B;SACzC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,GAAI,GAAiB;QACrB,MAAM,EAAE,QAAQ;QAChB,eAAe,EAAE,QAAQ;YACvB,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAK,QAAyC;YAC1E,CAAC,CAAE,GAAG,CAAC,eAAgD;QACzD,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAE,GAAG,CAAC,SAAgC;QAChG,UAAU,EAAE,mBAAmB;QAC/B,UAAU,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAuB;QACnF,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAuB;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,GAA4B;IAC5D,MAAM,MAAM,GAAG,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC,iBAAiB,CAAC;IAC/D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,MAAiC,CAAC;QACjD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,uBAAuB,IAAI,GAAG,CAAC,qBAAqB,CAAC;IACtE,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,GAA4B;IAClD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAuB,CAAC;IACnE,IAAI,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,GAA4B;IACzD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAuB,CAAC;IACtE,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAExD,OAAO;QACL,GAAI,GAAiB;QACrB,MAAM,EAAE,OAAO;QACf,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAE,GAAG,CAAC,SAAgC;QAC/F,UAAU,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS,CAA0B;QACtE,UAAU,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAuB;QACnG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAuB;QAC/F,eAAe,EAAE,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,cAAc,CAAuB;QAClF,kBAAkB,EAAE,iBAAiB;QACrC,eAAe,EACZ,GAAG,CAAC,eAAsC;YAC3C,CAAC,iBAAiB,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,GAAG,CAAC,eAAsC,CAAC;KACvG,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,GAAG,GAAG,EAAE,CAAC;IACX,CAAC;IACD,MAAM,CAAC,GAAG,GAA8B,CAAC;IAEzC,MAAM,MAAM,GAAG,CAAC,CAAC,CACf,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,SAAS;QACX,OAAO,CAAC,GAAG,CAAC,eAAe;QAC3B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAChC,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,oBAAoB;IACtB,CAAC;SAAM,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,0CAA0C;QAC1C,OAAO,CAAc,CAAC;IACxB,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAExE,CAAC;IACd,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAuB,CAAC;IAElE,OAAO;QACL,GAAI,CAAe;QACnB,MAAM,EAAE,MAAM;QACd,eAAe,EAAE,QAAQ;YACvB,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAK,QAAyC;YACxE,CAAC,CAAE,CAAC,CAAC,eAAgD;QACvD,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,SAAgC;QAC5F,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,CAA0B;QAClE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAuB;QAC9F,sFAAsF;QACtF,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAuB;KACzF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAAqB,EAAE,SAAiB;IAC1E,mFAAmF;IACnF,mFAAmF;IACnF,6EAA6E;IAC7E,IAAI,CAAC,SAAS,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,oFAAoF;IACpF,qFAAqF;IACrF,+EAA+E;IAC/E,mHAAmH;IACnH,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACvG,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,8BAA8B;QAC9B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,2BAA2B;QAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,IAAI,IAAI,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjB,qFAAqF;gBACrF,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACrG,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,gBAAgB;QAChB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAClC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,oCAAoC;QACpC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAkB;IAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,iBAA0B,EAAE,aAAsB;IAC7E,MAAM,MAAM,GAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IACD,eAAe,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,iBAAyB;IAC9D,MAAM,MAAM,GAAe;QACzB,QAAQ,EAAE,IAAI;QACd,kBAAkB,EAAE;YAClB,aAAa,EAAE,aAAa;YAC5B,iBAAiB;SAClB;KACF,CAAC;IACF,eAAe,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,0FAA0F;IAC1F,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,+EAA+E;IAC/E,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAAwB,EAAE,aAAiC;IAC1F,MAAM,YAAY,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,aAAa,EAAE,CAAC;IAC5D,MAAM,MAAM,GAAe;QACzB,QAAQ,EAAE,IAAI;QACd,YAAY;KACb,CAAC;IACF,eAAe,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,KAAgB;IACzC,8CAA8C;IAC9C,IAAI,KAAK,CAAC,eAAe,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,KAAK,CAAC,kBAAkB,EAAE,WAAW,EAAE,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAEpE,mFAAmF;IACnF,mFAAmF;IACnF,kFAAkF;IAClF,6EAA6E;IAC7E,wBAAwB;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7B,IACE,IAAI,KAAK,eAAe;QACxB,IAAI,KAAK,cAAc;QACvB,IAAI,KAAK,iBAAiB;QAC1B,IAAI,KAAK,gBAAgB,EACzB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,KAAgB;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uDAAuD;IACvD,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEpD,0EAA0E;IAC1E,2BAA2B;IAC3B,OAAO,4CAA4C,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAgB;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;IACtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAgB;IAC7C,OAAO,CACL,KAAK,CAAC,GAAG;QACT,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAC9B,OAAO,CAAC,GAAG,CAAC,SAAS;QACrB,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,CACzB,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,0DAA0D;IAC1D,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,OAAO,KAAK,CAAC,UAAU,EAAE,aAAa,KAAK,MAAM,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-on-prompt.test.d.ts","sourceRoot":"","sources":["../../../src/tests/integration/hermes-on-prompt.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hermes on-prompt integration tests
|
|
3
|
+
*
|
|
4
|
+
* @since v5.3.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it } from 'node:test';
|
|
7
|
+
import assert from 'node:assert';
|
|
8
|
+
import { execFileSync } from 'node:child_process';
|
|
9
|
+
import { existsSync } from 'node:fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
const projectRoot = join(import.meta.dirname, '../../..');
|
|
12
|
+
const distEntry = join(projectRoot, 'dist/index.js');
|
|
13
|
+
function runHook(cmd, payload, env = {}) {
|
|
14
|
+
return execFileSync('node', [distEntry, cmd], {
|
|
15
|
+
input: JSON.stringify(payload),
|
|
16
|
+
encoding: 'utf8',
|
|
17
|
+
cwd: projectRoot,
|
|
18
|
+
env: { ...process.env, ...env },
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
describe('on-prompt (Hermes)', () => {
|
|
22
|
+
it('emits {context} JSON for a Hermes pre_llm_call', () => {
|
|
23
|
+
assert.ok(existsSync(distEntry), 'dist/index.js missing — run npm run build first');
|
|
24
|
+
const out = runHook('on-prompt', {
|
|
25
|
+
hook_event_name: 'pre_llm_call',
|
|
26
|
+
cwd: projectRoot,
|
|
27
|
+
session_id: 's1',
|
|
28
|
+
extra: { user_message: 'plan a feature' },
|
|
29
|
+
}, { HERMES_SESSION_ID: 's1' });
|
|
30
|
+
const parsed = JSON.parse(out.trim());
|
|
31
|
+
assert.ok(typeof parsed.context === 'string' && parsed.context.includes('sqlew'));
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=hermes-on-prompt.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-on-prompt.test.js","sourceRoot":"","sources":["../../../src/tests/integration/hermes-on-prompt.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAErD,SAAS,OAAO,CAAC,GAAW,EAAE,OAAe,EAAE,MAA8B,EAAE;IAC7E,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE;QAC5C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC9B,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,WAAW;QAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;KAChC,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,iDAAiD,CAAC,CAAC;QACpF,MAAM,GAAG,GAAG,OAAO,CACjB,WAAW,EACX;YACE,eAAe,EAAE,cAAc;YAC/B,GAAG,EAAE,WAAW;YAChB,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE;SAC1C,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC5B,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-pr-adr.test.d.ts","sourceRoot":"","sources":["../../../src/tests/integration/hermes-pr-adr.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hermes pr-adr integration tests
|
|
3
|
+
*
|
|
4
|
+
* @since v5.3.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it } from 'node:test';
|
|
7
|
+
import assert from 'node:assert';
|
|
8
|
+
import { execFileSync } from 'node:child_process';
|
|
9
|
+
import { existsSync } from 'node:fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
const projectRoot = join(import.meta.dirname, '../../..');
|
|
12
|
+
const distEntry = join(projectRoot, 'dist/index.js');
|
|
13
|
+
describe('pr-adr (Hermes)', () => {
|
|
14
|
+
it('blocks gh pr create without ADR markers under Hermes', () => {
|
|
15
|
+
assert.ok(existsSync(distEntry), 'dist/index.js missing — run npm run build first');
|
|
16
|
+
let out = '';
|
|
17
|
+
try {
|
|
18
|
+
out = execFileSync('node', [distEntry, 'pr-adr'], {
|
|
19
|
+
input: JSON.stringify({
|
|
20
|
+
hook_event_name: 'pre_tool_call',
|
|
21
|
+
tool_name: 'terminal',
|
|
22
|
+
tool_input: { command: 'gh pr create --title x --body "no markers"' },
|
|
23
|
+
cwd: projectRoot,
|
|
24
|
+
}),
|
|
25
|
+
encoding: 'utf8',
|
|
26
|
+
cwd: projectRoot,
|
|
27
|
+
env: { ...process.env, HERMES_SESSION_ID: 's1' },
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
const err = e;
|
|
32
|
+
out = (err.stdout || '').toString();
|
|
33
|
+
}
|
|
34
|
+
const parsed = JSON.parse(out.trim().split('\n').pop());
|
|
35
|
+
assert.strictEqual(parsed.decision, 'block');
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=hermes-pr-adr.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-pr-adr.test.js","sourceRoot":"","sources":["../../../src/tests/integration/hermes-pr-adr.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAErD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,iDAAiD,CAAC,CAAC;QACpF,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;gBAChD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpB,eAAe,EAAE,eAAe;oBAChC,SAAS,EAAE,UAAU;oBACrB,UAAU,EAAE,EAAE,OAAO,EAAE,4CAA4C,EAAE;oBACrE,GAAG,EAAE,WAAW;iBACjB,CAAC;gBACF,QAAQ,EAAE,MAAM;gBAChB,GAAG,EAAE,WAAW;gBAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE;aACjD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,CAAiC,CAAC;YAC9C,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAG,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-side-effect-hooks.test.d.ts","sourceRoot":"","sources":["../../../src/tests/integration/hermes-side-effect-hooks.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hermes side-effect hook integration tests
|
|
3
|
+
*
|
|
4
|
+
* @since v5.3.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it } from 'node:test';
|
|
7
|
+
import assert from 'node:assert';
|
|
8
|
+
import { execFileSync } from 'node:child_process';
|
|
9
|
+
import { existsSync } from 'node:fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { areAllTodosCompleted, normalizeHookInput } from '../../cli/hooks/stdin-parser.js';
|
|
12
|
+
const projectRoot = join(import.meta.dirname, '../../..');
|
|
13
|
+
const distEntry = join(projectRoot, 'dist/index.js');
|
|
14
|
+
describe('hermes side-effect hooks', () => {
|
|
15
|
+
it('normalizes Hermes write_file for track-plan matching', () => {
|
|
16
|
+
const input = normalizeHookInput({
|
|
17
|
+
hook_event_name: 'pre_tool_call',
|
|
18
|
+
tool_name: 'write_file',
|
|
19
|
+
tool_input: { path: '.hermes/plans/2026-06-27_test.md' },
|
|
20
|
+
cwd: projectRoot,
|
|
21
|
+
extra: {},
|
|
22
|
+
});
|
|
23
|
+
assert.strictEqual(input.tool_name, 'Write');
|
|
24
|
+
assert.strictEqual(input.tool_input?.file_path, '.hermes/plans/2026-06-27_test.md');
|
|
25
|
+
});
|
|
26
|
+
it('does not treat cancelled todos as all completed', () => {
|
|
27
|
+
const input = normalizeHookInput({
|
|
28
|
+
hook_event_name: 'post_tool_call',
|
|
29
|
+
tool_name: 'todo',
|
|
30
|
+
tool_input: {
|
|
31
|
+
todos: [
|
|
32
|
+
{ content: 'a', status: 'completed' },
|
|
33
|
+
{ content: 'b', status: 'cancelled' },
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
cwd: projectRoot,
|
|
37
|
+
extra: {},
|
|
38
|
+
});
|
|
39
|
+
assert.strictEqual(areAllTodosCompleted(input), false);
|
|
40
|
+
});
|
|
41
|
+
it('runs save hook with exit 0 for Hermes write_file payload', () => {
|
|
42
|
+
assert.ok(existsSync(distEntry), 'dist/index.js missing — run npm run build first');
|
|
43
|
+
const out = execFileSync('node', [distEntry, 'save'], {
|
|
44
|
+
input: JSON.stringify({
|
|
45
|
+
hook_event_name: 'post_tool_call',
|
|
46
|
+
tool_name: 'write_file',
|
|
47
|
+
tool_input: { path: 'README.md' },
|
|
48
|
+
cwd: projectRoot,
|
|
49
|
+
}),
|
|
50
|
+
encoding: 'utf8',
|
|
51
|
+
cwd: projectRoot,
|
|
52
|
+
env: { ...process.env, HERMES_SESSION_ID: 's1' },
|
|
53
|
+
});
|
|
54
|
+
assert.ok(out.includes('continue') || out.trim() === '' || out.includes('hookSpecificOutput'));
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=hermes-side-effect-hooks.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-side-effect-hooks.test.js","sourceRoot":"","sources":["../../../src/tests/integration/hermes-side-effect-hooks.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAErD,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,KAAK,GAAG,kBAAkB,CAAC;YAC/B,eAAe,EAAE,eAAe;YAChC,SAAS,EAAE,YAAY;YACvB,UAAU,EAAE,EAAE,IAAI,EAAE,kCAAkC,EAAE;YACxD,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,kCAAkC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,KAAK,GAAG,kBAAkB,CAAC;YAC/B,eAAe,EAAE,gBAAgB;YACjC,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE;oBACrC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE;iBACtC;aACF;YACD,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,iDAAiD,CAAC,CAAC;QACpF,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;YACpD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;gBACpB,eAAe,EAAE,gBAAgB;gBACjC,SAAS,EAAE,YAAY;gBACvB,UAAU,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBACjC,GAAG,EAAE,WAAW;aACjB,CAAC;YACF,QAAQ,EAAE,MAAM;YAChB,GAAG,EAAE,WAAW;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE;SACjD,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -20,6 +20,9 @@ describe('codex-hook-normalization', () => {
|
|
|
20
20
|
delete process.env.GROK_WORKSPACE_ROOT;
|
|
21
21
|
delete process.env.CLAUDE_PROJECT_DIR;
|
|
22
22
|
delete process.env.SQLEW_PROJECT_ROOT;
|
|
23
|
+
delete process.env.HERMES_SESSION_ID;
|
|
24
|
+
delete process.env.HERMES_HOME;
|
|
25
|
+
delete process.env._HERMES_GATEWAY;
|
|
23
26
|
});
|
|
24
27
|
afterEach(() => {
|
|
25
28
|
process.env = { ...originalEnv };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-hook-normalization.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/hooks/codex-hook-normalization.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,UAAU,GACX,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,uBAAuB,EACvB,sCAAsC,GACvC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvC,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACnC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACvC,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"codex-hook-normalization.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/hooks/codex-hook-normalization.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-hook-normalization.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/unit/hooks/hermes-hook-normalization.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hermes Hook Normalization Unit Tests
|
|
3
|
+
*
|
|
4
|
+
* @since v5.3.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
7
|
+
import assert from 'node:assert';
|
|
8
|
+
import { normalizeHookInput, isPlanMode, isPlanFile, getProjectPath, } from '../../../cli/hooks/stdin-parser.js';
|
|
9
|
+
describe('hermes-hook-normalization', () => {
|
|
10
|
+
const originalEnv = { ...process.env };
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
delete process.env.CODEX_SESSION_ID;
|
|
13
|
+
delete process.env.CODEX_CWD;
|
|
14
|
+
delete process.env.CODEX_HOME;
|
|
15
|
+
delete process.env.GROK_HOOK_EVENT;
|
|
16
|
+
delete process.env.GROK_WORKSPACE_ROOT;
|
|
17
|
+
delete process.env.HERMES_SESSION_ID;
|
|
18
|
+
delete process.env.HERMES_HOME;
|
|
19
|
+
delete process.env._HERMES_GATEWAY;
|
|
20
|
+
});
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
process.env = { ...originalEnv };
|
|
23
|
+
});
|
|
24
|
+
describe('normalizeHookInput', () => {
|
|
25
|
+
it('should map Hermes pre_tool_call + terminal to PreToolUse + Bash', () => {
|
|
26
|
+
const result = normalizeHookInput({
|
|
27
|
+
hook_event_name: 'pre_tool_call',
|
|
28
|
+
tool_name: 'terminal',
|
|
29
|
+
tool_input: { command: 'gh pr create' },
|
|
30
|
+
session_id: 'sess-h1',
|
|
31
|
+
cwd: 'C:/project',
|
|
32
|
+
extra: { task_id: 't1' },
|
|
33
|
+
});
|
|
34
|
+
assert.strictEqual(result.client, 'hermes');
|
|
35
|
+
assert.strictEqual(result.hook_event_name, 'PreToolUse');
|
|
36
|
+
assert.strictEqual(result.tool_name, 'Bash');
|
|
37
|
+
assert.strictEqual(result.cwd, 'C:/project');
|
|
38
|
+
assert.strictEqual(result.session_id, 'sess-h1');
|
|
39
|
+
});
|
|
40
|
+
it('should map Hermes post_tool_call + write_file to PostToolUse + Write', () => {
|
|
41
|
+
const result = normalizeHookInput({
|
|
42
|
+
hook_event_name: 'post_tool_call',
|
|
43
|
+
tool_name: 'write_file',
|
|
44
|
+
tool_input: { path: 'src/foo.ts' },
|
|
45
|
+
cwd: 'C:/project',
|
|
46
|
+
});
|
|
47
|
+
assert.strictEqual(result.client, 'hermes');
|
|
48
|
+
assert.strictEqual(result.hook_event_name, 'PostToolUse');
|
|
49
|
+
assert.strictEqual(result.tool_name, 'Write');
|
|
50
|
+
assert.strictEqual(result.tool_input?.file_path, 'src/foo.ts');
|
|
51
|
+
});
|
|
52
|
+
it('should map Hermes patch to Edit and todo to TodoWrite', () => {
|
|
53
|
+
assert.strictEqual(normalizeHookInput({ hook_event_name: 'post_tool_call', tool_name: 'patch', cwd: 'C:/p' }).tool_name, 'Edit');
|
|
54
|
+
assert.strictEqual(normalizeHookInput({ hook_event_name: 'post_tool_call', tool_name: 'todo', cwd: 'C:/p' }).tool_name, 'TodoWrite');
|
|
55
|
+
});
|
|
56
|
+
it('should map pre_llm_call to UserPromptSubmit', () => {
|
|
57
|
+
const result = normalizeHookInput({
|
|
58
|
+
hook_event_name: 'pre_llm_call',
|
|
59
|
+
cwd: 'C:/project',
|
|
60
|
+
session_id: 'sess-h2',
|
|
61
|
+
extra: { user_message: 'do the thing' },
|
|
62
|
+
});
|
|
63
|
+
assert.strictEqual(result.client, 'hermes');
|
|
64
|
+
assert.strictEqual(result.hook_event_name, 'UserPromptSubmit');
|
|
65
|
+
});
|
|
66
|
+
it('should detect Hermes via env when stdin lacks tool fields', () => {
|
|
67
|
+
process.env.HERMES_SESSION_ID = 'sess-env';
|
|
68
|
+
const result = normalizeHookInput({ hook_event_name: 'on_session_start', cwd: 'C:/p' });
|
|
69
|
+
assert.strictEqual(result.client, 'hermes');
|
|
70
|
+
assert.strictEqual(result.hook_event_name, 'SessionStart');
|
|
71
|
+
});
|
|
72
|
+
it('should not misclassify a Claude payload as Hermes', () => {
|
|
73
|
+
const result = normalizeHookInput({
|
|
74
|
+
hook_event_name: 'PreToolUse',
|
|
75
|
+
tool_name: 'Bash',
|
|
76
|
+
tool_input: { command: 'ls' },
|
|
77
|
+
});
|
|
78
|
+
assert.notStrictEqual(result.client, 'hermes');
|
|
79
|
+
assert.strictEqual(result.tool_name, 'Bash');
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('isPlanMode (Hermes)', () => {
|
|
83
|
+
it('should return false for Hermes (no native plan permission mode)', () => {
|
|
84
|
+
const result = normalizeHookInput({
|
|
85
|
+
hook_event_name: 'pre_llm_call',
|
|
86
|
+
cwd: 'C:/project',
|
|
87
|
+
extra: { user_message: 'plan something' },
|
|
88
|
+
});
|
|
89
|
+
assert.strictEqual(isPlanMode(result), false);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe('hermes plan-file + project path', () => {
|
|
93
|
+
it('should recognize .hermes/plans/*.md as a plan file', () => {
|
|
94
|
+
assert.strictEqual(isPlanFile({ tool_input: { file_path: 'C:/proj/.hermes/plans/2026-06-27_x.md' } }), true);
|
|
95
|
+
});
|
|
96
|
+
it('should still recognize .claude/plans/*.md (no regression)', () => {
|
|
97
|
+
assert.strictEqual(isPlanFile({ tool_input: { file_path: '.claude/plans/foo.md' } }), true);
|
|
98
|
+
});
|
|
99
|
+
it('should resolve project path from Hermes cwd', () => {
|
|
100
|
+
assert.strictEqual(getProjectPath({ client: 'hermes', cwd: 'C:/proj' }), 'C:/proj');
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=hermes-hook-normalization.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-hook-normalization.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/hooks/hermes-hook-normalization.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* 0. CLAUDE_PROJECT_DIR environment variable (Claude Code / Grok Build hooks)
|
|
6
6
|
* 0b. GROK_WORKSPACE_ROOT environment variable (Grok Build hooks / MCP)
|
|
7
7
|
* 0c. CODEX_CWD environment variable (Codex hooks / MCP)
|
|
8
|
+
* 0d. TERMINAL_CWD environment variable (Hermes hooks)
|
|
8
9
|
* 1. SQLEW_PROJECT_ROOT environment variable (MCP client can set this)
|
|
9
10
|
* 2. CLI --db-path argument (absolute path) → use dirname
|
|
10
11
|
* 3. CLI --config-path argument (absolute path) → use dirname
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-root.d.ts","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"project-root.d.ts","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CA6D7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiB1D"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* 0. CLAUDE_PROJECT_DIR environment variable (Claude Code / Grok Build hooks)
|
|
6
6
|
* 0b. GROK_WORKSPACE_ROOT environment variable (Grok Build hooks / MCP)
|
|
7
7
|
* 0c. CODEX_CWD environment variable (Codex hooks / MCP)
|
|
8
|
+
* 0d. TERMINAL_CWD environment variable (Hermes hooks)
|
|
8
9
|
* 1. SQLEW_PROJECT_ROOT environment variable (MCP client can set this)
|
|
9
10
|
* 2. CLI --db-path argument (absolute path) → use dirname
|
|
10
11
|
* 3. CLI --config-path argument (absolute path) → use dirname
|
|
@@ -78,6 +79,11 @@ export function determineProjectRoot(options = {}) {
|
|
|
78
79
|
if (codexCwd && path.isAbsolute(codexCwd)) {
|
|
79
80
|
return codexCwd.replace(/\\/g, '/');
|
|
80
81
|
}
|
|
82
|
+
// Priority 0d: TERMINAL_CWD (Hermes shell hooks inject workspace cwd)
|
|
83
|
+
const terminalCwd = process.env.TERMINAL_CWD;
|
|
84
|
+
if (terminalCwd && path.isAbsolute(terminalCwd)) {
|
|
85
|
+
return terminalCwd.replace(/\\/g, '/');
|
|
86
|
+
}
|
|
81
87
|
// Priority 1: SQLEW_PROJECT_ROOT environment variable
|
|
82
88
|
// MCP clients (Junie, Claude Desktop, etc.) can set this to specify project directory
|
|
83
89
|
const envProjectRoot = process.env.SQLEW_PROJECT_ROOT;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Hermes Hook Setup
|
|
2
|
+
|
|
3
|
+
sqlew Plan-to-ADR hooks for [Hermes](https://github.com/NousResearch/hermes-agent) (Claude Code / Nous). Requires **sqlew >= 5.3.0**.
|
|
4
|
+
|
|
5
|
+
## Quick Install (recommended)
|
|
6
|
+
|
|
7
|
+
Use the [sqlew-plugin](https://github.com/sqlew-io/sqlew-plugin) Hermes bundle:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm i -g sqlew
|
|
11
|
+
hermes plugins install sqlew-io/sqlew-plugin/.hermes-plugin
|
|
12
|
+
hermes plugins enable sqlew
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The plugin merges MCP + hooks into `~/.hermes/config.yaml` and copies skills to `~/.hermes/skills/`.
|
|
16
|
+
|
|
17
|
+
## Manual Setup
|
|
18
|
+
|
|
19
|
+
### MCP server
|
|
20
|
+
|
|
21
|
+
Add to `~/.hermes/config.yaml`:
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
mcp_servers:
|
|
25
|
+
sqlew:
|
|
26
|
+
command: sqlew
|
|
27
|
+
args: []
|
|
28
|
+
env: {}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Shell hooks
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
hooks:
|
|
35
|
+
pre_tool_call:
|
|
36
|
+
- matcher: "terminal"
|
|
37
|
+
command: "sqlew pr-adr"
|
|
38
|
+
timeout: 10
|
|
39
|
+
- matcher: "write_file|patch"
|
|
40
|
+
command: "sqlew track-plan"
|
|
41
|
+
timeout: 30
|
|
42
|
+
- matcher: "delegate_task"
|
|
43
|
+
command: "sqlew suggest"
|
|
44
|
+
timeout: 30
|
|
45
|
+
post_tool_call:
|
|
46
|
+
- matcher: "write_file|patch"
|
|
47
|
+
command: "sqlew save"
|
|
48
|
+
timeout: 30
|
|
49
|
+
- matcher: "todo"
|
|
50
|
+
command: "sqlew check-completion"
|
|
51
|
+
timeout: 30
|
|
52
|
+
pre_llm_call:
|
|
53
|
+
- command: "sqlew on-prompt"
|
|
54
|
+
timeout: 10
|
|
55
|
+
on_session_start:
|
|
56
|
+
- command: "sqlew on-session-start"
|
|
57
|
+
timeout: 30
|
|
58
|
+
subagent_stop:
|
|
59
|
+
- command: "sqlew on-subagent-stop"
|
|
60
|
+
timeout: 30
|
|
61
|
+
|
|
62
|
+
hooks_auto_accept: false # first run prompts per (event, command)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Matchers apply only to `pre_tool_call` and `post_tool_call`.
|
|
66
|
+
|
|
67
|
+
## Verify
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
hermes hooks list
|
|
71
|
+
hermes hooks test pre_tool_call --for-tool terminal
|
|
72
|
+
hermes hooks test pre_llm_call
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Differences from Claude Code
|
|
76
|
+
|
|
77
|
+
| Aspect | Claude / Codex / Grok | Hermes |
|
|
78
|
+
|--------|----------------------|--------|
|
|
79
|
+
| Hook registration | Plugin `hooks/hooks.json` | `~/.hermes/config.yaml` `hooks:` block |
|
|
80
|
+
| Event names | PascalCase (`PreToolUse`) | snake_case (`pre_tool_call`) — normalized by sqlew |
|
|
81
|
+
| Tool names | `Bash`, `Write`, `Edit` | `terminal`, `write_file`, `patch` — normalized by sqlew |
|
|
82
|
+
| Plan mode | `permission_mode: plan` or Enter/ExitPlanMode | No native plan mode; `plan` skill writes `.hermes/plans/*.md` |
|
|
83
|
+
| Context injection | `UserPromptSubmit`, `PostToolUse` | **`pre_llm_call` only** (`{"context":"..."}`) |
|
|
84
|
+
| Tool blocking | PreToolUse deny JSON | **`pre_tool_call` only** (`{"decision":"block","reason"}`) |
|
|
85
|
+
| Plan exit hook | `ExitPlanMode` → `on-exit-plan` | **Not available** — use `track-plan`/`save` on `.hermes/plans/` writes |
|
|
86
|
+
|
|
87
|
+
## Plan-to-ADR workflow on Hermes
|
|
88
|
+
|
|
89
|
+
1. **`pre_llm_call`** — sqlew injects plan guidance every turn (FULL on first prompt in session, SHORT after).
|
|
90
|
+
2. **Write plan** — use the `plan` skill; files land in `.hermes/plans/*.md`.
|
|
91
|
+
3. **`track-plan`** — fires on `write_file|patch` to plan paths; caches plan metadata.
|
|
92
|
+
4. **`save`** — promotes decisions when implementation files are edited.
|
|
93
|
+
5. **MCP tools** — agent can call `decision` / `constraint` directly per skill guidance.
|
|
94
|
+
|
|
95
|
+
There is no `ExitPlanMode` equivalent. Extraction relies on plan-file writes and optional `subagent_stop`.
|
|
96
|
+
|
|
97
|
+
## Hook allowlist
|
|
98
|
+
|
|
99
|
+
Hermes prompts for `(event, command)` approval on first run. For CI / gateway:
|
|
100
|
+
|
|
101
|
+
- `hooks_auto_accept: true` in config, or
|
|
102
|
+
- `HERMES_ACCEPT_HOOKS=1`, or
|
|
103
|
+
- `hermes --accept-hooks` (when supported by your entrypoint)
|
|
104
|
+
|
|
105
|
+
## Optional: `post_llm_call` (Stop)
|
|
106
|
+
|
|
107
|
+
sqlew's `on-stop` cleanup is not wired by default on Hermes (stdout ignored except on `pre_llm_call` / `pre_tool_call`). Add manually if needed:
|
|
108
|
+
|
|
109
|
+
```yaml
|
|
110
|
+
hooks:
|
|
111
|
+
post_llm_call:
|
|
112
|
+
- command: "sqlew on-stop"
|
|
113
|
+
timeout: 30
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Skills
|
|
117
|
+
|
|
118
|
+
Copy from sqlew-plugin or install via the Hermes plugin bundle:
|
|
119
|
+
|
|
120
|
+
- `sqlew-decision-format` — `📌` / `🚫` block format
|
|
121
|
+
- `sqlew-plan-guidance` — suggest search + Related Context section
|
|
122
|
+
- `sqlew-pr-adr` — PR body enrichment
|
|
123
|
+
|
|
124
|
+
## `delegate_task` caveat
|
|
125
|
+
|
|
126
|
+
Hermes `delegate_task` maps to Claude `Task`, but has no `subagent_type: Plan`. The `suggest` hook clears Plan-agent cache only — under Hermes it is mostly a no-op. Use MCP `suggest` directly in plans instead.
|
|
127
|
+
|
|
128
|
+
## Uninstall
|
|
129
|
+
|
|
130
|
+
**Plugin install:**
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
hermes plugins remove sqlew
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Removes `~/.hermes/plugins/sqlew/`. Merged config and copied skills are **not** reverted automatically.
|
|
137
|
+
|
|
138
|
+
**Full cleanup (optional):**
|
|
139
|
+
|
|
140
|
+
1. Edit `~/.hermes/config.yaml` — remove `mcp_servers.sqlew` and sqlew `hooks:` entries
|
|
141
|
+
2. Delete `~/.hermes/skills/sqlew-decision-format`, `sqlew-plan-guidance`, and `sqlew-pr-adr` if no longer needed
|
|
142
|
+
3. `hermes gateway restart` if the gateway is running
|
package/docs/HOOKS_GUIDE.md
CHANGED
|
@@ -66,7 +66,7 @@ Source: https://github.com/sqlew-io/sqlew-plugin
|
|
|
66
66
|
|
|
67
67
|
## Grok Build
|
|
68
68
|
|
|
69
|
-
sqlew-plugin provides unified support for Claude Code
|
|
69
|
+
sqlew-plugin provides unified support for Claude Code, Grok Build (v5.2+), Codex (v5.2.1+), and Hermes (v5.3.0+).
|
|
70
70
|
No separate adapter is required.
|
|
71
71
|
|
|
72
72
|
```bash
|
|
@@ -97,18 +97,43 @@ grok inspect # hooks, MCP, skills visible
|
|
|
97
97
|
|
|
98
98
|
Source: https://github.com/sqlew-io/sqlew-plugin
|
|
99
99
|
|
|
100
|
+
## Hermes (Claude Code / Nous)
|
|
101
|
+
|
|
102
|
+
Requires sqlew **>= 5.3.0**. Uses the `.hermes-plugin/` bundle (not the Claude/Codex plugin manifest).
|
|
103
|
+
|
|
104
|
+
**Install:**
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm i -g sqlew
|
|
108
|
+
hermes plugins install sqlew-io/sqlew-plugin/.hermes-plugin
|
|
109
|
+
hermes plugins enable sqlew
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The plugin merges MCP + shell hooks into `~/.hermes/config.yaml` and copies planning skills to `~/.hermes/skills/`.
|
|
113
|
+
|
|
114
|
+
See [HERMES_HOOKS.md](HERMES_HOOKS.md) for manual `config.yaml` setup, event/tool mapping, and Hermes-specific limitations.
|
|
115
|
+
|
|
116
|
+
**Uninstall:**
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
hermes plugins remove sqlew
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Merged `config.yaml` entries and skills under `~/.hermes/skills/sqlew-*` are not removed automatically.
|
|
123
|
+
|
|
100
124
|
## What Gets Configured
|
|
101
125
|
|
|
102
|
-
| Feature | Claude Code | Codex | Grok Build |
|
|
103
|
-
|
|
104
|
-
| Install | `claude plugin install` | `codex plugin install` | `grok plugin install` |
|
|
105
|
-
| MCP server | Plugin `.mcp.json` | Plugin `.mcp.json` | Plugin `.mcp.json` |
|
|
106
|
-
| Plan-to-ADR | Skills + Hooks | Skills + Hooks | Skills + Hooks |
|
|
107
|
-
| PR enrichment | Skill + Hook | Skill + Hook | Skill + Hook |
|
|
108
|
-
| Decision format guidance | Skill (sqlew-decision-format) | Skill (sqlew-decision-format) | Skill (sqlew-decision-format) |
|
|
126
|
+
| Feature | Claude Code | Codex | Grok Build | Hermes |
|
|
127
|
+
|---------|-------------|-------|------------|--------|
|
|
128
|
+
| Install | `claude plugin install` | `codex plugin install` | `grok plugin install` | `hermes plugins install …/.hermes-plugin` |
|
|
129
|
+
| MCP server | Plugin `.mcp.json` | Plugin `.mcp.json` | Plugin `.mcp.json` | `config.yaml` merge |
|
|
130
|
+
| Plan-to-ADR | Skills + Hooks | Skills + Hooks | Skills + Hooks | Skills + shell hooks |
|
|
131
|
+
| PR enrichment | Skill + Hook | Skill + Hook | Skill + Hook | Hook (`pr-adr`) |
|
|
132
|
+
| Decision format guidance | Skill (sqlew-decision-format) | Skill (sqlew-decision-format) | Skill (sqlew-decision-format) | Skill |
|
|
109
133
|
|
|
110
134
|
## Version History
|
|
111
135
|
|
|
136
|
+
- **v5.3.0**: Hermes hook adapter (event/tool normalization, `.hermes/plans`, `pre_llm_call` context injection)
|
|
112
137
|
- **v5.2.1**: Codex plugin support via sqlew-plugin (`.codex-plugin`, marketplace, hook normalization, transcript-based plan extraction)
|
|
113
138
|
- **v5.2.0**: Grok Build support via sqlew-plugin (hook normalization, Grok plan path, skills-based plan guidance)
|
|
114
139
|
- **v5.0.0**: Plugin-first architecture (sqlew-plugin for Claude Code; manual sqlew-codex-skills for Codex — now deprecated)
|
package/package.json
CHANGED