@geminilight/mindos 0.6.67 → 0.6.69

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 (179) hide show
  1. package/_standalone/.mindos-build-version +1 -1
  2. package/_standalone/.next/BUILD_ID +1 -1
  3. package/_standalone/.next/app-path-routes-manifest.json +17 -17
  4. package/_standalone/.next/build-manifest.json +3 -3
  5. package/_standalone/.next/cache/.previewinfo +1 -1
  6. package/_standalone/.next/cache/.rscinfo +1 -1
  7. package/_standalone/.next/cache/config.json +3 -3
  8. package/_standalone/.next/prerender-manifest.json +3 -3
  9. package/_standalone/.next/react-loadable-manifest.json +4 -4
  10. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  11. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/_standalone/.next/server/app/_global-error.html +2 -2
  13. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  14. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  21. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  24. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/page.js +1 -1
  27. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  31. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/registry/route.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/ask/route.js +8 -8
  45. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  49. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  51. package/_standalone/.next/server/app/api/connect/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  56. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  60. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/im/config/route_client-reference-manifest.js +1 -1
  62. package/_standalone/.next/server/app/api/im/status/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/im/test/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/inbox/clip/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/lint/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/mcp/direct-tools/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  75. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  87. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/space-overview/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/changelog/page.js +1 -1
  99. package/_standalone/.next/server/app/changelog/page.js.nft.json +1 -1
  100. package/_standalone/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/changes/page.js +1 -1
  102. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  103. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
  105. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  106. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/echo/page.js +1 -1
  108. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  109. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/explore/page.js +1 -1
  111. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  112. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/help/page.js +1 -1
  114. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  115. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  117. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  118. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/login/page.js +1 -1
  120. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  121. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  122. package/_standalone/.next/server/app/page.js +1 -1
  123. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  124. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/setup/page.js +1 -1
  126. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  127. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/trash/page.js +2 -2
  129. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  131. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  132. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  133. package/_standalone/.next/server/app/wiki/page.js +1 -1
  134. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
  135. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
  136. package/_standalone/.next/server/app-paths-manifest.json +17 -17
  137. package/_standalone/.next/server/chunks/1750.js +1 -1
  138. package/_standalone/.next/server/chunks/6022.js +31 -31
  139. package/_standalone/.next/server/chunks/6539.js +1 -1
  140. package/_standalone/.next/server/chunks/{8947.js → 7200.js} +3 -3
  141. package/_standalone/.next/server/chunks/953.js +1 -1
  142. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  143. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  144. package/_standalone/.next/server/pages/500.html +2 -2
  145. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  147. package/_standalone/.next/static/chunks/{5998.7bd28de9747440b5.js → 3466.bc6ab3172ad66091.js} +1 -1
  148. package/_standalone/.next/static/chunks/{476.463546c195b89cce.js → 8735.66a049abcf0971fb.js} +2 -2
  149. package/_standalone/.next/static/chunks/app/layout-bd0652768781e726.js +133 -0
  150. package/_standalone/.next/static/chunks/app/trash/page-8280ba2f5c20861e.js +1 -0
  151. package/_standalone/.next/static/chunks/app/view/[...path]/page-b942374e2f88c53e.js +12 -0
  152. package/_standalone/.next/static/chunks/webpack-9e42857d6c44fe70.js +1 -0
  153. package/_standalone/.next/trace +71 -71
  154. package/_standalone/__tests__/acp/agent-descriptors.test.ts +65 -3
  155. package/_standalone/__tests__/acp/registry.test.ts +34 -5
  156. package/_standalone/__tests__/acp/session.test.ts +1 -1
  157. package/_standalone/components/Breadcrumb.tsx +11 -11
  158. package/_standalone/components/panels/AgentsPanel.tsx +8 -1
  159. package/_standalone/lib/acp/index.ts +2 -0
  160. package/_standalone/package-lock.json +2 -2
  161. package/_standalone/package.json +1 -1
  162. package/_standalone/tsconfig.tsbuildinfo +1 -1
  163. package/app/app/api/acp/detect/route.ts +9 -15
  164. package/app/components/Breadcrumb.tsx +11 -11
  165. package/app/components/panels/AgentsPanel.tsx +8 -1
  166. package/app/lib/acp/agent-descriptors.ts +51 -29
  167. package/app/lib/acp/index.ts +2 -0
  168. package/app/lib/acp/registry.ts +42 -46
  169. package/app/lib/acp/session.ts +36 -7
  170. package/app/lib/acp/subprocess.ts +40 -2
  171. package/app/lib/agent/tools.ts +4 -3
  172. package/app/package.json +1 -1
  173. package/package.json +1 -1
  174. package/_standalone/.next/static/chunks/app/layout-9bb19a959ffb87ac.js +0 -133
  175. package/_standalone/.next/static/chunks/app/trash/page-bebb28bf472cf691.js +0 -1
  176. package/_standalone/.next/static/chunks/app/view/[...path]/page-dd5698f3df138835.js +0 -12
  177. package/_standalone/.next/static/chunks/webpack-043f40ef7816d8c4.js +0 -1
  178. /package/_standalone/.next/static/{0JtsgqDZLSJ6MrIZIV6gC → HL8b6d3NCfyoAXNuY2kcn}/_buildManifest.js +0 -0
  179. /package/_standalone/.next/static/{0JtsgqDZLSJ6MrIZIV6gC → HL8b6d3NCfyoAXNuY2kcn}/_ssgManifest.js +0 -0
@@ -3,8 +3,11 @@ import {
3
3
  resolveAgentCommand,
4
4
  parseAcpAgentOverrides,
5
5
  AGENT_DESCRIPTORS,
6
+ AGENT_ALIASES,
7
+ resolveAlias,
6
8
  getDescriptorBinary,
7
9
  getDescriptorInstallCmd,
10
+ getDetectableAgents,
8
11
  } from '@/lib/acp/agent-descriptors';
9
12
  import type { AcpRegistryEntry } from '@/lib/acp/types';
10
13
 
@@ -177,10 +180,69 @@ describe('AGENT_DESCRIPTORS', () => {
177
180
  }
178
181
  });
179
182
 
180
- it('has entries for all critical agents', () => {
181
- const critical = ['gemini', 'claude-acp', 'codebuddy-code', 'codebuddy'];
182
- for (const id of critical) {
183
+ it('has entries for all critical canonical agents', () => {
184
+ const canonical = ['gemini', 'claude', 'codebuddy-code', 'codex-acp'];
185
+ for (const id of canonical) {
183
186
  expect(AGENT_DESCRIPTORS[id], `missing descriptor for ${id}`).toBeDefined();
184
187
  }
185
188
  });
189
+
190
+ it('has no duplicate entries (aliases in AGENT_ALIASES instead)', () => {
191
+ const binaries = Object.values(AGENT_DESCRIPTORS).map(d => d.binary);
192
+ const uniqueBinaries = new Set(binaries);
193
+ expect(binaries.length).toBe(uniqueBinaries.size);
194
+ });
195
+ });
196
+
197
+ /* ── Aliases ──────────────────────────────────────────────────────────── */
198
+
199
+ describe('resolveAlias', () => {
200
+ it('resolves known aliases to canonical IDs', () => {
201
+ expect(resolveAlias('gemini-cli')).toBe('gemini');
202
+ expect(resolveAlias('claude-code')).toBe('claude');
203
+ expect(resolveAlias('claude-acp')).toBe('claude');
204
+ expect(resolveAlias('codebuddy')).toBe('codebuddy-code');
205
+ expect(resolveAlias('codex')).toBe('codex-acp');
206
+ expect(resolveAlias('pi-acp')).toBe('pi');
207
+ });
208
+
209
+ it('returns canonical IDs unchanged', () => {
210
+ expect(resolveAlias('gemini')).toBe('gemini');
211
+ expect(resolveAlias('claude')).toBe('claude');
212
+ expect(resolveAlias('codebuddy-code')).toBe('codebuddy-code');
213
+ });
214
+
215
+ it('returns unknown IDs unchanged', () => {
216
+ expect(resolveAlias('totally-unknown')).toBe('totally-unknown');
217
+ });
218
+
219
+ it('all aliases point to existing descriptors', () => {
220
+ for (const [alias, canonical] of Object.entries(AGENT_ALIASES)) {
221
+ expect(AGENT_DESCRIPTORS[canonical], `alias ${alias} → ${canonical} not in AGENT_DESCRIPTORS`).toBeDefined();
222
+ }
223
+ });
224
+ });
225
+
226
+ /* ── getDetectableAgents ─────────────────────────────────────────────── */
227
+
228
+ describe('getDetectableAgents', () => {
229
+ it('returns all canonical agents', () => {
230
+ const agents = getDetectableAgents();
231
+ expect(agents.length).toBe(Object.keys(AGENT_DESCRIPTORS).length);
232
+ });
233
+
234
+ it('each agent has required detection fields', () => {
235
+ for (const agent of getDetectableAgents()) {
236
+ expect(agent.id).toBeTruthy();
237
+ expect(agent.name).toBeTruthy();
238
+ expect(agent.binary).toBeTruthy();
239
+ }
240
+ });
241
+
242
+ it('has no duplicate binaries', () => {
243
+ const agents = getDetectableAgents();
244
+ const binaries = agents.map(a => a.binary);
245
+ const unique = new Set(binaries);
246
+ expect(binaries.length).toBe(unique.size);
247
+ });
186
248
  });
@@ -23,6 +23,14 @@ const MOCK_REGISTRY = {
23
23
  command: '@anthropic/claude-code',
24
24
  tags: ['coding'],
25
25
  },
26
+ {
27
+ id: 'new-cdn-only',
28
+ name: 'CDN Only Agent',
29
+ description: 'An agent only available from CDN',
30
+ transport: 'stdio',
31
+ command: 'cdn-agent',
32
+ tags: ['new'],
33
+ },
26
34
  ],
27
35
  };
28
36
 
@@ -38,11 +46,16 @@ describe('ACP Registry', () => {
38
46
 
39
47
  const registry = await fetchAcpRegistry();
40
48
  expect(registry).not.toBeNull();
41
- // CDN agents are merged with built-in agents
42
- expect(registry.agents.length).toBeGreaterThanOrEqual(2);
43
- const gemini = registry.agents.find(a => a.id === 'gemini-cli');
49
+ // Built-in agents are present with canonical IDs
50
+ const gemini = registry.agents.find(a => a.id === 'gemini');
44
51
  expect(gemini).toBeDefined();
45
- expect(gemini!.transport).toBe('npx');
52
+ expect(gemini!.name).toBe('Gemini CLI');
53
+ // CDN alias entries (gemini-cli) are deduplicated — built-in 'gemini' covers them
54
+ expect(registry.agents.find(a => a.id === 'gemini-cli')).toBeUndefined();
55
+ // CDN-only entries are added
56
+ const cdnOnly = registry.agents.find(a => a.id === 'new-cdn-only');
57
+ expect(cdnOnly).toBeDefined();
58
+ expect(cdnOnly!.name).toBe('CDN Only Agent');
46
59
  });
47
60
 
48
61
  it('caches the registry for subsequent calls', async () => {
@@ -146,7 +159,15 @@ describe('ACP Registry', () => {
146
159
  });
147
160
 
148
161
  describe('findAcpAgent', () => {
149
- it('finds agent by ID', async () => {
162
+ it('finds agent by canonical ID', async () => {
163
+ mockFetch.mockResolvedValueOnce({ ok: true, json: async () => MOCK_REGISTRY });
164
+
165
+ const agent = await findAcpAgent('gemini');
166
+ expect(agent).not.toBeNull();
167
+ expect(agent!.name).toBe('Gemini CLI');
168
+ });
169
+
170
+ it('finds agent by alias ID (resolves to canonical)', async () => {
150
171
  mockFetch.mockResolvedValueOnce({ ok: true, json: async () => MOCK_REGISTRY });
151
172
 
152
173
  const agent = await findAcpAgent('gemini-cli');
@@ -154,6 +175,14 @@ describe('ACP Registry', () => {
154
175
  expect(agent!.name).toBe('Gemini CLI');
155
176
  });
156
177
 
178
+ it('finds CDN-only agent', async () => {
179
+ mockFetch.mockResolvedValueOnce({ ok: true, json: async () => MOCK_REGISTRY });
180
+
181
+ const agent = await findAcpAgent('new-cdn-only');
182
+ expect(agent).not.toBeNull();
183
+ expect(agent!.name).toBe('CDN Only Agent');
184
+ });
185
+
157
186
  it('returns null for unknown ID', async () => {
158
187
  mockFetch.mockResolvedValueOnce({ ok: true, json: async () => MOCK_REGISTRY });
159
188
 
@@ -40,7 +40,7 @@ vi.mock('../../lib/acp/subprocess', () => {
40
40
  }),
41
41
  onRequest: vi.fn(() => () => {}),
42
42
  sendResponse: vi.fn(),
43
- installAutoApproval: vi.fn(() => () => {}),
43
+ installAutoApproval: vi.fn((_proc: unknown, _opts?: unknown) => () => {}),
44
44
  killAgent: vi.fn((p: { alive: boolean }) => { p.alive = false; }),
45
45
  };
46
46
  });
@@ -21,29 +21,29 @@ export default function Breadcrumb({ filePath }: { filePath: string }) {
21
21
 
22
22
  if (friendly) {
23
23
  return (
24
- <nav className="flex items-center gap-0.5 text-xs text-muted-foreground flex-wrap">
24
+ <nav className="flex items-center gap-2 text-xs text-muted-foreground flex-wrap">
25
25
  <Link
26
26
  href="/"
27
- className="p-1.5 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors"
27
+ className="p-1.5 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors shrink-0"
28
28
  title="Home"
29
29
  >
30
30
  <Home size={14} />
31
31
  </Link>
32
32
  <ChevronRight size={12} className="text-muted-foreground/50 shrink-0" />
33
- <span className="flex items-center gap-1.5 px-2 py-1 text-foreground font-medium">
33
+ <div className="flex items-center gap-1.5 text-foreground font-medium shrink-0">
34
34
  {friendly.icon}
35
35
  <span>{friendly.getLabel(t)}</span>
36
- </span>
36
+ </div>
37
37
  </nav>
38
38
  );
39
39
  }
40
40
 
41
41
  const parts = filePath.split('/');
42
42
  return (
43
- <nav className="flex items-center gap-0.5 text-xs text-muted-foreground flex-wrap">
43
+ <nav className="flex items-center gap-2 text-xs text-muted-foreground flex-wrap">
44
44
  <Link
45
45
  href="/"
46
- className="p-1.5 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors"
46
+ className="p-1.5 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors shrink-0"
47
47
  title="Home"
48
48
  >
49
49
  <Home size={14} />
@@ -52,19 +52,19 @@ export default function Breadcrumb({ filePath }: { filePath: string }) {
52
52
  const isLast = i === parts.length - 1;
53
53
  const href = '/view/' + parts.slice(0, i + 1).map(encodeURIComponent).join('/');
54
54
  return (
55
- <span key={i} className="flex items-center gap-0.5">
55
+ <div key={i} className="flex items-center gap-2 min-w-0">
56
56
  <ChevronRight size={12} className="text-muted-foreground/50 shrink-0" />
57
57
  {isLast ? (
58
- <span className="flex items-center gap-1.5 px-2 py-1 text-foreground font-medium">
58
+ <div className="flex items-center gap-1.5 text-foreground font-medium shrink-0">
59
59
  <FileTypeIcon name={part} />
60
60
  <span suppressHydrationWarning>{part}</span>
61
- </span>
61
+ </div>
62
62
  ) : (
63
- <Link href={href} className="px-2 py-1 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors truncate max-w-[200px]" title={part}>
63
+ <Link href={href} className="px-2 py-1 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors truncate text-muted-foreground hover:text-foreground" title={part}>
64
64
  <span suppressHydrationWarning>{part}</span>
65
65
  </Link>
66
66
  )}
67
- </span>
67
+ </div>
68
68
  );
69
69
  })}
70
70
  </nav>
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { useState } from 'react';
4
- import { usePathname, useSearchParams } from 'next/navigation';
4
+ import { useRouter, usePathname, useSearchParams } from 'next/navigation';
5
5
  import { Globe, Loader2, RefreshCw, Settings } from 'lucide-react';
6
6
  import { useMcpData } from '@/lib/stores/mcp-store';
7
7
  import { useA2aRegistry } from '@/hooks/useA2aRegistry';
@@ -27,6 +27,7 @@ export default function AgentsPanel({
27
27
  }: AgentsPanelProps) {
28
28
  const { t } = useLocale();
29
29
  const p = t.panels.agents;
30
+ const router = useRouter();
30
31
  const mcp = useMcpData();
31
32
  const pathname = usePathname();
32
33
  const searchParams = useSearchParams();
@@ -42,6 +43,10 @@ export default function AgentsPanel({
42
43
  setRefreshing(false);
43
44
  };
44
45
 
46
+ const handleChannelsClick = () => {
47
+ router.push('/agents?tab=channels');
48
+ };
49
+
45
50
  const openAdvancedConfig = () => {
46
51
  window.dispatchEvent(new CustomEvent('mindos:open-settings', { detail: { tab: 'mcp' } }));
47
52
  };
@@ -84,6 +89,8 @@ export default function AgentsPanel({
84
89
  copy={hubCopy}
85
90
  connectedCount={connected.length}
86
91
  mcpEnabled={mcp.status?.connectionMode?.mcp ?? false}
92
+ channelsActive={isChannelsTab}
93
+ onChannelsClick={handleChannelsClick}
87
94
  />
88
95
  );
89
96
 
@@ -3,6 +3,7 @@ export { spawnAcpAgent, sendMessage, sendAndWait, onMessage, onNotification, onR
3
3
  export { createSession, createSessionFromEntry, loadSession, listSessions, prompt, promptStream, cancelPrompt, setMode, setConfigOption, closeSession, getSession, getActiveSessions, closeAllSessions } from './session';
4
4
  export { bridgeA2aToAcp, bridgeAcpResponseToA2a, bridgeAcpUpdatesToA2a } from './bridge';
5
5
  export { acpTools } from './acp-tools';
6
+ export { AGENT_DESCRIPTORS, AGENT_ALIASES, resolveAlias, getDetectableAgents } from './agent-descriptors';
6
7
  export { ACP_ERRORS } from './types';
7
8
  export type {
8
9
  AcpAgentCapabilities,
@@ -38,3 +39,4 @@ export type {
38
39
  AcpTransportType,
39
40
  } from './types';
40
41
  export type { AcpProcess, AcpIncomingRequest, AcpNotification } from './subprocess';
42
+ export type { AcpAgentDescriptor, AcpAgentOverride, ResolvedAgentCommand, DetectableAgent } from './agent-descriptors';
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "wiki-app",
3
- "version": "0.1.1",
3
+ "version": "0.6.69",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "wiki-app",
9
- "version": "0.1.1",
9
+ "version": "0.6.69",
10
10
  "hasInstallScript": true,
11
11
  "dependencies": {
12
12
  "@base-ui/react": "^1.2.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wiki-app",
3
- "version": "0.1.1",
3
+ "version": "0.6.69",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "generate": "npx tsx scripts/generate-explore.ts",