@mnemonik/codex-hooks 0.8.4 → 0.8.5
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/dist/install.d.ts +6 -1
- package/dist/install.js +38 -10
- package/dist/install.js.map +1 -1
- package/package.json +1 -1
package/dist/install.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ interface HookGroup {
|
|
|
9
9
|
matcher?: string;
|
|
10
10
|
hooks?: HookCommand[];
|
|
11
11
|
}
|
|
12
|
+
type InstallTarget = 'host' | 'project';
|
|
12
13
|
/**
|
|
13
14
|
* Codex app-server-backed desktop/IDE threads currently start with
|
|
14
15
|
* `sessionStartSource: null` (observed via `codex debug app-server
|
|
@@ -21,4 +22,8 @@ declare const SESSION_START_MATCHER: string | undefined;
|
|
|
21
22
|
declare function buildHookEntry(dispatcher: string, timeout?: number): HookCommand;
|
|
22
23
|
declare function patchHookGroup(groups: HookGroup[] | undefined, matcher: string | undefined, entry: HookCommand): HookGroup[];
|
|
23
24
|
declare function ensureCodexHooksFeature(configToml: string): string;
|
|
24
|
-
|
|
25
|
+
declare function parseArgs(argv: string[]): {
|
|
26
|
+
target: InstallTarget;
|
|
27
|
+
};
|
|
28
|
+
declare function resolveCodexDir(target: InstallTarget, cwd: string, env?: Partial<Record<'CODEX_HOME' | 'HOME' | 'USERPROFILE', string | undefined>>): string;
|
|
29
|
+
export { buildHookEntry, ensureCodexHooksFeature, parseArgs, patchHookGroup, resolveCodexDir, SESSION_START_MATCHER, };
|
package/dist/install.js
CHANGED
|
@@ -52,19 +52,24 @@ async function writeJson(path, value) {
|
|
|
52
52
|
await mkdir(dirname(path), { recursive: true });
|
|
53
53
|
await writeFile(path, JSON.stringify(value, null, 2) + '\n', 'utf8');
|
|
54
54
|
}
|
|
55
|
-
function
|
|
56
|
-
|
|
55
|
+
function ensureFeatureFlag(configToml, key) {
|
|
56
|
+
const truePattern = new RegExp(`^\\s*${key}\\s*=\\s*true\\s*$`, 'm');
|
|
57
|
+
if (truePattern.test(configToml))
|
|
57
58
|
return configToml;
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
const existingPattern = new RegExp(`^\\s*${key}\\s*=.*$`, 'm');
|
|
60
|
+
if (existingPattern.test(configToml)) {
|
|
61
|
+
return configToml.replace(existingPattern, `${key} = true`);
|
|
60
62
|
}
|
|
61
63
|
const featureHeader = configToml.match(/^\[features\]\s*$/m);
|
|
62
64
|
if (!featureHeader?.index && featureHeader?.index !== 0) {
|
|
63
65
|
const prefix = configToml.endsWith('\n') || configToml.length === 0 ? configToml : `${configToml}\n`;
|
|
64
|
-
return `${prefix}\n[features]\
|
|
66
|
+
return `${prefix}\n[features]\n${key} = true\n`;
|
|
65
67
|
}
|
|
66
68
|
const insertAt = featureHeader.index + featureHeader[0].length;
|
|
67
|
-
return `${configToml.slice(0, insertAt)}\
|
|
69
|
+
return `${configToml.slice(0, insertAt)}\n${key} = true${configToml.slice(insertAt)}`;
|
|
70
|
+
}
|
|
71
|
+
function ensureCodexHooksFeature(configToml) {
|
|
72
|
+
return ensureFeatureFlag(ensureFeatureFlag(configToml, 'codex_hooks'), 'hooks');
|
|
68
73
|
}
|
|
69
74
|
async function ensureConfigFlag(path) {
|
|
70
75
|
const raw = existsSync(path) ? await readFile(path, 'utf8') : '';
|
|
@@ -74,9 +79,31 @@ async function ensureConfigFlag(path) {
|
|
|
74
79
|
await writeFile(path, next.endsWith('\n') ? next : `${next}\n`, 'utf8');
|
|
75
80
|
}
|
|
76
81
|
}
|
|
77
|
-
|
|
82
|
+
function parseArgs(argv) {
|
|
83
|
+
let target = 'host';
|
|
84
|
+
for (const arg of argv) {
|
|
85
|
+
if (arg === '--scope=project')
|
|
86
|
+
target = 'project';
|
|
87
|
+
else if (arg === '--scope=user' || arg === '--scope=host')
|
|
88
|
+
target = 'host';
|
|
89
|
+
}
|
|
90
|
+
return { target };
|
|
91
|
+
}
|
|
92
|
+
function resolveCodexDir(target, cwd, env = process.env) {
|
|
93
|
+
if (target === 'project')
|
|
94
|
+
return join(cwd, '.codex');
|
|
95
|
+
if (env.CODEX_HOME?.trim())
|
|
96
|
+
return resolve(env.CODEX_HOME);
|
|
97
|
+
const home = env.HOME ?? env.USERPROFILE;
|
|
98
|
+
if (!home) {
|
|
99
|
+
throw new Error('Could not determine home directory for Codex host install');
|
|
100
|
+
}
|
|
101
|
+
return join(home, '.codex');
|
|
102
|
+
}
|
|
103
|
+
async function main(argv) {
|
|
104
|
+
const { target } = parseArgs(argv);
|
|
78
105
|
const cwd = process.cwd();
|
|
79
|
-
const codexDir =
|
|
106
|
+
const codexDir = resolveCodexDir(target, cwd);
|
|
80
107
|
const hooksPath = join(codexDir, 'hooks.json');
|
|
81
108
|
const configPath = join(codexDir, 'config.toml');
|
|
82
109
|
const dispatcher = resolveDispatcherPath();
|
|
@@ -97,6 +124,7 @@ async function main() {
|
|
|
97
124
|
await ensureConfigFlag(configPath);
|
|
98
125
|
console.log([
|
|
99
126
|
`mnemonik-codex-hooks: wired into ${hooksPath}`,
|
|
127
|
+
` target -> ${target}`,
|
|
100
128
|
` feature flag -> ${configPath}`,
|
|
101
129
|
` dispatcher -> ${dispatcher}`,
|
|
102
130
|
'',
|
|
@@ -118,12 +146,12 @@ function isDirectExecution() {
|
|
|
118
146
|
}
|
|
119
147
|
}
|
|
120
148
|
if (isDirectExecution()) {
|
|
121
|
-
main()
|
|
149
|
+
main(process.argv.slice(2))
|
|
122
150
|
.then((code) => process.exit(code))
|
|
123
151
|
.catch((err) => {
|
|
124
152
|
console.error(`mnemonik-codex-hooks: ${err instanceof Error ? err.message : String(err)}`);
|
|
125
153
|
process.exit(1);
|
|
126
154
|
});
|
|
127
155
|
}
|
|
128
|
-
export { buildHookEntry, ensureCodexHooksFeature, patchHookGroup, SESSION_START_MATCHER };
|
|
156
|
+
export { buildHookEntry, ensureCodexHooksFeature, parseArgs, patchHookGroup, resolveCodexDir, SESSION_START_MATCHER, };
|
|
129
157
|
//# sourceMappingURL=install.js.map
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,QAAQ,GAAG,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mnemonik/codex-hooks",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.5",
|
|
4
4
|
"description": "Codex lifecycle hooks for Mnemonik memory awareness and host-side grounding gates. Hooks only: does not install skills, rules, AGENTS.md, .mnemonik.json, or MCP config.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|