@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
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { POST } from '@server/l1_entry/api/l1-work-session-search-route'
|
|
@@ -2,7 +2,6 @@ import { Suspense } from 'react'
|
|
|
2
2
|
import type { Metadata } from 'next'
|
|
3
3
|
import { L1ProjectPreviewPage } from '@client/l1_entry/pages/l1-project-preview-page'
|
|
4
4
|
import { buildL2ProjectPreviewTitle } from '@common/l2_biz/project-preview/l2-project-preview-navigation'
|
|
5
|
-
import { getL4HostSettingsStore } from '@server/l4_foundation/l4-host-settings-store'
|
|
6
5
|
|
|
7
6
|
export async function generateMetadata({
|
|
8
7
|
searchParams
|
|
@@ -10,8 +9,7 @@ export async function generateMetadata({
|
|
|
10
9
|
searchParams: Promise<{ cwd?: string | string[] }>
|
|
11
10
|
}): Promise<Metadata> {
|
|
12
11
|
const { cwd } = await searchParams
|
|
13
|
-
|
|
14
|
-
return { title: buildL2ProjectPreviewTitle(Array.isArray(cwd) ? cwd[0] : cwd, region.locale) }
|
|
12
|
+
return { title: buildL2ProjectPreviewTitle(Array.isArray(cwd) ? cwd[0] : cwd) }
|
|
15
13
|
}
|
|
16
14
|
|
|
17
15
|
export default function ProjectPreview(): React.JSX.Element {
|
|
@@ -45,7 +45,6 @@ interface PreviewState extends Pick<L2ProjectPreviewOwner, 'files' | 'git' | 'hi
|
|
|
45
45
|
export function useL2ProjectPreview(
|
|
46
46
|
clientId: string,
|
|
47
47
|
cwd: string,
|
|
48
|
-
refreshOnFocus: boolean,
|
|
49
48
|
onUnauthorized?: () => void
|
|
50
49
|
): PreviewState {
|
|
51
50
|
const toast = useL4AppToast()
|
|
@@ -63,7 +62,7 @@ export function useL2ProjectPreview(
|
|
|
63
62
|
(text) => toast.show({ level: 'info', title: text }),
|
|
64
63
|
saved,
|
|
65
64
|
initialGlobal,
|
|
66
|
-
{ lazyHistory:
|
|
65
|
+
{ lazyHistory: true, onUnauthorized }
|
|
67
66
|
)
|
|
68
67
|
)
|
|
69
68
|
const { files, git, history } = owner
|
|
@@ -155,18 +154,6 @@ export function useL2ProjectPreview(
|
|
|
155
154
|
}
|
|
156
155
|
}, [cwd, files, git, owner])
|
|
157
156
|
|
|
158
|
-
useEffect(() => {
|
|
159
|
-
if (!refreshOnFocus) return
|
|
160
|
-
let lastFocus = Date.now()
|
|
161
|
-
const focus = (): void => {
|
|
162
|
-
if (Date.now() - lastFocus < 5000) return
|
|
163
|
-
lastFocus = Date.now()
|
|
164
|
-
void git.refreshSnapshot(cwd)
|
|
165
|
-
}
|
|
166
|
-
window.addEventListener('focus', focus)
|
|
167
|
-
return () => window.removeEventListener('focus', focus)
|
|
168
|
-
}, [cwd, git, refreshOnFocus])
|
|
169
|
-
|
|
170
157
|
useEffect(() => {
|
|
171
158
|
if (!container) return
|
|
172
159
|
const measure = (): void =>
|
|
@@ -33,7 +33,6 @@ const ignoreEscape = (): void => {}
|
|
|
33
33
|
export function L2ProjectPreview({
|
|
34
34
|
clientId,
|
|
35
35
|
cwd,
|
|
36
|
-
refreshOnFocus,
|
|
37
36
|
title,
|
|
38
37
|
actions,
|
|
39
38
|
onEscape = ignoreEscape,
|
|
@@ -41,7 +40,6 @@ export function L2ProjectPreview({
|
|
|
41
40
|
}: {
|
|
42
41
|
clientId: string
|
|
43
42
|
cwd: string
|
|
44
|
-
refreshOnFocus: boolean
|
|
45
43
|
title?: ReactNode
|
|
46
44
|
actions?: ReactNode
|
|
47
45
|
onEscape?: () => void
|
|
@@ -66,7 +64,7 @@ export function L2ProjectPreview({
|
|
|
66
64
|
changeRowHeight,
|
|
67
65
|
openGit,
|
|
68
66
|
refresh
|
|
69
|
-
} = useL2ProjectPreview(clientId, cwd,
|
|
67
|
+
} = useL2ProjectPreview(clientId, cwd, onUnauthorized)
|
|
70
68
|
const { directoryOpen, gitOpen, gitMaximized } = global
|
|
71
69
|
const projectName = cwd.replaceAll('\\', '/').split('/').filter(Boolean).at(-1) ?? cwd
|
|
72
70
|
const gitState = git.getWorkspace(cwd)!
|
|
@@ -88,7 +86,6 @@ export function L2ProjectPreview({
|
|
|
88
86
|
runtime={files}
|
|
89
87
|
gitRuntime={git}
|
|
90
88
|
compact={width < 1100}
|
|
91
|
-
refreshOnFocus={refreshOnFocus}
|
|
92
89
|
onEscape={onEscape}
|
|
93
90
|
renderHeader={(actions) => (
|
|
94
91
|
<L3ProjectFileTabs
|
|
@@ -2,7 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import { useId, useMemo, useRef, useState, type KeyboardEvent } from 'react'
|
|
4
4
|
import { useTranslation } from 'react-i18next'
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
CheckIcon,
|
|
7
|
+
ChevronDownIcon,
|
|
8
|
+
ChevronRightIcon,
|
|
9
|
+
ChevronsUpDownIcon,
|
|
10
|
+
FolderIcon,
|
|
11
|
+
FolderOpenIcon,
|
|
12
|
+
GitBranchIcon,
|
|
13
|
+
GitCommitHorizontalIcon
|
|
14
|
+
} from 'lucide-react'
|
|
6
15
|
import type { L4GitReadBranches } from '@common/l4_foundation/git/l4-git-history-contract'
|
|
7
16
|
import {
|
|
8
17
|
buildL3GitBranchTree,
|
|
@@ -239,8 +248,26 @@ export function L2ProjectBranchSelect({
|
|
|
239
248
|
className
|
|
240
249
|
)}
|
|
241
250
|
>
|
|
242
|
-
<span
|
|
243
|
-
{
|
|
251
|
+
<span
|
|
252
|
+
className={cn(
|
|
253
|
+
'flex min-w-0 flex-1 items-center gap-2',
|
|
254
|
+
!value && 'text-muted-foreground'
|
|
255
|
+
)}
|
|
256
|
+
>
|
|
257
|
+
{value === 'HEAD' ? (
|
|
258
|
+
<GitCommitHorizontalIcon
|
|
259
|
+
aria-hidden="true"
|
|
260
|
+
className="size-4 shrink-0 text-muted-foreground"
|
|
261
|
+
/>
|
|
262
|
+
) : (
|
|
263
|
+
<GitBranchIcon
|
|
264
|
+
aria-hidden="true"
|
|
265
|
+
className="size-4 shrink-0 text-muted-foreground"
|
|
266
|
+
/>
|
|
267
|
+
)}
|
|
268
|
+
<span className="min-w-0 truncate">
|
|
269
|
+
{selectedLabel || placeholder || common('selectPlaceholder')}
|
|
270
|
+
</span>
|
|
244
271
|
</span>
|
|
245
272
|
<ChevronsUpDownIcon className="text-muted-foreground" />
|
|
246
273
|
</Button>
|
|
@@ -282,6 +309,15 @@ export function L2ProjectBranchSelect({
|
|
|
282
309
|
{rows.map((row) => {
|
|
283
310
|
const selected = !row.expandable && row.key === value
|
|
284
311
|
const expandedRow = row.expandable ? expanded.has(row.key) : undefined
|
|
312
|
+
const RowIcon = row.expandable
|
|
313
|
+
? row.level === 1
|
|
314
|
+
? null
|
|
315
|
+
: expandedRow
|
|
316
|
+
? FolderOpenIcon
|
|
317
|
+
: FolderIcon
|
|
318
|
+
: row.key === 'HEAD'
|
|
319
|
+
? GitCommitHorizontalIcon
|
|
320
|
+
: GitBranchIcon
|
|
285
321
|
return (
|
|
286
322
|
<button
|
|
287
323
|
key={row.key}
|
|
@@ -325,6 +361,9 @@ export function L2ProjectBranchSelect({
|
|
|
325
361
|
) : (
|
|
326
362
|
<span aria-hidden="true" className="size-3.5 shrink-0" />
|
|
327
363
|
)}
|
|
364
|
+
{RowIcon ? (
|
|
365
|
+
<RowIcon aria-hidden="true" className="size-4 shrink-0 text-muted-foreground" />
|
|
366
|
+
) : null}
|
|
328
367
|
<span className="min-w-0 flex-1 break-all">{row.label}</span>
|
|
329
368
|
{selected ? <CheckIcon aria-hidden="true" className="size-3.5 shrink-0" /> : null}
|
|
330
369
|
</button>
|
|
@@ -147,11 +147,11 @@ export class L2GitWorkspaceRuntime {
|
|
|
147
147
|
if (workspace.snapshot.status === 'ready' || workspace.snapshot.status === 'loading') {
|
|
148
148
|
return Promise.resolve()
|
|
149
149
|
}
|
|
150
|
-
return this.loadSnapshot(cwd
|
|
150
|
+
return this.loadSnapshot(cwd)
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
refreshSnapshot(cwd: string): Promise<void> {
|
|
154
|
-
return this.loadSnapshot(cwd
|
|
154
|
+
return this.loadSnapshot(cwd)
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
async refreshHeads(cwd: string): Promise<void> {
|
|
@@ -332,9 +332,9 @@ export class L2GitWorkspaceRuntime {
|
|
|
332
332
|
this.listeners.clear()
|
|
333
333
|
}
|
|
334
334
|
|
|
335
|
-
private async loadSnapshot(cwd: string
|
|
335
|
+
private async loadSnapshot(cwd: string): Promise<void> {
|
|
336
336
|
const workspace = this.workspaceFor(cwd)
|
|
337
|
-
if (workspace.snapshotRequest
|
|
337
|
+
if (workspace.snapshotRequest) return
|
|
338
338
|
const project = this.projectRefs.get(cwd)
|
|
339
339
|
if (!project) {
|
|
340
340
|
workspace.snapshot = {
|
|
@@ -346,16 +346,17 @@ export class L2GitWorkspaceRuntime {
|
|
|
346
346
|
return
|
|
347
347
|
}
|
|
348
348
|
|
|
349
|
-
workspace.snapshotRequest?.controller.abort()
|
|
350
349
|
const controller = new AbortController()
|
|
351
350
|
const token = {}
|
|
352
351
|
workspace.snapshotRequest = { controller, token }
|
|
353
|
-
workspace.snapshot
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
352
|
+
if (workspace.snapshot.status !== 'ready') {
|
|
353
|
+
workspace.snapshot = {
|
|
354
|
+
status: 'loading',
|
|
355
|
+
repositories: workspace.snapshot.repositories,
|
|
356
|
+
error: null
|
|
357
|
+
}
|
|
358
|
+
this.publish()
|
|
357
359
|
}
|
|
358
|
-
this.publish()
|
|
359
360
|
|
|
360
361
|
try {
|
|
361
362
|
const result = await this.biz.get({ workId: project.workId, cwd }, controller.signal)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useCallback, useState } from 'react'
|
|
4
|
+
import { useTranslation } from 'react-i18next'
|
|
5
|
+
import type { L2WorkSessionListItem } from '@common/l2_biz/work-session/l2-work-session-contract'
|
|
6
|
+
import type { L2WorkSessionSearchResponse } from '@common/l2_biz/work-session/l2-work-session-search-contract'
|
|
7
|
+
import type {
|
|
8
|
+
L3PiSessionSearchQuery,
|
|
9
|
+
L3PiSessionSearchScope
|
|
10
|
+
} from '@common/l3_modules/pi/l3-pi-session-search-contract'
|
|
11
|
+
import type { L2WorkbenchBiz } from '../l2-workbench-biz'
|
|
12
|
+
import {
|
|
13
|
+
L2_WORKBENCH_DEFAULT_SEARCH_IN,
|
|
14
|
+
useL2WorkbenchSessionSearch,
|
|
15
|
+
type L2WorkbenchSessionSearchResult
|
|
16
|
+
} from './l2-workbench-session-search'
|
|
17
|
+
|
|
18
|
+
export interface L2WorkSessionSearch extends L2WorkbenchSessionSearchResult<L2WorkSessionSearchResponse> {
|
|
19
|
+
query: string
|
|
20
|
+
searchIn: readonly L3PiSessionSearchScope[]
|
|
21
|
+
setQuery: (query: string) => void
|
|
22
|
+
setSearchIn: (searchIn: readonly L3PiSessionSearchScope[]) => void
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function useL2WorkSessionSearch({
|
|
26
|
+
active,
|
|
27
|
+
workSessions,
|
|
28
|
+
searchWorkSessions
|
|
29
|
+
}: {
|
|
30
|
+
active: boolean
|
|
31
|
+
workSessions: readonly L2WorkSessionListItem[]
|
|
32
|
+
searchWorkSessions: L2WorkbenchBiz['searchWorkSessions']
|
|
33
|
+
}): L2WorkSessionSearch {
|
|
34
|
+
const { t } = useTranslation('workbench')
|
|
35
|
+
const [query, setQuery] = useState('')
|
|
36
|
+
const [searchIn, setSearchIn] = useState<readonly L3PiSessionSearchScope[]>(
|
|
37
|
+
L2_WORKBENCH_DEFAULT_SEARCH_IN
|
|
38
|
+
)
|
|
39
|
+
const request = useCallback(
|
|
40
|
+
(input: L3PiSessionSearchQuery, signal: AbortSignal) => searchWorkSessions(input, signal),
|
|
41
|
+
[searchWorkSessions]
|
|
42
|
+
)
|
|
43
|
+
const search = useL2WorkbenchSessionSearch({
|
|
44
|
+
active: active && query.trim().length > 0,
|
|
45
|
+
scope: workSessions,
|
|
46
|
+
query,
|
|
47
|
+
searchIn,
|
|
48
|
+
request,
|
|
49
|
+
failureMessage: t('sessionSearchFailed')
|
|
50
|
+
})
|
|
51
|
+
return { ...search, query, searchIn, setQuery, setSearchIn }
|
|
52
|
+
}
|
|
@@ -23,7 +23,10 @@ interface L2WorkbenchBranchPickerSource {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
export type L2WorkbenchBranchIntent =
|
|
26
|
-
|
|
26
|
+
| { action: 'tree'; entryId: string }
|
|
27
|
+
| { action: 'fork'; entryId: string }
|
|
28
|
+
| { action: 'resend'; entryId: string }
|
|
29
|
+
| { action: 'clone' }
|
|
27
30
|
|
|
28
31
|
interface L2WorkbenchRunningConfirmation {
|
|
29
32
|
intent: L2WorkbenchBranchIntent
|
|
@@ -57,6 +60,7 @@ interface UseL2WorkbenchBranchPickerResult {
|
|
|
57
60
|
selectEntry: (entryId: string) => void
|
|
58
61
|
requestAction: (entryId: string, action: 'tree' | 'fork') => void
|
|
59
62
|
clone: (workId: string) => void
|
|
63
|
+
resend: (source: L2WorkbenchBranchPickerSource, entryId: string) => void
|
|
60
64
|
confirmRunning: () => void
|
|
61
65
|
cancelRunning: () => void
|
|
62
66
|
pendingWorkId: string | null
|
|
@@ -92,6 +96,8 @@ function branchRequest(
|
|
|
92
96
|
return { ...binding, action: 'tree', entryId: intent.entryId }
|
|
93
97
|
case 'fork':
|
|
94
98
|
return { ...binding, action: 'fork', entryId: intent.entryId }
|
|
99
|
+
case 'resend':
|
|
100
|
+
return { ...binding, action: 'resend', entryId: intent.entryId }
|
|
95
101
|
case 'clone':
|
|
96
102
|
return { ...binding, action: 'clone' }
|
|
97
103
|
}
|
|
@@ -123,6 +129,7 @@ export function useL2WorkbenchBranchPicker({
|
|
|
123
129
|
const detailAbortControllerRef = useRef<AbortController | null>(null)
|
|
124
130
|
const detailCacheRef = useRef(new Map<string, L2WorkSessionTreeEntryGetResponse>())
|
|
125
131
|
const operationStartRef = useRef<string | null>(null)
|
|
132
|
+
const executingRef = useRef(false)
|
|
126
133
|
|
|
127
134
|
const resetPicker = useCallback((): void => {
|
|
128
135
|
treeRequestIdRef.current += 1
|
|
@@ -270,12 +277,18 @@ export function useL2WorkbenchBranchPicker({
|
|
|
270
277
|
operationSource: L2WorkbenchBranchPickerSource,
|
|
271
278
|
intent: L2WorkbenchBranchIntent
|
|
272
279
|
): Promise<void> => {
|
|
273
|
-
if (disabled) return
|
|
280
|
+
if (disabled || executingRef.current) return
|
|
281
|
+
executingRef.current = true
|
|
282
|
+
let releaseDraft: (() => void) | undefined
|
|
274
283
|
const preservedTreeText =
|
|
275
284
|
intent.action === 'tree' ? chatInputRuntime.getState(operationSource).text : null
|
|
276
285
|
setOperation({ source: operationSource, intent, phase: 'executing' })
|
|
277
286
|
setError(null)
|
|
278
287
|
try {
|
|
288
|
+
if (intent.action === 'resend') {
|
|
289
|
+
await chatInputRuntime.loadSource(operationSource)
|
|
290
|
+
releaseDraft = chatInputRuntime.preserveDraftOnBranch(operationSource)
|
|
291
|
+
}
|
|
279
292
|
const response = await workbenchBiz.branchWorkSession(
|
|
280
293
|
branchRequest(operationSource, intent)
|
|
281
294
|
)
|
|
@@ -290,7 +303,9 @@ export function useL2WorkbenchBranchPicker({
|
|
|
290
303
|
if (!target) throw new Error(l2WorkbenchText('branchTargetMissing'))
|
|
291
304
|
|
|
292
305
|
const targetSource = sourceFor(target)
|
|
293
|
-
if (intent.action === '
|
|
306
|
+
if (intent.action === 'resend') {
|
|
307
|
+
focusWorkSession(target.workId)
|
|
308
|
+
} else if (intent.action === 'tree') {
|
|
294
309
|
focusWorkSession(target.workId)
|
|
295
310
|
await chatInputRuntime.loadSource(targetSource)
|
|
296
311
|
chatInputRuntime.setText(
|
|
@@ -312,6 +327,9 @@ export function useL2WorkbenchBranchPicker({
|
|
|
312
327
|
operationStartRef.current = null
|
|
313
328
|
setConfirmation((current) => (current ? { ...current, waiting: false } : null))
|
|
314
329
|
reportOperationError(errorMessage(cause, l2WorkbenchText('branchOperationFailed')))
|
|
330
|
+
} finally {
|
|
331
|
+
releaseDraft?.()
|
|
332
|
+
executingRef.current = false
|
|
315
333
|
}
|
|
316
334
|
},
|
|
317
335
|
[
|
|
@@ -347,7 +365,7 @@ export function useL2WorkbenchBranchPicker({
|
|
|
347
365
|
|
|
348
366
|
const requestIntent = useCallback(
|
|
349
367
|
(operationSource: L2WorkbenchBranchPickerSource, intent: L2WorkbenchBranchIntent): void => {
|
|
350
|
-
if (disabled || operation) return
|
|
368
|
+
if (disabled || operation || confirmation || executingRef.current) return
|
|
351
369
|
operationStartRef.current = null
|
|
352
370
|
const current = workSessions.find(
|
|
353
371
|
(workSession) => workSession.workId === operationSource.workId
|
|
@@ -374,7 +392,16 @@ export function useL2WorkbenchBranchPicker({
|
|
|
374
392
|
setSource(operationSource)
|
|
375
393
|
setError(null)
|
|
376
394
|
},
|
|
377
|
-
[
|
|
395
|
+
[
|
|
396
|
+
confirmation,
|
|
397
|
+
disabled,
|
|
398
|
+
execute,
|
|
399
|
+
mobile,
|
|
400
|
+
operation,
|
|
401
|
+
reportOperationError,
|
|
402
|
+
startAfterRunning,
|
|
403
|
+
workSessions
|
|
404
|
+
]
|
|
378
405
|
)
|
|
379
406
|
|
|
380
407
|
const requestAction = useCallback(
|
|
@@ -385,6 +412,13 @@ export function useL2WorkbenchBranchPicker({
|
|
|
385
412
|
[requestIntent, source]
|
|
386
413
|
)
|
|
387
414
|
|
|
415
|
+
const resend = useCallback(
|
|
416
|
+
(messageSource: L2WorkbenchBranchPickerSource, entryId: string): void => {
|
|
417
|
+
requestIntent(messageSource, { action: 'resend', entryId })
|
|
418
|
+
},
|
|
419
|
+
[requestIntent]
|
|
420
|
+
)
|
|
421
|
+
|
|
388
422
|
const clone = useCallback(
|
|
389
423
|
(workId: string): void => {
|
|
390
424
|
const current = workSessions.find((workSession) => workSession.workId === workId)
|
|
@@ -422,9 +456,9 @@ export function useL2WorkbenchBranchPicker({
|
|
|
422
456
|
|
|
423
457
|
const cancelRunning = useCallback((): void => {
|
|
424
458
|
if (confirmation?.waiting || operation) return
|
|
425
|
-
const
|
|
459
|
+
const confirmationOnly = tree === null
|
|
426
460
|
setConfirmation(null)
|
|
427
|
-
if (
|
|
461
|
+
if (confirmationOnly) resetPicker()
|
|
428
462
|
}, [confirmation, operation, resetPicker, tree])
|
|
429
463
|
|
|
430
464
|
useEffect(() => {
|
|
@@ -531,6 +565,7 @@ export function useL2WorkbenchBranchPicker({
|
|
|
531
565
|
selectEntry,
|
|
532
566
|
requestAction,
|
|
533
567
|
clone,
|
|
568
|
+
resend,
|
|
534
569
|
confirmRunning,
|
|
535
570
|
cancelRunning,
|
|
536
571
|
pendingWorkId: operation?.source.workId ?? null
|