@yumiai/chat-widget 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +1 -1
- package/dist/ExcelCore-EAXQMKZT.js +10 -0
- package/dist/{ExcelViewer-3YLLYYIQ.js → ExcelViewer-OGWM52ZT.js} +2 -3
- package/dist/{ExcelViewer-3YLLYYIQ.js.map → ExcelViewer-OGWM52ZT.js.map} +1 -1
- package/dist/{GerberViewerA2UI-X5FWAD5M.js → GerberViewerA2UI-AORHOCF6.js} +2 -3
- package/dist/{GerberViewerA2UI-X5FWAD5M.js.map → GerberViewerA2UI-AORHOCF6.js.map} +1 -1
- package/dist/{GraphStatsLegend-D5bPeXB_.d.cts → GraphStatsLegend-CV0Y3-cP.d.cts} +39 -0
- package/dist/{GraphStatsLegend-D5bPeXB_.d.ts → GraphStatsLegend-CV0Y3-cP.d.ts} +39 -0
- package/dist/JsonRenderStandalone-L5ROJ6XP.js +17 -0
- package/dist/{KicadViewer-GV6ZC4AQ.js → KicadViewer-H6YY6WVC.js} +3 -4
- package/dist/{KicadViewer-GV6ZC4AQ.js.map → KicadViewer-H6YY6WVC.js.map} +1 -1
- package/dist/KicadViewerCore-XVJE2FTQ.js +10 -0
- package/dist/{PdfViewer-CHPDRK46.js → PdfViewer-GKVDDNCZ.js} +9 -10
- package/dist/{PdfViewer-CHPDRK46.js.map → PdfViewer-GKVDDNCZ.js.map} +1 -1
- package/dist/{PdfViewerCore-HJPEHSRA.js → PdfViewerCore-SUVXHXYO.js} +24 -11
- package/dist/PdfViewerCore-SUVXHXYO.js.map +1 -0
- package/dist/PowerPointCore-IZ4G6HEQ.js +10 -0
- package/dist/{PowerPointViewer-LQTO6UCU.js → PowerPointViewer-5R2KSWWJ.js} +2 -3
- package/dist/{PowerPointViewer-LQTO6UCU.js.map → PowerPointViewer-5R2KSWWJ.js.map} +1 -1
- package/dist/{StepViewerCore-7W3L3R4E.js → StepViewerCore-RORWXIRU.js} +2 -3
- package/dist/{StepViewerCore-7W3L3R4E.js.map → StepViewerCore-RORWXIRU.js.map} +1 -1
- package/dist/{ThreeViewerCore-N3QJD5QI.js → ThreeViewerCore-GTUZKD5V.js} +2 -3
- package/dist/{ThreeViewerCore-N3QJD5QI.js.map → ThreeViewerCore-GTUZKD5V.js.map} +1 -1
- package/dist/WordCore-QFG5HTYD.js +10 -0
- package/dist/{WordViewer-ZHCQMHOH.js → WordViewer-7XUQFS4A.js} +2 -3
- package/dist/{WordViewer-ZHCQMHOH.js.map → WordViewer-7XUQFS4A.js.map} +1 -1
- package/dist/{chunk-QLVPIM6R.js → chunk-3CNQONCV.js} +79 -1
- package/dist/chunk-3CNQONCV.js.map +1 -0
- package/dist/{chunk-2UC7YLVX.js → chunk-3LOSHCSH.js} +3 -3
- package/dist/chunk-5VUKEGFC.js +108 -0
- package/dist/chunk-5VUKEGFC.js.map +1 -0
- package/dist/chunk-AO4YUJQT.js +479 -0
- package/dist/chunk-AO4YUJQT.js.map +1 -0
- package/dist/{chunk-KQV7IKET.js → chunk-ASV4TISB.js} +2 -2
- package/dist/{chunk-CFKGNAJM.js → chunk-AT6VLLOO.js} +15 -15
- package/dist/{chunk-56WRZM3R.js → chunk-EYWNUJVZ.js} +3 -3
- package/dist/{chunk-K4KGNVL5.js → chunk-EZ46FGQ6.js} +3 -3
- package/dist/{chunk-GYXTSY22.js → chunk-KXPR6SRW.js} +4 -4
- package/dist/{chunk-7S67DOHQ.js → chunk-MTN6SUUQ.js} +2 -2
- package/dist/chunk-Q5PLT3AI.js +29 -0
- package/dist/chunk-Q5PLT3AI.js.map +1 -0
- package/dist/{chunk-PZXSASDY.js → chunk-R5LHMOAC.js} +3 -3
- package/dist/chunk-X67V7257.js +238 -0
- package/dist/chunk-X67V7257.js.map +1 -0
- package/dist/citationContext-CILHTO2Z.js +25 -0
- package/dist/components/JsonRender/standalone.cjs +56 -9753
- package/dist/components/JsonRender/standalone.cjs.map +1 -1
- package/dist/components/JsonRender/standalone.js +10 -11
- package/dist/components/JsonRender/standalone.js.map +1 -1
- package/dist/{gerber-2d-entry-OQ4SQRBY.js → gerber-2d-entry-HEFXQGBK.js} +5 -9
- package/dist/{gerber-2d-entry-OQ4SQRBY.js.map → gerber-2d-entry-HEFXQGBK.js.map} +1 -1
- package/dist/{gerber-3d-entry-DEHDBOO2.js → gerber-3d-entry-KVTONA37.js} +5 -9
- package/dist/{gerber-3d-entry-DEHDBOO2.js.map → gerber-3d-entry-KVTONA37.js.map} +1 -1
- package/dist/{gerber-simulation-entry-EBDX72XE.js → gerber-simulation-entry-GZ62QX5H.js} +5 -9
- package/dist/{gerber-simulation-entry-EBDX72XE.js.map → gerber-simulation-entry-GZ62QX5H.js.map} +1 -1
- package/dist/index.cjs +6690 -13472
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +776 -4
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +979 -26
- package/dist/index.d.ts +979 -26
- package/dist/index.js +4350 -1859
- package/dist/index.js.map +1 -1
- package/dist/provenance/index.cjs +78 -0
- package/dist/provenance/index.cjs.map +1 -1
- package/dist/provenance/index.d.cts +2 -2
- package/dist/provenance/index.d.ts +2 -2
- package/dist/provenance/index.js +2 -3
- package/dist/{resolveToArrayBuffer-AQIDZHSQ.js → resolveToArrayBuffer-PVSVIAII.js} +1 -3
- package/dist/{resolveToArrayBuffer-AQIDZHSQ.js.map → resolveToArrayBuffer-PVSVIAII.js.map} +1 -1
- package/dist/sseAdapter-LFXYGYC4.js +8 -0
- package/dist/sseAdapter-LFXYGYC4.js.map +1 -0
- package/package.json +2 -1
- package/dist/ExcelCore-DJOIVQMI.js +0 -11
- package/dist/JsonRenderStandalone-EIZM62JU.js +0 -18
- package/dist/KicadViewerCore-U7BWZHKJ.js +0 -11
- package/dist/PdfViewerCore-HJPEHSRA.js.map +0 -1
- package/dist/PowerPointCore-FPDR2BL4.js +0 -11
- package/dist/WordCore-JKSXK2XD.js +0 -11
- package/dist/chunk-7A4FY6FK.js +0 -10226
- package/dist/chunk-7A4FY6FK.js.map +0 -1
- package/dist/chunk-7D4SUZUM.js +0 -38
- package/dist/chunk-QLVPIM6R.js.map +0 -1
- package/dist/chunk-VXJWGLZ7.js +0 -21
- package/dist/chunk-VXJWGLZ7.js.map +0 -1
- /package/dist/{ExcelCore-DJOIVQMI.js.map → ExcelCore-EAXQMKZT.js.map} +0 -0
- /package/dist/{JsonRenderStandalone-EIZM62JU.js.map → JsonRenderStandalone-L5ROJ6XP.js.map} +0 -0
- /package/dist/{KicadViewerCore-U7BWZHKJ.js.map → KicadViewerCore-XVJE2FTQ.js.map} +0 -0
- /package/dist/{PowerPointCore-FPDR2BL4.js.map → PowerPointCore-IZ4G6HEQ.js.map} +0 -0
- /package/dist/{WordCore-JKSXK2XD.js.map → WordCore-QFG5HTYD.js.map} +0 -0
- /package/dist/{chunk-2UC7YLVX.js.map → chunk-3LOSHCSH.js.map} +0 -0
- /package/dist/{chunk-KQV7IKET.js.map → chunk-ASV4TISB.js.map} +0 -0
- /package/dist/{chunk-CFKGNAJM.js.map → chunk-AT6VLLOO.js.map} +0 -0
- /package/dist/{chunk-56WRZM3R.js.map → chunk-EYWNUJVZ.js.map} +0 -0
- /package/dist/{chunk-K4KGNVL5.js.map → chunk-EZ46FGQ6.js.map} +0 -0
- /package/dist/{chunk-GYXTSY22.js.map → chunk-KXPR6SRW.js.map} +0 -0
- /package/dist/{chunk-7S67DOHQ.js.map → chunk-MTN6SUUQ.js.map} +0 -0
- /package/dist/{chunk-PZXSASDY.js.map → chunk-R5LHMOAC.js.map} +0 -0
- /package/dist/{chunk-7D4SUZUM.js.map → citationContext-CILHTO2Z.js.map} +0 -0
package/dist/chunk-7D4SUZUM.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
8
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
9
|
-
}) : x)(function(x) {
|
|
10
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
11
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
12
|
-
});
|
|
13
|
-
var __commonJS = (cb, mod) => function __require2() {
|
|
14
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
15
|
-
};
|
|
16
|
-
var __copyProps = (to, from, except, desc) => {
|
|
17
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
18
|
-
for (let key of __getOwnPropNames(from))
|
|
19
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
20
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
21
|
-
}
|
|
22
|
-
return to;
|
|
23
|
-
};
|
|
24
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
25
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
26
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
27
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
28
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
29
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
30
|
-
mod
|
|
31
|
-
));
|
|
32
|
-
|
|
33
|
-
export {
|
|
34
|
-
__require,
|
|
35
|
-
__commonJS,
|
|
36
|
-
__toESM
|
|
37
|
-
};
|
|
38
|
-
//# sourceMappingURL=chunk-7D4SUZUM.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/messages.ts","../src/i18n/context.ts"],"sourcesContent":["export interface ChatWidgetMessages {\n 'header.title': string\n 'header.icon': string\n 'status.connecting': string\n 'status.running': string\n 'status.compressing': string\n 'status.error': string\n 'status.idle': string\n 'empty.waiting': string\n 'empty.icon': string\n 'round.separator': string\n 'round.status.running': string\n 'round.status.completed': string\n 'round.status.error': string\n 'round.noMessage': string\n 'footer.attribution': string\n 'selection.ask': string\n 'viewer.loading': string\n 'viewer.error': string\n 'viewer.back': string\n 'viewer.defaultTitle': string\n 'viewer.copyFull': string\n 'viewer.copyFullTitle': string\n 'viewer.referenceFile': string\n 'viewer.referenceFileTitle': string\n 'viewer.referencePage': string\n 'viewer.referencePageTitle': string\n 'viewer.download': string\n 'viewer.fullscreen': string\n 'viewer.fullscreenExit': string\n 'viewer.close': string\n 'viewer.unknownType': string\n 'viewer.iframeHint': string\n 'viewer.copySnippet': string\n 'viewer.loadingPdf': string\n 'viewer.pdfPages': string\n 'viewer.loadingKicad': string\n 'viewer.loading3d': string\n 'viewer.loadingStep': string\n 'viewer.3d.wireframe': string\n 'viewer.3d.resetView': string\n 'viewer.gerberTitle': string\n 'viewer.gerberBlobWarning': string\n 'viewer.gerberNoHttpUrl': string\n 'viewer.pdfPreview': string\n 'viewer.htmlPreview': string\n 'viewer.htmlProjectLoading': string\n 'viewer.htmlProjectNoEntry': string\n 'viewer.htmlProjectSizeLimit': string\n 'viewer.htmlStrategyForcedInlineWarning': string\n 'viewer.htmlStrategyFallbackCspWarning': string\n 'viewer.copyFullKicadTitle': string\n 'viewer.zoomIn': string\n 'viewer.zoomOut': string\n 'viewer.zoomReset': string\n 'viewer.loadingWord': string\n 'viewer.loadingExcel': string\n 'viewer.loadingPowerPoint': string\n 'viewer.pptPrev': string\n 'viewer.pptNext': string\n 'viewer.pptSlide': string\n 'viewer.pptThumbnails': string\n 'viewer.excelRows': string\n 'viewer.excelColumns': string\n 'childAgent.status.running': string\n 'childAgent.status.completed': string\n 'hitl.form.defaultTitle': string\n 'hitl.wait.default': string\n 'todo.completed.count': string\n 'todo.blocked.count': string\n 'todo.more': string\n 'todo.header.done': string\n 'tool.phase.generating': string\n 'tool.phase.executing': string\n 'tool.phase.complete': string\n 'tool.phase.error': string\n 'tool.executing': string\n 'tool.mcp.running': string\n 'tool.mcp.success': string\n 'tool.mcp.error': string\n 'form.placeholder.select': string\n 'form.required.default': string\n 'form.submit.submit': string\n 'form.submit.submitting': string\n 'form.requestId': string\n 'pinned.label': string\n 'plan.title': string\n 'plan.step': string\n 'thinking.inProgress': string\n 'thinking.completed': string\n 'split.unreadCount': string\n 'split.askQuestion': string\n 'split.exitFullscreen': string\n 'context.inputPlaceholder': string\n 'context.inputPlaceholderWithFile': string\n 'context.send': string\n 'context.removeReference': string\n 'split.home': string\n 'split.workspace': string\n 'split.annotation': string\n 'split.tabClose': string\n 'split.tabNew': string\n 'workspace.title': string\n 'workspace.searchPlaceholder': string\n 'workspace.empty': string\n 'workspace.downloadAll': string\n 'workspace.recent': string\n 'workspace.open': string\n 'workspace.openInNewTab': string\n 'workspace.download': string\n 'workspace.copyPath': string\n 'workspace.expandAll': string\n 'workspace.collapseAll': string\n 'annotation.title': string\n 'annotation.empty': string\n 'annotation.fileLevelTitle': string\n 'annotation.fileLevelPlaceholder': string\n 'annotation.anchoredPlaceholder': string\n 'annotation.inlineInputPlaceholder': string\n 'annotation.replyPlaceholder': string\n 'annotation.anchorLabel': string\n 'annotation.close': string\n 'annotation.fabLabel': string\n 'annotation.fabHeader': string\n 'annotation.messageCount': string\n 'annotation.anchorInvalid': string\n 'annotation.errorRetry': string\n 'annotation.queuedHint': string\n 'annotation.selectionLabel': string\n 'agentControl.pause': string\n 'agentControl.resume': string\n 'agentControl.stop': string\n 'agentControl.paused': string\n 'agentControl.groupTitle': string\n 'aria.fileNavigation': string\n 'kicad.loadFailed': string\n 'kicad.urlNotReady': string\n 'kicad.loadingEngine': string\n 'kicad.sidebarTitle': string\n 'kicad.sidebarPcb': string\n 'kicad.sidebarSch': string\n 'kicad.sidebarGeneric': string\n 'kicad.viewVisual': string\n 'kicad.viewSource': string\n 'provenance.filter.type.agent': string\n 'provenance.filter.type.action': string\n 'provenance.filter.type.file': string\n 'provenance.filter.type.task': string\n 'provenance.filter.type.reasoning': string\n 'provenance.filter.depth': string\n 'provenance.toolbar.zoomToFit': string\n 'provenance.toolbar.resetCamera': string\n 'provenance.toolbar.refresh': string\n 'provenance.legend.reasoning': string\n 'provenance.legend.action': string\n 'provenance.legend.file': string\n 'provenance.legend.task': string\n 'provenance.legend.references': string\n 'provenance.legend.edges': string\n 'provenance.legend.depth': string\n 'provenance.detail.title': string\n 'provenance.detail.noSelection': string\n 'provenance.detail.label.name': string\n 'provenance.detail.label.id': string\n 'provenance.detail.label.timestamp': string\n 'provenance.detail.label.agentId': string\n 'provenance.detail.label.instanceId': string\n 'provenance.detail.label.level': string\n 'provenance.detail.label.status': string\n 'provenance.detail.label.tool': string\n 'provenance.detail.label.purpose': string\n 'provenance.detail.label.duration': string\n 'provenance.detail.label.path': string\n 'provenance.detail.label.operation': string\n 'provenance.detail.label.taskId': string\n 'provenance.detail.label.description': string\n 'provenance.detail.label.model': string\n 'provenance.detail.label.tokenCount': string\n 'provenance.detail.label.reasoningPreview': string\n 'provenance.detail.relatedEdges': string\n 'provenance.page.noSessionHint': string\n 'provenance.page.loading': string\n 'provenance.page.emptyGraph': string\n 'provenance.drawer.emptyGraph': string\n 'provenance.graph.edgeType.references': string\n 'toolResult.label': string\n 'toolResult.expandAll': string\n 'toolResult.searchSummary': string\n 'toolResult.scrapeSummary': string\n 'toolResult.more': string\n 'plan.status.active': string\n 'pinned.noMessage': string\n 'viewer.fallback.unknownType': string\n 'viewer.fallback.download': string\n 'fileSize.B': string\n 'fileSize.KB': string\n 'fileSize.MB': string\n 'thinking.title': string\n 'thinking.step': string\n 'viewer.stepHint': string\n 'viewer.threeHint': string\n 'reference.header': string\n 'history.noMessage': string\n 'agent.defaultName': string\n 'error.unknown': string\n 'locale': string\n 'skill.inlineLabel': string\n 'skill.empty': string\n 'skill.searchPlaceholder': string\n 'skill.removeLabel': string\n 'skill.loading': string\n 'skill.loadError': string\n 'skill.loadMore': string\n 'skill.selectorLabel': string\n 'pool.idle': string\n 'pool.collaborating': string\n /** JETP-083 WS3.7.7 follow-up: badge text when at least one agent is\n * paused on a HIL response (no RUNNING agents). ``{{count}}`` = number\n * of paused agents. */\n 'pool.awaiting': string\n 'pool.title': string\n 'pool.empty': string\n 'pool.state.running': string\n /** JETP-083 WS3.7.7 follow-up: agent-row state label for an agent that\n * is blocked inside ``_await_genui_blocking`` waiting on a human HIL\n * reply. Distinguishes from ``running`` / ``completed`` / ``lost``;\n * mapped from backend ``state=\"PAUSED\"``. */\n 'pool.state.paused': string\n 'pool.state.completed': string\n 'pool.state.lost': string\n 'pool.state.unknown': string\n 'input.placeholder': string\n 'input.placeholderLoading': string\n 'discussion.title': string\n 'discussion.empty': string\n 'discussion.active': string\n 'discussion.resolved': string\n 'discussion.archived': string\n 'round.foreign.label': string\n 'round.foreign.unread': string\n 'round.foreign.expand': string\n 'sidebar.mainChat': string\n 'sidebar.chat': string\n 'sidebar.fileQA': string\n 'sidebar.selectionQA': string\n 'sessionList.title': string\n 'sessionList.newSession': string\n 'sessionList.logout': string\n 'sessionList.loading': string\n 'sessionList.empty': string\n 'sessionList.unsupported': string\n 'sessionList.untitled': string\n 'sessionList.deleteTitle': string\n 'sessionList.deleteConfirm': string\n 'sessionList.prevPage': string\n 'sessionList.nextPage': string\n 'sessionList.pageInfo': string\n // ModelPicker (composer 内的\"本次发送使用的模型\"切换器)\n 'modelPicker.menu.head': string\n 'modelPicker.menu.aria': string\n 'modelPicker.auto.title': string\n 'modelPicker.auto.hint.knownChannel': string\n 'modelPicker.auto.hint.knownBasename': string\n 'modelPicker.auto.hint.fallback': string\n 'modelPicker.row.hint.channelMulti': string\n 'modelPicker.row.hint.channelSingle': string\n 'modelPicker.row.hint.versionMulti': string\n 'modelPicker.fallback.placeholder': string\n 'modelPicker.inert.title': string\n 'modelPicker.guestLocked.label': string\n 'modelPicker.guestLocked.title': string\n 'modelPicker.loadingList': string\n 'modelPicker.trigger.title.stale': string\n 'modelPicker.trigger.title.agentDefault.withChannel': string\n 'modelPicker.trigger.title.agentDefault': string\n 'modelPicker.trigger.title.current': string\n 'modelPicker.row.title.pickDefault': string\n 'modelPicker.row.title.pick': string\n 'modelPicker.chip.aria': string\n 'modelPicker.chip.title.available': string\n 'modelPicker.chip.title.unavailable': string\n // CWRF-013 Phase 4 P2-T00 — `jr-primitives` i18n namespace\n // (spec drift D-I18N-01: rather than pull in `react-i18next` + `i18next`\n // as the spec D9 originally proposed, we extend the existing chat-widget\n // in-house i18n. Same key semantics, zero new dependency.)\n 'jr.confirmDialog.cancel': string\n 'jr.confirmDialog.confirm': string\n 'jr.confirmDialog.loading': string\n}\n\nexport const zhCN: ChatWidgetMessages = {\n 'header.title': 'YumiAI',\n 'header.icon': '',\n 'status.connecting': '连接中...',\n 'status.running': '执行中...',\n 'status.compressing': '上下文压缩中...',\n 'status.error': '连接错误',\n 'status.idle': '待命',\n 'empty.waiting': '等待对话开始...',\n 'empty.icon': '',\n 'round.separator': '上一轮对话',\n 'round.status.running': '执行中',\n 'round.status.completed': '已完成',\n 'round.status.error': '执行失败',\n 'round.noMessage': '(无消息)',\n 'footer.attribution': '',\n 'selection.ask': '问一下',\n 'viewer.loading': '加载中...',\n 'viewer.error': '无法获取文件内容',\n 'viewer.back': '← 返回',\n 'viewer.defaultTitle': '文件预览',\n 'viewer.copyFull': '复制全文',\n 'viewer.copyFullTitle': '复制全文到剪贴板并引用',\n 'viewer.referenceFile': '引用此文件',\n 'viewer.referenceFileTitle': '引用此文件',\n 'viewer.referencePage': '引用当前页面',\n 'viewer.referencePageTitle': '引用当前页面到对话',\n 'viewer.download': '下载',\n 'viewer.fullscreen': '全屏 (⌘L)',\n 'viewer.fullscreenExit': '退出全屏',\n 'viewer.close': '关闭',\n 'viewer.unknownType': '未知类型',\n 'viewer.iframeHint': 'iframe 内容无法直接选中文本,请使用上方「引用此文件」按钮',\n 'viewer.copySnippet': '复制片段',\n 'viewer.loadingPdf': '加载 PDF 查看器...',\n 'viewer.pdfPages': '共 {{count}} 页',\n 'viewer.loadingKicad': '加载 KiCad 查看器...',\n 'viewer.loading3d': '加载 3D 查看器...',\n 'viewer.loadingStep': '加载 STEP 查看器...',\n 'viewer.gerberTitle': 'DFX Copilot — Gerber 预览',\n 'viewer.gerberBlobWarning':\n 'DFX Copilot 需要从公网可访问的地址拉取文件。当前为本地 blob/data URL,iframe 内无法使用。请在 Adapter 中返回 content_url,或实现 getResourceUrl 提供 HTTPS 预签名链接。',\n 'viewer.gerberNoHttpUrl':\n '当前资源地址不是 http(s),无法嵌入 DFX Copilot。请使用直链或预签名 URL。',\n 'viewer.pdfPreview': 'PDF 预览',\n 'viewer.htmlPreview': 'HTML 预览',\n 'viewer.htmlProjectLoading': '正在加载 HTML 项目文件…',\n 'viewer.htmlProjectNoEntry': 'HTML 项目缺少入口文件(如 index.html),无法预览',\n 'viewer.htmlProjectSizeLimit': 'HTML 项目超出大小限制,仅显示入口文件',\n 'viewer.htmlStrategyForcedInlineWarning': '检测到 ESM 模块,但已强制 inline 策略,可能加载失败',\n 'viewer.htmlStrategyFallbackCspWarning': '宿主 CSP 禁止 blob:,已自动降级到 inline 策略',\n 'viewer.copyFullKicadTitle': '复制全文 KiCad 原文到剪贴板并引用,粘贴到输入框即可带入',\n 'viewer.zoomIn': '放大',\n 'viewer.zoomOut': '缩小',\n 'viewer.zoomReset': '重置',\n 'viewer.loadingWord': '加载 Word 查看器...',\n 'viewer.loadingExcel': '加载 Excel 查看器...',\n 'viewer.loadingPowerPoint': '加载 PowerPoint 查看器...',\n 'viewer.pptPrev': '‹ 上一页',\n 'viewer.pptNext': '下一页 ›',\n 'viewer.pptSlide': '幻灯片',\n 'viewer.pptThumbnails': '缩略图',\n 'viewer.excelRows': '行',\n 'viewer.excelColumns': '列',\n 'childAgent.status.running': '执行中',\n 'childAgent.status.completed': '已完成',\n 'hitl.form.defaultTitle': '请填写表单',\n 'hitl.wait.default': '等待用户输入...',\n 'todo.completed.count': '已完成 {{completed}}/{{total}}',\n 'todo.blocked.count': '{{count}} 项阻塞',\n 'todo.more': '+ {{count}} 更多',\n 'todo.header.done': '已完成',\n 'tool.phase.generating': '生成中',\n 'tool.phase.executing': '执行中',\n 'tool.phase.complete': '完成',\n 'tool.phase.error': '失败',\n 'tool.executing': '执行工具: {{name}}',\n 'tool.mcp.running': '执行中',\n 'tool.mcp.success': '完成',\n 'tool.mcp.error': '失败',\n 'form.placeholder.select': '请选择',\n 'form.required.default': '此项为必填项',\n 'form.submit.submit': '提交',\n 'form.submit.submitting': '提交中...',\n 'form.requestId': '请求 ID: ',\n 'pinned.label': '置顶',\n 'plan.title': '执行计划',\n 'plan.step': '步骤 {{index}}',\n 'thinking.inProgress': '思考中...',\n 'thinking.completed': '思考完成',\n 'split.unreadCount': '{{count}} 条新消息',\n 'split.askQuestion': '提问 (⌘/)',\n 'split.exitFullscreen': '退出全屏 (Esc)',\n 'context.inputPlaceholder': '在这里提问…',\n 'context.inputPlaceholderWithFile': '关于 {{fileName}} 提问…',\n 'context.send': '发送',\n 'context.removeReference': '移除引用',\n 'split.home': '主对话',\n 'split.workspace': '工作空间',\n 'split.annotation': '批注',\n 'split.tabClose': '关闭标签页',\n 'split.tabNew': '新标签页',\n 'workspace.title': '工作空间',\n 'workspace.searchPlaceholder': '搜索文件…',\n 'workspace.empty': '暂无文件',\n 'workspace.downloadAll': '打包下载全部文件',\n 'workspace.recent': '最近修改',\n 'workspace.open': '打开',\n 'workspace.openInNewTab': '在新标签页打开',\n 'workspace.download': '下载',\n 'workspace.copyPath': '复制路径',\n 'workspace.expandAll': '展开全部',\n 'workspace.collapseAll': '折叠全部',\n 'annotation.title': '批注',\n 'annotation.empty': '暂无批注',\n 'annotation.fileLevelTitle': '文件对话',\n 'annotation.fileLevelPlaceholder': '关于此文件提问…',\n 'annotation.anchoredPlaceholder': '关于所选内容提问…',\n 'annotation.inlineInputPlaceholder': '就此处提问…',\n 'annotation.replyPlaceholder': '继续追问…',\n 'annotation.anchorLabel': '锚点: {{text}}',\n 'annotation.close': '关闭',\n 'annotation.fabLabel': '文件批注',\n 'annotation.fabHeader': '{{fileName}} · 文件对话',\n 'annotation.messageCount': '{{count}} 条消息',\n 'annotation.anchorInvalid': '锚点已失效',\n 'annotation.errorRetry': '发送失败,点击重试',\n 'annotation.queuedHint': '排队中,请稍候…',\n 'annotation.selectionLabel': '选中内容',\n 'agentControl.pause': '暂停',\n 'agentControl.resume': '继续',\n 'agentControl.stop': '停止',\n 'agentControl.paused': '已暂停',\n 'agentControl.groupTitle': '工作组',\n 'aria.fileNavigation': '文件导航',\n 'kicad.loadFailed': 'KiCanvas 加载失败,已切换至源码视图',\n 'kicad.urlNotReady': '资源 URL 未就绪,当前显示源码',\n 'kicad.loadingEngine': '加载 KiCanvas 可视化引擎...',\n 'kicad.sidebarTitle': 'KiCanvas 侧栏提供:属性、符号/封装列表、文档信息等',\n 'kicad.sidebarPcb': 'PCB:侧栏可查属性、封装列表',\n 'kicad.sidebarSch': 'SCH:侧栏可查符号/子图属性',\n 'kicad.sidebarGeneric': '侧栏查看属性',\n 'kicad.viewVisual': '可视化',\n 'kicad.viewSource': '源码',\n 'provenance.filter.type.agent': '智能体',\n 'provenance.filter.type.action': '工具',\n 'provenance.filter.type.file': '文件',\n 'provenance.filter.type.task': '任务',\n 'provenance.filter.type.reasoning': '推理',\n 'provenance.filter.depth': '深度:',\n 'provenance.toolbar.zoomToFit': '自适应',\n 'provenance.toolbar.resetCamera': '重置视角',\n 'provenance.toolbar.refresh': '刷新',\n 'provenance.legend.reasoning': '推理',\n 'provenance.legend.action': '工具',\n 'provenance.legend.file': '文件',\n 'provenance.legend.task': '任务',\n 'provenance.legend.references': '引用',\n 'provenance.legend.edges': '边: ',\n 'provenance.legend.depth': '深度: ',\n 'provenance.detail.title': '节点详情',\n 'provenance.detail.noSelection': '未选中节点',\n 'provenance.detail.label.name': '名称',\n 'provenance.detail.label.id': 'ID',\n 'provenance.detail.label.timestamp': '时间',\n 'provenance.detail.label.agentId': 'Agent ID',\n 'provenance.detail.label.instanceId': '实例 ID',\n 'provenance.detail.label.level': '层级',\n 'provenance.detail.label.status': '状态',\n 'provenance.detail.label.tool': '工具',\n 'provenance.detail.label.purpose': '目的',\n 'provenance.detail.label.duration': '耗时',\n 'provenance.detail.label.path': '路径',\n 'provenance.detail.label.operation': '操作',\n 'provenance.detail.label.taskId': '任务 ID',\n 'provenance.detail.label.description': '描述',\n 'provenance.detail.label.model': '模型',\n 'provenance.detail.label.tokenCount': 'Token 数',\n 'provenance.detail.label.reasoningPreview': '推理预览',\n 'provenance.detail.relatedEdges': '关联边 ({{count}})',\n 'provenance.page.noSessionHint': '请通过 URL 参数指定会话: ?session_id=NNN',\n 'provenance.page.loading': '加载推理图谱...',\n 'provenance.page.emptyGraph': '当前会话暂无图谱数据',\n 'provenance.drawer.emptyGraph': '暂无图谱数据',\n 'provenance.graph.edgeType.references': '引用',\n 'toolResult.label': '执行结果',\n 'toolResult.expandAll': '展开全部 ({{count}} 行)',\n 'toolResult.searchSummary': '搜索结果 · {{count}} 条',\n 'toolResult.scrapeSummary': '抓取结果 · {{title}}',\n 'toolResult.more': '+{{count}} more',\n 'plan.status.active': '执行中',\n 'pinned.noMessage': '(无消息内容)',\n 'viewer.fallback.unknownType': '未知类型',\n 'viewer.fallback.download': '下载文件',\n 'fileSize.B': '{{size}} B',\n 'fileSize.KB': '{{size}} KB',\n 'fileSize.MB': '{{size}} MB',\n 'thinking.title': '思考推理',\n 'thinking.step': '步骤 {{step}}',\n 'viewer.stepHint': '鼠标拖拽旋转,滚轮缩放,右键平移',\n 'viewer.threeHint': '鼠标拖拽旋转,滚轮缩放,右键平移',\n 'viewer.3d.wireframe': '线框模式',\n 'viewer.3d.resetView': '重置视角',\n 'reference.header': '[引用文件: {{fileName}}]',\n 'history.noMessage': '(历史消息)',\n 'agent.defaultName': '助手',\n 'error.unknown': '未知错误',\n 'locale': 'zh-CN',\n 'skill.inlineLabel': '先查看并使用{{name}}技能,去解决:',\n 'skill.empty': '暂无可用技能',\n 'skill.searchPlaceholder': '搜索技能...',\n 'skill.removeLabel': '移除技能',\n 'skill.loading': '加载中...',\n 'skill.loadError': '加载技能失败',\n 'skill.loadMore': '加载更多',\n 'skill.selectorLabel': '技能选择',\n 'pool.idle': '待命',\n 'pool.collaborating': '{{count}} 协作中',\n 'pool.awaiting': '{{count}} 等待人工',\n 'pool.title': '智能体池',\n 'pool.empty': '暂无活跃智能体',\n 'pool.state.running': '执行中',\n 'pool.state.paused': '等待人工',\n 'pool.state.completed': '已完成',\n 'pool.state.lost': '已失联',\n 'pool.state.unknown': '未知',\n 'input.placeholder': '输入消息,/ 选择技能',\n 'input.placeholderLoading': '等待回复中…',\n 'discussion.title': '讨论',\n 'discussion.empty': '暂无讨论',\n 'discussion.active': '进行中',\n 'discussion.resolved': '已结论',\n 'discussion.archived': '已归档',\n 'round.foreign.label': '来自其他窗口的对话',\n 'round.foreign.unread': '{{count}} 条新消息',\n 'round.foreign.expand': '点击展开',\n 'sidebar.mainChat': '主对话',\n 'sidebar.chat': '对话',\n 'sidebar.fileQA': '文件问答',\n 'sidebar.selectionQA': '选区问答',\n 'sessionList.title': '历史会话',\n 'sessionList.newSession': '+ 新会话',\n 'sessionList.logout': '退出',\n 'sessionList.loading': '加载中...',\n 'sessionList.empty': '暂无会话',\n 'sessionList.unsupported': '当前 adapter 未实现 listSessions',\n 'sessionList.untitled': '无标题',\n 'sessionList.deleteTitle': '删除会话',\n 'sessionList.deleteConfirm': '确定删除该会话?',\n 'sessionList.prevPage': '←',\n 'sessionList.nextPage': '→',\n 'sessionList.pageInfo': '第 {page} / {totalPages} 页',\n 'modelPicker.menu.head': '本次使用的模型',\n 'modelPicker.menu.aria': '选择本次使用的模型',\n 'modelPicker.auto.title': '默认(跟随 Agent)',\n 'modelPicker.auto.hint.knownChannel': '当前 Agent 默认:{{name}} · {{channel}}',\n 'modelPicker.auto.hint.knownBasename': '当前 Agent 默认:{{name}}',\n 'modelPicker.auto.hint.fallback': '使用 Agent 注册的默认模型,跨子 Agent 自动切换',\n 'modelPicker.row.hint.channelMulti': '{{available}}/{{total}} 个渠道可用',\n 'modelPicker.row.hint.channelSingle': '渠道:{{channel}}',\n 'modelPicker.row.hint.versionMulti': '{{count}} 个版本可用',\n 'modelPicker.fallback.placeholder': '默认模型',\n 'modelPicker.inert.title': '模型选择当前不可用',\n 'modelPicker.guestLocked.label': '默认模型 · 登录后可选',\n 'modelPicker.guestLocked.title': '登录后可在多个模型间切换;游客先用默认模型即可开干。',\n 'modelPicker.loadingList': '加载模型清单…',\n 'modelPicker.trigger.title.stale': '{{name}}(已不在清单中,发送时仍会尝试使用)',\n 'modelPicker.trigger.title.agentDefault.withChannel':\n '当前 Agent 默认:{{name}} · {{channel}}(发送时跟随 Agent)',\n 'modelPicker.trigger.title.agentDefault': '当前 Agent 默认:{{name}}(发送时跟随 Agent)',\n 'modelPicker.trigger.title.current': '当前模型:{{name}}',\n 'modelPicker.row.title.pickDefault': '选默认渠道({{hint}})',\n 'modelPicker.row.title.pick': '选用 {{name}}',\n 'modelPicker.chip.aria': '{{title}} 渠道',\n 'modelPicker.chip.title.available': '渠道 {{channel}} · 模型 {{name}}',\n 'modelPicker.chip.title.unavailable': '渠道 {{channel}} · 当前不可用',\n 'jr.confirmDialog.cancel': '取消',\n 'jr.confirmDialog.confirm': '确认',\n 'jr.confirmDialog.loading': '处理中',\n}\n\nexport const enUS: ChatWidgetMessages = {\n 'header.title': 'AI Assistant',\n 'header.icon': '',\n 'status.connecting': 'Connecting...',\n 'status.running': 'Running...',\n 'status.compressing': 'Compressing context...',\n 'status.error': 'Connection error',\n 'status.idle': 'Idle',\n 'empty.waiting': 'Waiting for conversation...',\n 'empty.icon': '',\n 'round.separator': 'Previous round',\n 'round.status.running': 'Running',\n 'round.status.completed': 'Completed',\n 'round.status.error': 'Failed',\n 'round.noMessage': '(no message)',\n 'footer.attribution': '',\n 'selection.ask': 'Ask',\n 'viewer.loading': 'Loading...',\n 'viewer.error': 'Failed to load file content',\n 'viewer.back': '← Back',\n 'viewer.defaultTitle': 'File Preview',\n 'viewer.copyFull': 'Copy full',\n 'viewer.copyFullTitle': 'Copy full content to clipboard',\n 'viewer.referenceFile': 'Reference file',\n 'viewer.referenceFileTitle': 'Reference this file',\n 'viewer.referencePage': 'Reference page',\n 'viewer.referencePageTitle': 'Reference this page in chat',\n 'viewer.download': 'Download',\n 'viewer.fullscreen': 'Fullscreen (⌘L)',\n 'viewer.fullscreenExit': 'Exit fullscreen',\n 'viewer.close': 'Close',\n 'viewer.unknownType': 'Unknown type',\n 'viewer.iframeHint': 'iframe content cannot be selected directly. Use the \"Reference file\" button above.',\n 'viewer.copySnippet': 'Copy snippet',\n 'viewer.loadingPdf': 'Loading PDF viewer...',\n 'viewer.pdfPages': '{{count}} pages',\n 'viewer.loadingKicad': 'Loading KiCad viewer...',\n 'viewer.loading3d': 'Loading 3D viewer...',\n 'viewer.loadingStep': 'Loading STEP viewer...',\n 'viewer.gerberTitle': 'DFX Copilot — Gerber preview',\n 'viewer.gerberBlobWarning':\n 'DFX Copilot must fetch the file from a public URL. Local blob/data URLs cannot be used inside a cross-origin iframe. Return content_url from getResourceContent or implement getResourceUrl with an HTTPS presigned link.',\n 'viewer.gerberNoHttpUrl':\n 'The resource URL is not http(s); it cannot be passed to DFX Copilot. Use a direct or presigned URL.',\n 'viewer.pdfPreview': 'PDF Preview',\n 'viewer.htmlPreview': 'HTML Preview',\n 'viewer.htmlProjectLoading': 'Loading HTML project files…',\n 'viewer.htmlProjectNoEntry': 'HTML project is missing an entry file (e.g. index.html); cannot render',\n 'viewer.htmlProjectSizeLimit': 'HTML project exceeds size limit; only the entry file is rendered',\n 'viewer.htmlStrategyForcedInlineWarning': 'ESM modules detected, but inline strategy is forced; imports may fail',\n 'viewer.htmlStrategyFallbackCspWarning': 'Host CSP blocks blob: URLs; automatically falling back to inline strategy',\n 'viewer.copyFullKicadTitle': 'Copy full KiCad source to clipboard and reference',\n 'viewer.zoomIn': 'Zoom in',\n 'viewer.zoomOut': 'Zoom out',\n 'viewer.zoomReset': 'Reset',\n 'viewer.loadingWord': 'Loading Word viewer...',\n 'viewer.loadingExcel': 'Loading Excel viewer...',\n 'viewer.loadingPowerPoint': 'Loading PowerPoint viewer...',\n 'viewer.pptPrev': '‹ Prev',\n 'viewer.pptNext': 'Next ›',\n 'viewer.pptSlide': 'Slide',\n 'viewer.pptThumbnails': 'Thumbnails',\n 'viewer.excelRows': 'rows',\n 'viewer.excelColumns': 'columns',\n 'childAgent.status.running': 'Running',\n 'childAgent.status.completed': 'Completed',\n 'hitl.form.defaultTitle': 'Please fill the form',\n 'hitl.wait.default': 'Waiting for user input...',\n 'todo.completed.count': '{{completed}}/{{total}} completed',\n 'todo.blocked.count': '{{count}} blocked',\n 'todo.more': '+ {{count}} more',\n 'todo.header.done': 'Done',\n 'tool.phase.generating': 'Generating',\n 'tool.phase.executing': 'Executing',\n 'tool.phase.complete': 'Complete',\n 'tool.phase.error': 'Failed',\n 'tool.executing': 'Execute tool: {{name}}',\n 'tool.mcp.running': 'Running',\n 'tool.mcp.success': 'Complete',\n 'tool.mcp.error': 'Failed',\n 'form.placeholder.select': 'Please select',\n 'form.required.default': 'This field is required',\n 'form.submit.submit': 'Submit',\n 'form.submit.submitting': 'Submitting...',\n 'form.requestId': 'Request ID: ',\n 'pinned.label': 'Pinned',\n 'plan.title': 'Execution Plan',\n 'plan.step': 'Step {{index}}',\n 'thinking.inProgress': 'Thinking...',\n 'thinking.completed': 'Thinking completed',\n 'split.unreadCount': '{{count}} new messages',\n 'split.askQuestion': 'Ask (⌘/)',\n 'split.exitFullscreen': 'Exit fullscreen (Esc)',\n 'context.inputPlaceholder': 'Ask here...',\n 'context.inputPlaceholderWithFile': 'Ask about {{fileName}}...',\n 'context.send': 'Send',\n 'context.removeReference': 'Remove reference',\n 'split.home': 'Main Chat',\n 'split.workspace': 'Workspace',\n 'split.annotation': 'Annotations',\n 'split.tabClose': 'Close tab',\n 'split.tabNew': 'New tab',\n 'workspace.title': 'Workspace',\n 'workspace.searchPlaceholder': 'Search files...',\n 'workspace.empty': 'No files yet',\n 'workspace.downloadAll': 'Download all files as zip',\n 'workspace.recent': 'Recent changes',\n 'workspace.open': 'Open',\n 'workspace.openInNewTab': 'Open in new tab',\n 'workspace.download': 'Download',\n 'workspace.copyPath': 'Copy path',\n 'workspace.expandAll': 'Expand all',\n 'workspace.collapseAll': 'Collapse all',\n 'annotation.title': 'Annotations',\n 'annotation.empty': 'No annotations',\n 'annotation.fileLevelTitle': 'File Conversation',\n 'annotation.fileLevelPlaceholder': 'Ask about this file...',\n 'annotation.anchoredPlaceholder': 'Ask about selection...',\n 'annotation.inlineInputPlaceholder': 'Ask about this...',\n 'annotation.replyPlaceholder': 'Follow up...',\n 'annotation.anchorLabel': 'Anchor: {{text}}',\n 'annotation.close': 'Close',\n 'annotation.fabLabel': 'File annotation',\n 'annotation.fabHeader': '{{fileName}} · File Conversation',\n 'annotation.messageCount': '{{count}} messages',\n 'annotation.anchorInvalid': 'Anchor invalidated',\n 'annotation.errorRetry': 'Send failed, click to retry',\n 'annotation.queuedHint': 'Queued, please wait...',\n 'annotation.selectionLabel': 'Selected text',\n 'agentControl.pause': 'Pause',\n 'agentControl.resume': 'Resume',\n 'agentControl.stop': 'Stop',\n 'agentControl.paused': 'Paused',\n 'agentControl.groupTitle': 'Agent Group',\n 'aria.fileNavigation': 'File navigation',\n 'kicad.loadFailed': 'KiCanvas load failed, switched to source view',\n 'kicad.urlNotReady': 'Resource URL not ready, showing source',\n 'kicad.loadingEngine': 'Loading KiCanvas engine...',\n 'kicad.sidebarTitle': 'KiCanvas sidebar: properties, symbol/footprint list, docs',\n 'kicad.sidebarPcb': 'PCB: view properties, footprint list',\n 'kicad.sidebarSch': 'SCH: view symbol/sub-sheet properties',\n 'kicad.sidebarGeneric': 'View properties',\n 'kicad.viewVisual': 'Visual',\n 'kicad.viewSource': 'Source',\n 'provenance.filter.type.agent': 'Agent',\n 'provenance.filter.type.action': 'Action',\n 'provenance.filter.type.file': 'File',\n 'provenance.filter.type.task': 'Task',\n 'provenance.filter.type.reasoning': 'Reasoning',\n 'provenance.filter.depth': 'Depth:',\n 'provenance.toolbar.zoomToFit': 'Zoom to fit',\n 'provenance.toolbar.resetCamera': 'Reset camera',\n 'provenance.toolbar.refresh': 'Refresh',\n 'provenance.legend.reasoning': 'Reasoning',\n 'provenance.legend.action': 'Action',\n 'provenance.legend.file': 'File',\n 'provenance.legend.task': 'Task',\n 'provenance.legend.references': 'References',\n 'provenance.legend.edges': 'Edges: ',\n 'provenance.legend.depth': 'Depth: ',\n 'provenance.detail.title': 'Node details',\n 'provenance.detail.noSelection': 'No node selected',\n 'provenance.detail.label.name': 'Name',\n 'provenance.detail.label.id': 'ID',\n 'provenance.detail.label.timestamp': 'Timestamp',\n 'provenance.detail.label.agentId': 'Agent ID',\n 'provenance.detail.label.instanceId': 'Instance ID',\n 'provenance.detail.label.level': 'Level',\n 'provenance.detail.label.status': 'Status',\n 'provenance.detail.label.tool': 'Tool',\n 'provenance.detail.label.purpose': 'Purpose',\n 'provenance.detail.label.duration': 'Duration',\n 'provenance.detail.label.path': 'Path',\n 'provenance.detail.label.operation': 'Operation',\n 'provenance.detail.label.taskId': 'Task ID',\n 'provenance.detail.label.description': 'Description',\n 'provenance.detail.label.model': 'Model',\n 'provenance.detail.label.tokenCount': 'Token count',\n 'provenance.detail.label.reasoningPreview': 'Reasoning preview',\n 'provenance.detail.relatedEdges': 'Related edges ({{count}})',\n 'provenance.page.noSessionHint': 'Please specify session via URL: ?session_id=NNN',\n 'provenance.page.loading': 'Loading provenance graph...',\n 'provenance.page.emptyGraph': 'No graph data for this session',\n 'provenance.drawer.emptyGraph': 'No graph data',\n 'provenance.graph.edgeType.references': 'References',\n 'toolResult.label': 'Result',\n 'toolResult.expandAll': 'Expand all ({{count}} lines)',\n 'toolResult.searchSummary': 'Search results · {{count}}',\n 'toolResult.scrapeSummary': 'Scrape result · {{title}}',\n 'toolResult.more': '+{{count}} more',\n 'plan.status.active': 'Running',\n 'pinned.noMessage': '(no message content)',\n 'viewer.fallback.unknownType': 'Unknown type',\n 'viewer.fallback.download': 'Download file',\n 'fileSize.B': '{{size}} B',\n 'fileSize.KB': '{{size}} KB',\n 'fileSize.MB': '{{size}} MB',\n 'thinking.title': 'Thinking',\n 'thinking.step': 'Step {{step}}',\n 'viewer.stepHint': 'Drag to rotate, scroll to zoom, right-click to pan',\n 'viewer.threeHint': 'Drag to rotate, scroll to zoom, right-click to pan',\n 'viewer.3d.wireframe': 'Wireframe',\n 'viewer.3d.resetView': 'Reset view',\n 'reference.header': '[Reference: {{fileName}}]',\n 'history.noMessage': '(history message)',\n 'agent.defaultName': 'Assistant',\n 'error.unknown': 'Unknown error',\n 'locale': 'en-US',\n 'skill.inlineLabel': 'First check and use the {{name}} skill to solve: ',\n 'skill.empty': 'No skills available',\n 'skill.searchPlaceholder': 'Search skills...',\n 'skill.removeLabel': 'Remove skill',\n 'skill.loading': 'Loading...',\n 'skill.loadError': 'Failed to load skills',\n 'skill.loadMore': 'Load more',\n 'skill.selectorLabel': 'Skill selector',\n 'pool.idle': 'Idle',\n 'pool.collaborating': '{{count}} working',\n 'pool.awaiting': '{{count}} awaiting human',\n 'pool.title': 'Agent Pool',\n 'pool.empty': 'No active agents',\n 'pool.state.running': 'Running',\n 'pool.state.paused': 'Awaiting human',\n 'pool.state.completed': 'Completed',\n 'pool.state.lost': 'Lost',\n 'pool.state.unknown': 'Unknown',\n 'input.placeholder': 'Type a message, / for skills',\n 'input.placeholderLoading': 'Waiting for response…',\n 'discussion.title': 'Discussions',\n 'discussion.empty': 'No discussions',\n 'discussion.active': 'Active',\n 'discussion.resolved': 'Resolved',\n 'discussion.archived': 'Archived',\n 'round.foreign.label': 'Conversation from another tab',\n 'round.foreign.unread': '{{count}} new messages',\n 'round.foreign.expand': 'Click to expand',\n 'sidebar.mainChat': 'Main chat',\n 'sidebar.chat': 'Chat',\n 'sidebar.fileQA': 'File Q&A',\n 'sidebar.selectionQA': 'Selection Q&A',\n 'sessionList.title': 'Sessions',\n 'sessionList.newSession': '+ New chat',\n 'sessionList.logout': 'Logout',\n 'sessionList.loading': 'Loading...',\n 'sessionList.empty': 'No sessions yet',\n 'sessionList.unsupported': 'Adapter does not implement listSessions',\n 'sessionList.untitled': 'Untitled',\n 'sessionList.deleteTitle': 'Delete session',\n 'sessionList.deleteConfirm': 'Delete this session?',\n 'sessionList.prevPage': '←',\n 'sessionList.nextPage': '→',\n 'sessionList.pageInfo': 'Page {page} / {totalPages}',\n 'modelPicker.menu.head': 'Model for this turn',\n 'modelPicker.menu.aria': 'Choose the model for this turn',\n 'modelPicker.auto.title': 'Default (follow agent)',\n 'modelPicker.auto.hint.knownChannel': 'Agent default: {{name}} · {{channel}}',\n 'modelPicker.auto.hint.knownBasename': 'Agent default: {{name}}',\n 'modelPicker.auto.hint.fallback':\n \"Use the agent's registered default model; sub-agents follow automatically\",\n 'modelPicker.row.hint.channelMulti': '{{available}} of {{total}} channels available',\n 'modelPicker.row.hint.channelSingle': 'Channel: {{channel}}',\n 'modelPicker.row.hint.versionMulti': '{{count}} versions available',\n 'modelPicker.fallback.placeholder': 'Default model',\n 'modelPicker.inert.title': 'Model picker is unavailable',\n 'modelPicker.guestLocked.label': 'Default model · sign in to choose',\n 'modelPicker.guestLocked.title':\n 'Signed-in users can switch among multiple models. As a guest you start with the default — sign in any time to swap.',\n 'modelPicker.loadingList': 'Loading model list…',\n 'modelPicker.trigger.title.stale':\n '{{name}} (no longer listed — will still be attempted on send)',\n 'modelPicker.trigger.title.agentDefault.withChannel':\n 'Agent default: {{name}} · {{channel}} (sent value follows the agent)',\n 'modelPicker.trigger.title.agentDefault':\n 'Agent default: {{name}} (sent value follows the agent)',\n 'modelPicker.trigger.title.current': 'Current model: {{name}}',\n 'modelPicker.row.title.pickDefault': 'Use default channel ({{hint}})',\n 'modelPicker.row.title.pick': 'Use {{name}}',\n 'modelPicker.chip.aria': '{{title}} channels',\n 'modelPicker.chip.title.available': 'Channel {{channel}} · model {{name}}',\n 'modelPicker.chip.title.unavailable': 'Channel {{channel}} · currently unavailable',\n 'jr.confirmDialog.cancel': 'Cancel',\n 'jr.confirmDialog.confirm': 'Confirm',\n 'jr.confirmDialog.loading': 'Processing',\n}\n\nexport type ChatWidgetLocale = 'zh-CN' | 'en-US'\n\nconst builtinMessages: Record<ChatWidgetLocale, ChatWidgetMessages> = {\n 'zh-CN': zhCN,\n 'en-US': enUS,\n}\n\nexport function resolveMessages(\n locale: ChatWidgetLocale = 'zh-CN',\n overrides?: Partial<ChatWidgetMessages>,\n): ChatWidgetMessages {\n const base = builtinMessages[locale] ?? zhCN\n if (!overrides) return base\n return { ...base, ...overrides }\n}\n\nexport function interpolate(\n template: string,\n params?: Record<string, string | number>,\n): string {\n if (!params) return template\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) =>\n String(params[key] ?? ''),\n )\n}\n","import { createContext, useContext, useCallback } from 'react'\nimport type { ChatWidgetMessages, ChatWidgetLocale } from './messages.js'\nimport { zhCN, interpolate } from './messages.js'\n\nexport const I18nContext = createContext<ChatWidgetMessages>(zhCN)\n\nexport function useChatWidgetI18n() {\n const messages = useContext(I18nContext)\n\n const locale: ChatWidgetLocale = (messages['locale'] as ChatWidgetLocale) || 'zh-CN'\n\n const t = useCallback(\n (key: keyof ChatWidgetMessages, params?: Record<string, string | number>): string => {\n const template = messages[key] ?? key\n return interpolate(template, params)\n },\n [messages],\n )\n\n return { messages, t, locale }\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-VXJWGLZ7.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// src/components/ViewerCore/hooks/useRevokeBlobUrl.ts
|
|
2
|
-
import { useEffect, useRef } from "react";
|
|
3
|
-
function useRevokeBlobUrl(src) {
|
|
4
|
-
const prevRef = useRef(void 0);
|
|
5
|
-
useEffect(() => {
|
|
6
|
-
if (prevRef.current && prevRef.current.startsWith("blob:") && prevRef.current !== src) {
|
|
7
|
-
URL.revokeObjectURL(prevRef.current);
|
|
8
|
-
}
|
|
9
|
-
prevRef.current = src;
|
|
10
|
-
return () => {
|
|
11
|
-
if (src?.startsWith("blob:")) {
|
|
12
|
-
URL.revokeObjectURL(src);
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
}, [src]);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export {
|
|
19
|
-
useRevokeBlobUrl
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=chunk-VXJWGLZ7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ViewerCore/hooks/useRevokeBlobUrl.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\n/**\n * Revoke a blob: URL when the component unmounts or the src changes.\n * No-op for non-blob URLs.\n */\nexport function useRevokeBlobUrl(src: string | undefined): void {\n const prevRef = useRef<string | undefined>(undefined)\n\n useEffect(() => {\n if (prevRef.current && prevRef.current.startsWith('blob:') && prevRef.current !== src) {\n URL.revokeObjectURL(prevRef.current)\n }\n prevRef.current = src\n\n return () => {\n if (src?.startsWith('blob:')) {\n URL.revokeObjectURL(src)\n }\n }\n }, [src])\n}\n"],"mappings":";AAAA,SAAS,WAAW,cAAc;AAM3B,SAAS,iBAAiB,KAA+B;AAC9D,QAAM,UAAU,OAA2B,MAAS;AAEpD,YAAU,MAAM;AACd,QAAI,QAAQ,WAAW,QAAQ,QAAQ,WAAW,OAAO,KAAK,QAAQ,YAAY,KAAK;AACrF,UAAI,gBAAgB,QAAQ,OAAO;AAAA,IACrC;AACA,YAAQ,UAAU;AAElB,WAAO,MAAM;AACX,UAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,YAAI,gBAAgB,GAAG;AAAA,MACzB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AACV;","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|