@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsutil.js","sourceRoot":"","sources":["../src/fsutil.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export { DEFAULT_BASE_URL, PROVIDER_ID, PROVIDER_NAME } from "./constants.js";
2
+ export { validateApiKey } from "./validate.js";
3
+ export { adapters, adapterById, listAdapters, getAdapter, claudeAdapter, codexAdapter, opencodeAdapter, hermesAdapter, openclawAdapter, clineAdapter, } from "./adapters/index.js";
4
+ export type { AgentId, AgentAdapter, AgentStatus, ApplyOptions, ApplyResult, ResetResult, ModelInfo, ValidateResult, } from "./types.js";
5
+ export { normalizeBaseUrl } from "./fsutil.js";
6
+ import type { AgentId, ApplyOptions, ApplyResult, AgentStatus, ResetResult } from "./types.js";
7
+ /** Status of every known agent. */
8
+ export declare function statusAll(opts?: {
9
+ homeDir?: string;
10
+ }): Promise<AgentStatus[]>;
11
+ /** Apply InferHub settings to selected agents (default: all installed). */
12
+ export declare function applyToAgents(agentIds: AgentId[] | "all" | "installed", opts: ApplyOptions): Promise<ApplyResult[]>;
13
+ /** Reset InferHub settings on selected agents. */
14
+ export declare function resetAgents(agentIds: AgentId[] | "all", opts?: {
15
+ homeDir?: string;
16
+ dryRun?: boolean;
17
+ }): Promise<ResetResult[]>;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,eAAe,EACf,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG/F,mCAAmC;AACnC,wBAAsB,SAAS,CAAC,IAAI,CAAC,EAAE;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAEzB;AAED,2EAA2E;AAC3E,wBAAsB,aAAa,CACjC,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,GAAG,WAAW,EACzC,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAkBxB;AAED,kDAAkD;AAClD,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,EAC3B,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5C,OAAO,CAAC,WAAW,EAAE,CAAC,CAQxB"}
package/dist/index.js ADDED
@@ -0,0 +1,38 @@
1
+ export { DEFAULT_BASE_URL, PROVIDER_ID, PROVIDER_NAME } from "./constants.js";
2
+ export { validateApiKey } from "./validate.js";
3
+ export { adapters, adapterById, listAdapters, getAdapter, claudeAdapter, codexAdapter, opencodeAdapter, hermesAdapter, openclawAdapter, clineAdapter, } from "./adapters/index.js";
4
+ export { normalizeBaseUrl } from "./fsutil.js";
5
+ import { adapters, getAdapter } from "./adapters/index.js";
6
+ /** Status of every known agent. */
7
+ export async function statusAll(opts) {
8
+ return Promise.all(adapters.map((a) => a.status(opts)));
9
+ }
10
+ /** Apply InferHub settings to selected agents (default: all installed). */
11
+ export async function applyToAgents(agentIds, opts) {
12
+ let targets = adapters;
13
+ if (agentIds === "installed") {
14
+ const statuses = await statusAll({ homeDir: opts.homeDir });
15
+ const installed = new Set(statuses.filter((s) => s.installed).map((s) => s.id));
16
+ targets = adapters.filter((a) => installed.has(a.id));
17
+ }
18
+ else if (agentIds !== "all") {
19
+ targets = agentIds
20
+ .map((id) => getAdapter(id))
21
+ .filter((a) => !!a);
22
+ }
23
+ const results = [];
24
+ for (const a of targets) {
25
+ results.push(await a.apply(opts));
26
+ }
27
+ return results;
28
+ }
29
+ /** Reset InferHub settings on selected agents. */
30
+ export async function resetAgents(agentIds, opts) {
31
+ const targets = agentIds === "all"
32
+ ? adapters
33
+ : agentIds
34
+ .map((id) => getAdapter(id))
35
+ .filter((a) => !!a);
36
+ return Promise.all(targets.map((a) => a.reset(opts)));
37
+ }
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,eAAe,EACf,YAAY,GACb,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE3D,mCAAmC;AACnC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAE/B;IACC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAyC,EACzC,IAAkB;IAElB,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACrD,CAAC;QACF,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC9B,OAAO,GAAG,QAAQ;aACf,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;aAC3B,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAA2B,EAC3B,IAA6C;IAE7C,MAAM,OAAO,GACX,QAAQ,KAAK,KAAK;QAChB,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ;aACL,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;aAC3B,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare function resolveHome(homeDir?: string): string;
2
+ export declare function claudeSettingsPath(homeDir?: string): string;
3
+ export declare function codexDir(homeDir?: string): string;
4
+ export declare function codexConfigPath(homeDir?: string): string;
5
+ export declare function codexAuthPath(homeDir?: string): string;
6
+ export declare function opencodeConfigPath(homeDir?: string): string;
7
+ export declare function hermesDir(homeDir?: string): string;
8
+ export declare function hermesConfigPath(homeDir?: string): string;
9
+ export declare function hermesEnvPath(homeDir?: string): string;
10
+ export declare function openclawDir(homeDir?: string): string;
11
+ export declare function openclawSettingsPath(homeDir?: string): string;
12
+ export declare function clineDataDir(homeDir?: string): string;
13
+ export declare function clineGlobalStatePath(homeDir?: string): string;
14
+ export declare function clineSecretsPath(homeDir?: string): string;
15
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzD"}
package/dist/paths.js ADDED
@@ -0,0 +1,58 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ export function resolveHome(homeDir) {
4
+ return homeDir ?? os.homedir();
5
+ }
6
+ export function claudeSettingsPath(homeDir) {
7
+ return path.join(resolveHome(homeDir), ".claude", "settings.json");
8
+ }
9
+ export function codexDir(homeDir) {
10
+ // CODEX_HOME overrides default ~/.codex
11
+ if (!homeDir && process.env.CODEX_HOME) {
12
+ return process.env.CODEX_HOME;
13
+ }
14
+ return path.join(resolveHome(homeDir), ".codex");
15
+ }
16
+ export function codexConfigPath(homeDir) {
17
+ return path.join(codexDir(homeDir), "config.toml");
18
+ }
19
+ export function codexAuthPath(homeDir) {
20
+ return path.join(codexDir(homeDir), "auth.json");
21
+ }
22
+ export function opencodeConfigPath(homeDir) {
23
+ // OpenCode uses XDG on Linux/macOS: ~/.config/opencode/opencode.json
24
+ // On Windows, still ~/.config/opencode (same as 9router / opencode docs).
25
+ return path.join(resolveHome(homeDir), ".config", "opencode", "opencode.json");
26
+ }
27
+ export function hermesDir(homeDir) {
28
+ // Native Windows install can use %LOCALAPPDATA%\hermes; prefer that when present
29
+ // is handled at runtime by the adapter (status checks both). Default write target:
30
+ if (process.platform === "win32" && !homeDir) {
31
+ const local = process.env.LOCALAPPDATA;
32
+ if (local)
33
+ return path.join(local, "hermes");
34
+ }
35
+ return path.join(resolveHome(homeDir), ".hermes");
36
+ }
37
+ export function hermesConfigPath(homeDir) {
38
+ return path.join(hermesDir(homeDir), "config.yaml");
39
+ }
40
+ export function hermesEnvPath(homeDir) {
41
+ return path.join(hermesDir(homeDir), ".env");
42
+ }
43
+ export function openclawDir(homeDir) {
44
+ return path.join(resolveHome(homeDir), ".openclaw");
45
+ }
46
+ export function openclawSettingsPath(homeDir) {
47
+ return path.join(openclawDir(homeDir), "openclaw.json");
48
+ }
49
+ export function clineDataDir(homeDir) {
50
+ return path.join(resolveHome(homeDir), ".cline", "data");
51
+ }
52
+ export function clineGlobalStatePath(homeDir) {
53
+ return path.join(clineDataDir(homeDir), "globalState.json");
54
+ }
55
+ export function clineSecretsPath(homeDir) {
56
+ return path.join(clineDataDir(homeDir), "secrets.json");
57
+ }
58
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ export type AgentId = "claude" | "codex" | "opencode" | "hermes" | "openclaw" | "cline";
2
+ export type ApplyOptions = {
3
+ /** InferHub API key (sk-airo-…). */
4
+ apiKey: string;
5
+ /** Default: https://api.inferhub.dev/v1 */
6
+ baseUrl?: string;
7
+ /** Primary model id from /v1/models (e.g. grok-4.5, deepseek-v4-pro). */
8
+ model?: string;
9
+ /** Optional secondary model for subagents / explorer. */
10
+ subagentModel?: string;
11
+ /**
12
+ * Extra model ids to register where multi-model is supported
13
+ * (OpenCode, OpenClaw). Primary `model` is always included.
14
+ */
15
+ models?: string[];
16
+ /** Claude-only: map of role → model id. */
17
+ claudeModels?: {
18
+ sonnet?: string;
19
+ opus?: string;
20
+ haiku?: string;
21
+ fable?: string;
22
+ };
23
+ /** When true, do not write files. */
24
+ dryRun?: boolean;
25
+ /** Override home directory (tests). */
26
+ homeDir?: string;
27
+ };
28
+ export type AgentStatus = {
29
+ id: AgentId;
30
+ name: string;
31
+ installed: boolean;
32
+ configured: boolean;
33
+ configPath: string | null;
34
+ details: Record<string, unknown>;
35
+ message?: string;
36
+ };
37
+ export type ApplyResult = {
38
+ id: AgentId;
39
+ name: string;
40
+ success: boolean;
41
+ configPath?: string;
42
+ message: string;
43
+ dryRun?: boolean;
44
+ skipped?: boolean;
45
+ };
46
+ export type ResetResult = {
47
+ id: AgentId;
48
+ name: string;
49
+ success: boolean;
50
+ message: string;
51
+ };
52
+ export type ModelInfo = {
53
+ id: string;
54
+ ownedBy?: string;
55
+ };
56
+ export type ValidateResult = {
57
+ ok: boolean;
58
+ baseUrl: string;
59
+ models: ModelInfo[];
60
+ error?: string;
61
+ status?: number;
62
+ };
63
+ export type AgentAdapter = {
64
+ id: AgentId;
65
+ name: string;
66
+ description: string;
67
+ /** Detect install / existing config. */
68
+ status(opts?: {
69
+ homeDir?: string;
70
+ }): Promise<AgentStatus>;
71
+ /** Write InferHub settings. */
72
+ apply(opts: ApplyOptions): Promise<ApplyResult>;
73
+ /** Remove InferHub settings only. */
74
+ reset(opts?: {
75
+ homeDir?: string;
76
+ dryRun?: boolean;
77
+ }): Promise<ResetResult>;
78
+ };
79
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,OAAO,GACP,UAAU,GACV,QAAQ,GACR,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG;IACzB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,2CAA2C;IAC3C,YAAY,CAAC,EAAE;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,MAAM,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,+BAA+B;IAC/B,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,qCAAqC;IACrC,KAAK,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5E,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { ValidateResult } from "./types.js";
2
+ export type ValidateOptions = {
3
+ apiKey: string;
4
+ baseUrl?: string;
5
+ /** Abort after ms (default 20000). */
6
+ timeoutMs?: number;
7
+ /** Inject fetch for tests. */
8
+ fetchImpl?: typeof fetch;
9
+ };
10
+ /**
11
+ * Validate an InferHub API key by calling GET /v1/models.
12
+ * Returns the model list on success so the CLI can offer a picker.
13
+ */
14
+ export declare function validateApiKey(opts: ValidateOptions): Promise<ValidateResult>;
15
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5D,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAkEnF"}
@@ -0,0 +1,68 @@
1
+ import { DEFAULT_BASE_URL } from "./constants.js";
2
+ import { normalizeBaseUrl } from "./fsutil.js";
3
+ /**
4
+ * Validate an InferHub API key by calling GET /v1/models.
5
+ * Returns the model list on success so the CLI can offer a picker.
6
+ */
7
+ export async function validateApiKey(opts) {
8
+ const baseUrl = normalizeBaseUrl(opts.baseUrl ?? DEFAULT_BASE_URL);
9
+ const url = `${baseUrl}/models`;
10
+ const fetchFn = opts.fetchImpl ?? fetch;
11
+ const timeoutMs = opts.timeoutMs ?? 20_000;
12
+ const controller = new AbortController();
13
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
14
+ try {
15
+ const resp = await fetchFn(url, {
16
+ method: "GET",
17
+ headers: {
18
+ Authorization: `Bearer ${opts.apiKey}`,
19
+ Accept: "application/json",
20
+ },
21
+ signal: controller.signal,
22
+ });
23
+ if (!resp.ok) {
24
+ let detail = "";
25
+ try {
26
+ detail = (await resp.text()).slice(0, 300);
27
+ }
28
+ catch {
29
+ /* ignore */
30
+ }
31
+ return {
32
+ ok: false,
33
+ baseUrl,
34
+ models: [],
35
+ status: resp.status,
36
+ error: resp.status === 401 || resp.status === 403
37
+ ? `invalid API key (${resp.status})`
38
+ : `GET /v1/models failed: HTTP ${resp.status}${detail ? ` — ${detail}` : ""}`,
39
+ };
40
+ }
41
+ const body = (await resp.json());
42
+ const models = (body.data ?? [])
43
+ .filter((m) => typeof m.id === "string" && m.id.length > 0)
44
+ .map((m) => ({ id: m.id, ownedBy: m.owned_by }));
45
+ if (models.length === 0) {
46
+ return {
47
+ ok: false,
48
+ baseUrl,
49
+ models: [],
50
+ status: resp.status,
51
+ error: "key accepted but /v1/models returned no models",
52
+ };
53
+ }
54
+ return { ok: true, baseUrl, models, status: resp.status };
55
+ }
56
+ catch (err) {
57
+ const msg = err instanceof Error
58
+ ? err.name === "AbortError"
59
+ ? `timeout after ${timeoutMs}ms reaching ${url}`
60
+ : err.message
61
+ : String(err);
62
+ return { ok: false, baseUrl, models: [], error: msg };
63
+ }
64
+ finally {
65
+ clearTimeout(timer);
66
+ }
67
+ }
68
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@inferhub/helper",
3
+ "version": "0.1.0",
4
+ "description": "Point coding agents and IDEs at InferHub — Claude Code, Codex, OpenCode, Hermes, OpenClaw, and more.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "bin": {
15
+ "inferhub-helper": "./dist/cli.js",
16
+ "ih-helper": "./dist/cli.js"
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "README.md",
21
+ "LICENSE"
22
+ ],
23
+ "scripts": {
24
+ "build": "tsc -p tsconfig.json",
25
+ "dev": "tsc -p tsconfig.json --watch",
26
+ "test": "node --import tsx --test tests/**/*.test.ts",
27
+ "prepublishOnly": "npm run build",
28
+ "start": "node dist/cli.js"
29
+ },
30
+ "engines": {
31
+ "node": ">=18.0.0"
32
+ },
33
+ "keywords": [
34
+ "inferhub",
35
+ "ai",
36
+ "claude",
37
+ "codex",
38
+ "opencode",
39
+ "hermes",
40
+ "openclaw",
41
+ "openai-compatible",
42
+ "cli"
43
+ ],
44
+ "license": "MIT",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/inferhub/helper.git"
48
+ },
49
+ "homepage": "https://inferhub.dev",
50
+ "publishConfig": {
51
+ "access": "public"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^22.15.0",
55
+ "tsx": "^4.19.0",
56
+ "typescript": "^5.8.0"
57
+ }
58
+ }