agentroam-runtime-darwin-arm64 0.2.0-preview.53 → 0.2.0-preview.55
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/manifest.json +2 -2
- package/package.json +1 -1
- package/runtime/.next/BUILD_ID +1 -1
- package/runtime/.next/app-path-routes-manifest.json +1 -1
- package/runtime/.next/build-manifest.json +2 -2
- package/runtime/.next/prerender-manifest.json +1 -1
- package/runtime/.next/server/app/_not-found.html +1 -1
- package/runtime/.next/server/app/_not-found.rsc +1 -1
- package/runtime/.next/server/app-paths-manifest.json +27 -27
- package/runtime/.next/server/pages/404.html +1 -1
- package/runtime/.next/server/pages/500.html +1 -1
- package/runtime/.next/server/server-reference-manifest.json +1 -1
- package/runtime/lib/remote-control/helper-manager.mjs +13 -16
- package/runtime/lib/remote-control/macos-helper-app.mjs +181 -0
- package/runtime/lib/remote-control/remote-authorization.mjs +2 -1
- package/runtime/native/{AgentRoam Remote Desktop.app → Support.noindex/AgentRoam Remote Desktop.app}/Contents/MacOS/agentroam-remote-desktop +0 -0
- package/runtime/native/Support.noindex/AgentRoam Remote Desktop.app/Contents/Resources/agentroam-component.json +1 -0
- package/runtime/native/{AgentRoam Remote Desktop.app → Support.noindex/AgentRoam Remote Desktop.app}/Contents/_CodeSignature/CodeResources +11 -0
- package/runtime/webapp/dist/assets/{AiHubPane-28mWQJ4O.js → AiHubPane-Cu92elLn.js} +1 -1
- package/runtime/webapp/dist/assets/{App-ekMWYwJF.js → App-CIoUFqUR.js} +3 -3
- package/runtime/webapp/dist/assets/{BrowserLivePanel-jpMOjMFS.js → BrowserLivePanel-BsthwY1a.js} +1 -1
- package/runtime/webapp/dist/assets/{CollaborationDashboard-DWlttP3f.js → CollaborationDashboard-DG7Y0h1s.js} +1 -1
- package/runtime/webapp/dist/assets/{CollaborationPage-CsXdyER9.js → CollaborationPage-DA902wqi.js} +1 -1
- package/runtime/webapp/dist/assets/{FilePreview-C8hi9jdd.js → FilePreview-CGjiY6Oh.js} +3 -3
- package/runtime/webapp/dist/assets/{FileTree-Bl3OeqMa.js → FileTree-BC45MKRL.js} +1 -1
- package/runtime/webapp/dist/assets/{FlowStudioPane-B2Crgund.js → FlowStudioPane-9TrQcObf.js} +1 -1
- package/runtime/webapp/dist/assets/{RemoteDesktopPage-BuGJBiP2.js → RemoteDesktopPage-DMnDxASQ.js} +1 -1
- package/runtime/webapp/dist/assets/{TerminalPane-JNs8BUgC.js → TerminalPane-Ds9JxVMt.js} +1 -1
- package/runtime/webapp/dist/assets/{abnfDiagram-VCTEODGH-Da5MSN2N.js → abnfDiagram-VCTEODGH-2YNJ76WG.js} +1 -1
- package/runtime/webapp/dist/assets/{arc-CJB563ao.js → arc-CcKuP0ye.js} +1 -1
- package/runtime/webapp/dist/assets/{architectureDiagram-5GKGNRK7-DHyh6h-n.js → architectureDiagram-5GKGNRK7-Bw49xhZn.js} +1 -1
- package/runtime/webapp/dist/assets/{artifact-links-CPifzsfG.js → artifact-links-OG5Ksgyd.js} +1 -1
- package/runtime/webapp/dist/assets/{blockDiagram-I7D4REHJ-Cuk8q0Bq.js → blockDiagram-I7D4REHJ-Dqm_qfY7.js} +1 -1
- package/runtime/webapp/dist/assets/{c4Diagram-7LVT6UL2-BCPECNbi.js → c4Diagram-7LVT6UL2-CASULDQ9.js} +1 -1
- package/runtime/webapp/dist/assets/channel-xKavBx6z.js +1 -0
- package/runtime/webapp/dist/assets/{chunk-2Q5K7J3B-B1J-5flF.js → chunk-2Q5K7J3B-yEnUXBZC.js} +1 -1
- package/runtime/webapp/dist/assets/{chunk-5VM5RSS4-CaM_vBe1.js → chunk-5VM5RSS4-Djs5IDQf.js} +1 -1
- package/runtime/webapp/dist/assets/{chunk-F27PBJKO-BDwB4XD_.js → chunk-F27PBJKO-CdLh9ewF.js} +1 -1
- package/runtime/webapp/dist/assets/{chunk-IMKFNOWR-N5RKmqRM.js → chunk-IMKFNOWR-I-pRrlxR.js} +1 -1
- package/runtime/webapp/dist/assets/{chunk-JWPE2WC7-B1hPaIN0.js → chunk-JWPE2WC7-BD2Gv69T.js} +1 -1
- package/runtime/webapp/dist/assets/{chunk-POPQ4Y6H-DtWE5sgA.js → chunk-POPQ4Y6H-BhuerIJs.js} +1 -1
- package/runtime/webapp/dist/assets/{chunk-SVP7TREG-5FC9DbzN.js → chunk-SVP7TREG-AWEtUvjM.js} +1 -1
- package/runtime/webapp/dist/assets/{chunk-TICWLB2K-CpXAEy0r.js → chunk-TICWLB2K-BiO_dQcW.js} +1 -1
- package/runtime/webapp/dist/assets/{chunk-XXDRQBXY-b8vc4bP6.js → chunk-XXDRQBXY-zkjO5GCv.js} +1 -1
- package/runtime/webapp/dist/assets/classDiagram-ZZMXUADV-B6zj-gda.js +1 -0
- package/runtime/webapp/dist/assets/classDiagram-v2-VYDZK3BY-B6zj-gda.js +1 -0
- package/runtime/webapp/dist/assets/{clipboard-3WFkCzei.js → clipboard-CvdeFLww.js} +1 -1
- package/runtime/webapp/dist/assets/{codeSyntax-DS1_JVNX.js → codeSyntax-ByG7L1fi.js} +1 -1
- package/runtime/webapp/dist/assets/{collaboration-D-rkE6BZ.js → collaboration-Be_9WEiY.js} +1 -1
- package/runtime/webapp/dist/assets/{cose-bilkent-JH36ORCC-KBhpU3xZ.js → cose-bilkent-JH36ORCC-CAxuJw-v.js} +1 -1
- package/runtime/webapp/dist/assets/{cynefin-OW5HDTMX-DcTIXxSW.js → cynefin-OW5HDTMX-hLWhgC57.js} +1 -1
- package/runtime/webapp/dist/assets/{cynefinDiagram-5FMLGOSQ-BDw54V_6.js → cynefinDiagram-5FMLGOSQ-uelhySIx.js} +1 -1
- package/runtime/webapp/dist/assets/{dagre-GXQ25YYZ-BH9md9Zn.js → dagre-GXQ25YYZ-DPO7KxIX.js} +1 -1
- package/runtime/webapp/dist/assets/{diagram-S7CK7UJ4-D_g32W87.js → diagram-S7CK7UJ4-B8jQa5Lm.js} +1 -1
- package/runtime/webapp/dist/assets/{diagram-UQ7AKVKN-CS8ZEPA3.js → diagram-UQ7AKVKN-DdymRFf0.js} +1 -1
- package/runtime/webapp/dist/assets/{diagram-VSXAHHWV-VvEP2JUb.js → diagram-VSXAHHWV-BHAv1Uzp.js} +1 -1
- package/runtime/webapp/dist/assets/{diagram-VX7I27RA-BfoXLyAq.js → diagram-VX7I27RA-DlRev6E7.js} +1 -1
- package/runtime/webapp/dist/assets/{diagram-Z3DM3KII-BpzHahJO.js → diagram-Z3DM3KII-DspqqK0b.js} +1 -1
- package/runtime/webapp/dist/assets/{ebnfDiagram-PWID7BFC-CAGXPKzY.js → ebnfDiagram-PWID7BFC-BwStWg-O.js} +1 -1
- package/runtime/webapp/dist/assets/{erDiagram-RLTQ6QDP-DXgIcNCs.js → erDiagram-RLTQ6QDP-jUH66GeO.js} +1 -1
- package/runtime/webapp/dist/assets/{file-types-BzGqzhLB.js → file-types-Bbr1oDan.js} +1 -1
- package/runtime/webapp/dist/assets/{flowDiagram-HODETNUW-CflNqqOn.js → flowDiagram-HODETNUW-b2JhyYZh.js} +1 -1
- package/runtime/webapp/dist/assets/{ganttDiagram-EL5Y4UJY-BXuekM-f.js → ganttDiagram-EL5Y4UJY-k6xQA8nM.js} +1 -1
- package/runtime/webapp/dist/assets/{gitGraphDiagram-WWUBYQGX-bYPad77G.js → gitGraphDiagram-WWUBYQGX-Cg8O3XcX.js} +1 -1
- package/runtime/webapp/dist/assets/{index-Br90NYRo.js → index-CQepZy15.js} +4 -4
- package/runtime/webapp/dist/assets/{infoDiagram-27XIBGKW-CQPIcUL0.js → infoDiagram-27XIBGKW-BEZuUiUV.js} +1 -1
- package/runtime/webapp/dist/assets/{ishikawaDiagram-5VMMS53U-DEq3JCpB.js → ishikawaDiagram-5VMMS53U-D8cPBWA9.js} +1 -1
- package/runtime/webapp/dist/assets/{journeyDiagram-3NMN7TZE-BOsgjYtC.js → journeyDiagram-3NMN7TZE-BiCIZoXl.js} +1 -1
- package/runtime/webapp/dist/assets/{kanban-definition-UXKFOSKX-DQoyHlvK.js → kanban-definition-UXKFOSKX-DBGsdTe3.js} +1 -1
- package/runtime/webapp/dist/assets/{layout-Dvzdsu8z.js → layout-CESwBcoQ.js} +1 -1
- package/runtime/webapp/dist/assets/{linear-CZ1jj4Qd.js → linear-meicA11o.js} +1 -1
- package/runtime/webapp/dist/assets/{loader-circle-QarW4WFo.js → loader-circle-gCGomGeo.js} +1 -1
- package/runtime/webapp/dist/assets/{mermaid.core-KMEOhVvg.js → mermaid.core-BsSrKkY-.js} +5 -5
- package/runtime/webapp/dist/assets/{mindmap-definition-YA3MSWOX-D9I0keet.js → mindmap-definition-YA3MSWOX-Ci76EHnj.js} +1 -1
- package/runtime/webapp/dist/assets/{page-AR_mj5nj.js → page-CaBcebHM.js} +3 -3
- package/runtime/webapp/dist/assets/{pegDiagram-XKGWAZYB-DDAP2JW5.js → pegDiagram-XKGWAZYB-BJ9fzsRy.js} +1 -1
- package/runtime/webapp/dist/assets/{pieDiagram-E7YTZNPT-IH7ebgtF.js → pieDiagram-E7YTZNPT-Dr_g_s7V.js} +1 -1
- package/runtime/webapp/dist/assets/{quadrantDiagram-AXDQQJYC-DPPZl9Er.js → quadrantDiagram-AXDQQJYC-DRUIkYzL.js} +1 -1
- package/runtime/webapp/dist/assets/{railroadDiagram-O6MQD6OU-DNvgDa9Z.js → railroadDiagram-O6MQD6OU-z_f3jTzL.js} +1 -1
- package/runtime/webapp/dist/assets/{requirementDiagram-BXWQKSXE-BnwKpB1I.js → requirementDiagram-BXWQKSXE-BZ9192zw.js} +1 -1
- package/runtime/webapp/dist/assets/{rotate-ccw-DpluTZOU.js → rotate-ccw-CU6Ofovh.js} +1 -1
- package/runtime/webapp/dist/assets/{rotate-cw-7IpfF4VS.js → rotate-cw-CI-k2c-H.js} +1 -1
- package/runtime/webapp/dist/assets/{sankeyDiagram-P5KCCOFB-6DPBxCTG.js → sankeyDiagram-P5KCCOFB-D_bYtKCw.js} +1 -1
- package/runtime/webapp/dist/assets/{send-zD9gXsHU.js → send-B_L3JVTV.js} +1 -1
- package/runtime/webapp/dist/assets/{sequenceDiagram-WJ2MYXX4-9tGhIDjG.js → sequenceDiagram-WJ2MYXX4-BRPkyVwo.js} +1 -1
- package/runtime/webapp/dist/assets/{sizeCapture-INFHLROL-DOG6MmJx.js → sizeCapture-INFHLROL-D0IXlEUO.js} +1 -1
- package/runtime/webapp/dist/assets/{smartphone-CMucPYln.js → smartphone-BaM-cilR.js} +1 -1
- package/runtime/webapp/dist/assets/{stateDiagram-D77RDMKH-BH_8rviv.js → stateDiagram-D77RDMKH-DOPcJmKu.js} +1 -1
- package/runtime/webapp/dist/assets/stateDiagram-v2-MP3YSRHH-CosKh0dU.js +1 -0
- package/runtime/webapp/dist/assets/{swimlanes-42K2YHIH-C1OBfphK.js → swimlanes-42K2YHIH-DkWPxpZR.js} +1 -1
- package/runtime/webapp/dist/assets/swimlanesDiagram-VR7AAH4N-eLjpgpHz.js +8 -0
- package/runtime/webapp/dist/assets/{timeline-definition-24CTP7MA-C7NbwS8G.js → timeline-definition-24CTP7MA-DSSrwQZc.js} +1 -1
- package/runtime/webapp/dist/assets/{trash-2-CzmPRys1.js → trash-2-CCZMuVfC.js} +1 -1
- package/runtime/webapp/dist/assets/{vennDiagram-4TSXK5OY-BAv8h8Fn.js → vennDiagram-4TSXK5OY-QRwqQ2e4.js} +1 -1
- package/runtime/webapp/dist/assets/{wardleyDiagram-VM6X3IG4-DwXhvlJe.js → wardleyDiagram-VM6X3IG4-BOSS_TSY.js} +1 -1
- package/runtime/webapp/dist/assets/{web-C9euibRI.js → web-DX0wjWUS.js} +1 -1
- package/runtime/webapp/dist/assets/{web-BIr9lkvO.js → web-ebzGWnSw.js} +1 -1
- package/runtime/webapp/dist/assets/{x-rqFWnP_p.js → x-CbdLQm7m.js} +1 -1
- package/runtime/webapp/dist/assets/{xychartDiagram-S5SC5T6Z-CRXqCYvA.js → xychartDiagram-S5SC5T6Z-D9Rp3n6B.js} +1 -1
- package/runtime/webapp/dist/index.html +1 -1
- package/runtime/webapp/dist/assets/channel-C5zXYGqL.js +0 -1
- package/runtime/webapp/dist/assets/classDiagram-ZZMXUADV-LwOeM-av.js +0 -1
- package/runtime/webapp/dist/assets/classDiagram-v2-VYDZK3BY-LwOeM-av.js +0 -1
- package/runtime/webapp/dist/assets/stateDiagram-v2-MP3YSRHH-a8sCg_CM.js +0 -1
- package/runtime/webapp/dist/assets/swimlanesDiagram-VR7AAH4N-JsP2CwDv.js +0 -8
- /package/runtime/.next/static/{gT1sVPKvoSQGi2K39GoT_ → lQstNMvvKpEl9ExIG_tUW}/_buildManifest.js +0 -0
- /package/runtime/.next/static/{gT1sVPKvoSQGi2K39GoT_ → lQstNMvvKpEl9ExIG_tUW}/_ssgManifest.js +0 -0
- /package/runtime/native/{AgentRoam Remote Desktop.app → Support.noindex/AgentRoam Remote Desktop.app}/Contents/Info.plist +0 -0
- /package/runtime/native/{AgentRoam Remote Desktop.app → Support.noindex/AgentRoam Remote Desktop.app}/Contents/Resources/app-icon.icns +0 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { execFile, spawn } from 'node:child_process';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { access, cp, lstat, mkdir, mkdtemp, open, readFile, readdir, rename, rm } from 'node:fs/promises';
|
|
5
|
+
import { homedir } from 'node:os';
|
|
6
|
+
import { dirname, join, resolve } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import { promisify } from 'node:util';
|
|
9
|
+
|
|
10
|
+
const run = promisify(execFile);
|
|
11
|
+
const bundleId = 'com.agentroam.remote-desktop';
|
|
12
|
+
const executable = 'Contents/MacOS/agentroam-remote-desktop';
|
|
13
|
+
const metadata = 'Contents/Resources/agentroam-component.json';
|
|
14
|
+
const versionPattern = /^(\d+)\.(\d+)\.(\d+)(?:-preview\.(\d+))?$/;
|
|
15
|
+
|
|
16
|
+
export function bundledRemoteAppPath() {
|
|
17
|
+
const native = fileURLToPath(new URL('../../native/', import.meta.url));
|
|
18
|
+
const payload = join(native, 'Support.noindex/AgentRoam Remote Desktop.app');
|
|
19
|
+
return existsSync(payload) ? payload : join(native, 'AgentRoam Remote Desktop.app');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function compareVersions(left, right) {
|
|
23
|
+
const parts = (version) => {
|
|
24
|
+
const match = versionPattern.exec(version);
|
|
25
|
+
return match ? [Number(match[1]), Number(match[2]), Number(match[3]), match[4] === undefined ? Infinity : Number(match[4])] : [-1];
|
|
26
|
+
};
|
|
27
|
+
const a = parts(left), b = parts(right);
|
|
28
|
+
for (let i = 0; i < Math.max(a.length, b.length); i++) {
|
|
29
|
+
if ((a[i] ?? 0) !== (b[i] ?? 0)) return (a[i] ?? 0) > (b[i] ?? 0) ? 1 : -1;
|
|
30
|
+
}
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function readBundle(path) {
|
|
35
|
+
try { await access(join(path, executable)); } catch (error) { if (error.code === 'ENOENT') return null; throw error; }
|
|
36
|
+
const plist = await readFile(join(path, 'Contents/Info.plist'), 'utf8');
|
|
37
|
+
if (!/<key>CFBundleIdentifier<\/key>\s*<string>com\.agentroam\.remote-desktop<\/string>/.test(plist)) {
|
|
38
|
+
throw new Error('远控组件应用标识不匹配,未覆盖现有应用');
|
|
39
|
+
}
|
|
40
|
+
let version = 'legacy';
|
|
41
|
+
try {
|
|
42
|
+
const value = JSON.parse(await readFile(join(path, metadata), 'utf8'));
|
|
43
|
+
if (value.bundleId !== bundleId || !versionPattern.test(value.version)) throw new Error('远控组件版本信息无效');
|
|
44
|
+
version = value.version;
|
|
45
|
+
} catch (error) { if (error.code !== 'ENOENT') throw error; }
|
|
46
|
+
const hash = createHash('sha256');
|
|
47
|
+
async function visit(directory, relative = '') {
|
|
48
|
+
for (const entry of (await readdir(directory, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name))) {
|
|
49
|
+
const name = join(relative, entry.name), target = join(directory, entry.name);
|
|
50
|
+
if (entry.isDirectory()) await visit(target, name);
|
|
51
|
+
else if (entry.isFile()) { hash.update(name); hash.update('\0'); hash.update(await readFile(target)); hash.update('\0'); }
|
|
52
|
+
else throw new Error('远控组件包含非普通文件,未安装');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
await visit(path);
|
|
56
|
+
return { version, hash: hash.digest('hex') };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function processPathsInUse() {
|
|
60
|
+
const { stdout } = await run('/usr/sbin/lsof', ['-nP', '-a', '-u', String(process.getuid()), '-d', 'txt', '-Fn'], { timeout: 5000, maxBuffer: 16 * 1024 * 1024 });
|
|
61
|
+
const paths = stdout.split('\n').filter(line => line.startsWith('n/')).map(line => line.slice(1));
|
|
62
|
+
if (!paths.length) throw new Error('无法确认旧远控组件是否仍在使用,请稍后重试');
|
|
63
|
+
return paths;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async function verifyBundle(path) {
|
|
67
|
+
await run('/usr/bin/codesign', ['--verify', '--deep', '--strict', path], { timeout: 10000, maxBuffer: 4096 });
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async function registerApp(path, oldPath) {
|
|
71
|
+
const register = '/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister';
|
|
72
|
+
// Unregister the old launch target, retaining the package payload for repair.
|
|
73
|
+
if (oldPath !== path) await run(register, ['-u', oldPath], { timeout: 5000, maxBuffer: 4096 }).catch(() => {});
|
|
74
|
+
await run(register, ['-f', path], { timeout: 5000, maxBuffer: 4096 });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export async function acquireMacInstallLock(path, timeoutMs) {
|
|
78
|
+
const handle = await open(path, 'a', 0o600);
|
|
79
|
+
try {
|
|
80
|
+
// BSD flock belongs to the shared open-file description. lockf acquires
|
|
81
|
+
// it on inherited fd 3; our handle retains it until close or process exit.
|
|
82
|
+
// Keep the file so concurrent installers always lock the same inode.
|
|
83
|
+
await new Promise((resolve, reject) => {
|
|
84
|
+
const child = spawn('/usr/bin/lockf', ['-s', '-t', String(Math.ceil(timeoutMs / 1000)), '3'], { stdio: ['ignore', 'ignore', 'ignore', handle.fd] });
|
|
85
|
+
child.once('error', reject);
|
|
86
|
+
child.once('exit', code => code === 0 ? resolve() : reject(new Error(code === 75 ? '另一实例正在更新远控组件,请稍后重试' : '无法锁定远控组件安装位置')));
|
|
87
|
+
});
|
|
88
|
+
return () => handle.close();
|
|
89
|
+
} catch (error) { await handle.close(); throw error; }
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** One installed app per user; npm version directories only carry its payload. */
|
|
93
|
+
export class MacRemoteHelperApp {
|
|
94
|
+
constructor({ sourcePath = bundledRemoteAppPath(), appPath = join(homedir(), 'Library/Application Support/AgentRoamRemoteDesktop/Services.noindex/AgentRoam Remote Desktop.app'), pathsInUse = processPathsInUse, verify = verifyBundle, register = registerApp, acquireLock = acquireMacInstallLock, lockTimeoutMs = 10000 } = {}) {
|
|
95
|
+
Object.assign(this, { sourcePath, appPath, pathsInUse, verify, register, acquireLock, lockTimeoutMs });
|
|
96
|
+
this.updatePending = false;
|
|
97
|
+
}
|
|
98
|
+
async available() { try { await access(join(this.sourcePath, executable)); return true; } catch { return false; } }
|
|
99
|
+
async registerInstalled(hash) {
|
|
100
|
+
if (this.registeredHash === hash) return;
|
|
101
|
+
await this.register(this.appPath, this.sourcePath);
|
|
102
|
+
this.registeredHash = hash;
|
|
103
|
+
}
|
|
104
|
+
async describe() {
|
|
105
|
+
const installed = await readBundle(this.appPath);
|
|
106
|
+
const source = await readBundle(this.sourcePath);
|
|
107
|
+
return { name: 'AgentRoam Remote Desktop', path: this.appPath, version: installed?.version ?? source?.version ?? 'unknown', fingerprint: (installed ?? source)?.hash.slice(0, 12), installed: Boolean(installed), updatePending: this.updatePending, ...(this.updatePending ? { pendingVersion: source?.version } : {}) };
|
|
108
|
+
}
|
|
109
|
+
lock() { return this.acquireLock(join(dirname(this.appPath), '.remote-helper-install.lock'), this.lockTimeoutMs); }
|
|
110
|
+
prepare() { return this.withPreparedApp(path => path); }
|
|
111
|
+
async withPreparedApp(use) {
|
|
112
|
+
await mkdir(dirname(this.appPath), { recursive: true, mode: 0o700 });
|
|
113
|
+
const unlock = await this.lock();
|
|
114
|
+
try {
|
|
115
|
+
let existing = await lstat(this.appPath).catch(error => { if (error.code !== 'ENOENT') throw error; return null; });
|
|
116
|
+
if (existing && (!existing.isDirectory() || existing.isSymbolicLink())) throw new Error('远控组件安装位置不是普通应用目录,未覆盖');
|
|
117
|
+
const backup = join(dirname(this.appPath), '.remote-helper-previous.app');
|
|
118
|
+
const previous = await lstat(backup).catch(error => { if (error.code !== 'ENOENT') throw error; return null; });
|
|
119
|
+
if (previous) {
|
|
120
|
+
if (!previous.isDirectory() || previous.isSymbolicLink() || !await readBundle(backup)) throw new Error('远控组件更新备份无效,未覆盖');
|
|
121
|
+
// Recover a process exit between the two renames before considering
|
|
122
|
+
// the current CLI's version, which might be older than the backup.
|
|
123
|
+
if (!existing) {
|
|
124
|
+
await this.verify(backup);
|
|
125
|
+
await rename(backup, this.appPath);
|
|
126
|
+
existing = await lstat(this.appPath);
|
|
127
|
+
} else {
|
|
128
|
+
if (!await readBundle(this.appPath)) throw new Error('远控组件更新未完成,已保留旧应用备份');
|
|
129
|
+
await this.verify(this.appPath);
|
|
130
|
+
await rm(backup, { recursive: true });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const source = await readBundle(this.sourcePath);
|
|
134
|
+
if (!source) throw new Error('当前 CLI 未包含远程授权组件,请升级 CLI');
|
|
135
|
+
const installed = await readBundle(this.appPath);
|
|
136
|
+
const used = await this.pathsInUse();
|
|
137
|
+
const installedExecutable = join(this.appPath, executable);
|
|
138
|
+
const otherHelpers = used.filter(path => path.endsWith('/AgentRoam Remote Desktop.app/' + executable) && resolve(path) !== resolve(installedExecutable));
|
|
139
|
+
if (otherHelpers.length) throw new Error('旧位置的远控组件仍在使用,请先结束旧版 AgentRoam 的桌面共享,再重新检测');
|
|
140
|
+
// Repeated launches never rewrite an identical app. An older CLI cannot
|
|
141
|
+
// roll the shared component back after a newer CLI has installed it.
|
|
142
|
+
if (installed && (installed.hash === source.hash || installed.version !== 'legacy' && compareVersions(installed.version, source.version) >= 0)) {
|
|
143
|
+
await this.verify(this.appPath);
|
|
144
|
+
await this.registerInstalled(installed.hash);
|
|
145
|
+
this.updatePending = false;
|
|
146
|
+
return await use(this.appPath);
|
|
147
|
+
}
|
|
148
|
+
if (installed && used.includes(installedExecutable)) {
|
|
149
|
+
await this.verify(this.appPath);
|
|
150
|
+
await this.registerInstalled(installed.hash);
|
|
151
|
+
this.updatePending = true;
|
|
152
|
+
return await use(this.appPath);
|
|
153
|
+
}
|
|
154
|
+
const staging = await mkdtemp(join(dirname(this.appPath), '.remote-helper-update-'));
|
|
155
|
+
const staged = join(staging, 'AgentRoam Remote Desktop.app');
|
|
156
|
+
let moved = false;
|
|
157
|
+
try {
|
|
158
|
+
await cp(this.sourcePath, staged, { recursive: true, dereference: true });
|
|
159
|
+
await this.verify(staged);
|
|
160
|
+
if ((await readBundle(staged))?.hash !== source.hash) throw new Error('远控组件复制校验失败');
|
|
161
|
+
if (existing) { await rename(this.appPath, backup); moved = true; }
|
|
162
|
+
try { await rename(staged, this.appPath); }
|
|
163
|
+
catch (error) {
|
|
164
|
+
if (moved) {
|
|
165
|
+
try { await rename(backup, this.appPath); moved = false; }
|
|
166
|
+
catch { throw new Error(`远控组件更新失败,旧应用保留在 ${backup}`); }
|
|
167
|
+
}
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
170
|
+
this.updatePending = false;
|
|
171
|
+
await this.registerInstalled(source.hash);
|
|
172
|
+
if (moved) await rm(backup, { recursive: true });
|
|
173
|
+
} finally {
|
|
174
|
+
// Backups are only removed after replacement; running old copies were
|
|
175
|
+
// checked above. No permission records or user data are cleared.
|
|
176
|
+
await rm(staging, { recursive: true, force: true });
|
|
177
|
+
}
|
|
178
|
+
return await use(this.appPath);
|
|
179
|
+
} finally { await unlock(); }
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -103,7 +103,8 @@ export class RemoteAuthorization {
|
|
|
103
103
|
}
|
|
104
104
|
async status(local = true) {
|
|
105
105
|
const unlock = this.platform === 'win32' && this.system ? await this.system.probe().then(p => p.available ? 'available' : 'missing').catch(() => 'missing') : 'unsupported';
|
|
106
|
-
|
|
106
|
+
const component = local && this.platform === 'darwin' ? await this.helper.describe?.() : undefined;
|
|
107
|
+
return { local, platform: this.platform, supported: this.supported, installed: this.supported && await this.helper.available(), enabled: this.enabled, screen: this.screen, accessibility: this.accessibility, online: this.online, error: this.error, locked: this.locked, unlock, viewerCount: this.viewerCount, controlState: this.controlState, ...(component ? { component } : {}) };
|
|
107
108
|
}
|
|
108
109
|
/** Lock / wake / unlock entry point for paired remote viewers (`browser:system`). */
|
|
109
110
|
async systemAction(action, { password, sessionId } = {}) {
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"bundleId":"com.agentroam.remote-desktop","version":"0.2.0-preview.55"}
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
<dict>
|
|
5
5
|
<key>files</key>
|
|
6
6
|
<dict>
|
|
7
|
+
<key>Resources/agentroam-component.json</key>
|
|
8
|
+
<data>
|
|
9
|
+
DgkXdtjgGKFpWMJ65RXh8sbABs8=
|
|
10
|
+
</data>
|
|
7
11
|
<key>Resources/app-icon.icns</key>
|
|
8
12
|
<data>
|
|
9
13
|
TDonO9sq+QVXyuxDmTN5rrtVwKU=
|
|
@@ -11,6 +15,13 @@
|
|
|
11
15
|
</dict>
|
|
12
16
|
<key>files2</key>
|
|
13
17
|
<dict>
|
|
18
|
+
<key>Resources/agentroam-component.json</key>
|
|
19
|
+
<dict>
|
|
20
|
+
<key>hash2</key>
|
|
21
|
+
<data>
|
|
22
|
+
h4SVltZi2+kpFdrnxorwo2SHKpZO1z04lKGXw9nCc3Q=
|
|
23
|
+
</data>
|
|
24
|
+
</dict>
|
|
14
25
|
<key>Resources/app-icon.icns</key>
|
|
15
26
|
<dict>
|
|
16
27
|
<key>hash2</key>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as Q,r as l,j as r,d as Z}from"./index-
|
|
1
|
+
import{c as Q,r as l,j as r,d as Z}from"./index-CQepZy15.js";import{X as D}from"./x-CbdLQm7m.js";import{L as ee}from"./loader-circle-gCGomGeo.js";import{S as te}from"./send-B_L3JVTV.js";/**
|
|
2
2
|
* @license lucide-react v0.468.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./mermaid.core-
|
|
2
|
-
import{c as Je,a1 as uu,r as c,j as e,f as Lt,a0 as pu,a2 as Nc,a3 as fu,R as ha,U as hu,L as gu,z as mu,i as Vi,a4 as fl,u as wt,a5 as xu,A as ga,a6 as bu,P as ea,d as yu,a7 as Tc,D as vu,a8 as wu,a9 as ju,aa as Su}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./mermaid.core-BsSrKkY-.js","./index-CQepZy15.js","./index-JtFzay7w.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{c as Je,a1 as uu,r as c,j as e,f as Lt,a0 as pu,a2 as Nc,a3 as fu,R as ha,U as hu,L as gu,z as mu,i as Vi,a4 as fl,u as wt,a5 as xu,A as ga,a6 as bu,P as ea,d as yu,a7 as Tc,D as vu,a8 as wu,a9 as ju,aa as Su}from"./index-CQepZy15.js";import{c as di}from"./clipboard-CvdeFLww.js";import{X as Xn}from"./x-CbdLQm7m.js";import{C as Kn,r as to,p as ku,i as Iu}from"./artifact-links-OG5Ksgyd.js";import{C as ui,a as Cu,S as Ru,M as Au,G as hl,P as Eu}from"./smartphone-BaM-cilR.js";import{Z as Nu,a as Tu,B as Mu,V as _u}from"./BrowserLivePanel-BsthwY1a.js";import{R as Pu}from"./rotate-ccw-CU6Ofovh.js";import{D as Mc,F as zu}from"./FilePreview-CGjiY6Oh.js";import{L as at}from"./loader-circle-gCGomGeo.js";import{C as As,P as ma,T as Jr,A as _c}from"./trash-2-CCZMuVfC.js";import{d as xa,S as ba}from"./file-types-Bbr1oDan.js";import{S as gl,p as Lu,C as Wu,H as Du}from"./CollaborationPage-DA902wqi.js";import{c as Bu,U as Ou}from"./collaboration-Be_9WEiY.js";import{C as $u,a as Fu,H as Uu}from"./CollaborationDashboard-DG7Y0h1s.js";import{b as qu,f as Hu}from"./CollaborationTabBridge-Dqnn1SXm.js";import{S as Gu}from"./send-B_L3JVTV.js";import{R as Vu}from"./rotate-cw-CI-k2c-H.js";import Qu from"./FileTree-BC45MKRL.js";/**
|
|
3
3
|
* @license lucide-react v0.468.0 - ISC
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the ISC license.
|
|
@@ -119,7 +119,7 @@ import{c as Je,a1 as uu,r as c,j as e,f as Lt,a0 as pu,a2 as Nc,a3 as fu,R as ha
|
|
|
119
119
|
*
|
|
120
120
|
* This source code is licensed under the ISC license.
|
|
121
121
|
* See the LICENSE file in the root directory of this source tree.
|
|
122
|
-
*/const up=Je("Workflow",[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]]);function pp(t,n){if(Object.is(t,n))return!0;if(typeof t!="object"||t===null||typeof n!="object"||n===null)return!1;if(t instanceof Map&&n instanceof Map){if(t.size!==n.size)return!1;for(const[s,i]of t)if(!Object.is(i,n.get(s)))return!1;return!0}if(t instanceof Set&&n instanceof Set){if(t.size!==n.size)return!1;for(const s of t)if(!n.has(s))return!1;return!0}const r=Object.keys(t);if(r.length!==Object.keys(n).length)return!1;for(const s of r)if(!Object.prototype.hasOwnProperty.call(n,s)||!Object.is(t[s],n[s]))return!1;return!0}const{useRef:fp}=uu;function hp(t){const n=fp();return r=>{const s=t(r);return pp(n.current,s)?n.current:n.current=s}}function _o(t,n){var r;if((r=t.presentation)!=null&&r.forkPoint)return t.presentation.forkPoint;if(!n.startsWith("runtime:")&&t.id.startsWith("history-message.v1."))return{messageId:t.id}}function gp(t,n){return!t.ctrlKey&&t.deltaY<0&&Math.abs(t.deltaX)<-t.deltaY&&n<=240}class mp{constructor(){this.origin=null}start(n){this.origin=n.length===1?{clientX:n[0].clientX,clientY:n[0].clientY}:null}reset(){this.origin=null}move(n,r){if(n.length!==1)return this.reset(),!1;if(!this.origin)return!1;const s=n[0].clientX-this.origin.clientX,i=n[0].clientY-this.origin.clientY;return i<48||Math.abs(s)>=i||r>240?!1:(this.reset(),!0)}}const Ui={completionEnabled:!0,soundEnabled:!0,notifyWhileForeground:!1};function bl(t,n){const r=Array.from(t.trim());return r.length<=n?r.join(""):`${r.slice(0,n-1).join("")}…`}function xp(t){return{completionEnabled:(t==null?void 0:t.completionEnabled)??Ui.completionEnabled,soundEnabled:(t==null?void 0:t.soundEnabled)??Ui.soundEnabled,notifyWhileForeground:(t==null?void 0:t.notifyWhileForeground)??Ui.notifyWhileForeground}}function bp(t,n){return!n.completionEnabled||t.outcome!=="completed"||t.stale||!t.sessionId||!t.runId?null:{notificationId:`${t.sessionId}:${t.runId}:completed`,sessionId:t.sessionId,runId:t.runId,title:bl(t.title,80)||"任务已完成",body:bl(t.finalText??"",160)||"运行已结束"}}function yl({href:t,children:n,code:r=!1}){const[s,i]=c.useState(!1),[a,l]=c.useState(!1),[p,d]=c.useState(!1),m=c.useRef(null),u=c.useRef(null),b=c.useRef(null),x=c.useRef(!1),v=c.useRef(!1),j=()=>{u.current&&clearTimeout(u.current),u.current=null,b.current=null},I=()=>{x.current=!0,l(!1),d(!1),i(!0)},S=()=>{var w;x.current=!1,i(!1),(w=m.current)==null||w.focus({preventScroll:!0})};return c.useEffect(()=>()=>{u.current&&clearTimeout(u.current)},[]),c.useEffect(()=>{if(!s)return;const w=k=>{var C;k.key==="Escape"&&(k.preventDefault(),x.current=!1,i(!1),(C=m.current)==null||C.focus({preventScroll:!0}))};return document.addEventListener("keydown",w),()=>document.removeEventListener("keydown",w)},[s]),e.jsxs(e.Fragment,{children:[e.jsx("a",{ref:m,className:`chat-message-link${r?" chat-message-link--code":""}`,href:t,target:"_blank",rel:"noopener noreferrer",title:"长按复制地址",onPointerDown:w=>{j(),x.current=!1,!(!w.isPrimary||w.button!==0||w.pointerType==="mouse")&&(b.current={x:w.clientX,y:w.clientY},u.current=setTimeout(I,550))},onPointerMove:w=>{b.current&&Math.hypot(w.clientX-b.current.x,w.clientY-b.current.y)>10&&j()},onPointerUp:w=>{j(),x.current&&w.preventDefault()},onPointerCancel:j,onContextMenu:w=>{w.preventDefault(),j(),I()},onClick:w=>{x.current&&(w.preventDefault(),x.current=!1)},children:n}),s&&typeof document<"u"&&Lt.createPortal(e.jsx("div",{className:"message-link-actions-backdrop","data-tab-swipe-ignore":!0,onPointerDown:w=>{v.current=w.target===w.currentTarget},onClick:w=>{v.current&&w.target===w.currentTarget&&S()},children:e.jsxs("section",{className:"message-link-actions",role:"dialog","aria-modal":"true","aria-label":"链接操作",children:[e.jsxs("div",{className:"message-link-actions-heading",children:[e.jsx("strong",{children:"链接地址"}),e.jsx("button",{type:"button",className:"ui-icon-button","aria-label":"关闭链接操作",onClick:S,children:e.jsx(Xn,{size:16})})]}),e.jsx("input",{"aria-label":"原始链接地址",value:t,readOnly:!0,onFocus:w=>w.target.select()}),e.jsxs("button",{type:"button",className:"message-link-copy-button",autoFocus:!0,onClick:()=>{di(t).then(w=>{l(w),d(!w)})},children:[a?e.jsx(Kn,{size:16}):e.jsx(ui,{size:16}),a?"已复制地址":"复制地址"]}),e.jsx("span",{role:"status",children:p?"请长按上方地址,使用系统菜单复制":a?"可在远程桌面点击“粘贴”":""})]})}),document.body)]})}let vl=Promise.resolve(),yp=0;function Lc(t,n=!1){const r=vl.then(async()=>{if(t.length>5e4)throw new Error("图表源码过长,请查看源码");const s=(await pu(async()=>{const{default:a}=await import("./mermaid.core-KMEOhVvg.js").then(l=>l.cb);return{default:a}},__vite__mapDeps([0,1,2]),import.meta.url)).default;s.initialize({startOnLoad:!1,securityLevel:"strict",theme:"neutral",suppressErrorRendering:!0,maxTextSize:5e4,maxEdges:500,...n?{htmlLabels:!1,flowchart:{htmlLabels:!1}}:{},secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges","suppressErrorRendering",...n?["htmlLabels","flowchart"]:[]]});const i=document.createElement("div");i.style.cssText="position:fixed;left:-100000px;top:0;visibility:hidden;pointer-events:none",document.body.appendChild(i);try{const{svg:a}=await s.render(`agentroam-mermaid-${++yp}`,t,i);return a}finally{i.remove()}});return vl=r.catch(()=>{}),r}function Wc(t){var r;const n=(r=t.match(/<svg\b[^>]*\bviewBox=["']([^"']+)["']/i))==null?void 0:r[1].trim().split(/[\s,]+/).map(Number);return!n||n.length!==4||!n.every(Number.isFinite)||n[2]<=0||n[3]<=0?{width:640,height:480}:{width:n[2],height:n[3]}}function vp(t,n,r){return Math.max(.001,Math.min(1,Math.max(1,n)/t.width,r===void 0?1:Math.max(1,r)/t.height))}function wl(t,n){return Math.min(4,Math.max(Math.min(.1,n),t))}function wp(t){const n=Math.min(2,4096/t.width,4096/t.height);return{width:Math.max(1,Math.round(t.width*n)),height:Math.max(1,Math.round(t.height*n))}}async function jp(t){const n=await Lc(t,!0),r=new DOMParser().parseFromString(n,"image/svg+xml");if(r.querySelector("parsererror, foreignObject"))throw new Error("此图包含暂不支持导出的内容,请查看源码。");if([...r.querySelectorAll("image")].some(l=>!String(l.getAttribute("href")??l.getAttribute("xlink:href")??"").startsWith("data:")))throw new Error("此图包含外部图片,暂不能导出 PNG。");const s=wp(Wc(n)),i=r.documentElement;i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("width",String(s.width)),i.setAttribute("height",String(s.height)),i.style.maxWidth="none",i.style.width=`${s.width}px`,i.style.height=`${s.height}px`;const a=URL.createObjectURL(new Blob([new XMLSerializer().serializeToString(i)],{type:"image/svg+xml;charset=utf-8"}));try{const l=new Image;await new Promise((m,u)=>{l.onload=()=>m(),l.onerror=()=>u(new Error("图表图片转换失败,请重试。")),l.src=a});const p=window.document.createElement("canvas");p.width=s.width,p.height=s.height;const d=p.getContext("2d");if(!d)throw new Error("当前浏览器无法导出图片。");return d.fillStyle="#fff",d.fillRect(0,0,s.width,s.height),d.drawImage(l,0,0,s.width,s.height),await new Promise((m,u)=>{p.toBlob(b=>b?m(b):u(new Error("图片导出失败,请重试。")),"image/png")})}finally{URL.revokeObjectURL(a)}}function jl({label:t,onClose:n,children:r}){const s=c.useRef(null);return c.useEffect(()=>{var l,p;const i=document.activeElement,a=document.body.style.overflow;return document.body.style.overflow="hidden",(p=(l=s.current)==null?void 0:l.querySelector("button"))==null||p.focus(),()=>{document.body.style.overflow=a,i instanceof HTMLElement&&i.isConnected&&i.focus()}},[]),Lt.createPortal(e.jsxs("div",{className:"mermaid-dialog","data-tab-swipe-ignore":!0,ref:s,role:"dialog","aria-modal":"true","aria-label":t,onKeyDown:i=>{var d;if(i.key==="Escape"&&(i.stopPropagation(),n()),i.key!=="Tab")return;const a=[...((d=s.current)==null?void 0:d.querySelectorAll('button:not(:disabled), a[href], [tabindex="0"]'))??[]],l=a[0],p=a[a.length-1];i.shiftKey&&document.activeElement===l?(i.preventDefault(),p==null||p.focus()):!i.shiftKey&&document.activeElement===p&&(i.preventDefault(),l==null||l.focus())},children:[e.jsxs("div",{className:"mermaid-dialog-header",children:[e.jsx("strong",{children:t}),e.jsx("button",{type:"button",className:"mermaid-control","aria-label":`关闭${t}`,onClick:n,children:e.jsx(Xn,{size:20})})]}),r]}),document.body)}function Sp({svg:t,fullscreen:n,onFullscreen:r,onExport:s,exporting:i}){const a=c.useMemo(()=>Wc(t),[t]),l=c.useRef(null),[p,d]=c.useState(a),[m,u]=c.useState(null),b=vp(a,p.width,n?p.height:void 0),x=m===null?b:wl(m,b),v=c.useRef(x);v.current=x;const j=c.useRef(!1),I=c.useRef(null);c.useLayoutEffect(()=>{const w=l.current;if(!w)return;const k=()=>d({width:Math.max(1,w.clientWidth-24),height:Math.max(1,w.clientHeight-24)});k();const C=new ResizeObserver(k);return C.observe(w),()=>C.disconnect()},[]);const S=c.useCallback((w,k)=>{const C=l.current;if(!C)return;const W=wl(w,b),D=W/v.current,U=k??{x:C.clientWidth/2,y:C.clientHeight/2},T=(C.scrollLeft+U.x)*D-U.x,E=(C.scrollTop+U.y)*D-U.y;v.current=W,u(W),requestAnimationFrame(()=>{C.scrollLeft=T,C.scrollTop=E})},[b]);return c.useEffect(()=>{const w=l.current;if(!w)return;let k=null;const C=E=>Math.hypot(E[0].clientX-E[1].clientX,E[0].clientY-E[1].clientY),W=E=>{j.current=!1,E.touches.length===2&&(k={distance:Math.max(1,C(E.touches)),scale:v.current},j.current=!0)},D=E=>{if(j.current=!0,!k||E.touches.length!==2)return;E.preventDefault();const A=w.getBoundingClientRect();S(k.scale*C(E.touches)/k.distance,{x:(E.touches[0].clientX+E.touches[1].clientX)/2-A.left,y:(E.touches[0].clientY+E.touches[1].clientY)/2-A.top})},U=()=>{k=null},T=E=>{if(!E.ctrlKey&&!E.metaKey)return;E.preventDefault();const A=w.getBoundingClientRect();S(v.current*Math.exp(-E.deltaY*.01),{x:E.clientX-A.left,y:E.clientY-A.top})};return w.addEventListener("touchstart",W,{passive:!0}),w.addEventListener("touchmove",D,{passive:!1}),w.addEventListener("touchend",U),w.addEventListener("touchcancel",U),w.addEventListener("wheel",T,{passive:!1}),()=>{w.removeEventListener("touchstart",W),w.removeEventListener("touchmove",D),w.removeEventListener("touchend",U),w.removeEventListener("touchcancel",U),w.removeEventListener("wheel",T)}},[S]),e.jsxs("div",{className:`mermaid-viewer${n?" mermaid-viewer-fullscreen":""}`,children:[e.jsxs("div",{className:"mermaid-toolbar",role:"toolbar","aria-label":"图表操作",children:[e.jsx("button",{type:"button",className:"mermaid-control","aria-label":"缩小图表",title:"缩小",disabled:x<=Math.min(.1,b),onClick:()=>S(x/1.25),children:e.jsx(Nu,{size:18})}),e.jsxs("span",{className:"mermaid-zoom-value","aria-label":"缩放比例",children:[Math.round(x*100),"%"]}),e.jsx("button",{type:"button",className:"mermaid-control","aria-label":"放大图表",title:"放大",disabled:x>=4,onClick:()=>S(x*1.25),children:e.jsx(Tu,{size:18})}),e.jsx("button",{type:"button",className:"mermaid-control","aria-label":"自适应图表",title:"自适应",onClick:()=>{var w;u(null),(w=l.current)==null||w.scrollTo(0,0)},children:e.jsx(Pu,{size:18})}),e.jsx("button",{type:"button",className:"mermaid-control","aria-label":n?"退出图表全屏":"全屏查看图表",title:n?"退出全屏":"全屏",onClick:r,children:n?e.jsx(sp,{size:18}):e.jsx(rp,{size:18})}),e.jsx("button",{type:"button",className:"mermaid-control","aria-label":"导出图表 PNG",title:"导出 PNG",disabled:i,onClick:s,children:e.jsx(Mc,{size:18})})]}),e.jsx("div",{className:"mermaid-block-preview",ref:l,tabIndex:0,"aria-label":"图表预览,可滚动或双指缩放",onPointerDown:w=>{if(w.pointerType!=="mouse"||w.button!==0)return;const k=w.currentTarget;j.current=!1,I.current={x:w.clientX,y:w.clientY,left:k.scrollLeft,top:k.scrollTop}},onPointerMove:w=>{const k=I.current;k&&(Math.hypot(w.clientX-k.x,w.clientY-k.y)>4&&(j.current||w.currentTarget.setPointerCapture(w.pointerId),j.current=!0),w.currentTarget.scrollLeft=k.left-(w.clientX-k.x),w.currentTarget.scrollTop=k.top-(w.clientY-k.y))},onPointerUp:()=>{I.current=null},onPointerCancel:()=>{I.current=null},children:e.jsx("div",{className:"mermaid-diagram-canvas",style:{width:a.width*x,height:a.height*x},role:n?"img":"button","aria-label":n?"Mermaid 图表":"点击全屏查看 Mermaid 图表",tabIndex:n?void 0:0,onClick:()=>{!n&&!j.current&&r()},onKeyDown:w=>{!n&&(w.key==="Enter"||w.key===" ")&&(w.preventDefault(),r())},dangerouslySetInnerHTML:{__html:t}})}),e.jsx("div",{className:"mermaid-viewer-hint",children:i?"正在生成完整 PNG…":n?"双指缩放 · 滑动查看 · 导出完整图片":"点击图表全屏 · 双指缩放"})]})}function kp({code:t,svg:n}){const r=c.useRef(null),[s,i]=c.useState(!1),[a,l]=c.useState(!1),[p,d]=c.useState(null),[m,u]=c.useState(null),b=c.useRef(0),x=c.useCallback(()=>{i(!1),requestAnimationFrame(()=>{var S,w;return(w=(S=r.current)==null?void 0:S.querySelector('button[aria-label="全屏查看图表"]'))==null?void 0:w.focus()})},[]),v=c.useCallback(()=>d(null),[]);c.useEffect(()=>()=>{b.current++},[t]),c.useEffect(()=>()=>{p&&URL.revokeObjectURL(p)},[p]);const j=async()=>{if(a)return;const S=b.current;l(!0),u(null);try{const w=await jp(t);S===b.current&&d(URL.createObjectURL(w))}catch(w){S===b.current&&u(w instanceof Error?w.message:"图片导出失败,请重试。")}finally{S===b.current&&l(!1)}},I=e.jsx(Sp,{svg:n,fullscreen:s,onFullscreen:()=>s?x():i(!0),onExport:()=>void j(),exporting:a});return e.jsxs("div",{className:"mermaid-diagram","data-tab-swipe-ignore":!0,ref:r,children:[s?e.jsxs(jl,{label:"图表全屏",onClose:x,children:[I,m&&e.jsx("div",{className:"mermaid-block-status",role:"alert",children:m})]}):I,!s&&m&&e.jsx("div",{className:"mermaid-block-status",role:"alert",children:m}),p&&e.jsxs(jl,{label:"导出图表图片",onClose:v,children:[e.jsxs("div",{className:"mermaid-export-actions",children:[e.jsx("span",{children:"手机可长按图片保存,或下载 PNG"}),e.jsx("a",{href:p,download:"mermaid-diagram.png",children:"下载 PNG"})]}),e.jsx("div",{className:"mermaid-export-preview",children:e.jsx("img",{src:p,alt:"完整 Mermaid 图表 PNG"})})]})]})}function Ip({code:t,complete:n}){const[r,s]=c.useState(!1),[i,a]=c.useState(null),l=n&&(i==null?void 0:i.code)===t?i:null;c.useEffect(()=>{if(!n||!t.trim())return;let d=!1;const m=setTimeout(()=>{Lc(t).then(u=>{d||a({code:t,svg:u})},()=>{d||a({code:t,error:"图表暂时无法渲染,请查看源码。"})})},150);return()=>{d=!0,clearTimeout(m)}},[t,n]);const p=n?t.trim()?(l==null?void 0:l.error)??(l!=null&&l.svg?null:"正在渲染图表…"):"暂无图表内容":"图表生成中…";return e.jsxs("div",{className:"mermaid-block",children:[e.jsxs("div",{className:"mermaid-block-header",children:[e.jsx("span",{children:"Mermaid"}),e.jsx("button",{type:"button","aria-pressed":r,onClick:()=>s(!r),children:r?"图表":"源码"})]}),p&&e.jsx("div",{className:"mermaid-block-status",role:"status",children:p}),r||!(l!=null&&l.svg)?e.jsx("pre",{className:"mermaid-block-source",children:e.jsx("code",{children:t})}):e.jsx(kp,{code:t,svg:l.svg},t)]})}const Dc=2e5,Cp=24,Rp=12,Ap=80,Ep=30,Np=500,Tp=160,Mp=1e3,Qi=200,_p={"/help":"使用帮助","/whoami":"关于我","/works":"项目与作品","/jobs":"求职信息","/timeline":"经历时间线","/contact":"联系方式"};function ta(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function Zr(t,n){if(typeof t!="string")return;const r=t.trim();return r?r.slice(0,n):void 0}function Sl(t,n,r){return Array.isArray(t)?t.slice(0,n).filter(s=>typeof s=="string").map(s=>s.trim().slice(0,r)).filter(Boolean):[]}function Pp(t){if(ta(t)){const n=Zr(t.type,Qi)??"unknown";if(n==="text"){const r=Zr(t.text,Dc);if(r){const s=Zr(t.tone,Qi);return{kind:"text",text:r,...s?{tone:s}:{}}}}return{kind:"unknown",blockType:n,value:t}}return{kind:"unknown",blockType:"unknown",value:t}}function zp(t){if(typeof t.schemaVersion!="number"||!Number.isFinite(t.schemaVersion))return null;const n=Zr(t.title,Tp);if(!n||!Array.isArray(t.blocks))return null;const r=Zr(t.skill,Qi),s=Zr(t.summary,Mp),i=Zr(t.generatedAt,Qi);return{schemaVersion:t.schemaVersion,title:n,...r?{skill:r}:{},...s?{summary:s}:{},...i?{generatedAt:i}:{},blocks:t.blocks.slice(0,Cp).map(Pp),suggestions:Sl(t.suggestions,Rp,Ap),sources:Sl(t.sources,Ep,Np),original:t}}function Lp(t,n=!0){const r=t.trim();if(!n||r.length===0||r.length>Dc||r.startsWith("```"))return null;let s;try{s=JSON.parse(r)}catch{return null}if(!ta(s)&&!Array.isArray(s))return null;if(ta(s)){const i=zp(s);if(i)return{kind:"envelope",raw:r,value:i}}return{kind:"json",raw:r,value:s}}function kl(t){const n=t.trim(),r=_p[n.toLowerCase()];if(r)return r;const s=n.match(/^\/project\s+([a-z0-9-]+)$/i);return s?`查看项目:${s[1]}`:n}const Wp=40,Il=8;function Dp(t){return Array.isArray(t)?t.map((n,r)=>[String(r),n]):Object.entries(t)}function Bp({value:t}){return t===null?e.jsx("span",{className:"json-tree__value json-tree__value--null",children:"null"}):typeof t=="boolean"?e.jsx("span",{className:"json-tree__value json-tree__value--boolean",children:String(t)}):typeof t=="number"?e.jsx("span",{className:"json-tree__value json-tree__value--number",children:t}):e.jsxs("span",{className:"json-tree__value json-tree__value--string",children:[e.jsx("span",{"aria-hidden":"true",children:'"'}),t,e.jsx("span",{"aria-hidden":"true",children:'"'})]})}function wa({value:t,label:n,depth:r=0}){const[s,i]=c.useState(!1);if(t===null||typeof t!="object")return e.jsxs("div",{className:"json-tree__row",children:[n!==void 0&&e.jsx("span",{className:"json-tree__key",children:n}),n!==void 0&&e.jsx("span",{className:"json-tree__separator",children:":"}),e.jsx(Bp,{value:t})]});const a=Dp(t),l=Array.isArray(t)?`数组 · ${a.length} 项`:`对象 · ${a.length} 项`;if(r>=Il)return e.jsxs("div",{className:"json-tree__row json-tree__row--limit",children:[n!==void 0&&e.jsx("span",{className:"json-tree__key",children:n}),e.jsxs("span",{className:"json-tree__limit",children:[l,",已折叠至深度 ",Il]})]});const p=s?a:a.slice(0,Wp),d=a.length-p.length;return e.jsxs("details",{className:"json-tree",open:r===0,children:[e.jsxs("summary",{className:"json-tree__summary",children:[n!==void 0&&e.jsx("span",{className:"json-tree__key",children:n}),e.jsx("span",{className:"json-tree__container-label",children:l})]}),e.jsxs("div",{className:"json-tree__children",children:[a.length===0&&e.jsx("div",{className:"json-tree__empty",children:"空"}),p.map(([m,u])=>e.jsx(wa,{value:u,label:m,depth:r+1},m)),d>0&&e.jsxs("button",{type:"button",className:"json-tree__more",onClick:()=>i(!0),children:["显示其余 ",d," 项"]})]})]})}function Op(t){try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}function Bc({raw:t,onCopyFailed:n}){const r=async()=>{await di(t)||n==null||n()};return e.jsxs("details",{className:"structured-agent-message__raw",children:[e.jsx("summary",{children:"查看原始 JSON"}),e.jsx("div",{className:"structured-agent-message__raw-toolbar",children:e.jsx("button",{type:"button",title:"复制原始 JSON","aria-label":"复制原始 JSON",onClick:()=>{r()},children:e.jsx(ui,{size:14,strokeWidth:1.8,"aria-hidden":"true"})})}),e.jsx("pre",{children:Op(t)})]})}function $p({envelope:t,raw:n,renderText:r,suggestionsEnabled:s,onSuggestionSend:i,onCopyFailed:a}){return e.jsxs("section",{className:"structured-agent-message","data-kind":"envelope",children:[e.jsxs("header",{className:"structured-agent-message__header",children:[e.jsx("h3",{className:"structured-agent-message__title",children:t.title}),t.summary&&e.jsx("p",{className:"structured-agent-message__summary",children:t.summary})]}),e.jsx("div",{className:"structured-agent-message__blocks",children:t.blocks.map((l,p)=>l.kind==="text"?e.jsx("div",{className:"structured-agent-message__text","data-tone":l.tone??"body",children:r(l.text)},p):e.jsxs("details",{className:"structured-agent-message__unknown-block",children:[e.jsxs("summary",{children:[l.blockType," 内容"]}),e.jsx(wa,{value:l.value})]},p))}),t.suggestions.length>0&&e.jsx("div",{className:"structured-agent-message__suggestions","aria-label":"继续提问",children:t.suggestions.map(l=>e.jsx("button",{type:"button",className:"structured-agent-suggestion",disabled:!s,title:`发送 ${l}`,"aria-label":`${kl(l)},发送 ${l}`,onClick:()=>i(l),children:kl(l)},l))}),t.sources.length>0&&e.jsxs("details",{className:"structured-agent-message__details",children:[e.jsxs("summary",{children:["参考来源 ",t.sources.length]}),e.jsx("ul",{children:t.sources.map(l=>e.jsx("li",{children:l},l))})]}),e.jsxs("details",{className:"structured-agent-message__details",children:[e.jsx("summary",{children:"消息信息"}),e.jsxs("dl",{children:[e.jsxs("div",{children:[e.jsx("dt",{children:"格式版本"}),e.jsx("dd",{children:t.schemaVersion})]}),t.skill&&e.jsxs("div",{children:[e.jsx("dt",{children:"能力"}),e.jsx("dd",{children:t.skill})]}),t.generatedAt&&e.jsxs("div",{children:[e.jsx("dt",{children:"生成时间"}),e.jsx("dd",{children:t.generatedAt})]})]})]}),e.jsx(Bc,{raw:n,onCopyFailed:a})]})}function Fp({message:t,renderText:n,suggestionsEnabled:r,onSuggestionSend:s,onCopyFailed:i}){return t.kind==="envelope"?e.jsx($p,{envelope:t.value,raw:t.raw,renderText:n,suggestionsEnabled:r,onSuggestionSend:s,onCopyFailed:i}):e.jsxs("section",{className:"structured-agent-message","data-kind":"json",children:[e.jsxs("div",{className:"structured-agent-message__data-title",children:[e.jsx(Yu,{size:15,strokeWidth:1.8,"aria-hidden":"true"}),e.jsx("span",{children:"结构化数据"})]}),e.jsx(wa,{value:t.value}),e.jsx(Bc,{raw:t.raw,onCopyFailed:i})]})}function Up({text:t,complete:n,renderText:r,suggestionsEnabled:s,onSuggestionSend:i,onCopyFailed:a}){const l=c.useMemo(()=>Lp(t,n),[n,t]);return l?e.jsx(Fp,{message:l,renderText:r,suggestionsEnabled:s,onSuggestionSend:i,onCopyFailed:a}):e.jsx(e.Fragment,{children:r(t)})}const Oc="webapp.nativeAgentRunPrefs.v1",qp=["codex","claude-code","opencode","deepseek-harness"];function $c(){try{const t=JSON.parse(localStorage.getItem(Oc)??"{}");return t&&typeof t=="object"?t:{}}catch{return{}}}function Ki(t){return qp.includes(t)}function Cl(t){return Ki(t)?$c()[t]??{}:{}}function Rl(t,n){if(!Ki(t))return;const r=$c();r[t]=n;try{localStorage.setItem(Oc,JSON.stringify(r))}catch{}}function Hp(t,n,r){var s;return!r||!((s=t.model)!=null&&s.id)||n.has(li(t.model))?t:{}}function li(t){return t.providerID?`${t.providerID}/${t.id}`:t.id}function Gp(t){const n=t.indexOf("/");return n>0?{providerID:t.slice(0,n),id:t.slice(n+1)}:{id:t}}function Vp(t){var r,s;const n=new Map;for(const i of t){const a=(r=i.providerID)==null?void 0:r.trim(),l=((s=i.providerDisplayName)==null?void 0:s.trim())||a||"其他供应商",p=a||"__other__",d=n.get(p)??{key:p,label:a==="opencode-go"?`${l}(需订阅)`:l,models:[]};d.models.push({...i,optionLabel:i.displayName||i.id}),n.set(p,d)}return[...n.values()]}const Fc="context-compaction";function Yi(t,n){const r=t??[],s=r.findIndex(a=>a.itemId===n.itemId&&a.sectionIndex===n.sectionIndex);return(s<0?[...r,{itemId:n.itemId,sectionIndex:n.sectionIndex,text:n.delta}]:r.map((a,l)=>l===s?{...a,text:a.text+n.delta}:a)).sort((a,l)=>a.sectionIndex-l.sectionIndex)}function Al(t){let n=[];for(const r of t)if(r.type==="runtime_progress"){const{type:s,...i}=r;n=Uc(n,i)}else r.type==="context_usage"?n=n.filter(s=>s.progressId!==Fc):(r.type==="done"||r.type==="turn_aborted"||r.type==="error")&&(n=[]);return n}function Uc(t,n){const r=t.findIndex(s=>s.progressId===n.progressId);return r<0?[...t,n]:t.map((s,i)=>i===r?n:s)}function qc(t,n){return[...t].reverse().find(r=>r.toolCallId===n)}function Qp(t){return[...t].reverse().find(n=>!n.toolCallId)}function Kp(t,n){var i,a;const r=[],s=new Map;for(let l=0;l<t.length;l+=1){const p=t[l];r.push(p);const d=p.role==="user"?(i=p.presentation)==null?void 0:i.executionTrace:void 0,m=d==null?void 0:d.turnId;if(!m)continue;const u=d.segmentIndex??s.get(m)??0;s.set(m,Math.max(s.get(m)??0,u+1));const b=t[l+1];((a=b==null?void 0:b.executionTrace)==null?void 0:a.turnId)===m&&(b.executionTrace.segmentIndex??0)===u?(r.push({...b,executionTrace:{...b.executionTrace,turnId:m,revision:n,segmentIndex:u}}),l+=1):r.push({id:Gc(m,u),role:"assistant",content:"",executionTrace:{turnId:m,revision:n,segmentIndex:u},timestamp:p.timestamp})}return r}function Yp(t){var n,r,s,i;return t.role==="assistant"&&!!((n=t.toolCalls)!=null&&n.length||(s=(r=t.presentation)==null?void 0:r.reasoning)!=null&&s.length||((i=t.presentation)==null?void 0:i.agentMessagePhase)==="commentary")}function Hc(t,n,r,s){return t.map(i=>{var a;return(a=i.toolCalls)!=null&&a.some(l=>l.id===n)?{...i,toolCalls:i.toolCalls.map(l=>l.id===n?{...l,result:r,isError:s}:l)}:i})}function Xp(t,n,r,s){if(n.type==="text_chunk"){if(!n.text||n.messagePhase!=="commentary")return[...t];const i=n.itemId?`codex-trace:${s}:agent:${n.itemId}`:`codex-live-commentary:${s}`,a=t.findIndex(l=>l.id===i);return a<0?[...t,{id:i,role:"assistant",content:n.text,presentation:{agentMessagePhase:"commentary"},timestamp:r}]:t.map((l,p)=>p===a?{...l,content:l.content+n.text}:l)}if(n.type==="reasoning_summary_delta"){const i=t.findIndex(a=>{var l,p;return(p=(l=a.presentation)==null?void 0:l.reasoning)==null?void 0:p.some(d=>d.itemId===n.itemId)});return i<0?[...t,{id:`codex-live-reasoning:${n.itemId}`,role:"assistant",content:"",presentation:{reasoning:Yi(void 0,n)},timestamp:r}]:t.map((a,l)=>{var p;return l===i?{...a,presentation:{...a.presentation,reasoning:Yi((p=a.presentation)==null?void 0:p.reasoning,n)}}:a})}if(n.type==="tool_call"){const i=t.findIndex(a=>{var l;return(l=a.toolCalls)==null?void 0:l.some(p=>p.id===n.toolCall.id)});return i>=0?t.map((a,l)=>{var p;return l===i?{...a,toolCalls:(p=a.toolCalls)==null?void 0:p.map(d=>d.id===n.toolCall.id?{...d,name:n.toolCall.name,arguments:n.toolCall.arguments}:d)}:a}):[...t,{id:`codex-live-tool:${n.toolCall.id}`,role:"assistant",content:"",toolCalls:[{...n.toolCall}],timestamp:r}]}return t.some(i=>{var a;return(a=i.toolCalls)==null?void 0:a.some(l=>l.id===n.result.toolCallId)})?Hc(t,n.result.toolCallId,n.result.content,n.result.isError):[...t]}function na(t,n,r,s=Date.now()){var v,j;const i=t.findLastIndex(I=>{var S;return((S=I.executionTrace)==null?void 0:S.turnId)===n&&Jp(I.executionTrace.liveMessages??[],r)}),a=t.findLastIndex(I=>{var S;return((S=I.executionTrace)==null?void 0:S.turnId)===n}),l=t.findLastIndex(I=>I.role==="user"&&!I.isQueued),p=i>=0?i:a>l||a>=0&&!((v=t[l])!=null&&v.isSteered)?a:-1,d=p>=0?((j=t[p].executionTrace)==null?void 0:j.liveMessages)??[]:[],m=Xp(d,r,s,n);if(m.length===0&&d.length===0)return[...t];if(p>=0)return t.map((I,S)=>S===p?{...I,executionTrace:{...I.executionTrace,liveMessages:m}}:I);if(m===d)return[...t];const u=l;if(u<0)return[...t];const b=t.reduce((I,S)=>{var w;return((w=S.executionTrace)==null?void 0:w.turnId)===n?Math.max(I,S.executionTrace.segmentIndex??0):I},-1)+1,x={id:Gc(n,b),role:"assistant",content:"",executionTrace:{turnId:n,revision:`live:${n}`,segmentIndex:b,liveMessages:m},timestamp:s};return[...t.slice(0,u+1),x,...t.slice(u+1)]}function Gc(t,n){return n===0?`codex-execution-trace:${t}`:`codex-execution-trace:${t}:${n}`}function Jp(t,n){if(n.type==="text_chunk")return n.itemId?t.some(s=>s.id===`codex-trace:${n.turnId}:agent:${n.itemId}`):!1;if(n.type==="reasoning_summary_delta")return t.some(s=>{var i,a;return(a=(i=s.presentation)==null?void 0:i.reasoning)==null?void 0:a.some(l=>l.itemId===n.itemId)});const r=n.type==="tool_call"?n.toolCall.id:n.result.toolCallId;return t.some(s=>{var i;return(i=s.toolCalls)==null?void 0:i.some(a=>a.id===r)})}function Zp(t,n){return t.some(s=>{var i,a;return((a=(i=s.presentation)==null?void 0:i.executionTrace)==null?void 0:a.segmentIndex)!==void 0})?t.filter(s=>{var i,a;return((a=(i=s.presentation)==null?void 0:i.executionTrace)==null?void 0:a.segmentIndex)===n}):n===0?[...t]:[]}function ra(t,n){const r=new Map(t.map(s=>[`${s.itemId}:${s.sectionIndex}`,s]));for(const s of n){const i=`${s.itemId}:${s.sectionIndex}`,a=r.get(i),l=a?s.text.startsWith(a.text)?s.text:a.text.startsWith(s.text)?a.text:s.text:s.text;r.set(i,{...s,text:l})}return[...r.values()]}function El(t){var n,r;return[...((n=t.presentation)==null?void 0:n.agentMessagePhase)==="commentary"?[`agent:${t.id}`]:[],...(((r=t.presentation)==null?void 0:r.reasoning)??[]).map(s=>`reasoning:${s.itemId}:${s.sectionIndex}`),...(t.toolCalls??[]).map(s=>`tool:${s.id}`)]}function ef(t,n){var r,s;return((r=t.presentation)==null?void 0:r.agentMessagePhase)==="commentary"&&((s=n.presentation)==null?void 0:s.agentMessagePhase)==="commentary"&&(t.id.startsWith("codex-live-commentary:")||n.id.startsWith("codex-live-commentary:"))&&(t.content.startsWith(n.content)||n.content.startsWith(t.content))}function tf(t){var a,l,p,d,m,u,b,x,v,j,I;const n=[],r=new Map,s=new Map,i=new Map;for(const S of t){if(((a=S.presentation)==null?void 0:a.agentMessagePhase)==="commentary"){const U=r.get(S.id);if(U!==void 0){const T=n[U],E=S.content.startsWith(T.content)?S.content:T.content.startsWith(S.content)?T.content:S.content;n[U]={...T,...S,id:T.id,content:E};continue}}const w={...S,toolCalls:S.toolCalls?[]:void 0,presentation:(l=S.presentation)!=null&&l.reasoning?{...S.presentation,reasoning:[]}:S.presentation};for(const U of((p=S.presentation)==null?void 0:p.reasoning)??[]){const T=`${U.itemId}:${U.sectionIndex}`,E=s.get(T);if(E){const A=n[E.messageIndex],B=[...((d=A.presentation)==null?void 0:d.reasoning)??[]],q=B[E.sectionIndex];B[E.sectionIndex]=ra([q],[U])[0],n[E.messageIndex]={...A,presentation:{...A.presentation,reasoning:B}}}else{const A=w.presentation.reasoning.findIndex(B=>B.itemId===U.itemId&&B.sectionIndex===U.sectionIndex);A>=0?w.presentation.reasoning[A]=ra([w.presentation.reasoning[A]],[U])[0]:w.presentation.reasoning.push(U)}}for(const U of S.toolCalls??[]){const T=i.get(U.id);if(T){const E=n[T.messageIndex],A=[...E.toolCalls??[]];A[T.toolIndex]={...A[T.toolIndex],...U},n[T.messageIndex]={...E,toolCalls:A}}else{const E=w.toolCalls.findIndex(A=>A.id===U.id);E>=0?w.toolCalls[E]={...w.toolCalls[E],...U}:w.toolCalls.push(U)}}const k=((m=w.presentation)==null?void 0:m.agentMessagePhase)==="commentary",C=!!((b=(u=w.presentation)==null?void 0:u.reasoning)!=null&&b.length),W=!!((x=w.toolCalls)!=null&&x.length);if(!k&&!C&&!W)continue;const D=n.length;n.push(w),k&&r.set(w.id,D);for(let U=0;U<(((j=(v=w.presentation)==null?void 0:v.reasoning)==null?void 0:j.length)??0);U+=1){const T=w.presentation.reasoning[U];s.set(`${T.itemId}:${T.sectionIndex}`,{messageIndex:D,sectionIndex:U})}for(let U=0;U<(((I=w.toolCalls)==null?void 0:I.length)??0);U+=1)i.set(w.toolCalls[U].id,{messageIndex:D,toolIndex:U})}return n}function nf(t,n,r){if(t.length<2)return t;const s=new Map;t.forEach((S,w)=>{for(const k of El(S))s.set(k,w)});const i=S=>{for(const w of El(S)){const k=s.get(w);if(k!==void 0)return k}return t.findIndex(w=>ef(w,S))},a=S=>{const w=[];for(const k of S){const C=i(k);C<0||w.at(-1)===C||w.push(C)}return w},l=a(n),p=a(r),d=Array.from({length:t.length},()=>new Set),m=Array.from({length:t.length},()=>0),u=S=>{for(let w=1;w<S.length;w+=1){const k=S[w-1],C=S[w];k===C||d[k].has(C)||(d[k].add(C),m[C]+=1)}};u(l),u(p);const b=new Map(l.map((S,w)=>[S,w])),x=new Map(p.map((S,w)=>[S,w])),v=(S,w)=>{const k=b.get(S)??Number.POSITIVE_INFINITY,C=b.get(w)??Number.POSITIVE_INFINITY;if(k!==C)return k-C;const W=x.get(S)??Number.POSITIVE_INFINITY,D=x.get(w)??Number.POSITIVE_INFINITY;return W!==D?W-D:S-w},j=m.flatMap((S,w)=>S===0?[w]:[]).sort(v),I=[];for(;j.length>0;){const S=j.shift();I.push(t[S]);for(const w of d[S])m[w]-=1,m[w]===0&&(j.push(w),j.sort(v))}return I.length===t.length?I:t}function rf(t,n){var s,i,a,l,p;const r=t.map(d=>{var m,u;return{...d,toolCalls:(m=d.toolCalls)==null?void 0:m.map(b=>({...b})),presentation:(u=d.presentation)!=null&&u.reasoning?{...d.presentation,reasoning:[...d.presentation.reasoning]}:d.presentation}});for(const d of n){if(((s=d.presentation)==null?void 0:s.agentMessagePhase)==="commentary"){const u=r.findIndex(b=>{var x;return b.id===d.id||((x=b.presentation)==null?void 0:x.agentMessagePhase)==="commentary"&&(b.id.startsWith("codex-live-commentary:")||d.id.startsWith("codex-live-commentary:"))&&(d.content.startsWith(b.content)||b.content.startsWith(d.content))});if(u<0)r.push(d);else{const b=r[u],x=d.content.startsWith(b.content)?d.content:b.content.startsWith(d.content)?b.content:d.content;r[u]={...b,content:x,presentation:{...b.presentation,agentMessagePhase:"commentary"}}}continue}const m=(i=d.presentation)==null?void 0:i.reasoning;if(m!=null&&m.length){const u=r.findIndex(b=>{var x,v;return(v=(x=b.presentation)==null?void 0:x.reasoning)==null?void 0:v.some(j=>m.some(I=>I.itemId===j.itemId))});if(u>=0){const b=r[u];r[u]={...b,presentation:{...b.presentation,reasoning:ra(((a=b.presentation)==null?void 0:a.reasoning)??[],m)}}}else r.push(d)}for(const u of d.toolCalls??[]){const b=r.findIndex(x=>{var v;return(v=x.toolCalls)==null?void 0:v.some(j=>j.id===u.id)});if(b>=0){const x=r[b];r[b]={...x,toolCalls:(l=x.toolCalls)==null?void 0:l.map(v=>v.id===u.id?{...v,...u}:v)}}else r.push({...d,id:(((p=d.toolCalls)==null?void 0:p.length)??0)>1?`${d.id}:tool:${u.id}`:d.id,presentation:void 0,toolCalls:[u]})}}return nf(tf(r),t,n)}function Nl(t){for(let n=t.length-1;n>=0;n--)if(t[n].type==="context_usage"&&t[n].usage)return t[n].usage}function Tl(t){var r;const n=new Map;for(const s of t)s.type==="native_subagent_update"&&((r=s.activity)!=null&&r.parentToolCallId)&&n.set(s.activity.parentToolCallId,s.activity);return[...n.values()]}function sf(t,n,r,s){return s!==void 0&&!(s!=null&&s.trim())?[]:s!==void 0&&s!==r?s?n[s]??[]:[]:t}function Vc(t){var n;return!!(t&&t.role==="assistant"&&!((n=t.toolCalls)!=null&&n.length)&&!t.widget&&!t.askUser&&!t.isCompactionSummary&&!t.executionTrace)}function Ml(t,n){var r;if(n.role==="assistant"&&((r=n.toolCalls)!=null&&r.length)){const s=t[t.length-1];if(Vc(s))return[...t.slice(0,-1),{...s,content:s.content,toolCalls:n.toolCalls}]}return[...t,n]}function of(t,n){if(!n)return t;const r=t[t.length-1];if(Vc(r)){const s=[...t];return s[s.length-1]={...r,content:r.content+n},s}return[...t,{id:crypto.randomUUID(),role:"assistant",content:n,timestamp:Date.now()}]}function _l(t,n,r,s){return t.map(i=>{if(!i.toolCalls)return i;const a=i.toolCalls.map(l=>l.id===n?{...l,result:r,isError:s}:l);return{...i,toolCalls:a}})}function Pl(t,n,r,s){return t.map(i=>{if(!i.toolCalls)return i;const a=i.toolCalls.map(l=>l.name==="dispatch_agent"&&l.arguments.subSessionId===n?{...l,arguments:{...l.arguments,subAgentStatus:r,subAgentDetail:s}}:l);return{...i,toolCalls:a}})}function zl(t,n,r){return t.map(s=>{if(!s.toolCalls)return s;const i=s.toolCalls.map(a=>a.name==="dispatch_agent"&&a.arguments.subSessionId===n?{...a,arguments:{...a.arguments,subAgentProgress:(a.arguments.subAgentProgress?a.arguments.subAgentProgress+`
|
|
122
|
+
*/const up=Je("Workflow",[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]]);function pp(t,n){if(Object.is(t,n))return!0;if(typeof t!="object"||t===null||typeof n!="object"||n===null)return!1;if(t instanceof Map&&n instanceof Map){if(t.size!==n.size)return!1;for(const[s,i]of t)if(!Object.is(i,n.get(s)))return!1;return!0}if(t instanceof Set&&n instanceof Set){if(t.size!==n.size)return!1;for(const s of t)if(!n.has(s))return!1;return!0}const r=Object.keys(t);if(r.length!==Object.keys(n).length)return!1;for(const s of r)if(!Object.prototype.hasOwnProperty.call(n,s)||!Object.is(t[s],n[s]))return!1;return!0}const{useRef:fp}=uu;function hp(t){const n=fp();return r=>{const s=t(r);return pp(n.current,s)?n.current:n.current=s}}function _o(t,n){var r;if((r=t.presentation)!=null&&r.forkPoint)return t.presentation.forkPoint;if(!n.startsWith("runtime:")&&t.id.startsWith("history-message.v1."))return{messageId:t.id}}function gp(t,n){return!t.ctrlKey&&t.deltaY<0&&Math.abs(t.deltaX)<-t.deltaY&&n<=240}class mp{constructor(){this.origin=null}start(n){this.origin=n.length===1?{clientX:n[0].clientX,clientY:n[0].clientY}:null}reset(){this.origin=null}move(n,r){if(n.length!==1)return this.reset(),!1;if(!this.origin)return!1;const s=n[0].clientX-this.origin.clientX,i=n[0].clientY-this.origin.clientY;return i<48||Math.abs(s)>=i||r>240?!1:(this.reset(),!0)}}const Ui={completionEnabled:!0,soundEnabled:!0,notifyWhileForeground:!1};function bl(t,n){const r=Array.from(t.trim());return r.length<=n?r.join(""):`${r.slice(0,n-1).join("")}…`}function xp(t){return{completionEnabled:(t==null?void 0:t.completionEnabled)??Ui.completionEnabled,soundEnabled:(t==null?void 0:t.soundEnabled)??Ui.soundEnabled,notifyWhileForeground:(t==null?void 0:t.notifyWhileForeground)??Ui.notifyWhileForeground}}function bp(t,n){return!n.completionEnabled||t.outcome!=="completed"||t.stale||!t.sessionId||!t.runId?null:{notificationId:`${t.sessionId}:${t.runId}:completed`,sessionId:t.sessionId,runId:t.runId,title:bl(t.title,80)||"任务已完成",body:bl(t.finalText??"",160)||"运行已结束"}}function yl({href:t,children:n,code:r=!1}){const[s,i]=c.useState(!1),[a,l]=c.useState(!1),[p,d]=c.useState(!1),m=c.useRef(null),u=c.useRef(null),b=c.useRef(null),x=c.useRef(!1),v=c.useRef(!1),j=()=>{u.current&&clearTimeout(u.current),u.current=null,b.current=null},I=()=>{x.current=!0,l(!1),d(!1),i(!0)},S=()=>{var w;x.current=!1,i(!1),(w=m.current)==null||w.focus({preventScroll:!0})};return c.useEffect(()=>()=>{u.current&&clearTimeout(u.current)},[]),c.useEffect(()=>{if(!s)return;const w=k=>{var C;k.key==="Escape"&&(k.preventDefault(),x.current=!1,i(!1),(C=m.current)==null||C.focus({preventScroll:!0}))};return document.addEventListener("keydown",w),()=>document.removeEventListener("keydown",w)},[s]),e.jsxs(e.Fragment,{children:[e.jsx("a",{ref:m,className:`chat-message-link${r?" chat-message-link--code":""}`,href:t,target:"_blank",rel:"noopener noreferrer",title:"长按复制地址",onPointerDown:w=>{j(),x.current=!1,!(!w.isPrimary||w.button!==0||w.pointerType==="mouse")&&(b.current={x:w.clientX,y:w.clientY},u.current=setTimeout(I,550))},onPointerMove:w=>{b.current&&Math.hypot(w.clientX-b.current.x,w.clientY-b.current.y)>10&&j()},onPointerUp:w=>{j(),x.current&&w.preventDefault()},onPointerCancel:j,onContextMenu:w=>{w.preventDefault(),j(),I()},onClick:w=>{x.current&&(w.preventDefault(),x.current=!1)},children:n}),s&&typeof document<"u"&&Lt.createPortal(e.jsx("div",{className:"message-link-actions-backdrop","data-tab-swipe-ignore":!0,onPointerDown:w=>{v.current=w.target===w.currentTarget},onClick:w=>{v.current&&w.target===w.currentTarget&&S()},children:e.jsxs("section",{className:"message-link-actions",role:"dialog","aria-modal":"true","aria-label":"链接操作",children:[e.jsxs("div",{className:"message-link-actions-heading",children:[e.jsx("strong",{children:"链接地址"}),e.jsx("button",{type:"button",className:"ui-icon-button","aria-label":"关闭链接操作",onClick:S,children:e.jsx(Xn,{size:16})})]}),e.jsx("input",{"aria-label":"原始链接地址",value:t,readOnly:!0,onFocus:w=>w.target.select()}),e.jsxs("button",{type:"button",className:"message-link-copy-button",autoFocus:!0,onClick:()=>{di(t).then(w=>{l(w),d(!w)})},children:[a?e.jsx(Kn,{size:16}):e.jsx(ui,{size:16}),a?"已复制地址":"复制地址"]}),e.jsx("span",{role:"status",children:p?"请长按上方地址,使用系统菜单复制":a?"可在远程桌面点击“粘贴”":""})]})}),document.body)]})}let vl=Promise.resolve(),yp=0;function Lc(t,n=!1){const r=vl.then(async()=>{if(t.length>5e4)throw new Error("图表源码过长,请查看源码");const s=(await pu(async()=>{const{default:a}=await import("./mermaid.core-BsSrKkY-.js").then(l=>l.cb);return{default:a}},__vite__mapDeps([0,1,2]),import.meta.url)).default;s.initialize({startOnLoad:!1,securityLevel:"strict",theme:"neutral",suppressErrorRendering:!0,maxTextSize:5e4,maxEdges:500,...n?{htmlLabels:!1,flowchart:{htmlLabels:!1}}:{},secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges","suppressErrorRendering",...n?["htmlLabels","flowchart"]:[]]});const i=document.createElement("div");i.style.cssText="position:fixed;left:-100000px;top:0;visibility:hidden;pointer-events:none",document.body.appendChild(i);try{const{svg:a}=await s.render(`agentroam-mermaid-${++yp}`,t,i);return a}finally{i.remove()}});return vl=r.catch(()=>{}),r}function Wc(t){var r;const n=(r=t.match(/<svg\b[^>]*\bviewBox=["']([^"']+)["']/i))==null?void 0:r[1].trim().split(/[\s,]+/).map(Number);return!n||n.length!==4||!n.every(Number.isFinite)||n[2]<=0||n[3]<=0?{width:640,height:480}:{width:n[2],height:n[3]}}function vp(t,n,r){return Math.max(.001,Math.min(1,Math.max(1,n)/t.width,r===void 0?1:Math.max(1,r)/t.height))}function wl(t,n){return Math.min(4,Math.max(Math.min(.1,n),t))}function wp(t){const n=Math.min(2,4096/t.width,4096/t.height);return{width:Math.max(1,Math.round(t.width*n)),height:Math.max(1,Math.round(t.height*n))}}async function jp(t){const n=await Lc(t,!0),r=new DOMParser().parseFromString(n,"image/svg+xml");if(r.querySelector("parsererror, foreignObject"))throw new Error("此图包含暂不支持导出的内容,请查看源码。");if([...r.querySelectorAll("image")].some(l=>!String(l.getAttribute("href")??l.getAttribute("xlink:href")??"").startsWith("data:")))throw new Error("此图包含外部图片,暂不能导出 PNG。");const s=wp(Wc(n)),i=r.documentElement;i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("width",String(s.width)),i.setAttribute("height",String(s.height)),i.style.maxWidth="none",i.style.width=`${s.width}px`,i.style.height=`${s.height}px`;const a=URL.createObjectURL(new Blob([new XMLSerializer().serializeToString(i)],{type:"image/svg+xml;charset=utf-8"}));try{const l=new Image;await new Promise((m,u)=>{l.onload=()=>m(),l.onerror=()=>u(new Error("图表图片转换失败,请重试。")),l.src=a});const p=window.document.createElement("canvas");p.width=s.width,p.height=s.height;const d=p.getContext("2d");if(!d)throw new Error("当前浏览器无法导出图片。");return d.fillStyle="#fff",d.fillRect(0,0,s.width,s.height),d.drawImage(l,0,0,s.width,s.height),await new Promise((m,u)=>{p.toBlob(b=>b?m(b):u(new Error("图片导出失败,请重试。")),"image/png")})}finally{URL.revokeObjectURL(a)}}function jl({label:t,onClose:n,children:r}){const s=c.useRef(null);return c.useEffect(()=>{var l,p;const i=document.activeElement,a=document.body.style.overflow;return document.body.style.overflow="hidden",(p=(l=s.current)==null?void 0:l.querySelector("button"))==null||p.focus(),()=>{document.body.style.overflow=a,i instanceof HTMLElement&&i.isConnected&&i.focus()}},[]),Lt.createPortal(e.jsxs("div",{className:"mermaid-dialog","data-tab-swipe-ignore":!0,ref:s,role:"dialog","aria-modal":"true","aria-label":t,onKeyDown:i=>{var d;if(i.key==="Escape"&&(i.stopPropagation(),n()),i.key!=="Tab")return;const a=[...((d=s.current)==null?void 0:d.querySelectorAll('button:not(:disabled), a[href], [tabindex="0"]'))??[]],l=a[0],p=a[a.length-1];i.shiftKey&&document.activeElement===l?(i.preventDefault(),p==null||p.focus()):!i.shiftKey&&document.activeElement===p&&(i.preventDefault(),l==null||l.focus())},children:[e.jsxs("div",{className:"mermaid-dialog-header",children:[e.jsx("strong",{children:t}),e.jsx("button",{type:"button",className:"mermaid-control","aria-label":`关闭${t}`,onClick:n,children:e.jsx(Xn,{size:20})})]}),r]}),document.body)}function Sp({svg:t,fullscreen:n,onFullscreen:r,onExport:s,exporting:i}){const a=c.useMemo(()=>Wc(t),[t]),l=c.useRef(null),[p,d]=c.useState(a),[m,u]=c.useState(null),b=vp(a,p.width,n?p.height:void 0),x=m===null?b:wl(m,b),v=c.useRef(x);v.current=x;const j=c.useRef(!1),I=c.useRef(null);c.useLayoutEffect(()=>{const w=l.current;if(!w)return;const k=()=>d({width:Math.max(1,w.clientWidth-24),height:Math.max(1,w.clientHeight-24)});k();const C=new ResizeObserver(k);return C.observe(w),()=>C.disconnect()},[]);const S=c.useCallback((w,k)=>{const C=l.current;if(!C)return;const W=wl(w,b),D=W/v.current,U=k??{x:C.clientWidth/2,y:C.clientHeight/2},T=(C.scrollLeft+U.x)*D-U.x,E=(C.scrollTop+U.y)*D-U.y;v.current=W,u(W),requestAnimationFrame(()=>{C.scrollLeft=T,C.scrollTop=E})},[b]);return c.useEffect(()=>{const w=l.current;if(!w)return;let k=null;const C=E=>Math.hypot(E[0].clientX-E[1].clientX,E[0].clientY-E[1].clientY),W=E=>{j.current=!1,E.touches.length===2&&(k={distance:Math.max(1,C(E.touches)),scale:v.current},j.current=!0)},D=E=>{if(j.current=!0,!k||E.touches.length!==2)return;E.preventDefault();const A=w.getBoundingClientRect();S(k.scale*C(E.touches)/k.distance,{x:(E.touches[0].clientX+E.touches[1].clientX)/2-A.left,y:(E.touches[0].clientY+E.touches[1].clientY)/2-A.top})},U=()=>{k=null},T=E=>{if(!E.ctrlKey&&!E.metaKey)return;E.preventDefault();const A=w.getBoundingClientRect();S(v.current*Math.exp(-E.deltaY*.01),{x:E.clientX-A.left,y:E.clientY-A.top})};return w.addEventListener("touchstart",W,{passive:!0}),w.addEventListener("touchmove",D,{passive:!1}),w.addEventListener("touchend",U),w.addEventListener("touchcancel",U),w.addEventListener("wheel",T,{passive:!1}),()=>{w.removeEventListener("touchstart",W),w.removeEventListener("touchmove",D),w.removeEventListener("touchend",U),w.removeEventListener("touchcancel",U),w.removeEventListener("wheel",T)}},[S]),e.jsxs("div",{className:`mermaid-viewer${n?" mermaid-viewer-fullscreen":""}`,children:[e.jsxs("div",{className:"mermaid-toolbar",role:"toolbar","aria-label":"图表操作",children:[e.jsx("button",{type:"button",className:"mermaid-control","aria-label":"缩小图表",title:"缩小",disabled:x<=Math.min(.1,b),onClick:()=>S(x/1.25),children:e.jsx(Nu,{size:18})}),e.jsxs("span",{className:"mermaid-zoom-value","aria-label":"缩放比例",children:[Math.round(x*100),"%"]}),e.jsx("button",{type:"button",className:"mermaid-control","aria-label":"放大图表",title:"放大",disabled:x>=4,onClick:()=>S(x*1.25),children:e.jsx(Tu,{size:18})}),e.jsx("button",{type:"button",className:"mermaid-control","aria-label":"自适应图表",title:"自适应",onClick:()=>{var w;u(null),(w=l.current)==null||w.scrollTo(0,0)},children:e.jsx(Pu,{size:18})}),e.jsx("button",{type:"button",className:"mermaid-control","aria-label":n?"退出图表全屏":"全屏查看图表",title:n?"退出全屏":"全屏",onClick:r,children:n?e.jsx(sp,{size:18}):e.jsx(rp,{size:18})}),e.jsx("button",{type:"button",className:"mermaid-control","aria-label":"导出图表 PNG",title:"导出 PNG",disabled:i,onClick:s,children:e.jsx(Mc,{size:18})})]}),e.jsx("div",{className:"mermaid-block-preview",ref:l,tabIndex:0,"aria-label":"图表预览,可滚动或双指缩放",onPointerDown:w=>{if(w.pointerType!=="mouse"||w.button!==0)return;const k=w.currentTarget;j.current=!1,I.current={x:w.clientX,y:w.clientY,left:k.scrollLeft,top:k.scrollTop}},onPointerMove:w=>{const k=I.current;k&&(Math.hypot(w.clientX-k.x,w.clientY-k.y)>4&&(j.current||w.currentTarget.setPointerCapture(w.pointerId),j.current=!0),w.currentTarget.scrollLeft=k.left-(w.clientX-k.x),w.currentTarget.scrollTop=k.top-(w.clientY-k.y))},onPointerUp:()=>{I.current=null},onPointerCancel:()=>{I.current=null},children:e.jsx("div",{className:"mermaid-diagram-canvas",style:{width:a.width*x,height:a.height*x},role:n?"img":"button","aria-label":n?"Mermaid 图表":"点击全屏查看 Mermaid 图表",tabIndex:n?void 0:0,onClick:()=>{!n&&!j.current&&r()},onKeyDown:w=>{!n&&(w.key==="Enter"||w.key===" ")&&(w.preventDefault(),r())},dangerouslySetInnerHTML:{__html:t}})}),e.jsx("div",{className:"mermaid-viewer-hint",children:i?"正在生成完整 PNG…":n?"双指缩放 · 滑动查看 · 导出完整图片":"点击图表全屏 · 双指缩放"})]})}function kp({code:t,svg:n}){const r=c.useRef(null),[s,i]=c.useState(!1),[a,l]=c.useState(!1),[p,d]=c.useState(null),[m,u]=c.useState(null),b=c.useRef(0),x=c.useCallback(()=>{i(!1),requestAnimationFrame(()=>{var S,w;return(w=(S=r.current)==null?void 0:S.querySelector('button[aria-label="全屏查看图表"]'))==null?void 0:w.focus()})},[]),v=c.useCallback(()=>d(null),[]);c.useEffect(()=>()=>{b.current++},[t]),c.useEffect(()=>()=>{p&&URL.revokeObjectURL(p)},[p]);const j=async()=>{if(a)return;const S=b.current;l(!0),u(null);try{const w=await jp(t);S===b.current&&d(URL.createObjectURL(w))}catch(w){S===b.current&&u(w instanceof Error?w.message:"图片导出失败,请重试。")}finally{S===b.current&&l(!1)}},I=e.jsx(Sp,{svg:n,fullscreen:s,onFullscreen:()=>s?x():i(!0),onExport:()=>void j(),exporting:a});return e.jsxs("div",{className:"mermaid-diagram","data-tab-swipe-ignore":!0,ref:r,children:[s?e.jsxs(jl,{label:"图表全屏",onClose:x,children:[I,m&&e.jsx("div",{className:"mermaid-block-status",role:"alert",children:m})]}):I,!s&&m&&e.jsx("div",{className:"mermaid-block-status",role:"alert",children:m}),p&&e.jsxs(jl,{label:"导出图表图片",onClose:v,children:[e.jsxs("div",{className:"mermaid-export-actions",children:[e.jsx("span",{children:"手机可长按图片保存,或下载 PNG"}),e.jsx("a",{href:p,download:"mermaid-diagram.png",children:"下载 PNG"})]}),e.jsx("div",{className:"mermaid-export-preview",children:e.jsx("img",{src:p,alt:"完整 Mermaid 图表 PNG"})})]})]})}function Ip({code:t,complete:n}){const[r,s]=c.useState(!1),[i,a]=c.useState(null),l=n&&(i==null?void 0:i.code)===t?i:null;c.useEffect(()=>{if(!n||!t.trim())return;let d=!1;const m=setTimeout(()=>{Lc(t).then(u=>{d||a({code:t,svg:u})},()=>{d||a({code:t,error:"图表暂时无法渲染,请查看源码。"})})},150);return()=>{d=!0,clearTimeout(m)}},[t,n]);const p=n?t.trim()?(l==null?void 0:l.error)??(l!=null&&l.svg?null:"正在渲染图表…"):"暂无图表内容":"图表生成中…";return e.jsxs("div",{className:"mermaid-block",children:[e.jsxs("div",{className:"mermaid-block-header",children:[e.jsx("span",{children:"Mermaid"}),e.jsx("button",{type:"button","aria-pressed":r,onClick:()=>s(!r),children:r?"图表":"源码"})]}),p&&e.jsx("div",{className:"mermaid-block-status",role:"status",children:p}),r||!(l!=null&&l.svg)?e.jsx("pre",{className:"mermaid-block-source",children:e.jsx("code",{children:t})}):e.jsx(kp,{code:t,svg:l.svg},t)]})}const Dc=2e5,Cp=24,Rp=12,Ap=80,Ep=30,Np=500,Tp=160,Mp=1e3,Qi=200,_p={"/help":"使用帮助","/whoami":"关于我","/works":"项目与作品","/jobs":"求职信息","/timeline":"经历时间线","/contact":"联系方式"};function ta(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function Zr(t,n){if(typeof t!="string")return;const r=t.trim();return r?r.slice(0,n):void 0}function Sl(t,n,r){return Array.isArray(t)?t.slice(0,n).filter(s=>typeof s=="string").map(s=>s.trim().slice(0,r)).filter(Boolean):[]}function Pp(t){if(ta(t)){const n=Zr(t.type,Qi)??"unknown";if(n==="text"){const r=Zr(t.text,Dc);if(r){const s=Zr(t.tone,Qi);return{kind:"text",text:r,...s?{tone:s}:{}}}}return{kind:"unknown",blockType:n,value:t}}return{kind:"unknown",blockType:"unknown",value:t}}function zp(t){if(typeof t.schemaVersion!="number"||!Number.isFinite(t.schemaVersion))return null;const n=Zr(t.title,Tp);if(!n||!Array.isArray(t.blocks))return null;const r=Zr(t.skill,Qi),s=Zr(t.summary,Mp),i=Zr(t.generatedAt,Qi);return{schemaVersion:t.schemaVersion,title:n,...r?{skill:r}:{},...s?{summary:s}:{},...i?{generatedAt:i}:{},blocks:t.blocks.slice(0,Cp).map(Pp),suggestions:Sl(t.suggestions,Rp,Ap),sources:Sl(t.sources,Ep,Np),original:t}}function Lp(t,n=!0){const r=t.trim();if(!n||r.length===0||r.length>Dc||r.startsWith("```"))return null;let s;try{s=JSON.parse(r)}catch{return null}if(!ta(s)&&!Array.isArray(s))return null;if(ta(s)){const i=zp(s);if(i)return{kind:"envelope",raw:r,value:i}}return{kind:"json",raw:r,value:s}}function kl(t){const n=t.trim(),r=_p[n.toLowerCase()];if(r)return r;const s=n.match(/^\/project\s+([a-z0-9-]+)$/i);return s?`查看项目:${s[1]}`:n}const Wp=40,Il=8;function Dp(t){return Array.isArray(t)?t.map((n,r)=>[String(r),n]):Object.entries(t)}function Bp({value:t}){return t===null?e.jsx("span",{className:"json-tree__value json-tree__value--null",children:"null"}):typeof t=="boolean"?e.jsx("span",{className:"json-tree__value json-tree__value--boolean",children:String(t)}):typeof t=="number"?e.jsx("span",{className:"json-tree__value json-tree__value--number",children:t}):e.jsxs("span",{className:"json-tree__value json-tree__value--string",children:[e.jsx("span",{"aria-hidden":"true",children:'"'}),t,e.jsx("span",{"aria-hidden":"true",children:'"'})]})}function wa({value:t,label:n,depth:r=0}){const[s,i]=c.useState(!1);if(t===null||typeof t!="object")return e.jsxs("div",{className:"json-tree__row",children:[n!==void 0&&e.jsx("span",{className:"json-tree__key",children:n}),n!==void 0&&e.jsx("span",{className:"json-tree__separator",children:":"}),e.jsx(Bp,{value:t})]});const a=Dp(t),l=Array.isArray(t)?`数组 · ${a.length} 项`:`对象 · ${a.length} 项`;if(r>=Il)return e.jsxs("div",{className:"json-tree__row json-tree__row--limit",children:[n!==void 0&&e.jsx("span",{className:"json-tree__key",children:n}),e.jsxs("span",{className:"json-tree__limit",children:[l,",已折叠至深度 ",Il]})]});const p=s?a:a.slice(0,Wp),d=a.length-p.length;return e.jsxs("details",{className:"json-tree",open:r===0,children:[e.jsxs("summary",{className:"json-tree__summary",children:[n!==void 0&&e.jsx("span",{className:"json-tree__key",children:n}),e.jsx("span",{className:"json-tree__container-label",children:l})]}),e.jsxs("div",{className:"json-tree__children",children:[a.length===0&&e.jsx("div",{className:"json-tree__empty",children:"空"}),p.map(([m,u])=>e.jsx(wa,{value:u,label:m,depth:r+1},m)),d>0&&e.jsxs("button",{type:"button",className:"json-tree__more",onClick:()=>i(!0),children:["显示其余 ",d," 项"]})]})]})}function Op(t){try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}function Bc({raw:t,onCopyFailed:n}){const r=async()=>{await di(t)||n==null||n()};return e.jsxs("details",{className:"structured-agent-message__raw",children:[e.jsx("summary",{children:"查看原始 JSON"}),e.jsx("div",{className:"structured-agent-message__raw-toolbar",children:e.jsx("button",{type:"button",title:"复制原始 JSON","aria-label":"复制原始 JSON",onClick:()=>{r()},children:e.jsx(ui,{size:14,strokeWidth:1.8,"aria-hidden":"true"})})}),e.jsx("pre",{children:Op(t)})]})}function $p({envelope:t,raw:n,renderText:r,suggestionsEnabled:s,onSuggestionSend:i,onCopyFailed:a}){return e.jsxs("section",{className:"structured-agent-message","data-kind":"envelope",children:[e.jsxs("header",{className:"structured-agent-message__header",children:[e.jsx("h3",{className:"structured-agent-message__title",children:t.title}),t.summary&&e.jsx("p",{className:"structured-agent-message__summary",children:t.summary})]}),e.jsx("div",{className:"structured-agent-message__blocks",children:t.blocks.map((l,p)=>l.kind==="text"?e.jsx("div",{className:"structured-agent-message__text","data-tone":l.tone??"body",children:r(l.text)},p):e.jsxs("details",{className:"structured-agent-message__unknown-block",children:[e.jsxs("summary",{children:[l.blockType," 内容"]}),e.jsx(wa,{value:l.value})]},p))}),t.suggestions.length>0&&e.jsx("div",{className:"structured-agent-message__suggestions","aria-label":"继续提问",children:t.suggestions.map(l=>e.jsx("button",{type:"button",className:"structured-agent-suggestion",disabled:!s,title:`发送 ${l}`,"aria-label":`${kl(l)},发送 ${l}`,onClick:()=>i(l),children:kl(l)},l))}),t.sources.length>0&&e.jsxs("details",{className:"structured-agent-message__details",children:[e.jsxs("summary",{children:["参考来源 ",t.sources.length]}),e.jsx("ul",{children:t.sources.map(l=>e.jsx("li",{children:l},l))})]}),e.jsxs("details",{className:"structured-agent-message__details",children:[e.jsx("summary",{children:"消息信息"}),e.jsxs("dl",{children:[e.jsxs("div",{children:[e.jsx("dt",{children:"格式版本"}),e.jsx("dd",{children:t.schemaVersion})]}),t.skill&&e.jsxs("div",{children:[e.jsx("dt",{children:"能力"}),e.jsx("dd",{children:t.skill})]}),t.generatedAt&&e.jsxs("div",{children:[e.jsx("dt",{children:"生成时间"}),e.jsx("dd",{children:t.generatedAt})]})]})]}),e.jsx(Bc,{raw:n,onCopyFailed:a})]})}function Fp({message:t,renderText:n,suggestionsEnabled:r,onSuggestionSend:s,onCopyFailed:i}){return t.kind==="envelope"?e.jsx($p,{envelope:t.value,raw:t.raw,renderText:n,suggestionsEnabled:r,onSuggestionSend:s,onCopyFailed:i}):e.jsxs("section",{className:"structured-agent-message","data-kind":"json",children:[e.jsxs("div",{className:"structured-agent-message__data-title",children:[e.jsx(Yu,{size:15,strokeWidth:1.8,"aria-hidden":"true"}),e.jsx("span",{children:"结构化数据"})]}),e.jsx(wa,{value:t.value}),e.jsx(Bc,{raw:t.raw,onCopyFailed:i})]})}function Up({text:t,complete:n,renderText:r,suggestionsEnabled:s,onSuggestionSend:i,onCopyFailed:a}){const l=c.useMemo(()=>Lp(t,n),[n,t]);return l?e.jsx(Fp,{message:l,renderText:r,suggestionsEnabled:s,onSuggestionSend:i,onCopyFailed:a}):e.jsx(e.Fragment,{children:r(t)})}const Oc="webapp.nativeAgentRunPrefs.v1",qp=["codex","claude-code","opencode","deepseek-harness"];function $c(){try{const t=JSON.parse(localStorage.getItem(Oc)??"{}");return t&&typeof t=="object"?t:{}}catch{return{}}}function Ki(t){return qp.includes(t)}function Cl(t){return Ki(t)?$c()[t]??{}:{}}function Rl(t,n){if(!Ki(t))return;const r=$c();r[t]=n;try{localStorage.setItem(Oc,JSON.stringify(r))}catch{}}function Hp(t,n,r){var s;return!r||!((s=t.model)!=null&&s.id)||n.has(li(t.model))?t:{}}function li(t){return t.providerID?`${t.providerID}/${t.id}`:t.id}function Gp(t){const n=t.indexOf("/");return n>0?{providerID:t.slice(0,n),id:t.slice(n+1)}:{id:t}}function Vp(t){var r,s;const n=new Map;for(const i of t){const a=(r=i.providerID)==null?void 0:r.trim(),l=((s=i.providerDisplayName)==null?void 0:s.trim())||a||"其他供应商",p=a||"__other__",d=n.get(p)??{key:p,label:a==="opencode-go"?`${l}(需订阅)`:l,models:[]};d.models.push({...i,optionLabel:i.displayName||i.id}),n.set(p,d)}return[...n.values()]}const Fc="context-compaction";function Yi(t,n){const r=t??[],s=r.findIndex(a=>a.itemId===n.itemId&&a.sectionIndex===n.sectionIndex);return(s<0?[...r,{itemId:n.itemId,sectionIndex:n.sectionIndex,text:n.delta}]:r.map((a,l)=>l===s?{...a,text:a.text+n.delta}:a)).sort((a,l)=>a.sectionIndex-l.sectionIndex)}function Al(t){let n=[];for(const r of t)if(r.type==="runtime_progress"){const{type:s,...i}=r;n=Uc(n,i)}else r.type==="context_usage"?n=n.filter(s=>s.progressId!==Fc):(r.type==="done"||r.type==="turn_aborted"||r.type==="error")&&(n=[]);return n}function Uc(t,n){const r=t.findIndex(s=>s.progressId===n.progressId);return r<0?[...t,n]:t.map((s,i)=>i===r?n:s)}function qc(t,n){return[...t].reverse().find(r=>r.toolCallId===n)}function Qp(t){return[...t].reverse().find(n=>!n.toolCallId)}function Kp(t,n){var i,a;const r=[],s=new Map;for(let l=0;l<t.length;l+=1){const p=t[l];r.push(p);const d=p.role==="user"?(i=p.presentation)==null?void 0:i.executionTrace:void 0,m=d==null?void 0:d.turnId;if(!m)continue;const u=d.segmentIndex??s.get(m)??0;s.set(m,Math.max(s.get(m)??0,u+1));const b=t[l+1];((a=b==null?void 0:b.executionTrace)==null?void 0:a.turnId)===m&&(b.executionTrace.segmentIndex??0)===u?(r.push({...b,executionTrace:{...b.executionTrace,turnId:m,revision:n,segmentIndex:u}}),l+=1):r.push({id:Gc(m,u),role:"assistant",content:"",executionTrace:{turnId:m,revision:n,segmentIndex:u},timestamp:p.timestamp})}return r}function Yp(t){var n,r,s,i;return t.role==="assistant"&&!!((n=t.toolCalls)!=null&&n.length||(s=(r=t.presentation)==null?void 0:r.reasoning)!=null&&s.length||((i=t.presentation)==null?void 0:i.agentMessagePhase)==="commentary")}function Hc(t,n,r,s){return t.map(i=>{var a;return(a=i.toolCalls)!=null&&a.some(l=>l.id===n)?{...i,toolCalls:i.toolCalls.map(l=>l.id===n?{...l,result:r,isError:s}:l)}:i})}function Xp(t,n,r,s){if(n.type==="text_chunk"){if(!n.text||n.messagePhase!=="commentary")return[...t];const i=n.itemId?`codex-trace:${s}:agent:${n.itemId}`:`codex-live-commentary:${s}`,a=t.findIndex(l=>l.id===i);return a<0?[...t,{id:i,role:"assistant",content:n.text,presentation:{agentMessagePhase:"commentary"},timestamp:r}]:t.map((l,p)=>p===a?{...l,content:l.content+n.text}:l)}if(n.type==="reasoning_summary_delta"){const i=t.findIndex(a=>{var l,p;return(p=(l=a.presentation)==null?void 0:l.reasoning)==null?void 0:p.some(d=>d.itemId===n.itemId)});return i<0?[...t,{id:`codex-live-reasoning:${n.itemId}`,role:"assistant",content:"",presentation:{reasoning:Yi(void 0,n)},timestamp:r}]:t.map((a,l)=>{var p;return l===i?{...a,presentation:{...a.presentation,reasoning:Yi((p=a.presentation)==null?void 0:p.reasoning,n)}}:a})}if(n.type==="tool_call"){const i=t.findIndex(a=>{var l;return(l=a.toolCalls)==null?void 0:l.some(p=>p.id===n.toolCall.id)});return i>=0?t.map((a,l)=>{var p;return l===i?{...a,toolCalls:(p=a.toolCalls)==null?void 0:p.map(d=>d.id===n.toolCall.id?{...d,name:n.toolCall.name,arguments:n.toolCall.arguments}:d)}:a}):[...t,{id:`codex-live-tool:${n.toolCall.id}`,role:"assistant",content:"",toolCalls:[{...n.toolCall}],timestamp:r}]}return t.some(i=>{var a;return(a=i.toolCalls)==null?void 0:a.some(l=>l.id===n.result.toolCallId)})?Hc(t,n.result.toolCallId,n.result.content,n.result.isError):[...t]}function na(t,n,r,s=Date.now()){var v,j;const i=t.findLastIndex(I=>{var S;return((S=I.executionTrace)==null?void 0:S.turnId)===n&&Jp(I.executionTrace.liveMessages??[],r)}),a=t.findLastIndex(I=>{var S;return((S=I.executionTrace)==null?void 0:S.turnId)===n}),l=t.findLastIndex(I=>I.role==="user"&&!I.isQueued),p=i>=0?i:a>l||a>=0&&!((v=t[l])!=null&&v.isSteered)?a:-1,d=p>=0?((j=t[p].executionTrace)==null?void 0:j.liveMessages)??[]:[],m=Xp(d,r,s,n);if(m.length===0&&d.length===0)return[...t];if(p>=0)return t.map((I,S)=>S===p?{...I,executionTrace:{...I.executionTrace,liveMessages:m}}:I);if(m===d)return[...t];const u=l;if(u<0)return[...t];const b=t.reduce((I,S)=>{var w;return((w=S.executionTrace)==null?void 0:w.turnId)===n?Math.max(I,S.executionTrace.segmentIndex??0):I},-1)+1,x={id:Gc(n,b),role:"assistant",content:"",executionTrace:{turnId:n,revision:`live:${n}`,segmentIndex:b,liveMessages:m},timestamp:s};return[...t.slice(0,u+1),x,...t.slice(u+1)]}function Gc(t,n){return n===0?`codex-execution-trace:${t}`:`codex-execution-trace:${t}:${n}`}function Jp(t,n){if(n.type==="text_chunk")return n.itemId?t.some(s=>s.id===`codex-trace:${n.turnId}:agent:${n.itemId}`):!1;if(n.type==="reasoning_summary_delta")return t.some(s=>{var i,a;return(a=(i=s.presentation)==null?void 0:i.reasoning)==null?void 0:a.some(l=>l.itemId===n.itemId)});const r=n.type==="tool_call"?n.toolCall.id:n.result.toolCallId;return t.some(s=>{var i;return(i=s.toolCalls)==null?void 0:i.some(a=>a.id===r)})}function Zp(t,n){return t.some(s=>{var i,a;return((a=(i=s.presentation)==null?void 0:i.executionTrace)==null?void 0:a.segmentIndex)!==void 0})?t.filter(s=>{var i,a;return((a=(i=s.presentation)==null?void 0:i.executionTrace)==null?void 0:a.segmentIndex)===n}):n===0?[...t]:[]}function ra(t,n){const r=new Map(t.map(s=>[`${s.itemId}:${s.sectionIndex}`,s]));for(const s of n){const i=`${s.itemId}:${s.sectionIndex}`,a=r.get(i),l=a?s.text.startsWith(a.text)?s.text:a.text.startsWith(s.text)?a.text:s.text:s.text;r.set(i,{...s,text:l})}return[...r.values()]}function El(t){var n,r;return[...((n=t.presentation)==null?void 0:n.agentMessagePhase)==="commentary"?[`agent:${t.id}`]:[],...(((r=t.presentation)==null?void 0:r.reasoning)??[]).map(s=>`reasoning:${s.itemId}:${s.sectionIndex}`),...(t.toolCalls??[]).map(s=>`tool:${s.id}`)]}function ef(t,n){var r,s;return((r=t.presentation)==null?void 0:r.agentMessagePhase)==="commentary"&&((s=n.presentation)==null?void 0:s.agentMessagePhase)==="commentary"&&(t.id.startsWith("codex-live-commentary:")||n.id.startsWith("codex-live-commentary:"))&&(t.content.startsWith(n.content)||n.content.startsWith(t.content))}function tf(t){var a,l,p,d,m,u,b,x,v,j,I;const n=[],r=new Map,s=new Map,i=new Map;for(const S of t){if(((a=S.presentation)==null?void 0:a.agentMessagePhase)==="commentary"){const U=r.get(S.id);if(U!==void 0){const T=n[U],E=S.content.startsWith(T.content)?S.content:T.content.startsWith(S.content)?T.content:S.content;n[U]={...T,...S,id:T.id,content:E};continue}}const w={...S,toolCalls:S.toolCalls?[]:void 0,presentation:(l=S.presentation)!=null&&l.reasoning?{...S.presentation,reasoning:[]}:S.presentation};for(const U of((p=S.presentation)==null?void 0:p.reasoning)??[]){const T=`${U.itemId}:${U.sectionIndex}`,E=s.get(T);if(E){const A=n[E.messageIndex],B=[...((d=A.presentation)==null?void 0:d.reasoning)??[]],q=B[E.sectionIndex];B[E.sectionIndex]=ra([q],[U])[0],n[E.messageIndex]={...A,presentation:{...A.presentation,reasoning:B}}}else{const A=w.presentation.reasoning.findIndex(B=>B.itemId===U.itemId&&B.sectionIndex===U.sectionIndex);A>=0?w.presentation.reasoning[A]=ra([w.presentation.reasoning[A]],[U])[0]:w.presentation.reasoning.push(U)}}for(const U of S.toolCalls??[]){const T=i.get(U.id);if(T){const E=n[T.messageIndex],A=[...E.toolCalls??[]];A[T.toolIndex]={...A[T.toolIndex],...U},n[T.messageIndex]={...E,toolCalls:A}}else{const E=w.toolCalls.findIndex(A=>A.id===U.id);E>=0?w.toolCalls[E]={...w.toolCalls[E],...U}:w.toolCalls.push(U)}}const k=((m=w.presentation)==null?void 0:m.agentMessagePhase)==="commentary",C=!!((b=(u=w.presentation)==null?void 0:u.reasoning)!=null&&b.length),W=!!((x=w.toolCalls)!=null&&x.length);if(!k&&!C&&!W)continue;const D=n.length;n.push(w),k&&r.set(w.id,D);for(let U=0;U<(((j=(v=w.presentation)==null?void 0:v.reasoning)==null?void 0:j.length)??0);U+=1){const T=w.presentation.reasoning[U];s.set(`${T.itemId}:${T.sectionIndex}`,{messageIndex:D,sectionIndex:U})}for(let U=0;U<(((I=w.toolCalls)==null?void 0:I.length)??0);U+=1)i.set(w.toolCalls[U].id,{messageIndex:D,toolIndex:U})}return n}function nf(t,n,r){if(t.length<2)return t;const s=new Map;t.forEach((S,w)=>{for(const k of El(S))s.set(k,w)});const i=S=>{for(const w of El(S)){const k=s.get(w);if(k!==void 0)return k}return t.findIndex(w=>ef(w,S))},a=S=>{const w=[];for(const k of S){const C=i(k);C<0||w.at(-1)===C||w.push(C)}return w},l=a(n),p=a(r),d=Array.from({length:t.length},()=>new Set),m=Array.from({length:t.length},()=>0),u=S=>{for(let w=1;w<S.length;w+=1){const k=S[w-1],C=S[w];k===C||d[k].has(C)||(d[k].add(C),m[C]+=1)}};u(l),u(p);const b=new Map(l.map((S,w)=>[S,w])),x=new Map(p.map((S,w)=>[S,w])),v=(S,w)=>{const k=b.get(S)??Number.POSITIVE_INFINITY,C=b.get(w)??Number.POSITIVE_INFINITY;if(k!==C)return k-C;const W=x.get(S)??Number.POSITIVE_INFINITY,D=x.get(w)??Number.POSITIVE_INFINITY;return W!==D?W-D:S-w},j=m.flatMap((S,w)=>S===0?[w]:[]).sort(v),I=[];for(;j.length>0;){const S=j.shift();I.push(t[S]);for(const w of d[S])m[w]-=1,m[w]===0&&(j.push(w),j.sort(v))}return I.length===t.length?I:t}function rf(t,n){var s,i,a,l,p;const r=t.map(d=>{var m,u;return{...d,toolCalls:(m=d.toolCalls)==null?void 0:m.map(b=>({...b})),presentation:(u=d.presentation)!=null&&u.reasoning?{...d.presentation,reasoning:[...d.presentation.reasoning]}:d.presentation}});for(const d of n){if(((s=d.presentation)==null?void 0:s.agentMessagePhase)==="commentary"){const u=r.findIndex(b=>{var x;return b.id===d.id||((x=b.presentation)==null?void 0:x.agentMessagePhase)==="commentary"&&(b.id.startsWith("codex-live-commentary:")||d.id.startsWith("codex-live-commentary:"))&&(d.content.startsWith(b.content)||b.content.startsWith(d.content))});if(u<0)r.push(d);else{const b=r[u],x=d.content.startsWith(b.content)?d.content:b.content.startsWith(d.content)?b.content:d.content;r[u]={...b,content:x,presentation:{...b.presentation,agentMessagePhase:"commentary"}}}continue}const m=(i=d.presentation)==null?void 0:i.reasoning;if(m!=null&&m.length){const u=r.findIndex(b=>{var x,v;return(v=(x=b.presentation)==null?void 0:x.reasoning)==null?void 0:v.some(j=>m.some(I=>I.itemId===j.itemId))});if(u>=0){const b=r[u];r[u]={...b,presentation:{...b.presentation,reasoning:ra(((a=b.presentation)==null?void 0:a.reasoning)??[],m)}}}else r.push(d)}for(const u of d.toolCalls??[]){const b=r.findIndex(x=>{var v;return(v=x.toolCalls)==null?void 0:v.some(j=>j.id===u.id)});if(b>=0){const x=r[b];r[b]={...x,toolCalls:(l=x.toolCalls)==null?void 0:l.map(v=>v.id===u.id?{...v,...u}:v)}}else r.push({...d,id:(((p=d.toolCalls)==null?void 0:p.length)??0)>1?`${d.id}:tool:${u.id}`:d.id,presentation:void 0,toolCalls:[u]})}}return nf(tf(r),t,n)}function Nl(t){for(let n=t.length-1;n>=0;n--)if(t[n].type==="context_usage"&&t[n].usage)return t[n].usage}function Tl(t){var r;const n=new Map;for(const s of t)s.type==="native_subagent_update"&&((r=s.activity)!=null&&r.parentToolCallId)&&n.set(s.activity.parentToolCallId,s.activity);return[...n.values()]}function sf(t,n,r,s){return s!==void 0&&!(s!=null&&s.trim())?[]:s!==void 0&&s!==r?s?n[s]??[]:[]:t}function Vc(t){var n;return!!(t&&t.role==="assistant"&&!((n=t.toolCalls)!=null&&n.length)&&!t.widget&&!t.askUser&&!t.isCompactionSummary&&!t.executionTrace)}function Ml(t,n){var r;if(n.role==="assistant"&&((r=n.toolCalls)!=null&&r.length)){const s=t[t.length-1];if(Vc(s))return[...t.slice(0,-1),{...s,content:s.content,toolCalls:n.toolCalls}]}return[...t,n]}function of(t,n){if(!n)return t;const r=t[t.length-1];if(Vc(r)){const s=[...t];return s[s.length-1]={...r,content:r.content+n},s}return[...t,{id:crypto.randomUUID(),role:"assistant",content:n,timestamp:Date.now()}]}function _l(t,n,r,s){return t.map(i=>{if(!i.toolCalls)return i;const a=i.toolCalls.map(l=>l.id===n?{...l,result:r,isError:s}:l);return{...i,toolCalls:a}})}function Pl(t,n,r,s){return t.map(i=>{if(!i.toolCalls)return i;const a=i.toolCalls.map(l=>l.name==="dispatch_agent"&&l.arguments.subSessionId===n?{...l,arguments:{...l.arguments,subAgentStatus:r,subAgentDetail:s}}:l);return{...i,toolCalls:a}})}function zl(t,n,r){return t.map(s=>{if(!s.toolCalls)return s;const i=s.toolCalls.map(a=>a.name==="dispatch_agent"&&a.arguments.subSessionId===n?{...a,arguments:{...a.arguments,subAgentProgress:(a.arguments.subAgentProgress?a.arguments.subAgentProgress+`
|
|
123
123
|
`+r:r).split(`
|
|
124
124
|
`).slice(-30).join(`
|
|
125
125
|
`)}}:a);return{...s,toolCalls:i}})}function Ll(t,n,r){return t.map(s=>s.id===n?r(s):s)}function Wl(t,n){const r=t.findIndex(s=>{var i,a;return(a=(i=s.presentation)==null?void 0:i.reasoning)==null?void 0:a.some(l=>l.itemId===n.itemId)});return r<0?[...t,{id:`native-reasoning:${n.itemId}`,role:"assistant",content:"",presentation:{reasoning:Yi(void 0,n)},timestamp:Date.now()}]:t.map((s,i)=>{var a;return i===r?{...s,presentation:{...s.presentation,reasoning:Yi((a=s.presentation)==null?void 0:a.reasoning,n)}}:s})}const Ie=Nc((t,n)=>({messages:[],messagesBySession:{},historyWindowsBySession:{},contextUsageBySession:{},runtimeProgressBySession:{},nativeSubagentsBySession:{},runningSessionId:null,currentText:"",sessionId:null,todos:[],cronTasks:[],addMessage:(r,s)=>t(i=>{const a=s??i.sessionId??void 0,l=a&&a!==i.sessionId?i.messages:Ml(i.messages,r),p=a?{...i.messagesBySession,[a]:Ml(i.messagesBySession[a]??(a===i.sessionId?i.messages:[]),r)}:i.messagesBySession;return{messages:l,messagesBySession:p,currentText:a&&a!==i.sessionId?i.currentText:""}}),appendText:(r,s)=>t(i=>{if(!r)return i;const a=s??i.sessionId??void 0,l=!a||a===i.sessionId,p=of(l?i.messages:i.messagesBySession[a]??[],r),d=a?{...i.messagesBySession,[a]:p}:i.messagesBySession;return{messages:l?p:i.messages,messagesBySession:d,currentText:a&&a!==i.sessionId?i.currentText:i.currentText+r}}),setRunningSession:r=>t({runningSessionId:r}),setSessionId:r=>t(s=>s.sessionId===r?s:{sessionId:r,messages:s.messagesBySession[r]??[],currentText:""}),updateToolResult:(r,s,i,a)=>t(l=>{const p=a??l.sessionId??void 0,d=p&&p!==l.sessionId?l.messages:_l(l.messages,r,s,i),m=p?{...l.messagesBySession,[p]:_l(l.messagesBySession[p]??(p===l.sessionId?l.messages:[]),r,s,i)}:l.messagesBySession;return{messages:d,messagesBySession:m}}),setMessages:(r,s,i)=>t(a=>{const l=s??a.sessionId??void 0,p=!l||l===a.sessionId;return{messages:p?r:a.messages,messagesBySession:l?{...a.messagesBySession,[l]:r}:a.messagesBySession,historyWindowsBySession:l&&i?{...a.historyWindowsBySession,[l]:i}:a.historyWindowsBySession,currentText:p?"":a.currentText}}),getMessagesForSession:r=>n().messagesBySession[r]??[],getSessionHistoryWindow:r=>n().historyWindowsBySession[r],setContextUsage:(r,s)=>t(i=>{const a=s??i.sessionId??void 0;return a?{contextUsageBySession:{...i.contextUsageBySession,[a]:r}}:i}),getContextUsageForSession:r=>n().contextUsageBySession[r],applyRuntimeProgress:(r,s)=>t(i=>{const a=s??i.sessionId??void 0;return a?{runtimeProgressBySession:{...i.runtimeProgressBySession,[a]:Uc(i.runtimeProgressBySession[a]??[],r)}}:i}),setRuntimeProgress:(r,s)=>t(i=>{const a=s??i.sessionId??void 0;return a?{runtimeProgressBySession:{...i.runtimeProgressBySession,[a]:r}}:i}),clearRuntimeProgress:r=>t(s=>{var p;const i=r??s.sessionId??void 0;if(!i||!((p=s.runtimeProgressBySession[i])!=null&&p.length))return s;const{[i]:a,...l}=s.runtimeProgressBySession;return{runtimeProgressBySession:l}}),applyNativeSubagentActivity:(r,s)=>t(i=>{const a=s??i.sessionId??void 0;return a?{nativeSubagentsBySession:{...i.nativeSubagentsBySession,[a]:{...i.nativeSubagentsBySession[a]??{},[r.parentToolCallId]:r}}}:i}),setNativeSubagentActivities:(r,s)=>t(i=>{const a=s??i.sessionId??void 0;return a?{nativeSubagentsBySession:{...i.nativeSubagentsBySession,[a]:Object.fromEntries(r.map(l=>[l.parentToolCallId,l]))}}:i}),applyReasoningSummary:(r,s)=>t(i=>{const a=s??i.sessionId??void 0,l=a&&a!==i.sessionId?i.messages:Wl(i.messages,r),p=a?{...i.messagesBySession,[a]:Wl(i.messagesBySession[a]??(a===i.sessionId?i.messages:[]),r)}:i.messagesBySession;return{messages:l,messagesBySession:p}}),applyCodexExecutionEvent:(r,s,i)=>t(a=>{const l=i??a.sessionId??void 0,p=Date.now(),d=l&&l!==a.sessionId?a.messages:na(a.messages,r,s,p),m=l?{...a.messagesBySession,[l]:na(a.messagesBySession[l]??(l===a.sessionId?a.messages:[]),r,s,p)}:a.messagesBySession;return{messages:d,messagesBySession:m}}),updateMessage:(r,s,i)=>t(a=>{const l=i??a.sessionId??void 0,p=l&&l!==a.sessionId?a.messages:Ll(a.messages,r,s),d=l?{...a.messagesBySession,[l]:Ll(a.messagesBySession[l]??(l===a.sessionId?a.messages:[]),r,s)}:a.messagesBySession;return{messages:p,messagesBySession:d}}),updateSubAgentStatus:(r,s,i,a)=>t(l=>{const p=a??l.sessionId??void 0,d=p&&p!==l.sessionId?l.messages:Pl(l.messages,r,s,i),m=p?{...l.messagesBySession,[p]:Pl(l.messagesBySession[p]??(p===l.sessionId?l.messages:[]),r,s,i)}:l.messagesBySession;return{messages:d,messagesBySession:m}}),updateSubAgentProgress:(r,s,i)=>t(a=>{const l=i??a.sessionId??void 0,p=l&&l!==a.sessionId?a.messages:zl(a.messages,r,s),d=l?{...a.messagesBySession,[l]:zl(a.messagesBySession[l]??(l===a.sessionId?a.messages:[]),r,s)}:a.messagesBySession;return{messages:p,messagesBySession:d}}),clearMessages:r=>t(s=>{const i=r??s.sessionId??void 0;if(!i)return{messages:[],currentText:""};const{[i]:a,...l}=s.messagesBySession,{[i]:p,...d}=s.historyWindowsBySession,{[i]:m,...u}=s.contextUsageBySession,{[i]:b,...x}=s.runtimeProgressBySession,{[i]:v,...j}=s.nativeSubagentsBySession;return{messages:i===s.sessionId?[]:s.messages,messagesBySession:l,historyWindowsBySession:d,contextUsageBySession:u,runtimeProgressBySession:x,nativeSubagentsBySession:j,currentText:i===s.sessionId?"":s.currentText}}),setTodos:r=>t({todos:r}),setCronTasks:r=>t({cronTasks:r})}));function ja(){const t=window;return t.SpeechRecognition??t.webkitSpeechRecognition??null}function Qc(){if(typeof window>"u")return null;const t=window.agentApi;return typeof(t==null?void 0:t.dictationStart)!="function"||typeof t.dictationStop!="function"||typeof t.onDictation!="function"||typeof t.onDictationError!="function"?null:t}function af(){return Qc()!==null||ja()!==null}function lf(t){var a,l;const n=Qc();if(n){let p=!1,d=()=>{},m=()=>{};const u=()=>{var b;p||(p=!0,d(),m(),(b=t.onEnd)==null||b.call(t))};return d=n.onDictation(({text:b,isFinal:x})=>{const v=b.trim();v&&(x?(t.onFinal(v),u()):t.onInterim(v))}),m=n.onDictationError(b=>{var x;(x=t.onError)==null||x.call(t,b),u()}),n.dictationStart().then(b=>{var x;b.ok||((x=t.onError)==null||x.call(t,b.reason||"无法启动语音识别"),u())}).catch(()=>{var b;(b=t.onError)==null||b.call(t,"无法启动语音识别"),u()}),{stop:()=>{n.dictationStop()}}}const r=ja();if(!r)return(a=t.onError)==null||a.call(t,"当前环境不支持语音识别"),null;const s=new r;s.lang=t.lang??"zh-CN",s.continuous=!1,s.interimResults=!0;let i="";s.onresult=p=>{let d="";for(let m=p.resultIndex;m<p.results.length;m++){const u=p.results[m];u.isFinal?i+=u[0].transcript:d+=u[0].transcript}d&&t.onInterim(i+d)},s.onerror=p=>{var d;p.error!=="no-speech"&&p.error!=="aborted"&&((d=t.onError)==null||d.call(t,`语音识别失败:${p.error??"未知错误"}`))},s.onend=()=>{var p;i&&t.onFinal(i.trim()),(p=t.onEnd)==null||p.call(t)};try{s.start()}catch{return(l=t.onEnd)==null||l.call(t),null}return{stop:()=>s.stop()}}function cf(t){var l;const n=ja();if(!n)return(l=t.onError)==null||l.call(t,"当前环境不支持语音唤醒"),null;let r=!1,s=null,i=null;const a=()=>{if(!r){s=new n,s.lang=t.lang??"zh-CN",s.continuous=!0,s.interimResults=!0,s.onresult=p=>{var u,b,x;const d=p.results[p.results.length-1],m=(b=(u=d==null?void 0:d[0])==null?void 0:u.transcript)==null?void 0:b.trim();m&&(d.isFinal&&((x=t.onHeard)==null||x.call(t,m)),m.includes(t.wakeWord)&&t.onWake(m))},s.onerror=p=>{var d;p.error==="not-allowed"&&((d=t.onError)==null||d.call(t,"麦克风权限被拒绝,语音唤醒已停用"),r=!0)},s.onend=()=>{r||(i=setTimeout(a,400))};try{s.start()}catch{i=setTimeout(a,800)}}};return a(),{stop:()=>{r=!0,i&&clearTimeout(i);try{s==null||s.abort()}catch{}}}}function ri(){typeof window<"u"&&"speechSynthesis"in window&&window.speechSynthesis.cancel()}function Wi(t,n){return n(),typeof(t==null?void 0:t.ttsStop)=="function"?t.ttsStop().then(()=>{}):Promise.resolve()}const df={createContext:()=>new AudioContext,createNode:t=>new AudioWorkletNode(t,"pcm-stream-player",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[1]}),workletUrl:"./pcm-audio-worklet.js"};function uf(t){const n=t instanceof ArrayBuffer?new Uint8Array(t):new Uint8Array(t.buffer,t.byteOffset,t.byteLength);if(n.byteLength%2!==0)throw new Error("PCM chunk contains an incomplete int16 sample");const r=new Float32Array(n.byteLength/2),s=new DataView(n.buffer,n.byteOffset,n.byteLength);for(let i=0;i<r.length;i+=1)r[i]=s.getInt16(i*2,!0)/32768;return r}class pf{constructor(n,r=df){this.api=n,this.dependencies=r,this.context=null,this.node=null,this.ready=null,this.current=null}start(n){var s;this.current&&!this.current.acknowledged&&((s=this.node)==null||s.port.postMessage({type:"flush",generation:this.current.metadata.generation}));const r={metadata:n,pending:[],pendingSamples:0,finished:!1,acknowledged:!1};this.current=r,this.ensureReady().then(()=>{if(!(this.current!==r||!this.node)){this.node.port.postMessage({type:"start",generation:n.generation,sampleRate:n.sampleRate});for(const i of r.pending)this.postSamples(n.generation,i);r.pending=[],r.pendingSamples=0,r.finished&&this.node.port.postMessage({type:"finish",generation:n.generation})}}).catch(i=>this.fail(r,i))}enqueue(n,r){const s=this.current;if(!s||s.metadata.generation!==n||s.acknowledged)return;let i;try{i=uf(r)}catch(a){this.fail(s,a);return}if(this.node){this.postSamples(n,i);return}if(s.pendingSamples+i.length>s.metadata.sampleRate){this.fail(s,new Error("TTS PCM queue overflow"));return}s.pending.push(i),s.pendingSamples+=i.length}finish(n){var s;const r=this.current;!r||r.metadata.generation!==n||r.acknowledged||(r.finished=!0,(s=this.node)==null||s.port.postMessage({type:"finish",generation:n}))}flush(n){var s;const r=this.current;!r||r.metadata.generation!==n||r.acknowledged||((s=this.node)==null||s.port.postMessage({type:"flush",generation:n}),r.pending=[],r.pendingSamples=0,this.acknowledge(r))}dispose(){var n,r;this.current&&this.flush(this.current.metadata.generation),(n=this.node)==null||n.disconnect(),this.node=null,(r=this.context)==null||r.close(),this.context=null,this.ready=null}ensureReady(){return this.ready?this.ready:(this.ready=(async()=>{const n=this.dependencies.createContext();this.context=n,await n.audioWorklet.addModule(this.dependencies.workletUrl);const r=this.dependencies.createNode(n);r.port.onmessage=s=>this.onWorkletMessage(s.data),r.connect(n.destination),this.node=r,n.state!=="running"&&await n.resume()})(),this.ready)}postSamples(n,r){var s;(s=this.node)==null||s.port.postMessage({type:"chunk",generation:n,samples:r},[r.buffer])}onWorkletMessage(n){const r=this.current;if(!(!r||n.generation!==r.metadata.generation)){if(n.type==="drained"||n.type==="stopped"){this.acknowledge(r);return}n.type==="overflow"&&this.fail(r,new Error("TTS AudioWorklet buffer overflow"))}}fail(n,r){this.current!==n||n.acknowledged||(console.error("[tts] PCM playback failed",r),n.acknowledged=!0,this.current=null,this.api.ttsStop(),this.api.ttsPlaybackEnded(n.metadata.generation))}acknowledge(n){this.current!==n||n.acknowledged||(n.acknowledged=!0,this.current=null,this.api.ttsPlaybackEnded(n.metadata.generation))}}async function ff(t,n,r,s=50){var p;const i=d=>t.getSession(n,{view:"trace",revision:d,turnId:r.turnId});try{return{detail:await i(r.revision),revision:r.revision,recovered:!1}}catch(d){if(d.code!=="STALE_SESSION_ANCHOR")throw d}const a=await t.getSession(n,{view:"core",limit:s}),l=(p=a==null?void 0:a.history)==null?void 0:p.revision;if(!l)throw new Error("会话内容已更新,请刷新后重试");return{detail:await i(l),revision:l,recovered:!0}}async function js(t,n,r,s,i,a,l){if(r!=="codex"){const d=l?await l():await t.getSession(n,s);a()&&i(d,"full");return}const p=l?await l():await t.getSession(n,{...s,view:"core"});a()&&i(p,"core")}function hf(t,n,r){var i,a;const s=((i=n==null?void 0:n.history)==null?void 0:i.nextCursor)??null;return((a=n==null?void 0:n.history)==null?void 0:a.hasMore)===!1||!s||r===0&&s===t?null:s}function gf(t,n,r,s){const i=r==="core"&&(s==null?void 0:s.delivery)!=="legacy-full"&&!!(s!=null&&s.revision),a=t.some(l=>!l.isQueued);return i&&a?mf(t,n):Yc(t,n)}function Dl(t,n,r,s,i){const a=(i==null?void 0:i.kind)==="anchored"?t.filter(l=>l.isQueued):sa(t);return{messages:gf(a,n,r,s),window:{kind:"latest",olderCursor:(i==null?void 0:i.kind)==="latest"&&a.some(l=>!l.isQueued)?i.olderCursor:(s==null?void 0:s.nextCursor)??null}}}function Bl(t,n,r){const s=sa(t),i=new Set(s.map(l=>l.id)),a=sa(n).filter(l=>!i.has(l.id));return a.length===0?s:r==="older"?[...a,...s]:[...s,...a]}function sa(t){const n=new Set,r=[];for(let s=t.length-1;s>=0;s-=1){const i=t[s];n.has(i.id)||(n.add(i.id),r.push(i))}return r.length===t.length?t:r.reverse()}function mf(t,n){var C,W;if(n.length===0)return t;if(t.length===0)return n;let r=t.filter(D=>!D.isQueued);const s=t.filter(D=>D.isQueued),i=n.findLastIndex(D=>D.role==="user"&&!D.isCompactionSummary);if(i<0)return t;const a=n[i],l=r.findIndex(D=>D.role==="user"&&D.id===a.id);let p=l>=0?l:r.findLastIndex(D=>D.role==="user"&&!D.isCompactionSummary&&un(D)===un(a));if(p<0)return[...r,...n.slice(i),...s];const d=r[p].sendState&&Xc(r,n,Jc(r,n,Math.max(0,r.length-n.length))??0,p),m=Yc(r.slice(0,p),n.slice(0,i));r=[...m,...r.slice(p)],p=m.length;const u=r.findIndex((D,U)=>U>p&&D.role==="user"&&!D.isCompactionSummary),b=u<0?r.length:u,x=[];for(let D=p+1;D<b;D+=1)Ol(r[D])&&x.push(D);const v=n.slice(i+1).filter(Ol),j=(W=(C=n.find(D=>D.executionTrace))==null?void 0:C.executionTrace)==null?void 0:W.revision,I=r.map(D=>D.executionTrace&&j?{...D,executionTrace:{...D.executionTrace,revision:j}}:D);d&&(I[p]={...I[p],id:a.id.startsWith("history-message.v1.")?a.id:I[p].id,sendState:void 0});const S=n.slice(i+1).find(D=>D.executionTrace),w=r.findIndex((D,U)=>{var T,E;return U>p&&U<b&&((T=D.executionTrace)==null?void 0:T.turnId)===((E=S==null?void 0:S.executionTrace)==null?void 0:E.turnId)});if(S&&w>=0){const D=r[w].executionTrace;I[w]={...S,id:r[w].id,timestamp:r[w].timestamp,executionTrace:{...S.executionTrace,...D!=null&&D.liveMessages?{liveMessages:D.liveMessages}:{}}}}const k=Math.min(x.length,v.length);for(let D=0;D<k;D+=1){const U=x[D],T=I[U],E=v[D];I[U]={...T,...E,id:E.id.startsWith("history-message.v1.")?E.id:T.id,timestamp:T.timestamp,images:E.images??T.images,presentation:E.presentation??T.presentation}}return v.length>k&&I.splice(b,0,...v.slice(k)),[...I,...s]}function Ol(t){var n,r,s;return t.role==="assistant"&&!t.executionTrace&&!((n=t.toolCalls)!=null&&n.length)&&!t.askUser&&!t.isCompactionSummary&&!((s=(r=t.presentation)==null?void 0:r.reasoning)!=null&&s.length)}function Qr(t){var i,a;const n=((i=t==null?void 0:t.history)==null?void 0:i.delivery)==="core",r=Kc(t,!n),s=(a=t==null?void 0:t.history)==null?void 0:a.revision;return!n||!s?r:jf(Kp(r,s),(t==null?void 0:t.events)??[])}function xf(t){return Kc(t).filter(Yp)}function Kc(t,n=!0){var b;const r=(t==null?void 0:t.messages)??[],s=(t==null?void 0:t.events)??[],i=new Set(s.filter(x=>x.type==="approval_resolved"&&x.questionId).map(x=>x.questionId)),a=new Map;for(const x of s)x.type==="tool_result"&&((b=x.result)!=null&&b.toolCallId)&&a.set(x.result.toolCallId,{content:x.result.content??"",isError:x.result.isError});const l=r.filter(x=>(x.role==="user"||x.role==="assistant"||x.role==="tool")&&x.name!=="__interrupt__").map(wf),p=new Map;for(const x of l)x.role==="tool"&&x.toolCallId&&p.set(x.toolCallId,x);let d=l.filter(x=>x.role!=="tool").map(x=>{var v;if(x.isCompactionSummary)return x;if(x.role==="assistant"&&((v=x.toolCalls)!=null&&v.length)){const j=x.toolCalls.filter(I=>I.name!=="ask_user");return j.length===0&&!x.content.trim()?null:{...x,toolCalls:j.map(I=>{const S=p.get(I.id);if(S)return{...I,...S.toolResultRef?{resultRef:S.toolResultRef,isError:S.toolResultRef.isError}:{result:S.content}};const w=a.get(I.id);return w?{...I,result:w.content,isError:w.isError}:I})}}return x.role==="user"&&x.name&&x.name!=="__compaction_checkpoint__"&&!x.name.startsWith("__native_")?{...x,agentName:x.name}:x}).filter(x=>x!==null);const m=Sf(s,n);if(!d.some(x=>x.role==="assistant"&&!x.isCompactionSummary)&&m){const x=d.findLastIndex(v=>v.role==="user"&&!v.isCompactionSummary);d=x>=0?[...d.slice(0,x+1),m,...d.slice(x+1)]:[...d,m]}const u=new Set(d.flatMap(x=>{var v;return(v=x.askUser)!=null&&v.questionId?[x.askUser.questionId]:[]}));for(const x of s)x.type!=="ask_user"||!x.questionId||i.has(x.questionId)||u.has(x.questionId)||(u.add(x.questionId),d.push({id:crypto.randomUUID(),role:"assistant",content:"",askUser:{questionId:x.questionId,question:x.question??"",options:x.options,fields:x.fields,multiSelect:x.multiSelect},timestamp:Date.now()}));return d}function Yc(t,n){if(n.length===0)return t;if(t.length===0)return n;const r=t.map(ia),s=n.map(ia),i=Math.max(0,t.length-n.length),a=Jc(t,n,i);let l={currentStart:i,length:0,distance:1/0};for(let j=0;j<r.length;j++)for(let I=0;I<s.length;I++){if(r[j]!==s[I])continue;const S=j-I;if(S<0)continue;let w=0;for(;j+w<r.length&&I+w<s.length&&r[j+w]===s[I+w];)w+=1;const k=Math.abs(S-i);(w>l.length||w===l.length&&k<l.distance)&&(l={currentStart:S,length:w,distance:k})}const p=a??(l.length>0?l.currentStart:i),d=n.map((j,I)=>{var W,D,U;const S=t[p+I];if(!S||!vf(S,j,s[I]))return j;const w=(D=(W=j.presentation)==null?void 0:W.attachments)==null?void 0:D.some(T=>T.dataUrl),k=(U=j.toolCalls)==null?void 0:U.map(T=>{var A;const E=(A=S.toolCalls)==null?void 0:A.find(B=>B.id===T.id);return(E==null?void 0:E.result)===void 0?T:{...T,result:E.result,isError:E.isError}});return{...bf(S,j),id:j.id.startsWith("history-message.v1.")?j.id:S.id,timestamp:S.timestamp,images:w?void 0:j.images??S.images,...k?{toolCalls:k}:{}}}),m=t.filter(j=>j.isQueued),u=t.slice(p).filter(j=>!j.isQueued),b=yf(u,d),x=t.findLastIndex((j,I)=>I>=p&&j.role==="user"&&(j.sendState==="pending"||j.sendState==="failed")&&!j.isQueued&&!Xc(t,d,p,I)),v=x<0?[]:t.slice(x).filter(j=>!j.isQueued);return[...t.slice(0,p).filter(j=>!j.isQueued),...b,...v,...m]}function Xc(t,n,r,s){const i=t[s];if(!i||i.role!=="user")return!1;if(n.some(d=>d.id===i.id))return!0;const a=un(i),l=t.slice(r,s+1).filter(d=>d.role==="user"&&!d.isQueued&&un(d)===a).length;return n.filter(d=>d.role==="user"&&un(d)===a).length>=l}function bf(t,n){var a,l;const r=(a=n.presentation)==null?void 0:a.attachments,s=(l=t==null?void 0:t.presentation)==null?void 0:l.attachments;if(!(r!=null&&r.length)||!(s!=null&&s.length)||r.every(p=>p.dataUrl||p.unavailable))return n;const i=r.map(p=>{if(p.dataUrl||p.unavailable||!p.omitted)return p;const d=s.find(m=>m.name===p.name&&m.dataUrl);return d?{...p,dataUrl:d.dataUrl,omitted:void 0}:p});return{...n,presentation:{...n.presentation,attachments:i}}}function yf(t,n){const r=n.findLastIndex(j=>j.role==="user"&&!j.isQueued);if(r<0)return n;const s=un(n[r]);let i=-1,a=1/0;for(let j=0;j<t.length;j+=1){const I=t[j];if(I.role!=="user"||I.isQueued||un(I)!==s)continue;const S=Math.abs(j-r);S<a&&(i=j,a=S)}if(i<0)return n;const l=t.findIndex((j,I)=>I>i&&j.role==="user"&&!j.isQueued),p=t.slice(i+1,l<0?t.length:l),d=n.slice(r+1),m=$l(p),u=$l(d);if(m.length<=u.length||!m.startsWith(u))return n;const b=m.slice(u.length),x=n.findLastIndex((j,I)=>{var S;return I>r&&j.role==="assistant"&&!((S=j.toolCalls)!=null&&S.length)&&!j.askUser&&!j.isCompactionSummary});if(x>=0)return n.map((j,I)=>I===x?{...j,content:j.content+b}:j);const v=p.findLast(j=>j.role==="assistant"&&!!j.content&&!j.isCompactionSummary);return[...n,{id:(v==null?void 0:v.id)??crypto.randomUUID(),role:"assistant",content:b,timestamp:(v==null?void 0:v.timestamp)??Date.now()}]}function $l(t){return t.filter(n=>n.role==="assistant"&&!n.isCompactionSummary).map(n=>n.content).join("")}function Jc(t,n,r){const s=n[0];if((s==null?void 0:s.role)!=="user")return null;const i=un(s);let a=null;for(let l=0;l<t.length;l+=1){if(t[l].role!=="user"||t[l].isQueued||un(t[l])!==i)continue;const p=Math.abs(l-r);(!a||p<a.distance)&&(a={start:l,distance:p})}return(a==null?void 0:a.start)??null}function vf(t,n,r){var s,i;return ia(t)===r||t.role==="assistant"&&n.role==="assistant"&&t.content===n.content&&JSON.stringify(((s=t.toolCalls)==null?void 0:s.map(a=>a.id))??[])===JSON.stringify(((i=n.toolCalls)==null?void 0:i.map(a=>a.id))??[])?!0:t.role==="user"&&n.role==="user"&&un(t)===un(n)}function un(t){var n;return JSON.stringify({role:t.role,content:t.content,name:(n=t.name)!=null&&n.startsWith("__native_")?void 0:t.name,agentName:t.agentName,isCompactionSummary:t.isCompactionSummary})}function ia(t){return JSON.stringify({role:t.role,content:t.content,toolCalls:t.toolCalls,toolCallId:t.toolCallId,toolResultRef:t.toolResultRef,name:t.name,agentName:t.agentName,presentation:t.role==="user"?void 0:t.presentation,isCompactionSummary:t.isCompactionSummary})}function wf(t){var n;if(t.name==="__compaction_checkpoint__"){let r="";try{r=JSON.parse(t.content??"{}").summary??""}catch{}return{id:crypto.randomUUID(),role:"user",content:r,name:t.name,isCompactionSummary:!0,timestamp:Date.now()}}return{id:t.historyId??crypto.randomUUID(),role:t.role,content:t.content??"",toolCalls:(n=t.toolCalls)!=null&&n.length?t.toolCalls:void 0,toolCallId:t.toolCallId,toolResultRef:t.toolResultRef,name:t.name,presentation:t.presentation,timestamp:Date.now()}}function jf(t,n){return n.reduce((r,s)=>{var a;if(!s.turnId)return r;let i=null;return s.type==="text_chunk"&&s.messagePhase==="commentary"&&typeof s.text=="string"&&s.text?i={type:"text_chunk",text:s.text,turnId:s.turnId,itemId:s.itemId,messagePhase:"commentary"}:s.type==="reasoning_summary_delta"&&s.itemId&&Number.isSafeInteger(s.sectionIndex)&&typeof s.delta=="string"?i={type:"reasoning_summary_delta",turnId:s.turnId,itemId:s.itemId,sectionIndex:s.sectionIndex,delta:s.delta}:s.type==="tool_call"&&s.toolCall?i={type:"tool_call",turnId:s.turnId,toolCall:s.toolCall}:s.type==="tool_result"&&((a=s.result)!=null&&a.toolCallId)&&(i={type:"tool_result",turnId:s.turnId,result:{toolCallId:s.result.toolCallId,content:s.result.content??"",isError:s.result.isError}}),i?na(r,s.turnId,i):r},t)}function Sf(t,n=!0){var a;let r="";const s=[],i=new Map;for(const l of t){if(l.type==="text_chunk"&&l.text&&(r+=l.text),n&&l.type==="tool_call"&&l.toolCall){const p={id:l.toolCall.id,name:l.toolCall.name,arguments:l.toolCall.arguments};s.push(p),i.set(p.id,p)}if(n&&l.type==="tool_result"&&((a=l.result)!=null&&a.toolCallId)){const p=i.get(l.result.toolCallId);p&&(p.result=l.result.content??"",p.isError=l.result.isError)}}return!r.trim()&&s.length===0?null:{id:crypto.randomUUID(),role:"assistant",content:r.trim(),toolCalls:s.length>0?s:void 0,timestamp:Date.now()}}class kf{constructor(){this.slot=null}prefetch(n,r,s){return this.getOrStart(n,r,s).promise}async consume(n,r,s){const i=this.getOrStart(n,r,s);try{return await i.promise}finally{this.slot===i&&(this.slot=null)}}invalidate(){this.slot=null}getOrStart(n,r,s){var l;if(((l=this.slot)==null?void 0:l.sessionId)===n&&this.slot.cursor===r)return this.slot;let i;try{i=s()}catch(p){i=Promise.reject(p)}const a={sessionId:n,cursor:r,promise:i};return this.slot=a,i.catch(()=>{this.slot===a&&(this.slot=null)}),a}}function If(t){const n=/^关于“([\s\S]+?)”的回答:\r?\n([\s\S]+)$/.exec(t);if(n)return n[1].trim()&&n[2].trim()?[{question:n[1],answer:n[2]}]:[];const r=/^\s*<send_user_message_question_reply>\s*([\s\S]*?)\s*<\/send_user_message_question_reply>\s*$/.exec(t);if(!r)return[];try{const s=JSON.parse(r[1]);if(!Array.isArray(s)||s.length===0)return[];const i=[];for(const a of s){if(!a||typeof a!="object")return[];const{questionItemId:l,question:p,answer:d}=a;if(typeof l!="string"||typeof p!="string"||!p.trim()||typeof d!="string"||!d.trim())return[];const m=JSON.parse(l);if(!Array.isArray(m)||m.length!==3||m[0]!=="request_user_input_async"||typeof m[1]!="string"||!m[1].trim()||!Number.isSafeInteger(m[2])||m[2]<0)return[];i.push({question:p,answer:d,itemId:m[1],questionIndex:m[2]})}return i}catch{return[]}}function Cf(t,n,r){return t.question!==r||!n.includes(":async:")?!1:t.itemId===void 0||n.endsWith(`:async:${t.itemId}:${t.questionIndex}`)}function Rf(t,n){const r=Af(t);if(!n)return r;const s=[...r],i=new Map,a=new Set;return r.forEach((l,p)=>{var u,b,x;if(l.role!=="user"||l.askUser||l.isQueued||l.isCompactionSummary||(u=l.images)!=null&&u.length||(x=(b=l.presentation)==null?void 0:b.attachments)!=null&&x.length)return;const d=If(l.content);if(!d.length)return;const m=[];d.forEach((v,j)=>{var S;const I=r.findLastIndex((w,k)=>{const C=w.askUser;return C&&!a.has(k)&&(v.itemId!==void 0||k<p)&&Cf(v,C.questionId,C.question)&&(!C.answered||!C.answer||C.answer==="已处理"||C.answer.trim()===v.answer.trim())});if(I>=0){a.add(I);const w=s[I];(!((S=w.askUser)!=null&&S.answered)||w.askUser.answer!==v.answer)&&(s[I]={...w,askUser:{...w.askUser,answered:!0,answer:v.answer}});return}m.push({...l,id:j===0?l.id:`${l.id}:question-reply:${j}`,askUser:{questionId:`answered-history:${l.id}:${j}`,question:v.question,answered:!0,answer:v.answer}})}),d.length===1&&m.length===1&&(m[0].askUser.questionId=`answered-history:${l.id}`),i.set(p,m)}),s.flatMap((l,p)=>i.get(p)??[l])}function Af(t){var s,i,a,l;const n=new Map;for(let p=0;p<t.length;p+=1){const d=t[p];if(d.role!=="user"||d.isQueued||(s=d.images)!=null&&s.length||(a=(i=d.presentation)==null?void 0:i.attachments)!=null&&a.length)continue;const m=n.get(d.content)??[];m.push(p),n.set(d.content,m)}const r=new Set;for(let p=0;p<t.length;p+=1){const d=t[p].askUser;if(!(d!=null&&d.answered)||!d.questionId.includes(":async:")||!((l=d.answer)!=null&&l.trim()))continue;const m=`关于“${d.question}”的回答:
|
package/runtime/webapp/dist/assets/{BrowserLivePanel-jpMOjMFS.js → BrowserLivePanel-BsthwY1a.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Gt=i=>{throw TypeError(i)};var An=(i,n,l)=>n.has(i)||Gt("Cannot "+l);var Zt=(i,n,l)=>n.has(i)?Gt("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(i):n.set(i,l);var Jt=(i,n,l)=>(An(i,n,"access private method"),l);import{c as V,j as s,d as Pn,r as o,B as zn,f as en,l as tn}from"./index-
|
|
1
|
+
var Gt=i=>{throw TypeError(i)};var An=(i,n,l)=>n.has(i)||Gt("Cannot "+l);var Zt=(i,n,l)=>n.has(i)?Gt("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(i):n.set(i,l);var Jt=(i,n,l)=>(An(i,n,"access private method"),l);import{c as V,j as s,d as Pn,r as o,B as zn,f as en,l as tn}from"./index-CQepZy15.js";import{L as G}from"./loader-circle-gCGomGeo.js";import{r as Nn,E as Dn}from"./clipboard-CvdeFLww.js";import{R as Fn}from"./rotate-ccw-CU6Ofovh.js";import{X as In}from"./x-CbdLQm7m.js";/**
|
|
2
2
|
* @license lucide-react v0.468.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as W,r as o,f as M,j as e,R as H,g as J,P as L,i as Q,d as U,u as V,A as X}from"./index-
|
|
1
|
+
import{c as W,r as o,f as M,j as e,R as H,g as J,P as L,i as Q,d as U,u as V,A as X}from"./index-CQepZy15.js";import{a as Z,b as G,c as ee}from"./CollaborationTabBridge-Dqnn1SXm.js";import{F as se,D as ae,P as te,a as le,b as re,c as ne,d as oe,N as ie,e as ce,f as de,g as he,h as ue,i as q,j as je,k as be,S as xe}from"./file-types-Bbr1oDan.js";import{X as O}from"./x-CbdLQm7m.js";import{A as me,C as pe,P as fe,T as ve}from"./trash-2-CCZMuVfC.js";import{c as B,C as Y,U as F,A as _}from"./collaboration-Be_9WEiY.js";/**
|
|
2
2
|
* @license lucide-react v0.468.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
package/runtime/webapp/dist/assets/{CollaborationPage-CsXdyER9.js → CollaborationPage-DA902wqi.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as W,r as d,j as e,u as ue,P as G,M as de,A as se,e as he}from"./index-
|
|
1
|
+
import{c as W,r as d,j as e,u as ue,P as G,M as de,A as se,e as he}from"./index-CQepZy15.js";import{i as H,r as ae,p as pe,C as fe}from"./artifact-links-OG5Ksgyd.js";import{c as A,D as Q,U as F,A as ne,C as me}from"./collaboration-Be_9WEiY.js";import{C as be}from"./CollaborationTabBridge-Dqnn1SXm.js";import{L as Y}from"./loader-circle-gCGomGeo.js";import{X as xe}from"./x-CbdLQm7m.js";/**
|
|
2
2
|
* @license lucide-react v0.468.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|