@geminilight/mindos 0.6.77 → 0.6.78

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 (204) 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 +26 -26
  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_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/agents/copy-skill/route.js.nft.json +1 -1
  40. package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  44. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  45. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +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.js.nft.json +1 -1
  50. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  51. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  52. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/channels/verify/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/connect/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/embedding/route_client-reference-manifest.js +1 -1
  56. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  57. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  60. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
  62. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  64. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  66. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  68. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  70. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/im/activity/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/im/config/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/im/feishu/long-connection/route.js.nft.json +1 -1
  75. package/_standalone/.next/server/app/api/im/feishu/long-connection/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/im/status/route.js.nft.json +1 -1
  77. package/_standalone/.next/server/app/api/im/status/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/im/test/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/im/webhook/feishu/route.js.nft.json +1 -1
  80. package/_standalone/.next/server/app/api/im/webhook/feishu/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/im/webhook-status/route.js.nft.json +1 -1
  82. package/_standalone/.next/server/app/api/im/webhook-status/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/inbox/clip/route.js.nft.json +1 -1
  84. package/_standalone/.next/server/app/api/inbox/clip/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  86. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  87. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  88. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/lint/route.js.nft.json +1 -1
  90. package/_standalone/.next/server/app/api/lint/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/mcp/direct-tools/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  101. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/obsidian/compat-report/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/obsidian/import/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  105. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  108. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  112. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  114. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  120. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  121. package/_standalone/.next/server/app/api/space-overview/route.js +1 -1
  122. package/_standalone/.next/server/app/api/space-overview/route.js.nft.json +1 -1
  123. package/_standalone/.next/server/app/api/space-overview/route_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  126. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  129. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  132. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  133. package/_standalone/.next/server/app/changelog/page.js +1 -1
  134. package/_standalone/.next/server/app/changelog/page.js.nft.json +1 -1
  135. package/_standalone/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  136. package/_standalone/.next/server/app/changes/page.js +1 -1
  137. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  138. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  139. package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
  140. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  141. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  142. package/_standalone/.next/server/app/echo/page.js +1 -1
  143. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  144. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  145. package/_standalone/.next/server/app/explore/page.js +1 -1
  146. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  147. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  148. package/_standalone/.next/server/app/help/page.js +1 -1
  149. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  150. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  151. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  152. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  153. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  154. package/_standalone/.next/server/app/login/page.js +1 -1
  155. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  156. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  157. package/_standalone/.next/server/app/page.js +1 -1
  158. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  159. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  160. package/_standalone/.next/server/app/setup/page.js +1 -1
  161. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  162. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  163. package/_standalone/.next/server/app/trash/page.js +3 -3
  164. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  165. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  166. package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
  167. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  168. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  169. package/_standalone/.next/server/app-paths-manifest.json +26 -26
  170. package/_standalone/.next/server/chunks/1299.js +1 -1
  171. package/_standalone/.next/server/chunks/{5913.js → 2057.js} +2 -2
  172. package/_standalone/.next/server/chunks/4802.js +33 -33
  173. package/_standalone/.next/server/chunks/5299.js +1 -1
  174. package/_standalone/.next/server/chunks/6223.js +1 -1
  175. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  176. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  177. package/_standalone/.next/server/pages/500.html +2 -2
  178. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  179. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  180. package/_standalone/.next/static/chunks/{7011.223941e5ce187180.js → 1768.1e964db7834ecb4f.js} +2 -2
  181. package/_standalone/.next/static/chunks/{8954.b927d1b38b3c3878.js → 1937.e178266395104aa3.js} +1 -1
  182. package/_standalone/.next/static/chunks/{5358-ac2733e1433981be.js → 5358-4d1ef32068d304de.js} +1 -1
  183. package/_standalone/.next/static/chunks/app/{layout-d17d1ec3d728ab91.js → layout-5832614ed6a78167.js} +63 -63
  184. package/_standalone/.next/static/chunks/app/trash/page-21dc1c6b6490cae8.js +1 -0
  185. package/_standalone/.next/static/chunks/app/view/[...path]/{page-283e9e8b07c8949e.js → page-e5330470ce362641.js} +2 -2
  186. package/_standalone/.next/static/chunks/webpack-6a9916defe5b8b6d.js +1 -0
  187. package/_standalone/.next/trace +72 -72
  188. package/_standalone/__tests__/agent/model-config.test.ts +90 -0
  189. package/_standalone/__tests__/ask/ask-content-input-during-run.test.tsx +1 -1
  190. package/_standalone/components/ask/AskContent.tsx +1 -1
  191. package/_standalone/package-lock.json +2 -2
  192. package/_standalone/package.json +1 -1
  193. package/_standalone/tsconfig.tsbuildinfo +1 -1
  194. package/app/__tests__/agent/model-config.test.ts +90 -0
  195. package/app/__tests__/ask/ask-content-input-during-run.test.tsx +1 -1
  196. package/app/components/ask/AskContent.tsx +1 -1
  197. package/app/lib/agent/model.ts +2 -1
  198. package/app/lib/settings.ts +17 -5
  199. package/app/package.json +1 -1
  200. package/package.json +1 -1
  201. package/_standalone/.next/static/chunks/app/trash/page-9b2798b1cd1c53e3.js +0 -1
  202. package/_standalone/.next/static/chunks/webpack-8cda3cd172a0535c.js +0 -1
  203. /package/_standalone/.next/static/{xTjrONxqaI_ZUUPRRKA_X → yJdsYbp_76hvDnNeV7OCT}/_buildManifest.js +0 -0
  204. /package/_standalone/.next/static/{xTjrONxqaI_ZUUPRRKA_X → yJdsYbp_76hvDnNeV7OCT}/_ssgManifest.js +0 -0
@@ -0,0 +1,90 @@
1
+ import fs from 'fs';
2
+ import os from 'os';
3
+ import path from 'path';
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
+
6
+ describe('provider override resolution', () => {
7
+ let tempHome: string;
8
+ let configPath: string;
9
+
10
+ beforeEach(() => {
11
+ tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'mindos-provider-test-'));
12
+ const mindosDir = path.join(tempHome, '.mindos');
13
+ fs.mkdirSync(mindosDir, { recursive: true });
14
+ configPath = path.join(mindosDir, 'config.json');
15
+ vi.resetModules();
16
+ vi.spyOn(os, 'homedir').mockReturnValue(tempHome);
17
+ });
18
+
19
+ afterEach(() => {
20
+ vi.restoreAllMocks();
21
+ fs.rmSync(tempHome, { recursive: true, force: true });
22
+ });
23
+
24
+ it('prefers explicit overrides over active provider config', async () => {
25
+ fs.writeFileSync(configPath, JSON.stringify({
26
+ mindRoot: '/tmp/mind',
27
+ ai: {
28
+ activeProvider: 'p_anthropic',
29
+ providers: [
30
+ {
31
+ id: 'p_anthropic',
32
+ name: 'Anthropic',
33
+ protocol: 'anthropic',
34
+ apiKey: 'sk-ant-test',
35
+ model: 'claude-sonnet-4-6',
36
+ baseUrl: '',
37
+ },
38
+ ],
39
+ },
40
+ }), 'utf-8');
41
+
42
+ const { getModelConfig } = await import('@/lib/agent/model');
43
+ const result = getModelConfig({
44
+ provider: 'openai',
45
+ apiKey: 'venus-key',
46
+ model: 'venus-model',
47
+ baseUrl: 'http://v2.open.venus.oa.com/llmproxy',
48
+ });
49
+
50
+ expect(result.provider).toBe('openai');
51
+ expect(result.apiKey).toBe('venus-key');
52
+ expect(result.modelName).toBe('venus-model');
53
+ expect(result.baseUrl).toBe('http://v2.open.venus.oa.com/llmproxy');
54
+ expect(result.model.provider).toBe('openai');
55
+ expect(result.model.baseUrl).toBe('http://v2.open.venus.oa.com/llmproxy');
56
+ });
57
+
58
+ it('keeps the explicit provider override in getModelConfig', async () => {
59
+ fs.writeFileSync(configPath, JSON.stringify({
60
+ mindRoot: '/tmp/mind',
61
+ ai: {
62
+ activeProvider: 'p_anthropic',
63
+ providers: [
64
+ {
65
+ id: 'p_anthropic',
66
+ name: 'Anthropic',
67
+ protocol: 'anthropic',
68
+ apiKey: 'sk-ant-test',
69
+ model: 'claude-sonnet-4-6',
70
+ baseUrl: '',
71
+ },
72
+ ],
73
+ },
74
+ }), 'utf-8');
75
+
76
+ const { getModelConfig } = await import('@/lib/agent/model');
77
+ const result = getModelConfig({
78
+ provider: 'openai',
79
+ apiKey: 'venus-key',
80
+ model: 'venus-model',
81
+ baseUrl: 'http://v2.open.venus.oa.com/llmproxy',
82
+ });
83
+
84
+ expect(result.provider).toBe('openai');
85
+ expect(result.apiKey).toBe('venus-key');
86
+ expect(result.modelName).toBe('venus-model');
87
+ expect(result.baseUrl).toBe('http://v2.open.venus.oa.com/llmproxy');
88
+ expect(result.model.provider).toBe('openai');
89
+ });
90
+ });
@@ -198,7 +198,7 @@ describe('AskContent input behavior while running', () => {
198
198
  const submitButton = host.querySelector('button[type="submit"]') as HTMLButtonElement;
199
199
  expect(submitButton.disabled).toBe(true);
200
200
  expect(submitButton.title).toBe('Wait for uploaded files to finish processing before sending.');
201
- expect(host.textContent).toContain('Wait for uploaded files to finish processing before sending.');
201
+ expect(host.textContent).not.toContain('Wait for uploaded files to finish processing before sending.');
202
202
 
203
203
  const form = host.querySelector('form') as HTMLFormElement;
204
204
  await act(async () => {
@@ -183,7 +183,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
183
183
  session.setSessionDefaultAcpAgent(agent);
184
184
  }, [session]);
185
185
  const hasLoadingAttachments = upload.localAttachments.some((f) => f.status === 'loading');
186
- const composerStatusMessage = upload.uploadError || imageUpload.imageError || (hasLoadingAttachments ? (t.ask.uploadsProcessing ?? 'Wait for uploaded files to finish processing before sending.') : '');
186
+ const composerStatusMessage = upload.uploadError || imageUpload.imageError || '';
187
187
 
188
188
  useEffect(() => {
189
189
  const handler = (e: Event) => {
@@ -47,9 +47,10 @@ export function getModelConfig(options?: ModelConfigOverrides): {
47
47
  baseUrl: string;
48
48
  } {
49
49
  const saved = effectiveAiConfig(options?.provider);
50
+ const provider = options?.provider ?? saved.provider;
50
51
 
51
52
  const cfg = {
52
- provider: saved.provider,
53
+ provider,
53
54
  apiKey: options?.apiKey ?? saved.apiKey,
54
55
  model: options?.model ?? saved.model,
55
56
  baseUrl: options?.baseUrl ?? saved.baseUrl,
@@ -310,7 +310,8 @@ export function recordSkillInstall(agentKey: string, skillName: string, installP
310
310
 
311
311
  /** Effective AI config — unified interface for all providers.
312
312
  * Resolves: saved config → env var → preset default, in that priority order.
313
- * When `providerOverride` is given (a provider entry ID), resolves that provider's config. */
313
+ * When `providerOverride` is given, it may be either a provider entry ID (`p_*`)
314
+ * or a protocol ID (`openai`, `anthropic`, etc.). */
314
315
  export function effectiveAiConfig(providerOverride?: string): {
315
316
  provider: ProviderId;
316
317
  apiKey: string;
@@ -319,9 +320,19 @@ export function effectiveAiConfig(providerOverride?: string): {
319
320
  } {
320
321
  const s = readSettings();
321
322
 
322
- // Find the provider entry
323
+ // Find the provider entry.
324
+ // providerOverride may be either a concrete entry ID (p_*) or a protocol ID.
323
325
  const targetId = providerOverride || s.ai.activeProvider;
324
- const entry = targetId ? findProvider(s.ai.providers, targetId) : undefined;
326
+ let entry = targetId ? findProvider(s.ai.providers, targetId) : undefined;
327
+
328
+ if (!entry && providerOverride && isProviderId(providerOverride)) {
329
+ const activeEntry = s.ai.activeProvider ? findProvider(s.ai.providers, s.ai.activeProvider) : undefined;
330
+ if (activeEntry?.protocol === providerOverride) {
331
+ entry = activeEntry;
332
+ } else {
333
+ entry = s.ai.providers.find((provider) => provider.protocol === providerOverride);
334
+ }
335
+ }
325
336
 
326
337
  if (entry) {
327
338
  // Resolve from the unified provider entry
@@ -335,8 +346,9 @@ export function effectiveAiConfig(providerOverride?: string): {
335
346
  return { provider: entry.protocol, apiKey, model, baseUrl };
336
347
  }
337
348
 
338
- // Fallback: no matching entry — try env var or default
339
- const envProvider = process.env.AI_PROVIDER;
349
+ // Fallback: no matching entry — if a protocol override was requested, honor it.
350
+ // Otherwise fall back to env var or default provider.
351
+ const envProvider = (providerOverride && isProviderId(providerOverride)) ? providerOverride : process.env.AI_PROVIDER;
340
352
  const protocol: ProviderId = (envProvider && isProviderId(envProvider)) ? envProvider : 'anthropic';
341
353
  const preset = PROVIDER_PRESETS[protocol] ?? PROVIDER_PRESETS.anthropic;
342
354
 
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wiki-app",
3
- "version": "0.6.77",
3
+ "version": "0.6.78",
4
4
  "private": true,
5
5
  "engines": {
6
6
  "node": ">=18"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geminilight/mindos",
3
- "version": "0.6.77",
3
+ "version": "0.6.78",
4
4
  "description": "MindOS — Human-Agent Collaborative Mind System. Local-first knowledge base that syncs your mind to all AI Agents via MCP.",
5
5
  "keywords": [
6
6
  "mindos",
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1227],{1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>i});var s=r(12115);let a=e=>{let t,r=new Set,s=(e,s)=>{let a="function"==typeof e?e(t):e;if(!Object.is(a,t)){let e=t;t=(null!=s?s:"object"!=typeof a||null===a)?a:Object.assign({},t,a),r.forEach(r=>r(t,e))}},a=()=>t,l={setState:s,getState:a,getInitialState:()=>i,subscribe:e=>(r.add(e),()=>r.delete(e))},i=t=e(s,a,l);return l},l=e=>{let t=e?a(e):a,r=e=>(function(e,t=e=>e){let r=s.useSyncExternalStore(e.subscribe,s.useCallback(()=>t(e.getState()),[e,t]),s.useCallback(()=>t(e.getInitialState()),[e,t]));return s.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},i=e=>e?l(e):l},6296:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},9199:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]])},9339:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var s={callServer:function(){return l.callServer},createServerReference:function(){return n.createServerReference},findSourceMapURL:function(){return i.findSourceMapURL}};for(var a in s)Object.defineProperty(t,a,{enumerable:!0,get:s[a]});let l=r(77304),i=r(4060),n=r(77197)},9851:(e,t,r)=>{"use strict";r.d(t,{default:()=>j});var s=r(95155),a=r(12115),l=r(68459),i=r(38798),n=r(33078),d=r(48368),c=r(41585),o=r(6296),u=r(9199),m=r(33210),h=r(73321),x=r(35581),f=r(9339);let p=(0,f.createServerReference)("60cafbf0bcad0cb954ca67d283540a66c61d6a9410",f.callServer,void 0,f.findSourceMapURL,"restoreFromTrashAction"),b=(0,f.createServerReference)("40f6fc04f44f6ac65ac59a639b572ecc90b383c0da",f.callServer,void 0,f.findSourceMapURL,"permanentlyDeleteAction"),v=(0,f.createServerReference)("004a9b4d230d9aa00d9440a9a54b0e9a17eaeeaa5c",f.callServer,void 0,f.findSourceMapURL,"emptyTrashAction");var g=r(39498),y=r(4235);function j({initialItems:e}){let{t}=(0,x.Y)(),r=(0,h.useRouter)(),[f,j]=(0,a.useState)(e),[N,k]=(0,a.useTransition)(),[A,w]=(0,a.useState)(!1),[M,C]=(0,a.useState)(null),[S,R]=(0,a.useState)(null),[z,P]=(0,a.useState)(null),L=(0,a.useCallback)(async e=>{P(e.id);try{let s=await p(e.id,"restore");s.success?(j(t=>t.filter(t=>t.id!==e.id)),y.oR.success(t.trash.restored),r.refresh()):s.conflict?R(e):y.oR.error(s.error??t.trash.restoreFailed)}finally{P(null)}},[t,r]),T=(0,a.useCallback)(async e=>{if(!S)return;let s=await p(S.id,e);s.success?(j(e=>e.filter(e=>e.id!==S.id)),y.oR.success(t.trash.restored),R(null),r.refresh()):y.oR.error(s.error??t.trash.restoreFailed)},[S,t,r]),_=(0,a.useCallback)(async()=>{if(!M)return;let e=await b(M.id);e.success?(j(e=>e.filter(e=>e.id!==M.id)),y.oR.success(t.trash.deleted)):y.oR.error(e.error??t.trash.deleteFailed),C(null)},[M,t]),E=(0,a.useCallback)(async()=>{k(async()=>{let e=await v();e.success?(j([]),y.oR.success(t.trash.emptied(e.count??0))):y.oR.error(e.error??t.trash.emptyFailed),w(!1)})},[t]);return(0,s.jsxs)("div",{className:"min-h-screen",children:[(0,s.jsx)("div",{className:"px-4 md:px-6 pt-6 md:pt-8",children:(0,s.jsx)("div",{className:"content-width xl:mr-[220px] rounded-xl border border-border bg-card px-4 py-3 md:px-5 md:py-4",children:(0,s.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground",children:[(0,s.jsx)(l.A,{size:15}),t.trash.title]}),(0,s.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:t.trash.subtitle}),f.length>0&&(0,s.jsx)("div",{className:"mt-2 text-xs text-muted-foreground",children:t.trash.itemCount(f.length)})]}),f.length>0&&(0,s.jsx)("button",{type:"button",onClick:()=>w(!0),disabled:N,className:"px-2.5 py-1.5 rounded-md text-xs font-medium bg-error/10 text-error hover:bg-error/20 transition-colors disabled:opacity-50",children:t.trash.emptyTrash})]})})}),(0,s.jsx)("div",{className:"px-4 md:px-6 py-4 md:py-6",children:(0,s.jsx)("div",{className:"content-width xl:mr-[220px]",children:0===f.length?(0,s.jsxs)("div",{className:"rounded-xl border border-border/40 bg-card/30 p-12 text-center",children:[(0,s.jsx)("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-full bg-muted/60 mb-4",children:(0,s.jsx)(l.A,{size:22,className:"text-muted-foreground/40"})}),(0,s.jsx)("p",{className:"text-sm font-medium text-muted-foreground/70",children:t.trash.empty}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground/40 mt-1 max-w-xs mx-auto leading-relaxed",children:t.trash.emptySubtext})]}):(0,s.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:f.map(e=>{let r=Math.max(0,Math.ceil((new Date(e.expiresAt).getTime()-Date.now())/864e5)),a=r<=3;return(0,s.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4 flex flex-col gap-3 hover:border-border/80 transition-colors",children:[(0,s.jsxs)("div",{className:"flex items-start gap-3 min-w-0",children:[(0,s.jsx)("div",{className:"w-9 h-9 rounded-lg bg-muted/50 flex items-center justify-center shrink-0",children:e.isDirectory?(0,s.jsx)(i.A,{size:16,className:"text-muted-foreground"}):e.fileName.endsWith(".csv")?(0,s.jsx)(n.A,{size:16,className:"text-success"}):(0,s.jsx)(d.A,{size:16,className:"text-muted-foreground"})}),(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("p",{className:"text-sm font-medium text-foreground truncate",title:e.fileName,children:e.fileName}),(0,s.jsxs)("p",{className:"text-xs text-muted-foreground truncate mt-0.5",title:e.originalPath,children:[t.trash.from,": ",e.originalPath.split("/").slice(0,-1).join("/")||"/"]})]})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,s.jsx)("span",{className:"text-2xs text-muted-foreground",children:t.trash.deletedAgo(function(e,t){let r=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(r<1)return t.justNow??"just now";if(r<60)return t.minutesAgo?.(r)??`${r}m ago`;let s=Math.floor(r/60);if(s<24)return t.hoursAgo?.(s)??`${s}h ago`;let a=Math.floor(s/24);return t.daysAgo?.(a)??`${a}d ago`}(e.deletedAt,t.trash))}),(0,s.jsxs)("span",{className:`text-2xs ${a?"text-error":"text-muted-foreground/60"}`,children:[a&&(0,s.jsx)(c.A,{size:9,className:"inline mr-0.5"}),t.trash.expiresIn(r)]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>L(e),disabled:z===e.id,className:"inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium bg-success/10 text-success hover:bg-success/20 transition-colors disabled:opacity-50",children:[z===e.id?(0,s.jsx)(o.A,{size:11,className:"animate-spin"}):(0,s.jsx)(u.A,{size:11}),t.trash.restore]}),(0,s.jsx)("button",{type:"button",onClick:()=>C(e),className:"p-1 rounded-md text-muted-foreground hover:text-error hover:bg-error/10 transition-colors",title:t.trash.deletePermanently,children:(0,s.jsx)(m.A,{size:13})})]})]})]},e.id)})})})}),(0,s.jsx)(g.TM,{open:A,title:t.trash.emptyTrash,message:t.trash.emptyTrashConfirm,confirmLabel:t.trash.emptyTrash,cancelLabel:t.trash.cancel??"Cancel",onConfirm:()=>void E(),onCancel:()=>w(!1),variant:"destructive"}),(0,s.jsx)(g.TM,{open:!!M,title:t.trash.deletePermanently,message:M?t.trash.deletePermanentlyConfirm(M.fileName):"",confirmLabel:t.trash.deletePermanently,cancelLabel:t.trash.cancel??"Cancel",onConfirm:()=>void _(),onCancel:()=>C(null),variant:"destructive"}),S&&(0,s.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center modal-backdrop",children:(0,s.jsxs)("div",{className:"bg-card border border-border rounded-xl shadow-xl max-w-sm w-full mx-4 p-5",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,s.jsx)(c.A,{size:16,className:"text-[var(--amber)]"}),(0,s.jsx)("h3",{className:"text-sm font-semibold",children:t.trash.restoreConflict})]}),(0,s.jsxs)("p",{className:"text-xs text-muted-foreground mb-4",children:['"',S.fileName,'" — ',S.originalPath]}),(0,s.jsxs)("div",{className:"flex items-center gap-2 justify-end",children:[(0,s.jsx)("button",{type:"button",onClick:()=>R(null),className:"px-3 py-1.5 rounded-md text-xs font-medium text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",children:t.trash.cancel??"Cancel"}),(0,s.jsx)("button",{type:"button",onClick:()=>void T("copy"),className:"px-3 py-1.5 rounded-md text-xs font-medium bg-muted text-foreground hover:bg-muted/80 transition-colors",children:t.trash.saveAsCopy}),(0,s.jsx)("button",{type:"button",onClick:()=>void T("overwrite"),className:"px-3 py-1.5 rounded-md text-xs font-medium bg-[var(--amber-dim)] text-[var(--amber-text)] hover:opacity-80 transition-colors",children:t.trash.overwrite})]})]})})]})}},33078:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("table",[["path",{d:"M12 3v18",key:"108xh3"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}]])},33210:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},38798:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]])},41585:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},48368:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]])},51914:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},54839:(e,t,r)=>{Promise.resolve().then(r.bind(r,9851))},68459:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]])},73321:(e,t,r)=>{"use strict";var s=r(74645);r.o(s,"usePathname")&&r.d(t,{usePathname:function(){return s.usePathname}}),r.o(s,"useRouter")&&r.d(t,{useRouter:function(){return s.useRouter}}),r.o(s,"useSearchParams")&&r.d(t,{useSearchParams:function(){return s.useSearchParams}})},90425:(e,t,r)=>{"use strict";r.d(t,{A:()=>d});var s=r(12115);let a=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim(),l=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var i={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let n=(0,s.forwardRef)(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:l,className:n="",children:d,iconNode:c,...o},u)=>(0,s.createElement)("svg",{ref:u,...i,width:t,height:t,stroke:e,strokeWidth:l?24*Number(r)/Number(t):r,className:a("lucide",n),...!d&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(o)&&{"aria-hidden":"true"},...o},[...c.map(([e,t])=>(0,s.createElement)(e,t)),...Array.isArray(d)?d:[d]])),d=(e,t)=>{let r=(0,s.forwardRef)(({className:r,...i},d)=>(0,s.createElement)(n,{ref:d,iconNode:t,className:a(`lucide-${l(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,r),...i}));return r.displayName=l(e),r}}},e=>{e.O(0,[5581,8252,8441,3794,7358],()=>e(e.s=54839)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (()=>{"use strict";var e,t,r,a,f,o,c,n,d={},i={};function u(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}},a=!0;try{d[e].call(r.exports,r,r.exports,u),a=!1}finally{a&&delete i[e]}return r.exports}u.m=d,e=[],u.O=(t,r,a,f)=>{if(r){f=f||0;for(var o=e.length;o>0&&e[o-1][2]>f;o--)e[o]=e[o-1];e[o]=[r,a,f];return}for(var c=1/0,o=0;o<e.length;o++){for(var[r,a,f]=e[o],n=!0,d=0;d<r.length;d++)(!1&f||c>=f)&&Object.keys(u.O).every(e=>u.O[e](r[d]))?r.splice(d--,1):(n=!1,f<c&&(c=f));if(n){e.splice(o--,1);var i=a();void 0!==i&&(t=i)}}return t},u.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return u.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,u.t=function(e,a){if(1&a&&(e=this(e)),8&a||"object"==typeof e&&e&&(4&a&&e.__esModule||16&a&&"function"==typeof e.then))return e;var f=Object.create(null);u.r(f);var o={};t=t||[null,r({}),r([]),r(r)];for(var c=2&a&&e;"object"==typeof c&&!~t.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach(t=>o[t]=()=>e[t]);return o.default=()=>e,u.d(f,o),f},u.d=(e,t)=>{for(var r in t)u.o(t,r)&&!u.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},u.f={},u.e=e=>Promise.all(Object.keys(u.f).reduce((t,r)=>(u.f[r](e,t),t),[])),u.u=e=>9207===e?"static/chunks/9207-456dc6941d557f33.js":3013===e?"static/chunks/3013-3d4aa69636f4a7bd.js":"static/chunks/"+(({277:"54a60aa6",3798:"95247769",5004:"70e0d97a",6079:"363642f4"})[e]||e)+"."+({277:"7a74f547ec1bdd5a",362:"2bfa40005767b578",516:"24ee058b1d4b1fed",862:"9f526e964489e2e5",1239:"10a0710c2772ab34",1477:"33df3cce509578c2",1814:"8a1fef15856dce84",2631:"dc56e83472bde281",2647:"e0b67d0c432ad7e7",2872:"045858d00bd8307f",2935:"a7fdb3a7fb681d61",2968:"f10ccee9e7e2324d",3637:"2b2697198968d83f",3798:"3b5caae1c1a76ce1",4033:"6666700547b20141",5004:"6903b8594c742784",5576:"c468f41f1126e837",5627:"c4337d7289acb31f",5956:"b445072b35915129",6079:"1ab94f095d889c3a",6087:"e4ec392aa2239719",6826:"7b7d94dd0fd83812",7011:"223941e5ce187180",7753:"63831cfc54a55fbb",8954:"b927d1b38b3c3878",9300:"118b8c840634383f"})[e]+".js",u.miniCssF=e=>{},u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},u.l=(e,t,r,f)=>{if(a[e])return void a[e].push(t);if(void 0!==r)for(var o,c,n=document.getElementsByTagName("script"),d=0;d<n.length;d++){var i=n[d];if(i.getAttribute("src")==e||i.getAttribute("data-webpack")=="_N_E:"+r){o=i;break}}o||(c=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,u.nc&&o.setAttribute("nonce",u.nc),o.setAttribute("data-webpack","_N_E:"+r),o.src=u.tu(e)),a[e]=[t];var l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(s);var f=a[e];if(delete a[e],o.parentNode&&o.parentNode.removeChild(o),f&&f.forEach(e=>e(r)),t)return t(r)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)},u.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.tt=()=>(void 0===f&&(f={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(f=trustedTypes.createPolicy("nextjs#bundler",f))),f),u.tu=e=>u.tt().createScriptURL(e),u.p="/_next/",o={8068:0,7513:0,3295:0},u.f.j=(e,t)=>{var r=u.o(o,e)?o[e]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(3295|7513|8068)$/.test(e))o[e]=0;else{var a=new Promise((t,a)=>r=o[e]=[t,a]);t.push(r[2]=a);var f=u.p+u.u(e),c=Error();u.l(f,t=>{if(u.o(o,e)&&(0!==(r=o[e])&&(o[e]=void 0),r)){var a=t&&("load"===t.type?"missing":t.type),f=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+a+": "+f+")",c.name="ChunkLoadError",c.type=a,c.request=f,r[1](c)}},"chunk-"+e,e)}},u.O.j=e=>0===o[e],c=(e,t)=>{var r,a,[f,c,n]=t,d=0;if(f.some(e=>0!==o[e])){for(r in c)u.o(c,r)&&(u.m[r]=c[r]);if(n)var i=n(u)}for(e&&e(t);d<f.length;d++)a=f[d],u.o(o,a)&&o[a]&&o[a][0](),o[a]=0;return u.O(i)},(n=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(c.bind(null,0)),n.push=c.bind(null,n.push.bind(n))})();