greprag 5.21.0 → 5.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,5 @@
1
1
  "use strict";
2
- /** greprag status — single source of truth for the agent.
3
- *
4
- * Returns structured info about installation, auth, hooks, and the current
5
- * project's anchor + flags. Pure local reads — no network. The agent calls
6
- * this once and decides what setup steps (if any) the user needs.
7
- *
8
- * Usage:
9
- * greprag status — human-readable
10
- * greprag status --json — JSON for agent parsing */
2
+ /** greprag status — local install/auth/platform diagnostics. */
11
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
4
  if (k2 === undefined) k2 = k;
13
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -48,41 +40,71 @@ const fs = __importStar(require("fs"));
48
40
  const path = __importStar(require("path"));
49
41
  const project_anchor_1 = require("../project-anchor");
50
42
  const identity_1 = require("./identity");
51
- function getSettingsPath() {
52
- const home = process.env.HOME || process.env.USERPROFILE || '';
53
- return path.join(home, '.claude', 'settings.json');
43
+ function home() {
44
+ return process.env.HOME || process.env.USERPROFILE || '';
54
45
  }
55
- function readSettings(settingsPath) {
46
+ function claudeSettingsPath() {
47
+ return path.join(home(), '.claude', 'settings.json');
48
+ }
49
+ function grepragEnvPath() {
50
+ return path.join(home(), '.greprag', '.env');
51
+ }
52
+ function codexHooksPath() {
53
+ return path.join(home(), '.codex', 'hooks.json');
54
+ }
55
+ function readJson(file, fallback) {
56
56
  try {
57
- return JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
57
+ return JSON.parse(fs.readFileSync(file, 'utf-8'));
58
58
  }
59
59
  catch {
60
- return {};
60
+ return fallback;
61
+ }
62
+ }
63
+ function readEnvFile(file) {
64
+ const out = {};
65
+ try {
66
+ for (const line of fs.readFileSync(file, 'utf-8').split(/\r?\n/)) {
67
+ const trimmed = line.trim();
68
+ if (!trimmed || trimmed.startsWith('#'))
69
+ continue;
70
+ const idx = trimmed.indexOf('=');
71
+ if (idx < 1)
72
+ continue;
73
+ let value = trimmed.slice(idx + 1).trim();
74
+ if ((value.startsWith('"') && value.endsWith('"')) ||
75
+ (value.startsWith("'") && value.endsWith("'")))
76
+ value = value.slice(1, -1);
77
+ out[trimmed.slice(0, idx).trim()] = value;
78
+ }
61
79
  }
80
+ catch { /* missing env file */ }
81
+ return out;
62
82
  }
63
- function hasGrepragHook(hookConfigs, subcommand) {
64
- if (!hookConfigs)
83
+ function hasHook(configs, subcommand, matcher) {
84
+ if (!configs)
65
85
  return false;
66
- return hookConfigs.some(cfg => cfg.hooks?.some(h => {
67
- const cmd = h.command || '';
68
- return cmd.includes(`greprag-hook ${subcommand}`)
69
- || cmd.includes(`hook.js ${subcommand}`);
70
- }));
86
+ return configs.some(cfg => {
87
+ if (matcher !== undefined && (cfg.matcher ?? '') !== matcher)
88
+ return false;
89
+ return cfg.hooks?.some(h => {
90
+ const cmd = h.command || '';
91
+ return cmd.includes(`greprag-hook ${subcommand}`) || cmd.includes(`hook.js ${subcommand}`);
92
+ });
93
+ });
71
94
  }
72
- /** Read API key from settings.json env block (the canonical location set by
73
- * init / the skill). Fall back to process.env if not in settings yet. */
74
- function getApiKey(settings) {
75
- const fromSettings = settings.env?.GREPRAG_API_KEY;
76
- if (fromSettings)
77
- return fromSettings;
95
+ function apiKeyFromSources(settings) {
78
96
  if (process.env.GREPRAG_API_KEY)
79
- return process.env.GREPRAG_API_KEY;
80
- return null;
97
+ return { key: process.env.GREPRAG_API_KEY, source: 'env' };
98
+ const shared = readEnvFile(grepragEnvPath()).GREPRAG_API_KEY;
99
+ if (shared)
100
+ return { key: shared, source: grepragEnvPath() };
101
+ const claude = settings.env?.GREPRAG_API_KEY;
102
+ if (claude)
103
+ return { key: claude, source: claudeSettingsPath() };
104
+ return { key: null, source: null };
81
105
  }
82
106
  function maskKey(key) {
83
- if (!key)
84
- return null;
85
- return key.slice(0, 17) + '…'; // grp_live_ + 8 chars + ellipsis
107
+ return key ? key.slice(0, 17) + '...' : null;
86
108
  }
87
109
  function readVersion() {
88
110
  try {
@@ -93,22 +115,49 @@ function readVersion() {
93
115
  return 'unknown';
94
116
  }
95
117
  }
96
- function buildStatus(cwd) {
97
- const settingsPath = getSettingsPath();
98
- const settings = readSettings(settingsPath);
99
- const apiKey = getApiKey(settings);
118
+ function platformFromArgs(args) {
119
+ if (args.includes('--claude'))
120
+ return 'claude';
121
+ if (args.includes('--codex'))
122
+ return 'codex';
123
+ if (args.includes('--opencode'))
124
+ return 'opencode';
125
+ if (args.includes('--all-platforms'))
126
+ return 'all';
127
+ return 'all';
128
+ }
129
+ function buildStatus(cwd, platform = 'all') {
130
+ const settingsPath = claudeSettingsPath();
131
+ const settings = readJson(settingsPath, {});
132
+ const codexHooks = readJson(codexHooksPath(), {});
133
+ const api = apiKeyFromSources(settings);
100
134
  const anchor = (0, project_anchor_1.readAnchor)(cwd);
101
- const home = process.env.HOME || process.env.USERPROFILE || '';
102
- const identityCachePath = path.join(home, '.greprag', 'identity.json');
135
+ const identityCachePath = path.join(home(), '.greprag', 'identity.json');
103
136
  const identityCache = (0, identity_1.readCache)(identityCachePath);
137
+ const codexSkillPath = path.join(home(), '.codex', 'skills', 'greprag');
138
+ const claudeSkillPath = path.join(home(), '.claude', 'skills', 'greprag');
139
+ const opencodePluginPath = path.join(home(), '.config', 'opencode', 'plugins', 'greprag-memory.js');
140
+ const claudeHooks = {
141
+ session_start_recap: hasHook(settings.hooks?.SessionStart, 'recap'),
142
+ stop_store: hasHook(settings.hooks?.Stop, 'store'),
143
+ pre_tool_use_spawn_check: hasHook(settings.hooks?.PreToolUse, 'pre-spawn-check'),
144
+ };
145
+ const codexHookStatus = {
146
+ session_start_recap: hasHook(codexHooks.hooks?.SessionStart, 'recap'),
147
+ session_id: hasHook(codexHooks.hooks?.SessionStart, 'session-id'),
148
+ user_prompt_submit: hasHook(codexHooks.hooks?.UserPromptSubmit, 'codex-notify'),
149
+ post_tool_use_inbox: hasHook(codexHooks.hooks?.PostToolUse, 'codex-inbox'),
150
+ stop_store: hasHook(codexHooks.hooks?.Stop, 'codex-store'),
151
+ post_compact_session_id: hasHook(codexHooks.hooks?.PostCompact, 'session-id'),
152
+ };
153
+ const opencodePluginInstalled = fs.existsSync(opencodePluginPath);
104
154
  return {
105
155
  installed: true,
106
156
  version: readVersion(),
157
+ platform,
107
158
  settings_path: settingsPath,
108
- auth: {
109
- api_key_present: !!apiKey,
110
- key_prefix: maskKey(apiKey),
111
- },
159
+ shared_env_path: grepragEnvPath(),
160
+ auth: { api_key_present: !!api.key, key_prefix: maskKey(api.key), source: api.source },
112
161
  identity: {
113
162
  handle: identityCache?.handle ?? null,
114
163
  tenant_id: identityCache?.tenantId ?? null,
@@ -119,14 +168,39 @@ function buildStatus(cwd) {
119
168
  : 'No identity cache. Run `greprag identity show` to populate.',
120
169
  },
121
170
  hooks: {
122
- session_start_recap: hasGrepragHook(settings.hooks?.SessionStart, 'recap'),
123
- stop_store: hasGrepragHook(settings.hooks?.Stop, 'store'),
124
- pre_tool_use_spawn_check: hasGrepragHook(settings.hooks?.PreToolUse, 'pre-spawn-check'),
125
- // user_prompt_submit_notify removed in v5.6.1 — the inbox-count polling
126
- // it surfaced was the eavesdrop vector. Live inbox delivery is now the
127
- // Monitor watcher's exclusive job.
128
- // post_tool_use_spawn_reminder removed in v5.6.2 — validation moved to
129
- // PreToolUse pre-spawn-check + SessionStart auto-armed watcher.
171
+ ...claudeHooks,
172
+ codex_user_prompt_submit: codexHookStatus.user_prompt_submit,
173
+ codex_post_tool_use_inbox: codexHookStatus.post_tool_use_inbox,
174
+ codex_stop_store: codexHookStatus.stop_store,
175
+ },
176
+ platforms: {
177
+ claude: {
178
+ configured: !!api.key && claudeHooks.session_start_recap && claudeHooks.stop_store,
179
+ config_path: settingsPath,
180
+ config_present: fs.existsSync(settingsPath),
181
+ skill_path: claudeSkillPath,
182
+ skill_installed: fs.existsSync(claudeSkillPath),
183
+ hooks: claudeHooks,
184
+ note: 'Claude Code uses command hooks plus Monitor for live inbox delivery.',
185
+ },
186
+ codex: {
187
+ configured: !!api.key && Object.values(codexHookStatus).every(Boolean),
188
+ config_path: codexHooksPath(),
189
+ config_present: fs.existsSync(codexHooksPath()),
190
+ skill_path: codexSkillPath,
191
+ skill_installed: fs.existsSync(codexSkillPath),
192
+ hooks: codexHookStatus,
193
+ trust_required: true,
194
+ note: 'Codex Desktop requires Settings -> Settings -> Hooks trust review; hooks.json existing does not prove hooks are active.',
195
+ },
196
+ opencode: {
197
+ configured: !!api.key && opencodePluginInstalled,
198
+ config_path: grepragEnvPath(),
199
+ config_present: fs.existsSync(grepragEnvPath()),
200
+ plugin_path: opencodePluginPath,
201
+ plugin_installed: opencodePluginInstalled,
202
+ note: 'OpenCode loads the GrepRAG plugin from its global plugin directory.',
203
+ },
130
204
  },
131
205
  project: {
132
206
  cwd: path.resolve(cwd),
@@ -141,42 +215,58 @@ function buildStatus(cwd) {
141
215
  },
142
216
  };
143
217
  }
218
+ function renderPlatform(name, p) {
219
+ const yes = (b) => b ? 'yes' : 'no';
220
+ const lines = [
221
+ `${name}:`,
222
+ ` Configured: ${yes(p.configured)}`,
223
+ ` Config: ${p.config_path} (${p.config_present ? 'present' : 'missing'})`,
224
+ ];
225
+ if (p.skill_path)
226
+ lines.push(` Skill: ${p.skill_path} (${yes(p.skill_installed)})`);
227
+ if (p.plugin_path)
228
+ lines.push(` Plugin: ${p.plugin_path} (${yes(p.plugin_installed)})`);
229
+ if (p.hooks) {
230
+ lines.push(' Hooks:');
231
+ for (const [key, value] of Object.entries(p.hooks))
232
+ lines.push(` ${key}: ${yes(value)}`);
233
+ }
234
+ if (p.trust_required)
235
+ lines.push(' Trust: Codex Desktop: Settings -> Settings -> Hooks, then trust the 6 GrepRAG hooks');
236
+ return lines;
237
+ }
144
238
  function renderHuman(s) {
145
- const check = (b) => b ? 'yes' : 'no';
239
+ const yes = (b) => b ? 'yes' : 'no';
240
+ const platformNames = s.platform === 'all' ? ['claude', 'codex', 'opencode'] : [s.platform];
146
241
  return [
147
242
  `greprag ${s.version}`,
148
- `Settings: ${s.settings_path}`,
243
+ `Shared env: ${s.shared_env_path}`,
149
244
  ``,
150
245
  `Auth:`,
151
- ` API key present: ${check(s.auth.api_key_present)}${s.auth.key_prefix ? ` (${s.auth.key_prefix})` : ''}`,
246
+ ` API key present: ${yes(s.auth.api_key_present)}${s.auth.key_prefix ? ` (${s.auth.key_prefix})` : ''}`,
247
+ ` Source: ${s.auth.source ?? '(none)'}`,
152
248
  ``,
153
249
  `Identity:`,
154
- ` Handle: ${s.identity.handle ?? '(not cached run: greprag identity show)'}`,
250
+ ` Handle: ${s.identity.handle ?? '(not cached - run: greprag identity show)'}`,
155
251
  ` Aliases: ${s.identity.aliases.length ? s.identity.aliases.join(', ') : '(none)'}`,
156
252
  ``,
157
- `Hooks:`,
158
- ` SessionStart recap: ${check(s.hooks.session_start_recap)}`,
159
- ` Stop store: ${check(s.hooks.stop_store)}`,
160
- ` PreToolUse pre-spawn-check:${check(s.hooks.pre_tool_use_spawn_check)}`,
253
+ `Platforms:`,
254
+ ...platformNames.flatMap(name => renderPlatform(name, s.platforms[name])),
161
255
  ``,
162
256
  `Project (${s.project.cwd}):`,
163
- ` Anchor found: ${check(s.project.anchor_found)}${s.project.is_deterministic_fallback ? ' (using deterministic-hash fallback)' : ''}`,
257
+ ` Anchor found: ${yes(s.project.anchor_found)}${s.project.is_deterministic_fallback ? ' (using deterministic-hash fallback)' : ''}`,
164
258
  ` Anchor path: ${s.project.anchor_path}`,
165
259
  ` Project name: ${s.project.project_name}`,
166
260
  ` Project ID: ${s.project.project_id}`,
167
- ` Memory capture: ${check(s.project.memory_capture)}`,
168
- ` SessionStart recap: ${check(s.project.session_start_recap)}`,
261
+ ` Memory capture: ${yes(s.project.memory_capture)}`,
262
+ ` SessionStart recap: ${yes(s.project.session_start_recap)}`,
169
263
  ` Inbox notify: ${s.project.inbox_notify}`,
170
264
  ].join('\n');
171
265
  }
172
266
  async function runStatus(args) {
173
267
  const json = args.includes('--json');
174
- const status = buildStatus(process.cwd());
175
- if (json) {
176
- process.stdout.write(JSON.stringify(status, null, 2) + '\n');
177
- }
178
- else {
179
- process.stdout.write(renderHuman(status) + '\n');
180
- }
268
+ const platform = platformFromArgs(args);
269
+ const status = buildStatus(process.cwd(), platform);
270
+ process.stdout.write(json ? JSON.stringify(status, null, 2) + '\n' : renderHuman(status) + '\n');
181
271
  }
182
272
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
package/dist/hook.js CHANGED
@@ -50,6 +50,7 @@ const session_id_1 = require("./session-id");
50
50
  // (skill bodies, continuation summaries, chip prompts) pre-LLM at capture and
51
51
  // elide it so it never lands as a searchable turn node.
52
52
  const turn_provenance_1 = require("./turn-provenance");
53
+ const codex_steering_1 = require("./codex-steering");
53
54
  const API_URL_DEFAULT = 'https://api.greprag.com';
54
55
  const MAX_FIELD_CHARS = 500_000; // safety cap per text field
55
56
  // ---------- Env + config ---------------------------------------------------
@@ -77,8 +78,11 @@ function loadEnvFile(filePath) {
77
78
  }
78
79
  function ensureEnv(cwd) {
79
80
  const homeDir = process.env.HOME || process.env.USERPROFILE || '';
80
- if (homeDir)
81
- loadEnvFile(path.join(homeDir, '.env'));
81
+ if (homeDir) {
82
+ loadEnvFile(path.join(homeDir, '.greprag', '.env'));
83
+ if (!process.env.GREPRAG_API_KEY)
84
+ loadEnvFile(path.join(homeDir, '.env'));
85
+ }
82
86
  if (!process.env.GREPRAG_API_KEY)
83
87
  loadEnvFile(path.join(cwd, '.env'));
84
88
  }
@@ -309,6 +313,67 @@ function parseLatestTurn(transcriptPath) {
309
313
  provenance: (0, turn_provenance_1.classifyUserText)(userPrompt),
310
314
  };
311
315
  }
316
+ function codexCacheDir() {
317
+ const home = process.env.HOME || process.env.USERPROFILE || '';
318
+ if (!home)
319
+ return null;
320
+ return path.join(home, '.greprag', 'codex');
321
+ }
322
+ function promptCachePath(sessionId, turnId) {
323
+ const dir = codexCacheDir();
324
+ if (!dir || !sessionId)
325
+ return null;
326
+ const raw = turnId || sessionId;
327
+ const safe = raw.replace(/[^a-zA-Z0-9_.-]/g, '_').slice(0, 160);
328
+ return path.join(dir, `${safe}.json`);
329
+ }
330
+ function latestPromptCachePath(sessionId) {
331
+ const dir = codexCacheDir();
332
+ if (!dir || !sessionId)
333
+ return null;
334
+ const safe = sessionId.replace(/[^a-zA-Z0-9_.-]/g, '_').slice(0, 160);
335
+ return path.join(dir, `${safe}.latest.json`);
336
+ }
337
+ function cacheCodexPrompt(input) {
338
+ if (typeof input.prompt !== 'string' || !input.prompt.trim() || !input.session_id)
339
+ return;
340
+ const entry = {
341
+ sessionId: input.session_id,
342
+ turnId: input.turn_id || null,
343
+ prompt: input.prompt,
344
+ model: input.model || null,
345
+ cwd: input.cwd || process.cwd(),
346
+ createdAt: new Date().toISOString(),
347
+ };
348
+ const paths = [
349
+ promptCachePath(input.session_id, input.turn_id),
350
+ latestPromptCachePath(input.session_id),
351
+ ].filter((p) => !!p);
352
+ for (const file of paths) {
353
+ try {
354
+ const dir = path.dirname(file);
355
+ if (!fs.existsSync(dir))
356
+ fs.mkdirSync(dir, { recursive: true });
357
+ fs.writeFileSync(file, JSON.stringify(entry, null, 2) + '\n');
358
+ }
359
+ catch { /* prompt cache is best-effort */ }
360
+ }
361
+ }
362
+ function readCodexPromptCache(input) {
363
+ const paths = [
364
+ promptCachePath(input.session_id, input.turn_id),
365
+ latestPromptCachePath(input.session_id),
366
+ ].filter((p) => !!p);
367
+ for (const file of paths) {
368
+ try {
369
+ const parsed = JSON.parse(fs.readFileSync(file, 'utf-8'));
370
+ if (parsed && typeof parsed.prompt === 'string' && parsed.prompt.trim())
371
+ return parsed;
372
+ }
373
+ catch { /* try next */ }
374
+ }
375
+ return null;
376
+ }
312
377
  /** Walk subagent transcripts under <session>/subagents/ and pull tool_use
313
378
  * blocks that fired during the current turn. Returns flattened ToolCall[]
314
379
  * augmented with _output where a matching tool_result exists in the same
@@ -677,7 +742,7 @@ function capField(text) {
677
742
  return `${truncated}\n\n[truncated: original ${originalKb}KB]`;
678
743
  }
679
744
  // ---------- Store ---------------------------------------------------------
680
- async function store(input) {
745
+ async function store(input, source = 'claude-code') {
681
746
  const cwd = input.cwd || process.cwd();
682
747
  const cfg = getConfig(cwd);
683
748
  if (!cfg.enabled || !cfg.apiKey)
@@ -688,6 +753,18 @@ async function store(input) {
688
753
  if (!anchor.memoryCapture)
689
754
  return;
690
755
  const turn = parseLatestTurn(input.transcript_path);
756
+ if (source === 'codex' && (!turn.userPrompt || !turn.agentResponse)) {
757
+ const cached = readCodexPromptCache(input);
758
+ if (!turn.userPrompt && cached) {
759
+ turn.userPrompt = cached.prompt;
760
+ turn.provenance = (0, turn_provenance_1.classifyUserText)(cached.prompt);
761
+ }
762
+ if (!turn.agentResponse && typeof input.last_assistant_message === 'string') {
763
+ turn.agentResponse = input.last_assistant_message.trim();
764
+ }
765
+ if (!turn.model)
766
+ turn.model = input.model || cached?.model || null;
767
+ }
691
768
  // Flatten subagent tool_use blocks into the main turn so artifact detection
692
769
  // catches commits/deploys/PRs a subagent fired. See adr/raw-turn-capture.md.
693
770
  if (input.transcript_path && turn.userStartTime) {
@@ -738,7 +815,7 @@ async function store(input) {
738
815
  filesTouched: turn.filesTouched,
739
816
  artifacts: artifactRefs,
740
817
  shipEvents,
741
- source: 'claude-code',
818
+ source,
742
819
  provenance,
743
820
  });
744
821
  }
@@ -1082,22 +1159,40 @@ async function isSessionArmed(apiUrl, apiKey, short) {
1082
1159
  * here, so a separate SessionStart arm was pure redundancy). Reads only the
1083
1160
  * watcher registry — no inbox content/count — so the v5.6.1 leak stays closed.
1084
1161
  * Gated on greprag being configured. adr: adr/session-id-awareness.md */
1085
- async function notify(input) {
1162
+ function writeAdditionalContext(hookEventName, additionalContext) {
1163
+ process.stdout.write(JSON.stringify({
1164
+ hookSpecificOutput: {
1165
+ hookEventName,
1166
+ additionalContext,
1167
+ },
1168
+ }) + '\n');
1169
+ }
1170
+ async function codexInbox(input, debounce = true) {
1171
+ const cfg = getConfig(input.cwd || process.cwd());
1172
+ const context = await (0, codex_steering_1.buildCodexInboxSteering)(input, cfg, { debounce });
1173
+ if (!context)
1174
+ return;
1175
+ writeAdditionalContext(input.hook_event_name || 'PostToolUse', context);
1176
+ }
1177
+ async function notify(input, source = 'claude-code') {
1178
+ if (source === 'codex')
1179
+ cacheCodexPrompt(input);
1086
1180
  const cfg = getConfig(input.cwd || process.cwd());
1087
1181
  if (!cfg.enabled || !cfg.apiKey)
1088
1182
  return; // unconfigured → silent
1089
1183
  const short = (0, session_id_1.truncateSessionId)(input.session_id);
1090
1184
  if (!short)
1091
1185
  return; // no session id → silent
1186
+ if (source === 'codex') {
1187
+ const context = await (0, codex_steering_1.buildCodexInboxSteering)(input, cfg);
1188
+ if (context)
1189
+ writeAdditionalContext('UserPromptSubmit', context);
1190
+ return;
1191
+ }
1092
1192
  const armed = await isSessionArmed(cfg.apiUrl, cfg.apiKey, short);
1093
1193
  if (armed !== false)
1094
1194
  return; // armed OR couldn't tell → silent
1095
- process.stdout.write(JSON.stringify({
1096
- hookSpecificOutput: {
1097
- hookEventName: 'UserPromptSubmit',
1098
- additionalContext: (0, session_id_1.buildArmDirective)(short, (0, session_id_1.readIdentityAlias)()),
1099
- },
1100
- }) + '\n');
1195
+ writeAdditionalContext('UserPromptSubmit', (0, session_id_1.buildArmDirective)(short, (0, session_id_1.readIdentityAlias)()));
1101
1196
  }
1102
1197
  /** UserPromptSubmit PROBE / manual diagnostic — prints a per-turn readout of
1103
1198
  * whether THIS session has a live watcher (the same isSessionArmed signal
@@ -1174,9 +1269,12 @@ function handlePreSpawnCheck(input) {
1174
1269
  }
1175
1270
  async function main() {
1176
1271
  const subcommand = process.argv[2];
1177
- const validSubs = new Set(['store', 'recap', 'notify', 'session-id', 'pre-spawn-check', 'armcheck']);
1272
+ const validSubs = new Set([
1273
+ 'store', 'recap', 'notify', 'session-id', 'pre-spawn-check', 'armcheck',
1274
+ 'codex-store', 'codex-notify', 'codex-inbox',
1275
+ ]);
1178
1276
  if (!validSubs.has(subcommand)) {
1179
- process.stderr.write(`Usage: greprag-hook <store|recap|notify|session-id|pre-spawn-check|armcheck>\n`);
1277
+ process.stderr.write(`Usage: greprag-hook <store|recap|notify|session-id|pre-spawn-check|armcheck|codex-store|codex-notify|codex-inbox>\n`);
1180
1278
  process.exit(1);
1181
1279
  }
1182
1280
  let input = {};
@@ -1198,6 +1296,12 @@ async function main() {
1198
1296
  else if (subcommand === 'notify') {
1199
1297
  await notify(input);
1200
1298
  }
1299
+ else if (subcommand === 'codex-notify') {
1300
+ await notify(input, 'codex');
1301
+ }
1302
+ else if (subcommand === 'codex-inbox') {
1303
+ await codexInbox(input);
1304
+ }
1201
1305
  else if (subcommand === 'session-id') {
1202
1306
  // adr: adr/session-id-awareness.md
1203
1307
  // SessionStart awareness only — surfaces the agent's own 8-hex session id +
@@ -1212,6 +1316,9 @@ async function main() {
1212
1316
  else if (subcommand === 'armcheck') {
1213
1317
  await armCheck(input);
1214
1318
  }
1319
+ else if (subcommand === 'codex-store') {
1320
+ await store(input, 'codex');
1321
+ }
1215
1322
  else {
1216
1323
  await store(input);
1217
1324
  }