@inferhub/helper 0.1.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.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -0
  3. package/dist/adapters/claude.d.ts +3 -0
  4. package/dist/adapters/claude.d.ts.map +1 -0
  5. package/dist/adapters/claude.js +127 -0
  6. package/dist/adapters/claude.js.map +1 -0
  7. package/dist/adapters/cline.d.ts +3 -0
  8. package/dist/adapters/cline.d.ts.map +1 -0
  9. package/dist/adapters/cline.js +114 -0
  10. package/dist/adapters/cline.js.map +1 -0
  11. package/dist/adapters/codex.d.ts +3 -0
  12. package/dist/adapters/codex.d.ts.map +1 -0
  13. package/dist/adapters/codex.js +126 -0
  14. package/dist/adapters/codex.js.map +1 -0
  15. package/dist/adapters/hermes.d.ts +3 -0
  16. package/dist/adapters/hermes.d.ts.map +1 -0
  17. package/dist/adapters/hermes.js +143 -0
  18. package/dist/adapters/hermes.js.map +1 -0
  19. package/dist/adapters/index.d.ts +13 -0
  20. package/dist/adapters/index.d.ts.map +1 -0
  21. package/dist/adapters/index.js +30 -0
  22. package/dist/adapters/index.js.map +1 -0
  23. package/dist/adapters/openclaw.d.ts +3 -0
  24. package/dist/adapters/openclaw.d.ts.map +1 -0
  25. package/dist/adapters/openclaw.js +195 -0
  26. package/dist/adapters/openclaw.js.map +1 -0
  27. package/dist/adapters/opencode.d.ts +3 -0
  28. package/dist/adapters/opencode.d.ts.map +1 -0
  29. package/dist/adapters/opencode.js +143 -0
  30. package/dist/adapters/opencode.js.map +1 -0
  31. package/dist/cli.d.ts +3 -0
  32. package/dist/cli.d.ts.map +1 -0
  33. package/dist/cli.js +368 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/constants.d.ts +14 -0
  36. package/dist/constants.d.ts.map +1 -0
  37. package/dist/constants.js +24 -0
  38. package/dist/constants.js.map +1 -0
  39. package/dist/fsutil.d.ts +41 -0
  40. package/dist/fsutil.d.ts.map +1 -0
  41. package/dist/fsutil.js +174 -0
  42. package/dist/fsutil.js.map +1 -0
  43. package/dist/index.d.ts +18 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +38 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/paths.d.ts +15 -0
  48. package/dist/paths.d.ts.map +1 -0
  49. package/dist/paths.js +58 -0
  50. package/dist/paths.js.map +1 -0
  51. package/dist/types.d.ts +79 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +2 -0
  54. package/dist/types.js.map +1 -0
  55. package/dist/validate.d.ts +15 -0
  56. package/dist/validate.d.ts.map +1 -0
  57. package/dist/validate.js +68 -0
  58. package/dist/validate.js.map +1 -0
  59. package/package.json +58 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 InferHub
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,112 @@
1
+ # @inferhub/helper
2
+
3
+ Point coding agents and IDEs at **[InferHub](https://inferhub.dev)** with one command.
4
+
5
+ You only enter your InferHub API key. The helper validates it against
6
+ `GET https://api.inferhub.dev/v1/models`, then writes the right config files for each agent.
7
+
8
+ Works on **Windows, macOS, and Linux** (Node.js ≥ 18).
9
+
10
+ ## Install
11
+
12
+ ```bash
13
+ # one-shot
14
+ npx @inferhub/helper
15
+
16
+ # or global
17
+ npm install -g @inferhub/helper
18
+ inferhub-helper
19
+ ```
20
+
21
+ Also available as `ih-helper`.
22
+
23
+ ## Quick start
24
+
25
+ ```bash
26
+ inferhub-helper
27
+ # → paste sk-airo-…
28
+ # → pick a model from /v1/models
29
+ # → applies to every installed agent
30
+ ```
31
+
32
+ Non-interactive:
33
+
34
+ ```bash
35
+ inferhub-helper apply \
36
+ --key sk-airo-… \
37
+ --model grok-4.5 \
38
+ --agents claude,codex,opencode \
39
+ --yes
40
+ ```
41
+
42
+ ## Commands
43
+
44
+ | Command | Description |
45
+ |---|---|
46
+ | `inferhub-helper` / `apply` | Validate key + write agent configs |
47
+ | `status` | Show which agents are installed / configured |
48
+ | `reset` | Remove InferHub settings only |
49
+ | `validate --key …` | Call `/v1/models` and print models |
50
+ | `list` | Supported agents |
51
+
52
+ ### Flags
53
+
54
+ | Flag | Meaning |
55
+ |---|---|
56
+ | `--key, -k` | InferHub API key (`INFERHUB_API_KEY` env also works) |
57
+ | `--base-url` | Default `https://api.inferhub.dev/v1` |
58
+ | `--model, -m` | Primary model id |
59
+ | `--subagent-model` | Codex / OpenCode subagent model |
60
+ | `--models` | Extra model ids (OpenCode, OpenClaw) |
61
+ | `--agents` | `installed` (default), `all`, or `claude,codex,…` |
62
+ | `--dry-run` | Don’t write files |
63
+ | `--yes, -y` | Skip prompts |
64
+ | `--json` | Machine-readable output |
65
+
66
+ ## Supported agents
67
+
68
+ | Id | Tool | Config written |
69
+ |---|---|---|
70
+ | `claude` | Claude Code | `~/.claude/settings.json` → `env.ANTHROPIC_BASE_URL` + `ANTHROPIC_AUTH_TOKEN` |
71
+ | `codex` | OpenAI Codex CLI | `~/.codex/config.toml` provider `inferhub` (`wire_api = "responses"`) + `auth.json` |
72
+ | `opencode` | OpenCode | `~/.config/opencode/opencode.json` provider `inferhub` (`@ai-sdk/openai-compatible`) |
73
+ | `hermes` | Hermes Agent | `~/.hermes/config.yaml` `model.provider: custom` + `.env` `OPENAI_API_KEY` |
74
+ | `openclaw` | OpenClaw | `~/.openclaw/openclaw.json` `models.providers.inferhub` |
75
+ | `cline` | Cline | `~/.cline/data/globalState.json` + `secrets.json` (OpenAI-compatible) |
76
+
77
+ Existing settings are **merged**, not replaced. A `.inferhub-backup` copy is written next to each modified file.
78
+
79
+ ## Programmatic API
80
+
81
+ ```ts
82
+ import {
83
+ validateApiKey,
84
+ applyToAgents,
85
+ statusAll,
86
+ DEFAULT_BASE_URL,
87
+ } from "@inferhub/helper";
88
+
89
+ const v = await validateApiKey({ apiKey: process.env.INFERHUB_API_KEY! });
90
+ if (!v.ok) throw new Error(v.error);
91
+
92
+ await applyToAgents("installed", {
93
+ apiKey: process.env.INFERHUB_API_KEY!,
94
+ model: v.models[0]!.id,
95
+ baseUrl: DEFAULT_BASE_URL,
96
+ });
97
+
98
+ console.log(await statusAll());
99
+ ```
100
+
101
+ ## Endpoint
102
+
103
+ InferHub public API:
104
+
105
+ - OpenAI-compatible: `https://api.inferhub.dev/v1/chat/completions`, `/v1/responses`, `/v1/models`
106
+ - Anthropic-compatible: `https://api.inferhub.dev/v1/messages`
107
+
108
+ Create a key at [inferhub.dev](https://inferhub.dev) → Dashboard → API Keys.
109
+
110
+ ## License
111
+
112
+ MIT
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from "../types.js";
2
+ export declare const claudeAdapter: AgentAdapter;
3
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,aAAa,CAAC;AAYrB,eAAO,MAAM,aAAa,EAAE,YA4H3B,CAAC"}
@@ -0,0 +1,127 @@
1
+ import { CLAUDE_ENV_KEYS, DEFAULT_API_TIMEOUT_MS, DEFAULT_BASE_URL, PROVIDER_NAME, } from "../constants.js";
2
+ import { commandExists, normalizeBaseUrl, readJsonFile, writeText, } from "../fsutil.js";
3
+ import { claudeSettingsPath } from "../paths.js";
4
+ async function isInstalled(homeDir) {
5
+ return commandExists("claude", [claudeSettingsPath(homeDir)]);
6
+ }
7
+ export const claudeAdapter = {
8
+ id: "claude",
9
+ name: "Claude Code",
10
+ description: "Anthropic Claude Code CLI (~/.claude/settings.json env)",
11
+ async status(opts = {}) {
12
+ const configPath = claudeSettingsPath(opts.homeDir);
13
+ const installed = await isInstalled(opts.homeDir);
14
+ const settings = (await readJsonFile(configPath)) ?? null;
15
+ const base = settings?.env?.ANTHROPIC_BASE_URL;
16
+ const configured = !!(base && /inferhub/i.test(base));
17
+ return {
18
+ id: "claude",
19
+ name: this.name,
20
+ installed,
21
+ configured,
22
+ configPath: installed || settings ? configPath : null,
23
+ details: {
24
+ baseUrl: base ?? null,
25
+ hasAuthToken: !!(settings?.env?.ANTHROPIC_AUTH_TOKEN || settings?.env?.ANTHROPIC_API_KEY),
26
+ sonnet: settings?.env?.ANTHROPIC_DEFAULT_SONNET_MODEL ?? null,
27
+ opus: settings?.env?.ANTHROPIC_DEFAULT_OPUS_MODEL ?? null,
28
+ haiku: settings?.env?.ANTHROPIC_DEFAULT_HAIKU_MODEL ?? null,
29
+ fable: settings?.env?.ANTHROPIC_DEFAULT_FABLE_MODEL ?? null,
30
+ },
31
+ message: installed
32
+ ? configured
33
+ ? "pointed at InferHub"
34
+ : base
35
+ ? "configured for another endpoint"
36
+ : "installed, not configured"
37
+ : "Claude Code not detected",
38
+ };
39
+ },
40
+ async apply(opts) {
41
+ const configPath = claudeSettingsPath(opts.homeDir);
42
+ const baseUrl = normalizeBaseUrl(opts.baseUrl ?? DEFAULT_BASE_URL);
43
+ const existing = (await readJsonFile(configPath)) ?? {};
44
+ const env = {
45
+ ...(existing.env ?? {}),
46
+ ANTHROPIC_BASE_URL: baseUrl,
47
+ ANTHROPIC_AUTH_TOKEN: opts.apiKey,
48
+ API_TIMEOUT_MS: DEFAULT_API_TIMEOUT_MS,
49
+ };
50
+ // Prefer AUTH_TOKEN; clear API_KEY so both aren't fighting.
51
+ delete env.ANTHROPIC_API_KEY;
52
+ const cm = opts.claudeModels ?? {};
53
+ if (cm.sonnet)
54
+ env.ANTHROPIC_DEFAULT_SONNET_MODEL = cm.sonnet;
55
+ if (cm.opus)
56
+ env.ANTHROPIC_DEFAULT_OPUS_MODEL = cm.opus;
57
+ if (cm.haiku)
58
+ env.ANTHROPIC_DEFAULT_HAIKU_MODEL = cm.haiku;
59
+ if (cm.fable)
60
+ env.ANTHROPIC_DEFAULT_FABLE_MODEL = cm.fable;
61
+ if (opts.model) {
62
+ env.ANTHROPIC_MODEL = opts.model;
63
+ // Fill role defaults if not set
64
+ if (!env.ANTHROPIC_DEFAULT_SONNET_MODEL) {
65
+ env.ANTHROPIC_DEFAULT_SONNET_MODEL = opts.model;
66
+ }
67
+ }
68
+ const next = {
69
+ ...existing,
70
+ hasCompletedOnboarding: true,
71
+ env,
72
+ };
73
+ if (opts.dryRun) {
74
+ return {
75
+ id: "claude",
76
+ name: this.name,
77
+ success: true,
78
+ dryRun: true,
79
+ configPath,
80
+ message: `would write ${configPath}`,
81
+ };
82
+ }
83
+ await writeText(configPath, `${JSON.stringify(next, null, 2)}\n`);
84
+ return {
85
+ id: "claude",
86
+ name: this.name,
87
+ success: true,
88
+ configPath,
89
+ message: `${PROVIDER_NAME} applied to Claude Code`,
90
+ };
91
+ },
92
+ async reset(opts = {}) {
93
+ const configPath = claudeSettingsPath(opts.homeDir);
94
+ const existing = await readJsonFile(configPath);
95
+ if (!existing) {
96
+ return {
97
+ id: "claude",
98
+ name: this.name,
99
+ success: true,
100
+ message: "no settings file",
101
+ };
102
+ }
103
+ if (existing.env) {
104
+ for (const k of CLAUDE_ENV_KEYS) {
105
+ delete existing.env[k];
106
+ }
107
+ if (Object.keys(existing.env).length === 0)
108
+ delete existing.env;
109
+ }
110
+ if (opts.dryRun) {
111
+ return {
112
+ id: "claude",
113
+ name: this.name,
114
+ success: true,
115
+ message: `would reset ${configPath}`,
116
+ };
117
+ }
118
+ await writeText(configPath, `${JSON.stringify(existing, null, 2)}\n`);
119
+ return {
120
+ id: "claude",
121
+ name: this.name,
122
+ success: true,
123
+ message: "InferHub env keys removed from Claude Code settings",
124
+ };
125
+ },
126
+ };
127
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from "../types.js";
2
+ export declare const clineAdapter: AgentAdapter;
3
+ //# sourceMappingURL=cline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cline.d.ts","sourceRoot":"","sources":["../../src/adapters/cline.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,aAAa,CAAC;AA4BrB,eAAO,MAAM,YAAY,EAAE,YAyG1B,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { DEFAULT_BASE_URL, PROVIDER_NAME, } from "../constants.js";
2
+ import { commandExists, normalizeBaseUrl, readJsonFile, writeText, } from "../fsutil.js";
3
+ import { clineGlobalStatePath, clineSecretsPath, } from "../paths.js";
4
+ async function isInstalled(homeDir) {
5
+ return commandExists("cline", [clineGlobalStatePath(homeDir)]);
6
+ }
7
+ function isInferhub(state) {
8
+ if (!state)
9
+ return false;
10
+ const url = state.openAiBaseUrl || "";
11
+ const openai = state.actModeApiProvider === "openai" ||
12
+ state.planModeApiProvider === "openai";
13
+ return openai && /inferhub/i.test(url);
14
+ }
15
+ export const clineAdapter = {
16
+ id: "cline",
17
+ name: "Cline",
18
+ description: "Cline CLI (~/.cline/data/globalState.json + secrets.json)",
19
+ async status(opts = {}) {
20
+ const configPath = clineGlobalStatePath(opts.homeDir);
21
+ const installed = await isInstalled(opts.homeDir);
22
+ const state = await readJsonFile(configPath);
23
+ const configured = isInferhub(state);
24
+ return {
25
+ id: "cline",
26
+ name: this.name,
27
+ installed,
28
+ configured,
29
+ configPath: installed || state ? configPath : null,
30
+ details: {
31
+ actModeApiProvider: state?.actModeApiProvider ?? null,
32
+ planModeApiProvider: state?.planModeApiProvider ?? null,
33
+ openAiBaseUrl: state?.openAiBaseUrl ?? null,
34
+ openAiModelId: state?.openAiModelId ?? null,
35
+ },
36
+ message: installed
37
+ ? configured
38
+ ? "pointed at InferHub"
39
+ : "installed, InferHub not set"
40
+ : "Cline not detected",
41
+ };
42
+ },
43
+ async apply(opts) {
44
+ if (!opts.model) {
45
+ return {
46
+ id: "cline",
47
+ name: this.name,
48
+ success: false,
49
+ message: "model is required for Cline",
50
+ };
51
+ }
52
+ const statePath = clineGlobalStatePath(opts.homeDir);
53
+ const secretsPath = clineSecretsPath(opts.homeDir);
54
+ const baseUrl = normalizeBaseUrl(opts.baseUrl ?? DEFAULT_BASE_URL);
55
+ const state = (await readJsonFile(statePath)) ??
56
+ {};
57
+ const secrets = (await readJsonFile(secretsPath)) ?? {};
58
+ state.actModeApiProvider = "openai";
59
+ state.planModeApiProvider = "openai";
60
+ state.openAiBaseUrl = baseUrl;
61
+ state.openAiModelId = opts.model;
62
+ secrets.openAiApiKey = opts.apiKey;
63
+ if (opts.dryRun) {
64
+ return {
65
+ id: "cline",
66
+ name: this.name,
67
+ success: true,
68
+ dryRun: true,
69
+ configPath: statePath,
70
+ message: `would write ${statePath} and ${secretsPath}`,
71
+ };
72
+ }
73
+ await writeText(statePath, `${JSON.stringify(state, null, 2)}\n`);
74
+ await writeText(secretsPath, `${JSON.stringify(secrets, null, 2)}\n`);
75
+ return {
76
+ id: "cline",
77
+ name: this.name,
78
+ success: true,
79
+ configPath: statePath,
80
+ message: `${PROVIDER_NAME} applied to Cline (OpenAI-compatible)`,
81
+ };
82
+ },
83
+ async reset(opts = {}) {
84
+ const statePath = clineGlobalStatePath(opts.homeDir);
85
+ const secretsPath = clineSecretsPath(opts.homeDir);
86
+ const state = await readJsonFile(statePath);
87
+ if (!state || !isInferhub(state)) {
88
+ return {
89
+ id: "cline",
90
+ name: this.name,
91
+ success: true,
92
+ message: "no InferHub config on Cline",
93
+ };
94
+ }
95
+ delete state.openAiBaseUrl;
96
+ delete state.openAiModelId;
97
+ // leave provider as openai — user can re-point; only clear our URL
98
+ if (!opts.dryRun) {
99
+ await writeText(statePath, `${JSON.stringify(state, null, 2)}\n`);
100
+ const secrets = await readJsonFile(secretsPath);
101
+ if (secrets?.openAiApiKey) {
102
+ delete secrets.openAiApiKey;
103
+ await writeText(secretsPath, `${JSON.stringify(secrets, null, 2)}\n`);
104
+ }
105
+ }
106
+ return {
107
+ id: "cline",
108
+ name: this.name,
109
+ success: true,
110
+ message: "InferHub settings cleared from Cline",
111
+ };
112
+ },
113
+ };
114
+ //# sourceMappingURL=cline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cline.js","sourceRoot":"","sources":["../../src/adapters/cline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from "../types.js";
2
+ export declare const codexAdapter: AgentAdapter;
3
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,aAAa,CAAC;AASrB,eAAO,MAAM,YAAY,EAAE,YA6H1B,CAAC"}
@@ -0,0 +1,126 @@
1
+ import { CODEX_API_KEY_FIELD, DEFAULT_BASE_URL, PROVIDER_ID, PROVIDER_NAME, } from "../constants.js";
2
+ import { commandExists, normalizeBaseUrl, readJsonFile, readText, removeTomlKey, removeTomlTable, tomlGetString, tomlHasTable, upsertTomlString, upsertTomlTable, writeText, } from "../fsutil.js";
3
+ import { codexAuthPath, codexConfigPath } from "../paths.js";
4
+ const PROVIDER_SECTION = `model_providers.${PROVIDER_ID}`;
5
+ const SUBAGENT_SECTION = "agents.subagent";
6
+ async function isInstalled(homeDir) {
7
+ return commandExists("codex", [codexConfigPath(homeDir)]);
8
+ }
9
+ export const codexAdapter = {
10
+ id: "codex",
11
+ name: "OpenAI Codex",
12
+ description: "Codex CLI (~/.codex/config.toml + auth.json)",
13
+ async status(opts = {}) {
14
+ const configPath = codexConfigPath(opts.homeDir);
15
+ const installed = await isInstalled(opts.homeDir);
16
+ const toml = await readText(configPath);
17
+ const provider = tomlGetString(toml ?? "", "model_provider");
18
+ const configured = !!toml &&
19
+ (provider === PROVIDER_ID || tomlHasTable(toml, PROVIDER_SECTION));
20
+ return {
21
+ id: "codex",
22
+ name: this.name,
23
+ installed,
24
+ configured,
25
+ configPath: installed || toml ? configPath : null,
26
+ details: {
27
+ modelProvider: provider,
28
+ model: toml ? tomlGetString(toml, "model") : null,
29
+ hasProviderTable: toml ? tomlHasTable(toml, PROVIDER_SECTION) : false,
30
+ authPath: codexAuthPath(opts.homeDir),
31
+ },
32
+ message: installed
33
+ ? configured
34
+ ? "pointed at InferHub"
35
+ : "installed, not configured for InferHub"
36
+ : "Codex CLI not detected",
37
+ };
38
+ },
39
+ async apply(opts) {
40
+ if (!opts.model) {
41
+ return {
42
+ id: "codex",
43
+ name: this.name,
44
+ success: false,
45
+ message: "model is required for Codex",
46
+ };
47
+ }
48
+ const configPath = codexConfigPath(opts.homeDir);
49
+ const authPath = codexAuthPath(opts.homeDir);
50
+ const baseUrl = normalizeBaseUrl(opts.baseUrl ?? DEFAULT_BASE_URL);
51
+ let toml = (await readText(configPath)) ?? "";
52
+ toml = upsertTomlString(toml, "model", opts.model);
53
+ toml = upsertTomlString(toml, "model_provider", PROVIDER_ID);
54
+ toml = upsertTomlTable(toml, PROVIDER_SECTION, {
55
+ name: PROVIDER_NAME,
56
+ base_url: baseUrl,
57
+ wire_api: "responses",
58
+ });
59
+ toml = upsertTomlTable(toml, SUBAGENT_SECTION, {
60
+ model: opts.subagentModel || opts.model,
61
+ });
62
+ const auth = (await readJsonFile(authPath)) ?? {};
63
+ auth[CODEX_API_KEY_FIELD] = opts.apiKey;
64
+ auth.auth_mode = "apikey";
65
+ if (opts.dryRun) {
66
+ return {
67
+ id: "codex",
68
+ name: this.name,
69
+ success: true,
70
+ dryRun: true,
71
+ configPath,
72
+ message: `would write ${configPath} and ${authPath}`,
73
+ };
74
+ }
75
+ await writeText(configPath, toml.endsWith("\n") ? toml : `${toml}\n`);
76
+ await writeText(authPath, `${JSON.stringify(auth, null, 2)}\n`);
77
+ return {
78
+ id: "codex",
79
+ name: this.name,
80
+ success: true,
81
+ configPath,
82
+ message: `${PROVIDER_NAME} applied to Codex (provider=${PROVIDER_ID}, wire_api=responses)`,
83
+ };
84
+ },
85
+ async reset(opts = {}) {
86
+ const configPath = codexConfigPath(opts.homeDir);
87
+ const authPath = codexAuthPath(opts.homeDir);
88
+ let toml = await readText(configPath);
89
+ if (toml == null) {
90
+ return {
91
+ id: "codex",
92
+ name: this.name,
93
+ success: true,
94
+ message: "no config file",
95
+ };
96
+ }
97
+ if (tomlGetString(toml, "model_provider") === PROVIDER_ID) {
98
+ toml = removeTomlKey(toml, "model");
99
+ toml = removeTomlKey(toml, "model_provider");
100
+ }
101
+ toml = removeTomlTable(toml, PROVIDER_SECTION);
102
+ toml = removeTomlTable(toml, SUBAGENT_SECTION);
103
+ if (!opts.dryRun) {
104
+ await writeText(configPath, toml);
105
+ const auth = await readJsonFile(authPath);
106
+ if (auth) {
107
+ delete auth[CODEX_API_KEY_FIELD];
108
+ delete auth.auth_mode;
109
+ if (Object.keys(auth).length === 0) {
110
+ // leave empty object rather than deleting — safer on Windows locks
111
+ await writeText(authPath, "{}\n");
112
+ }
113
+ else {
114
+ await writeText(authPath, `${JSON.stringify(auth, null, 2)}\n`);
115
+ }
116
+ }
117
+ }
118
+ return {
119
+ id: "codex",
120
+ name: this.name,
121
+ success: true,
122
+ message: "InferHub provider removed from Codex config",
123
+ };
124
+ },
125
+ };
126
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from "../types.js";
2
+ export declare const hermesAdapter: AgentAdapter;
3
+ //# sourceMappingURL=hermes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../src/adapters/hermes.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,aAAa,CAAC;AAoDrB,eAAO,MAAM,aAAa,EAAE,YA2G3B,CAAC"}