@geminilight/mindos 0.6.54 → 0.6.56

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 (147) 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 +20 -20
  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 +1 -1
  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/ask/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  45. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  49. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  51. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  56. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  60. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  62. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  75. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/changes/page.js +1 -1
  84. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  85. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
  87. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  88. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/echo/page.js +1 -1
  90. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  91. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/explore/page.js +1 -1
  93. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  94. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/help/page.js +1 -1
  96. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  97. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  99. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  100. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/login/page.js +1 -1
  102. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  103. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/page.js +1 -1
  105. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  106. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/setup/page.js +1 -1
  108. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  109. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/trash/page.js +3 -3
  111. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  113. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  114. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/wiki/page.js +1 -1
  116. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
  117. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app-paths-manifest.json +20 -20
  119. package/_standalone/.next/server/chunks/530.js +26 -26
  120. package/_standalone/.next/server/chunks/{6054.js → 7543.js} +2 -2
  121. package/_standalone/.next/server/chunks/8388.js +1 -1
  122. package/_standalone/.next/server/chunks/953.js +1 -1
  123. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  124. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  125. package/_standalone/.next/server/pages/500.html +2 -2
  126. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  128. package/_standalone/.next/static/chunks/{2872.045858d00bd8307f.js → 2872.c8c8593be1ba4735.js} +2 -2
  129. package/_standalone/.next/static/chunks/app/{layout-8eacff5813458190.js → layout-d5f28933c5e14d74.js} +45 -45
  130. package/_standalone/.next/static/chunks/app/{page-5a6c9455efe8a0df.js → page-45140253e07a135a.js} +2 -2
  131. package/_standalone/.next/static/chunks/app/trash/page-c7f14311f040009e.js +1 -0
  132. package/_standalone/.next/static/chunks/app/view/[...path]/{page-e8699f96589c0979.js → page-62cfae628e31d411.js} +1 -1
  133. package/_standalone/.next/static/chunks/{webpack-73c9da80c6c1ebfe.js → webpack-521ae5a2ddf0e396.js} +1 -1
  134. package/_standalone/.next/trace +64 -64
  135. package/_standalone/__tests__/settings/update-tab-desktop.test.tsx +40 -0
  136. package/_standalone/components/Breadcrumb.tsx +10 -6
  137. package/_standalone/components/settings/UpdateTab.tsx +18 -2
  138. package/_standalone/tsconfig.tsbuildinfo +1 -1
  139. package/app/app/page.tsx +3 -3
  140. package/app/components/Breadcrumb.tsx +10 -6
  141. package/app/components/settings/UpdateTab.tsx +18 -2
  142. package/app/lib/fs.ts +1 -1
  143. package/bin/lib/clean-env.js +1 -1
  144. package/package.json +1 -1
  145. package/_standalone/.next/static/chunks/app/trash/page-72d0ae3649ac4b6c.js +0 -1
  146. /package/_standalone/.next/static/{2hrwFOLEOZhHQHfrIt-Dw → 3gMJ8EaZfDgHmB0NR0Q4T}/_buildManifest.js +0 -0
  147. /package/_standalone/.next/static/{2hrwFOLEOZhHQHfrIt-Dw → 3gMJ8EaZfDgHmB0NR0Q4T}/_ssgManifest.js +0 -0
package/app/app/page.tsx CHANGED
@@ -37,10 +37,10 @@ function extractDescription(spacePath: string): string {
37
37
  }
38
38
 
39
39
 
40
- function getTopLevelDirs(): SpaceInfo[] {
40
+ function getTopLevelDirs(tree?: FileNode[]): SpaceInfo[] {
41
41
  try {
42
- const tree = getFileTree();
43
- return tree
42
+ const nodes = tree ?? getFileTree();
43
+ return nodes
44
44
  .filter(n => n.type === 'directory' && !n.name.startsWith('.'))
45
45
  .map(n => ({
46
46
  name: n.name,
@@ -13,23 +13,27 @@ function FileTypeIcon({ name }: { name: string }) {
13
13
  export default function Breadcrumb({ filePath }: { filePath: string }) {
14
14
  const parts = filePath.split('/');
15
15
  return (
16
- <nav className="flex items-center gap-1 text-xs text-muted-foreground flex-wrap">
17
- <Link href="/" className="hover:text-foreground transition-colors">
16
+ <nav className="flex items-center gap-0.5 text-xs text-muted-foreground flex-wrap">
17
+ <Link
18
+ href="/"
19
+ className="p-1.5 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors"
20
+ title="Home"
21
+ >
18
22
  <Home size={14} />
19
23
  </Link>
20
24
  {parts.map((part, i) => {
21
25
  const isLast = i === parts.length - 1;
22
26
  const href = '/view/' + parts.slice(0, i + 1).map(encodeURIComponent).join('/');
23
27
  return (
24
- <span key={i} className="flex items-center gap-1">
25
- <ChevronRight size={12} className="text-muted-foreground/50" />
28
+ <span key={i} className="flex items-center gap-0.5">
29
+ <ChevronRight size={12} className="text-muted-foreground/50 shrink-0" />
26
30
  {isLast ? (
27
- <span className="flex items-center gap-1.5 text-foreground font-medium">
31
+ <span className="flex items-center gap-1.5 px-2 py-1 text-foreground font-medium">
28
32
  <FileTypeIcon name={part} />
29
33
  <span suppressHydrationWarning>{part}</span>
30
34
  </span>
31
35
  ) : (
32
- <Link href={href} className="px-2 py-0.5 rounded-md hover:bg-muted/50 transition-colors truncate max-w-[200px]" title={part}>
36
+ <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}>
33
37
  <span suppressHydrationWarning>{part}</span>
34
38
  </Link>
35
39
  )}
@@ -108,7 +108,15 @@ function DesktopCoreCard() {
108
108
  // Get current Core version via a check call (also probes for updates)
109
109
  try {
110
110
  const info = await bridge.checkCoreUpdate?.();
111
- if (info) setCurrentVersion(info.currentVersion);
111
+ if (info) {
112
+ setCurrentVersion(info.currentVersion);
113
+ // CRITICAL FIX: If no update available, explicitly set state to 'idle'
114
+ // This ensures the UI refreshes to show the new (current) version
115
+ if (!info.available) {
116
+ setState('idle');
117
+ return;
118
+ }
119
+ }
112
120
  } catch { /* ignore */ }
113
121
 
114
122
  // Check for pending download (from previous session)
@@ -196,7 +204,11 @@ function DesktopCoreCard() {
196
204
  setState('applying');
197
205
  try {
198
206
  const result = await bridge.applyCoreUpdate();
199
- if (result?.version) setCurrentVersion(result.version);
207
+ // CRITICAL FIX: Update currentVersion to the version returned by the main process
208
+ // This ensures the UI immediately shows the new version after the update is applied
209
+ if (result?.version) {
210
+ setCurrentVersion(result.version);
211
+ }
200
212
  setState('idle');
201
213
  // Page will be reloaded by main process
202
214
  } catch (err) {
@@ -346,6 +358,10 @@ function DesktopShellCard() {
346
358
  const [errorMsg, setErrorMsg] = useState('');
347
359
 
348
360
  useEffect(() => {
361
+ // CRITICAL: Reset state on mount to clear stale state after app restart
362
+ // (without this, 'state' can be 'downloading' from before the restart)
363
+ setState('idle');
364
+
349
365
  bridge.getAppInfo?.().then((info) => {
350
366
  if (info?.version) setAppVersion(info.version);
351
367
  }).catch((err) => { console.warn("[UpdateTab] getAppInfo failed:", err); });
package/app/lib/fs.ts CHANGED
@@ -67,7 +67,7 @@ interface FileTreeCache {
67
67
  }
68
68
 
69
69
  let _cache: FileTreeCache | null = null;
70
- const CACHE_TTL_MS = 5_000; // 5 seconds
70
+ const CACHE_TTL_MS = 30_000; // 30 seconds (file watcher still invalidates immediately on changes)
71
71
 
72
72
  let _treeVersion = 0;
73
73
 
@@ -6,7 +6,7 @@
6
6
  * installation path. If these leak into the child process, the "new"
7
7
  * server starts from the old code — the infamous "fake update" bug.
8
8
  *
9
- * This helper strips ALL MINDOS_*/MIND_* prefixed variables plus
9
+ * This helper strips ALL MINDOS_* / MIND_* prefixed variables plus
10
10
  * a curated denylist of other vars that can cause stale-path issues.
11
11
  */
12
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geminilight/mindos",
3
- "version": "0.6.54",
3
+ "version": "0.6.56",
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)},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"}]])},46169:(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(91053),f=r(9339);let p=(0,f.createServerReference)("60e285f802a89a9cc8290acd8d57e462fb58c0c56d",f.callServer,void 0,f.findSourceMapURL,"restoreFromTrashAction"),b=(0,f.createServerReference)("40509b00c6f1e7e2eaa3a3e12e75ffb59dce1c6e69",f.callServer,void 0,f.findSourceMapURL,"permanentlyDeleteAction"),v=(0,f.createServerReference)("00acefbcf58786a047f315765ffb832deeca621a23",f.callServer,void 0,f.findSourceMapURL,"emptyTrashAction");var g=r(22721),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 bg-black/40 backdrop-blur-sm",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})]})]})})]})}},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,46169))},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,[1053,7035,8441,3794,7358],()=>e(e.s=54839)),_N_E=e.O()}]);