projecta-rrr 1.23.3 → 1.23.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/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to RRR will be documented in this file.
4
4
 
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
+ ## [1.23.4] - 2026-04-20
8
+
9
+ ### Fixed
10
+ - **Codex hosted MCP launcher** — installer now writes a Codex-specific bearer env file and registers `bearer_token_env_var` in `~/.codex/config.toml` so the hosted RRR setup works with the new `scripts/codex-rrr.sh` launcher.
11
+ - **Codex launch helper** — added `npm run codex:rrr` and docs for starting Codex with the hosted bearer loaded from `~/.config/projecta-rrr/rrr-hosted.env`.
12
+
7
13
  ## [1.23.3] - 2026-04-20
8
14
 
9
15
  ### Fixed
@@ -31,6 +31,8 @@ const HOSTED_URL = 'https://rrr-search-hosted.fly.dev/mcp';
31
31
  const GH_APP_INSTALL_URL = 'https://github.com/apps/rrr-search/installations/new';
32
32
  const MCP_NAME = 'rrr-search-hosted';
33
33
  const CODEX_CONFIG_PATH = path.join(os.homedir(), '.codex', 'config.toml');
34
+ const CODEX_BEARER_ENV_VAR = 'RRR_HOSTED_BEARER';
35
+ const CODEX_ENV_FILE = path.join(os.homedir(), '.config', 'projecta-rrr', 'rrr-hosted.env');
34
36
 
35
37
  // ──────────────────────────────── UI ──────────────────────────────────────
36
38
 
@@ -136,7 +138,7 @@ function registerCodexMcp (bearer) {
136
138
  content = content.replace(sectionRegex, '').trimEnd();
137
139
 
138
140
  // Append new registration
139
- const section = `\n\n[mcp_servers.${MCP_NAME}]\nurl = "${HOSTED_URL}"\nheaders = { Authorization = "Bearer ${bearer}" }\n`;
141
+ const section = `\n\n[mcp_servers.${MCP_NAME}]\nurl = "${HOSTED_URL}"\nbearer_token_env_var = "${CODEX_BEARER_ENV_VAR}"\n`;
140
142
  content = content + section;
141
143
 
142
144
  // Ensure ~/.codex directory exists
@@ -144,6 +146,15 @@ function registerCodexMcp (bearer) {
144
146
  fs.writeFileSync(CODEX_CONFIG_PATH, content, 'utf8');
145
147
  }
146
148
 
149
+ function writeCodexBearerEnv (bearer) {
150
+ fs.mkdirSync(path.dirname(CODEX_ENV_FILE), { recursive: true });
151
+ fs.writeFileSync(
152
+ CODEX_ENV_FILE,
153
+ `export ${CODEX_BEARER_ENV_VAR}=${JSON.stringify(bearer)}\n`,
154
+ 'utf8'
155
+ );
156
+ }
157
+
147
158
  // ──────────────────────────────── flow ────────────────────────────────────
148
159
 
149
160
  async function main () {
@@ -177,7 +188,7 @@ async function main () {
177
188
  step(2, TOTAL_STEPS, 'Team bearer token');
178
189
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
179
190
 
180
- let bearer = args.bearer || process.env.RRR_HOSTED_MCP_TOKEN || null;
191
+ let bearer = args.bearer || process.env.RRR_HOSTED_BEARER || process.env.RRR_HOSTED_MCP_TOKEN || null;
181
192
  if (!bearer && !args.yes) {
182
193
  info('You need a bearer token of the form: rrr_<prefix>_<32chars>');
183
194
  info('New team? Ask your rrr-search admin to run:');
@@ -192,6 +203,9 @@ async function main () {
192
203
  err('Bearer format invalid. Expected rrr_<prefix>_<32chars>.');
193
204
  process.exit(1);
194
205
  }
206
+ if (!args.bearer && process.env.RRR_HOSTED_MCP_TOKEN && !process.env.RRR_HOSTED_BEARER) {
207
+ warn('RRR_HOSTED_MCP_TOKEN is deprecated for this launcher; prefer RRR_HOSTED_BEARER.');
208
+ }
195
209
  ok(`Bearer captured (team prefix: ${bearer.split('_')[1]})`);
196
210
  } else {
197
211
  warn('No bearer — skipping MCP registration. You can run this wizard again after getting one.');
@@ -294,8 +308,11 @@ async function main () {
294
308
  }
295
309
  try {
296
310
  registerCodexMcp(bearer);
311
+ writeCodexBearerEnv(bearer);
297
312
  ok(`Registered ${MCP_NAME} in ~/.codex/config.toml`);
298
- info('Same bearer token works for both Claude Code and Codex (MCP-02)');
313
+ info(`Codex will read the bearer from ${CODEX_BEARER_ENV_VAR}`);
314
+ info(`Codex launcher env file written to ${CODEX_ENV_FILE}`);
315
+ info(`Run scripts/codex-rrr.sh to launch Codex with RRR ready`);
299
316
  } catch (e) {
300
317
  warn(`Could not write ~/.codex/config.toml: ${e.message}`);
301
318
  info('You can manually add the MCP server entry — see docs/hosted-search-setup.md');
@@ -43,6 +43,12 @@ npx projecta-rrr@1.21.0 --enable-hosted
43
43
  # The installer registered `rrr-search-hosted` pointed at https://rrr-search-hosted.fly.dev/mcp.
44
44
  ```
45
45
 
46
+ For Codex, use `scripts/codex-rrr.sh` to launch the CLI with the hosted bearer loaded from
47
+ `~/.config/projecta-rrr/rrr-hosted.env`. Codex accepts the same `$rrr-*` trigger text, but it
48
+ does not provide Claude-style live autocomplete for those triggers while you type.
49
+ From this repo, `npm run codex:rrr -- <args>` is the shortest way to start Codex with the RRR
50
+ environment loaded.
51
+
46
52
  **What happens under the hood:**
47
53
 
48
54
  1. The installer writes `rrr-search-hosted` into `~/.claude/mcp.registry.json` with `disabled:false`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "projecta-rrr",
3
- "version": "1.23.3",
3
+ "version": "1.23.4",
4
4
  "description": "A meta-prompting, context engineering and spec-driven development system for Claude Code by Projecta.ai",
5
5
  "bin": {
6
6
  "projecta-rrr": "bin/install.js",
@@ -16,6 +16,7 @@
16
16
  "test": "node --test tests/*.test.js && jest",
17
17
  "test:node": "node --test tests/*.test.js",
18
18
  "test:jest": "jest",
19
+ "codex:rrr": "bash scripts/codex-rrr.sh",
19
20
  "test:browser": "vitest --browser",
20
21
  "test:ui": "vitest --ui",
21
22
  "mcp:setup": "bash scripts/mcp-setup.sh",
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ ENV_FILE="${RRR_HOSTED_ENV_FILE:-$HOME/.config/projecta-rrr/rrr-hosted.env}"
6
+
7
+ if [[ -f "$ENV_FILE" ]]; then
8
+ # shellcheck disable=SC1090
9
+ source "$ENV_FILE"
10
+ fi
11
+
12
+ if [[ -z "${RRR_HOSTED_BEARER:-}" ]]; then
13
+ cat >&2 <<'EOF'
14
+ RRR_HOSTED_BEARER is unset.
15
+ Set it in ~/.config/projecta-rrr/rrr-hosted.env or export it before launching Codex.
16
+ EOF
17
+ exit 1
18
+ fi
19
+
20
+ exec codex "$@"