@jetcrab/pi-desk 1.1.28-dev → 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/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/required-server-files.js +2 -2
- package/temp/build/pi-desk/release/.next/required-server-files.json +2 -2
- 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/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/bj2dB_Z10YB_CqK_VNhDx/_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-ce2ebf7d8ea7a330.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/{bj2dB_Z10YB_CqK_VNhDx → Yyfg-r17aYmEzlYYlIwDo}/_ssgManifest.js +0 -0
|
@@ -1,153 +1,165 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
-
import { useCallback,
|
|
3
|
+
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react'
|
|
4
4
|
import { useTranslation } from 'react-i18next'
|
|
5
5
|
import type {
|
|
6
6
|
L2PiSessionHistoryResponse,
|
|
7
|
-
|
|
7
|
+
L2PiSessionUserMessageListResponse
|
|
8
8
|
} from '@common/l2_biz/pi-session/l2-pi-session-contract'
|
|
9
|
+
import type {
|
|
10
|
+
L3PiSessionSearchQuery,
|
|
11
|
+
L3PiSessionSearchScope
|
|
12
|
+
} from '@common/l3_modules/pi/l3-pi-session-search-contract'
|
|
9
13
|
import type { L2WorkbenchBiz } from '../l2-workbench-biz'
|
|
14
|
+
import { useL2WorkbenchSessionSearch } from './l2-workbench-session-search'
|
|
10
15
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
recent: {
|
|
19
|
-
query: string
|
|
20
|
-
searchIn: readonly L2PiSessionHistorySearchScope[]
|
|
21
|
-
sessions: HistorySessions
|
|
22
|
-
} | null
|
|
16
|
+
interface L2ExpandedHistoryMessages {
|
|
17
|
+
sessionId: string
|
|
18
|
+
query: string
|
|
19
|
+
messages: L2PiSessionUserMessageListResponse['messages']
|
|
20
|
+
page: L2PiSessionUserMessageListResponse['page'] | null
|
|
21
|
+
loading: boolean
|
|
22
|
+
error: string | null
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
interface
|
|
26
|
-
sessions:
|
|
25
|
+
interface L2WorkbenchSessionHistoryResult {
|
|
26
|
+
sessions: L2PiSessionHistoryResponse['sessions']
|
|
27
27
|
loading: boolean
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
error: string | null
|
|
29
|
+
refresh: () => void
|
|
30
|
+
expandedHistory: L2ExpandedHistoryMessages | null
|
|
31
|
+
toggleUserMessages: (session: L2PiSessionHistoryResponse['sessions'][number]) => void
|
|
32
|
+
loadUserMessages: (
|
|
33
|
+
sessionId: string,
|
|
34
|
+
query: string,
|
|
35
|
+
pageIndex: number,
|
|
36
|
+
append: boolean
|
|
33
37
|
) => Promise<void>
|
|
34
|
-
cancel: () => void
|
|
35
|
-
showCached: (cwd: string) => void
|
|
36
38
|
}
|
|
37
39
|
|
|
38
|
-
function
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
export function useL2WorkbenchSessionHistory({
|
|
41
|
+
active,
|
|
42
|
+
cwd,
|
|
43
|
+
query,
|
|
44
|
+
searchIn,
|
|
45
|
+
listSessionHistory,
|
|
46
|
+
listSessionUserMessages
|
|
47
|
+
}: {
|
|
48
|
+
active: boolean
|
|
49
|
+
cwd: string | null
|
|
50
|
+
query: string
|
|
51
|
+
searchIn: readonly L3PiSessionSearchScope[]
|
|
52
|
+
listSessionHistory: L2WorkbenchBiz['listSessionHistory']
|
|
53
|
+
listSessionUserMessages: L2WorkbenchBiz['listSessionUserMessages']
|
|
54
|
+
}): L2WorkbenchSessionHistoryResult {
|
|
55
|
+
const { t } = useTranslation('workbenchPicker')
|
|
56
|
+
const request = useCallback(
|
|
57
|
+
(input: L3PiSessionSearchQuery, signal: AbortSignal, forceRefresh: boolean) =>
|
|
58
|
+
listSessionHistory({ ...input, cwd: cwd!, forceRefresh }, signal),
|
|
59
|
+
[cwd, listSessionHistory]
|
|
42
60
|
)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const [
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
useEffect(
|
|
57
|
-
() => () => {
|
|
58
|
-
requestIdRef.current += 1
|
|
59
|
-
abortControllerRef.current?.abort()
|
|
60
|
-
abortControllerRef.current = null
|
|
61
|
-
},
|
|
62
|
-
[]
|
|
61
|
+
const search = useL2WorkbenchSessionSearch({
|
|
62
|
+
active: active && cwd !== null,
|
|
63
|
+
scope: cwd,
|
|
64
|
+
query,
|
|
65
|
+
searchIn,
|
|
66
|
+
request,
|
|
67
|
+
failureMessage: t('loadHistoryFailed')
|
|
68
|
+
})
|
|
69
|
+
const [expandedHistory, setExpandedHistory] = useState<L2ExpandedHistoryMessages | null>(null)
|
|
70
|
+
const messageContext = useMemo(
|
|
71
|
+
() => ({ active, cwd, query, searchIn }),
|
|
72
|
+
[active, cwd, query, searchIn]
|
|
63
73
|
)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
const [previousMessageContext, setPreviousMessageContext] = useState(messageContext)
|
|
75
|
+
if (previousMessageContext !== messageContext) {
|
|
76
|
+
setPreviousMessageContext(messageContext)
|
|
77
|
+
setExpandedHistory(null)
|
|
78
|
+
}
|
|
79
|
+
const messageControllerRef = useRef<AbortController | null>(null)
|
|
80
|
+
const clearUserMessages = useCallback((): void => {
|
|
81
|
+
messageControllerRef.current?.abort()
|
|
82
|
+
messageControllerRef.current = null
|
|
83
|
+
setExpandedHistory(null)
|
|
74
84
|
}, [])
|
|
75
85
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
searchIn: readonly L2PiSessionHistorySearchScope[] = DEFAULT_SEARCH_IN,
|
|
81
|
-
forceRefresh = false
|
|
82
|
-
): Promise<void> => {
|
|
83
|
-
const requestId = ++requestIdRef.current
|
|
84
|
-
abortControllerRef.current?.abort()
|
|
85
|
-
abortControllerRef.current = null
|
|
86
|
-
const normalizedQuery = query.trim()
|
|
87
|
-
const cached = cacheRef.current.get(cwd)
|
|
88
|
-
const cachedSessions =
|
|
89
|
-
isDefaultSearchIn(searchIn) && !normalizedQuery
|
|
90
|
-
? cached?.base
|
|
91
|
-
: cached?.recent?.query === normalizedQuery &&
|
|
92
|
-
cached.recent.searchIn.length === searchIn.length &&
|
|
93
|
-
cached.recent.searchIn.every((scope) => searchIn.includes(scope))
|
|
94
|
-
? cached.recent.sessions
|
|
95
|
-
: null
|
|
96
|
-
if (cachedSessions && !forceRefresh) {
|
|
97
|
-
setSessions(cachedSessions)
|
|
98
|
-
setLoading(false)
|
|
99
|
-
setError(null)
|
|
100
|
-
return
|
|
101
|
-
}
|
|
102
|
-
if (cachedSessions) setSessions(cachedSessions)
|
|
103
|
-
|
|
104
|
-
const controller = new AbortController()
|
|
105
|
-
abortControllerRef.current = controller
|
|
106
|
-
setLoading(true)
|
|
107
|
-
setError(null)
|
|
108
|
-
try {
|
|
109
|
-
const response = await workbenchBiz.listSessionHistory(
|
|
110
|
-
{ cwd, query: normalizedQuery, forceRefresh, searchIn: [...searchIn] },
|
|
111
|
-
controller.signal
|
|
112
|
-
)
|
|
113
|
-
if (requestIdRef.current !== requestId) return
|
|
114
|
-
const current = cacheRef.current.get(cwd) ?? { base: null, recent: null }
|
|
115
|
-
if (isDefaultSearchIn(searchIn) && !normalizedQuery) {
|
|
116
|
-
current.base = response.sessions
|
|
117
|
-
} else {
|
|
118
|
-
current.recent = {
|
|
119
|
-
query: normalizedQuery,
|
|
120
|
-
searchIn: [...searchIn],
|
|
121
|
-
sessions: response.sessions
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
cacheRef.current.delete(cwd)
|
|
125
|
-
cacheRef.current.set(cwd, current)
|
|
126
|
-
while (cacheRef.current.size > CACHE_CWD_LIMIT) {
|
|
127
|
-
const oldestCwd = cacheRef.current.keys().next().value
|
|
128
|
-
if (!oldestCwd) break
|
|
129
|
-
cacheRef.current.delete(oldestCwd)
|
|
130
|
-
}
|
|
131
|
-
setSessions(response.sessions)
|
|
132
|
-
} catch (cause) {
|
|
133
|
-
if (
|
|
134
|
-
requestIdRef.current !== requestId ||
|
|
135
|
-
(cause instanceof Error && cause.name === 'AbortError')
|
|
136
|
-
) {
|
|
137
|
-
return
|
|
138
|
-
}
|
|
139
|
-
setError(cause instanceof Error ? cause.message : t('historyFailed'))
|
|
140
|
-
} finally {
|
|
141
|
-
if (requestIdRef.current === requestId) {
|
|
142
|
-
if (abortControllerRef.current === controller) {
|
|
143
|
-
abortControllerRef.current = null
|
|
144
|
-
}
|
|
145
|
-
setLoading(false)
|
|
146
|
-
}
|
|
147
|
-
}
|
|
86
|
+
useLayoutEffect(
|
|
87
|
+
() => () => {
|
|
88
|
+
messageControllerRef.current?.abort()
|
|
89
|
+
messageControllerRef.current = null
|
|
148
90
|
},
|
|
149
|
-
[
|
|
91
|
+
[active, cwd, query, searchIn]
|
|
150
92
|
)
|
|
151
93
|
|
|
152
|
-
|
|
94
|
+
const loadUserMessages = async (
|
|
95
|
+
sessionId: string,
|
|
96
|
+
messageQuery: string,
|
|
97
|
+
pageIndex: number,
|
|
98
|
+
append: boolean
|
|
99
|
+
): Promise<void> => {
|
|
100
|
+
if (!active || !cwd) return
|
|
101
|
+
messageControllerRef.current?.abort()
|
|
102
|
+
const controller = new AbortController()
|
|
103
|
+
messageControllerRef.current = controller
|
|
104
|
+
setExpandedHistory((current) => ({
|
|
105
|
+
sessionId,
|
|
106
|
+
query: messageQuery,
|
|
107
|
+
messages: append && current?.sessionId === sessionId ? current.messages : [],
|
|
108
|
+
page: append && current?.sessionId === sessionId ? current.page : null,
|
|
109
|
+
loading: true,
|
|
110
|
+
error: null
|
|
111
|
+
}))
|
|
112
|
+
try {
|
|
113
|
+
const response = await listSessionUserMessages(
|
|
114
|
+
{ cwd, sessionId, query: messageQuery, page: { index: pageIndex, size: 20 } },
|
|
115
|
+
controller.signal
|
|
116
|
+
)
|
|
117
|
+
if (controller.signal.aborted) return
|
|
118
|
+
setExpandedHistory((current) => ({
|
|
119
|
+
sessionId,
|
|
120
|
+
query: messageQuery,
|
|
121
|
+
messages:
|
|
122
|
+
append && current?.sessionId === sessionId
|
|
123
|
+
? [...current.messages, ...response.messages]
|
|
124
|
+
: response.messages,
|
|
125
|
+
page: response.page,
|
|
126
|
+
loading: false,
|
|
127
|
+
error: null
|
|
128
|
+
}))
|
|
129
|
+
} catch (cause) {
|
|
130
|
+
if (controller.signal.aborted) return
|
|
131
|
+
setExpandedHistory((current) => ({
|
|
132
|
+
sessionId,
|
|
133
|
+
query: messageQuery,
|
|
134
|
+
messages: current?.sessionId === sessionId ? current.messages : [],
|
|
135
|
+
page: current?.sessionId === sessionId ? current.page : null,
|
|
136
|
+
loading: false,
|
|
137
|
+
error: cause instanceof Error ? cause.message : t('loadUserFailed')
|
|
138
|
+
}))
|
|
139
|
+
} finally {
|
|
140
|
+
if (messageControllerRef.current === controller) messageControllerRef.current = null
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const toggleUserMessages = (session: L2PiSessionHistoryResponse['sessions'][number]): void => {
|
|
145
|
+
if (expandedHistory?.sessionId === session.sessionId) {
|
|
146
|
+
clearUserMessages()
|
|
147
|
+
return
|
|
148
|
+
}
|
|
149
|
+
const messageQuery = session.matches?.some((match) => match.scope === 'user') ? query : ''
|
|
150
|
+
void loadUserMessages(session.sessionId, messageQuery, 1, false)
|
|
151
|
+
}
|
|
152
|
+
const refresh = (): void => {
|
|
153
|
+
clearUserMessages()
|
|
154
|
+
search.refresh()
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
sessions: search.data?.sessions ?? [],
|
|
158
|
+
loading: search.loading,
|
|
159
|
+
error: search.error,
|
|
160
|
+
refresh,
|
|
161
|
+
expandedHistory: active ? expandedHistory : null,
|
|
162
|
+
toggleUserMessages,
|
|
163
|
+
loadUserMessages
|
|
164
|
+
}
|
|
153
165
|
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react'
|
|
4
|
+
import type {
|
|
5
|
+
L3PiSessionSearchQuery,
|
|
6
|
+
L3PiSessionSearchScope
|
|
7
|
+
} from '@common/l3_modules/pi/l3-pi-session-search-contract'
|
|
8
|
+
|
|
9
|
+
export const L2_WORKBENCH_DEFAULT_SEARCH_IN: readonly L3PiSessionSearchScope[] = ['title', 'user']
|
|
10
|
+
|
|
11
|
+
export interface L2WorkbenchSessionSearchResult<T> {
|
|
12
|
+
data: T | null
|
|
13
|
+
loading: boolean
|
|
14
|
+
error: string | null
|
|
15
|
+
refresh: () => void
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function useL2WorkbenchSessionSearch<T>({
|
|
19
|
+
active,
|
|
20
|
+
scope,
|
|
21
|
+
query,
|
|
22
|
+
searchIn,
|
|
23
|
+
request,
|
|
24
|
+
failureMessage
|
|
25
|
+
}: {
|
|
26
|
+
active: boolean
|
|
27
|
+
scope: unknown
|
|
28
|
+
query: string
|
|
29
|
+
searchIn: readonly L3PiSessionSearchScope[]
|
|
30
|
+
request: (input: L3PiSessionSearchQuery, signal: AbortSignal, forceRefresh: boolean) => Promise<T>
|
|
31
|
+
failureMessage: string
|
|
32
|
+
}): L2WorkbenchSessionSearchResult<T> {
|
|
33
|
+
const [attempt, setAttempt] = useState(0)
|
|
34
|
+
const forceRefreshRef = useRef(false)
|
|
35
|
+
const normalizedQuery = query.trim()
|
|
36
|
+
const key = useMemo(
|
|
37
|
+
() => ({ active, scope, query: normalizedQuery, searchIn, request, attempt, failureMessage }),
|
|
38
|
+
[active, scope, normalizedQuery, searchIn, request, attempt, failureMessage]
|
|
39
|
+
)
|
|
40
|
+
const [state, setState] = useState<{
|
|
41
|
+
key: typeof key
|
|
42
|
+
data: T | null
|
|
43
|
+
loading: boolean
|
|
44
|
+
error: string | null
|
|
45
|
+
} | null>(null)
|
|
46
|
+
if (state?.key !== key) {
|
|
47
|
+
setState({ key, data: null, loading: key.active, error: null })
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
useLayoutEffect(() => {
|
|
51
|
+
const forceRefresh = forceRefreshRef.current
|
|
52
|
+
forceRefreshRef.current = false
|
|
53
|
+
if (!key.active) return
|
|
54
|
+
|
|
55
|
+
const controller = new AbortController()
|
|
56
|
+
const timer = window.setTimeout(
|
|
57
|
+
() => {
|
|
58
|
+
void request(
|
|
59
|
+
{ query: key.query, searchIn: [...key.searchIn] },
|
|
60
|
+
controller.signal,
|
|
61
|
+
forceRefresh
|
|
62
|
+
).then(
|
|
63
|
+
(data) => {
|
|
64
|
+
if (!controller.signal.aborted) setState({ key, data, loading: false, error: null })
|
|
65
|
+
},
|
|
66
|
+
(cause: unknown) => {
|
|
67
|
+
if (controller.signal.aborted) return
|
|
68
|
+
setState({
|
|
69
|
+
key,
|
|
70
|
+
data: null,
|
|
71
|
+
loading: false,
|
|
72
|
+
error: cause instanceof Error ? cause.message : key.failureMessage
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
)
|
|
76
|
+
},
|
|
77
|
+
key.query && !forceRefresh ? 300 : 0
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
return () => {
|
|
81
|
+
window.clearTimeout(timer)
|
|
82
|
+
controller.abort()
|
|
83
|
+
}
|
|
84
|
+
}, [key, request])
|
|
85
|
+
|
|
86
|
+
const refresh = useCallback((): void => {
|
|
87
|
+
forceRefreshRef.current = true
|
|
88
|
+
setAttempt((current) => current + 1)
|
|
89
|
+
}, [])
|
|
90
|
+
const current = state?.key === key ? state : null
|
|
91
|
+
return {
|
|
92
|
+
data: current?.data ?? null,
|
|
93
|
+
loading: active && (current?.loading ?? true),
|
|
94
|
+
error: current?.error ?? null,
|
|
95
|
+
refresh
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -77,6 +77,7 @@ interface L2WorkSessionColumnsProps
|
|
|
77
77
|
setChatCapabilityMode: L2WorkbenchBiz['setChatCapabilityMode']
|
|
78
78
|
branchPicker: L2WorkbenchBranchPickerModel | null
|
|
79
79
|
branchPendingWorkId: string | null
|
|
80
|
+
onResendMessage: (source: L2ChatSource, entryId: string) => void
|
|
80
81
|
fileRuntime: L2FileWorkspaceRuntime
|
|
81
82
|
onOpenFileSidebar: (workId: string) => void
|
|
82
83
|
onPreviewFile: (source: L2ChatSource, path: string) => void
|
|
@@ -148,6 +149,7 @@ interface WorkSessionColumnProps extends L2WorkbenchComposerSlots, L2WorkbenchPl
|
|
|
148
149
|
setChatCapabilityMode: L2WorkbenchBiz['setChatCapabilityMode']
|
|
149
150
|
branchPicker: L2WorkbenchBranchPickerModel | null
|
|
150
151
|
branchPending: boolean
|
|
152
|
+
onResendMessage: (source: L2ChatSource, entryId: string) => void
|
|
151
153
|
mobile: boolean
|
|
152
154
|
fileRuntime: L2FileWorkspaceRuntime
|
|
153
155
|
onOpenFileSidebar: (workId: string) => void
|
|
@@ -193,6 +195,7 @@ const WorkSessionColumn = memo(function WorkSessionColumn({
|
|
|
193
195
|
setChatCapabilityMode,
|
|
194
196
|
branchPicker,
|
|
195
197
|
branchPending,
|
|
198
|
+
onResendMessage,
|
|
196
199
|
mobile,
|
|
197
200
|
fileRuntime,
|
|
198
201
|
onOpenFileSidebar,
|
|
@@ -360,6 +363,8 @@ const WorkSessionColumn = memo(function WorkSessionColumn({
|
|
|
360
363
|
chatRuntime={chatRuntime}
|
|
361
364
|
inputRuntime={chatInputRuntime}
|
|
362
365
|
onPreviewFile={onPreviewFile}
|
|
366
|
+
onResend={onResendMessage}
|
|
367
|
+
resendDisabled={replacementDisabled || branchPending || branchPicker !== null}
|
|
363
368
|
/>
|
|
364
369
|
<footer className="bg-background pt-3" data-carousel-swipe-lock>
|
|
365
370
|
<L2WorkbenchChatComposer
|
|
@@ -516,6 +521,7 @@ export function L2WorkSessionColumns({
|
|
|
516
521
|
setChatCapabilityMode,
|
|
517
522
|
branchPicker,
|
|
518
523
|
branchPendingWorkId,
|
|
524
|
+
onResendMessage,
|
|
519
525
|
fileRuntime,
|
|
520
526
|
onOpenFileSidebar,
|
|
521
527
|
onPreviewFile,
|
|
@@ -705,6 +711,7 @@ export function L2WorkSessionColumns({
|
|
|
705
711
|
setChatCapabilityMode={setChatCapabilityMode}
|
|
706
712
|
branchPicker={branchPicker?.workId === workSession.workId ? branchPicker : null}
|
|
707
713
|
branchPending={branchPendingWorkId === workSession.workId}
|
|
714
|
+
onResendMessage={onResendMessage}
|
|
708
715
|
mobile
|
|
709
716
|
fileRuntime={fileRuntime}
|
|
710
717
|
onOpenFileSidebar={onOpenFileSidebar}
|
|
@@ -805,6 +812,7 @@ export function L2WorkSessionColumns({
|
|
|
805
812
|
setChatCapabilityMode={setChatCapabilityMode}
|
|
806
813
|
branchPicker={branchPicker?.workId === workSession.workId ? branchPicker : null}
|
|
807
814
|
branchPending={branchPendingWorkId === workSession.workId}
|
|
815
|
+
onResendMessage={onResendMessage}
|
|
808
816
|
mobile={mobile}
|
|
809
817
|
fileRuntime={fileRuntime}
|
|
810
818
|
onOpenFileSidebar={onOpenFileSidebar}
|