@deepseek-ai/dsh-client-ui-trajectory 0.0.1-rc.2 → 0.0.1-rc.3

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/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/client/ui-trajectory/README.md
5
- README.md: f4b3bd223c2872f0341d49bdaa102440d73b4f29
6
- README.zh.md: 9bcb3b6ad98d672cc524c168f2024be9ba56b577
5
+ README.md: d3786b6460c5df7eaa6d24e68c80025e7fb29ae4
6
+ README.zh.md: b3bc88d8ab73ccc0da9a49d1867fe2c66be5ca43
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  English | [中文](README.zh.md)
4
4
 
5
- Trajectory renders a turn-aware event ledger with selectable User, Assistant, Tool, and nested Subtool records. Thick rules mark Turn boundaries, compact inline markers identify Steps, and the main ledger keeps only index, event, and content; selection opens a local inspector for token usage, duration, Input, Output, and Timing. Scrollable Summary regions keep their scrollbar thumbs transparent until the region is hovered or contains keyboard focus, without changing the reserved scroll geometry. A standalone compaction request appears chronologically in its own `Between turns` section, while a numbered compaction remains inside its owning turn. Long ledgers open at the current tail, load one older page when the user reaches the loaded range's top, and mount only the visible row window plus a small overscan; request-only separators share the next measurable virtual item, while semantic row keys and ARIA indexes survive prepends. Selection, timeline navigation, folding, search, and Request totals cover the currently loaded window. The ledger covers records with an explicit loading row until the initial tail is positioned and while an older page is pending. A fixed Overview above the ledger projects real record start/duration timing from left to right; when earlier records remain unloaded and the viewport includes the loaded domain's start, a neutral ellipsis control identifies the omitted prefix and loads one earlier page without assigning unknown history fabricated duration. Assistant spans divide recorded TTFT from decoding, and a 500 ms hover reveals exact clock and duration details. Dragging an interval focuses the ledger on every record active at any point in that inclusive range, while clearing the selection restores the full loaded ledger. Wheel gestures zoom the time domain. A right-button click clears the selected interval, while a right-button drag pans an already zoomed viewport without changing it. The initial view and streaming updates stay at the tail; scrolling upward suspends following so new records do not interrupt inspection of earlier rows. Content-only stream frames preserve virtual row keys and heights, reuse measurements, and do not issue repeated tail-scroll writes. The toolbar's Export button hands the session log — the root plus every subagent descendant — directly to the browser download manager as a ZIP streamed by the host (`GET /api/session.export`), so JavaScript never buffers the response: every file is the session's stored artifact text verbatim (`session.jsonl` at the root, `subagents/<id>/session.jsonl` for descendants; no manifest, byte-identical to the backend's durable artifact), and every image any included log references sits under `media/<attachmentId>.<ext>`. Fixture mode (no host) answers 404 for the export. Completed replies retain assembled blocks, timing, and usage in Trajectory target State, while the shared Session window keeps the raw Events. Trajectory asks the conversation shell to float the composer over the full-height ledger, while its responsive vertical scrollers reserve the composer's live height so final rows remain reachable. Trajectory-owned Definitions assemble business records, including cancellation-frozen Assistant and Tool records, from the shared Session window, so Trajectory neither reads nor changes the Chat conversation snapshot. The package provides no service and declares no Context merge; it registers target-specific Event Definitions, a Trajectory view builder, and one tab in the conversation's `'conversation.view'` slot ring. Contract: api-contracts v3 §8.
5
+ Trajectory renders a turn-aware event ledger with selectable User, Assistant, Tool, and nested Subtool records. Thick rules mark Turn boundaries, compact inline markers identify Steps, and the main ledger keeps only index, event, and content; selection opens a local inspector for token usage, duration, Input, Output, and Timing. Scrollable Summary regions keep their scrollbar thumbs transparent until the region is hovered or contains keyboard focus, without changing the reserved scroll geometry. A standalone compaction request appears chronologically in its own `Between turns` section, while a numbered compaction remains inside its owning turn. Long ledgers open at the current tail, load one older page when the user reaches the loaded range's top, and mount only the visible row window plus a small overscan; request-only separators share the next measurable virtual item, while semantic row keys and ARIA indexes survive prepends. Selection, timeline navigation, folding, search, and Request totals cover the currently loaded window. The ledger covers records with an explicit loading row until the initial tail is positioned and while an older page is pending. A fixed Overview above the ledger projects real record start/duration timing from left to right; when earlier records remain unloaded and the viewport includes the loaded domain's start, a neutral ellipsis control identifies the omitted prefix and loads one earlier page without assigning unknown history fabricated duration. Assistant spans divide recorded TTFT from decoding, and a 500 ms hover reveals exact clock and duration details. Dragging an interval focuses the ledger on every record active at any point in that inclusive range, while clearing the selection restores the full loaded ledger. Wheel gestures zoom the time domain. A right-button click clears the selected interval, while a right-button drag pans an already zoomed viewport without changing it. The initial view and streaming updates stay at the tail; scrolling upward suspends following so new records do not interrupt inspection of earlier rows. Content-only stream frames preserve virtual row keys and heights, reuse measurements, and do not issue repeated tail-scroll writes. Completed replies retain assembled blocks, timing, and usage in Trajectory target State, while the shared Session window keeps the raw Events. Trajectory asks the conversation shell to float the composer over the full-height ledger, while its responsive vertical scrollers reserve the composer's live height so final rows remain reachable. Trajectory-owned Definitions assemble business records, including cancellation-frozen Assistant and Tool records, from the shared Session window, so Trajectory neither reads nor changes the Chat conversation snapshot. The package provides no service and declares no Context merge; it registers target-specific Event Definitions, a Trajectory view builder, and one tab in the conversation's `'conversation.view'` slot ring. Contract: api-contracts v3 §8.
6
6
 
7
7
  ## Model Experience
8
8
 
package/README.zh.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | 中文
4
4
 
5
- Trajectory 渲染按轮次组织的事件记录表,其中可选择用户、助手、工具和嵌套子工具记录。较粗的分割线标示轮次边界,紧凑的行内标记标识步骤,主记录表仅保留索引、事件和内容;选择记录则会打开局部检查器,查看 token 用量、耗时、输入、输出和计时。可滚动的概述区域默认保持滚动条滑块透明,直到鼠标悬停该区域或其中包含键盘焦点时才显示,同时不改变滚动条预留的几何空间。独立运行的压缩(compaction)请求会按时间顺序显示在自己的 `Between turns` 区段中,而带编号的压缩仍位于其所属轮次内。长记录表打开时定位于当前尾部,用户到达已加载范围顶部时加载一页更早的历史,并且只挂载可见行窗口和少量额外缓冲行;仅含请求的分隔行并入下一个具备可测高度的虚拟项,语义行键和 ARIA 索引在向前补页后保持不变。选择、时间线导航、折叠、搜索和请求汇总只覆盖当前已加载的窗口。初始尾部完成定位前以及更早页面仍在等待时,记录表会用明确的加载行遮住真实记录。固定在记录表上方的 Overview 区域从左到右投影记录的真实开始时间与耗时;仍有更早记录未加载且 viewport 包含已加载时间域起点时,中性的省略号控件会标识被省略的前缀,并可加载一页更早历史,而不会为未知部分虚构耗时。助手时间条会区分记录到的 TTFT 与解码时间,悬停 500 ms 后可查看精确时刻和耗时详情。拖选一个区间会将记录表聚焦到活动区间与该闭区间有重叠的所有记录,清除选择则恢复完整的已加载记录表。滚轮手势用于缩放时间域。右键单击会清除所选区间;在已放大的 viewport 上按住右键拖动则只会平移视图,不会改变该区间。初始视图和流式更新都会停留在尾部;向上滚动会暂停跟随,因此新记录不会打断对旧记录的检查。仅含内容更新的流式帧会保持虚拟行的键和高度不变、复用测量结果,并且不会重复写入末尾滚动位置。工具栏的 “Export” 按钮会将会话日志——根会话及其全部子代理——作为宿主流式返回的 ZIP(`GET /api/session.export`)直接交给浏览器下载管理器,因此 JavaScript 不会缓冲响应:每个文件都是会话存储工件的逐字原文(根为 `session.jsonl`,子代理为 `subagents/<id>/session.jsonl`;无清单,与后端持久化工件逐字节一致),每个被包含日志引用的图片则放在 `media/<attachmentId>.<ext>` 下。fixture 模式(无宿主)对导出应答 404。已完成的回复会在 Trajectory target State 中保留组装后的 blocks、计时与用量,共享 Session 窗口则保留原始 Event。Trajectory 要求会话壳将 composer 作为浮层置于全高记录表上方;其响应式纵向滚动容器会预留 composer 的实时高度,确保仍可滚动到最后几行。Trajectory 自有的 Definition 从共享 Session 窗口组装业务记录,其中包括因取消而冻结的助手和工具记录,因此 Trajectory 既不读取也不改变 Chat 会话快照。该包不提供 service,也不声明 Context 合并;它会注册 target 专属 Event Definition、Trajectory view builder,以及会话 `'conversation.view'` slot 环中的一个视图标签页。约定:api-contracts v3 §8。
5
+ Trajectory 渲染按轮次组织的事件记录表,其中可选择用户、助手、工具和嵌套子工具记录。较粗的分割线标示轮次边界,紧凑的行内标记标识步骤,主记录表仅保留索引、事件和内容;选择记录则会打开局部检查器,查看 token 用量、耗时、输入、输出和计时。可滚动的概述区域默认保持滚动条滑块透明,直到鼠标悬停该区域或其中包含键盘焦点时才显示,同时不改变滚动条预留的几何空间。独立运行的压缩(compaction)请求会按时间顺序显示在自己的 `Between turns` 区段中,而带编号的压缩仍位于其所属轮次内。长记录表打开时定位于当前尾部,用户到达已加载范围顶部时加载一页更早的历史,并且只挂载可见行窗口和少量额外缓冲行;仅含请求的分隔行并入下一个具备可测高度的虚拟项,语义行键和 ARIA 索引在向前补页后保持不变。选择、时间线导航、折叠、搜索和请求汇总只覆盖当前已加载的窗口。初始尾部完成定位前以及更早页面的加载尚未完成时,记录表会用明确的加载行遮住真实记录。固定在记录表上方的 Overview 区域从左到右投影记录的真实开始时间与耗时;仍有更早记录未加载且 viewport 包含已加载时间域起点时,中性的省略号控件会标识被省略的前缀,并可加载一页更早历史,而不会为未知部分虚构耗时。助手时间条会区分记录到的 TTFT 与解码时间,悬停 500 ms 后可查看精确时刻和耗时详情。拖选一个区间会将记录表聚焦到活动区间与该闭区间有重叠的所有记录,清除选择则恢复完整的已加载记录表。滚轮手势用于缩放时间域。右键单击会清除所选区间;在已放大的 viewport 上按住右键拖动则只会平移视图,不会改变该区间。初始视图和流式更新都会停留在尾部;向上滚动会暂停跟随,因此新记录不会打断对旧记录的检查。仅含内容更新的流式帧会保持虚拟行的键和高度不变、复用测量结果,并且不会重复写入末尾滚动位置。已完成的回复会在 Trajectory target State 中保留组装后的 blocks、计时与用量,共享 Session 窗口则保留原始 Event。Trajectory 要求会话壳将 composer 作为浮层置于全高记录表上方;其响应式纵向滚动容器会预留 composer 的实时高度,确保仍可滚动到最后几行。Trajectory 自有的 Definition 从共享 Session 窗口组装业务记录,其中包括因取消而冻结的助手和工具记录,因此 Trajectory 既不读取也不改变 Chat 会话快照。该包不提供 service,也不声明 Context 合并;它会注册 target 专属 Event Definition、Trajectory view builder,以及会话 `'conversation.view'` slot 环中的一个视图标签页。约定:api-contracts v3 §8。
6
6
 
7
7
  ## 模型体验
8
8
 
package/lib/client.js CHANGED
@@ -41,53 +41,6 @@ window.__ModuleLoader__.load({
41
41
  return (0, _deepseek_ai_dsh_client_runtime_client.createSnapshotStore)(false, { persist: { name: "dsh.trajectory.duration" } });
42
42
  }
43
43
  //#endregion
44
- //#region lib/types/client/export-log.js
45
- /**
46
- * Session log export delivery. The host streams the archive from
47
- * `GET /api/session.export`; this module owns the browser-native download
48
- * handoff so the browser can stream the response directly to its download
49
- * manager instead of buffering the ZIP in JavaScript.
50
- * @module
51
- */
52
- /**
53
- * Collapse an untrusted session id into one safe path/filename segment.
54
- * Distinct ids may collapse onto one segment (impossible for the host-minted
55
- * UUIDs, so no uniqueness suffix is kept).
56
- * @param id - the raw session id.
57
- * @returns a filesystem-safe single segment.
58
- */
59
- function safeSessionIdSegment(id) {
60
- return id.replace(/[^A-Za-z0-9_-]/g, "_");
61
- }
62
- /**
63
- * The export archive filename for one session (same convention the host's
64
- * Content-Disposition uses).
65
- * @param sessionId - the root session id.
66
- * @returns the download filename.
67
- */
68
- function sessionLogZipFilename(sessionId) {
69
- return `dsh-session-${safeSessionIdSegment(sessionId)}.zip`;
70
- }
71
- /**
72
- * Hand one host-streamed session archive to the browser download manager.
73
- * The operation resolves after dispatching the native download; HTTP delivery
74
- * continues outside JavaScript and is reported by the browser itself.
75
- * @param sessionId - the root session id to export with all descendants.
76
- * @returns a promise that rejects if the browser handoff itself fails.
77
- */
78
- function downloadSessionLog(sessionId) {
79
- return Promise.resolve().then(() => {
80
- const query = new URLSearchParams({
81
- sessionId,
82
- includeDescendants: "true"
83
- });
84
- const anchor = document.createElement("a");
85
- anchor.href = `/api/session.export?${query.toString()}`;
86
- anchor.download = sessionLogZipFilename(sessionId);
87
- anchor.click();
88
- });
89
- }
90
- //#endregion
91
44
  //#region lib/types/client/locales.js
92
45
  /** `trajectory` namespace dictionaries (view tab label + toolbar strings). */
93
46
  /** Dictionary namespace owned by this plugin. */
@@ -106,10 +59,6 @@ window.__ModuleLoader__.load({
106
59
  "toolbar.calls": "Calls",
107
60
  "toolbar.expandCalls": "Expand calls",
108
61
  "toolbar.collapseCalls": "Collapse calls",
109
- "toolbar.export": "Export",
110
- "toolbar.exportAria": "Export session log",
111
- "toolbar.exporting": "Exporting…",
112
- "toolbar.exportTitle": "Export session log (ZIP, includes subagents)",
113
62
  "toolbar.search": "搜索轨迹",
114
63
  "toolbar.searchPlaceholder": "搜索"
115
64
  };
@@ -127,10 +76,6 @@ window.__ModuleLoader__.load({
127
76
  "toolbar.calls": "Calls",
128
77
  "toolbar.expandCalls": "Expand calls",
129
78
  "toolbar.collapseCalls": "Collapse calls",
130
- "toolbar.export": "Export",
131
- "toolbar.exportAria": "Export session log",
132
- "toolbar.exporting": "Exporting…",
133
- "toolbar.exportTitle": "Export session log (ZIP, includes subagents)",
134
79
  "toolbar.search": "Search trajectory",
135
80
  "toolbar.searchPlaceholder": "Search"
136
81
  };
@@ -300,6 +245,7 @@ window.__ModuleLoader__.load({
300
245
  return {
301
246
  kind: "assistant",
302
247
  seq: event.seq,
248
+ messageId: event.data.message.id,
303
249
  time: event.time,
304
250
  turn: state.turn,
305
251
  step: state.step,
@@ -466,13 +412,13 @@ window.__ModuleLoader__.load({
466
412
  return source.kind === "plugin" && source.plugin === "compact" && typeof source.compactionId === "string" && source.compactionId !== "" ? source.compactionId : void 0;
467
413
  }
468
414
  function eventCompactionId(event) {
469
- if (event.type !== "compact/start" && event.type !== "compact/summary" && event.type !== "compact/end") return void 0;
415
+ if (event.type !== "compaction/start" && event.type !== "compaction/summary" && event.type !== "compaction/end") return void 0;
470
416
  const value = event.data.compactionId;
471
417
  return typeof value === "string" && value !== "" ? value : void 0;
472
418
  }
473
419
  function requestFromState(state) {
474
420
  const start = state.start.event;
475
- if (start.type !== "compact/start") return void 0;
421
+ if (start.type !== "compaction/start") return void 0;
476
422
  const summary = state.summary?.event;
477
423
  const end = state.end?.event;
478
424
  const checkpoint = state.checkpoint?.event;
@@ -482,10 +428,10 @@ window.__ModuleLoader__.load({
482
428
  turn: start.data.turn,
483
429
  step: 0,
484
430
  startedAt: start.time,
485
- completedAt: end?.type === "compact/end" ? end.time : null,
486
- status: end?.type !== "compact/end" ? "running" : end.data.error === void 0 ? "complete" : "error",
487
- ...end?.type === "compact/end" && end.data.error !== void 0 ? { error: end.data.error } : {},
488
- ...summary?.type !== "compact/summary" ? {} : {
431
+ completedAt: end?.type === "compaction/end" ? end.time : null,
432
+ status: end?.type !== "compaction/end" ? "running" : end.data.error === void 0 ? "complete" : "error",
433
+ ...end?.type === "compaction/end" && end.data.error !== void 0 ? { error: end.data.error } : {},
434
+ ...summary?.type !== "compaction/summary" ? {} : {
489
435
  resultSeq: summary.seq,
490
436
  summary: summary.data.summary,
491
437
  ...summary.data.rawOutput === void 0 ? {} : { rawOutput: summary.data.rawOutput },
@@ -511,7 +457,7 @@ window.__ModuleLoader__.load({
511
457
  const compactId = eventCompactionId(event);
512
458
  if (compactId !== void 0) return {
513
459
  id: compactId,
514
- role: event.type === "compact/start" ? "start" : "update"
460
+ role: event.type === "compaction/start" ? "start" : "update"
515
461
  };
516
462
  const checkpoint = checkpointId(event);
517
463
  return checkpoint === void 0 ? null : {
@@ -520,15 +466,15 @@ window.__ModuleLoader__.load({
520
466
  };
521
467
  },
522
468
  start: (_context, match) => {
523
- if (match.event.type !== "compact/start") throw new Error("trajectory-compaction start requires compact/start");
469
+ if (match.event.type !== "compaction/start") throw new Error("trajectory-compaction start requires compaction/start");
524
470
  return { start: match };
525
471
  },
526
472
  update: (context, match) => {
527
- if (match.event.type === "compact/summary") return {
473
+ if (match.event.type === "compaction/summary") return {
528
474
  ...context.state,
529
475
  summary: match
530
476
  };
531
- if (match.event.type === "compact/end") return {
477
+ if (match.event.type === "compaction/end") return {
532
478
  ...context.state,
533
479
  end: match
534
480
  };
@@ -3055,149 +3001,149 @@ window.__ModuleLoader__.load({
3055
3001
  document.head.appendChild(tag);
3056
3002
  }
3057
3003
  var TrajectoryTable_module_css_default = {
3058
- "toolCatalogIcon": "Y0dWHa_toolCatalogIcon",
3059
- "assistantContentRendered": "Y0dWHa_assistantContentRendered",
3060
- "assistantToolCallName": "Y0dWHa_assistantToolCallName",
3061
- "history-loading-spin": "Y0dWHa_history-loading-spin",
3004
+ "turnLabelFull": "Y0dWHa_turnLabelFull",
3005
+ "subtoolAmber": "Y0dWHa_subtoolAmber",
3006
+ "schema": "Y0dWHa_schema",
3007
+ "panelImageLink": "Y0dWHa_panelImageLink",
3008
+ "summaryScrollRegion": "Y0dWHa_summaryScrollRegion",
3009
+ "trajectory-table": "Y0dWHa_trajectory-table",
3010
+ "split": "Y0dWHa_split",
3011
+ "usageGroup": "Y0dWHa_usageGroup",
3012
+ "contextGreen": "Y0dWHa_contextGreen",
3013
+ "usagePanel": "Y0dWHa_usagePanel",
3014
+ "toolCatalogDescription": "Y0dWHa_toolCatalogDescription",
3015
+ "jsonPayload": "Y0dWHa_jsonPayload",
3016
+ "markdownPayload": "Y0dWHa_markdownPayload",
3017
+ "panelImageLinkPreview": "Y0dWHa_panelImageLinkPreview",
3018
+ "promptDiffLinemeta": "Y0dWHa_promptDiffLinemeta",
3019
+ "schemaParametersTitle": "Y0dWHa_schemaParametersTitle",
3020
+ "selectionRail": "Y0dWHa_selectionRail",
3021
+ "schemaTree": "Y0dWHa_schemaTree",
3022
+ "resultBlocks": "Y0dWHa_resultBlocks",
3023
+ "content": "Y0dWHa_content",
3024
+ "eventHeader": "Y0dWHa_eventHeader",
3025
+ "requestBoundaryControl": "Y0dWHa_requestBoundaryControl",
3026
+ "systemNeutral": "Y0dWHa_systemNeutral",
3027
+ "detailTabs": "Y0dWHa_detailTabs",
3028
+ "assistantToolCalls": "Y0dWHa_assistantToolCalls",
3029
+ "sourceBlockHeader": "Y0dWHa_sourceBlockHeader",
3030
+ "contentText": "Y0dWHa_contentText",
3062
3031
  "assistantVioletBright": "Y0dWHa_assistantVioletBright",
3063
- "requestTokenDetail": "Y0dWHa_requestTokenDetail",
3064
- "payload": "Y0dWHa_payload",
3032
+ "collapsedTurnText": "Y0dWHa_collapsedTurnText",
3033
+ "markdownPreview": "Y0dWHa_markdownPreview",
3065
3034
  "promptDiffTitle": "Y0dWHa_promptDiffTitle",
3066
- "assistantContent": "Y0dWHa_assistantContent",
3067
- "toolCallNameTypeface": "Y0dWHa_toolCallNameTypeface",
3068
- "schemaIntro": "Y0dWHa_schemaIntro",
3069
- "toolCatalog": "Y0dWHa_toolCatalog",
3070
- "subtoolAmber": "Y0dWHa_subtoolAmber",
3071
- "assistantToolCallText": "Y0dWHa_assistantToolCallText",
3072
- "close": "Y0dWHa_close",
3035
+ "schemaDescription": "Y0dWHa_schemaDescription",
3036
+ "overviewTitle": "Y0dWHa_overviewTitle",
3037
+ "thinkingChevron": "Y0dWHa_thinkingChevron",
3038
+ "toolCatalogChevron": "Y0dWHa_toolCatalogChevron",
3039
+ "toolCatalogName": "Y0dWHa_toolCatalogName",
3073
3040
  "detailBodySummary": "Y0dWHa_detailBodySummary",
3074
- "overviewSections": "Y0dWHa_overviewSections",
3075
- "overviewSection": "Y0dWHa_overviewSection",
3076
- "assistantOutput": "Y0dWHa_assistantOutput",
3077
- "sourceBlockLabel": "Y0dWHa_sourceBlockLabel",
3078
3041
  "overview": "Y0dWHa_overview",
3042
+ "kindTagLabel": "Y0dWHa_kindTagLabel",
3043
+ "message": "Y0dWHa_message",
3044
+ "promptDiffLineremoved": "Y0dWHa_promptDiffLineremoved",
3045
+ "inlineResultText": "Y0dWHa_inlineResultText",
3046
+ "assistantContentRendered": "Y0dWHa_assistantContentRendered",
3047
+ "details": "Y0dWHa_details",
3048
+ "assistantToolCallButton": "Y0dWHa_assistantToolCallButton",
3049
+ "arrow": "Y0dWHa_arrow",
3050
+ "schemaIntro": "Y0dWHa_schemaIntro",
3051
+ "compactedSummary": "Y0dWHa_compactedSummary",
3052
+ "overviewSections": "Y0dWHa_overviewSections",
3053
+ "collapsedTurnEllipsis": "Y0dWHa_collapsedTurnEllipsis",
3079
3054
  "overviewTitleIcon": "Y0dWHa_overviewTitleIcon",
3055
+ "assistantToolCallName": "Y0dWHa_assistantToolCallName",
3056
+ "toolCatalog": "Y0dWHa_toolCatalog",
3057
+ "overviewParentLinks": "Y0dWHa_overviewParentLinks",
3058
+ "event": "Y0dWHa_event",
3059
+ "assistantToolCallsPreview": "Y0dWHa_assistantToolCallsPreview",
3060
+ "sourceBlockJumpIcon": "Y0dWHa_sourceBlockJumpIcon",
3080
3061
  "assistantToolCallArgs": "Y0dWHa_assistantToolCallArgs",
3081
- "toolCatalogItem": "Y0dWHa_toolCatalogItem",
3082
- "message": "Y0dWHa_message",
3083
- "promptDiffLinecontext": "Y0dWHa_promptDiffLinecontext",
3084
- "contentText": "Y0dWHa_contentText",
3085
- "thinkingQuoteOnlyPreview": "Y0dWHa_thinkingQuoteOnlyPreview",
3086
- "assistantToolCallIcon": "Y0dWHa_assistantToolCallIcon",
3087
- "table": "Y0dWHa_table",
3088
- "toolCatalogChevron": "Y0dWHa_toolCatalogChevron",
3089
- "turnLabel": "Y0dWHa_turnLabel",
3062
+ "schemaParameters": "Y0dWHa_schemaParameters",
3063
+ "tablePane": "Y0dWHa_tablePane",
3064
+ "kindTagIcon": "Y0dWHa_kindTagIcon",
3065
+ "kindSlot": "Y0dWHa_kindSlot",
3066
+ "requestDetailsDot": "Y0dWHa_requestDetailsDot",
3067
+ "detailsResizeHandle": "Y0dWHa_detailsResizeHandle",
3068
+ "toolCallNameTypeface": "Y0dWHa_toolCallNameTypeface",
3069
+ "promptDiff": "Y0dWHa_promptDiff",
3070
+ "resultBlockText": "Y0dWHa_resultBlockText",
3071
+ "errorPayload": "Y0dWHa_errorPayload",
3072
+ "user": "Y0dWHa_user",
3073
+ "sourceBlock": "Y0dWHa_sourceBlock",
3074
+ "promptDiffSections": "Y0dWHa_promptDiffSections",
3075
+ "assistantToolCallText": "Y0dWHa_assistantToolCallText",
3090
3076
  "compacted": "Y0dWHa_compacted",
3091
- "turnLabelCompact": "Y0dWHa_turnLabelCompact",
3092
- "split": "Y0dWHa_split",
3093
- "toolCallOnly": "Y0dWHa_toolCallOnly",
3094
- "virtualSpacer": "Y0dWHa_virtualSpacer",
3095
- "compactedSummary": "Y0dWHa_compactedSummary",
3096
- "details": "Y0dWHa_details",
3097
- "overviewHeading": "Y0dWHa_overviewHeading",
3077
+ "jsonPreview": "Y0dWHa_jsonPreview",
3078
+ "detailsLocation": "Y0dWHa_detailsLocation",
3079
+ "assistantContent": "Y0dWHa_assistantContent",
3080
+ "contentColumn": "Y0dWHa_contentColumn",
3081
+ "turnLabel": "Y0dWHa_turnLabel",
3082
+ "thinkingQuote": "Y0dWHa_thinkingQuote",
3083
+ "thinkingToggle": "Y0dWHa_thinkingToggle",
3084
+ "panelImage": "Y0dWHa_panelImage",
3098
3085
  "historyLoading": "Y0dWHa_historyLoading",
3099
- "promptDiffSection": "Y0dWHa_promptDiffSection",
3100
- "noPayload": "Y0dWHa_noPayload",
3101
3086
  "resultBlocksPreview": "Y0dWHa_resultBlocksPreview",
3102
- "selectionRail": "Y0dWHa_selectionRail",
3103
- "promptDiffLineremoved": "Y0dWHa_promptDiffLineremoved",
3104
- "panelImageLink": "Y0dWHa_panelImageLink",
3105
- "systemNeutral": "Y0dWHa_systemNeutral",
3106
- "content": "Y0dWHa_content",
3107
- "sourceBlockContent": "Y0dWHa_sourceBlockContent",
3108
- "trajectory-table": "Y0dWHa_trajectory-table",
3109
- "promptDiffLinemeta": "Y0dWHa_promptDiffLinemeta",
3110
- "schemaName": "Y0dWHa_schemaName",
3087
+ "thinkingQuoteOnlyPreview": "Y0dWHa_thinkingQuoteOnlyPreview",
3088
+ "virtualSpacer": "Y0dWHa_virtualSpacer",
3089
+ "detailTab": "Y0dWHa_detailTab",
3090
+ "history-loading-spin": "Y0dWHa_history-loading-spin",
3091
+ "overviewHierarchyJumpIconTight": "Y0dWHa_overviewHierarchyJumpIconTight",
3092
+ "sourceBlockJumpTarget": "Y0dWHa_sourceBlockJumpTarget",
3093
+ "toolCallOnly": "Y0dWHa_toolCallOnly",
3111
3094
  "overviewHierarchyNavLink": "Y0dWHa_overviewHierarchyNavLink",
3112
- "toolCatalogTree": "Y0dWHa_toolCatalogTree",
3113
- "detailsTitle": "Y0dWHa_detailsTitle",
3114
- "toolCatalogDescription": "Y0dWHa_toolCatalogDescription",
3095
+ "detailBody": "Y0dWHa_detailBody",
3096
+ "noOutputText": "Y0dWHa_noOutputText",
3115
3097
  "toolCatalogSummary": "Y0dWHa_toolCatalogSummary",
3116
- "overviewPreview": "Y0dWHa_overviewPreview",
3117
- "usageGroup": "Y0dWHa_usageGroup",
3118
- "inlineResultText": "Y0dWHa_inlineResultText",
3098
+ "toolCallPayload": "Y0dWHa_toolCallPayload",
3099
+ "messageImages": "Y0dWHa_messageImages",
3100
+ "resultRequest": "Y0dWHa_resultRequest",
3101
+ "resultPreview": "Y0dWHa_resultPreview",
3102
+ "detailsHeader": "Y0dWHa_detailsHeader",
3103
+ "payload": "Y0dWHa_payload",
3104
+ "promptDiffLineadded": "Y0dWHa_promptDiffLineadded",
3105
+ "promptDiffSection": "Y0dWHa_promptDiffSection",
3119
3106
  "sourceBlocks": "Y0dWHa_sourceBlocks",
3107
+ "toolCatalogTree": "Y0dWHa_toolCatalogTree",
3108
+ "historyLoadingSpinner": "Y0dWHa_historyLoadingSpinner",
3109
+ "requestDetailsName": "Y0dWHa_requestDetailsName",
3120
3110
  "inlineResult": "Y0dWHa_inlineResult",
3121
- "sourceBlockHeader": "Y0dWHa_sourceBlockHeader",
3122
- "detailsResizeHandle": "Y0dWHa_detailsResizeHandle",
3123
- "assistantToolCalls": "Y0dWHa_assistantToolCalls",
3124
- "detailsHeader": "Y0dWHa_detailsHeader",
3125
- "historyLoadingBar": "Y0dWHa_historyLoadingBar",
3126
- "detailTab": "Y0dWHa_detailTab",
3127
- "arrow": "Y0dWHa_arrow",
3128
- "collapsedTurnText": "Y0dWHa_collapsedTurnText",
3129
- "resultPreview": "Y0dWHa_resultPreview",
3130
- "timestampToggle": "Y0dWHa_timestampToggle",
3131
- "thinkingQuote": "Y0dWHa_thinkingQuote",
3111
+ "overviewSection": "Y0dWHa_overviewSection",
3112
+ "error": "Y0dWHa_error",
3132
3113
  "usageHeading": "Y0dWHa_usageHeading",
3133
- "messageImages": "Y0dWHa_messageImages",
3134
- "collapsedTurnContent": "Y0dWHa_collapsedTurnContent",
3135
- "assistantToolCallButton": "Y0dWHa_assistantToolCallButton",
3136
- "systemPrompt": "Y0dWHa_systemPrompt",
3114
+ "kindTag": "Y0dWHa_kindTag",
3137
3115
  "eventInner": "Y0dWHa_eventInner",
3138
- "schema": "Y0dWHa_schema",
3139
- "schemaParametersTitle": "Y0dWHa_schemaParametersTitle",
3140
- "messageImagesPreview": "Y0dWHa_messageImagesPreview",
3141
- "overviewTitle": "Y0dWHa_overviewTitle",
3142
- "jsonPayload": "Y0dWHa_jsonPayload",
3143
- "thinkingToggle": "Y0dWHa_thinkingToggle",
3144
- "requestDetailsName": "Y0dWHa_requestDetailsName",
3145
- "assistantToolCallsPreview": "Y0dWHa_assistantToolCallsPreview",
3146
- "usagePanel": "Y0dWHa_usagePanel",
3147
- "user": "Y0dWHa_user",
3148
- "kindTagIcon": "Y0dWHa_kindTagIcon",
3149
- "noOutputText": "Y0dWHa_noOutputText",
3150
- "resultBlocks": "Y0dWHa_resultBlocks",
3151
- "resultRequest": "Y0dWHa_resultRequest",
3116
+ "schemaPreview": "Y0dWHa_schemaPreview",
3117
+ "toolCatalogDefinition": "Y0dWHa_toolCatalogDefinition",
3118
+ "historyLoadingBar": "Y0dWHa_historyLoadingBar",
3119
+ "table": "Y0dWHa_table",
3120
+ "overviewHeading": "Y0dWHa_overviewHeading",
3152
3121
  "payloadPreview": "Y0dWHa_payloadPreview",
3153
- "error": "Y0dWHa_error",
3154
- "kindTagLabel": "Y0dWHa_kindTagLabel",
3155
- "promptDiffSections": "Y0dWHa_promptDiffSections",
3156
- "schemaParameters": "Y0dWHa_schemaParameters",
3157
- "panelImageLinkPreview": "Y0dWHa_panelImageLinkPreview",
3158
- "toolAmber": "Y0dWHa_toolAmber",
3159
- "sourceBlockJumpIcon": "Y0dWHa_sourceBlockJumpIcon",
3160
- "jsonPreview": "Y0dWHa_jsonPreview",
3122
+ "sourceBlockLabel": "Y0dWHa_sourceBlockLabel",
3161
3123
  "requestBoundaryControlActive": "Y0dWHa_requestBoundaryControlActive",
3162
- "requestBoundaryControl": "Y0dWHa_requestBoundaryControl",
3163
- "detailTabActive": "Y0dWHa_detailTabActive",
3164
- "summaryScrollRegion": "Y0dWHa_summaryScrollRegion",
3165
- "detailsLocation": "Y0dWHa_detailsLocation",
3166
- "schemaPreview": "Y0dWHa_schemaPreview",
3167
- "contextGreen": "Y0dWHa_contextGreen",
3168
- "turnRail": "Y0dWHa_turnRail",
3169
3124
  "eventColumn": "Y0dWHa_eventColumn",
3170
- "errorPayload": "Y0dWHa_errorPayload",
3171
- "detailBody": "Y0dWHa_detailBody",
3172
- "sourceBlockJumpTarget": "Y0dWHa_sourceBlockJumpTarget",
3173
- "schemaDescription": "Y0dWHa_schemaDescription",
3174
- "event": "Y0dWHa_event",
3175
- "markdownPreview": "Y0dWHa_markdownPreview",
3176
- "thinkingChevron": "Y0dWHa_thinkingChevron",
3177
- "requestDetailsDot": "Y0dWHa_requestDetailsDot",
3178
- "markdownPayload": "Y0dWHa_markdownPayload",
3179
- "contentColumn": "Y0dWHa_contentColumn",
3180
- "overviewHierarchyJumpIconTight": "Y0dWHa_overviewHierarchyJumpIconTight",
3181
- "detailTabs": "Y0dWHa_detailTabs",
3182
- "schemaTree": "Y0dWHa_schemaTree",
3183
- "toolCatalogDefinition": "Y0dWHa_toolCatalogDefinition",
3184
- "panelImage": "Y0dWHa_panelImage",
3185
- "tablePane": "Y0dWHa_tablePane",
3186
- "resultBlockText": "Y0dWHa_resultBlockText",
3187
- "eventHeader": "Y0dWHa_eventHeader",
3188
- "kindSlot": "Y0dWHa_kindSlot",
3189
- "overviewParentLinks": "Y0dWHa_overviewParentLinks",
3190
- "toolCallPayload": "Y0dWHa_toolCallPayload",
3191
- "turnLabelFull": "Y0dWHa_turnLabelFull",
3125
+ "sourceBlockContent": "Y0dWHa_sourceBlockContent",
3126
+ "turnLabelCompact": "Y0dWHa_turnLabelCompact",
3127
+ "assistantOutput": "Y0dWHa_assistantOutput",
3128
+ "messageImagesPreview": "Y0dWHa_messageImagesPreview",
3129
+ "timestampToggle": "Y0dWHa_timestampToggle",
3130
+ "toolCatalogItem": "Y0dWHa_toolCatalogItem",
3131
+ "collapsedTurnContent": "Y0dWHa_collapsedTurnContent",
3132
+ "requestTokenDetail": "Y0dWHa_requestTokenDetail",
3133
+ "systemPrompt": "Y0dWHa_systemPrompt",
3134
+ "detailsTitle": "Y0dWHa_detailsTitle",
3135
+ "toolCatalogIcon": "Y0dWHa_toolCatalogIcon",
3136
+ "turnRail": "Y0dWHa_turnRail",
3137
+ "assistantToolCallIcon": "Y0dWHa_assistantToolCallIcon",
3138
+ "detailTabActive": "Y0dWHa_detailTabActive",
3139
+ "noPayload": "Y0dWHa_noPayload",
3140
+ "close": "Y0dWHa_close",
3141
+ "schemaName": "Y0dWHa_schemaName",
3192
3142
  "turnLabelActive": "Y0dWHa_turnLabelActive",
3193
- "promptDiff": "Y0dWHa_promptDiff",
3194
- "collapsedTurnEllipsis": "Y0dWHa_collapsedTurnEllipsis",
3195
- "promptDiffLineadded": "Y0dWHa_promptDiffLineadded",
3196
- "toolCatalogName": "Y0dWHa_toolCatalogName",
3197
- "sourceBlock": "Y0dWHa_sourceBlock",
3198
- "kindTag": "Y0dWHa_kindTag",
3199
- "historyLoadingSpinner": "Y0dWHa_historyLoadingSpinner",
3200
- "toolCatalogFullDescription": "Y0dWHa_toolCatalogFullDescription"
3143
+ "toolCatalogFullDescription": "Y0dWHa_toolCatalogFullDescription",
3144
+ "toolAmber": "Y0dWHa_toolAmber",
3145
+ "promptDiffLinecontext": "Y0dWHa_promptDiffLinecontext",
3146
+ "overviewPreview": "Y0dWHa_overviewPreview"
3201
3147
  };
3202
3148
  //#endregion
3203
3149
  //#region lib/types/client/TrajectoryTable.js
@@ -5308,7 +5254,7 @@ window.__ModuleLoader__.load({
5308
5254
  }
5309
5255
  //#endregion
5310
5256
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-trajectory/src/client/TrajectoryToolbar.module.css.mjs
5311
- const css$2 = ".fV0t5q_root{z-index:4;box-sizing:border-box;width:100%;height:var(--dsh-trajectory-toolbar-height);border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);position:sticky;top:0}.fV0t5q_inner{box-sizing:border-box;align-items:center;gap:8px;width:100%;height:100%;padding:0 6px;display:flex}.fV0t5q_actions{flex:none;align-items:center;gap:2px;display:flex}.fV0t5q_toggle{height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:var(--dsw-font-xxs-12);background:0 0;border:0;border-radius:3px;flex:none;align-items:center;gap:4px;padding:0 7px;display:inline-flex}.fV0t5q_toggle:hover,.fV0t5q_toggle[aria-pressed=true]{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.fV0t5q_toggle:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.fV0t5q_toggleIcon{stroke:currentColor;stroke-width:1.25px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:12px;height:12px}.fV0t5q_control{box-sizing:border-box;width:88px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:var(--dsw-font-xxs-12);background:0 0;border:0;border-radius:0;flex:none;justify-content:center;align-items:center;gap:4px;padding:0 5px;display:inline-flex}.fV0t5q_control[hidden]{display:none}.fV0t5q_control:hover:not(:disabled),.fV0t5q_control[aria-checked=true],.fV0t5q_control[aria-pressed=true]{color:var(--dsw-alias-label-primary)}.fV0t5q_control:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.fV0t5q_control:disabled{color:var(--dsw-alias-label-dimmed);cursor:not-allowed}.fV0t5q_controlTrack{background:var(--dsw-alias-border-l2);width:20px;height:10px;transition:background-color .12s var(--ds-ease-in-out);border-radius:5px;flex:none;display:inline-block;position:relative}.fV0t5q_controlThumb{background:var(--dsw-alias-bg-layer-1);width:6px;height:6px;transition:transform .12s var(--ds-ease-in-out);border-radius:50%;position:absolute;top:2px;left:2px}.fV0t5q_controlTrack[data-on=true]{background:var(--dsw-alias-state-business-primary)}.fV0t5q_controlTrack[data-on=true] .fV0t5q_controlThumb{transform:translate(10px)}.fV0t5q_action{height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:var(--dsw-font-xxs-12);background:0 0;border:0;border-radius:3px;flex:none;align-items:center;gap:4px;padding:0 5px;display:inline-flex}.fV0t5q_action:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.fV0t5q_action:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.fV0t5q_actionIcon{color:var(--dsw-alias-label-tertiary);font:14px/14px var(--ds-font-family-code)}.fV0t5q_export{height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:var(--dsw-font-xxs-12);background:0 0;border:0;border-radius:3px;flex:none;align-items:center;gap:4px;padding:0 7px;display:inline-flex}.fV0t5q_export:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.fV0t5q_export:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.fV0t5q_export:disabled{color:var(--dsw-alias-label-dimmed);cursor:wait}.fV0t5q_exportIcon{stroke:currentColor;stroke-width:1.25px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:12px;height:12px}.fV0t5q_search{border:1px solid var(--dsw-alias-border-l2);min-width:84px;height:22px;color:var(--dsw-alias-label-caption);background:var(--dsw-alias-bg-layer-2);border-radius:4px;flex:0 164px;align-items:center;gap:4px;margin-left:auto;padding:0 6px;display:flex}.fV0t5q_search:hover{border-color:var(--dsw-alias-label-caption)}.fV0t5q_search:focus-within{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-bg-layer-1)}.fV0t5q_searchIcon{flex:none}.fV0t5q_searchInput{width:100%;min-width:0;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);background:0 0;border:0;outline:0;padding:0}.fV0t5q_searchInput::placeholder{color:var(--dsw-alias-label-caption)}.fV0t5q_searchInput::-webkit-search-cancel-button{cursor:pointer;width:12px;height:12px}";
5257
+ const css$2 = ".fV0t5q_root{z-index:4;box-sizing:border-box;width:100%;height:var(--dsh-trajectory-toolbar-height);border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);position:sticky;top:0}.fV0t5q_inner{box-sizing:border-box;align-items:center;gap:8px;width:100%;height:100%;padding:0 6px;display:flex}.fV0t5q_actions{flex:none;align-items:center;gap:2px;display:flex}.fV0t5q_toggle{height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:var(--dsw-font-xxs-12);background:0 0;border:0;border-radius:3px;flex:none;align-items:center;gap:4px;padding:0 7px;display:inline-flex}.fV0t5q_toggle:hover,.fV0t5q_toggle[aria-pressed=true]{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.fV0t5q_toggle:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.fV0t5q_toggleIcon{stroke:currentColor;stroke-width:1.25px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:12px;height:12px}.fV0t5q_control{box-sizing:border-box;width:88px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:var(--dsw-font-xxs-12);background:0 0;border:0;border-radius:0;flex:none;justify-content:center;align-items:center;gap:4px;padding:0 5px;display:inline-flex}.fV0t5q_control[hidden]{display:none}.fV0t5q_control:hover:not(:disabled),.fV0t5q_control[aria-checked=true],.fV0t5q_control[aria-pressed=true]{color:var(--dsw-alias-label-primary)}.fV0t5q_control:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.fV0t5q_control:disabled{color:var(--dsw-alias-label-dimmed);cursor:not-allowed}.fV0t5q_controlTrack{background:var(--dsw-alias-border-l2);width:20px;height:10px;transition:background-color .12s var(--ds-ease-in-out);border-radius:5px;flex:none;display:inline-block;position:relative}.fV0t5q_controlThumb{background:var(--dsw-alias-bg-layer-1);width:6px;height:6px;transition:transform .12s var(--ds-ease-in-out);border-radius:50%;position:absolute;top:2px;left:2px}.fV0t5q_controlTrack[data-on=true]{background:var(--dsw-alias-state-business-primary)}.fV0t5q_controlTrack[data-on=true] .fV0t5q_controlThumb{transform:translate(10px)}.fV0t5q_action{height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:var(--dsw-font-xxs-12);background:0 0;border:0;border-radius:3px;flex:none;align-items:center;gap:4px;padding:0 5px;display:inline-flex}.fV0t5q_action:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.fV0t5q_action:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.fV0t5q_actionIcon{color:var(--dsw-alias-label-tertiary);font:14px/14px var(--ds-font-family-code)}.fV0t5q_search{border:1px solid var(--dsw-alias-border-l2);min-width:84px;height:22px;color:var(--dsw-alias-label-caption);background:var(--dsw-alias-bg-layer-2);border-radius:4px;flex:0 164px;align-items:center;gap:4px;margin-left:auto;padding:0 6px;display:flex}.fV0t5q_search:hover{border-color:var(--dsw-alias-label-caption)}.fV0t5q_search:focus-within{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-bg-layer-1)}.fV0t5q_searchIcon{flex:none}.fV0t5q_searchInput{width:100%;min-width:0;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);background:0 0;border:0;outline:0;padding:0}.fV0t5q_searchInput::placeholder{color:var(--dsw-alias-label-caption)}.fV0t5q_searchInput::-webkit-search-cancel-button{cursor:pointer;width:12px;height:12px}";
5312
5258
  const tagId$2 = "@deepseek-ai/dsh-client-ui-trajectory/TrajectoryToolbar.module.css";
5313
5259
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
5314
5260
  const tag = document.createElement("style");
@@ -5318,21 +5264,19 @@ window.__ModuleLoader__.load({
5318
5264
  document.head.appendChild(tag);
5319
5265
  }
5320
5266
  var TrajectoryToolbar_module_css_default = {
5321
- "controlTrack": "fV0t5q_controlTrack",
5322
- "root": "fV0t5q_root",
5323
- "inner": "fV0t5q_inner",
5324
- "search": "fV0t5q_search",
5325
- "searchIcon": "fV0t5q_searchIcon",
5326
- "exportIcon": "fV0t5q_exportIcon",
5327
5267
  "actionIcon": "fV0t5q_actionIcon",
5328
- "searchInput": "fV0t5q_searchInput",
5329
- "controlThumb": "fV0t5q_controlThumb",
5330
- "export": "fV0t5q_export",
5331
- "actions": "fV0t5q_actions",
5332
- "toggleIcon": "fV0t5q_toggleIcon",
5333
5268
  "control": "fV0t5q_control",
5269
+ "controlThumb": "fV0t5q_controlThumb",
5270
+ "searchInput": "fV0t5q_searchInput",
5271
+ "action": "fV0t5q_action",
5272
+ "root": "fV0t5q_root",
5334
5273
  "toggle": "fV0t5q_toggle",
5335
- "action": "fV0t5q_action"
5274
+ "toggleIcon": "fV0t5q_toggleIcon",
5275
+ "controlTrack": "fV0t5q_controlTrack",
5276
+ "search": "fV0t5q_search",
5277
+ "searchIcon": "fV0t5q_searchIcon",
5278
+ "inner": "fV0t5q_inner",
5279
+ "actions": "fV0t5q_actions"
5336
5280
  };
5337
5281
  //#endregion
5338
5282
  //#region lib/types/client/TrajectoryToolbar.js
@@ -5341,7 +5285,7 @@ window.__ModuleLoader__.load({
5341
5285
  * @param props - rendered counts and whole-list fold state.
5342
5286
  * @returns the toolbar element.
5343
5287
  */
5344
- function TrajectoryToolbar({ actualDuration, onActualDurationChange, actualTime, onActualTimeChange, allTurnsCollapsed, onToggleAllTurns, allAssistantsCollapsed, onToggleAllAssistants, searchQuery, onSearchQueryChange, exporting, onExport, exportError, t }) {
5288
+ function TrajectoryToolbar({ actualDuration, onActualDurationChange, actualTime, onActualTimeChange, allTurnsCollapsed, onToggleAllTurns, allAssistantsCollapsed, onToggleAllAssistants, searchQuery, onSearchQueryChange, t }) {
5345
5289
  return (0, react_jsx_runtime.jsx)("div", {
5346
5290
  className: TrajectoryToolbar_module_css_default.root,
5347
5291
  role: "toolbar",
@@ -5413,21 +5357,6 @@ window.__ModuleLoader__.load({
5413
5357
  "aria-hidden": "true",
5414
5358
  children: allAssistantsCollapsed ? "⊞" : "⊟"
5415
5359
  }), t("toolbar.calls")]
5416
- }),
5417
- (0, react_jsx_runtime.jsxs)("button", {
5418
- type: "button",
5419
- className: TrajectoryToolbar_module_css_default.export,
5420
- "aria-label": t("toolbar.exportAria"),
5421
- title: exportError ?? (exporting ? t("toolbar.exporting") : t("toolbar.exportTitle")),
5422
- disabled: exporting,
5423
- onClick: onExport,
5424
- children: [(0, react_jsx_runtime.jsxs)("svg", {
5425
- className: TrajectoryToolbar_module_css_default.exportIcon,
5426
- viewBox: "0 0 16 16",
5427
- fill: "none",
5428
- "aria-hidden": "true",
5429
- children: [(0, react_jsx_runtime.jsx)("path", { d: "M8 3v7m0 0 3-3m-3 3L5 7" }), (0, react_jsx_runtime.jsx)("path", { d: "M3 11.5V13a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-1.5" })]
5430
- }), t("toolbar.export")]
5431
5360
  })
5432
5361
  ]
5433
5362
  }), (0, react_jsx_runtime.jsxs)("div", {
@@ -5587,19 +5516,19 @@ window.__ModuleLoader__.load({
5587
5516
  document.head.appendChild(tag);
5588
5517
  }
5589
5518
  var TrajectoryTimeline_module_css_default = {
5519
+ "plot": "_1p9O6q_plot",
5590
5520
  "labels": "_1p9O6q_labels",
5591
- "track": "_1p9O6q_track",
5521
+ "root": "_1p9O6q_root",
5522
+ "selectionEdges": "_1p9O6q_selectionEdges",
5592
5523
  "span": "_1p9O6q_span",
5524
+ "selection": "_1p9O6q_selection",
5593
5525
  "lanes": "_1p9O6q_lanes",
5594
- "turnBoundaries": "_1p9O6q_turnBoundaries",
5595
5526
  "earlierHistory": "_1p9O6q_earlierHistory",
5596
- "root": "_1p9O6q_root",
5597
- "turnBoundary": "_1p9O6q_turnBoundary",
5598
- "selection": "_1p9O6q_selection",
5599
- "plot": "_1p9O6q_plot",
5600
5527
  "empty": "_1p9O6q_empty",
5601
- "selectionEdges": "_1p9O6q_selectionEdges",
5602
- "hoverLine": "_1p9O6q_hoverLine"
5528
+ "hoverLine": "_1p9O6q_hoverLine",
5529
+ "track": "_1p9O6q_track",
5530
+ "turnBoundary": "_1p9O6q_turnBoundary",
5531
+ "turnBoundaries": "_1p9O6q_turnBoundaries"
5603
5532
  };
5604
5533
  //#endregion
5605
5534
  //#region lib/types/client/TrajectoryTimeline.js
@@ -6960,7 +6889,7 @@ window.__ModuleLoader__.load({
6960
6889
  };
6961
6890
  //#endregion
6962
6891
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-trajectory/src/client/views.module.css.mjs
6963
- const css = ".qBU-ya_root{--dsh-trajectory-toolbar-height:32px;box-sizing:border-box;width:100%;height:100%;min-height:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);flex-direction:column;display:flex;overflow:hidden}.qBU-ya_exportError{box-sizing:border-box;border-bottom:1px solid var(--dsw-alias-border-l2);width:100%;color:var(--dsw-alias-label-danger,var(--dsw-alias-label-primary));background:var(--dsw-alias-bg-layer-2);font:var(--dsw-font-xxs-12);overflow-wrap:anywhere;flex:none;padding:4px 10px}.qBU-ya_ledger{z-index:0;isolation:isolate;--dsh-trajectory-bottom-clearance:calc(var(--dsh-composer-height,152px) + 16px);flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}";
6892
+ const css = ".qBU-ya_root{--dsh-trajectory-toolbar-height:32px;box-sizing:border-box;width:100%;height:100%;min-height:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);flex-direction:column;display:flex;overflow:hidden}.qBU-ya_ledger{z-index:0;isolation:isolate;--dsh-trajectory-bottom-clearance:calc(var(--dsh-composer-height,152px) + 16px);flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}";
6964
6893
  const tagId = "@deepseek-ai/dsh-client-ui-trajectory/views.module.css";
6965
6894
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
6966
6895
  const tag = document.createElement("style");
@@ -6970,9 +6899,8 @@ window.__ModuleLoader__.load({
6970
6899
  document.head.appendChild(tag);
6971
6900
  }
6972
6901
  var views_module_css_default = {
6973
- "exportError": "qBU-ya_exportError",
6974
- "root": "qBU-ya_root",
6975
- "ledger": "qBU-ya_ledger"
6902
+ "ledger": "qBU-ya_ledger",
6903
+ "root": "qBU-ya_root"
6976
6904
  };
6977
6905
  //#endregion
6978
6906
  //#region lib/types/client/TrajectoryView.js
@@ -7033,15 +6961,13 @@ window.__ModuleLoader__.load({
7033
6961
  ...total?.reasoning === void 0 && usage.reasoning === void 0 ? {} : { reasoning: (total?.reasoning ?? 0) + (usage.reasoning ?? 0) }
7034
6962
  };
7035
6963
  }
7036
- function TrajectoryView({ useSession, useDuration, loadOlder, setActualDuration, exportLog, inspect, onInspectDone, t }) {
6964
+ function TrajectoryView({ useSession, useDuration, loadOlder, setActualDuration, inspect, onInspectDone, t }) {
7037
6965
  const [collapsedTurns, setCollapsedTurns] = (0, react.useState)(EMPTY_TURN_IDS);
7038
6966
  const [collapsedAssistants, setCollapsedAssistants] = (0, react.useState)(EMPTY_RECORD_IDS);
7039
6967
  const [timelineSelection, setTimelineSelection] = (0, react.useState)(null);
7040
6968
  const actualDuration = useDuration((value) => value);
7041
6969
  const [actualTime, setActualTime] = (0, react.useState)(false);
7042
6970
  const [searchQuery, setSearchQuery] = (0, react.useState)("");
7043
- const [exporting, setExporting] = (0, react.useState)(false);
7044
- const [exportError, setExportError] = (0, react.useState)(null);
7045
6971
  const [searchIndex] = (0, react.useState)(() => new TrajectorySearchIndex());
7046
6972
  const [searchIndexRevision, setSearchIndexRevision] = (0, react.useState)(0);
7047
6973
  const searchIndexTimer = (0, react.useRef)(null);
@@ -7274,17 +7200,6 @@ window.__ModuleLoader__.load({
7274
7200
  const loadEarlierHistory = (0, react.useCallback)(() => {
7275
7201
  return loadOlder();
7276
7202
  }, [loadOlder]);
7277
- const onExport = (0, react.useCallback)(() => {
7278
- if (exporting) return;
7279
- setExporting(true);
7280
- setExportError(null);
7281
- exportLog().then(() => {
7282
- setExporting(false);
7283
- }, (error) => {
7284
- setExportError(error instanceof Error ? error.message : String(error));
7285
- setExporting(false);
7286
- });
7287
- }, [exportLog, exporting]);
7288
7203
  return (0, react_jsx_runtime.jsxs)("div", {
7289
7204
  className: views_module_css_default.root,
7290
7205
  "data-conversation-composer-overlay": "",
@@ -7306,16 +7221,8 @@ window.__ModuleLoader__.load({
7306
7221
  onToggleAllAssistants: toggleAllAssistants,
7307
7222
  searchQuery,
7308
7223
  onSearchQueryChange: setSearchQuery,
7309
- exporting,
7310
- onExport,
7311
- exportError,
7312
7224
  t
7313
7225
  }),
7314
- exportError !== null && (0, react_jsx_runtime.jsx)("div", {
7315
- className: views_module_css_default.exportError,
7316
- role: "alert",
7317
- children: exportError
7318
- }),
7319
7226
  (0, react_jsx_runtime.jsx)(TrajectoryTimeline, {
7320
7227
  turns: timelineTurns,
7321
7228
  mode: timelineMode,
@@ -7404,8 +7311,7 @@ window.__ModuleLoader__.load({
7404
7311
  },
7405
7312
  setActualDuration: (value) => {
7406
7313
  duration.set(value);
7407
- },
7408
- exportLog: () => downloadSessionLog(sessionId)
7314
+ }
7409
7315
  };
7410
7316
  }
7411
7317
  }, TrajectoryView));
@@ -22,12 +22,6 @@ export interface TrajectoryToolbarProps {
22
22
  searchQuery: string;
23
23
  /** Update the live ledger search query. */
24
24
  onSearchQueryChange: (query: string) => void;
25
- /** Whether the session-log export is in flight. */
26
- exporting: boolean;
27
- /** Trigger the session-log export download. */
28
- onExport: () => void;
29
- /** Export failure message, shown while set; null while idle or successful. */
30
- exportError: string | null;
31
25
  /** Translate a toolbar dictionary key. */
32
26
  t: TranslateNS<typeof NS>;
33
27
  }
@@ -36,5 +30,5 @@ export interface TrajectoryToolbarProps {
36
30
  * @param props - rendered counts and whole-list fold state.
37
31
  * @returns the toolbar element.
38
32
  */
39
- export declare function TrajectoryToolbar({ actualDuration, onActualDurationChange, actualTime, onActualTimeChange, allTurnsCollapsed, onToggleAllTurns, allAssistantsCollapsed, onToggleAllAssistants, searchQuery, onSearchQueryChange, exporting, onExport, exportError, t, }: TrajectoryToolbarProps): import("react").JSX.Element;
33
+ export declare function TrajectoryToolbar({ actualDuration, onActualDurationChange, actualTime, onActualTimeChange, allTurnsCollapsed, onToggleAllTurns, allAssistantsCollapsed, onToggleAllAssistants, searchQuery, onSearchQueryChange, t, }: TrajectoryToolbarProps): import("react").JSX.Element;
40
34
  //# sourceMappingURL=TrajectoryToolbar.d.ts.map
@@ -9,8 +9,6 @@ export interface TrajectoryViewInjected {
9
9
  };
10
10
  loadOlder: () => Promise<boolean>;
11
11
  setActualDuration: (actualDuration: boolean) => void;
12
- /** Download the session log (including subagent logs) as a ZIP archive; rejects on failure. */
13
- exportLog: () => Promise<void>;
14
12
  }
15
- export declare function TrajectoryView({ useSession, useDuration, loadOlder, setActualDuration, exportLog, inspect, onInspectDone, t, }: ConvViewProps & InjectFace<TrajectoryViewInjected> & PropsLocale<'trajectory'>): import("react").JSX.Element;
13
+ export declare function TrajectoryView({ useSession, useDuration, loadOlder, setActualDuration, inspect, onInspectDone, t, }: ConvViewProps & InjectFace<TrajectoryViewInjected> & PropsLocale<'trajectory'>): import("react").JSX.Element;
16
14
  //# sourceMappingURL=TrajectoryView.d.ts.map
@@ -2,7 +2,7 @@
2
2
  /** Dictionary namespace owned by this plugin. */
3
3
  export declare const NS = "trajectory";
4
4
  /** The trajectory dictionary key set (the source of truth for both locales). */
5
- export type TrajectoryKey = 'view.trajectory' | 'toolbar.aria' | 'toolbar.duration' | 'toolbar.useActualDuration' | 'toolbar.useEqualWidth' | 'toolbar.actualTime' | 'toolbar.turns' | 'toolbar.expandTurns' | 'toolbar.collapseTurns' | 'toolbar.calls' | 'toolbar.expandCalls' | 'toolbar.collapseCalls' | 'toolbar.export' | 'toolbar.exportAria' | 'toolbar.exporting' | 'toolbar.exportTitle' | 'toolbar.search' | 'toolbar.searchPlaceholder';
5
+ export type TrajectoryKey = 'view.trajectory' | 'toolbar.aria' | 'toolbar.duration' | 'toolbar.useActualDuration' | 'toolbar.useEqualWidth' | 'toolbar.actualTime' | 'toolbar.turns' | 'toolbar.expandTurns' | 'toolbar.collapseTurns' | 'toolbar.calls' | 'toolbar.expandCalls' | 'toolbar.collapseCalls' | 'toolbar.search' | 'toolbar.searchPlaceholder';
6
6
  declare module '@deepseek-ai/dsh-client-ui-slots' {
7
7
  interface LocaleNamespaceMap {
8
8
  /** The trajectory view tab label and toolbar strings. */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-trajectory",
3
3
  "description": "Trajectory event ledger with an interactive timing overview: pure-consumer plugin registering into the conversation ViewMap (no service)",
4
- "version": "0.0.1-rc.2",
4
+ "version": "0.0.1-rc.3",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
7
7
  },
@@ -47,30 +47,30 @@
47
47
  "peerDependencies": {
48
48
  "react": "^18.2.0",
49
49
  "react-dom": "^18.2.0",
50
- "@deepseek-ai/dsh-agent": "^0.0.1-rc.2",
51
- "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.2",
52
- "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.2",
53
- "@deepseek-ai/dsh-invariants": "^0.0.1-rc.2",
54
- "@deepseek-ai/dsh-client-ui-primitives": "^0.0.1-rc.2",
50
+ "@deepseek-ai/dsh-agent": "^0.0.1-rc.3",
51
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.0.1-rc.3",
52
+ "@deepseek-ai/dsh-compaction": "^0.0.1-rc.3",
55
53
  "@deepseek-ai/cordis": "^4.0.1-rc.1",
56
- "@deepseek-ai/dsh-compact": "^0.0.1-rc.2",
57
- "@deepseek-ai/dsh-tools": "^0.0.1-rc.2"
54
+ "@deepseek-ai/dsh-tools": "^0.0.1-rc.3",
55
+ "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.3",
56
+ "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.3",
57
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.3"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@types/react": "~18.3.1",
61
61
  "@types/react-dom": "~18.3.0",
62
62
  "react": "^18.2.0",
63
63
  "react-dom": "^18.2.0",
64
- "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.2",
65
- "@deepseek-ai/dsh-client-test-runtime": "^0.0.1-rc.2",
66
- "@deepseek-ai/dsh-client-ui-primitives": "^0.0.1-rc.2",
67
- "@deepseek-ai/dsh-client-ui-conversation": "^0.0.1-rc.2",
68
- "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.2",
69
- "@deepseek-ai/dsh-agent": "^0.0.1-rc.2",
70
- "@deepseek-ai/dsh-client-ui-slots": "^0.0.1-rc.2",
71
- "@deepseek-ai/dsh-compact": "^0.0.1-rc.2",
72
- "@deepseek-ai/dsh-invariants": "^0.0.1-rc.2",
73
- "@deepseek-ai/dsh-tools": "^0.0.1-rc.2",
64
+ "@deepseek-ai/dsh-agent": "^0.0.1-rc.3",
65
+ "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.3",
66
+ "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.3",
67
+ "@deepseek-ai/dsh-client-test-runtime": "^0.0.1-rc.3",
68
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.0.1-rc.3",
69
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.0.1-rc.3",
70
+ "@deepseek-ai/dsh-client-ui-slots": "^0.0.1-rc.3",
71
+ "@deepseek-ai/dsh-compaction": "^0.0.1-rc.3",
72
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.3",
73
+ "@deepseek-ai/dsh-tools": "^0.0.1-rc.3",
74
74
  "@deepseek-ai/cordis": "^4.0.1-rc.1"
75
75
  },
76
76
  "files": [
@@ -1,23 +0,0 @@
1
- /**
2
- * Session log export delivery. The host streams the archive from
3
- * `GET /api/session.export`; this module owns the browser-native download
4
- * handoff so the browser can stream the response directly to its download
5
- * manager instead of buffering the ZIP in JavaScript.
6
- * @module
7
- */
8
- /**
9
- * The export archive filename for one session (same convention the host's
10
- * Content-Disposition uses).
11
- * @param sessionId - the root session id.
12
- * @returns the download filename.
13
- */
14
- export declare function sessionLogZipFilename(sessionId: string): string;
15
- /**
16
- * Hand one host-streamed session archive to the browser download manager.
17
- * The operation resolves after dispatching the native download; HTTP delivery
18
- * continues outside JavaScript and is reported by the browser itself.
19
- * @param sessionId - the root session id to export with all descendants.
20
- * @returns a promise that rejects if the browser handoff itself fails.
21
- */
22
- export declare function downloadSessionLog(sessionId: string): Promise<void>;
23
- //# sourceMappingURL=export-log.d.ts.map