Skip to content

Commit ac3cb2c

Browse files
authored
Merge pull request #1471 from link-assistant/issue-1470-972f15b315e9
fix: update tool display names to full official names
2 parents 5e6d472 + 2e4e00e commit ac3cb2c

File tree

7 files changed

+32
-23
lines changed

7 files changed

+32
-23
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
'@link-assistant/hive-mind': patch
3+
---
4+
5+
fix: update tool display names to full official names (Issue #1470)
6+
7+
- Update `getToolDisplayName()` in `src/model-info.lib.mjs` to return full official names: "Anthropic Claude Code", "OpenAI Codex", "OpenCode", "Agent CLI"
8+
- Update usage limit messages in `src/claude.lib.mjs`, `src/codex.lib.mjs`, and `src/agent.lib.mjs` to use full tool names
9+
- Update test assertions in `tests/model-info.test.mjs` and `tests/test-usage-limit.mjs` to match new display names

src/agent.lib.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -899,7 +899,7 @@ export const executeAgentCommand = async params => {
899899

900900
// Format and display user-friendly message
901901
const messageLines = formatUsageLimitMessage({
902-
tool: 'Agent',
902+
tool: 'Agent CLI',
903903
resetTime: limitInfo.resetTime,
904904
sessionId,
905905
resumeCommand: sessionId ? `${process.argv[0]} ${process.argv[1]} ${argv.url} --resume ${sessionId}` : null,

src/claude.lib.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1257,7 +1257,7 @@ export const executeClaudeCommand = async params => {
12571257

12581258
// Format and display user-friendly message
12591259
const messageLines = formatUsageLimitMessage({
1260-
tool: 'Claude',
1260+
tool: 'Anthropic Claude Code',
12611261
resetTime: limitInfo.resetTime,
12621262
sessionId,
12631263
resumeCommand: argv.url ? `${process.argv[0]} ${process.argv[1]} --auto-continue ${argv.url}` : null,

src/codex.lib.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ export const executeCodexCommand = async params => {
390390

391391
// Format and display user-friendly message
392392
const messageLines = formatUsageLimitMessage({
393-
tool: 'Codex',
393+
tool: 'OpenAI Codex',
394394
resetTime: limitInfo.resetTime,
395395
sessionId,
396396
resumeCommand: sessionId ? `${process.argv[0]} ${process.argv[1]} ${argv.url} --resume ${sessionId}` : null,

src/model-info.lib.mjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ export const getToolDisplayName = tool => {
2626
const name = (tool || '').toString().toLowerCase();
2727
switch (name) {
2828
case 'claude':
29-
return 'Claude';
29+
return 'Anthropic Claude Code';
3030
case 'codex':
31-
return 'Codex';
31+
return 'OpenAI Codex';
3232
case 'opencode':
3333
return 'OpenCode';
3434
case 'agent':
35-
return 'Agent';
35+
return 'Agent CLI';
3636
default:
3737
return 'AI tool';
3838
}

tests/model-info.test.mjs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,20 @@ function test(name, fn) {
3838

3939
console.log('\n📋 getToolDisplayName Tests\n');
4040

41-
test('getToolDisplayName returns "Claude" for claude', () => {
42-
assert.equal(getToolDisplayName('claude'), 'Claude');
41+
test('getToolDisplayName returns "Anthropic Claude Code" for claude', () => {
42+
assert.equal(getToolDisplayName('claude'), 'Anthropic Claude Code');
4343
});
4444

45-
test('getToolDisplayName returns "Codex" for codex', () => {
46-
assert.equal(getToolDisplayName('codex'), 'Codex');
45+
test('getToolDisplayName returns "OpenAI Codex" for codex', () => {
46+
assert.equal(getToolDisplayName('codex'), 'OpenAI Codex');
4747
});
4848

4949
test('getToolDisplayName returns "OpenCode" for opencode', () => {
5050
assert.equal(getToolDisplayName('opencode'), 'OpenCode');
5151
});
5252

53-
test('getToolDisplayName returns "Agent" for agent', () => {
54-
assert.equal(getToolDisplayName('agent'), 'Agent');
53+
test('getToolDisplayName returns "Agent CLI" for agent', () => {
54+
assert.equal(getToolDisplayName('agent'), 'Agent CLI');
5555
});
5656

5757
test('getToolDisplayName returns "AI tool" for unknown', () => {
@@ -67,9 +67,9 @@ test('getToolDisplayName returns "AI tool" for undefined', () => {
6767
});
6868

6969
test('getToolDisplayName is case-insensitive', () => {
70-
assert.equal(getToolDisplayName('Claude'), 'Claude');
71-
assert.equal(getToolDisplayName('CLAUDE'), 'Claude');
72-
assert.equal(getToolDisplayName('CODEX'), 'Codex');
70+
assert.equal(getToolDisplayName('Claude'), 'Anthropic Claude Code');
71+
assert.equal(getToolDisplayName('CLAUDE'), 'Anthropic Claude Code');
72+
assert.equal(getToolDisplayName('CODEX'), 'OpenAI Codex');
7373
});
7474

7575
// ============================================================================
@@ -143,7 +143,7 @@ test('buildModelInfoString includes tool name', () => {
143143
requestedModel: 'opus',
144144
modelsUsed: [{ modelId: 'claude-opus-4-5-20251101', modelInfo: null }],
145145
});
146-
assert.ok(result.includes('Tool: Claude'), `Expected "Tool: Claude" but got: ${result}`);
146+
assert.ok(result.includes('Tool: Anthropic Claude Code'), `Expected "Tool: Anthropic Claude Code" but got: ${result}`);
147147
});
148148

149149
test('buildModelInfoString includes requested model', () => {
@@ -315,7 +315,7 @@ test('buildModelInfoString shows "Codex" tool name for codex', () => {
315315
requestedModel: 'gpt5',
316316
modelsUsed: [{ modelId: 'gpt-5', modelInfo: { name: 'GPT-5', provider: 'OpenAI' } }],
317317
});
318-
assert.ok(result.includes('Tool: Codex'), `Expected "Tool: Codex" but got: ${result}`);
318+
assert.ok(result.includes('Tool: OpenAI Codex'), `Expected "Tool: OpenAI Codex" but got: ${result}`);
319319
assert.ok(result.includes('**Model: GPT-5**'), `Expected bold model name but got: ${result}`);
320320
assert.ok(result.includes('(`gpt-5`)'), `Expected model ID in compact format but got: ${result}`);
321321
});
@@ -336,7 +336,7 @@ test('buildModelInfoString shows "Agent" tool name for agent', () => {
336336
requestedModel: 'grok',
337337
modelsUsed: [{ modelId: 'opencode/grok-code', modelInfo: { name: 'Grok Code', provider: 'OpenCode Zen' } }],
338338
});
339-
assert.ok(result.includes('Tool: Agent'), `Expected "Tool: Agent" but got: ${result}`);
339+
assert.ok(result.includes('Tool: Agent CLI'), `Expected "Tool: Agent CLI" but got: ${result}`);
340340
});
341341

342342
test('buildModelInfoString shows warning for codex when actual model does not match requested', () => {
@@ -403,7 +403,7 @@ test('buildModelInfoString shows "Main model" + "Additional models" for opus+hai
403403
],
404404
});
405405
assert.ok(result.includes('### 🤖 **Models used:**'), `Expected header but got: ${result}`);
406-
assert.ok(result.includes('Tool: Claude'), `Expected tool name but got: ${result}`);
406+
assert.ok(result.includes('Tool: Anthropic Claude Code'), `Expected tool name but got: ${result}`);
407407
assert.ok(result.includes('Requested: `opus`'), `Expected requested model but got: ${result}`);
408408
assert.ok(result.includes('**Main model: Claude Opus 4.6**'), `Expected "Main model" label but got: ${result}`);
409409
assert.ok(result.includes('(`claude-opus-4-6`)'), `Expected opus ID but got: ${result}`);

tests/test-usage-limit.mjs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -186,23 +186,23 @@ runTest('detectUsageLimit: no reset time for non-limit message', () => {
186186

187187
runTest('formatUsageLimitMessage: includes session ID and resume command', () => {
188188
const lines = formatUsageLimitMessage({
189-
tool: 'Claude',
189+
tool: 'Anthropic Claude Code',
190190
resetTime: '8:00 PM',
191191
sessionId: '4c549ec6-3204-4312-b8e2-5f04113b2f86',
192192
resumeCommand: './solve.mjs "https://example.com" --resume 4c549ec6-3204-4312-b8e2-5f04113b2f86',
193193
});
194194

195195
const message = lines.join('\n');
196196
assertTrue(message.includes('Usage Limit Reached'), 'Should include header');
197-
assertTrue(message.includes('Claude'), 'Should include tool name');
197+
assertTrue(message.includes('Anthropic Claude Code'), 'Should include tool name');
198198
assertTrue(message.includes('8:00 PM'), 'Should include reset time');
199199
assertTrue(message.includes('4c549ec6-3204-4312-b8e2-5f04113b2f86'), 'Should include session ID');
200200
assertTrue(message.includes('--resume'), 'Should include resume command');
201201
});
202202

203203
runTest('formatUsageLimitMessage: handles missing reset time', () => {
204204
const lines = formatUsageLimitMessage({
205-
tool: 'Claude',
205+
tool: 'Anthropic Claude Code',
206206
resetTime: null,
207207
sessionId: 'test-session',
208208
resumeCommand: './solve.mjs --resume test-session',
@@ -214,7 +214,7 @@ runTest('formatUsageLimitMessage: handles missing reset time', () => {
214214

215215
runTest('formatUsageLimitMessage: handles missing session ID', () => {
216216
const lines = formatUsageLimitMessage({
217-
tool: 'Claude',
217+
tool: 'Anthropic Claude Code',
218218
resetTime: '5:00 AM',
219219
sessionId: null,
220220
resumeCommand: null,

0 commit comments

Comments
 (0)