@lyhue1991/dsh-soup 0.4.4 → 0.4.6

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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/client/index.ts", "../src/client/i18n.ts", "../src/client/plugin.ts"],
4
+ "sourcesContent": ["/**\n * dsh-soup \u2014 \u6D4F\u89C8\u5668\u534A\u533A\u5165\u53E3\u3002\n * esbuild \u628A\u6B64\u6587\u4EF6\u6253\u5305\u6210 lib/client.js\uFF08CJS + ModuleLoader wrapper\uFF09\u3002\n * React \u548C @deepseek-ai/* \u662F external\u2014\u2014\u8FD0\u884C\u65F6\u7531 DSH \u5BBF\u4E3B require \u6CE8\u5165\u3002\n */\n\n// plugin.ts \u7528 require() \u5F15\u5165 react \u548C @deepseek-ai/*\uFF08esbuild external\uFF09\nimport { apply, inject } from './plugin.js'\n\nexport { apply, inject }\n", "/**\n * i18n \u53CC\u8BED\u8BCD\u5178\uFF1Azh/en \u5168\u90E8\u6587\u6848\u3002\n * NS \u6CE8\u518C\u5230 ctx.locale\uFF1BT() \u5728 store.ts \u4E2D\u5B9A\u4E49\uFF08\u53EF\u53D8\u7ED1\u5B9A\uFF09\u3002\n */\nexport const NS = 'dsh-soup'\n\nexport const DICT = {\n zh: {\n 'explorer.title': '\uD83D\uDCC1 \u8D44\u6E90\u7BA1\u7406\u5668',\n 'explorer.label': '\u8D44\u6E90\u7BA1\u7406\u5668',\n 'explorer.refresh': '\u5237\u65B0',\n 'explorer.refreshTitle': '\u5237\u65B0\uFF08\u4FDD\u6301\u5DF2\u5C55\u5F00\u76EE\u5F55\uFF09',\n 'explorer.upload': '\u4E0A\u4F20\u6587\u4EF6',\n 'explorer.close': '\u5173\u95ED',\n 'explorer.closePanel': '\u5173\u95ED\u8D44\u6E90\u7BA1\u7406\u5668',\n 'explorer.emptyDir': '\uFF08\u7A7A\u76EE\u5F55\uFF09',\n 'explorer.bulkSelected': '\u5DF2\u9009 {n} \u9879 \u00B7 \u62D6\u5230\u6587\u4EF6\u5939\u53EF\u79FB\u52A8',\n 'explorer.readFail': '\u8BFB\u53D6\u5931\u8D25',\n 'explorer.actionFail': '\u5931\u8D25',\n 'explorer.uploading': '\u4E0A\u4F20\u4E2D ',\n 'explorer.downloading': '\u4E0B\u8F7D\u4E2D ',\n 'explorer.uploaded': '\u5DF2\u4E0A\u4F20 {n} \u4E2A\u6587\u4EF6',\n 'explorer.filesCount': '{n} \u4E2A\u6587\u4EF6',\n 'explorer.filesCountPartial': '{ok}/{total} \u4E2A\u6587\u4EF6',\n 'explorer.downloaded': '\u5DF2\u4E0B\u8F7D {n} \u4E2A\u6587\u4EF6',\n 'explorer.uploadFail': '\u4E0A\u4F20\u5931\u8D25',\n 'explorer.downloadFail': '\u4E0B\u8F7D\u5931\u8D25',\n 'explorer.downloadFailWith': '\u4E0B\u8F7D\u5931\u8D25: {reason}',\n 'explorer.downloadStart': '\u5DF2\u5F00\u59CB\u4E0B\u8F7D {name}\uFF08\u5927\u6587\u4EF6\uFF0C\u7531\u6D4F\u89C8\u5668\u63A5\u7BA1\uFF09',\n 'explorer.renamed': '\u5DF2\u590D\u5236\u8DEF\u5F84',\n 'explorer.renameFail': '\u91CD\u547D\u540D\u5931\u8D25',\n 'explorer.createFail': '\u521B\u5EFA\u5931\u8D25',\n 'explorer.moveIntoSelf': '\u4E0D\u80FD\u628A\u6587\u4EF6\u5939\u79FB\u5165\u81EA\u8EAB: {path}',\n 'explorer.hostUnreachable': '\u5BBF\u4E3B\u4E0D\u53EF\u8FBE: {reason}',\n 'explorer.hostBadResponse': '\u5BBF\u4E3B\u54CD\u5E94\u89E3\u6790\u5931\u8D25',\n 'menu.preview': '\uD83D\uDC41 \u9884\u89C8',\n 'menu.open': '\uD83D\uDDA5 \u7528\u7CFB\u7EDF\u6253\u5F00',\n 'menu.rename': '\u270E \u91CD\u547D\u540D',\n 'menu.trash': '\uD83D\uDDD1 \u79FB\u5230\u5E9F\u7EB8\u7BD3',\n 'menu.trashMulti': '\uD83D\uDDD1 \u79FB\u5230\u5E9F\u7EB8\u7BD3 ({n} \u9879)',\n 'menu.newFile': '\uD83D\uDCC4 \u65B0\u5EFA\u6587\u4EF6',\n 'menu.newFolder': '\uD83D\uDCC1 \u65B0\u5EFA\u6587\u4EF6\u5939',\n 'menu.copyPath': '\u29C9 \u590D\u5236\u8DEF\u5F84',\n 'menu.download': '\u2B07 \u4E0B\u8F7D',\n 'menu.deselect': '\u53D6\u6D88\u9009\u62E9',\n 'files.tab': '\u9884\u89C8',\n 'files.emptyHint': '\u5728\u53F3\u4FA7\u8D44\u6E90\u7BA1\u7406\u5668\u4E2D\u53CC\u51FB\u6216\u53F3\u952E\u300C\u9884\u89C8\u300D\u6587\u4EF6',\n 'files.loading': '\u52A0\u8F7D\u4E2D\u2026',\n 'files.readFail': '\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25',\n 'files.reload': '\u91CD\u8F7D',\n 'files.reloadTitle': '\u4ECE\u78C1\u76D8\u91CD\u65B0\u8BFB\u53D6\uFF08\u5237\u65B0\u9884\u89C8\uFF09',\n 'files.binary': '\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF08{size}\uFF09\uFF0C\u8BF7\u5728\u8D44\u6E90\u7BA1\u7406\u5668\u4E2D\u7528\u7CFB\u7EDF\u6253\u5F00',\n 'files.imageTooLarge': '\u56FE\u7247\u8FC7\u5927\uFF08{size}\uFF0C\u4E0A\u9650 {limit}\uFF09',\n 'files.pdfTooLarge': 'PDF \u8FC7\u5927\uFF08{size}\uFF0C\u4E0A\u9650 {limit}\uFF09\uFF0C\u8BF7\u7528\u7CFB\u7EDF\u6253\u5F00',\n 'files.truncated': '\u6587\u4EF6\u8D85\u8FC7 8 MB\uFF0C\u4EC5\u9884\u89C8\u524D 8 MB\uFF1B\u5B8C\u6574\u5185\u5BB9\u8BF7\u7528\u7CFB\u7EDF\u7F16\u8F91\u5668\u6253\u5F00\u3002',\n 'files.jsonFail': 'JSON \u89E3\u6790\u5931\u8D25\uFF0C\u6309\u7EAF\u6587\u672C\u663E\u793A',\n 'files.nbFail': 'ipynb \u89E3\u6790\u5931\u8D25\uFF0C\u6309\u7EAF\u6587\u672C\u663E\u793A',\n 'files.nbEmpty': '\uFF08\u7A7A\u7B14\u8BB0\u672C\uFF09',\n 'files.nbCells': '\u5171 {n} \u4E2A\u5355\u5143\u683C',\n 'files.csvTruncated': '\u5171 {total} \u884C\uFF0C\u4EC5\u9884\u89C8\u524D {n} \u884C',\n 'files.htmlFrame': 'HTML \u9884\u89C8',\n 'files.pdfFrame': 'PDF \u9884\u89C8',\n 'files.pdfLoading': 'PDF \u52A0\u8F7D\u4E2D\u2026',\n 'files.pdfFail': 'PDF \u9884\u89C8\u5931\u8D25: {reason}',\n 'files.pdfUnsupported': '\u5F53\u524D\u6D4F\u89C8\u5668\u65E0\u6CD5\u5185\u5D4C\u9884\u89C8 PDF\uFF0C\u8BF7\u53F3\u952E\u7528\u7CFB\u7EDF\u6253\u5F00\u3002',\n 'files.nbHtmlOut': 'HTML \u8F93\u51FA',\n 'speed.label': '\u901F\u5EA6\u5FBD\u6807',\n 'speed.waiting': '\u6B63\u5728\u7B49\u5F85\u6A21\u578B',\n 'speed.operateFail': '\u64CD\u4F5C\u5931\u8D25',\n },\n en: {\n 'explorer.title': '\uD83D\uDCC1 Explorer',\n 'explorer.label': 'Explorer',\n 'explorer.refresh': 'Refresh',\n 'explorer.refreshTitle': 'Refresh (keeps expanded folders)',\n 'explorer.upload': 'Upload files',\n 'explorer.close': 'Close',\n 'explorer.closePanel': 'Close explorer',\n 'explorer.emptyDir': '(empty)',\n 'explorer.bulkSelected': '{n} selected \u00B7 drag onto a folder to move',\n 'explorer.readFail': 'Failed to read',\n 'explorer.actionFail': 'Failed',\n 'explorer.uploading': 'Uploading ',\n 'explorer.downloading': 'Downloading ',\n 'explorer.uploaded': 'Uploaded {n} file(s)',\n 'explorer.filesCount': '{n} file(s)',\n 'explorer.filesCountPartial': '{ok}/{total} file(s)',\n 'explorer.downloaded': 'Downloaded {n} file(s)',\n 'explorer.uploadFail': 'Upload failed',\n 'explorer.downloadFail': 'Download failed',\n 'explorer.downloadFailWith': 'Download failed: {reason}',\n 'explorer.downloadStart': 'Downloading {name} (large file, handled by the browser)',\n 'explorer.renamed': 'Path copied',\n 'explorer.renameFail': 'Rename failed',\n 'explorer.createFail': 'Create failed',\n 'explorer.moveIntoSelf': 'Cannot move a folder into itself: {path}',\n 'explorer.hostUnreachable': 'Host unreachable: {reason}',\n 'explorer.hostBadResponse': 'Failed to parse host response',\n 'menu.preview': '\uD83D\uDC41 Preview',\n 'menu.open': '\uD83D\uDDA5 Open with system',\n 'menu.rename': '\u270E Rename',\n 'menu.trash': '\uD83D\uDDD1 Move to trash',\n 'menu.trashMulti': '\uD83D\uDDD1 Move to trash ({n})',\n 'menu.newFile': '\uD83D\uDCC4 New file',\n 'menu.newFolder': '\uD83D\uDCC1 New folder',\n 'menu.copyPath': '\u29C9 Copy path',\n 'menu.download': '\u2B07 Download',\n 'menu.deselect': 'Clear selection',\n 'files.tab': 'Preview',\n 'files.emptyHint': 'Double-click a file (or right-click \u2192 Preview) in the explorer',\n 'files.loading': 'Loading\u2026',\n 'files.readFail': 'Failed to read file',\n 'files.reload': 'Reload',\n 'files.reloadTitle': 'Re-read from disk (refresh preview)',\n 'files.binary': 'Binary file ({size}) \u2014 open with the system explorer',\n 'files.imageTooLarge': 'Image too large ({size}, limit {limit})',\n 'files.pdfTooLarge': 'PDF too large ({size}, limit {limit}) \u2014 open with the system viewer',\n 'files.truncated': 'File exceeds 8 MB \u2014 showing the first 8 MB; open in a system editor for the full content.',\n 'files.jsonFail': 'JSON parse failed \u2014 shown as plain text',\n 'files.nbFail': 'ipynb parse failed \u2014 shown as plain text',\n 'files.nbEmpty': '(empty notebook)',\n 'files.nbCells': '{n} cells',\n 'files.csvTruncated': '{total} rows \u2014 showing the first {n}',\n 'files.htmlFrame': 'HTML preview',\n 'files.pdfFrame': 'PDF preview',\n 'files.pdfLoading': 'Loading PDF\u2026',\n 'files.pdfFail': 'PDF preview failed: {reason}',\n 'files.pdfUnsupported': 'This browser cannot embed PDF previews \u2014 right-click and open with the system viewer.',\n 'files.nbHtmlOut': 'HTML output',\n 'speed.label': 'Speed badge',\n 'speed.waiting': 'Waiting for the model',\n 'speed.operateFail': 'Action failed',\n },\n}\n", "/**\n * dsh-soup \u2014 \u6D4F\u89C8\u5668\u534A\u533A\uFF1A\u9879\u76EE\u8D44\u6E90\u7BA1\u7406\u5668\u3002\n *\n * \u5E03\u5C40\uFF1A\u6CE8\u518C\u8FDB shell \u539F\u751F\u7684 `details` \u53F3\u5217\uFF08\u5E76\u5217\u7F51\u683C\uFF0C\u975E\u60AC\u6D6E\uFF09\uFF0C\n * \u6709 Session log \u65F6\u5728\u5B83\u53F3\u4FA7\u653E \uD83D\uDCC1\uFF1B\u7A7A\u767D\u65B0\u4F1A\u8BDD\u5219\u5728\u8F93\u5165\u6846\u4E0A\u65B9\u3001\n * workspace/preset \u63A7\u4EF6\u884C\u7684\u53F3\u7AEF\u63D0\u4F9B\u540C\u4E00\u5165\u53E3\u3002\n * \u5BBD\u5EA6\u4E0E\u5DE6\u4FA7\u5DE5\u4F5C\u533A\u4E00\u81F4\uFF1A\u9ED8\u8BA4 280px\u3001\u53EF\u62D6 264\u2013420px\u3002\n *\n * \u4E0E\u5BBF\u4E3B\u901A\u4FE1\uFF1A\u8D70\u540C\u6E90 HTTP \u8DEF\u7531 `/api/dsh-soup`\uFF08POST JSON\uFF09\u3002\n * \u6587\u4EF6\u300C\u9884\u89C8\u300D\u4E3A\u53EA\u8BFB\u5C55\u793A\uFF1Amarkdown/html/json/csv \u6709\u4E13\u5C5E\u6E32\u67D3\u5668\uFF0C\u56FE\u7247\u9884\u89C8\uFF0C\n * \u5176\u4F59\u6309\u7EAF\u6587\u672C\uFF1B\u4E0D\u63D0\u4F9B\u7F16\u8F91\u4E0E\u4FDD\u5B58\u3002\n */\n\n// esbuild \u628A react \u548C @deepseek-ai/* \u6807\u8BB0\u4E3A external\uFF0C\u8FD0\u884C\u65F6\u7531 DSH \u5BBF\u4E3B require \u6CE8\u5165\nconst React = require('react')\n// \u6837\u5F0F\uFF1A\u4E00\u6B21\u6027\u6CE8\u5165 <style data-plugin>\uFF08\u4E0E\u5B98\u65B9\u63D2\u4EF6 css \u5185\u8054\u7EA6\u5B9A\u4E00\u81F4\uFF09\n// ------------------------------------------------------------------\n\n// \u6837\u5F0F\u548C i18n \u5DF2\u63D0\u53D6\u5230\u72EC\u7ACB\u6A21\u5757\nimport { injectStyles } from './styles.js'\nimport { NS, DICT } from './i18n.js'\nexport { inject }\n/** \u6A21\u5757\u7EA7\u7FFB\u8BD1\u51FD\u6570\uFF08apply \u91CC\u7531 ctx.locale.bind \u586B\u5145\uFF09\u3002 */\nvar T = function (key, params) { return key }\n\n// ------------------------------------------------------------------\n// \u72B6\u6001\u5B58\u50A8\uFF08\u6A21\u5757\u7EA7\uFF0C\u4F9B Panel \u4E0E HeaderAction \u5171\u4EAB\uFF09\n// ------------------------------------------------------------------\nvar state = {\n open: false, cwd: '', tree: [], menu: null, error: '', notice: '',\n selected: new Set(), lastIndex: null,\n renaming: null, newItem: null,\n dropTarget: null, dragPaths: null,\n files: { list: [], active: null, overlay: false, overlayMax: false, overlayReturn: null },\n uploads: [],\n}\nvar listeners = new Set()\nfunction setState(patch) {\n state = Object.assign({}, state, patch)\n listeners.forEach(function (fn) { fn() })\n}\nfunction subscribe(fn) {\n listeners.add(fn)\n return function () { listeners.delete(fn) }\n}\nfunction useStore() {\n var force = React.useReducer(function (x) { return x + 1 }, 0)[1]\n React.useEffect(function () { return subscribe(function () { force() }) }, [])\n return state\n}\n\n// ------------------------------------------------------------------\n// \u2593\u2593 \u533A\u57DF\u4E00 \u00B7 \u8D44\u6E90\u7BA1\u7406\u5668 \u00B7 \uD83E\uDDC5 \u8471\uFF08\u5171\u4EAB\u6570\u636E\u5C42\uFF09\n// \u5171\u4EAB store\u3001/api/dsh-soup RPC\u3001\u6811\u6570\u636E\u52A0\u8F7D/\u81EA\u52A8\u5237\u65B0\u3001selection\u3001\u62D6\u62FD/\u4E0A\u4F20/\u4E0B\u8F7D\u3001\u7C7B\u578B\u56FE\u6807 \u2014\u2014 \u9884\u89C8\u4EA6\u590D\u7528\u5176\u4E2D store/rpc\u3002\n// ------------------------------------------------------------------\nvar visibleRows = []\nvar uploadInputEl = null\nvar layout = null\n\nvar DETAILS_MIN = 264\nvar DETAILS_MAX = 420\nvar DETAILS_DEFAULT = 280\nfunction clampW(w) { return Math.max(DETAILS_MIN, Math.min(DETAILS_MAX, w)) }\n\nfunction pathJoin(dir, name) { return String(dir || '/').replace(/\\/+$/, '') + '/' + name }\nfunction parentOf(path) {\n var p = String(path || '/').replace(/\\/+$/, '')\n var i = p.lastIndexOf('/')\n return i <= 0 ? '/' : p.slice(0, i)\n}\nfunction baseName(path) {\n var p = String(path || '').replace(/\\/+$/, '')\n var i = p.lastIndexOf('/')\n return i < 0 ? p : p.slice(i + 1)\n}\n\n// ------------------------------------------------------------------\n// \u4E0E\u5BBF\u4E3B\u901A\u4FE1\uFF1APOST /api/dsh-soup\n// ------------------------------------------------------------------\nfunction hostBase() {\n var origin = globalThis.location && globalThis.location.origin\n return origin !== undefined && origin !== 'null' && origin !== '' ? origin : 'http://dsh.internal'\n}\nfunction rpc(action, args) {\n return fetch(new URL('/api/dsh-soup', hostBase()), {\n method: 'POST',\n // x-dsh-soup\uFF1A\u5BBF\u4E3B\u8DEF\u7531\u7684\u5F3A\u5236\u5934\uFF08\u9632\u8DE8\u7AD9\u7B80\u5355\u8BF7\u6C42\u4F2A\u9020\uFF09\uFF0C\n // content-type \u5FC5\u987B application/json\uFF0C\u4E24\u8005\u7F3A\u4E00\u4F1A\u88AB 403\u3002\n headers: { 'content-type': 'application/json', 'x-dsh-soup': '1' },\n body: JSON.stringify({ action: action, args: args || {} }),\n }).then(function (res) {\n return res.json().catch(function () { return { ok: false, error: T('explorer.hostBadResponse') } })\n }).catch(function (err) {\n return { ok: false, error: T('explorer.hostUnreachable', { reason: String((err && err.message) || err) }) }\n })\n}\n\nasync function loadDir(path, attempt) {\n var res = await rpc('list', { path: path, sessionId: activeSessionId })\n // \u65B0\u4F1A\u8BDD\u521A\u5207\u6362\u65F6\uFF0C\u5BBF\u4E3B\u4F1A\u8BDD\u6CE8\u518C\u8868\u53EF\u80FD\u5C1A\u672A\u7EB3\u5165\u5176 cwd\u2014\u2014\u7A0D\u5019\u91CD\u8BD5\u3002\n if ((!res || !res.ok) && /\u8D85\u51FA\u5141\u8BB8\u8303\u56F4/.test((res && res.error) || '') && (attempt || 0) < 3) {\n await new Promise(function (r) { setTimeout(r, 600) })\n return loadDir(path, (attempt || 0) + 1)\n }\n if (!res || !res.ok) {\n setState({ error: (res && res.error) || T('explorer.readFail') })\n return null\n }\n return res.entries || []\n}\n\nasync function defaultCwd(sessionId, hint) {\n // \u4EE5\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55\u4E3A\u51C6\uFF1A\u4F18\u5148\u7528\u5BA2\u6237\u7AEF\u4F1A\u8BDD\u5FEB\u7167\u91CC\u7684 cwd\uFF08\u4E0E\u5B98\u65B9\u7EC6\u8282\u680F\u540C\u6E90\uFF0C\n // \u59CB\u7EC8\u6307\u5411\"\u5F53\u524D\u4F1A\u8BDD\u6240\u5728\u9879\u76EE\"\uFF09\uFF0C\u5176\u6B21\u67E5\u5BBF\u4E3B\u4F1A\u8BDD header\u3002\n if (hint) return hint\n if (sessionId) {\n var res = await rpc('sessionCwd', { sessionId: sessionId })\n if (res && res.ok && res.cwd) return res.cwd\n }\n // \u5DF2\u77E5\u4F1A\u8BDD\u4F46\u4E0D\u80FD\u786E\u5B9A\u5176\u5DE5\u4F5C\u76EE\u5F55\u65F6\uFF0C\u56DE\u9000\u5230\u6587\u4EF6\u7CFB\u7EDF\u6839\uFF0C\u800C\u4E0D\u662F\"\u5BBF\u4E3B\u542F\u52A8\u76EE\u5F55\"\u2014\u2014\n // \u540E\u8005\uFF08root\uFF09\u4F1A\u8BA9\u8D44\u6E90\u7BA1\u7406\u5668\u8BEF\u663E\u793A\u4E0E\u5F53\u524D\u4F1A\u8BDD\u65E0\u5173\u7684\u542F\u52A8\u8DEF\u5F84\u3002\n return '/'\n}\n\nasync function trackSession(sessionId, cwdHint) {\n activeSessionId = sessionId || null\n var cwd = await defaultCwd(sessionId, cwdHint)\n // \u4F1A\u8BDD\u5207\u6362\uFF1A\u9884\u89C8\u5217\u8868\u6309\u65B0 cwd \u88C1\u526A\uFF08\u8303\u56F4\u5916\u81EA\u52A8\u5173\u95ED\uFF09\uFF0C\u5E76\u6E05\u6389\u4E0A\u4E00\u8DEF\u5F84\u7684\u65E7\u9519\u8BEF\u6A2A\u5E45\n var files = pruneFilesToScope(state.files, cwd)\n lastMtimes = {} // \u6362\u4E86\u76EE\u5F55\uFF0C\u65E7 mtime \u57FA\u7EBF\u5168\u90E8\u4F5C\u5E9F\uFF08\u9996\u8F6E tick \u91CD\u5EFA\u57FA\u7EBF\uFF09\n setState({ cwd: cwd, selected: new Set(), renaming: null, newItem: null, menu: null, error: '', notice: '', files: files })\n var items = await loadDir(cwd)\n if (items) setState({ error: '', tree: items })\n}\n\nasync function refresh() {\n if (!state.cwd) return\n var items = await loadDir(state.cwd)\n if (items) setState({ error: '', tree: items })\n}\n\n// ------------------------------------------------------------------\n// \u81EA\u52A8\u5237\u65B0\uFF1A\u4F4E\u9891\u8F6E\u8BE2\u5BBF\u4E3B mtime \u63A2\u6D4B\uFF083s \u4E00\u6B21\uFF09\uFF0C\u7B7E\u540D\u53D8\u4E86\u624D\u771F\u6B63\u91CD\u62C9\u3002\n// watch \u8303\u56F4 = \u5F53\u524D cwd + \u5DF2\u5C55\u5F00\u76EE\u5F55 + \u6253\u5F00\u7684\u9884\u89C8\u6587\u4EF6\uFF1B\u9762\u677F\u5173\u95ED\u4E14\u65E0\n// \u9884\u89C8\u65F6\u6574\u4E2A tick \u76F4\u63A5\u8FD4\u56DE\uFF08\u96F6\u8BF7\u6C42\uFF09\u3002\u4E0D\u505A\u6587\u4EF6 watcher\u2014\u2014fs.watch\n// \u9012\u5F52\u8BED\u4E49\u8DE8\u5E73\u53F0\u4E0D\u4E00\u81F4\u4E14\u5927\u5DE5\u4F5C\u533A\u5F00\u9500\u9AD8\uFF0Cstat \u51E0\u4E2A\u8DEF\u5F84\u4FBF\u5B9C\u5F97\u591A\u3002\n// ------------------------------------------------------------------\nvar AUTO_REFRESH_MS = 3000\nvar AUTO_WATCH_MAX = 64\nvar lastMtimes = {} // path -> {m,s,d}|null\uFF1Bundefined = \u5C1A\u65E0\u57FA\u7EBF\uFF08\u9996\u8F6E\u53EA\u5EFA\u57FA\u7EBF\u4E0D\u89E6\u53D1\uFF09\nvar autoTicking = false\n\nfunction collectWatchPaths() {\n var paths = []\n if (state.cwd) paths.push(state.cwd)\n var walk = function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i]\n if (n.type === 'directory' && n.children != null) {\n paths.push(n.path)\n if (n.open && n.children.length) walk(n.children)\n }\n }\n }\n walk(state.tree)\n for (var j = 0; j < state.files.list.length; j++) {\n var e = state.files.list[j]\n if (e.path && paths.indexOf(e.path) < 0) paths.push(e.path)\n }\n return paths.slice(0, AUTO_WATCH_MAX)\n}\n\n/** \u9884\u89C8\u6587\u4EF6\u5728\u78C1\u76D8\u4E0A\u53D8\u4E86\uFF1A\u9759\u9ED8\u91CD\u8BFB\u8BE5 entry\uFF08\u4E0D\u52A8\u6FC0\u6D3B\u72B6\u6001\u3001\u4E0D\u95EA tab\uFF09\u3002 */\nasync function silentReloadEntry(entry) {\n var res = await rpc('read', { path: entry.path, sessionId: activeSessionId })\n if (!res || !res.ok) return\n entry.kind = res.kind\n entry.size = res.size || 0\n if (res.kind === 'text') { entry.content = res.content; entry.truncated = !!res.truncated }\n else if (res.kind === 'image') { entry.dataUrl = 'data:' + res.mime + ';base64,' + res.data }\n else if (res.kind === 'pdf') { entry.data = res.data }\n setFiles({ list: state.files.list.slice() })\n}\n\n/** \u5DF2\u5C55\u5F00\u76EE\u5F55\u7684\u5B50\u9879\u53D8\u4E86\uFF1A\u91CD\u62C9\u8BE5\u76EE\u5F55\uFF08\u4FDD\u6301\u5C55\u5F00\u6001\uFF09\u3002 */\nasync function reloadDirNode(node) {\n var items = await loadDir(node.path)\n if (items) items.forEach(function (c) { c.parent = node })\n node.children = items || []\n node.open = true\n setState({ tree: state.tree })\n}\n\n/**\n * \u63A2\u4E00\u8F6E\u3002\u8FD4\u56DE 'idle'\uFF08\u672C\u8F6E\u6CA1\u53D1\u8BF7\u6C42\uFF09/ true\uFF08\u63A2\u6D4B\u6210\u529F\uFF09/ false\uFF08\u8BF7\u6C42\u5931\u8D25\uFF09\u3002\n * \u53EA\u6709\u771F\u6B63\u53D1\u51FA\u53BB\u4E14\u5931\u8D25\u7684\u8BF7\u6C42\u624D\u7D2F\u79EF\u9000\u907F\uFF1B\u7A7A\u95F2\u4E0D\u7D2F\u79EF\u2014\u2014\u9762\u677F\u91CD\u5F00\u65F6\u672C\u5C31\u6709\n * \u4E00\u6B21\u5168\u91CF loadDir\uFF0C\u65E0\u9700\u4E3A\"\u5173\u7740\u7684\u65F6\u5019\u5BBF\u4E3B\u662F\u5426\u6062\u590D\"\u64CD\u5FC3\u3002\n */\nasync function autoRefreshTick() {\n if (autoTicking) return 'idle'\n if (!state.open && state.files.list.length === 0) return 'idle'\n // \u7528\u6237\u6B63\u5728\u64CD\u4F5C\uFF08\u91CD\u547D\u540D/\u65B0\u5EFA/\u53F3\u952E\u83DC\u5355\uFF09\u65F6\u8DF3\u8FC7\u672C\u8F6E\uFF0C\u907F\u514D\u6253\u65AD\u8F93\u5165\n if (state.renaming || state.newItem || state.menu) return 'idle'\n var paths = collectWatchPaths()\n if (!paths.length) return 'idle'\n autoTicking = true\n try {\n var res = await rpc('mtime', { paths: paths })\n if (!res || !res.ok) return false\n var mtimes = res.mtimes || {}\n var dirtyDirs = []\n var dirtyFiles = []\n for (var i = 0; i < paths.length; i++) {\n var p = paths[i]\n var now = Object.prototype.hasOwnProperty.call(mtimes, p) ? mtimes[p] : null\n var prev = Object.prototype.hasOwnProperty.call(lastMtimes, p) ? lastMtimes[p] : undefined\n lastMtimes[p] = now\n if (prev === undefined || prev === null || now === null) continue\n if (now.m === prev.m && now.s === prev.s) continue\n if (now.d) dirtyDirs.push(p)\n else dirtyFiles.push(p)\n }\n for (var d = 0; d < dirtyDirs.length; d++) {\n var dp = dirtyDirs[d]\n if (dp === state.cwd) { await refresh(); continue }\n var node = findNode(state.tree, dp)\n if (node && node.children != null) await reloadDirNode(node)\n }\n for (var f = 0; f < dirtyFiles.length; f++) {\n var entry = findFileEntry(dirtyFiles[f])\n if (entry && entry.loaded) await silentReloadEntry(entry)\n }\n return true\n } finally {\n autoTicking = false\n }\n}\n\n// \u5931\u8D25\u9000\u907F\uFF1A\u5BBF\u4E3B\u4E0D\u53EF\u8FBE\uFF08DSH \u91CD\u542F\u4E2D / \u63D2\u4EF6\u91CD\u8F7D / \u65AD\u8FDE\uFF09\u65F6\u522B\u6BCF 3s \u786C\u6253\u2014\u2014\n// \u6307\u6570\u9000\u907F 3s\u21926s\u219212s\u219224s\u219248s\uFF0C\u5C01\u9876 60s\uFF1B\u4E00\u65E6\u6210\u529F\u56DE\u5230 3s\u3002\n// \uFF08JupyterLab FileBrowserModel \u7684 Poll \u540C\u601D\u8DEF\uFF1Abackoff + max \u5C01\u9876\u3002\uFF09\n// \u5B9E\u73B0\uFF1A1s \u56FA\u5B9A\u5FC3\u8DF3 + \u300C\u5230\u671F\u624D\u63A2\u6D4B\u300D\uFF0C\u800C\u4E0D\u662F\u53D8\u95F4\u9694\u5B9A\u65F6\u5668\u2014\u2014\u5BBF\u4E3B\u63D0\u4F9B\u7684\n// timer \u670D\u52A1\u53EF dispose\uFF0C\u6D4B\u8BD5\u73AF\u5883\uFF08interval \u4E3A no-op mock\uFF09\u4E5F\u4E0D\u4F1A\u6302\u4F4F\u8FDB\u7A0B\u3002\nvar AUTO_HEARTBEAT_MS = 1000\nvar AUTO_BACKOFF_MAX_MS = 60000\nvar autoFailCount = 0\nvar autoLastProbeAt = 0\n\nfunction autoDelayMs() {\n if (autoFailCount <= 0) return AUTO_REFRESH_MS\n return Math.min(AUTO_REFRESH_MS * Math.pow(2, autoFailCount), AUTO_BACKOFF_MAX_MS)\n}\n\nfunction autoHeartbeat() {\n var now = Date.now()\n if (now - autoLastProbeAt < autoDelayMs()) return\n autoLastProbeAt = now\n autoRefreshTick().then(function (outcome) {\n if (outcome === false) autoFailCount++\n else autoFailCount = 0\n })\n}\n\n/** \u624B\u52A8\u5237\u65B0\uFF1A\u91CD\u62C9\u6839\u76EE\u5F55\uFF0C\u5DF2\u5C55\u5F00\u7684\u5B50\u76EE\u5F55\u9010\u4E2A\u91CD\u62C9\u3001\u4FDD\u6301\u5C55\u5F00\u4E0D\u6536\u8D77\u3002 */\nasync function refreshAll() {\n if (!state.cwd) return\n var expanded = []\n var walk = function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i]\n if (n.type === 'directory' && n.children != null) {\n if (n.path !== state.cwd) expanded.push({ path: n.path, open: !!n.open })\n if (n.open && n.children.length) walk(n.children)\n }\n }\n }\n walk(state.tree)\n await refresh()\n for (var j = 0; j < expanded.length; j++) {\n if (!expanded[j].open) continue\n var node = findNode(state.tree, expanded[j].path)\n if (node) await reloadDirNode(node)\n }\n}\n\nasync function toggleNode(node) {\n if (node.type !== 'directory') return\n if (node.children == null) {\n node.loading = true\n setState({ tree: state.tree })\n var items = await loadDir(node.path)\n node.loading = false\n if (items) items.forEach(function (c) { c.parent = node })\n node.children = items || []\n node.open = true\n setState({ tree: state.tree })\n } else {\n node.open = !node.open\n setState({ tree: state.tree })\n }\n}\n\nfunction formatSize(n) {\n if (typeof n !== 'number' || n < 0) return ''\n if (n < 1024) return n + ' B'\n if (n < 1048576) return (n / 1024).toFixed(1) + ' KB'\n if (n < 1073741824) return (n / 1048576).toFixed(1) + ' MB'\n return (n / 1073741824).toFixed(1) + ' GB'\n}\n\n// ------------------------------------------------------------------\n// \u6587\u4EF6\u7C7B\u578B\u56FE\u6807\uFF1A\u91C7\u7528 JupyterLab ui-components \u7684 filetype SVG \u96C6\n// \uFF08BSD-3-Clause License\uFF0Cgithub.com/jupyterlab/jupyterlab\uFF09\u3002\n// \u56FA\u5B9A\u54C1\u724C\u8272\u300116px \u6E32\u67D3\uFF1B\u672A\u547D\u4E2D\u6269\u5C55\u540D\u6309\u300C\u4EE3\u7801\u6587\u4EF6\u2192\u7F16\u8F91\u5668\u56FE\u6807\u3001\u5176\u4F59\u2192\u7A7A\u767D\u6587\u4EF6\u300D\u515C\u5E95\u3002\n// ------------------------------------------------------------------\nvar NB_SVG = {\n folder: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 24 24\"><path fill=\"#FBC02D\" d=\"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8z\" class=\"jp-icon3 jp-icon-selectable\"/></svg>',\n folderFavorite: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"#000\" viewBox=\"0 0 24 24\"><path fill=\"#F9A825\" d=\"M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2m-2.06 11L15 15.28 12.06 17l.78-3.33-2.59-2.24 3.41-.29L15 8l1.34 3.14 3.41.29-2.59 2.24z\" class=\"jp-icon3 jp-icon-selectable\"/></svg>',\n file: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 22 22\"><path fill=\"currentColor\" d=\"m19.3 8.2-5.5-5.5c-.3-.3-.7-.5-1.2-.5H3.9c-.8.1-1.6.9-1.6 1.8v14.1c0 .9.7 1.6 1.6 1.6h14.2c.9 0 1.6-.7 1.6-1.6V9.4c.1-.5-.1-.9-.4-1.2m-5.8-3.3 3.4 3.6h-3.4zm3.9 12.7H4.7c-.1 0-.2 0-.2-.2V4.7c0-.2.1-.3.2-.3h7.2v4.4s0 .8.3 1.1 1.1.3 1.1.3h4.3v7.2s-.1.2-.2.2\" class=\"jp-icon3 jp-icon-selectable\"/></svg>',\n textEditor: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M15 15H3v2h12zm0-8H3v2h12zM3 13h18v-2H3zm0 8h18v-2H3zM3 3v2h18V3z\" class=\"jp-text-editor-icon-color jp-icon-selectable\"/></svg>',\n markdown: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 22 22\"><path fill=\"#7B1FA2\" d=\"M5 14.9h12l-6.1 6zm9.4-6.8c0-1.3-.1-2.9-.1-4.5-.4 1.4-.9 2.9-1.3 4.3l-1.3 4.3h-2L8.5 7.9c-.4-1.3-.7-2.9-1-4.3-.1 1.6-.1 3.2-.2 4.6L7 12.4H4.8l.7-11h3.3L10 5c.4 1.2.7 2.7 1 3.9.3-1.2.7-2.6 1-3.9l1.2-3.7h3.3l.6 11h-2.4z\" class=\"jp-icon-contrast0 jp-icon-selectable\"/></svg>',\n notebook: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 22 22\"><g fill=\"#EF6C00\" class=\"jp-notebook-icon-color jp-icon-selectable\"><path d=\"M18.7 3.3v15.4H3.3V3.3zm1.5-1.5H1.8v18.3h18.3z\"/><path d=\"m16.5 16.5-5.4-4.3-5.6 4.3v-11h11z\"/></g></svg>',\n json: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 22 22\"><g fill=\"#F9A825\" class=\"jp-json-icon-color jp-icon-selectable\"><path d=\"M20.2 11.8c-1.6 0-1.7.5-1.7 1 0 .4.1.9.1 1.3.1.5.1.9.1 1.3 0 1.7-1.4 2.3-3.5 2.3h-.9v-1.9h.5c1.1 0 1.4 0 1.4-.8 0-.3 0-.6-.1-1 0-.4-.1-.8-.1-1.2 0-1.3 0-1.8 1.3-2-1.3-.2-1.3-.7-1.3-2 0-.4.1-.8.1-1.2.1-.4.1-.7.1-1 0-.8-.4-.7-1.4-.8h-.5V4.1h.9c2.2 0 3.5.7 3.5 2.3 0 .4-.1.9-.1 1.3-.1.5-.1.9-.1 1.3 0 .5.2 1 1.7 1zM1.8 10.1c1.6 0 1.7-.5 1.7-1 0-.4-.1-.9-.1-1.3-.1-.5-.1-.9-.1-1.3 0-1.6 1.4-2.3 3.5-2.3h.9v1.9h-.5c-1 0-1.4 0-1.4.8 0 .3 0 .6.1 1 0 .2.1.6.1 1 0 1.3 0 1.8-1.3 2C6 11.2 6 11.7 6 13c0 .4-.1.8-.1 1.2-.1.3-.1.7-.1 1 0 .8.3.8 1.4.8h.5v1.9h-.9c-2.1 0-3.5-.6-3.5-2.3 0-.4.1-.9.1-1.3.1-.5.1-.9.1-1.3 0-.5-.2-1-1.7-1z\"/><circle cx=\"11\" cy=\"13.8\" r=\"2.1\"/><circle cx=\"11\" cy=\"8.2\" r=\"2.1\"/></g></svg>',\n yaml: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 22 22\"><g fill=\"#D81B60\" class=\"jp-icon-contrast2 jp-icon-selectable\"><path d=\"M7.2 18.6v-5.4L3 5.6h3.3l1.4 3.1c.3.9.6 1.6 1 2.5.3-.8.6-1.6 1-2.5l1.4-3.1h3.4l-4.4 7.6v5.5z\"/><circle cx=\"17.6\" cy=\"16.5\" r=\"2.1\"/><circle cx=\"17.6\" cy=\"11\" r=\"2.1\"/></g></svg>',\n python: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"-10 -10 131.161 132.389\"><path fill=\"#306998\" d=\"M54.919 0c-4.584.022-8.961.413-12.813 1.095C30.76 3.099 28.7 7.295 28.7 15.032v10.219h26.813v3.406H18.638c-7.793 0-14.616 4.684-16.75 13.594-2.462 10.213-2.571 16.586 0 27.25 1.905 7.938 6.457 13.594 14.25 13.594h9.218v-12.25c0-8.85 7.657-16.657 16.75-16.657h26.782c7.454 0 13.406-6.138 13.406-13.625v-25.53c0-7.267-6.13-12.726-13.406-13.938C64.282.328 59.502-.02 54.918 0m-14.5 8.22c2.77 0 5.031 2.298 5.031 5.125 0 2.816-2.262 5.093-5.031 5.093-2.78 0-5.031-2.277-5.031-5.093 0-2.827 2.251-5.125 5.03-5.125\" class=\"jp-icon-selectable\"/><path fill=\"#ffd43b\" d=\"M85.638 28.657v11.906c0 9.231-7.826 17-16.75 17H42.106c-7.336 0-13.406 6.279-13.406 13.625V96.72c0 7.266 6.319 11.54 13.406 13.625 8.488 2.495 16.627 2.946 26.782 0 6.75-1.955 13.406-5.888 13.406-13.625V86.5H55.513v-3.405H95.7c7.793 0 10.696-5.436 13.406-13.594 2.8-8.399 2.68-16.476 0-27.25-1.925-7.758-5.604-13.594-13.406-13.594zM70.575 93.313c2.78 0 5.031 2.278 5.031 5.094 0 2.827-2.251 5.125-5.031 5.125-2.77 0-5.031-2.298-5.031-5.125 0-2.816 2.261-5.094 5.031-5.094\" class=\"jp-icon-selectable\"/></svg>',\n julia: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 325 300\"><path fill=\"#cb3c33\" d=\"M150.898 225c0 41.422-33.578 75-75 75s-75-33.578-75-75 33.579-75 75-75 75 33.578 75 75\" class=\"jp-brand0 jp-icon-selectable\"/><path fill=\"#389826\" d=\"M237.5 75c0 41.422-33.578 75-75 75s-75-33.578-75-75 33.578-75 75-75 75 33.578 75 75\" class=\"jp-brand0 jp-icon-selectable\"/><path fill=\"#9558b2\" d=\"M324.102 225c0 41.422-33.579 75-75 75s-75-33.578-75-75 33.578-75 75-75 75 33.578 75 75\" class=\"jp-brand0 jp-icon-selectable\"/></svg>',\n rKernel: '<svg xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"xMidYMid\" width=\"16\" height=\"16\" viewBox=\"0 0 724 561\"><path class=\"jp-icon-selectable\" d=\"M361.453,485.937 C162.329,485.937 0.906,377.828 0.906,244.469 C0.906,111.109 162.329,3.000 361.453,3.000 C560.578,3.000 722.000,111.109 722.000,244.469 C722.000,377.828 560.578,485.937 361.453,485.937 ZM416.641,97.406 C265.289,97.406 142.594,171.314 142.594,262.484 C142.594,353.654 265.289,427.562 416.641,427.562 C567.992,427.562 679.687,377.033 679.687,262.484 C679.687,147.971 567.992,97.406 416.641,97.406 Z\" fill=\"rgb(179,179,179)\" fill-rule=\"evenodd\"/><path class=\"jp-icon-selectable\" d=\"M550.000,377.000 C550.000,377.000 571.822,383.585 584.500,390.000 C588.899,392.226 596.510,396.668 602.000,402.500 C607.378,408.212 610.000,414.000 610.000,414.000 L696.000,559.000 L557.000,559.062 L492.000,437.000 C492.000,437.000 478.690,414.131 470.500,407.500 C463.668,401.969 460.755,400.000 454.000,400.000 C449.298,400.000 420.974,400.000 420.974,400.000 L421.000,558.974 L298.000,559.026 L298.000,152.938 L545.000,152.938 C545.000,152.938 657.500,154.967 657.500,262.000 C657.500,369.033 550.000,377.000 550.000,377.000 ZM496.500,241.024 L422.037,240.976 L422.000,310.026 L496.500,310.002 C496.500,310.002 531.000,309.895 531.000,274.877 C531.000,239.155 496.500,241.024 496.500,241.024 Z\" fill=\"rgb(52,101,176)\" fill-rule=\"evenodd\"/></svg>',\n spreadsheet: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 22 22\"><path fill=\"#4CAF50\" d=\"M2.2 2.2v17.6h17.6V2.2zm15.4 7.7h-5.5V4.4h5.5zM9.9 4.4v5.5H4.4V4.4zm-5.5 7.7h5.5v5.5H4.4zm7.7 5.5v-5.5h5.5v5.5z\" class=\"jp-icon-contrast1 jp-icon-selectable\"/></svg>',\n pdf: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 22 22\"><path fill=\"#FF2A2A\" d=\"m17.933 13.667 3.987 3.987-1.117 1.117-2.51-2.51-1.066 1.067 2.36 2.36-1.117 1.117-2.36-2.36-2.43 2.429-1.477-1.478zm-6.163-3.93-3.496 3.496.53.53q.905.906 1.83.932.929.031 1.784-.825.852-.852.822-1.773t-.94-1.83zm-.36-2.594 1.557 1.558q1.305 1.305 1.754 2.13.456.825.468 1.727.015.79-.296 1.493-.31.702-.951 1.343-.649.648-1.355.963-.702.31-1.493.295-.905-.015-1.738-.472-.829-.46-2.118-1.75L5.68 12.874zm-5.76-5.76L8.1 3.835Q9.195 4.93 9.291 6q.103 1.07-.795 1.968-.901.902-1.976.802-1.067-.1-2.16-1.193l-.975-.975L1.397 8.59-.08 7.113Zm.406 2.548-1.6 1.6.817.818q.43.43.871.457.445.023.829-.361t.357-.825-.457-.871z\" class=\"jp-icon-selectable\"/></svg>',\n image: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 22 22\"><path fill=\"#FFF\" d=\"M2.2 2.2h17.5v17.5H2.2z\" class=\"jp-icon-brand4 jp-icon-selectable-inverse\"/><path fill=\"#3F51B5\" d=\"M2.2 2.2v17.5h17.5l.1-17.5zm12.1 2.2c1.2 0 2.2 1 2.2 2.2s-1 2.2-2.2 2.2-2.2-1-2.2-2.2 1-2.2 2.2-2.2M4.4 17.6l3.3-8.8 3.3 6.6 2.2-3.2 4.4 5.4z\" class=\"jp-icon-brand0 jp-icon-selectable\"/></svg>',\n html5: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 512 512\"><path fill=\"#000\" d=\"M108.4 0h23v22.8h21.2V0h23v69h-23V46h-21v23h-23.2M206 23h-20.3V0h63.7v23H229v46h-23m53.5-69h24.1l14.8 24.3L313.2 0h24.1v69h-23V34.8l-16.1 24.8-16.1-24.8V69h-22.6m89.2-69h23v46.2h32.6V69h-55.6\" class=\"jp-icon0 jp-icon-selectable\"/><path fill=\"#e44d26\" d=\"m107.6 471-33-370.4h362.8l-33 370.2L255.7 512\" class=\"jp-icon-selectable\"/><path fill=\"#f16529\" d=\"M256 480.5V131h148.3L376 447\" class=\"jp-icon-selectable\"/><path fill=\"#ebebeb\" d=\"M142 176.3h114v45.4h-64.2l4.2 46.5h60v45.3H154.4m2 22.8H202l3.2 36.3 50.8 13.6v47.4l-93.2-26\" class=\"jp-icon-selectable-inverse\"/><path fill=\"#fff\" d=\"M369.6 176.3H255.8v45.4h109.6m-4.1 46.5H255.8v45.4h56l-5.3 59-50.7 13.6v47.2l93-25.8\" class=\"jp-icon-selectable-inverse\"/></svg>',\n}\n\n/** \u6269\u5C55\u540D \u2192 JupyterLab filetype \u56FE\u6807\uFF1B\u672A\u547D\u4E2D\u8D70\u4EE3\u7801\u7F16\u8F91\u5668/\u7A7A\u767D\u6587\u4EF6\u515C\u5E95\u3002 */\nfunction iconSvgFor(node) {\n if (node.type === 'directory') return node.open ? NB_SVG.folderFavorite : NB_SVG.folder\n var ext = extOfName(node.name)\n if (Object.prototype.hasOwnProperty.call(FILE_ICON_BY_EXT, ext)) return FILE_ICON_BY_EXT[ext]\n // Seti \u5B57\u4F53\u56FE\u6807\uFF1A\u8986\u76D6 SVG \u672A\u6536\u5F55\u7684\u4EE3\u7801/\u914D\u7F6E/\u4E8C\u8FDB\u5236/\u5A92\u4F53\u7C7B\u578B\n var setiKey = SETI_EXT[ext]\n if (setiKey) return '<span class=\"seti-ico seti-' + setiKey + '\"></span>'\n // \u515C\u5E95\uFF1A\u5DF2\u77E5\u4EE3\u7801\u8BED\u8A00 \u2192 \u6587\u672C\u7F16\u8F91\u5668\u56FE\u6807\uFF1B\u5176\u4F59\uFF08LICENSE\u3001\u65E0\u6269\u5C55\u540D\u7B49\uFF09\u2192 \u7A7A\u767D\u6587\u4EF6\n var codeish = Object.prototype.hasOwnProperty.call(CODE_LANG_BY_EXT, ext)\n return codeish ? NB_SVG.textEditor : NB_SVG.file\n}\n\nvar FILE_ICON_BY_EXT = {\n ipynb: NB_SVG.notebook,\n md: NB_SVG.markdown, markdown: NB_SVG.markdown,\n json: NB_SVG.json, jsonc: NB_SVG.json,\n yaml: NB_SVG.yaml, yml: NB_SVG.yaml,\n py: NB_SVG.python, jl: NB_SVG.julia, r: NB_SVG.rKernel,\n csv: NB_SVG.spreadsheet, tsv: NB_SVG.spreadsheet, xls: NB_SVG.spreadsheet, xlsx: NB_SVG.spreadsheet,\n pdf: NB_SVG.pdf,\n png: NB_SVG.image, jpg: NB_SVG.image, jpeg: NB_SVG.image, gif: NB_SVG.image,\n webp: NB_SVG.image, svg: NB_SVG.image, bmp: NB_SVG.image, ico: NB_SVG.image,\n html: NB_SVG.html5, htm: NB_SVG.html5,\n}\n\n// ------------------------------------------------------------------\n// Seti \u56FE\u6807\u5B57\u4F53\uFF1AVS Code \u9ED8\u8BA4\u65B9\u6848\uFF08MIT\uFF0C\u6E90\u81EA jesseweed/seti-ui\uFF09\u3002\n// WOFF \u5B57\u4F53 + CSS ::before \u6E32\u67D3 Unicode \u5B57\u7B26 + \u6BCF\u56FE\u6807\u72EC\u7ACB\u989C\u8272\u3002\n// \u8865\u5168 NB_SVG SVG \u56FE\u6807\u672A\u8986\u76D6\u7684\u4EE3\u7801 / \u914D\u7F6E / \u4E8C\u8FDB\u5236 / \u5A92\u4F53\u7C7B\u578B\u3002\n// ------------------------------------------------------------------\n\n/** Seti WOFF \u5B57\u4F53 base64\uFF0837 KB \u539F\u59CB \u2192 ~50 KB base64\uFF09\u3002 */\nvar SETI_FONT_B64 = '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'\n\n/** \u56FE\u6807\u5B9A\u4E49 key \u2192 { c: fontCharacter, col: fontColor }\u3002 */\nvar SETI_ICONS = {\n ts: { c: '\\\\E099', col: '#519aba' },\n react: { c: '\\\\E07D', col: '#519aba' },\n js: { c: '\\\\E051', col: '#cbcb41' },\n sql: { c: '\\\\E022', col: '#f55385' },\n rs: { c: '\\\\E082', col: '#6d8086' },\n go: { c: '\\\\E03A', col: '#519aba' },\n sh: { c: '\\\\E089', col: '#8dc149' },\n css: { c: '\\\\E01D', col: '#519aba' },\n less: { c: '\\\\E059', col: '#519aba' },\n sass: { c: '\\\\E084', col: '#f55385' },\n java: { c: '\\\\E050', col: '#cc3e44' },\n cs: { c: '\\\\E00B', col: '#519aba' },\n cpp: { c: '\\\\E01A', col: '#519aba' },\n c: { c: '\\\\E00C', col: '#519aba' },\n objc: { c: '\\\\E00C', col: '#cbcb41' },\n rb: { c: '\\\\E081', col: '#cc3e44' },\n php: { c: '\\\\E070', col: '#a074c4' },\n swift: { c: '\\\\E092', col: '#e37933' },\n kotlin: { c: '\\\\E058', col: '#e37933' },\n vue: { c: '\\\\E09D', col: '#8dc149' },\n xml: { c: '\\\\E0A5', col: '#e37933' },\n lua: { c: '\\\\E05E', col: '#519aba' },\n perl: { c: '\\\\E06E', col: '#519aba' },\n ps1: { c: '\\\\E074', col: '#519aba' },\n dart: { c: '\\\\E021', col: '#519aba' },\n scala: { c: '\\\\E086', col: '#cc3e44' },\n sol: { c: '\\\\E02D', col: '#519aba' },\n hs: { c: '\\\\E044', col: '#a074c4' },\n ml: { c: '\\\\E06A', col: '#e37933' },\n ex: { c: '\\\\E028', col: '#a074c4' },\n clj: { c: '\\\\E013', col: '#8dc149' },\n coffee: { c: '\\\\E016', col: '#cbcb41' },\n zig: { c: '\\\\E0A8', col: '#e37933' },\n nim: { c: '\\\\E065', col: '#cbcb41' },\n cr: { c: '\\\\E01B', col: '#d4d7d6' },\n d: { c: '\\\\E020', col: '#cc3e44' },\n asm: { c: '\\\\E004', col: '#cc3e44' },\n gradle: { c: '\\\\E03C', col: '#519aba' },\n tf: { c: '\\\\E093', col: '#a074c4' },\n graphql: { c: '\\\\E03E', col: '#f55385' },\n twig: { c: '\\\\E098', col: '#8dc149' },\n erb: { c: '\\\\E049', col: '#cc3e44' },\n haml: { c: '\\\\E042', col: '#cc3e44' },\n mustache: { c: '\\\\E063', col: '#e37933' },\n liquid: { c: '\\\\E05B', col: '#8dc149' },\n ejs: { c: '\\\\E027', col: '#cbcb41' },\n pug: { c: '\\\\E078', col: '#cc3e44' },\n styl: { c: '\\\\E08E', col: '#8dc149' },\n njk: { c: '\\\\E069', col: '#8dc149' },\n slim: { c: '\\\\E08A', col: '#e37933' },\n toml: { c: '\\\\E019', col: '#6d8086' },\n makefile: { c: '\\\\E05F', col: '#e37933' },\n bat: { c: '\\\\E0A2', col: '#519aba' },\n zip: { c: '\\\\E0A9', col: '#6d8086' },\n font: { c: '\\\\E033', col: '#cc3e44' },\n audio: { c: '\\\\E005', col: '#a074c4' },\n video: { c: '\\\\E09B', col: '#f55385' },\n illustrator: { c: '\\\\E04B', col: '#cbcb41' },\n photoshop: { c: '\\\\E06F', col: '#519aba' },\n git: { c: '\\\\E034', col: '#41535b' },\n}\n\n/** \u6269\u5C55\u540D \u2192 Seti \u56FE\u6807 key\uFF08\u591A\u5BF9\u4E00\uFF1A\u8BED\u8A00/\u6846\u67B6\u5171\u4EAB\u540C\u4E00\u5B57\u5F62\uFF09\u3002 */\nvar SETI_EXT = {\n ts: 'ts', mts: 'ts', cts: 'ts',\n tsx: 'react',\n js: 'js', mjs: 'js', cjs: 'js', es6: 'js',\n jsx: 'react',\n sql: 'sql', db: 'sql', sqlite: 'sql',\n rs: 'rs', go: 'go', d: 'd', s: 'asm', asm: 'asm', zig: 'zig',\n sh: 'sh', bash: 'sh', zsh: 'sh', fish: 'sh',\n bat: 'bat', cmd: 'bat',\n css: 'css', less: 'less', sass: 'sass', scss: 'sass', styl: 'styl',\n java: 'java', cs: 'cs', kt: 'kotlin', kts: 'kotlin', scala: 'scala', gradle: 'gradle',\n c: 'c', h: 'c', cpp: 'cpp', cxx: 'cpp', cc: 'cpp', hpp: 'cpp',\n m: 'objc',\n rb: 'rb', php: 'php', pl: 'perl', pm: 'perl',\n swift: 'swift', lua: 'lua',\n vue: 'vue',\n xml: 'xml', xsl: 'xml', xsd: 'xml', xslt: 'xml',\n twig: 'twig', erb: 'erb', haml: 'haml',\n mustache: 'mustache', hbs: 'mustache',\n liquid: 'liquid', ejs: 'ejs',\n pug: 'pug', jade: 'pug',\n njk: 'njk', nunjucks: 'njk', slim: 'slim',\n toml: 'toml', properties: 'toml', cfg: 'toml', conf: 'toml', env: 'toml', ini: 'toml',\n mk: 'makefile', make: 'makefile', makefile: 'makefile',\n ps1: 'ps1', psm1: 'ps1',\n graphql: 'graphql', gql: 'graphql',\n sol: 'sol',\n hs: 'hs', lhs: 'hs', ml: 'ml', mli: 'ml',\n ex: 'ex', exs: 'ex', clj: 'clj', cljs: 'clj', cljc: 'clj', edn: 'clj',\n coffee: 'coffee',\n nim: 'nim', cr: 'cr',\n dart: 'dart',\n tf: 'tf', tfvars: 'tf',\n zip: 'zip', gz: 'zip', tar: 'zip', bz2: 'zip', xz: 'zip', '7z': 'zip', rar: 'zip',\n woff: 'font', woff2: 'font', ttf: 'font', eot: 'font', otf: 'font',\n mp3: 'audio', wav: 'audio', flac: 'audio', ogg: 'audio', m4a: 'audio',\n mp4: 'video', avi: 'video', mov: 'video', mkv: 'video', webm: 'video',\n ai: 'illustrator', psd: 'photoshop',\n gitignore: 'git', gitattributes: 'git', gitmodules: 'git',\n}\n\n/** \u751F\u6210 Seti \u5B57\u4F53 CSS\uFF08@font-face + \u6BCF\u56FE\u6807 ::before \u89C4\u5219\uFF09\u3002 */\nfunction setiIconCss() {\n var rules = [\n '@font-face{font-family:\"seti\";src:url(data:font/woff;base64,' + SETI_FONT_B64 + ') format(\"woff\");font-weight:normal;font-style:normal;font-display:block;}',\n '.seti-ico{font-family:\"seti\";font-size:16px;line-height:16px;display:inline-block;width:16px;text-align:center;vertical-align:middle;flex:none;}',\n ]\n for (var key in SETI_ICONS) {\n var ico = SETI_ICONS[key]\n rules.push('.seti-ico.seti-' + key + '::before{content:\"' + ico.c + '\";color:' + ico.col + ';}')\n }\n return rules.join('\\n')\n}\n\n// Seti \u56FE\u6807\u5B57\u4F53 CSS\uFF1A@font-face + \u6BCF\u56FE\u6807 ::before \u89C4\u5219\nif (typeof document !== 'undefined' && document.querySelector('style[data-plugin-css=\"@lyhue1991/dsh-soup/seti-icons.css\"]') === null) {\n var setiTag = document.createElement('style')\n setiTag.dataset.plugin = '@lyhue1991/dsh-soup'\n setiTag.dataset.pluginCss = '@lyhue1991/dsh-soup/seti-icons.css'\n setiTag.textContent = setiIconCss()\n document.head.appendChild(setiTag)\n}\n\nfunction findNode(nodes, path) {\n if (!Array.isArray(nodes)) return null\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i]\n if (n.path === path) return n\n if (Array.isArray(n.children) && n.children.length) {\n var r = findNode(n.children, path)\n if (r) return r\n }\n }\n return null\n}\n\nfunction rowIndex(path) {\n for (var i = 0; i < visibleRows.length; i++) if (visibleRows[i] === path) return i\n return -1\n}\n\nfunction onRowClick(e, node) {\n e.stopPropagation()\n var path = node.path\n var meta = e.metaKey || e.ctrlKey\n var shift = e.shiftKey\n var sel = new Set(state.selected)\n var lastIndex = state.lastIndex\n if (shift && lastIndex != null) {\n var idx = rowIndex(path)\n var from = Math.min(lastIndex, idx)\n var to = Math.max(lastIndex, idx)\n for (var i = from; i <= to; i++) { if (visibleRows[i]) sel.add(visibleRows[i]) }\n } else if (meta) {\n if (sel.has(path)) sel.delete(path); else sel.add(path)\n lastIndex = rowIndex(path)\n } else {\n sel.clear(); sel.add(path); lastIndex = rowIndex(path)\n }\n setState({ selected: sel, lastIndex: lastIndex })\n}\n\nfunction onRowDoubleClick(node) {\n if (node.type === 'directory') {\n toggleNode(node)\n } else {\n openFileInTab(node.path)\n }\n}\n\nfunction onRowContext(e, node) {\n e.preventDefault()\n e.stopPropagation()\n var sel = new Set(state.selected)\n if (!sel.has(node.path)) { sel.clear(); sel.add(node.path); setState({ selected: sel }) }\n setState({ menu: { x: e.clientX, y: e.clientY, node: node } })\n}\n\nfunction onBlankContext(e) {\n e.preventDefault()\n e.stopPropagation()\n setState({ selected: new Set(), lastIndex: null, menu: { x: e.clientX, y: e.clientY, node: null } })\n}\n\nfunction onBlankClick(e) {\n if (e.target && e.target.closest && e.target.closest('[data-path]')) return\n setState({ selected: new Set(), lastIndex: null })\n}\n\nasync function openSelection() {\n var paths = Array.from(state.selected)\n setState({ menu: null })\n for (var i = 0; i < paths.length; i++) await rpc('open', { path: paths[i] })\n}\n\nasync function trashSelection() {\n var paths = Array.from(state.selected)\n setState({ menu: null })\n var errors = []\n for (var i = 0; i < paths.length; i++) {\n var res = await rpc('trash', { path: paths[i] })\n if (!res || !res.ok) errors.push(baseName(paths[i]) + ': ' + ((res && res.error) || T('explorer.actionFail')) + ((res && res.hint) ? '\uFF08' + res.hint + '\uFF09' : ''))\n }\n if (errors.length) setState({ error: errors.join('\uFF1B') })\n setState({ selected: new Set(), lastIndex: null })\n await refresh()\n}\n\nfunction startRename(node) { setState({ renaming: node.path, menu: null }) }\n\nfunction commitRename(path, name) {\n if (!name || name === '.' || name === '..' || name.includes('/') || name.includes('\\\\')) {\n setState({ renaming: null })\n return\n }\n var dir = parentOf(path)\n var dest = pathJoin(dir, name)\n var sel = new Set(state.selected)\n if (sel.has(path)) { sel.delete(path); sel.add(dest) }\n setState({ renaming: null, selected: sel })\n ;(async function () {\n var res = await rpc('move', { from: path, to: dest })\n if (!res || !res.ok) setState({ error: (res && res.error) || T('explorer.renameFail') })\n await refresh()\n })()\n}\n\nfunction startNew(parent, isDir) {\n setState({ newItem: { parent: parent, isDir: isDir }, menu: null })\n if (parent !== state.cwd) {\n var parentNode = findNode(state.tree, parent)\n if (parentNode && parentNode.children == null) toggleNode(parentNode)\n }\n}\n\nfunction commitNew(parent, name, isDir) {\n if (!name || name === '.' || name === '..' || name.includes('/') || name.includes('\\\\')) {\n setState({ newItem: null })\n return\n }\n setState({ newItem: null })\n ;(async function () {\n var res = await rpc('create', { dir: parent, name: name, isDir: isDir })\n if (!res || !res.ok) setState({ error: (res && res.error) || T('explorer.createFail') })\n await refresh()\n })()\n}\n\n/** \u6210\u529F\u901A\u77E5\uFF1A3 \u79D2\u540E\u81EA\u52A8\u6D88\u5931\uFF08\u4EC5\u5F53\u672A\u88AB\u66F4\u65B0\u7684\u6D88\u606F\u8986\u76D6\u65F6\u624D\u6E05\u9664\uFF09\u3002 */\nvar noticeTimer = null\nfunction showNotice(text) {\n setState({ notice: text, error: '' })\n if (noticeTimer) clearTimeout(noticeTimer)\n noticeTimer = setTimeout(function () {\n if (state.notice === text) setState({ notice: '' })\n }, 3000)\n}\n\nfunction copyPath(target) {\n var p = target && target.path ? target.path : state.cwd\n setState({ menu: null })\n try {\n if (navigator && navigator.clipboard && navigator.clipboard.writeText) {\n navigator.clipboard.writeText(p).then(function () { showNotice(T('explorer.renamed')) }).catch(function () {})\n }\n } catch (err) {}\n}\n\nfunction onDragStart(e, node) {\n var paths = state.selected.has(node.path) ? Array.from(state.selected) : [node.path]\n setState({ dragPaths: paths })\n try { e.dataTransfer.setData('text/plain', paths.join('\\n')) } catch (err) {}\n e.dataTransfer.effectAllowed = 'move'\n}\n\nfunction doDrop(e, targetDir) {\n if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n uploadFiles(targetDir, Array.from(e.dataTransfer.files))\n return\n }\n movePaths(state.dragPaths || [], targetDir)\n}\n\nfunction onRowDrop(e, node) {\n e.preventDefault()\n e.stopPropagation()\n if (node.type !== 'directory') return\n doDrop(e, node.path)\n setState({ dropTarget: null })\n}\n\nfunction onBodyDrop(e) {\n e.preventDefault()\n doDrop(e, state.cwd)\n setState({ dropTarget: null })\n}\n\nasync function movePaths(paths, targetDir) {\n var errors = []\n for (var i = 0; i < paths.length; i++) {\n var p = paths[i]\n if (p === '/' || !p) continue\n var name = baseName(p)\n var dest = pathJoin(targetDir, name)\n if (dest === p) continue\n if (targetDir === p || targetDir.startsWith(p + '/')) { errors.push(T('explorer.moveIntoSelf', { path: name })); continue }\n var res = await rpc('move', { from: p, to: dest })\n if (!res || !res.ok) errors.push(name + ': ' + ((res && res.error) || T('explorer.actionFail')))\n }\n setState({ dragPaths: null })\n if (errors.length) setState({ error: errors.join('\uFF1B') })\n await refresh()\n}\n\nfunction fileToBase64(file) {\n return new Promise(function (resolve, reject) {\n var r = new FileReader()\n r.onload = function () { var s = String(r.result || ''); var i = s.indexOf(','); resolve(i >= 0 ? s.slice(i + 1) : s) }\n r.onerror = function () { reject(new Error(T('files.readFail'))) }\n r.readAsDataURL(file)\n })\n}\n\n/** \u5355\u5757\u5927\u5C0F\uFF1A\u8D85\u8FC7\u5219\u8D70\u5206\u5757\u901A\u9053\uFF08JupyterLab \u540C\u6B3E 1MB\uFF09\u3002 */\nvar UPLOAD_CHUNK_SIZE = 1024 * 1024\n\nfunction setUploadEntry(entry) {\n var list = (state.uploads || []).slice()\n var found = false\n for (var i = 0; i < list.length; i++) {\n if (list[i].name === entry.name) { list[i] = entry; found = true; break }\n }\n if (!found) list.push(entry)\n setState({ uploads: list })\n}\n\nfunction updateUpload(name, loaded, total, idx, totalFiles, down) {\n setUploadEntry({ name: name, loaded: loaded, total: total, idx: idx, totalFiles: totalFiles, done: false, down: !!down })\n}\n\nfunction finishUploads(count, okCount, failedName, down) {\n var verb = down ? T('explorer.downloaded') : T('explorer.uploaded')\n setUploadEntry({\n name: '\u2713 ' + verb + ' ' + (okCount === count ? T('explorer.filesCount', { n: count }) : T('explorer.filesCountPartial', { ok: okCount, total: count }) + (failedName ? '\uFF08' + failedName + '\uFF09' : '')),\n loaded: 0, total: 0, idx: 0, totalFiles: 0, done: true, down: !!down,\n })\n window.setTimeout(function () { setState({ uploads: [] }) }, 1600)\n}\n\n/** \u5355\u6587\u4EF6\u5206\u5757\u4E0A\u4F20\uFF1A>1MB \u5207\u7247\u9010\u5757 POST\uFF0C\u9996\u5757\u8986\u76D6\u3001\u540E\u7EED\u8FFD\u52A0\u3002 */\nasync function uploadOneFile(dir, f, idx, totalFiles) {\n var chunked = f.size > UPLOAD_CHUNK_SIZE\n var chunks = Math.max(1, Math.ceil(f.size / UPLOAD_CHUNK_SIZE))\n updateUpload(f.name, 0, f.size, idx, totalFiles)\n for (var c = 0; c < chunks; c++) {\n var start = c * UPLOAD_CHUNK_SIZE\n var blob = f.slice(start, Math.min(f.size, start + UPLOAD_CHUNK_SIZE))\n var b64 = await fileToBase64(blob)\n var res = await rpc('upload', {\n dir: dir, name: f.name, data: b64,\n chunk: chunked ? c + 1 : undefined,\n })\n if (!res || !res.ok) throw new Error((res && res.error) || T('explorer.uploadFail'))\n updateUpload(f.name, Math.min(f.size, start + UPLOAD_CHUNK_SIZE), f.size, idx, totalFiles)\n }\n}\n\nasync function uploadFiles(dir, files) {\n if (!files || !files.length) return\n var errors = []\n var okCount = 0\n for (var i = 0; i < files.length; i++) {\n var f = files[i]\n try {\n await uploadOneFile(dir, f, i + 1, files.length)\n okCount++\n } catch (err) {\n errors.push(f.name + ': ' + String((err && err.message) || err))\n }\n }\n finishUploads(files.length, okCount, errors.length ? errors[0].split(':')[0] : '')\n if (errors.length) setState({ error: errors.join('\uFF1B'), notice: '' })\n await refresh()\n}\n\n/** \u2264100MB \u8D70\u9875\u9762\u5185 fetch + \u8FDB\u5EA6\u884C + Blob \u53E6\u5B58\uFF1B>100MB \u8D70\u6D4F\u89C8\u5668\u539F\u751F\u4E0B\u8F7D\u3002 */\nvar DOWNLOAD_PROGRESS_LIMIT = 100 * 1024 * 1024\n\nasync function downloadFile(path) {\n setState({ menu: null })\n var res = await rpc('download', { path: path, sessionId: activeSessionId })\n if (!res.ok && /\u8D85\u51FA\u5141\u8BB8\u8303\u56F4/.test(res.error || '')) {\n await new Promise(function (r) { setTimeout(r, 600) })\n res = await rpc('download', { path: path, sessionId: activeSessionId })\n }\n if (!res || !res.ok) {\n setState({ error: (res && res.error) || T('explorer.downloadFail') })\n return\n }\n var name = res.name || baseName(path)\n var size = res.size || 0\n // \u5927\u6587\u4EF6\uFF1A\u6D4F\u89C8\u5668\u539F\u751F\u4E0B\u8F7D\uFF08\u6D41\u5F0F\u843D\u76D8\u3001\u96F6\u5185\u5B58\uFF09\uFF0C\u65E0\u8FDB\u5EA6\n if (size > DOWNLOAD_PROGRESS_LIMIT) {\n var a = document.createElement('a')\n a.href = res.url\n a.download = name\n document.body.appendChild(a)\n a.click()\n a.remove()\n showNotice(T('explorer.downloadStart', { name: name }))\n return\n }\n // \u4E2D\u5C0F\u6587\u4EF6\uFF1Afetch \u6D41\u5F0F\u8BFB\u5B57\u8282\u8BA1\u8FDB\u5EA6\uFF0C\u5B8C\u6210\u540E Blob \u53E6\u5B58\uFF08\u5CF0\u503C\u2248\u6587\u4EF6\u4F53\u79EF\uFF09\n updateUpload(name, 0, size, 0, 1, true)\n try {\n var r = await fetch(res.url)\n if (!r.ok) throw new Error('HTTP ' + r.status)\n var total = Number(r.headers.get('content-length')) || size\n var reader = r.body.getReader()\n var received = 0\n var chunks = []\n for (;;) {\n var part = await reader.read()\n if (part.done) break\n chunks.push(part.value)\n received += part.value.length\n updateUpload(name, received, total, 0, 1, true)\n }\n var blobUrl = URL.createObjectURL(new Blob(chunks))\n var da = document.createElement('a')\n da.href = blobUrl\n da.download = name\n document.body.appendChild(da)\n da.click()\n da.remove()\n window.setTimeout(function () { URL.revokeObjectURL(blobUrl) }, 5000)\n finishUploads(1, 1, '', true)\n } catch (err) {\n setState({ error: T('explorer.downloadFailWith', { reason: String((err && err.message) || err) }), uploads: [] })\n }\n}\n\nfunction onUploadPicker(e) {\n var files = Array.from((e.target && e.target.files) || [])\n uploadFiles(state.cwd, files)\n e.target.value = ''\n}\n\n// ------------------------------------------------------------------\n// ------------------------------------------------------------------\n// \u2593\u2593 \u533A\u57DF\u4E00 \u00B7 \u8D44\u6E90\u7BA1\u7406\u5668 \u00B7 \uD83E\uDDC5 \u8471\uFF08\u5217\u8868 UI\uFF09\n// NameInput / Row / buildMenuItems / Menu\uFF1A\u884C\u6E32\u67D3\u3001\u591A\u9009\u3001\u53F3\u952E\u83DC\u5355\u3001\u91CD\u547D\u540D/\u65B0\u5EFA\u3002\n// ------------------------------------------------------------------\nfunction NameInput(props) {\n var initial = props.initial\n var selectBase = props.selectBase !== false\n var onCommit = props.onCommit\n var onCancel = props.onCancel\n var valState = React.useState(initial)\n var val = valState[0]\n var setVal = valState[1]\n var settled = React.useRef(false)\n var inputRef = React.useRef(null)\n React.useEffect(function () {\n var el = inputRef.current\n if (!el) return\n el.focus()\n if (selectBase) {\n var dot = initial.lastIndexOf('.')\n if (dot <= 0) el.select(); else el.setSelectionRange(0, dot)\n } else {\n el.select()\n }\n }, [])\n function settle(fn) { if (settled.current) return; settled.current = true; fn() }\n return create('input', {\n ref: inputRef,\n type: 'text',\n value: val,\n spellCheck: false,\n autoComplete: 'off',\n className: 'expl-inline-input',\n onChange: function (e) { setVal(e.target.value) },\n onClick: function (e) { e.stopPropagation() },\n onBlur: function () { settle(function () { onCommit(val) }) },\n onKeyDown: function (e) {\n if (e.key === 'Enter') { e.preventDefault(); e.stopPropagation(); settle(function () { onCommit(val) }) }\n else if (e.key === 'Escape') { e.preventDefault(); e.stopPropagation(); settle(function () { onCancel() }) }\n },\n })\n}\n\nfunction Row(props) {\n var node = props.node\n var depth = props.depth\n var isDir = node.type === 'directory'\n var isSelected = state.selected.has(node.path)\n var isRenaming = state.renaming === node.path\n var isDropTarget = state.dropTarget === node.path\n visibleRows.push(node.path)\n\n var rowMain = create('div', {\n className: 'expl-row-main' + (isSelected ? ' selected' : '') + (isDropTarget ? ' drop-target' : ''),\n 'data-path': node.path,\n style: { paddingLeft: 8 + depth * 16 },\n draggable: true,\n onClick: function (e) { onRowClick(e, node) },\n onDoubleClick: function () { onRowDoubleClick(node) },\n onContextMenu: function (e) { onRowContext(e, node) },\n onDragStart: function (e) { onDragStart(e, node) },\n onDragOver: function (e) { if (isDir) { e.preventDefault(); e.stopPropagation(); if (state.dropTarget !== node.path) setState({ dropTarget: node.path }) } },\n onDragLeave: function (e) { if (state.dropTarget === node.path) setState({ dropTarget: null }) },\n onDrop: function (e) { if (isDir) onRowDrop(e, node) },\n },\n create('span', {\n className: 'expl-caret' + (isDir ? ' expl-caret-big' : ' expl-caret-sm'),\n onClick: function (e) { if (isDir) { e.stopPropagation(); toggleNode(node) } },\n }, isDir ? (node.open ? '\u25BE' : '\u25B8') : '\u00B7'),\n create('span', { className: 'expl-icon', dangerouslySetInnerHTML: { __html: iconSvgFor(node) } }),\n isRenaming\n ? create(NameInput, {\n initial: node.name,\n selectBase: true,\n onCommit: function (name) { commitRename(node.path, name) },\n onCancel: function () { setState({ renaming: null }) },\n })\n : create('span', { className: 'expl-name' }, node.name),\n !isDir ? create('span', { className: 'expl-size' }, formatSize(node.size)) : null,\n )\n\n var children = []\n if (state.newItem && state.newItem.parent === node.path && isDir && node.open) {\n children.push(create('div', { key: '__new__', className: 'expl-row' },\n create('div', { className: 'expl-row-main', style: { paddingLeft: 8 + (depth + 1) * 16 } },\n create('span', { className: 'expl-icon' }, state.newItem.isDir ? '\uD83D\uDCC1' : '\uD83D\uDCC4'),\n create(NameInput, {\n initial: '',\n selectBase: false,\n onCommit: function (name) { commitNew(state.newItem.parent, name, state.newItem.isDir) },\n onCancel: function () { setState({ newItem: null }) },\n }),\n ),\n ))\n }\n if (isDir && node.open) {\n if (node.loading) {\n children.push(create('div', { key: '__loading__', className: 'expl-muted', style: { paddingLeft: 8 + (depth + 1) * 16 } }, T('files.loading')))\n } else {\n ;(node.children || []).forEach(function (c) { children.push(create(Row, { key: c.path, node: c, depth: depth + 1 })) })\n }\n }\n\n return create('div', { key: node.path, className: 'expl-row' }, rowMain, children)\n}\n\nfunction buildMenuItems(node) {\n var items = []\n var multi = state.selected.size > 1\n if (node) {\n if (!multi) {\n if (node.type !== 'directory') {\n items.push({ key: 'open-tab', label: T('menu.preview'), onClick: function () { openFileInTab(node.path) } })\n items.push({ key: 'open', label: T('menu.open'), onClick: openSelection, separatorAfter: true })\n } else {\n items.push({ key: 'open', label: T('menu.open'), onClick: openSelection, separatorAfter: true })\n }\n items.push({ key: 'rename', label: T('menu.rename'), onClick: function () { startRename(node) } })\n items.push({ key: 'trash', label: T('menu.trash'), danger: true, onClick: trashSelection, separatorAfter: true })\n } else {\n items.push({ key: 'trash', label: T('menu.trashMulti', { n: state.selected.size }), danger: true, onClick: trashSelection, separatorAfter: true })\n }\n if (node.type === 'directory') {\n items.push({ key: 'newfile', label: T('menu.newFile'), onClick: function () { startNew(node.path, false) } })\n items.push({ key: 'newfolder', label: T('menu.newFolder'), onClick: function () { startNew(node.path, true) }, separatorAfter: true })\n }\n items.push({ key: 'copy', label: T('menu.copyPath'), onClick: function () { copyPath(node) } })\n if (node.type !== 'directory') {\n items.push({ key: 'download', label: T('menu.download'), onClick: function () { downloadFile(node.path) } })\n }\n } else {\n items.push({ key: 'newfile', label: T('menu.newFile'), onClick: function () { startNew(state.cwd, false) } })\n items.push({ key: 'newfolder', label: T('menu.newFolder'), onClick: function () { startNew(state.cwd, true) } })\n items.push({ key: 'refresh', label: [create('span', { className: 'expl-menu-ico', dangerouslySetInnerHTML: { __html: ICON_REFRESH } }), T('explorer.refresh')], onClick: refresh, separatorAfter: true })\n if (state.selected.size > 0) items.push({ key: 'none', label: T('menu.deselect'), onClick: function () { setState({ selected: new Set(), lastIndex: null }) } })\n }\n return items\n}\n\nfunction Menu(props) {\n var menu = props.menu\n var menuRef = React.useRef(null)\n var posState = React.useState({ x: menu.x, y: menu.y })\n var pos = posState[0]\n var setPos = posState[1]\n React.useEffect(function () {\n var el = menuRef.current\n if (!el) return\n var rect = el.getBoundingClientRect()\n var margin = 6\n var nx = menu.x\n var ny = menu.y\n if (menu.x + rect.width > window.innerWidth - margin) nx = Math.max(margin, window.innerWidth - rect.width - margin)\n if (menu.y + rect.height > window.innerHeight - margin) ny = Math.max(margin, window.innerHeight - rect.height - margin)\n setPos({ x: nx, y: ny })\n }, [menu.x, menu.y])\n React.useEffect(function () {\n if (typeof document === 'undefined') return\n function down(e) { if (menuRef.current && !menuRef.current.contains(e.target)) setState({ menu: null }) }\n function key(e) { if (e.key === 'Escape') setState({ menu: null }) }\n document.addEventListener('mousedown', down)\n document.addEventListener('keydown', key)\n return function () {\n document.removeEventListener('mousedown', down)\n document.removeEventListener('keydown', key)\n }\n }, [])\n\n var items = buildMenuItems(menu.node)\n var menuChildren = []\n items.forEach(function (it) {\n menuChildren.push(create('button', {\n key: it.key,\n className: 'expl-menu-item' + (it.danger ? ' expl-danger' : ''),\n onClick: function () { setState({ menu: null }); it.onClick() },\n }, it.label))\n if (it.separatorAfter) menuChildren.push(create('div', { key: it.key + '-sep', className: 'expl-menu-sep' }))\n })\n return create('div', { ref: menuRef, className: 'expl-menu', style: { left: pos.x, top: pos.y } }, menuChildren)\n}\n\n// ------------------------------------------------------------------\n// ------------------------------------------------------------------\n// \u2593\u2593 \u533A\u57DF\u4E00 \u00B7 \u8D44\u6E90\u7BA1\u7406\u5668 \u00B7 \uD83E\uDDC5 \u8471\uFF08\u9762\u677F\u4E0E\u5165\u53E3\uFF09\n// Panel\uFF08\u53F3\u5217 details \u9762\u677F\uFF09/ HeaderAction\uFF08Session log \u4FA7 \uD83D\uDCC1\uFF09/ HeroAction\uFF08\u7A7A\u767D\u4F1A\u8BDD \uD83D\uDCC1\uFF09\u3002\n// ------------------------------------------------------------------\nfunction Panel(props) {\n var s = useStore()\n var sessionId = props && props.sessionId\n // \u5BA2\u6237\u7AEF\u4F1A\u8BDD\u5FEB\u7167\u662F\u672C\u4F1A\u8BDD cwd \u7684\u53EF\u4FE1\u6765\u6E90\uFF08\u4E0E\u5B98\u65B9 DetailsPanel \u540C\u6E90\uFF0C\n // \u59CB\u7EC8\u662F\u5F53\u524D\u4F1A\u8BDD\u6240\u5728\u9879\u76EE\u76EE\u5F55\uFF0C\u800C\u975E\u5BBF\u4E3B\u542F\u52A8\u65F6\u7684\u6839\u76EE\u5F55\uFF09\u3002\n var useSessions = props && props.useSessions\n var liveCwd = useSessions ? useSessions(function (list) {\n return (sessionId && list.byId[sessionId]) ? list.byId[sessionId].cwd : undefined\n }) : undefined\n var cwdRef = React.useRef(liveCwd)\n cwdRef.current = liveCwd || cwdRef.current\n var panelRef = React.useRef(null)\n var frameRef = React.useRef(null)\n var widthRef = React.useRef(DETAILS_DEFAULT)\n var dragRef = React.useRef({ startX: 0, startW: 0, active: false })\n\n React.useEffect(function () { trackSession(sessionId, cwdRef.current) }, [sessionId])\n\n var setFrameWidth = React.useCallback(function (w) {\n var frame = frameRef.current\n if (!frame) return\n try {\n var gtc = frame.style.gridTemplateColumns\n if (!gtc) return\n var parts = gtc.trim().split(/\\s+/)\n if (parts.length < 3) return\n parts[parts.length - 1] = Math.round(w) + 'px'\n frame.style.gridTemplateColumns = parts.join(' ')\n } catch (e) {}\n }, [])\n\n React.useEffect(function () {\n var el = panelRef.current\n if (!el) return\n var mo = null\n var cancelled = false\n function attach() {\n var frame = findFrameEl(el)\n if (!frame || mo) return\n frameRef.current = frame\n function sync() {\n try {\n var gtc = frame.style.gridTemplateColumns\n if (!gtc) return\n var parts = gtc.trim().split(/\\s+/)\n if (parts.length < 3) return\n var last = parseFloat(parts[parts.length - 1])\n if (isNaN(last) || last <= 1) { setState({ open: false }); return }\n setState({ open: true })\n if (Math.round(last) !== Math.round(widthRef.current)) {\n parts[parts.length - 1] = Math.round(widthRef.current) + 'px'\n frame.style.gridTemplateColumns = parts.join(' ')\n }\n } catch (e) {}\n }\n mo = new MutationObserver(sync)\n mo.observe(frame, { attributes: true, attributeFilter: ['style'] })\n sync()\n }\n attach()\n if (!mo) {\n var tries = 0\n var t = setInterval(function () {\n if (cancelled || mo) { clearInterval(t); return }\n attach()\n if (++tries > 40) clearInterval(t)\n }, 100)\n }\n return function () { cancelled = true; if (mo) mo.disconnect() }\n }, [])\n\n function onResizeDown(e) {\n e.preventDefault()\n try { e.currentTarget.setPointerCapture(e.pointerId) } catch (err) {}\n dragRef.current = { startX: e.clientX, startW: widthRef.current, active: true }\n if (frameRef.current) { try { frameRef.current.style.transition = 'none' } catch (e) {} }\n }\n function onResizeMove(e) {\n if (!dragRef.current.active) return\n var w = clampW(dragRef.current.startW - (e.clientX - dragRef.current.startX))\n widthRef.current = w\n setFrameWidth(w)\n }\n function onResizeUp(e) {\n dragRef.current.active = false\n try { e.currentTarget.releasePointerCapture(e.pointerId) } catch (err) {}\n if (frameRef.current) { try { frameRef.current.style.transition = '' } catch (e) {} }\n }\n\n visibleRows.length = 0\n\n var bodyChildren = []\n if (state.newItem && state.newItem.parent === state.cwd) {\n bodyChildren.push(create('div', { key: '__new__', className: 'expl-row' },\n create('div', { className: 'expl-row-main', style: { paddingLeft: 8 } },\n create('span', { className: 'expl-icon' }, state.newItem.isDir ? '\uD83D\uDCC1' : '\uD83D\uDCC4'),\n create(NameInput, {\n initial: '',\n selectBase: false,\n onCommit: function (name) { commitNew(state.newItem.parent, name, state.newItem.isDir) },\n onCancel: function () { setState({ newItem: null }) },\n }),\n ),\n ))\n }\n if (s.tree.length === 0 && !(state.newItem && state.newItem.parent === state.cwd)) {\n bodyChildren.push(create('div', { key: '__empty__', className: 'expl-muted' }, T('explorer.emptyDir')))\n } else {\n s.tree.forEach(function (node) { bodyChildren.push(create(Row, { key: node.path, node: node, depth: 0 })) })\n }\n\n var container = create('div', {\n className: 'expl-body' + (state.dropTarget === state.cwd ? ' drop-target' : ''),\n onClick: onBlankClick,\n onContextMenu: onBlankContext,\n onDragOver: function (e) { e.preventDefault(); e.stopPropagation(); if (state.dropTarget !== state.cwd) setState({ dropTarget: state.cwd }) },\n onDragLeave: function (e) { if (state.dropTarget === state.cwd) setState({ dropTarget: null }) },\n onDrop: onBodyDrop,\n }, bodyChildren)\n\n return create('div', { ref: panelRef, className: 'expl-panel' },\n create('div', { className: 'expl-resize', onPointerDown: onResizeDown, onPointerMove: onResizeMove, onPointerUp: onResizeUp, onPointerCancel: onResizeUp }),\n create('div', { className: 'expl-head' },\n create('span', { className: 'expl-title' }, T('explorer.title')),\n create('div', { className: 'expl-head-btns' },\n create('button', {\n className: 'expl-btn',\n onClick: function () { refreshAll() },\n title: T('explorer.refreshTitle'),\n 'aria-label': T('explorer.refresh'),\n }, create('span', { className: 'expl-icon', dangerouslySetInnerHTML: { __html: ICON_REFRESH } })),\n create('button', {\n className: 'expl-btn',\n onClick: function () { if (uploadInputEl) uploadInputEl.click() },\n title: T('explorer.upload'),\n 'aria-label': T('explorer.upload'),\n }, '\u2B06'),\n create('button', {\n className: 'expl-btn',\n onClick: function (event) {\n try { layout.closeDetails() } catch (e) {}\n setHeroDetailsWidth(event.currentTarget, 0)\n },\n title: T('explorer.close'),\n 'aria-label': T('explorer.closePanel'),\n }, '\u2715'),\n ),\n ),\n create('div', { className: 'expl-path', title: s.cwd || '' }, s.cwd || '\u2026'),\n (s.uploads && s.uploads.length) ? create('div', { className: 'expl-uploads' },\n s.uploads.map(function (u, i) {\n var pct = u.done ? null : (u.total ? Math.round((u.loaded / u.total) * 100) : 0)\n return create('div', { key: i, className: 'expl-upload-row' + (u.done ? ' expl-upload-done' : '') },\n create('span', { className: 'expl-upload-glyph' }, u.done ? '\u2713' : (u.down ? '\u2B07' : '\u2B06')),\n create('span', { className: 'expl-upload-text' },\n u.done ? u.name\n : (u.down ? T('explorer.downloading') : T('explorer.uploading')) + (u.totalFiles > 1 ? '(' + u.idx + '/' + u.totalFiles + ') ' : '') + u.name,\n ),\n !u.done && u.total ? create('span', { className: 'expl-upload-pct' }, pct + '%') : null,\n )\n }),\n ) : null,\n create('input', { type: 'file', multiple: true, style: { display: 'none' }, ref: function (el) { uploadInputEl = el }, onChange: onUploadPicker }),\n s.error ? create('div', { className: 'expl-error' }, s.error) : null,\n s.notice ? create('div', { className: 'expl-notice' }, s.notice) : null,\n s.selected.size > 1\n ? create('div', { className: 'expl-bulk' }, T('explorer.bulkSelected', { n: s.selected.size }))\n : null,\n container,\n s.menu ? create('div', { className: 'expl-menu-mask', onMouseDown: function () { setState({ menu: null }) }, onContextMenu: function (e) { e.preventDefault(); setState({ menu: null }) } }) : null,\n s.menu ? create(Menu, { menu: s.menu }) : null,\n )\n}\n\nfunction HeaderAction(props) {\n var s = useStore()\n var sessionId = props && props.sessionId\n var useSessions = props && props.useSessions\n var liveCwd = useSessions ? useSessions(function (list) {\n return (sessionId && list.byId[sessionId]) ? list.byId[sessionId].cwd : undefined\n }) : undefined\n var cwdRef = React.useRef(liveCwd)\n cwdRef.current = liveCwd || cwdRef.current\n React.useEffect(function () { trackSession(sessionId, cwdRef.current) }, [sessionId])\n return create('button', {\n type: 'button',\n className: 'expl-toggle expl-tool' + (s.open ? ' expl-active' : ''),\n onClick: function () { try { if (s.open) layout.closeDetails(); else layout.openDetails() } catch (e) {} },\n title: T('explorer.label'),\n 'aria-label': T('explorer.label'),\n }, '\uD83D\uDCC1')\n}\n\nfunction HeroAction(props) {\n var s = useStore()\n var session = props && props.session\n var useSessions = props && props.useSessions\n var liveCwd = useSessions ? useSessions(function (list) {\n return (props.sessionId && list.byId[props.sessionId]) ? list.byId[props.sessionId].cwd : undefined\n }) : undefined\n var blank = !!(session && session.blank && session.composerPhase === 'blank')\n React.useEffect(function () {\n if (blank) trackSession(props.sessionId, liveCwd)\n }, [blank, props.sessionId])\n if (!blank) return null\n return create('div', { className: 'expl-hero-dock' },\n create('button', {\n type: 'button',\n className: 'expl-toggle expl-tool' + (s.open ? ' expl-active' : ''),\n onClick: function (event) {\n if (s.open) {\n try { layout.closeDetails() } catch (e) {}\n setHeroDetailsWidth(event.currentTarget, 0)\n } else if (!setHeroDetailsWidth(event.currentTarget, DETAILS_DEFAULT)) {\n try { layout.openDetails() } catch (e) {}\n }\n },\n title: T('explorer.label'),\n 'aria-label': T('explorer.label'),\n }, '\uD83D\uDCC1'))\n}\n\n// ------------------------------------------------------------------\n// ------------------------------------------------------------------\n// \u2593\u2593 \u533A\u57DF\u4E8C \u00B7 \u4F1A\u8BDD\u5185\u9884\u89C8 \u00B7 \uD83E\uDEDA \u59DC\uFF08files tab \u72B6\u6001\uFF09\n// files tab \u72B6\u6001\u673A\uFF1A\u6253\u5F00/\u91CD\u8F7D/\u5173\u95ED\u3001FIFO(\u22645)\u3001\u4F1A\u8BDD\u5207\u6362\u6309 cwd \u88C1\u526A\u3002\n// ------------------------------------------------------------------\n// \u6587\u4EF6\u6807\u7B7E\u9875\uFF1A\u53F3\u952E/\u53CC\u51FB\u300C\u9884\u89C8\u300D\u628A\u6587\u4EF6\u4EE5\u53EA\u8BFB\u9884\u89C8\u5C55\u793A\u8FDB\u4F1A\u8BDD\u533A\u7684\u300C\u9884\u89C8\u300D\n// tab\uFF08\u539F\u751F conversation.view \u69FD\u4F4D\uFF0C\u4E0E \u5BF9\u8BDD/\u8F68\u8FF9 \u540C\u7EA7\uFF09\u3002\n// markdown/html/json/csv \u6709\u4E13\u5C5E\u6E32\u67D3\u5668\uFF1B\u56FE\u7247\u9884\u89C8\uFF1B\u5176\u4F59\u6309\u7EAF\u6587\u672C\u3002\n// \u72B6\u6001\u5B58\u6A21\u5757\u7EA7 store\uFF0C\u5207\u8D70 tab \u518D\u5207\u56DE\u6765\u5185\u5BB9\u4E0D\u4E22\u3002\n// ------------------------------------------------------------------\nvar FILES_TAB_LABEL = function () { return T('files.tab') }\n\n/** \u5F53\u524D\u6D3B\u8DC3\u4F1A\u8BDD\uFF1Alist/read/download \u643A\u5E26\u7ED9\u5BBF\u4E3B\uFF0C\u4F9B\u56F4\u680F\u76F4\u67E5\u8BE5\u4F1A\u8BDD cwd\u3002 */\nvar activeSessionId = null\n\n/** \u540C\u65F6\u6253\u5F00\u7684\u9884\u89C8 tab \u4E0A\u9650\uFF1A\u8D85\u8FC7\u540E\u6324\u6389\u6700\u65E9\u6253\u5F00\u7684\uFF08FIFO\uFF09\u3002 */\nvar FILES_MAX_OPEN = 5\n\n/** path \u662F\u5426\u843D\u5728 base \u76EE\u5F55\u5B50\u6811\u5185\uFF08base \u4E3A\u6839\u6216\u7A7A\u65F6\u89C6\u4E3A\u5168\u91CF\u653E\u884C\uFF09\u3002 */\nfunction withinScope(path, base) {\n if (!base || base === '/') return true\n return path === base || path.indexOf(base + '/') === 0\n}\n\n/**\n * \u4F1A\u8BDD\u5207\u6362\u65F6\u6309\u65B0 cwd \u88C1\u526A\u9884\u89C8\u5217\u8868\uFF1A\u8303\u56F4\u5916\u7684 tab \u81EA\u52A8\u5173\u95ED\u3002\n * \u82E5\u5F53\u524D\u6FC0\u6D3B\u6587\u4EF6\u88AB\u88C1\u6389\uFF0C\u6FC0\u6D3B\u9879\u987A\u79FB\u5230\u5269\u4F59\u6700\u540E\u4E00\u4E2A\u3002\n * \u5217\u8868\u65E0\u53D8\u5316\u65F6\u8FD4\u56DE\u539F\u5F15\u7528\uFF0C\u907F\u514D\u89E6\u53D1\u591A\u4F59\u6E32\u67D3\u3002\n */\nfunction pruneFilesToScope(files, cwd) {\n var kept = files.list.filter(function (f) { return withinScope(f.path, cwd) })\n try { window.__DFV_PRUNE = (window.__DFV_PRUNE || []) ; window.__DFV_PRUNE.push({ cwd: cwd, before: files.list.length, after: kept.length }) } catch (_) {}\n if (kept.length === files.list.length) return files\n var activeKept = kept.some(function (f) { return f.path === files.active })\n var active = files.active\n if (!activeKept) active = kept.length ? kept[kept.length - 1].path : null\n return { list: kept, active: active }\n}\n\nfunction setFiles(patch) {\n setState({ files: Object.assign({}, state.files, patch) })\n try {\n var f = state.files\n window.__DFV_DBG = { n: f.list.length, active: f.active, ops: ((window.__DFV_DBG && window.__DFV_DBG.ops) || 0) + 1 }\n } catch (_) {}\n}\n\nfunction findFileEntry(path) {\n for (var i = 0; i < state.files.list.length; i++) {\n if (state.files.list[i].path === path) return state.files.list[i]\n }\n return null\n}\n\n/** \u70B9\u51FB\u539F\u751F header \u7684\u300C\u9884\u89C8\u300Dtab\uFF0C\u628A view ring \u5207\u5230\u9884\u89C8\u89C6\u56FE\u3002 */\nfunction activateFilesView() {\n try {\n var tabs = document.querySelectorAll('[role=\"tab\"]')\n for (var i = 0; i < tabs.length; i++) {\n if (tabs[i].textContent === FILES_TAB_LABEL()) { tabs[i].click(); return true }\n }\n } catch (err) {}\n return false\n}\n\nasync function openFileInTab(path) {\n setState({ menu: null })\n var entry = findFileEntry(path)\n if (!entry) {\n entry = {\n path: path, name: baseName(path),\n loading: true, loaded: false, error: '',\n kind: null, content: '', dataUrl: '', data: '',\n truncated: false, size: 0,\n }\n // FIFO\uFF1A\u6700\u591A\u540C\u65F6 5 \u4E2A\u9884\u89C8\uFF0C\u65B0\u5F00\u7684\u6324\u6389\u6700\u65E9\u6253\u5F00\u7684\n var list = state.files.list.slice()\n while (list.length >= FILES_MAX_OPEN) list.shift()\n list.push(entry)\n setFiles({ list: list, active: path })\n } else if (entry.loaded) {\n setFiles({ active: path })\n if (activateFilesView()) return\n setFiles({ overlay: true, overlayMax: false, overlayReturn: null })\n return\n } else {\n setFiles({ active: path })\n }\n if (!activateFilesView()) setFiles({ overlay: true, overlayMax: false, overlayReturn: null })\n var res = await rpc('read', { path: path, sessionId: activeSessionId })\n if (!res.ok && /\u8D85\u51FA\u5141\u8BB8\u8303\u56F4/.test(res.error || '')) {\n await new Promise(function (r) { setTimeout(r, 600) })\n res = await rpc('read', { path: path, sessionId: activeSessionId })\n }\n var cur = findFileEntry(path)\n if (!cur) return\n cur.loading = false\n if (!res || !res.ok) {\n cur.error = (res && res.error) || T('explorer.readFail')\n } else {\n cur.error = ''\n cur.loaded = true\n cur.kind = res.kind\n cur.size = res.size || 0\n if (res.kind === 'text') { cur.content = res.content; cur.truncated = !!res.truncated }\n else if (res.kind === 'image') { cur.dataUrl = 'data:' + res.mime + ';base64,' + res.data }\n else if (res.kind === 'pdf') { cur.data = res.data }\n }\n setFiles({ list: state.files.list.slice(), active: path })\n}\n\nasync function reloadFile(path) {\n var entry = findFileEntry(path)\n if (!entry) return\n // \u590D\u4F4D loaded\uFF0C\u8BA9 openFileInTab \u8D70\u91CD\u8BFB\u8DEF\u5F84\u800C\u4E0D\u662F\u300C\u5DF2\u6253\u5F00\u76F4\u63A5\u6FC0\u6D3B\u300D\u3002\n entry.loaded = false\n await openFileInTab(path)\n}\n\nfunction closeFileTab(path) {\n var list = state.files.list\n var idx = -1\n for (var i = 0; i < list.length; i++) if (list[i].path === path) { idx = i; break }\n if (idx < 0) return\n var next = list.slice(0, idx).concat(list.slice(idx + 1))\n var active = state.files.active\n if (active === path) {\n var neighbor = next[Math.min(idx, next.length - 1)]\n active = neighbor ? neighbor.path : null\n }\n setFiles({ list: next, active: active })\n}\n\nfunction setActiveFile(path) {\n setFiles({ active: path })\n}\n\n// ------------------------------------------------------------------\n// \u2593\u2593 \u533A\u57DF\u4E8C \u00B7 \u4F1A\u8BDD\u5185\u9884\u89C8 \u00B7 \uD83E\uDEDA \u59DC\uFF08\u6E32\u67D3\u5668\uFF09\n// \u6309\u6269\u5C55\u540D\u5206\u6D3E md/html/pdf/notebook/json/csv + \u56FE\u7247/\u7EAF\u6587\u672C\u515C\u5E95 + FileContent + FilesView \u5B50\u6807\u7B7E\u6761\u3002\n// ------------------------------------------------------------------\n// \u6587\u4EF6\u89C6\u56FE\uFF08conversation.view 'dsh-soup-files'\uFF09\uFF1A\n// \u5B50 tab \u6761 + \u53EA\u8BFB\u9884\u89C8\u533A\uFF08markdown/html/json/csv \u6E32\u67D3 / \u56FE\u7247\u9884\u89C8 / \u4E8C\u8FDB\u5236\u63D0\u793A\uFF09\u3002\n// ------------------------------------------------------------------\n// ------------------------------------------------------------------\n// \u9884\u89C8\u6E32\u67D3\u5668\uFF1A\u6309\u6269\u5C55\u540D\u5206\u6D3E\uFF08\u4FE1\u4EFB\u6A21\u578B\u53C2\u8003 JupyterLab viewer\u2014\u2014\n// markdown \u8D70\u4E0D\u53EF\u4FE1\u5B89\u5168\u6E32\u67D3\u7BA1\u7EBF\uFF0Chtml \u8FDB\u65E0 allow-* \u7684\u6C99\u7BB1 iframe\uFF09\u3002\n// ------------------------------------------------------------------\n/** \u53D6\u8DEF\u5F84\u5C0F\u5199\u6269\u5C55\u540D\u3002 */\nfunction extOfName(p) {\n var m = /\\.([A-Za-z0-9]+)$/.exec(String(p || ''))\n return m ? m[1].toLowerCase() : ''\n}\n\n/** \u9884\u89C8\u6E32\u67D3\u5668\u7C7B\u578B\uFF1Amarkdown | html | json | csv | tsv | notebook | code | text\u3002 */\nfunction previewKind(path) {\n var ext = extOfName(path)\n if (ext === 'md' || ext === 'markdown') return 'markdown'\n if (ext === 'html' || ext === 'htm') return 'html'\n if (ext === 'json') return 'json'\n if (ext === 'ipynb') return 'notebook'\n if (ext === 'csv') return 'csv'\n if (ext === 'tsv') return 'tsv'\n return 'text'\n}\n\n// \u6269\u5C55\u540D \u2192 Shiki \u8BED\u8A00\u63D0\u793A\u3002\u5BF9\u9F50 DSH \u8BFB\u5361\u7247\u7684 LANG_BY_EXTENSION\n// \uFF08packages/fs/tool-fs read-render.ts\uFF09\uFF0Cjson/md/markdown/html/htm \u9664\u5916\u2014\u2014\n// \u5B83\u4EEC\u8D70\u4E0A\u65B9\u4E13\u5C5E\u6E32\u67D3\u5668\u3002\nvar CODE_LANG_BY_EXT = {\n ts: 'ts', tsx: 'tsx', mts: 'ts', cts: 'ts',\n js: 'js', jsx: 'jsx', mjs: 'js', cjs: 'js',\n jsonc: 'json',\n py: 'py', rb: 'rb', go: 'go', rs: 'rs', java: 'java',\n c: 'c', h: 'c', cc: 'cpp', cpp: 'cpp', hpp: 'cpp', cxx: 'cpp',\n cs: 'cs', kt: 'kotlin', swift: 'swift', php: 'php',\n sh: 'sh', bash: 'sh', zsh: 'sh',\n yaml: 'yaml', yml: 'yaml', toml: 'toml', ini: 'ini',\n mdx: 'mdx', css: 'css', scss: 'scss', less: 'less',\n sql: 'sql', xml: 'xml', lua: 'lua',\n}\n\n/** \u8D85\u8FC7\u8BE5\u5B57\u7B26\u6570\u7684\u4EE3\u7801\u6587\u4EF6\u4E0D\u505A\u9AD8\u4EAE\uFF08Shiki \u9996\u6B21\u9AD8\u4EAE\u7684\u8017\u65F6\u4FDD\u62A4\uFF09\u3002 */\nvar CODE_HIGHLIGHT_MAX_CHARS = 400000\n\n/** RFC 4180 \u98CE\u683C\u7684\u5206\u9694\u7B26\u89E3\u6790\uFF08\u5F15\u53F7\u611F\u77E5\uFF0C\"\" \u8F6C\u4E49\uFF09\uFF0C\u8FD4\u56DE\u884C\u6570\u7EC4\u3002 */\nfunction parseDelimited(text, delim) {\n var rows = []\n var row = []\n var field = ''\n var inQuotes = false\n var n = text.length\n for (var i = 0; i < n; i++) {\n var ch = text[i]\n if (inQuotes) {\n if (ch === '\"') {\n if (text[i + 1] === '\"') { field += '\"'; i++ } else { inQuotes = false }\n } else {\n field += ch\n }\n } else if (ch === '\"') {\n inQuotes = true\n } else if (ch === delim) {\n row.push(field); field = ''\n } else if (ch === '\\n') {\n row.push(field); rows.push(row); row = []; field = ''\n } else if (ch !== '\\r') {\n field += ch\n }\n }\n if (field !== '' || row.length > 0) { row.push(field); rows.push(row) }\n return rows\n}\n\n/** \u628A pretty JSON \u5207\u6210\u7740\u8272 token \u6570\u7EC4\uFF08\u7EAF\u6587\u672C/React \u8282\u70B9\uFF0C\u65E0 innerHTML\uFF09\u3002 */\nfunction jsonColorNodes(pretty) {\n var out = []\n var last = 0\n var re = /(\"(?:\\\\.|[^\"\\\\])*\")(\\s*:)?|\\btrue\\b|\\bfalse\\b|\\bnull\\b|-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g\n var m\n while ((m = re.exec(pretty)) !== null) {\n if (m.index > last) out.push(pretty.slice(last, m.index))\n if (m[1] !== undefined) {\n out.push(create('span', { key: out.length, className: m[2] ? 'dfv-tok-key' : 'dfv-tok-str' }, m[1]))\n if (m[2]) out.push(m[2])\n } else if (m[0] === 'true' || m[0] === 'false') {\n out.push(create('span', { key: out.length, className: 'dfv-tok-bool' }, m[0]))\n } else if (m[0] === 'null') {\n out.push(create('span', { key: out.length, className: 'dfv-tok-null' }, m[0]))\n } else {\n out.push(create('span', { key: out.length, className: 'dfv-tok-num' }, m[0]))\n }\n last = re.lastIndex\n }\n if (last < pretty.length) out.push(pretty.slice(last))\n return out\n}\n\nvar CSV_MAX_ROWS = 500\nvar CSV_MAX_COLS = 64\n\n// ------------------------------------------------------------------\n// Markdown \u76F8\u5BF9\u56FE\u7247 \u2192 dsh-soup \u540C\u6E90 img \u7AEF\u70B9\u7EDD\u5BF9 URL\u3002\n// \u9884\u89C8 markdown \u65F6\uFF0CDSH \u7684 MarkdownText \u6E32\u67D3\u5668\u300C\u7981\u76F8\u5BF9\u94FE\u63A5/\u76F8\u5BF9\u8D44\u6E90\u300D\uFF0C\n// `![x](view.jpg)` \u8FD9\u7C7B\u76F8\u5BF9\u8DEF\u5F84\u56FE\u7247\u4F1A\u88AB\u76F4\u63A5\u4E22\u5F03\u3002\u56E0\u6B64\u628A src \u6539\u5199\u6210\n// \u672C\u63D2\u4EF6\u540C\u540D\u7AEF\u70B9\uFF08GET /api/dsh-soup/img\uFF09\u7684\u540C\u6E90\u7EDD\u5BF9\u5730\u5740\uFF0C\u4EA4\u7ED9 <img>\n// \u4ECE\u78C1\u76D8\u5185\u8054\u52A0\u8F7D\u3002\u7EDD\u5BF9\uFF08http/https/data \u7B49\uFF09\u4E0E\u6839\u76F8\u5BF9\u8DEF\u5F84\u653E\u884C\u4E0D\u5904\u7406\u3002\n// ------------------------------------------------------------------\nvar MD_IMG_RE = /!\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+[\"'][^\"']*[\"'])?\\)/g\nfunction posixResolve(dir, rel) {\n var combined = (String(dir || '/').replace(/\\/+$/, '') || '/') + '/' + String(rel)\n var out = []\n combined.split('/').forEach(function (seg) {\n if (seg === '' || seg === '.') return\n if (seg === '..') { if (out.length) out.pop(); return }\n out.push(seg)\n })\n return '/' + out.join('/')\n}\nfunction imgUrl(absPath) {\n return hostBase() + '/api/dsh-soup/img?p=' + encodeURIComponent(absPath)\n}\nfunction absolutizeMarkdownImages(text, baseDir) {\n if (!text) return text\n var dir = baseDir || '/'\n return text.replace(MD_IMG_RE, function (m0, alt, src) {\n var s = String(src || '').trim()\n if (/^(?:[a-z][a-z0-9+.-]*:|#|\\/)/i.test(s)) return m0\n return '![' + alt + '](' + imgUrl(posixResolve(dir, s)) + ')'\n })\n}\n\nfunction MarkdownPreview(props) {\n var text = props.text\n if (MarkdownText) {\n var md = props.baseDir ? absolutizeMarkdownImages(text, props.baseDir) : text\n return create('div', { className: 'dfv-md-wrap' },\n create('div', { className: 'dfv-md' }, create(MarkdownText, { text: md })))\n }\n // \u56DE\u9000\uFF1A\u5BBF\u4E3B\u7F3A ui-primitives \u65F6\u6309\u7EAF\u6587\u672C\u5C55\u793A\n return create('pre', { className: 'dfv-code' }, text)\n}\n\nfunction HtmlPreview(props) {\n // \u53EF\u4EA4\u4E92\u9884\u89C8\uFF1A\u7ED9 allow-scripts/popups/forms/modals\uFF08\u5BF9\u9F50 JupyterLab\n // trusted \u6863\uFF09\uFF0C\u4F46\u575A\u6301\u4E0D\u7ED9 allow-same-origin\u2014\u2014\u811A\u672C\u8DD1\u5728 opaque origin\uFF0C\n // \u89E6\u4E0D\u5230 GUI \u7684 DOM/\u5B58\u50A8/Cookie\uFF1Bsrcdoc \u6CE8\u5165 + no-referrer \u6536\u655B\u5916\u94FE\u3002\n // \u5FAE\u4FE1\u6587\u7AE0\u517C\u5BB9\uFF1A\u6B63\u6587 #js_content \u521D\u59CB visibility:hidden \u9760 JS \u5C55\u5F00\uFF0C\n // \u56FE\u7247\u7528 data-src \u61D2\u52A0\u8F7D\u9760 JS \u6362 src\u2014\u2014\u6C99\u7BB1\u91CC\u4E24\u8005\u90FD\u8DD1\u4E0D\u8D77\u6765\u3002\n // \u6CE8\u5165\u4E00\u6BB5 CSS \u5F3A\u5236\u663E\u793A\u6B63\u6587\uFF0C\u5E76\u9884\u5148\u628A data-src \u843D\u5230 src\u3002\n var text = props.text || ''\n if (text.indexOf('js_content') !== -1 || text.indexOf('data-src=') !== -1) {\n var inject = '<style>#js_content{visibility:visible!important;opacity:1!important;}</style>'\n if (/<\\/head>/i.test(text)) {\n text = text.replace(/<\\/head>/i, inject + '</head>')\n } else {\n text = inject + text\n }\n text = text.replace(/(<img\\b[^>]*?)\\sdata-src=/gi, '$1 src=')\n }\n return create('iframe', {\n className: 'dfv-frame',\n sandbox: 'allow-scripts allow-popups allow-forms allow-modals',\n referrerPolicy: 'no-referrer',\n title: props.title || T('files.htmlFrame'),\n srcDoc: text,\n })\n}\n\nfunction PdfPreview(props) {\n // \u5BF9\u9F50 JupyterLab pdf-extension\uFF1Abase64 \u2192 Blob \u2192 objectURL \u2192 \u539F\u751F\u67E5\u770B\u5668\n // \u5D4C\u5165\uFF08object \u6807\u7B7E\uFF09\u3002\u4E0D\u52A0 sandbox\u2014\u2014\u6E32\u67D3\u65B9\u662F\u6D4F\u89C8\u5668\u81EA\u5E26\u7684\u53D7\u4FE1 PDF \u67E5\u770B\u5668\u3002\n var st = React.useState({ url: null, error: '' })\n var state = st[0]\n var setSt = st[1]\n React.useEffect(function () {\n var cancelled = false\n var made = null\n fetch('data:application/pdf;base64,' + props.data)\n .then(function (r) { return r.blob() })\n .then(function (blob) {\n if (cancelled) { URL.revokeObjectURL(made); return }\n made = URL.createObjectURL(blob)\n setSt({ url: made, error: '' })\n })\n .catch(function (e) {\n if (!cancelled) setSt({ url: null, error: String((e && e.message) || e) })\n })\n return function () {\n cancelled = true\n if (made) URL.revokeObjectURL(made)\n }\n }, [props.data])\n if (state.error) return create('div', { className: 'dfv-error' }, T('files.pdfFail', { reason: state.error }))\n if (!state.url) return create('div', { className: 'dfv-empty' }, T('files.pdfLoading'))\n return create('object', {\n className: 'dfv-frame dfv-pdf',\n type: 'application/pdf',\n data: state.url,\n 'aria-label': T('files.pdfFrame'),\n }, T('files.pdfUnsupported'))\n}\n\n// ------------------------------------------------------------------\n// Notebook\uFF08.ipynb\uFF09\u9759\u6001\u9884\u89C8\uFF0CGitHub \u98CE\u683C\uFF1Amarkdown \u5355\u5143\u8D70 MarkdownText\uFF0C\n// \u4EE3\u7801\u5355\u5143\u8D70 CodeBlock\uFF1B\u8F93\u51FA\u6309 MIME \u62E9\u4F18\u6E32\u67D3\uFF08image > html > md > text\uFF09\u3002\n// \u8F93\u51FA HTML \u4E0E\u6587\u4EF6 HTML \u540C\u89C4\u2014\u2014\u65E0 allow-* \u6C99\u7BB1 iframe \u7981\u811A\u672C\u9632\u6CE8\u5165\u3002\n// ------------------------------------------------------------------\n/** notebook \u7684 source \u5B57\u6BB5\u662F string \u6216\u884C\u6570\u7EC4\uFF0C\u7EDF\u4E00\u6210\u5B57\u7B26\u4E32\u3002 */\nfunction nbSource(src) {\n return Array.isArray(src) ? src.join('') : String(src == null ? '' : src)\n}\n\n/** \u5265\u79BB traceback \u91CC\u7684 ANSI \u8F6C\u4E49\u5E8F\u5217\u3002 */\nfunction stripAnsi(s) {\n return String(s == null ? '' : s).replace(/\\u001b\\[[0-9;]*[A-Za-z]/g, '')\n}\n\nvar NB_MIME_PREF = ['image/png', 'image/jpeg', 'image/gif', 'image/svg+xml', 'text/html', 'text/markdown', 'text/latex', 'text/plain']\n\nfunction nbPickMime(data) {\n if (!data) return null\n for (var i = 0; i < NB_MIME_PREF.length; i++) {\n if (Object.prototype.hasOwnProperty.call(data, NB_MIME_PREF[i])) return NB_MIME_PREF[i]\n }\n return null\n}\n\n/** \u5185\u6838\u8BED\u8A00\u540D \u2192 Shiki \u63D0\u793A\uFF1B\u672A\u77E5\u8BED\u8A00\u7531 CodeBlock \u81EA\u52A8\u56DE\u9000\u7EAF\u6587\u672C\u3002 */\nvar NB_LANG_HINT = { python: 'py', r: 'r', julia: 'julia', javascript: 'js', typescript: 'ts', bash: 'sh', ruby: 'rb' }\n\nfunction NbOutput(props) {\n var out = props.out\n var t = out && out.output_type\n if (t === 'stream') {\n return create('pre', { className: 'dfv-nb-out' + (out.name === 'stderr' ? ' dfv-nb-out-err' : '') }, nbSource(out.text))\n }\n if (t === 'error') {\n var tb = (Array.isArray(out.traceback) ? out.traceback : []).map(stripAnsi).join('\\n')\n return create('div', { className: 'dfv-nb-error' },\n create('div', { className: 'dfv-nb-error-head' }, stripAnsi(out.ename) + ': ' + stripAnsi(out.evalue)),\n tb ? create('pre', { className: 'dfv-nb-trace' }, tb) : null)\n }\n if (t === 'execute_result' || t === 'display_data') {\n var mime = nbPickMime(out.data)\n if (!mime) return null\n if (mime === 'image/png' || mime === 'image/jpeg' || mime === 'image/gif') {\n return create('img', { className: 'dfv-nb-img', src: 'data:' + mime + ';base64,' + out.data[mime], alt: 'notebook output image' })\n }\n if (mime === 'image/svg+xml') {\n return create('img', { className: 'dfv-nb-img', src: 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(nbSource(out.data[mime])))), alt: 'notebook output svg' })\n }\n if (mime === 'text/html') {\n return create('iframe', { className: 'dfv-nb-html', sandbox: '', title: T('files.nbHtmlOut'), srcDoc: nbSource(out.data[mime]) })\n }\n if (mime === 'text/markdown' && MarkdownText) {\n return create('div', { className: 'dfv-md-wrap dfv-nb-md' }, create(MarkdownText, { text: nbSource(out.data[mime]) }))\n }\n var plain = Object.prototype.hasOwnProperty.call(out.data || {}, 'text/plain') ? out.data['text/plain'] : out.data[mime]\n return create('pre', { className: 'dfv-nb-out' }, nbSource(plain))\n }\n return null\n}\n\nfunction NotebookPreview(props) {\n var nb = null\n try { nb = JSON.parse(props.text) } catch (err) { nb = undefined }\n if (nb === undefined || typeof nb !== 'object' || nb === null) {\n return create(React.Fragment, null,\n create('div', { className: 'dfv-cap' }, T('files.nbFail')),\n create('pre', { className: 'dfv-code' }, props.text))\n }\n var cells = Array.isArray(nb.cells) ? nb.cells : []\n if (!cells.length && Array.isArray(nb.worksheets)) {\n // nbformat v3\uFF1Aworksheets[].cells \u6241\u5E73\u5408\u5E76\n for (var w = 0; w < nb.worksheets.length; w++) {\n cells = cells.concat(Array.isArray(nb.worksheets[w].cells) ? nb.worksheets[w].cells : [])\n }\n }\n var ks = nb.metadata && nb.metadata.kernelspec\n var kernelName = (ks && (ks.display_name || ks.name)) || ''\n var langName = nb.metadata && nb.metadata.language_info && nb.metadata.language_info.name\n var codeLang = (langName && Object.prototype.hasOwnProperty.call(NB_LANG_HINT, String(langName).toLowerCase()))\n ? NB_LANG_HINT[String(langName).toLowerCase()]\n : undefined\n\n var cellEls = cells.map(function (cell, i) {\n var ct = cell.cell_type\n var body = null\n if (ct === 'code') {\n var outputs = (Array.isArray(cell.outputs) ? cell.outputs : []).map(function (o, j) {\n return create(NbOutput, { key: j, out: o })\n })\n var codeSrc = nbSource(cell.source)\n body = create('div', { className: 'dfv-nb-cellbody' },\n create(CodeWithLines, { text: codeSrc },\n CodeBlock\n ? create(CodeBlock, { code: codeSrc, lang: codeLang })\n : create('pre', { className: 'dfv-code' }, codeSrc)),\n outputs.length ? create('div', { className: 'dfv-nb-outputs' }, outputs) : null)\n } else if (ct === 'markdown') {\n body = MarkdownText\n ? create('div', { className: 'dfv-md-wrap dfv-nb-cellbody' }, create(MarkdownText, { text: nbSource(cell.source) }))\n : create('pre', { className: 'dfv-code dfv-nb-cellbody' }, nbSource(cell.source))\n } else {\n body = create('pre', { className: 'dfv-code dfv-nb-cellbody dfv-nb-raw' }, nbSource(cell.source))\n }\n var badge = ct === 'code'\n ? '[' + (cell.execution_count != null ? cell.execution_count : ' ') + ']'\n : ct === 'markdown' ? 'Md' : 'raw'\n return create('div', { key: i, className: 'dfv-nb-cell dfv-nb-' + ct },\n create('div', { className: 'dfv-nb-gutter' }, badge),\n body)\n })\n\n return create('div', { className: 'dfv-nb' },\n create('div', { className: 'dfv-cap' },\n 'Jupyter Notebook' + (kernelName ? ' \u00B7 ' + kernelName : '') + ' \u00B7 ' + T('files.nbCells', { n: cells.length })),\n cellEls.length ? cellEls : create('div', { className: 'dfv-muted' }, T('files.nbEmpty')))\n}\n\nfunction JsonPreview(props) {\n var failed = false\n try { JSON.parse(props.text) } catch (err) { failed = true }\n if (failed) {\n return create(React.Fragment, null,\n create('div', { className: 'dfv-cap' }, T('files.jsonFail')),\n create('pre', { className: 'dfv-code' }, props.text))\n }\n return create('pre', { className: 'dfv-json dfv-code' }, jsonColorNodes(JSON.stringify(JSON.parse(props.text), null, 2)))\n}\n\nfunction DelimitedPreview(props) {\n var delim = props.delim || ','\n var rows = parseDelimited(props.text, delim)\n var totalRows = rows.length\n // \u9996\u884C\u4F5C\u8868\u5934\uFF08\u6570\u636E\u5BFC\u51FA\u7684\u5E38\u89C1\u7EA6\u5B9A\uFF09\n var headerCells = totalRows > 0 ? rows[0].slice(0, CSV_MAX_COLS) : []\n var cols = headerCells.length\n for (var r = 1; r <= Math.min(totalRows - 1, CSV_MAX_ROWS); r++) {\n cols = Math.max(cols, Math.min(rows[r].length, CSV_MAX_COLS))\n }\n var caps = []\n if (totalRows > CSV_MAX_ROWS + 1) caps.push(T('files.csvTruncated', { total: totalRows, n: CSV_MAX_ROWS }))\n var trs = []\n for (var ri = 1; ri <= Math.min(totalRows - 1, CSV_MAX_ROWS); ri++) {\n var cells = rows[ri]\n var tds = []\n for (var c = 0; c < cols; c++) {\n tds.push(create('td', { key: c, className: 'dfv-td' }, cells[c] != null ? String(cells[c]) : ''))\n }\n trs.push(create('tr', { key: ri }, tds))\n }\n return create(React.Fragment, null,\n caps.length ? create('div', { className: 'dfv-cap' }, caps.join('\uFF1B')) : null,\n create('div', { className: 'dfv-table-wrap' },\n create('table', { className: 'dfv-table' },\n create('thead', null,\n create('tr', null, headerCells.map(function (cellText, ci) {\n return create('th', { key: ci, className: 'dfv-th' }, cellText != null ? String(cellText) : '')\n })),\n ),\n create('tbody', null, trs),\n ),\n ),\n )\n}\n\nfunction formatBytes(n) {\n if (typeof n !== 'number' || n < 0) return ''\n if (n < 1024) return n + ' B'\n if (n < 1048576) return (n / 1024).toFixed(1) + ' KB'\n if (n < 1073741824) return (n / 1048576).toFixed(1) + ' MB'\n return (n / 1073741824).toFixed(1) + ' GB'\n}\n\n/** \u4EE3\u7801\u5185\u5BB9 + \u5DE6\u4FA7\u884C\u53F7\u5217\uFF08\u6E90\u7801\u6587\u4EF6 / notebook code cell \u7528\uFF09\u3002 */\nfunction CodeWithLines(props) {\n var text = props.text || ''\n var lineCount = text.split('\\n').length\n var nums = []\n for (var i = 1; i <= lineCount; i++) nums.push(create('div', { key: i }, String(i)))\n return create('div', { className: 'dfv-code-lines' },\n create('div', { className: 'dfv-code-gutter', 'aria-hidden': true }, nums),\n create('div', { className: 'dfv-code-main' }, props.children),\n )\n}\n\nfunction FileContent(props) {\n var entry = props.entry\n if (entry.loading) {\n return create('div', { className: 'dfv-empty' }, T('files.loading'))\n }\n if (entry.error) {\n return create('div', { className: 'dfv-error' }, entry.error)\n }\n if (entry.kind === 'binary') {\n return create('div', { className: 'dfv-muted' },\n T('files.binary', { size: formatBytes(entry.size) }))\n }\n if (entry.kind === 'image-too-large') {\n return create('div', { className: 'dfv-muted' },\n T('files.imageTooLarge', { size: formatBytes(entry.size), limit: formatBytes(entry.limit) }))\n }\n if (entry.kind === 'image') {\n return create('div', { className: 'dfv-image-wrap' },\n create('img', { className: 'dfv-image', src: entry.dataUrl, alt: entry.name }))\n }\n if (entry.kind === 'pdf-too-large') {\n return create('div', { className: 'dfv-muted' },\n T('files.pdfTooLarge', { size: formatBytes(entry.size), limit: formatBytes(entry.limit) }))\n }\n if (entry.kind === 'pdf') {\n return create(PdfPreview, { data: entry.data })\n }\n // \u6587\u672C\u7C7B\uFF1A\u6309\u6269\u5C55\u540D\u9009\u9884\u89C8\u6E32\u67D3\u5668\uFF08\u7EAF\u53EA\u8BFB\uFF0C\u65E0\u7F16\u8F91\uFF09\n var pk = previewKind(entry.path)\n var view = null\n if (pk === 'markdown') view = create(MarkdownPreview, { text: entry.content, baseDir: parentOf(entry.path) })\n else if (pk === 'html') view = create(HtmlPreview, { text: entry.content, title: entry.name })\n else if (pk === 'json') view = create(JsonPreview, { text: entry.content })\n else if (pk === 'notebook') view = create(NotebookPreview, { text: entry.content })\n else if (pk === 'csv' || pk === 'tsv') view = create(DelimitedPreview, { text: entry.content, delim: pk === 'tsv' ? '\\t' : ',' })\n else {\n // \u4EE3\u7801\u6587\u4EF6\uFF1ADSH CodeBlock\uFF08Shiki \u9AD8\u4EAE\uFF0C\u8BED\u6CD5\u5305\u61D2\u52A0\u8F7D\uFF09\uFF1B\u65E0\u9AD8\u4EAE\u6761\u4EF6\u56DE\u9000\u7EAF\u6587\u672C\n // \u90FD\u5305\u5728 CodeWithLines \u91CC\u52A0\u5DE6\u4FA7\u884C\u53F7\n var lang = Object.prototype.hasOwnProperty.call(CODE_LANG_BY_EXT, extOfName(entry.path))\n ? CODE_LANG_BY_EXT[extOfName(entry.path)]\n : undefined\n var codeEl = (CodeBlock && lang && entry.content.length <= CODE_HIGHLIGHT_MAX_CHARS)\n ? create(CodeBlock, { code: entry.content, lang: lang })\n : create('pre', { className: 'dfv-code' }, entry.content)\n view = create(CodeWithLines, { text: entry.content }, codeEl)\n }\n return create(React.Fragment, null,\n entry.truncated ? create('div', { className: 'dfv-cap' },\n T('files.truncated')) : null,\n view,\n )\n}\n\n/**\n * \u7EAF\u9605\u8BFB\u6A21\u5F0F\u6807\u8BB0\uFF1A\u5728\u4F1A\u8BDD\u6839\uFF08\u542B composerSeat \u7684\u6700\u8FD1\u7956\u5148\uFF0C\u5373 DSH\n * ConversationRoot \u7684 root \u8282\u70B9\uFF09\u4E0A\u6253 data-dsh-soup-preview\uFF0C\u7531\u4E0A\u9762\n * \u6CE8\u5165\u7684 CSS \u9690\u85CF\u8F93\u5165\u533A\u4E0E\u8F6E\u6B21\u7EDF\u8BA1\u884C\u3002DSH \u91CD\u6E32\u67D3\u53EF\u80FD\u91CD\u5EFA\u8BE5\u8282\u70B9\u2014\u2014\n * MutationObserver \u5728 FilesView \u5B58\u6D3B\u671F\u95F4\u6301\u7EED\u786E\u4FDD\u6807\u8BB0\u5B58\u5728\u3002\n */\nfunction usePreviewReadingMode(rootRef) {\n React.useEffect(function () {\n var observer = null\n var marked = null\n function apply() {\n var el = rootRef.current\n if (!el) return\n if (marked && marked.contains(el) && marked.getAttribute('data-dsh-soup-preview') === '1') return\n var host = el.parentElement\n while (host) {\n if (host.querySelector && host.querySelector('.wSkVaW_composerSeat')) break\n host = host.parentElement\n }\n if (!host) return\n host.setAttribute('data-dsh-soup-preview', '1')\n marked = host\n }\n apply()\n observer = new MutationObserver(function () { apply() })\n observer.observe(document.body, { childList: true, subtree: true })\n return function () {\n if (observer) observer.disconnect()\n if (marked) marked.removeAttribute('data-dsh-soup-preview')\n marked = null\n }\n }, [])\n}\n\nfunction FilesView(props) {\n var s = useStore()\n var files = s.files\n var active = files.active ? findFileEntry(files.active) : null\n var rootRef = React.useRef(null)\n usePreviewReadingMode(rootRef)\n\n var tabs = files.list.map(function (entry) {\n return create('button', {\n key: entry.path,\n type: 'button',\n className: 'dfv-tab' + (files.active === entry.path ? ' active' : ''),\n title: entry.path,\n onClick: function () { setActiveFile(entry.path) },\n },\n create('span', { className: 'dfv-tab-name' }, entry.name),\n create('span', {\n className: 'dfv-close',\n role: 'button',\n title: T('explorer.close'),\n onClick: function (e) { e.stopPropagation(); closeFileTab(entry.path) },\n }, '\u2715'),\n )\n })\n\n var body = null\n if (!active) {\n body = create('div', { className: 'dfv-empty' },\n create('span', { style: { fontSize: 22 } }, '\uD83D\uDCC4'),\n T('files.emptyHint'),\n )\n } else {\n body = create('div', { className: 'dfv-body' },\n create('div', { className: 'dfv-toolbar' },\n create('span', { className: 'dfv-toolbar-path', title: active.path }, active.path),\n typeof active.size === 'number' && active.size > 0 ? create('span', null, formatBytes(active.size)) : null,\n active.loaded ? create('button', {\n type: 'button',\n className: 'dfv-btn',\n title: T('files.reloadTitle'),\n onClick: function () { reloadFile(active.path) },\n },\n create('span', { className: 'expl-icon', dangerouslySetInnerHTML: { __html: ICON_REFRESH } }),\n T('files.reload'),\n ) : null,\n create('button', {\n type: 'button',\n className: 'dfv-btn',\n title: '\u6700\u5927\u5316', 'aria-label': '\u6700\u5927\u5316',\n onClick: function () { setFiles({ overlay: true, overlayMax: true, overlayReturn: 'tab' }) },\n dangerouslySetInnerHTML: { __html: EXPAND_SVG },\n }),\n ),\n create(FileContent, { key: active.path, entry: active }),\n )\n }\n\n return create('div', { className: 'dfv-root', ref: rootRef },\n files.list.length > 0 ? create('div', { className: 'dfv-tabbar' }, tabs) : null,\n body,\n )\n}\n\n/** \u7A7A\u4F1A\u8BDD\u515C\u5E95\u6D6E\u5C42\uFF1A\u539F\u751F tab \u6761\u4E0D\u5B58\u5728\u65F6\u4EE5\u6A21\u6001\u6E32\u67D3 FileContent\u3002 */\nfunction PreviewOverlay() {\n var s = useStore()\n var files = s.files\n if (!files.overlay || !files.active) return null\n var active = findFileEntry(files.active)\n if (!active) return null\n var close = function () { setFiles({ overlay: false, overlayMax: false, overlayReturn: null }) }\n var closeAndCloseTab = function () {\n close()\n closeFileTab(active.path)\n }\n var toggleMax = function () {\n if (files.overlayMax && files.overlayReturn === 'tab') {\n // \u8FD8\u539F \u2192 \u56DE\u5230 tab \u6A21\u5F0F\n close()\n } else {\n setFiles({ overlayMax: !files.overlayMax })\n }\n }\n return create('div', {\n className: 'dfv-overlay',\n onClick: function (e) { if (e.target === e.currentTarget) close() },\n },\n create('div', { className: 'dfv-overlay-panel' + (files.overlayMax ? ' dfv-overlay-max' : '') },\n create('div', { className: 'dfv-toolbar' },\n create('span', { className: 'dfv-toolbar-path', title: active.path }, active.path),\n typeof active.size === 'number' && active.size > 0 ? create('span', null, formatBytes(active.size)) : null,\n active.loaded ? create('button', {\n type: 'button',\n className: 'dfv-btn',\n title: T('files.reloadTitle'),\n onClick: function () { reloadFile(active.path) },\n },\n create('span', { className: 'expl-icon', dangerouslySetInnerHTML: { __html: ICON_REFRESH } }),\n T('files.reload'),\n ) : null,\n create('button', {\n type: 'button', className: 'dfv-overlay-close',\n title: files.overlayMax ? '\u8FD8\u539F' : '\u6700\u5927\u5316', 'aria-label': files.overlayMax ? '\u8FD8\u539F' : '\u6700\u5927\u5316',\n onClick: toggleMax,\n dangerouslySetInnerHTML: { __html: files.overlayMax ? SHRINK_SVG : EXPAND_SVG },\n }),\n create('button', {\n type: 'button', className: 'dfv-overlay-close',\n title: files.overlayReturn === 'tab' ? '\u5173\u95ED\u9884\u89C8 tab' : '\u5173\u95ED',\n 'aria-label': files.overlayReturn === 'tab' ? '\u5173\u95ED\u9884\u89C8 tab' : '\u5173\u95ED',\n onClick: closeAndCloseTab,\n }, '\u2715'),\n ),\n create(FileContent, { key: active.path, entry: active }),\n ),\n )\n}\n\nfunction findFrameEl(startEl) {\n var cur = startEl && startEl.parentElement\n while (cur) {\n try {\n var gtc = cur.style && cur.style.gridTemplateColumns\n if (gtc && gtc.indexOf('1fr') !== -1) return cur\n } catch (e) {}\n cur = cur.parentElement\n }\n return null\n}\n\nfunction setHeroDetailsWidth(startEl, width) {\n var frame = findFrameEl(startEl)\n if (!frame) return false\n try {\n var gtc = frame.style.gridTemplateColumns\n if (!gtc) return false\n var parts = gtc.trim().split(/\\s+/)\n if (parts.length < 3) return false\n parts[parts.length - 1] = width + 'px'\n frame.style.gridTemplateColumns = parts.join(' ')\n return true\n } catch (e) {\n return false\n }\n}\n\n// ------------------------------------------------------------------\n// \u2593\u2593 \u533A\u57DF\u4E09 \u00B7 \u901F\u7387\u5FBD\u6807 \u00B7 \uD83E\uDDC2 \u76D0\n// \u8F93\u5165\u6846\u4E0A\u65B9\u5B9E\u65F6 t/s \u541E\u5410\u5FBD\u6807\uFF0C\u6570\u636E\u6765\u81EA llm/stream \u771F\u5B9E\u6D41\uFF1BtimerRef \u4E3A\u5171\u4EAB\u6A21\u5757\u7EA7\u8BA1\u65F6\u5F15\u7528\u3002\n// ------------------------------------------------------------------\n// \u901F\u5EA6\u5FBD\u6807\uFF1ADOM \u6CE8\u5165\u5230 Deep diving\uFF08role=status\uFF09\u65C1\u3002\n// \u4E0D\u6539 DSH \u6E90\u7801\u3002\u7528 MutationObserver \u5B9A\u4F4D\u6D88\u606F\u6D41\u91CC\u7684 Deep diving\uFF0C\n// \u628A\u5FBD\u6807\u8282\u70B9 append \u8FDB\u5176\u884C\u5185\uFF08inline-flex \u540C\u884C\uFF09\uFF0C\u5B9E\u73B0\u6C38\u8FDC\u7D27\u8D34\u3002\n// ------------------------------------------------------------------\n// \u6A21\u5757\u7EA7 timer \u5F15\u7528\uFF1Aapply(ctx) \u91CC\u8D4B\u503C\uFF08\u4E0E dsh-soup \u73B0\u6709 layout \u540C\u6B3E\u6A21\u5F0F\uFF09\nvar timerRef = null\n\nfunction SpeedBadge(props) {\n var sessionId = props && (props.sessionId || (props.session && props.session.id))\n\n // \u6301\u6709\u6700\u65B0\u72B6\u6001\u7684\u6700\u65B0\u503C\u7684 ref\uFF08\u4F9B MutationObserver \u56DE\u8C03\u8BFB\u53D6\uFF09\n var statusRef = React.useRef(null)\n var dotsRef = React.useRef(1)\n var badgeElRef = React.useRef(null)\n // hostRef\uFF1A\u5F53\u524D\u6302\u8F7D\u7684 Deep diving \u5BBF\u4E3B\u5143\u7D20\uFF08observer \u627E\u5230\u540E\u6301\u6709\uFF09\n var hostRef = React.useRef(null)\n\n // \u7701\u7565\u53F7\u5FAA\u73AF\n React.useEffect(function () {\n if (!timerRef) return\n var stop = timerRef.interval(function () {\n dotsRef.current = dotsRef.current >= 3 ? 1 : dotsRef.current + 1\n if (hostRef.current) renderBadge()\n }, 400)\n return function () { stop() }\n }, [])\n\n // \u901F\u5EA6\u8F6E\u8BE2\n React.useEffect(function () {\n if (!sessionId || !timerRef) return\n var cancelled = false\n var poll = function () {\n rpc('speed-status', { sessionId: sessionId }).then(function (res) {\n if (!cancelled && res && res.ok) {\n statusRef.current = res\n if (hostRef.current) renderBadge()\n }\n }).catch(function () {})\n }\n poll()\n var stop = timerRef.interval(poll, 300)\n return function () { cancelled = true; stop() }\n }, [sessionId])\n\n // \u6E32\u67D3\u5FBD\u6807\u5185\u5BB9\u5230 badgeEl\uFF08\u7531\u9700\u8981\u65F6\u8C03\u7528\uFF1B\u8FD9\u91CC\u7528\u51FD\u6570\u58F0\u660E\u63D0\u5347\uFF0C\u9700\u653E\u5728 effect \u5916\uFF09\n function renderBadge() {\n var el = badgeElRef.current\n if (!el) return\n var st = statusRef.current\n // \u6E05\u7A7A\n while (el.firstChild) el.removeChild(el.firstChild)\n if (!st || st.phase === 'idle' || st.phase === 'done') {\n el.style.display = 'none'\n return\n }\n el.style.display = 'inline-flex'\n if (st.phase === 'waiting') {\n // \u5BBF\u4E3B .turnStatus \u7528 background-clip:text + \u6E10\u53D8\u900F\u660E\u8272\uFF0C\u5185\u90E8\u5B50\u5143\u7D20\n // \u4F1A\u7EE7\u627F text-fill-color \u800C\u628A\u989C\u8272\u51B2\u6210\u6E10\u53D8\uFF1B\u5FC5\u987B important \u8986\u76D6\u3002\n el.style.cssText = 'display:inline-flex;align-items:center;margin-left:10px;font-weight:400;font-size:13px;color:var(--dsw-alias-label-caption);'\n el.style.setProperty('color', 'var(--dsw-alias-label-caption)', 'important')\n el.style.setProperty('-webkit-text-fill-color', 'var(--dsw-alias-label-caption)', 'important')\n el.textContent = T('speed.waiting') + new Array(dotsRef.current + 1).join('.')\n return\n }\n // \u6D41\u5F0F\u9636\u6BB5\uFF1Atoken \u8BA1\u6570\u7ACB\u5373\u663E\u793A\uFF1B\u77AC\u65F6\u901F\u7387\u7A97\u53E3\u672A\u6EE1\uFF08tps=0\uFF09\u65F6\u5148\u4E0D\u663E\u793A\u5FBD\u6807\uFF0C\n // \u800C\u4E0D\u662F\u56DE\u9000\u5230\u300C\u6B63\u5728\u7B49\u5F85\u6A21\u578B\u300D\uFF08\u5426\u5219\u77ED\u8F93\u51FA\u5168\u7A0B\u90FD\u663E\u793A\u7B49\u5F85\uFF09\u3002\n var tps = st.tps || 0\n var bg = tps >= 50 ? '#53b3cb' : tps >= 30 ? '#9bc53d' : tps >= 15 ? '#f9c22e' : '#e01a4f'\n el.style.cssText = 'display:inline-flex;align-items:center;gap:6px;margin-left:10px;font-weight:400;font-size:11px;color:var(--dsw-alias-label-primary);-webkit-text-fill-color:var(--dsw-alias-label-primary);'\n var tok = document.createElement('span')\n tok.style.cssText = 'display:inline-flex;align-items:center;gap:4px;color:var(--dsw-alias-label-caption);-webkit-text-fill-color:var(--dsw-alias-label-caption);'\n var SVG = 'http://www.w3.org/2000/svg'\n var svg = document.createElementNS(SVG, 'svg')\n svg.setAttribute('width', '10'); svg.setAttribute('height', '10'); svg.setAttribute('viewBox', '0 0 10 10')\n svg.setAttribute('fill', 'none'); svg.setAttribute('stroke', 'currentColor'); svg.setAttribute('stroke-width', '1.2')\n svg.setAttribute('stroke-linecap', 'round'); svg.setAttribute('stroke-linejoin', 'round')\n var ln = document.createElementNS(SVG, 'line'); ln.setAttribute('x1', '5'); ln.setAttribute('y1', '1.5'); ln.setAttribute('x2', '5'); ln.setAttribute('y2', '8.5'); svg.appendChild(ln)\n var poly = document.createElementNS(SVG, 'polyline'); poly.setAttribute('points', '2 6 5 8.5 8 6'); svg.appendChild(poly)\n tok.appendChild(svg)\n tok.appendChild(document.createTextNode(String(Math.round(st.tokens))))\n el.appendChild(tok)\n if (tps > 0) {\n var pill = document.createElement('span')\n pill.style.cssText = 'margin-left:6px;padding:1px 6px;border-radius:4px;background:' + bg + ';color:#fff;-webkit-text-fill-color:#fff;font-size:11px;font-weight:500;'\n pill.textContent = tps.toFixed(1) + ' t/s'\n el.appendChild(pill)\n }\n }\n\n // MutationObserver\uFF1A\u5B9A\u4F4D Deep diving \u5E76\u628A badgeEl \u6302\u8FDB\u53BB\n React.useEffect(function () {\n if (typeof document === 'undefined' || typeof MutationObserver === 'undefined') return\n // \u521D\u59CB\u5316\u5FBD\u6807 DOM \u8282\u70B9\n if (badgeElRef.current === null) {\n badgeElRef.current = document.createElement('span')\n badgeElRef.current.setAttribute('data-dsh-speed-badge', '')\n badgeElRef.current.style.display = 'none'\n }\n var badge = badgeElRef.current\n\n function findTurnStatus() {\n var candidates = document.querySelectorAll('[data-chat-flow] [role=\"status\"], [data-chat-flow] [aria-live=\"polite\"]')\n for (var i = 0; i < candidates.length; i++) {\n if (candidates[i].textContent && candidates[i].textContent.indexOf('Deep diving') !== -1) return candidates[i]\n }\n return null\n }\n\n function attach() {\n // \u5DF2\u6302\u8F7D\u4E14\u5BBF\u4E3B\u4ECD\u5728 DOM \u4E2D\u65F6\u65E0\u9700\u91CD\u590D\u67E5\u627E\uFF1A\u5FBD\u6807\u5185\u5BB9\u7531 timer/poll \u9A71\u52A8\n // renderBadge \u66F4\u65B0\uFF0Cobserver \u53EA\u8D1F\u8D23\u628A\u5FBD\u6807\u6302\u8FDB/\u79FB\u51FA\u5BBF\u4E3B\u5143\u7D20\u3002\n if (hostRef.current && hostRef.current.isConnected) {\n // \u82E5 DSH \u5728\u5FBD\u6807\u4E4B\u540E\u53C8\u8FFD\u52A0\u4E86\u5B50\u5143\u7D20\uFF08\u5982 15s \u540E\u7684 elapsed clock\uFF09\uFF0C\n // \u628A\u5FBD\u6807\u79FB\u5230\u672B\u5C3E\uFF0C\u8BA9\u5B83\u59CB\u7EC8\u7D27\u8DDF Deep diving \u7684\u8BA1\u65F6\u3002\n if (badge.parentNode !== hostRef.current || hostRef.current.lastElementChild !== badge) {\n try { hostRef.current.appendChild(badge) } catch (e) {}\n }\n return\n }\n var target = findTurnStatus()\n if (target !== null) {\n hostRef.current = target\n if (badge.parentNode !== target) { try { target.appendChild(badge) } catch (e) {} }\n renderBadge()\n } else if (hostRef.current !== null) {\n if (badge.parentNode) { try { badge.parentNode.removeChild(badge) } catch (e) {} }\n hostRef.current = null\n }\n }\n\n var mo = new MutationObserver(function () { attach() })\n mo.observe(document.body, { childList: true, subtree: true })\n attach()\n return function () {\n mo.disconnect()\n if (badge.parentNode) { try { badge.parentNode.removeChild(badge) } catch (e) {} }\n hostRef.current = null\n }\n }, [])\n\n return null\n}\n\n// ------------------------------------------------------------------\n// ------------------------------------------------------------------\n// ------------------------------------------------------------------\n// \u2593\u2593 \u533A\u57DF\u56DB \u00B7 \u591A\u884C GoalBar \u00B7 \uD83E\uDDC4 \u849C\n// \u590D\u7528\u539F\u751F goal projection \u4E0E\u52A8\u4F5C\u52A8\u8BCD\uFF0C\u591A\u884C\u5B8C\u6574\u5C55\u793A + textarea \u7F16\u8F91\u3002\n// ------------------------------------------------------------------\n// GoalBar \u591A\u884C\u7248\uFF1A\u590D\u7528 DSH \u539F\u751F GoalBar \u7684 goal projection \u4E0E\u52A8\u4F5C\u52A8\u8BCD\n// \uFF08onEdit/onPause/onResume/onClear\uFF09\uFF0C\u4EC5\u5728\u5C55\u793A\u4E0A\u628A\u5355\u884C\u622A\u65AD\u653E\u5F00\u4E3A\u591A\u884C\u3001\n// \u7F16\u8F91\u7528 textarea\u3002\u901A\u8FC7 conversation.input.dock \u540C id 'goal' + \u66F4\u4F4E priority\n// (-1 < 0) \u906E\u853D\u9ED8\u8BA4\u5B9E\u73B0\uFF0C\u4E0D\u6539 DSH \u6E90\u7801\uFF0C\u5DE5\u5177\u4E0E\u6570\u636E\u4ECD\u8D70\u539F\u751F goal\u3002\n// ------------------------------------------------------------------\nvar GOAL_PHASE_LABELS = {\n active: 'phase.active',\n paused: 'phase.paused',\n blocked: 'phase.blocked',\n}\n\nfunction goalIcon(children) {\n return create('svg', {\n width: 14, height: 14, viewBox: '0 0 24 24', fill: 'none',\n stroke: 'currentColor', strokeWidth: 2, strokeLinecap: 'round',\n strokeLinejoin: 'round', 'aria-hidden': true,\n }, children)\n}\n\nvar ICON_GOAL = goalIcon([\n create('circle', { key: 'a', cx: '12', cy: '12', r: '10' }),\n create('circle', { key: 'b', cx: '12', cy: '12', r: '6' }),\n create('circle', { key: 'c', cx: '12', cy: '12', r: '2', fill: 'currentColor', stroke: 'none' }),\n])\nvar ICON_PAUSE = goalIcon([\n create('rect', { key: 'a', x: '6', y: '4', width: '4', height: '16', rx: '1', fill: 'currentColor', stroke: 'none' }),\n create('rect', { key: 'b', x: '14', y: '4', width: '4', height: '16', rx: '1', fill: 'currentColor', stroke: 'none' }),\n])\nvar ICON_PLAY = goalIcon([\n create('path', { key: 'p', d: 'M6 4l14 8-14 8V4z', fill: 'currentColor', stroke: 'none' }),\n])\nvar ICON_EDIT = goalIcon([\n create('path', { key: 'a', d: 'M12 20h9' }),\n create('path', { key: 'b', d: 'M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z' }),\n])\nvar ICON_CHECK = goalIcon([\n create('polyline', { key: 'a', points: '20 6 9 17 4 12' }),\n])\nvar ICON_CLOSE = goalIcon([\n create('line', { key: 'a', x1: '18', y1: '6', x2: '6', y2: '18' }),\n create('line', { key: 'b', x1: '6', y1: '6', x2: '18', y2: '18' }),\n])\nvar ICON_TRASH = goalIcon([\n create('polyline', { key: 'a', points: '3 6 5 6 21 6' }),\n create('path', { key: 'b', d: 'M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6' }),\n create('path', { key: 'c', d: 'M10 11v6' }),\n create('path', { key: 'd', d: 'M14 11v6' }),\n create('path', { key: 'e', d: 'M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2' }),\n])\n\nfunction GoalBar(props) {\n var goal = props.goal\n var roundsStarted = props.roundsStarted\n var onEdit = props.onEdit\n var onPause = props.onPause\n var onResume = props.onResume\n var onClear = props.onClear\n var t = props.t || function (k) { return k }\n\n var editing = React.useState(false)\n var draft = React.useState('')\n var pending = React.useState(false)\n var actionError = React.useState(null)\n var clearedGoalId = React.useState(null)\n var pendingRef = React.useRef(false)\n var textareaRef = React.useRef(null)\n\n var goalId = goal ? goal.id : undefined\n React.useEffect(function () {\n editing[1](false)\n actionError[1](null)\n clearedGoalId[1](null)\n }, [goalId])\n\n React.useEffect(function () {\n var input = textareaRef.current\n if (!input) return\n input.style.height = 'auto'\n input.style.height = Math.max(64, input.scrollHeight) + 'px'\n }, [draft[0], editing[0]])\n\n function runAction(action) {\n if (pendingRef.current) return Promise.resolve(undefined)\n pendingRef.current = true\n pending[1](true)\n actionError[1](null)\n return Promise.resolve().then(function () { return action() }).then(function (result) {\n pendingRef.current = false\n pending[1](false)\n if (!result || !result.ok) {\n var err = result && result.error ? (result.error.message + ' (' + result.error.code + ')') : T('speed.operateFail')\n actionError[1](err)\n }\n return result\n }).catch(function (e) {\n pendingRef.current = false\n pending[1](false)\n actionError[1](String((e && e.message) || e))\n })\n }\n\n function handleSave() {\n var trimmed = draft[0].trim()\n if (trimmed === '') return\n runAction(function () { return onEdit(trimmed) }).then(function (result) {\n if (result && result.ok) {\n editing[1](false)\n }\n })\n }\n\n function handleClear() {\n if (!goal) return\n var clearedId = goal.id\n runAction(onClear).then(function (result) {\n if (result && result.ok) clearedGoalId[1](clearedId)\n })\n }\n\n function openEdit() {\n if (!goal) return\n draft[1](goal.objective)\n editing[1](true)\n }\n\n function iconBtn(label, onClick, iconNode, disabled) {\n return create('button', {\n type: 'button', title: label, 'aria-label': label,\n className: 'dsh-goal-btn', disabled: disabled === true || pending[0],\n onClick: function () { void onClick() },\n }, iconNode)\n }\n\n if (goal === undefined || goal === null || goal.phase === 'complete' || goal.id === clearedGoalId[0]) return null\n\n if (editing[0]) {\n return create('div', { className: 'dsh-goal-dock', 'data-goal-bar': '' },\n create('div', { className: 'dsh-goal-bar' },\n create('div', { className: 'dsh-goal-head' },\n create('span', { className: 'dsh-goal-glyph' }, ICON_GOAL),\n create('span', { className: 'dsh-goal-label' }, t(GOAL_PHASE_LABELS[goal.phase] || 'phase.active')),\n actionError[0] !== null && create('span', { className: 'dsh-goal-error', role: 'alert' }, actionError[0]),\n create('div', { className: 'dsh-goal-actions' },\n iconBtn(t('action.save'), handleSave, ICON_CHECK, draft[0].trim() === ''),\n iconBtn(t('action.cancel'), function () { editing[1](false) }, ICON_CLOSE),\n ),\n ),\n create('textarea', {\n className: 'dsh-goal-input',\n ref: textareaRef,\n 'aria-label': t('objective.aria'),\n value: draft[0],\n autoFocus: true,\n onChange: function (e) { draft[1](e.target.value) },\n onKeyDown: function (e) {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) { e.preventDefault(); void handleSave() }\n else if (e.key === 'Escape') { e.preventDefault(); editing[1](false) }\n },\n }),\n ),\n )\n }\n\n var title = goal.phase === 'blocked' && goal.blockedReason ? goal.blockedReason.message : undefined\n var rounds = roundsStarted !== undefined && goal.maxGoalRounds !== undefined\n ? roundsStarted + '/' + goal.maxGoalRounds\n : undefined\n return create('div', { className: 'dsh-goal-dock', 'data-goal-bar': '' },\n create('div', { className: 'dsh-goal-bar', title: title || '' },\n create('div', { className: 'dsh-goal-head' },\n create('span', { className: 'dsh-goal-glyph' }, ICON_GOAL),\n create('span', { className: 'dsh-goal-label' }, t(GOAL_PHASE_LABELS[goal.phase] || 'phase.active')),\n rounds !== undefined && create('span', { className: 'dsh-goal-rounds' }, rounds),\n actionError[0] !== null && create('span', { className: 'dsh-goal-error', role: 'alert' }, actionError[0]),\n create('div', { className: 'dsh-goal-actions' },\n goal.phase === 'active' && iconBtn(t('action.pause'), function () { return runAction(onPause) }, ICON_PAUSE),\n goal.phase === 'paused' && iconBtn(t('action.resume'), function () { return runAction(onResume) }, ICON_PLAY),\n iconBtn(t('action.edit'), openEdit, ICON_EDIT),\n iconBtn(t('action.clear'), handleClear, ICON_TRASH),\n ),\n ),\n create('div', { className: 'dsh-goal-objective' }, goal.objective),\n ),\n )\n}\n\nfunction GoalDock(props) {\n var projection = props.useProjection('goal')\n var goal = projection === undefined ? undefined : projection === null ? null : projection.goal\n return create(GoalBar, {\n goal: goal,\n roundsStarted: projection === undefined || projection === null ? undefined : projection.roundsStarted,\n onEdit: props.onEdit,\n onPause: props.onPause,\n onResume: props.onResume,\n onClear: props.onClear,\n t: props.t,\n })\n}\n\n/** \u5E94\u7528\u6D4F\u89C8\u5668\u534A\u533A\uFF1A\u6CE8\u518C\u4F1A\u8BDD\u5934\u90E8/\u7A7A\u767D\u4F1A\u8BDD\u5207\u6362\u6309\u94AE\u3001details \u53F3\u5217\u9762\u677F\u3001GoalBar\u3001\u901F\u5EA6\u5FBD\u6807\u3002 */\n// ------------------------------------------------------------------\n// \u2593\u2593 \u533A\u57DF\u4E94 \u00B7 \u5E94\u7528\u6CE8\u518C\uFF08apply\uFF09\n// \u628A\u4E0A\u8FF0\u5404\u533A\u57DF\u7EC4\u4EF6\u6CE8\u518C\u8FDB slots / inject\uFF1B\u5BFC\u51FA\u63D2\u4EF6\u6D4F\u89C8\u5668\u534A\u533A\u5165\u53E3 apply/inject\u3002\n// ------------------------------------------------------------------\nfunction apply(ctx) {\n var slots = ctx.slots\n layout = ctx.layout\n timerRef = ctx.timer\n var sessions = ctx.sessions\n var remoteGoals = ctx.remote.goals\n var disposers = []\n // i18n\uFF1A\u6CE8\u518C\u53CC\u8BED\u8BCD\u5178\uFF1B\u6A21\u5757\u7EA7 T \u4F9B\u7EC4\u4EF6\u5916\u56DE\u8C03\uFF08\u83DC\u5355/\u9519\u8BEF\u6A2A\u5E45\uFF09\u53D6\u5F53\u524D\u8BED\u8A00\u6587\u6848\u3002\n if (ctx.locale && typeof ctx.locale.register === 'function') {\n ctx.effect(function () { return ctx.locale.register(NS, DICT) }, 'dsh-soup: dictionaries')\n if (typeof ctx.locale.bind === 'function') T = ctx.locale.bind(NS)\n }\n // \u81EA\u52A8\u5237\u65B0\u5FC3\u8DF3\uFF1A1s \u56FA\u5B9A\u5FC3\u8DF3 + \u5230\u671F\u624D\u63A2\u6D4B\uFF08\u57FA\u7840 3s\uFF1B\u5BBF\u4E3B\u4E0D\u53EF\u8FBE\u65F6\u6307\u6570\u9000\u907F\uFF0C\u5C01\u9876 60s\uFF09\u3002\n // \u9762\u677F\u5173\u4E14\u65E0\u9884\u89C8\u65F6 tick \u5185\u76F4\u63A5\u8FD4\u56DE\uFF08\u96F6\u8BF7\u6C42\uFF09\uFF1B\u9996\u4E2A tick \u53EA\u5EFA\u57FA\u7EBF\u3002\n if (timerRef && typeof timerRef.interval === 'function') {\n var stopAuto = timerRef.interval(function () { autoHeartbeat() }, AUTO_HEARTBEAT_MS)\n disposers.push(function () { try { stopAuto() } catch (e) {} })\n }\n slots.inject('conversation.session.header.utilities', function () {\n disposers.push(slots.register(\n { name: 'conversation.session.header.utilities', id: 'dsh-soup-toggle', order: 10, locale: NS, label: function () { return T('explorer.label') } },\n function (props) { return create(HeaderAction, props) },\n ))\n })\n slots.inject('details', function () {\n disposers.push(slots.register(\n // `details` is a single slot occupied by the shell at priority 0.\n // Lower priorities render first, so this intentionally shadows it.\n { name: 'details', priority: -1, locale: NS },\n function (props) {\n return create(React.Fragment, null,\n create(Panel, props),\n create(PreviewOverlay),\n )\n },\n ))\n })\n // \u6587\u4EF6\u6807\u7B7E\u9875\uFF1A\u4E0E \u5BF9\u8BDD/\u8F68\u8FF9 \u540C\u7EA7\u7684\u539F\u751F view tab\uFF08ui-trajectory \u540C\u6B3E\u6CE8\u518C\u65B9\u5F0F\uFF09\u3002\n // \u69FD\u4F4D entry \u662F\u9759\u6001\u7684\uFF0C\u591A\u6587\u4EF6\u7531 FilesView \u5185\u90E8\u5B50 tab \u6761\u7BA1\u7406\u3002\n slots.inject('conversation.view', function () {\n disposers.push(slots.register(\n { name: 'conversation.view', id: 'dsh-soup-files', order: 20, locale: NS, label: function () { return T('files.tab') } },\n function (props) { return create(FilesView, props) },\n ))\n })\n // \u4ECE goal projection \u8BFB\u53D6\u5F53\u524D CAS ref\uFF08\u4E0E\u539F\u751F GoalBar \u540C\u6B3E\u903B\u8F91\uFF09\u3002\n function refOf(sessionId) {\n try {\n var binding = sessions.binding(sessionId)\n var face = binding && binding.session && binding.session.projections && binding.session.projections.faceOf('goal')\n var snapshot = face && face.getSnapshot()\n if (snapshot && snapshot.goal) return { id: snapshot.goal.id, revision: snapshot.goal.revision }\n } catch (e) { /* ignore */ }\n return undefined\n }\n var noCurrentGoal = {\n ok: false,\n error: { code: 'no-current-goal', message: 'no current goal to mutate', details: {} },\n }\n slots.inject('conversation.input.dock', function () {\n disposers.push(slots.register(\n { name: 'conversation.input.dock', id: 'dsh-soup-hero-toggle', order: -10, locale: NS },\n function (props) { return create(HeroAction, props) },\n ))\n // GoalBar \u591A\u884C\u7248\uFF1A\u540C id 'goal'\u3001\u66F4\u4F4E priority (-1) -> \u906E\u853D\u9ED8\u8BA4\u5355\u884C\u5B9E\u73B0\u3002\n // inject \u63D0\u4F9B onEdit/onPause/onResume/onClear \u52A8\u4F5C\u52A8\u8BCD\uFF08\u4E0E\u539F\u751F GoalBar \u4E00\u81F4\uFF09\u3002\n disposers.push(slots.register(\n {\n name: 'conversation.input.dock', id: 'goal', order: 10, priority: -1, locale: 'goal',\n inject: function (sessionId) {\n return {\n onEdit: function (objective) {\n var ref = refOf(sessionId)\n if (ref === undefined) return Promise.resolve(noCurrentGoal)\n return remoteGoals.edit(sessionId, ref, { objective: objective })\n },\n onPause: function () {\n var ref = refOf(sessionId)\n if (ref === undefined) return Promise.resolve(noCurrentGoal)\n return remoteGoals.pause(sessionId, ref)\n },\n onResume: function () {\n var ref = refOf(sessionId)\n if (ref === undefined) return Promise.resolve(noCurrentGoal)\n return remoteGoals.resume(sessionId, ref)\n },\n onClear: function () {\n var ref = refOf(sessionId)\n if (ref === undefined) return Promise.resolve(noCurrentGoal)\n return remoteGoals.clear(sessionId, ref)\n },\n }\n },\n },\n function (props) { return create(GoalDock, props) },\n ))\n disposers.push(slots.register(\n { name: 'conversation.input.dock', id: 'dsh-speed-badge', order: 30, locale: NS, label: function () { return T('speed.label') } },\n function (props) { return create(SpeedBadge, props) },\n ))\n })\n ctx.effect(\n function () { return function () { disposers.forEach(function (d) { try { d() } catch (e) {} }) } },\n 'dsh-soup: explorer toggles + details panel + speed badge',\n )\n}\n\nexport { apply, inject }\n"],
5
+ "mappings": "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",
6
+ "names": ["r", "e", "inject", "state", "apply"]
7
+ }