@osanoai/multicli 1.5.3 → 1.5.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/README.md CHANGED
@@ -1,16 +1,13 @@
1
- # Osano AI - Multi CLI MCP
1
+ # Multi-CLI MCP
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@osanoai/multicli?color=cb0000)](https://www.npmjs.com/package/@osanoai/multicli)
4
4
  [![Tests](https://img.shields.io/github/actions/workflow/status/osanoai/multicli/tests.yml?branch=main&label=tests)](https://github.com/osanoai/multicli/actions/workflows/tests.yml)
5
5
  [![Scan](https://img.shields.io/github/actions/workflow/status/osanoai/multicli/scan.yml?branch=main&label=security%20scan)](https://github.com/osanoai/multicli/actions/workflows/scan.yml)
6
6
  [![GitHub release](https://img.shields.io/github/v/release/osanoai/multicli)](https://github.com/osanoai/multicli/releases/latest)
7
- [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/osanoai/multicli/badge)](https://scorecard.dev/viewer/?uri=github.com/osanoai/multicli)
8
7
  [![Node](https://img.shields.io/node/v/@osanoai/multicli)](https://www.npmjs.com/package/@osanoai/multicli)
9
8
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178c6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
10
9
 
11
- **The AI collab no one asked for, but everyone needed.**
12
-
13
- An MCP server that lets Claude, Gemini, and Codex call each other as tools. Because why argue about which AI is best when you can make them work together?
10
+ **An MCP server that lets Claude, Gemini, and Codex call each other as tools.**
14
11
 
15
12
  ```
16
13
  Claude: "Hey Gemini, what do you think about this code?"
@@ -18,6 +15,18 @@ Gemini: "It's mass. Let me ask Codex for a second opinion."
18
15
  Codex: "You're both wrong. Here's the fix."
19
16
  ```
20
17
 
18
+ ---
19
+
20
+ ## One-Line Install
21
+
22
+ ```bash
23
+ curl -fsSL https://raw.githubusercontent.com/osanoai/multicli/main/install.sh | bash
24
+ ```
25
+
26
+ Detects which AI CLIs you have installed and configures Multi-CLI for all of them automatically. No config files, no API keys, no environment variables. If it's on your PATH, it works.
27
+
28
+ ---
29
+
21
30
  ## What It Does
22
31
 
23
32
  Multi-CLI sits between your AI clients and bridges them via the [Model Context Protocol](https://modelcontextprotocol.io/). Install it once, and whichever AI you're talking to gains the ability to call the others.
@@ -28,41 +37,53 @@ Multi-CLI sits between your AI clients and bridges them via the [Model Context P
28
37
  - Each client's own tools are hidden (no talking to yourself, that's weird)
29
38
  - Auto-detects which CLIs you have installed — only shows what's available
30
39
 
40
+ ---
41
+
42
+ ## The Meta Part
43
+
44
+ This tool was built by the very AIs it connects.
45
+
46
+ Claude, Gemini, and Codex wrote the code. Claude, Gemini, and Codex maintain it. Every week, all three AIs run a scheduled job that queries each CLI for its current model list, diffs the results against what's in the repo, and opens a PR if anything changed. New model releases get picked up automatically. Deprecated models get cleaned out. The repo stays current without anyone touching it.
47
+
48
+ Most MCP tools go stale within weeks. This one is self-maintaining by design.
49
+
50
+ ---
51
+
31
52
  ## Prerequisites
32
53
 
33
54
  You need **Node.js >= 20** and at least **two** of these CLIs installed:
34
55
 
35
56
  | CLI | Install |
36
57
  |-----|---------|
37
- | [Gemini CLI](https://github.com/google-gemini/gemini-cli) | `npm install -g @google/gemini-cli` |
38
58
  | [Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview) | `npm install -g @anthropic-ai/claude-code` |
59
+ | [Gemini CLI](https://github.com/google-gemini/gemini-cli) | `npm install -g @google/gemini-cli` |
39
60
  | [Codex CLI](https://github.com/openai/codex) | `npm install -g @openai/codex` |
40
61
 
41
62
  > Why two? Because one AI talking to itself is a monologue, not a collaboration.
42
63
 
43
64
  ---
44
65
 
45
- ## Installation
66
+ ## Manual Installation
67
+
68
+ Prefer to install per-client yourself? Each command is one line.
46
69
 
47
70
  ### Claude Code
48
71
 
49
72
  ```bash
50
- claude mcp add Multi-CLI -- npx -y @osanoai/multicli
73
+ claude mcp add Multi-CLI -- npx -y @osanoai/multicli@latest
51
74
  ```
52
75
 
53
- That's it. Restart Claude Code and Gemini + Codex tools appear automatically.
54
-
55
76
  <details>
56
77
  <summary>Claude Desktop (JSON config)</summary>
57
78
 
58
- Add to your config file (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
79
+ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS:
59
80
 
60
81
  ```json
61
82
  {
62
83
  "mcpServers": {
63
84
  "Multi-CLI": {
64
85
  "command": "npx",
65
- "args": ["-y", "@osanoai/multicli"]
86
+ "args": ["-y", "@osanoai/multicli@latest"]
66
87
  }
67
88
  }
68
89
  }
@@ -76,11 +97,9 @@ Restart Claude Desktop completely after saving.
76
97
  ### Gemini CLI
77
98
 
78
99
  ```bash
79
- gemini mcp add --scope user Multi-CLI npx -y @osanoai/multicli
100
+ gemini mcp add --scope user Multi-CLI npx -y @osanoai/multicli@latest
80
101
  ```
81
102
 
82
- Restart the Gemini CLI and Claude + Codex tools will be available.
83
-
84
103
  <details>
85
104
  <summary>Manual config (~/.gemini/settings.json)</summary>
86
105
 
@@ -89,7 +108,7 @@ Restart the Gemini CLI and Claude + Codex tools will be available.
89
108
  "mcpServers": {
90
109
  "Multi-CLI": {
91
110
  "command": "npx",
92
- "args": ["-y", "@osanoai/multicli"]
111
+ "args": ["-y", "@osanoai/multicli@latest"]
93
112
  }
94
113
  }
95
114
  }
@@ -101,11 +120,9 @@ Restart the Gemini CLI and Claude + Codex tools will be available.
101
120
  ### Codex CLI
102
121
 
103
122
  ```bash
104
- codex mcp add Multi-CLI -- npx -y @osanoai/multicli
123
+ codex mcp add Multi-CLI -- npx -y @osanoai/multicli@latest
105
124
  ```
106
125
 
107
- Restart Codex and Claude + Gemini tools will be available.
108
-
109
126
  <details>
110
127
  <summary>Manual config (~/.codex/config.toml) or pass --mcp-config</summary>
111
128
 
@@ -120,7 +137,7 @@ Where `mcp.json` contains:
120
137
  "mcpServers": {
121
138
  "Multi-CLI": {
122
139
  "command": "npx",
123
- "args": ["-y", "@osanoai/multicli"]
140
+ "args": ["-y", "@osanoai/multicli@latest"]
124
141
  }
125
142
  }
126
143
  }
@@ -134,7 +151,7 @@ Where `mcp.json` contains:
134
151
  Multi-CLI uses standard stdio transport. If your client supports MCP, point it at:
135
152
 
136
153
  ```
137
- npx -y @osanoai/multicli
154
+ npx -y @osanoai/multicli@latest
138
155
  ```
139
156
 
140
157
  ---
@@ -156,6 +173,8 @@ Once connected, your AI client gains access to tools for the *other* CLIs (never
156
173
  | `Ask Claude` | Ask Claude a question or give it a task |
157
174
  | `Claude Help` | Get Claude Code CLI help info |
158
175
 
176
+ ---
177
+
159
178
  ## Usage Examples
160
179
 
161
180
  Once installed, just talk naturally to your AI:
@@ -174,13 +193,15 @@ Or get a second opinion on anything:
174
193
  ask Gemini and Codex what they'd do differently"
175
194
  ```
176
195
 
196
+ ---
197
+
177
198
  ## How It Works
178
199
 
179
200
  ```
180
- ┌─────────────┐ MCP (stdio) ┌──────────────┐ CLI calls ┌─────────────┐
181
- │ Your AI │ ◄──────────────────► │ Multi-CLI │ ───────────────► │ Other AIs │
182
- │ Client │ │ server │ │ (CLI tools) │
183
- └─────────────┘ └──────────────┘ └─────────────┘
201
+ ┌─────────────┐ MCP (stdio) ┌──────────────┐ CLI calls ┌─────────────┐
202
+ │ Your AI │ ◄──────────────────► │ Multi-CLI │ ───────────────► │ Other AIs │
203
+ │ Client │ │ server │ │ (CLI tools) │
204
+ └─────────────┘ └──────────────┘ └─────────────┘
184
205
 
185
206
  1. Your AI client connects to Multi-CLI via MCP
186
207
  2. Multi-CLI detects which CLIs are installed on your system
@@ -189,6 +210,8 @@ Or get a second opinion on anything:
189
210
  5. Results flow back through MCP to your AI client
190
211
  ```
191
212
 
213
+ ---
214
+
192
215
  ## Troubleshooting
193
216
 
194
217
  **"No usable AI CLIs detected"**
@@ -202,9 +225,11 @@ If only your own CLI is installed, Multi-CLI hides it (no self-calls). Install a
202
225
 
203
226
  **MCP server not responding?**
204
227
  1. Check that Node.js >= 20 is installed
205
- 2. Run `npx @osanoai/multicli` directly to see if it starts
228
+ 2. Run `npx @osanoai/multicli@latest` directly to see if it starts
206
229
  3. Restart your AI client completely
207
230
 
231
+ ---
232
+
208
233
  ## Development
209
234
 
210
235
  ```bash
@@ -214,4 +239,3 @@ npm install
214
239
  npm run build
215
240
  npm run dev
216
241
  ```
217
-
@@ -1 +1 @@
1
- {"version":3,"file":"modelCatalog.d.ts","sourceRoot":"","sources":["../src/modelCatalog.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACnC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAmFD,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAEzE;AAOD,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAgBxE"}
1
+ {"version":3,"file":"modelCatalog.d.ts","sourceRoot":"","sources":["../src/modelCatalog.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACnC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAqJD,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAEzE;AAOD,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAgBxE"}
@@ -0,0 +1,86 @@
1
+ {
2
+ "generatedAt": "2026-03-03T23:41:02.949Z",
3
+ "catalogs": {
4
+ "claude": {
5
+ "cli": "claude",
6
+ "tiers": [
7
+ {
8
+ "tier": "fast",
9
+ "models": [
10
+ "claude-haiku-4-5-20251001"
11
+ ]
12
+ },
13
+ {
14
+ "tier": "balanced",
15
+ "models": [
16
+ "claude-sonnet-4-6"
17
+ ]
18
+ },
19
+ {
20
+ "tier": "powerful",
21
+ "models": [
22
+ "claude-opus-4-6"
23
+ ]
24
+ }
25
+ ]
26
+ },
27
+ "gemini": {
28
+ "cli": "gemini",
29
+ "tiers": [
30
+ {
31
+ "tier": "fast",
32
+ "models": [
33
+ "gemini-2.5-flash",
34
+ "gemini-2.5-flash-lite",
35
+ "gpt-5.1-codex-mini",
36
+ "claude-haiku-4-5-20251001"
37
+ ]
38
+ },
39
+ {
40
+ "tier": "balanced",
41
+ "models": [
42
+ "gemini-3-flash-preview",
43
+ "gpt-5.2-codex",
44
+ "claude-sonnet-4-6"
45
+ ]
46
+ },
47
+ {
48
+ "tier": "powerful",
49
+ "models": [
50
+ "gemini-3.1-pro-preview",
51
+ "gemini-2.5-pro",
52
+ "gpt-5.3-codex",
53
+ "gpt-5.1-codex-max",
54
+ "gpt-5.2",
55
+ "claude-opus-4-6"
56
+ ]
57
+ }
58
+ ]
59
+ },
60
+ "codex": {
61
+ "cli": "codex",
62
+ "tiers": [
63
+ {
64
+ "tier": "fast",
65
+ "models": [
66
+ "gpt-5.1-codex-mini"
67
+ ]
68
+ },
69
+ {
70
+ "tier": "balanced",
71
+ "models": [
72
+ "gpt-5.2-codex"
73
+ ]
74
+ },
75
+ {
76
+ "tier": "powerful",
77
+ "models": [
78
+ "gpt-5.3-codex",
79
+ "gpt-5.1-codex-max",
80
+ "gpt-5.2"
81
+ ]
82
+ }
83
+ ]
84
+ }
85
+ }
86
+ }
@@ -1,80 +1,120 @@
1
- const GEMINI_CATALOG = {
2
- cli: 'gemini',
3
- tiers: [
4
- {
5
- tier: 'fast',
6
- label: 'Flash (DEFAULT)',
7
- models: ['gemini-2.5-flash', 'gemini-2.5-flash-lite'],
8
- useWhen: 'Simple questions, math, lookups, summaries, short code, trivial tasks. USE THIS BY DEFAULT.',
9
- },
10
- {
11
- tier: 'balanced',
12
- label: 'Flash Preview',
13
- models: ['gemini-3-flash-preview'],
14
- useWhen: 'Moderate tasks needing newer capabilities but still fast. Multi-step but not deeply complex.',
15
- },
16
- {
17
- tier: 'powerful',
18
- label: 'Pro',
19
- models: ['gemini-3.1-pro-preview', 'gemini-2.5-pro'],
20
- useWhen: 'ONLY for: complex analysis, deep reasoning, large codebase understanding, nuanced opinions, architectural decisions.',
21
- },
22
- ],
23
- note: 'Run Gemini Help for the latest CLI options. Model IDs may change as Google releases new versions.',
24
- };
25
- const CODEX_CATALOG = {
26
- cli: 'codex',
27
- tiers: [
28
- {
29
- tier: 'fast',
30
- label: 'Codex Mini (DEFAULT)',
31
- models: ['gpt-5.1-codex-mini'],
32
- useWhen: 'Simple questions, math, lookups, short code snippets, trivial tasks. USE THIS BY DEFAULT.',
33
- },
34
- {
35
- tier: 'balanced',
36
- label: 'Codex',
37
- models: ['gpt-5.2-codex'],
38
- useWhen: 'Moderate coding tasks, multi-file changes, debugging, code review.',
39
- },
40
- {
41
- tier: 'powerful',
42
- label: 'Codex Max / GPT',
43
- models: ['gpt-5.3-codex', 'gpt-5.1-codex-max', 'gpt-5.2'],
44
- useWhen: 'ONLY for: complex architecture, large refactors, deep reasoning, nuanced analysis, multi-step planning.',
45
- },
46
- ],
47
- note: 'Run Codex Help for the latest CLI options. Model IDs may change as OpenAI releases new versions.',
48
- };
49
- const CLAUDE_CATALOG = {
50
- cli: 'claude',
51
- tiers: [
52
- {
53
- tier: 'fast',
54
- label: 'Haiku (DEFAULT)',
55
- models: ['claude-haiku-4-5-20251001'],
56
- useWhen: 'Simple questions, math, lookups, summaries, short code, trivial tasks. USE THIS BY DEFAULT.',
57
- },
58
- {
59
- tier: 'balanced',
60
- label: 'Sonnet',
61
- models: ['claude-sonnet-4-6'],
62
- useWhen: 'Moderate coding, analysis, multi-step tasks, following detailed instructions.',
63
- },
64
- {
65
- tier: 'powerful',
66
- label: 'Opus',
67
- models: ['claude-opus-4-6'],
68
- useWhen: 'ONLY for: complex reasoning, nuanced analysis, difficult multi-step tasks, architectural decisions.',
69
- },
70
- ],
71
- note: 'Run Claude Help for the latest CLI options.',
72
- };
73
- const CATALOGS = {
74
- gemini: GEMINI_CATALOG,
75
- codex: CODEX_CATALOG,
76
- claude: CLAUDE_CATALOG,
1
+ import { createRequire } from 'node:module';
2
+ import { TIER_CONFIG, CLI_NOTES } from './tierConfig.js';
3
+ let generatedData = null;
4
+ try {
5
+ const require = createRequire(import.meta.url);
6
+ generatedData = require('./modelCatalog.generated.json');
7
+ }
8
+ catch {
9
+ // Generated file doesn't exist yet — will use hardcoded fallback
10
+ }
11
+ // ── Hardcoded fallback catalogs ──────────────────────────────────────────────
12
+ const FALLBACK_CATALOGS = {
13
+ gemini: {
14
+ cli: 'gemini',
15
+ tiers: [
16
+ {
17
+ tier: 'fast',
18
+ label: 'Flash (DEFAULT)',
19
+ models: ['gemini-2.5-flash', 'gemini-2.5-flash-lite'],
20
+ useWhen: 'Simple questions, math, lookups, summaries, short code, trivial tasks. USE THIS BY DEFAULT.',
21
+ },
22
+ {
23
+ tier: 'balanced',
24
+ label: 'Flash Preview',
25
+ models: ['gemini-3-flash-preview'],
26
+ useWhen: 'Moderate tasks needing newer capabilities but still fast. Multi-step but not deeply complex.',
27
+ },
28
+ {
29
+ tier: 'powerful',
30
+ label: 'Pro',
31
+ models: ['gemini-3.1-pro-preview', 'gemini-2.5-pro'],
32
+ useWhen: 'ONLY for: complex analysis, deep reasoning, large codebase understanding, nuanced opinions, architectural decisions.',
33
+ },
34
+ ],
35
+ note: 'Run Gemini Help for the latest CLI options. Model IDs may change as Google releases new versions.',
36
+ },
37
+ codex: {
38
+ cli: 'codex',
39
+ tiers: [
40
+ {
41
+ tier: 'fast',
42
+ label: 'Codex Mini (DEFAULT)',
43
+ models: ['gpt-5.1-codex-mini'],
44
+ useWhen: 'Simple questions, math, lookups, short code snippets, trivial tasks. USE THIS BY DEFAULT.',
45
+ },
46
+ {
47
+ tier: 'balanced',
48
+ label: 'Codex',
49
+ models: ['gpt-5.2-codex'],
50
+ useWhen: 'Moderate coding tasks, multi-file changes, debugging, code review.',
51
+ },
52
+ {
53
+ tier: 'powerful',
54
+ label: 'Codex Max / GPT',
55
+ models: ['gpt-5.3-codex', 'gpt-5.1-codex-max', 'gpt-5.2'],
56
+ useWhen: 'ONLY for: complex architecture, large refactors, deep reasoning, nuanced analysis, multi-step planning.',
57
+ },
58
+ ],
59
+ note: 'Run Codex Help for the latest CLI options. Model IDs may change as OpenAI releases new versions.',
60
+ },
61
+ claude: {
62
+ cli: 'claude',
63
+ tiers: [
64
+ {
65
+ tier: 'fast',
66
+ label: 'Haiku (DEFAULT)',
67
+ models: ['claude-haiku-4-5-20251001'],
68
+ useWhen: 'Simple questions, math, lookups, summaries, short code, trivial tasks. USE THIS BY DEFAULT.',
69
+ },
70
+ {
71
+ tier: 'balanced',
72
+ label: 'Sonnet',
73
+ models: ['claude-sonnet-4-6'],
74
+ useWhen: 'Moderate coding, analysis, multi-step tasks, following detailed instructions.',
75
+ },
76
+ {
77
+ tier: 'powerful',
78
+ label: 'Opus',
79
+ models: ['claude-opus-4-6'],
80
+ useWhen: 'ONLY for: complex reasoning, nuanced analysis, difficult multi-step tasks, architectural decisions.',
81
+ },
82
+ ],
83
+ note: 'Run Claude Help for the latest CLI options.',
84
+ },
77
85
  };
86
+ // ── Build catalog from generated data ────────────────────────────────────────
87
+ function buildFromGenerated(cliName) {
88
+ const entry = generatedData?.catalogs[cliName];
89
+ if (!entry?.tiers?.length)
90
+ return null;
91
+ const tiers = [];
92
+ for (const genTier of entry.tiers) {
93
+ const tierName = genTier.tier;
94
+ const config = TIER_CONFIG[cliName]?.[tierName];
95
+ if (!config || !Array.isArray(genTier.models) || !genTier.models.length)
96
+ continue;
97
+ tiers.push({
98
+ tier: tierName,
99
+ label: config.label,
100
+ models: genTier.models,
101
+ useWhen: config.useWhen,
102
+ });
103
+ }
104
+ if (tiers.length === 0)
105
+ return null;
106
+ return {
107
+ cli: cliName,
108
+ tiers,
109
+ note: CLI_NOTES[cliName],
110
+ };
111
+ }
112
+ // ── Resolved catalogs ────────────────────────────────────────────────────────
113
+ const CATALOGS = {};
114
+ for (const cli of ['gemini', 'codex', 'claude']) {
115
+ CATALOGS[cli] = buildFromGenerated(cli) ?? FALLBACK_CATALOGS[cli];
116
+ }
117
+ // ── Public API (unchanged signatures) ────────────────────────────────────────
78
118
  export function getCatalog(cli) {
79
119
  return CATALOGS[cli];
80
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"modelCatalog.js","sourceRoot":"","sources":["../src/modelCatalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modelCatalog.js","sourceRoot":"","sources":["../src/modelCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Human-curated tier display labels and usage guidance.
3
+ * These change rarely — only when we want to rename a tier or update guidance text.
4
+ * The model IDs within each tier are managed by the generated catalog.
5
+ */
6
+ export interface TierDisplayConfig {
7
+ label: string;
8
+ useWhen: string;
9
+ }
10
+ export type TierName = 'fast' | 'balanced' | 'powerful';
11
+ export type CLIName = 'claude' | 'gemini' | 'codex';
12
+ export declare const TIER_CONFIG: Record<CLIName, Record<TierName, TierDisplayConfig>>;
13
+ export declare const CLI_NOTES: Record<CLIName, string>;
14
+ //# sourceMappingURL=tierConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tierConfig.d.ts","sourceRoot":"","sources":["../src/tierConfig.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AACxD,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAkD5E,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAK7C,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Human-curated tier display labels and usage guidance.
3
+ * These change rarely — only when we want to rename a tier or update guidance text.
4
+ * The model IDs within each tier are managed by the generated catalog.
5
+ */
6
+ export const TIER_CONFIG = {
7
+ claude: {
8
+ fast: {
9
+ label: 'Haiku (DEFAULT)',
10
+ useWhen: 'Simple questions, math, lookups, summaries, short code, trivial tasks. USE THIS BY DEFAULT.',
11
+ },
12
+ balanced: {
13
+ label: 'Sonnet',
14
+ useWhen: 'Moderate coding, analysis, multi-step tasks, following detailed instructions.',
15
+ },
16
+ powerful: {
17
+ label: 'Opus',
18
+ useWhen: 'ONLY for: complex reasoning, nuanced analysis, difficult multi-step tasks, architectural decisions.',
19
+ },
20
+ },
21
+ gemini: {
22
+ fast: {
23
+ label: 'Flash (DEFAULT)',
24
+ useWhen: 'Simple questions, math, lookups, summaries, short code, trivial tasks. USE THIS BY DEFAULT.',
25
+ },
26
+ balanced: {
27
+ label: 'Flash Preview',
28
+ useWhen: 'Moderate tasks needing newer capabilities but still fast. Multi-step but not deeply complex.',
29
+ },
30
+ powerful: {
31
+ label: 'Pro',
32
+ useWhen: 'ONLY for: complex analysis, deep reasoning, large codebase understanding, nuanced opinions, architectural decisions.',
33
+ },
34
+ },
35
+ codex: {
36
+ fast: {
37
+ label: 'Codex Mini (DEFAULT)',
38
+ useWhen: 'Simple questions, math, lookups, short code snippets, trivial tasks. USE THIS BY DEFAULT.',
39
+ },
40
+ balanced: {
41
+ label: 'Codex',
42
+ useWhen: 'Moderate coding tasks, multi-file changes, debugging, code review.',
43
+ },
44
+ powerful: {
45
+ label: 'Codex Max / GPT',
46
+ useWhen: 'ONLY for: complex architecture, large refactors, deep reasoning, nuanced analysis, multi-step planning.',
47
+ },
48
+ },
49
+ };
50
+ export const CLI_NOTES = {
51
+ claude: 'Run Claude Help for the latest CLI options.',
52
+ gemini: 'Run Gemini Help for the latest CLI options. Model IDs may change as Google releases new versions.',
53
+ codex: 'Run Codex Help for the latest CLI options. Model IDs may change as OpenAI releases new versions.',
54
+ };
55
+ //# sourceMappingURL=tierConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tierConfig.js","sourceRoot":"","sources":["../src/tierConfig.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,MAAM,CAAC,MAAM,WAAW,GAAyD;IAC/E,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,KAAK,EAAE,iBAAiB;YACxB,OAAO,EACL,6FAA6F;SAChG;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,+EAA+E;SACzF;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,MAAM;YACb,OAAO,EACL,qGAAqG;SACxG;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,KAAK,EAAE,iBAAiB;YACxB,OAAO,EACL,6FAA6F;SAChG;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,eAAe;YACtB,OAAO,EACL,8FAA8F;SACjG;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,KAAK;YACZ,OAAO,EACL,sHAAsH;SACzH;KACF;IACD,KAAK,EAAE;QACL,IAAI,EAAE;YACJ,KAAK,EAAE,sBAAsB;YAC7B,OAAO,EACL,2FAA2F;SAC9F;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,oEAAoE;SAC9E;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,iBAAiB;YACxB,OAAO,EACL,yGAAyG;SAC5G;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAA4B;IAChD,MAAM,EAAE,6CAA6C;IACrD,MAAM,EACJ,mGAAmG;IACrG,KAAK,EAAE,kGAAkG;CAC1G,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osanoai/multicli",
3
- "version": "1.5.3",
3
+ "version": "1.5.5",
4
4
  "description": "MCP server for Multiple CLI coding agent integration (Claude + Gemini + Codex)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -8,7 +8,7 @@
8
8
  "multicli": "dist/index.js"
9
9
  },
10
10
  "scripts": {
11
- "build": "tsc",
11
+ "build": "tsc && cp -f src/modelCatalog.generated.json dist/ 2>/dev/null || true",
12
12
  "start": "node dist/index.js",
13
13
  "dev": "tsc && node dist/index.js",
14
14
  "test": "vitest run",
@@ -16,9 +16,10 @@
16
16
  "test:coverage": "vitest run --coverage",
17
17
  "lint": "tsc --noEmit",
18
18
  "prepublishOnly": "echo '⚠️ Remember to test locally first!' && npm run build",
19
+ "refresh-catalog": "npx tsx scripts/refresh-catalog.ts",
19
20
  "changeset": "changeset",
20
21
  "version-packages": "changeset version",
21
- "prepare": "husky"
22
+ "prepare": "husky || true"
22
23
  },
23
24
  "keywords": [
24
25
  "mcp",