@jetcrab/pi-desk 1.1.25 → 1.1.29-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/app/api/work-sessions/search/route.ts +1 -0
- package/src/app/project-preview/page.tsx +1 -3
- package/src/client/l2_biz/project-preview/hooks/l2-use-project-preview.ts +1 -14
- package/src/client/l2_biz/project-preview/l2-project-preview-dialog.tsx +0 -1
- package/src/client/l2_biz/project-preview/l2-project-preview-page.tsx +0 -1
- package/src/client/l2_biz/project-preview/l2-project-preview.tsx +1 -4
- package/src/client/l2_biz/project-preview/views/l2-project-branch-select.tsx +42 -3
- package/src/client/l2_biz/workbench/git-workspace/l2-git-workspace-runtime.ts +11 -10
- package/src/client/l2_biz/workbench/hooks/l2-work-session-search.ts +52 -0
- package/src/client/l2_biz/workbench/hooks/l2-workbench-branch-picker.ts +42 -7
- package/src/client/l2_biz/workbench/hooks/l2-workbench-session-history.ts +143 -131
- package/src/client/l2_biz/workbench/hooks/l2-workbench-session-search.ts +97 -0
- package/src/client/l2_biz/workbench/l2-work-session-columns.tsx +8 -0
- package/src/client/l2_biz/workbench/l2-work-session-sidebar.tsx +129 -10
- package/src/client/l2_biz/workbench/l2-workbench-biz.ts +20 -2
- package/src/client/l2_biz/workbench/l2-workbench-branch-filter-preferences.ts +34 -0
- package/src/client/l2_biz/workbench/l2-workbench-branch-picker.tsx +34 -71
- package/src/client/l2_biz/workbench/l2-workbench-chat-input-runtime.ts +38 -1
- package/src/client/l2_biz/workbench/l2-workbench-chat-view.tsx +11 -1
- package/src/client/l2_biz/workbench/l2-workbench-picker-dialog.tsx +55 -215
- package/src/client/l2_biz/workbench/l2-workbench.tsx +20 -38
- package/src/client/l2_biz/workbench/views/l2-workbench-session-search.tsx +123 -0
- package/src/client/l3_modules/conversation/l3-conversation-messages.tsx +43 -4
- package/src/client/l3_modules/project-files/l3-markdown-preview.module.css +1 -1
- package/src/client/l3_modules/project-files/l3-project-document-git.ts +13 -29
- package/src/client/l3_modules/project-files/l3-project-document-view.tsx +1 -4
- package/src/client/l3_modules/project-files/l3-project-file-browser.module.css +14 -18
- package/src/client/l3_modules/project-files/l3-project-file-browser.tsx +52 -95
- package/src/client/l3_modules/project-files/l3-project-file-runtime.ts +52 -21
- package/src/client/l3_modules/project-files/l3-project-file-tabs.tsx +41 -62
- package/src/client/l3_modules/project-files/l3-project-git-runtime.ts +5 -4
- package/src/client/l3_modules/project-files/l3-use-project-refresh.ts +36 -0
- package/src/client/l3_modules/project-files/views/l3-project-search-results.tsx +2 -2
- package/src/client/l3_modules/project-files/views/l3-project-tree-folder.tsx +86 -0
- package/src/client/l4_foundation/ui/file-icons/README.md +1 -1
- package/src/client/l4_foundation/ui/file-icons/l4-file-icon.tsx +49 -2
- package/src/common/l2_biz/pi-session/l2-pi-session-contract.ts +11 -24
- package/src/common/l2_biz/project-preview/l2-project-preview-navigation.ts +5 -12
- package/src/common/l2_biz/work-session/l2-work-session-search-contract.ts +26 -0
- package/src/common/l2_biz/work-session/l2-work-session-tree-contract.ts +9 -1
- package/src/common/l2_biz/workbench/l2-workbench-locale-messages.ts +12 -0
- package/src/common/l2_biz/workbench/l2-workbench-picker-messages.ts +6 -2
- package/src/common/l3_modules/conversation/l3-conversation-locale-messages.ts +2 -0
- package/src/common/l3_modules/pi/l3-pi-session-search-contract.ts +26 -0
- package/src/common/l4_foundation/locale/l4-host-error-messages.ts +2 -0
- package/src/server/l1_entry/api/l1-work-session-branch-route.ts +21 -15
- package/src/server/l1_entry/api/l1-work-session-search-route.ts +38 -0
- package/src/server/l2_biz/work-session/l2-work-session-chat-runtime.ts +4 -2
- package/src/server/l2_biz/work-session/l2-work-session-manage.ts +46 -10
- package/src/server/l3_modules/work-session/l3-work-session.ts +11 -6
- package/src/server/l4_foundation/pi/l4-pi-chat-worker.ts +35 -2
- package/src/server/l4_foundation/pi/l4-pi-session-history-catalog.ts +62 -113
- package/src/server/l4_foundation/pi/l4-pi-session-search.ts +166 -0
- package/src/server/l4_foundation/pi/l4-pi-work-session-runtime.ts +66 -5
- package/src/server/l4_foundation/process/l4-process-tree.js +159 -40
- package/temp/build/pi-desk/release/.next/BUILD_ID +1 -1
- package/temp/build/pi-desk/release/.next/app-path-routes-manifest.json +1 -0
- package/temp/build/pi-desk/release/.next/build-manifest.json +2 -2
- package/temp/build/pi-desk/release/.next/prerender-manifest.json +3 -3
- package/temp/build/pi-desk/release/.next/required-server-files.js +3 -3
- package/temp/build/pi-desk/release/.next/required-server-files.json +3 -3
- package/temp/build/pi-desk/release/.next/routes-manifest.json +6 -0
- package/temp/build/pi-desk/release/.next/server/app/_global-error/page.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.html +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_not-found/page.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/auth/login/route.js +2 -2
- package/temp/build/pi-desk/release/.next/server/app/api/auth/logout/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/auth-settings/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/auth-settings/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/capability-modes/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/capability-modes/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/chat/context/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/chat/images/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/chat/messages/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/health/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/mcp-check/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/mcp-settings/del/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/mcp-settings/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/mcp-settings/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/model-catalog/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/model-settings/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/model-settings/preview/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/model-settings/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/pi/directories/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/pi/directory-entries/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/pi/directory-ignores/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/pi/directory-ignores/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/pi/models/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/pi/session-user-messages/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/pi/sessions/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/search/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/settings-get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/settings-replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/add/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/apply/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/batch/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/browser-resources/[resourceGroup]/[...resourcePath]/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/del/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/enabled-set/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/host-runtime/[runtimeVersion]/[...resourcePath]/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/reload/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/plugins/update/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-files/get/route.js +2 -2
- package/temp/build/pi-desk/release/.next/server/app/api/project-files/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-files/reveal/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-files/search/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-git/get/route.js +2 -2
- package/temp/build/pi-desk/release/.next/server/app/api/project-git-branches/list/route.js +2 -2
- package/temp/build/pi-desk/release/.next/server/app/api/project-git-changes/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-git-diff/get/route.js +2 -2
- package/temp/build/pi-desk/release/.next/server/app/api/project-git-heads/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-git-log/list/route.js +2 -2
- package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/skill-files/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/skill-files/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/skill-files/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/skills/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/task-center/images/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/task-center/messages/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/work-session-git-branch/add/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/work-session-git-branch/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/work-session-tree/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/work-session-tree-entry/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/add/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/branch/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/del/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/rename/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/search/route.js +1 -0
- package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/search/route_client-reference-manifest.js +1 -0
- package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/sort/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/favicon.ico/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/login/page.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/page.js +138 -138
- package/temp/build/pi-desk/release/.next/server/app/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/project-preview/page.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/project-preview/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app-paths-manifest.json +1 -0
- package/temp/build/pi-desk/release/.next/server/chunks/23054.js +2 -2
- package/temp/build/pi-desk/release/.next/server/chunks/25406.js +8 -8
- package/temp/build/pi-desk/release/.next/server/chunks/27344.js +3 -3
- package/temp/build/pi-desk/release/.next/server/chunks/3108.js +3 -3
- package/temp/build/pi-desk/release/.next/server/chunks/35985.js +2 -2
- package/temp/build/pi-desk/release/.next/server/chunks/41856.js +1 -0
- package/temp/build/pi-desk/release/.next/server/chunks/62900.js +235 -0
- package/temp/build/pi-desk/release/.next/server/chunks/6917.js +1 -1
- package/temp/build/pi-desk/release/.next/server/chunks/81363.js +1 -1
- package/temp/build/pi-desk/release/.next/server/chunks/81912.js +3 -0
- package/temp/build/pi-desk/release/.next/server/chunks/92386.js +2 -2
- package/temp/build/pi-desk/release/.next/server/middleware-build-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/pages/500.html +1 -1
- package/temp/build/pi-desk/release/.next/server/server-reference-manifest.json +1 -1
- package/temp/build/pi-desk/release/.next/static/Yyfg-r17aYmEzlYYlIwDo/_buildManifest.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/10043-9d6c3735418ccaf9.js +238 -0
- package/temp/build/pi-desk/release/.next/static/chunks/11937-ac71fb0f7cef482a.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/30669-ffa76d39e0e25194.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/36643-f60e98278740073c.js +3 -0
- package/temp/build/pi-desk/release/.next/static/chunks/65232-a8571f78020eede2.js +15 -0
- package/temp/build/pi-desk/release/.next/static/chunks/{51474-8dc714cb76b2e60a.js → 65350-23bb961d87addf14.js} +3 -3
- package/temp/build/pi-desk/release/.next/static/chunks/app/_global-error/page-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/_not-found/page-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth/login/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth/logout/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth-settings/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth-settings/replace/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/capability-modes/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/capability-modes/replace/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/context/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/images/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/messages/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/health/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-check/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/del/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/replace/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-catalog/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/preview/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/replace/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directories/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-entries/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-ignores/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-ignores/replace/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/models/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/session-user-messages/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/sessions/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/search/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/settings-get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/settings-replace/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/add/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/apply/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/batch/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/browser-resources/[resourceGroup]/[...resourcePath]/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/del/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/enabled-set/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/host-runtime/[runtimeVersion]/[...resourcePath]/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/reload/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/update/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/reveal/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/search/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-branches/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-changes/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-diff/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-heads/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-log/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-model-default/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-model-default/replace/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/replace/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/skills/list/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/task-center/images/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/task-center/messages/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-git-branch/add/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-git-branch/replace/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-tree/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-tree-entry/get/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/add/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/branch/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/del/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/rename/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/replace/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/search/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/sort/route-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/layout-2c6a573d3004516e.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/login/{page-0d3d4827802108e5.js → page-0df9df996aa68060.js} +1 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/page-f78be007d97f0d95.js +158 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/project-preview/{page-038b6c14e03ed878.js → page-e1dbfcfc0f333e01.js} +1 -1
- package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/app-error-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/forbidden-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/unauthorized-295cb63da5f7262f.js +1 -0
- package/temp/build/pi-desk/release/.next/static/css/{1e780a4936aa6ba3.css → 2bb393927ba8f71d.css} +1 -1
- package/temp/build/pi-desk/release/.next/static/css/3a07dcc86ffdf88c.css +1 -0
- package/temp/build/pi-desk/release/.next/static/css/a677e7fbf6e2173e.css +1 -0
- package/temp/build/pi-desk/release/.next/trace-build +1 -1
- package/temp/build/pi-desk/release/.next/server/chunks/35348.js +0 -3
- package/temp/build/pi-desk/release/.next/server/chunks/56830.js +0 -235
- package/temp/build/pi-desk/release/.next/server/chunks/80780.js +0 -1
- package/temp/build/pi-desk/release/.next/static/6a4eIEjmpW5l8Qlgtzzzg/_buildManifest.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/11937-1d0a9822f2c7995b.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/14197-3d3ddd426ac06c9c.js +0 -3
- package/temp/build/pi-desk/release/.next/static/chunks/37313-d5970e2d0c270d22.js +0 -238
- package/temp/build/pi-desk/release/.next/static/chunks/65232-ef4e5a4174f62faf.js +0 -15
- package/temp/build/pi-desk/release/.next/static/chunks/79267-7d21d7cdbd7cfca1.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/_global-error/page-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/_not-found/page-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth/login/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth/logout/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth-settings/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth-settings/replace/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/capability-modes/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/capability-modes/replace/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/context/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/images/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/messages/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/health/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-check/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/del/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/replace/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-catalog/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/preview/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/replace/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directories/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-entries/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-ignores/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-ignores/replace/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/models/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/session-user-messages/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/sessions/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/search/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/settings-get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/settings-replace/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/add/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/apply/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/batch/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/browser-resources/[resourceGroup]/[...resourcePath]/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/del/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/enabled-set/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/host-runtime/[runtimeVersion]/[...resourcePath]/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/reload/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/update/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/reveal/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/search/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-branches/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-changes/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-diff/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-heads/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-log/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-model-default/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-model-default/replace/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/replace/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/skills/list/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/task-center/images/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/task-center/messages/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-git-branch/add/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-git-branch/replace/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-tree/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-tree-entry/get/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/add/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/branch/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/del/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/rename/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/replace/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/sort/route-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/layout-20718f1503910291.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/page-18d63fd3920dfae0.js +0 -158
- package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/app-error-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/forbidden-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/unauthorized-9969fe0baa238786.js +0 -1
- package/temp/build/pi-desk/release/.next/static/css/2c3b0c0ff1f49c68.css +0 -1
- package/temp/build/pi-desk/release/.next/static/css/c43b04c244a64fb4.css +0 -1
- /package/temp/build/pi-desk/release/.next/static/{6a4eIEjmpW5l8Qlgtzzzg → Yyfg-r17aYmEzlYYlIwDo}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
exports.id=3108,exports.ids=[3108],exports.modules={7499:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Us:()=>l,fL:()=>m,sC:()=>k});var e=c(71473),f=c(77598),g=c(73024),h=c(76760),i=a([e]);function j(){return(0,h.join)((0,e.M)(),"ignored-pi-directories.json")}function k(a){let b=(0,h.resolve)(a);return"win32"===process.platform?b.toLowerCase():b}function l(){let a=j();if(!(0,g.existsSync)(a))return[];try{return function(a){let b=new Set,c=[];for(let d of a){let a=(0,h.resolve)(d.trim()),e=k(a);b.has(e)||(b.add(e),c.push(a))}return c}(function(a){if(!Array.isArray(a)||a.some(a=>"string"!=typeof a||0===a.trim().length))throw Error("Ignored Pi directories must be a string array");return a}(JSON.parse((0,g.readFileSync)(a,"utf8"))))}catch(a){return console.warn("[Pi Desk][PiDirectoryIgnoreStore] 忽略目录配置无效,将按空列表处理",{errorName:a instanceof Error?a.name:"UnknownError"}),[]}}function m(a,b){let c=(0,h.resolve)(a),d=k(c),e=l();if(e.some(a=>k(a)===d)===b)return;let i=b?[...e,c]:e.filter(a=>k(a)!==d),m=j();(0,g.mkdirSync)((0,h.dirname)(m),{recursive:!0});let n=`${m}.${process.pid}.${(0,f.randomUUID)()}.tmp`;try{(0,g.writeFileSync)(n,`${JSON.stringify(i,null,2)}
|
|
2
|
-
`,"utf8"),(0,g.renameSync)(n,m)}finally{(0,g.existsSync)(n)&&(0,g.unlinkSync)(n)}console.info("[Pi Desk][PiDirectoryIgnoreStore] 已更新忽略目录",{cwd:c,ignored:b,ignoredCount:i.length})}e=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},8602:(a,b,c)=>{"use strict";function d(a,b=200){return Response.json({code:0,msg:"",data:a},{status:b})}function e(a,b,c){let d={code:a,msg:b,data:null,...c?{i18n:c}:{}};return Response.json(d,{status:a})}c.d(b,{e:()=>e,n:()=>d})},17862:()=>{},21916:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>k,p:()=>j});var e=c(51455),f=c(76760),g=c(75430),h=a([g]);async function i(a){let b;try{b=await (0,e.open)(a,"r");let c=[],d=Buffer.allocUnsafe(4096),f=0;for(;f<1048576;){let{bytesRead:a}=await b.read(d,0,d.length,null);f+=a;let e=0;for(let b=0;b<=a;b+=1){let f;if(b===a&&a>0)break;if(b<a&&10!==d[b])continue;c.push(Buffer.from(d.subarray(e,b)));let g=Buffer.concat(c).toString("utf8").trim();if(c.length=0,e=b+1,!g)continue;try{f=JSON.parse(g)}catch{continue}if(!f||"object"!=typeof f)return null;let h=f;return"session"===h.type&&"string"==typeof h.id?{id:h.id,cwd:"string"==typeof h.cwd?h.cwd:""}:null}if(0===a)return null;c.push(Buffer.from(d.subarray(e,a)))}console.warn("[Pi Desk][PiSessionDiscovery] 会话文件头超过读取上限",{path:a})}catch(b){"ENOENT"!==b.code&&console.warn("[Pi Desk][PiSessionDiscovery] 无法读取会话文件头",{path:a,message:b instanceof Error?b.message:String(b)})}finally{await b?.close()}return null}async function j(a,b,c){let d=async c=>{let d=await i(c);return d?.id===b&&""!==d.cwd&&(0,f.resolve)(d.cwd)===a},h=g.SessionManager.create(a).getSessionDir();if(c&&(0,f.dirname)((0,f.resolve)(c))===(0,f.resolve)(h)&&await d(c))return c;for(let a of(await (0,e.readdir)(h))){if(a!==`${b}.jsonl`&&!a.endsWith(`_${b}.jsonl`))continue;let c=(0,f.join)(h,a);if(await d(c))return c}let j=g.SessionManager.findById(a,b,h);return j&&await d(j)?j:null}async function k(){let a,b=(0,f.join)((0,g.getAgentDir)(),"sessions");try{a=await (0,e.readdir)(b,{withFileTypes:!0})}catch(a){if("ENOENT"===a.code)return[];throw a}let c=a.filter(a=>a.isDirectory()||a.isSymbolicLink()),d=new Map,h=0;async function j(){for(;h<c.length;){let a,g=(0,f.join)(b,c[h++].name);try{a=await (0,e.readdir)(g)}catch(a){console.warn("[Pi Desk][PiSessionDiscovery] 无法读取会话目录",{directory:g,message:a instanceof Error?a.message:String(a)});continue}for(let b of a){if(!b.endsWith(".jsonl"))continue;let a=(0,f.join)(g,b),c=await i(a);if(!c?.cwd)continue;let h=await (0,e.stat)(a).catch(()=>null);if(!h?.isFile())continue;let j=(0,f.resolve)(c.cwd),k=d.get(j)??{cwd:j,sessionCount:0,updatedAt:0};k.sessionCount+=1,k.updatedAt=Math.max(k.updatedAt,h.mtime.getTime()),d.set(j,k)}}}return await Promise.all(Array.from({length:Math.min(10,c.length)},()=>j())),[...d.values()].sort((a,b)=>b.updatedAt-a.updatedAt)}g=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})},35166:()=>{},65209:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Ko:()=>x,Yk:()=>z,Z4:()=>v,fR:()=>A,jp:()=>w,pJ:()=>t,vg:()=>r,xt:()=>y});var e=c(71473),f=c(77598),g=c(73024),h=c(76760),i=c(59473),j=c(7499),k=c(91620),l=c(21916),m=a([e,j,k,l]);[e,j,k,l]=m.then?(await m)():m;let B=i.Ik({cwd:i.Yj().trim().min(1),sessionCount:i.ai().int().nonnegative(),updatedAt:i.ai().int().nonnegative()}).strict(),C=i.Ik({directories:i.YO(B)}).strict();function n(){return(0,h.join)((0,e.M)(),"pi-directories.json")}function o(a){let b=n(),c=`${b}.${process.pid}.${(0,f.randomUUID)()}.tmp`;try{(0,g.mkdirSync)((0,h.dirname)(b),{recursive:!0}),(0,g.writeFileSync)(c,`${JSON.stringify({directories:a},null,2)}
|
|
3
|
-
`,"utf8"),(0,g.renameSync)(c,b)}catch(a){console.warn("[Pi Desk][PiSessionCatalog] 写入项目目录持久缓存失败",{path:b,errorName:a instanceof Error?a.name:"UnknownError"})}finally{(0,g.existsSync)(c)&&(0,g.unlinkSync)(c)}}function p(){if(!globalThis.__piDeskPiSessionCatalogState){let a=function(){let a=n();if(!(0,g.existsSync)(a))return null;try{return C.parse(JSON.parse((0,g.readFileSync)(a,"utf8"))).directories}catch(b){return console.warn("[Pi Desk][PiSessionCatalog] 项目目录持久缓存无效",{path:a,errorName:b instanceof Error?b.name:"UnknownError"}),null}}();globalThis.__piDeskPiSessionCatalogState={directorySummaryCache:null,directorySummaryValue:a,directorySummaryNeedsRefresh:null!==a}}return globalThis.__piDeskPiSessionCatalogState}function q(a){return(0,h.resolve)(a)}async function r(a,b){return(0,l.p)(q(a),b,(0,k.Ph)(a,b))}function s(){let a=p();if(a.directorySummaryCache)return a.directorySummaryCache;let b=performance.now(),c=(0,l.W)();return a.directorySummaryCache=c,c.then(c=>{a.directorySummaryValue=c,a.directorySummaryNeedsRefresh=!1,o(c),console.info("[Pi Desk][PiSessionCatalog] 已更新 Pi 目录元数据缓存",{directoryCount:c.length,durationMs:Math.round(performance.now()-b)})},b=>{a.directorySummaryNeedsRefresh=!0,console.warn("[Pi Desk][PiSessionCatalog] 更新 Pi 目录元数据缓存失败",{errorName:b instanceof Error?b.name:"UnknownError"})}).finally(()=>{a.directorySummaryCache===c&&(a.directorySummaryCache=null)}),c}function t(a=!1){let b=p();return!a&&b.directorySummaryValue?(b.directorySummaryNeedsRefresh&&s(),Promise.resolve(b.directorySummaryValue)):s()}function u(){return new Set((0,j.Us)().map(j.sC))}async function v(a=!1){let b=await t(a),c=u();return b.filter(a=>!c.has((0,j.sC)(a.cwd)))}async function w(a=!1){let b=await t(a),c=u();return b.filter(a=>c.has((0,j.sC)(a.cwd)))}function x(a){let b=p();if(a||(b.directorySummaryNeedsRefresh=!0),a&&b.directorySummaryValue){let c=q(a),d=b.directorySummaryValue.find(a=>(0,j.sC)(a.cwd)===(0,j.sC)(c));d?(d.sessionCount+=1,d.updatedAt=Math.max(d.updatedAt,Date.now())):b.directorySummaryValue=[...b.directorySummaryValue,{cwd:c,sessionCount:1,updatedAt:Date.now()}].sort((a,b)=>b.updatedAt-a.updatedAt),o(b.directorySummaryValue)}(0,k.xt)(a)}function y(a){(0,k.xt)(a)}function z(a,b="",c=!1,d){return(0,k.Yk)(q(a),b,c,d)}function A(a){return(0,k.fR)({...a,cwd:q(a.cwd)})}d()}catch(a){d(a)}})},71473:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{M:()=>j});var e=c(77598),f=c(73024),g=c(76760),h=c(75430),i=a([h]);function j(){let a=(0,h.getAgentDir)(),b=(0,g.join)(a,"pi-desk"),c=(0,g.join)(a,"pi-super");if((0,f.existsSync)(b)||!(0,f.existsSync)(c))return b;let d=(0,g.join)(a,`.pi-desk-migration-${(0,e.randomUUID)()}`);try{(0,f.cpSync)(c,d,{recursive:!0,errorOnExist:!0,force:!1}),(0,f.renameSync)(d,b),console.info("[Pi Desk] 已复制旧版应用数据到新目录")}finally{(0,f.rmSync)(d,{recursive:!0,force:!0})}return b}h=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},91620:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Ph:()=>
|
|
4
|
-
`,"utf8"),(0,g.renameSync)(c,b);let d=
|
|
2
|
+
`,"utf8"),(0,g.renameSync)(n,m)}finally{(0,g.existsSync)(n)&&(0,g.unlinkSync)(n)}console.info("[Pi Desk][PiDirectoryIgnoreStore] 已更新忽略目录",{cwd:c,ignored:b,ignoredCount:i.length})}e=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},8602:(a,b,c)=>{"use strict";function d(a,b=200){return Response.json({code:0,msg:"",data:a},{status:b})}function e(a,b,c){let d={code:a,msg:b,data:null,...c?{i18n:c}:{}};return Response.json(d,{status:a})}c.d(b,{e:()=>e,n:()=>d})},14616:(a,b,c)=>{"use strict";function d(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function e(a){if("number"==typeof a&&Number.isSafeInteger(a)&&a>=0)return a;if("string"!=typeof a)return null;let b=Date.parse(a);return Number.isSafeInteger(b)&&b>=0?b:null}function f(a){return a.trim().toLowerCase()}function g(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,b-1).trimEnd()}…`}function h(a){if(!d(a))return"";let b=a.content;return"string"==typeof b?b:Array.isArray(b)?b.flatMap(a=>d(a)&&"text"===a.type&&"string"==typeof a.text?[a.text]:[]).join("\n"):""}function i(a,b,c){let d,e=0;for(let a of b)a.text.toLowerCase().includes(c)&&(e+=1,d=a);return d?{scope:a,count:e,entryId:d.entryId,timestampMs:d.timestampMs,preview:function(a,b){let c=a.toLowerCase().indexOf(b);if(c<0)return"";let d=Math.max(0,c-16),e=c+b.length,f=Math.min(a.length,Math.max(d+120,e)),g=a.slice(d,f).replace(/\s+/g," ").trim();return`${d>0?"…":""}${g}${f<a.length?"…":""}`}(d.text,c)}:null}function j(a,b,c){if(!b)return[];let d=[];if(c.has("title")&&a.name?.toLowerCase().includes(b)&&d.push({scope:"title",count:1,entryId:null,timestampMs:null,preview:g(a.name,160)}),c.has("user")){let c=i("user",a.userMessages,b);c&&d.push(c)}if(c.has("assistant")){let c=i("assistant",a.assistantMessages,b);c&&d.push(c)}return c.has("sessionId")&&a.sessionId.toLowerCase().includes(b)&&d.push({scope:"sessionId",count:1,entryId:null,timestampMs:null,preview:a.sessionId}),d}function k(a,b){let c=a.getBranch();function*d(a){for(let b of c){if("message"!==b.type||b.message.role!==a)continue;let c=h(b.message);c.trim()&&(yield{entryId:b.id,timestampMs:e(b.timestamp)??e(b.message.timestamp)??0,text:c})}}return j({sessionId:a.getSessionId(),name:a.getSessionName()?.trim()||null,userMessages:d("user"),assistantMessages:d("assistant")},f(b.query),new Set(b.searchIn))}c.d(b,{Bn:()=>j,Ii:()=>h,N:()=>g,Ni:()=>f,gI:()=>e,we:()=>k})},17862:()=>{},21916:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>k,p:()=>j});var e=c(51455),f=c(76760),g=c(75430),h=a([g]);async function i(a){let b;try{b=await (0,e.open)(a,"r");let c=[],d=Buffer.allocUnsafe(4096),f=0;for(;f<1048576;){let{bytesRead:a}=await b.read(d,0,d.length,null);f+=a;let e=0;for(let b=0;b<=a;b+=1){let f;if(b===a&&a>0)break;if(b<a&&10!==d[b])continue;c.push(Buffer.from(d.subarray(e,b)));let g=Buffer.concat(c).toString("utf8").trim();if(c.length=0,e=b+1,!g)continue;try{f=JSON.parse(g)}catch{continue}if(!f||"object"!=typeof f)return null;let h=f;return"session"===h.type&&"string"==typeof h.id?{id:h.id,cwd:"string"==typeof h.cwd?h.cwd:""}:null}if(0===a)return null;c.push(Buffer.from(d.subarray(e,a)))}console.warn("[Pi Desk][PiSessionDiscovery] 会话文件头超过读取上限",{path:a})}catch(b){"ENOENT"!==b.code&&console.warn("[Pi Desk][PiSessionDiscovery] 无法读取会话文件头",{path:a,message:b instanceof Error?b.message:String(b)})}finally{await b?.close()}return null}async function j(a,b,c){let d=async c=>{let d=await i(c);return d?.id===b&&""!==d.cwd&&(0,f.resolve)(d.cwd)===a},h=g.SessionManager.create(a).getSessionDir();if(c&&(0,f.dirname)((0,f.resolve)(c))===(0,f.resolve)(h)&&await d(c))return c;for(let a of(await (0,e.readdir)(h))){if(a!==`${b}.jsonl`&&!a.endsWith(`_${b}.jsonl`))continue;let c=(0,f.join)(h,a);if(await d(c))return c}let j=g.SessionManager.findById(a,b,h);return j&&await d(j)?j:null}async function k(){let a,b=(0,f.join)((0,g.getAgentDir)(),"sessions");try{a=await (0,e.readdir)(b,{withFileTypes:!0})}catch(a){if("ENOENT"===a.code)return[];throw a}let c=a.filter(a=>a.isDirectory()||a.isSymbolicLink()),d=new Map,h=0;async function j(){for(;h<c.length;){let a,g=(0,f.join)(b,c[h++].name);try{a=await (0,e.readdir)(g)}catch(a){console.warn("[Pi Desk][PiSessionDiscovery] 无法读取会话目录",{directory:g,message:a instanceof Error?a.message:String(a)});continue}for(let b of a){if(!b.endsWith(".jsonl"))continue;let a=(0,f.join)(g,b),c=await i(a);if(!c?.cwd)continue;let h=await (0,e.stat)(a).catch(()=>null);if(!h?.isFile())continue;let j=(0,f.resolve)(c.cwd),k=d.get(j)??{cwd:j,sessionCount:0,updatedAt:0};k.sessionCount+=1,k.updatedAt=Math.max(k.updatedAt,h.mtime.getTime()),d.set(j,k)}}}return await Promise.all(Array.from({length:Math.min(10,c.length)},()=>j())),[...d.values()].sort((a,b)=>b.updatedAt-a.updatedAt)}g=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})},35166:()=>{},65209:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Ko:()=>x,Yk:()=>z,Z4:()=>v,fR:()=>A,jp:()=>w,pJ:()=>t,vg:()=>r,xt:()=>y});var e=c(71473),f=c(77598),g=c(73024),h=c(76760),i=c(59473),j=c(7499),k=c(91620),l=c(21916),m=a([e,j,k,l]);[e,j,k,l]=m.then?(await m)():m;let B=i.Ik({cwd:i.Yj().trim().min(1),sessionCount:i.ai().int().nonnegative(),updatedAt:i.ai().int().nonnegative()}).strict(),C=i.Ik({directories:i.YO(B)}).strict();function n(){return(0,h.join)((0,e.M)(),"pi-directories.json")}function o(a){let b=n(),c=`${b}.${process.pid}.${(0,f.randomUUID)()}.tmp`;try{(0,g.mkdirSync)((0,h.dirname)(b),{recursive:!0}),(0,g.writeFileSync)(c,`${JSON.stringify({directories:a},null,2)}
|
|
3
|
+
`,"utf8"),(0,g.renameSync)(c,b)}catch(a){console.warn("[Pi Desk][PiSessionCatalog] 写入项目目录持久缓存失败",{path:b,errorName:a instanceof Error?a.name:"UnknownError"})}finally{(0,g.existsSync)(c)&&(0,g.unlinkSync)(c)}}function p(){if(!globalThis.__piDeskPiSessionCatalogState){let a=function(){let a=n();if(!(0,g.existsSync)(a))return null;try{return C.parse(JSON.parse((0,g.readFileSync)(a,"utf8"))).directories}catch(b){return console.warn("[Pi Desk][PiSessionCatalog] 项目目录持久缓存无效",{path:a,errorName:b instanceof Error?b.name:"UnknownError"}),null}}();globalThis.__piDeskPiSessionCatalogState={directorySummaryCache:null,directorySummaryValue:a,directorySummaryNeedsRefresh:null!==a}}return globalThis.__piDeskPiSessionCatalogState}function q(a){return(0,h.resolve)(a)}async function r(a,b){return(0,l.p)(q(a),b,(0,k.Ph)(a,b))}function s(){let a=p();if(a.directorySummaryCache)return a.directorySummaryCache;let b=performance.now(),c=(0,l.W)();return a.directorySummaryCache=c,c.then(c=>{a.directorySummaryValue=c,a.directorySummaryNeedsRefresh=!1,o(c),console.info("[Pi Desk][PiSessionCatalog] 已更新 Pi 目录元数据缓存",{directoryCount:c.length,durationMs:Math.round(performance.now()-b)})},b=>{a.directorySummaryNeedsRefresh=!0,console.warn("[Pi Desk][PiSessionCatalog] 更新 Pi 目录元数据缓存失败",{errorName:b instanceof Error?b.name:"UnknownError"})}).finally(()=>{a.directorySummaryCache===c&&(a.directorySummaryCache=null)}),c}function t(a=!1){let b=p();return!a&&b.directorySummaryValue?(b.directorySummaryNeedsRefresh&&s(),Promise.resolve(b.directorySummaryValue)):s()}function u(){return new Set((0,j.Us)().map(j.sC))}async function v(a=!1){let b=await t(a),c=u();return b.filter(a=>!c.has((0,j.sC)(a.cwd)))}async function w(a=!1){let b=await t(a),c=u();return b.filter(a=>c.has((0,j.sC)(a.cwd)))}function x(a){let b=p();if(a||(b.directorySummaryNeedsRefresh=!0),a&&b.directorySummaryValue){let c=q(a),d=b.directorySummaryValue.find(a=>(0,j.sC)(a.cwd)===(0,j.sC)(c));d?(d.sessionCount+=1,d.updatedAt=Math.max(d.updatedAt,Date.now())):b.directorySummaryValue=[...b.directorySummaryValue,{cwd:c,sessionCount:1,updatedAt:Date.now()}].sort((a,b)=>b.updatedAt-a.updatedAt),o(b.directorySummaryValue)}(0,k.xt)(a)}function y(a){(0,k.xt)(a)}function z(a,b="",c=!1,d){return(0,k.Yk)(q(a),b,c,d)}function A(a){return(0,k.fR)({...a,cwd:q(a.cwd)})}d()}catch(a){d(a)}})},71473:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{M:()=>j});var e=c(77598),f=c(73024),g=c(76760),h=c(75430),i=a([h]);function j(){let a=(0,h.getAgentDir)(),b=(0,g.join)(a,"pi-desk"),c=(0,g.join)(a,"pi-super");if((0,f.existsSync)(b)||!(0,f.existsSync)(c))return b;let d=(0,g.join)(a,`.pi-desk-migration-${(0,e.randomUUID)()}`);try{(0,f.cpSync)(c,d,{recursive:!0,errorOnExist:!0,force:!1}),(0,f.renameSync)(d,b),console.info("[Pi Desk] 已复制旧版应用数据到新目录")}finally{(0,f.rmSync)(d,{recursive:!0,force:!0})}return b}h=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},91620:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Ph:()=>P,Yk:()=>M,fR:()=>O,xt:()=>Q});var e=c(71473),f=c(77598),g=c(73024),h=c(51455),i=c(76760),j=c(80481),k=c(75430),l=c(59473),m=c(21916),n=c(14616),o=a([e,k,m]);[e,k,m]=o.then?(await o)():o;let R=["title","user"],S=l.Ik({entryId:l.Yj().min(1),timestampMs:l.ai().int().nonnegative(),text:l.Yj()}).strict(),T=l.Ik({path:l.Yj().min(1),sessionId:l.Yj().min(1),cwd:l.Yj().min(1),name:l.Yj().nullable(),createdAt:l.ai().int().nonnegative(),updatedAt:l.ai().int().nonnegative(),messageCount:l.ai().int().nonnegative(),userMessageCount:l.ai().int().nonnegative(),firstMessage:l.Yj(),userMessages:l.YO(S),assistantMessages:l.YO(S),textBytes:l.ai().int().nonnegative()}).strict(),U=l.Ik({descriptor:l.Ik({path:l.Yj().min(1),size:l.ai().int().nonnegative(),modifiedAt:l.ai().int().nonnegative()}).strict(),record:T.nullable()}).strict(),V=l.Ik({cwd:l.Yj().min(1),files:l.YO(U)}).strict(),W=V.extend({version:l.eu(2)}),X=l.Ik({version:l.eu(1),catalogs:l.YO(V)}).strict();function p(){return(0,i.join)((0,e.M)(),"pi-session-history")}function q(a){let b=(0,f.createHash)("sha256").update(a).digest("hex");return(0,i.join)(p(),`${b}.json`)}function r(a){return Array.from(a.values()).flatMap(a=>a.record?[a.record]:[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function s(a){return a.reduce((a,b)=>a+b.textBytes,0)}function t(a){let b=(0,i.resolve)(a.cwd),c=new Map;for(let d of a.files){let a=null;if(d.record&&d.record.path===d.descriptor.path&&(0,i.resolve)(d.record.cwd)===b){let b=d.record.assistantMessages.filter(a=>a.text.trim()),c=d.record.assistantMessages.reduce((a,b)=>a+(b.text.trim()?0:Buffer.byteLength(b.text,"utf8")),0);a={...d.record,assistantMessages:b,textBytes:d.record.textBytes-c}}c.set(d.descriptor.path,{descriptor:d.descriptor,record:a})}let d=r(c),e=Date.now();return{cwd:b,files:c,sessions:d,textBytes:s(d),dirty:!1,validatedAt:0,lastAccessedAt:e}}function u(a){let b=q(a);if((0,g.existsSync)(b))try{let c=W.parse(JSON.parse((0,g.readFileSync)(b,"utf8")));if((0,i.resolve)(c.cwd)!==a)throw Error("缓存项目目录不匹配");let d=t(c);if(d.files.size>4096||d.textBytes>0x2000000)return;return d}catch(a){console.warn("[Pi Desk][PiSessionHistoryCatalog] 历史会话持久缓存无效",{path:b,errorName:a instanceof Error?a.name:"UnknownError"});return}}function v(a){let b=q(a.cwd),c=`${b}.${process.pid}.${(0,f.randomUUID)()}.tmp`;try{(0,g.mkdirSync)((0,i.dirname)(b),{recursive:!0}),(0,g.writeFileSync)(c,`${JSON.stringify({version:2,cwd:a.cwd,files:Array.from(a.files.values())})}
|
|
4
|
+
`,"utf8"),(0,g.renameSync)(c,b);let d=p(),e=(0,g.readdirSync)(d).filter(a=>/^[a-f0-9]{64}\.json$/u.test(a)).map(a=>{let b=(0,i.join)(d,a),c=(0,g.statSync)(b);return{path:b,size:c.size,modifiedAt:c.mtimeMs}}).sort((a,b)=>a.modifiedAt-b.modifiedAt),f=e.reduce((a,b)=>a+b.size,0);for(;e.length>1&&(e.length>8||f>0x4000000);){let a=e.shift();(0,g.unlinkSync)(a.path),f-=a.size}return!0}catch(a){return console.warn("[Pi Desk][PiSessionHistoryCatalog] 写入历史会话持久缓存失败",{path:b,errorName:a instanceof Error?a.name:"UnknownError"}),!1}finally{(0,g.existsSync)(c)&&(0,g.unlinkSync)(c)}}function w(){return globalThis.__piDeskPiSessionHistoryCatalogState||(!function(){let a=(0,i.join)((0,e.M)(),"pi-session-history.json");if((0,g.existsSync)(a))try{let b=X.parse(JSON.parse((0,g.readFileSync)(a,"utf8")));for(let a of b.catalogs){let b=t(a);if(!(0,g.existsSync)(q(b.cwd))&&!v(b))return}(0,g.unlinkSync)(a),console.info("[Pi Desk][PiSessionHistoryCatalog] 已迁移历史会话缓存",{catalogCount:b.catalogs.length})}catch(b){console.warn("[Pi Desk][PiSessionHistoryCatalog] 迁移历史会话缓存失败",{path:a,errorName:b instanceof Error?b.name:"UnknownError"})}}(),globalThis.__piDeskPiSessionHistoryCatalogState={epochs:new Map,activeLoads:new Map,catalogs:new Map,cleanupTimer:null}),globalThis.__piDeskPiSessionHistoryCatalogState}function x(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function y(a,b){var c;let d;if("session_info"===b.type&&(a.name="string"==typeof b.name&&b.name.trim()||null),"string"!=typeof b.id||0===b.id.length||"string"!=typeof b.type)return;let e=x(b.message)?b.message:null,f="message"===b.type&&e&&"string"==typeof e.role?e.role:null,g="string"==typeof b.parentId?b.parentId:null,h={id:b.id,parentId:g,type:b.type,timestampMs:(c=a.createdAt,d=(0,n.gI)(b.timestamp),null!==d?d:x(b.message)?(0,n.gI)(b.message.timestamp)??c:c),messageRole:f,messageText:"user"===f||"assistant"===f?(0,n.Ii)(e):""};a.entriesById.set(h.id,h),a.leafId=h.id}function z(a,b,c){if(!c.sessionId||c.headerCwd&&(0,i.resolve)(c.headerCwd)!==b)return null;let d=[],e=new Set,f=c.leafId?c.entriesById.get(c.leafId):void 0;for(;f&&!e.has(f.id);)e.add(f.id),d.push(f),f=f.parentId?c.entriesById.get(f.parentId):void 0;d.reverse();let g=0,h=0,j="",k=c.createdAt,l=0,m=[],o=[];for(let a of d)if("message"===a.type){if(g+=1,k=Math.max(k,a.timestampMs),"user"===a.messageRole){h+=1,!j&&a.messageText.trim()&&(j=(0,n.N)(a.messageText,160)),l+=Buffer.byteLength(a.messageText,"utf8"),m.push({entryId:a.id,timestampMs:a.timestampMs,text:a.messageText});continue}"assistant"===a.messageRole&&a.messageText.trim()&&(l+=Buffer.byteLength(a.messageText,"utf8"),o.push({entryId:a.id,timestampMs:a.timestampMs,text:a.messageText}))}return{path:a.path,sessionId:c.sessionId,cwd:b,name:c.name,createdAt:c.createdAt,updatedAt:Math.max(k,a.modifiedAt),messageCount:g,userMessageCount:h,firstMessage:j,userMessages:m,assistantMessages:o,textBytes:l}}async function A(a,b){let c=(0,g.createReadStream)(a.path,{encoding:"utf8"}),d=(0,j.createInterface)({input:c,crlfDelay:1/0}),e=null,f=null;try{for await(let b of d){let c;if(b.trim()){if(f){f.push(b);continue}try{c=JSON.parse(b)}catch{continue}if(x(c)){if(!e){if("session"!==c.type||"string"!=typeof c.id)return null;let d=(0,n.gI)(c.timestamp)??a.modifiedAt;e={sessionId:c.id,headerCwd:"string"==typeof c.cwd?c.cwd:"",createdAt:d,name:null,leafId:null,entriesById:new Map},("number"==typeof c.version?c.version:1)<k.CURRENT_SESSION_VERSION&&(f=[b]);continue}y(e,c)}}}}finally{d.close(),c.destroy()}if(f){var h=f;let c=(0,k.parseSessionEntries)(h.join("\n"));(0,k.migrateSessionEntries)(c);let d=c.find(a=>"session"===a.type);if(!d||"string"!=typeof d.id)return null;let e=(0,n.gI)(d.timestamp)??a.modifiedAt,g={sessionId:d.id,headerCwd:"string"==typeof d.cwd?d.cwd:"",createdAt:e,name:null,leafId:null,entriesById:new Map};for(let a of c)"session"!==a.type&&y(g,a);return z(a,b,g)}return e?z(a,b,e):null}async function B(a,b,c){let d=Array(a.length),e=0;async function f(){for(;e<a.length;){let b=e;e+=1,d[b]=await c(a[b])}}return await Promise.all(Array.from({length:Math.min(b,a.length)},()=>f())),d}async function C(a){let b,c=k.SessionManager.create(a).getSessionDir();try{b=(await (0,h.readdir)(c)).filter(a=>a.endsWith(".jsonl")).sort()}catch{return[]}return(await B(b,10,async a=>{let b=(0,i.resolve)(c,a);try{let a=await (0,h.stat)(b);if(!a.isFile())return null;return{path:b,size:a.size,modifiedAt:a.mtime.getTime()}}catch{return null}})).filter(a=>null!==a)}function D(a,b){return a.path===b.path&&a.size===b.size&&a.modifiedAt===b.modifiedAt}async function E(a,b){let c=await C(a),d=await B(c,10,async c=>{let d=b?.files.get(c.path);if(d&&D(d.descriptor,c))return{entry:{descriptor:c,record:d.record},changed:!1};try{return{entry:{descriptor:c,record:await A(c,a)},changed:!0}}catch(b){return console.warn("[Pi Desk][PiSessionHistoryCatalog] 已忽略无法读取的 Pi 会话",{cwd:a,path:c.path,errorName:b instanceof Error?b.name:"UnknownError"}),{entry:null,changed:!0}}}),e=new Map;for(let a of d)a.entry&&e.set(a.entry.descriptor.path,a.entry);let f=r(e),g=Date.now();return{catalog:{cwd:a,files:e,sessions:f,textBytes:s(f),dirty:!1,validatedAt:g,lastAccessedAt:g},changed:void 0===b||b.files.size!==e.size||d.some(a=>a.changed)}}function F(a){if(a.cleanupTimer&&clearTimeout(a.cleanupTimer),a.cleanupTimer=null,0===a.catalogs.size)return;let b=Math.min(...Array.from(a.catalogs.values(),a=>a.lastAccessedAt+6e4));a.cleanupTimer=setTimeout(()=>{a.cleanupTimer=null,G(Date.now(),a)},Math.max(0,b-Date.now())),a.cleanupTimer.unref()}function G(a,b=w()){for(let[c,d]of b.catalogs)a-d.lastAccessedAt>=6e4&&b.catalogs.delete(c);F(b)}function H(a,b){a.lastAccessedAt=b;let c=w();return c.catalogs.delete(a.cwd),c.catalogs.set(a.cwd,a),F(c),a}function I(a,b){let c=w();if(a.files.size>4096||a.textBytes>0x2000000){if(c.catalogs.delete(a.cwd),F(c),b){let b=q(a.cwd);try{(0,g.existsSync)(b)&&(0,g.unlinkSync)(b)}catch(a){console.warn("[Pi Desk][PiSessionHistoryCatalog] 清理超限缓存失败",{path:b,errorName:a instanceof Error?a.name:"UnknownError"})}}console.warn("[Pi Desk][PiSessionHistoryCatalog] 历史会话超过内存缓存上限",{cwd:a.cwd,fileCount:a.files.size,textBytes:a.textBytes});return}c.catalogs.delete(a.cwd),c.catalogs.set(a.cwd,a);let d=[...c.catalogs.values()].reduce((a,b)=>a+b.textBytes,0);for(;c.catalogs.size>8||d>0x2000000;){let a=c.catalogs.entries().next().value;if(!a)break;c.catalogs.delete(a[0]),d-=a[1].textBytes}F(c),b&&v(a)}function J(a){return w().epochs.get(a)??0}function K(a){let b=J(a)+1;return w().epochs.set(a,b),b}async function L(a,b=!1){let c=(0,i.resolve)(a),d=w(),e=Date.now();G(e);let f=d.catalogs.get(c),g=f?H(f,e):u(c),h=b&&d.activeLoads.has(c)?K(c):J(c);b&&g&&(g.dirty=!0);let j=d.activeLoads.get(c);if(j&&j.epoch===h)return j.promise;if(!b&&g&&!g.dirty&&e-g.validatedAt<2e3)return H(g,e);let k=Promise.resolve().then(async()=>{let a=await E(c,g),e=a.catalog;return d.activeLoads.get(c)?.promise===k&&J(c)===h&&I(e,a.changed),console.info("[Pi Desk][PiSessionHistoryCatalog] 已更新历史会话内存投影",{cwd:c,sessionCount:e.sessions.length,fileCount:e.files.size,textBytes:e.textBytes,forceRefresh:b}),e});d.activeLoads.set(c,{epoch:h,promise:k});try{return await k}finally{d.activeLoads.get(c)?.promise===k&&(d.activeLoads.delete(c),d.epochs.delete(c))}}async function M(a,b="",c=!1,d=R){let e=await L(a,c),f=(0,n.Ni)(b),g=new Set(d);return e.sessions.flatMap(a=>{let b=function(a,b,c){if(!b)return{sessionId:a.sessionId,cwd:a.cwd,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt,messageCount:a.messageCount,userMessageCount:a.userMessageCount,firstMessage:a.firstMessage,matches:null};let d=(0,n.Bn)(a,b,c);return 0===d.length?null:{sessionId:a.sessionId,cwd:a.cwd,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt,messageCount:a.messageCount,userMessageCount:a.userMessageCount,firstMessage:a.firstMessage,matches:d}}(a,f,g);return b?[b]:[]})}async function N(a,b){let c=(0,i.resolve)(a);G(Date.now());let d=w().catalogs.get(c),e=d?H(d,Date.now()):u(c),f=e?.sessions.find(a=>a.sessionId===b),g=await (0,m.p)(c,b,f?.path);if(!g)return null;let j=await (0,h.stat)(g).catch(()=>null);if(!j?.isFile())return null;let k={path:g,size:j.size,modifiedAt:j.mtime.getTime()},l=e?.files.get(g);if(e&&l&&D(l.descriptor,k))return e.lastAccessedAt=Date.now(),I(e,!1),l.record;let n=await A(k,c),o=e??t({cwd:c,files:[]});return o.files.set(g,{descriptor:k,record:n}),o.sessions=r(o.files),o.textBytes=s(o.sessions),o.dirty=!0,o.lastAccessedAt=Date.now(),I(o,!1),n}async function O(a){let b=await N(a.cwd,a.sessionId);if(!b)return null;let c=(0,n.Ni)(a.query),d=b.userMessages.filter(a=>!c||a.text.toLowerCase().includes(c)).reverse(),e=(a.page.index-1)*a.page.size;return{page:{index:a.page.index,size:a.page.size,total:d.length},messages:d.slice(e,e+a.page.size).map(({entryId:a,timestampMs:b,text:c})=>({entryId:a,timestampMs:b,text:c}))}}function P(a,b){G(Date.now());let c=w().catalogs.get((0,i.resolve)(a));if(c&&!c.dirty)return H(c,Date.now()),c.sessions.find(a=>a.sessionId===b)?.path}function Q(a){let b=w();if(a){let c=(0,i.resolve)(a);b.activeLoads.has(c)&&K(c);let d=b.catalogs.get(c);d&&(d.dirty=!0);return}for(let a of new Set([...b.catalogs.keys(),...b.activeLoads.keys()])){b.activeLoads.has(a)&&K(a);let c=b.catalogs.get(a);c&&(c.dirty=!0)}}d()}catch(a){d(a)}})}};
|