chrome-devtools-axi 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -12
- package/dist/src/hooks.d.ts +6 -0
- package/dist/src/hooks.js +67 -1
- package/dist/src/hooks.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
<a href="https://discord.gg/BW4aJuQhTf"><img alt="Discord" src="https://img.shields.io/discord/1439901831038763092?style=flat-square&label=discord" /></a>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
|
-
<h3 align="center">
|
|
12
|
+
<h3 align="center">The most agent-ergonomic browser automation</h3>
|
|
13
13
|
|
|
14
|
-
`chrome-devtools-axi` wraps [chrome-devtools-mcp](https://www.npmjs.com/package/chrome-devtools-mcp) with an [AXI](https://axi.md)-compliant CLI.
|
|
14
|
+
`chrome-devtools-axi` wraps [chrome-devtools-mcp](https://www.npmjs.com/package/chrome-devtools-mcp) with an [AXI](https://axi.md)-compliant CLI.
|
|
15
15
|
|
|
16
16
|
- **Token-efficient** — TOON-encoded output cuts token usage ~40% vs raw JSON
|
|
17
17
|
- **Combined operations** — one command navigates, captures, and suggests next steps
|
|
@@ -41,16 +41,7 @@ snapshot:
|
|
|
41
41
|
**Tell your agent:**
|
|
42
42
|
|
|
43
43
|
```
|
|
44
|
-
Execute `npm
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
**From source**
|
|
48
|
-
|
|
49
|
-
```sh
|
|
50
|
-
git clone https://github.com/kunchenguid/chrome-devtools-axi.git
|
|
51
|
-
cd chrome-devtools-axi
|
|
52
|
-
npm install && npm run build
|
|
53
|
-
npm link
|
|
44
|
+
Execute `npm i -g chrome-devtools-axi` and run `chrome-devtools-axi` for browser automation.
|
|
54
45
|
```
|
|
55
46
|
|
|
56
47
|
## How It Works
|
package/dist/src/hooks.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Idempotently registers a SessionStart hook in both:
|
|
5
5
|
* - Claude Code: ~/.claude/settings.json
|
|
6
6
|
* - Codex CLI: ~/.codex/hooks.json
|
|
7
|
+
* - Codex CLI: ~/.codex/config.toml ([features].codex_hooks = true)
|
|
7
8
|
*
|
|
8
9
|
* So agents see browser state at session start.
|
|
9
10
|
*/
|
|
@@ -36,6 +37,11 @@ export declare function getHookTargets(): HookTarget[];
|
|
|
36
37
|
* Returns [updatedSettings, changed].
|
|
37
38
|
*/
|
|
38
39
|
export declare function computeHookUpdate(settings: HookSettings, execPath: string): [HookSettings, boolean];
|
|
40
|
+
/**
|
|
41
|
+
* Pure function: ensure Codex hooks are enabled in config.toml.
|
|
42
|
+
* Returns [updatedToml, changed].
|
|
43
|
+
*/
|
|
44
|
+
export declare function computeCodexConfigUpdate(content: string): [string, boolean];
|
|
39
45
|
/**
|
|
40
46
|
* Idempotently install session hooks into all supported agents.
|
|
41
47
|
* Silently does nothing on any error.
|
package/dist/src/hooks.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Idempotently registers a SessionStart hook in both:
|
|
5
5
|
* - Claude Code: ~/.claude/settings.json
|
|
6
6
|
* - Codex CLI: ~/.codex/hooks.json
|
|
7
|
+
* - Codex CLI: ~/.codex/config.toml ([features].codex_hooks = true)
|
|
7
8
|
*
|
|
8
9
|
* So agents see browser state at session start.
|
|
9
10
|
*/
|
|
@@ -19,6 +20,7 @@ export function getHookTargets() {
|
|
|
19
20
|
return [
|
|
20
21
|
{ path: join(home, ".claude", "settings.json") },
|
|
21
22
|
{ path: join(home, ".codex", "hooks.json") },
|
|
23
|
+
{ path: join(home, ".codex", "config.toml") },
|
|
22
24
|
];
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
@@ -57,6 +59,62 @@ export function computeHookUpdate(settings, execPath) {
|
|
|
57
59
|
});
|
|
58
60
|
return [updated, true];
|
|
59
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Pure function: ensure Codex hooks are enabled in config.toml.
|
|
64
|
+
* Returns [updatedToml, changed].
|
|
65
|
+
*/
|
|
66
|
+
export function computeCodexConfigUpdate(content) {
|
|
67
|
+
const newline = content.includes("\r\n") ? "\r\n" : "\n";
|
|
68
|
+
const normalized = content.length === 0 ? "" : content;
|
|
69
|
+
if (normalized.trim().length === 0) {
|
|
70
|
+
return [`[features]${newline}codex_hooks = true${newline}`, true];
|
|
71
|
+
}
|
|
72
|
+
const lines = normalized.split(/\r?\n/);
|
|
73
|
+
const updated = [...lines];
|
|
74
|
+
let inFeatures = false;
|
|
75
|
+
let sawFeatures = false;
|
|
76
|
+
for (let i = 0; i < updated.length; i++) {
|
|
77
|
+
const line = updated[i];
|
|
78
|
+
const section = line.match(/^\s*(\[{1,2})([^\]]+)(\]{1,2})\s*(?:#.*)?$/);
|
|
79
|
+
if (section) {
|
|
80
|
+
const isTableHeader = (section[1] === "[" && section[3] === "]")
|
|
81
|
+
|| (section[1] === "[[" && section[3] === "]]");
|
|
82
|
+
if (!isTableHeader) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const sectionName = section[2].trim();
|
|
86
|
+
if (inFeatures) {
|
|
87
|
+
updated.splice(i, 0, "codex_hooks = true");
|
|
88
|
+
return [updated.join(newline), true];
|
|
89
|
+
}
|
|
90
|
+
inFeatures = sectionName === "features";
|
|
91
|
+
sawFeatures ||= inFeatures;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (!inFeatures) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const flag = line.match(/^(\s*codex_hooks\s*=\s*)(true|false)(\s*(?:#.*)?)$/);
|
|
98
|
+
if (!flag) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (flag[2] === "true") {
|
|
102
|
+
return [content, false];
|
|
103
|
+
}
|
|
104
|
+
updated[i] = `${flag[1]}true${flag[3] ?? ""}`;
|
|
105
|
+
return [updated.join(newline), true];
|
|
106
|
+
}
|
|
107
|
+
if (sawFeatures) {
|
|
108
|
+
const suffix = normalized.endsWith(newline) || normalized.length === 0 ? "" : newline;
|
|
109
|
+
return [`${normalized}${suffix}codex_hooks = true${newline}`, true];
|
|
110
|
+
}
|
|
111
|
+
const separator = normalized.endsWith(newline + newline) || normalized.length === 0
|
|
112
|
+
? ""
|
|
113
|
+
: normalized.endsWith(newline)
|
|
114
|
+
? newline
|
|
115
|
+
: `${newline}${newline}`;
|
|
116
|
+
return [`${normalized}${separator}[features]${newline}codex_hooks = true${newline}`, true];
|
|
117
|
+
}
|
|
60
118
|
/**
|
|
61
119
|
* Idempotently install session hooks into all supported agents.
|
|
62
120
|
* Silently does nothing on any error.
|
|
@@ -66,13 +124,21 @@ export function installHooks() {
|
|
|
66
124
|
const execPath = resolve(process.argv[1]);
|
|
67
125
|
for (const target of getHookTargets()) {
|
|
68
126
|
try {
|
|
127
|
+
mkdirSync(dirname(target.path), { recursive: true });
|
|
128
|
+
if (target.path.endsWith(".toml")) {
|
|
129
|
+
const content = existsSync(target.path) ? readFileSync(target.path, "utf-8") : "";
|
|
130
|
+
const [updated, changed] = computeCodexConfigUpdate(content);
|
|
131
|
+
if (changed) {
|
|
132
|
+
writeFileSync(target.path, updated);
|
|
133
|
+
}
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
69
136
|
let settings = {};
|
|
70
137
|
if (existsSync(target.path)) {
|
|
71
138
|
settings = JSON.parse(readFileSync(target.path, "utf-8"));
|
|
72
139
|
}
|
|
73
140
|
const [updated, changed] = computeHookUpdate(settings, execPath);
|
|
74
141
|
if (changed) {
|
|
75
|
-
mkdirSync(dirname(target.path), { recursive: true });
|
|
76
142
|
writeFileSync(target.path, JSON.stringify(updated, null, 2) + "\n");
|
|
77
143
|
}
|
|
78
144
|
}
|
package/dist/src/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"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"}
|