@abelxiaoxing/cadence 1.8.3 → 2.0.0

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.
Files changed (208) hide show
  1. package/README.md +324 -111
  2. package/THIRD_PARTY_NOTICES.md +15 -0
  3. package/agents/design-explorer.md +14 -26
  4. package/agents/diagnosis-worker.md +14 -25
  5. package/agents/implementation-worker.md +16 -35
  6. package/config/.env.example +2 -5
  7. package/config/workflow-task.example.json +7 -0
  8. package/docs/remote-access.md +60 -0
  9. package/docs/reuse-and-distribution.md +44 -0
  10. package/docs/service-management.md +108 -0
  11. package/licenses/bundled-web.txt +6245 -0
  12. package/licenses/pi-web-ui-MIT.txt +21 -0
  13. package/licenses/pi-web-ui-reuse.md +22 -0
  14. package/package.json +94 -21
  15. package/src/index.ts +22 -1807
  16. package/src/native-build.ts +6 -0
  17. package/src/native-client.ts +103 -0
  18. package/src/native-export.ts +58 -0
  19. package/src/native-history.ts +359 -0
  20. package/src/operator-cli.mjs +453 -1937
  21. package/src/plan-proposal.ts +87 -0
  22. package/src/sdk-worker.mjs +549 -0
  23. package/src/service/contracts/active.ts +82 -0
  24. package/src/service/contracts/budget.ts +148 -0
  25. package/src/service/contracts/build.ts +67 -0
  26. package/src/service/contracts/capture.ts +48 -0
  27. package/src/service/contracts/core.ts +33 -0
  28. package/src/service/contracts/current.ts +261 -0
  29. package/src/service/contracts/domain.ts +68 -0
  30. package/src/service/contracts/history.ts +2245 -0
  31. package/src/service/contracts/models.ts +139 -0
  32. package/src/service/coordination.ts +862 -0
  33. package/src/service/private-files.ts +204 -0
  34. package/src/service-cli.mjs +5592 -0
  35. package/src/service-client.ts +747 -0
  36. package/src/service-contract.ts +245 -0
  37. package/src/service-host.mjs +22382 -0
  38. package/src/service-http-client.ts +425 -0
  39. package/src/service-wire.ts +372 -0
  40. package/src/task-shell.ts +1045 -0
  41. package/src/task-store.ts +479 -0
  42. package/src/task-types.ts +184 -0
  43. package/src/verification-diagnostics.ts +29 -72
  44. package/src/worker-capture.mjs +1197 -0
  45. package/src/worker-public.mjs +1753 -0
  46. package/src/worker-redaction.mjs +608 -0
  47. package/src/worker-tools.mjs +202 -0
  48. package/web/dist/assets/KaTeX_AMS-Regular.ttf +0 -0
  49. package/web/dist/assets/KaTeX_AMS-Regular.woff +0 -0
  50. package/web/dist/assets/KaTeX_AMS-Regular.woff2 +0 -0
  51. package/web/dist/assets/KaTeX_Caligraphic-Bold.ttf +0 -0
  52. package/web/dist/assets/KaTeX_Caligraphic-Bold.woff +0 -0
  53. package/web/dist/assets/KaTeX_Caligraphic-Bold.woff2 +0 -0
  54. package/web/dist/assets/KaTeX_Caligraphic-Regular.ttf +0 -0
  55. package/web/dist/assets/KaTeX_Caligraphic-Regular.woff +0 -0
  56. package/web/dist/assets/KaTeX_Caligraphic-Regular.woff2 +0 -0
  57. package/web/dist/assets/KaTeX_Fraktur-Bold.ttf +0 -0
  58. package/web/dist/assets/KaTeX_Fraktur-Bold.woff +0 -0
  59. package/web/dist/assets/KaTeX_Fraktur-Bold.woff2 +0 -0
  60. package/web/dist/assets/KaTeX_Fraktur-Regular.ttf +0 -0
  61. package/web/dist/assets/KaTeX_Fraktur-Regular.woff +0 -0
  62. package/web/dist/assets/KaTeX_Fraktur-Regular.woff2 +0 -0
  63. package/web/dist/assets/KaTeX_Main-Bold.ttf +0 -0
  64. package/web/dist/assets/KaTeX_Main-Bold.woff +0 -0
  65. package/web/dist/assets/KaTeX_Main-Bold.woff2 +0 -0
  66. package/web/dist/assets/KaTeX_Main-BoldItalic.ttf +0 -0
  67. package/web/dist/assets/KaTeX_Main-BoldItalic.woff +0 -0
  68. package/web/dist/assets/KaTeX_Main-BoldItalic.woff2 +0 -0
  69. package/web/dist/assets/KaTeX_Main-Italic.ttf +0 -0
  70. package/web/dist/assets/KaTeX_Main-Italic.woff +0 -0
  71. package/web/dist/assets/KaTeX_Main-Italic.woff2 +0 -0
  72. package/web/dist/assets/KaTeX_Main-Regular.ttf +0 -0
  73. package/web/dist/assets/KaTeX_Main-Regular.woff +0 -0
  74. package/web/dist/assets/KaTeX_Main-Regular.woff2 +0 -0
  75. package/web/dist/assets/KaTeX_Math-BoldItalic.ttf +0 -0
  76. package/web/dist/assets/KaTeX_Math-BoldItalic.woff +0 -0
  77. package/web/dist/assets/KaTeX_Math-BoldItalic.woff2 +0 -0
  78. package/web/dist/assets/KaTeX_Math-Italic.ttf +0 -0
  79. package/web/dist/assets/KaTeX_Math-Italic.woff +0 -0
  80. package/web/dist/assets/KaTeX_Math-Italic.woff2 +0 -0
  81. package/web/dist/assets/KaTeX_SansSerif-Bold.ttf +0 -0
  82. package/web/dist/assets/KaTeX_SansSerif-Bold.woff +0 -0
  83. package/web/dist/assets/KaTeX_SansSerif-Bold.woff2 +0 -0
  84. package/web/dist/assets/KaTeX_SansSerif-Italic.ttf +0 -0
  85. package/web/dist/assets/KaTeX_SansSerif-Italic.woff +0 -0
  86. package/web/dist/assets/KaTeX_SansSerif-Italic.woff2 +0 -0
  87. package/web/dist/assets/KaTeX_SansSerif-Regular.ttf +0 -0
  88. package/web/dist/assets/KaTeX_SansSerif-Regular.woff +0 -0
  89. package/web/dist/assets/KaTeX_SansSerif-Regular.woff2 +0 -0
  90. package/web/dist/assets/KaTeX_Script-Regular.ttf +0 -0
  91. package/web/dist/assets/KaTeX_Script-Regular.woff +0 -0
  92. package/web/dist/assets/KaTeX_Script-Regular.woff2 +0 -0
  93. package/web/dist/assets/KaTeX_Size1-Regular.ttf +0 -0
  94. package/web/dist/assets/KaTeX_Size1-Regular.woff +0 -0
  95. package/web/dist/assets/KaTeX_Size1-Regular.woff2 +0 -0
  96. package/web/dist/assets/KaTeX_Size2-Regular.ttf +0 -0
  97. package/web/dist/assets/KaTeX_Size2-Regular.woff +0 -0
  98. package/web/dist/assets/KaTeX_Size2-Regular.woff2 +0 -0
  99. package/web/dist/assets/KaTeX_Size3-Regular.ttf +0 -0
  100. package/web/dist/assets/KaTeX_Size3-Regular.woff +0 -0
  101. package/web/dist/assets/KaTeX_Size3-Regular.woff2 +0 -0
  102. package/web/dist/assets/KaTeX_Size4-Regular.ttf +0 -0
  103. package/web/dist/assets/KaTeX_Size4-Regular.woff +0 -0
  104. package/web/dist/assets/KaTeX_Size4-Regular.woff2 +0 -0
  105. package/web/dist/assets/KaTeX_Typewriter-Regular.ttf +0 -0
  106. package/web/dist/assets/KaTeX_Typewriter-Regular.woff +0 -0
  107. package/web/dist/assets/KaTeX_Typewriter-Regular.woff2 +0 -0
  108. package/web/dist/assets/cadence.css +2 -0
  109. package/web/dist/assets/cadence.js +7 -0
  110. package/web/dist/assets/markdown.js +296 -0
  111. package/web/dist/assets/react.js +9 -0
  112. package/web/dist/assets/rolldown-runtime.js +1 -0
  113. package/web/dist/assets/timeline-client.js +41 -0
  114. package/web/dist/assets/vis-timeline.css +1274 -0
  115. package/web/dist/assets/vis-timeline.js +32 -0
  116. package/web/dist/index.html +18 -0
  117. package/web/dist/manifest.json +505 -0
  118. package/config/plan-draft.example.json +0 -125
  119. package/config/plan-draft.multiple-tasks.example.json +0 -375
  120. package/config/plan-draft.quick.example.json +0 -78
  121. package/config/routes.example.json +0 -39
  122. package/prompts/abel-design.md +0 -382
  123. package/prompts/abel-diagnose.md +0 -71
  124. package/prompts/abel-implement.md +0 -284
  125. package/prompts/abel-init.md +0 -52
  126. package/src/activation.ts +0 -44
  127. package/src/activity-contracts.ts +0 -82
  128. package/src/agent-registry.ts +0 -53
  129. package/src/apply-transaction.ts +0 -1437
  130. package/src/artifact-store.ts +0 -213
  131. package/src/build-windows-job.mjs +0 -95
  132. package/src/candidate-artifact.ts +0 -143
  133. package/src/candidate-patch.ts +0 -271
  134. package/src/candidate-workspace.ts +0 -80
  135. package/src/canonical.ts +0 -16
  136. package/src/change-contract-schema.ts +0 -191
  137. package/src/change-contract.ts +0 -324
  138. package/src/change-verification.ts +0 -1617
  139. package/src/child-budget.ts +0 -58
  140. package/src/child-model.ts +0 -142
  141. package/src/child-session.ts +0 -640
  142. package/src/contracts.ts +0 -2476
  143. package/src/control-contracts.ts +0 -382
  144. package/src/delivery-compiler.ts +0 -1805
  145. package/src/delivery-revision.ts +0 -42
  146. package/src/design-control.ts +0 -1299
  147. package/src/design-diagnostics.ts +0 -181
  148. package/src/design-journal.ts +0 -1773
  149. package/src/directory-sync.ts +0 -36
  150. package/src/durable-contracts.ts +0 -231
  151. package/src/durable-workflow.ts +0 -978
  152. package/src/evidence-draft.ts +0 -122
  153. package/src/execution-profile.ts +0 -64
  154. package/src/execution-retention.ts +0 -77
  155. package/src/file-snapshot.ts +0 -163
  156. package/src/implement-continuation.ts +0 -559
  157. package/src/implement-graph.ts +0 -690
  158. package/src/implement-plan.ts +0 -72
  159. package/src/install-config.d.mts +0 -6
  160. package/src/isolation-backend.ts +0 -353
  161. package/src/model-source.ts +0 -22
  162. package/src/openspec-cli.ts +0 -494
  163. package/src/operator-cli-entry.mjs +0 -24
  164. package/src/operator-tools.ts +0 -309
  165. package/src/package-candidate.ts +0 -227
  166. package/src/package-delivery.ts +0 -486
  167. package/src/package-state.ts +0 -320
  168. package/src/package-verification.ts +0 -635
  169. package/src/package-workflow.ts +0 -342
  170. package/src/packet-runtime.ts +0 -570
  171. package/src/parent-provider.ts +0 -375
  172. package/src/phase-execution.ts +0 -2259
  173. package/src/pi-adapter.ts +0 -19
  174. package/src/plan-draft-summary.ts +0 -527
  175. package/src/plan-draft.ts +0 -502
  176. package/src/remove-path.ts +0 -32
  177. package/src/route-policy.ts +0 -545
  178. package/src/run-state.ts +0 -420
  179. package/src/run-store.ts +0 -1179
  180. package/src/safe-path.ts +0 -77
  181. package/src/scoped-grep-worker.mjs +0 -23
  182. package/src/scoped-tools.ts +0 -775
  183. package/src/single-task-draft.ts +0 -142
  184. package/src/sqlite-schema.ts +0 -171
  185. package/src/state-root.ts +0 -215
  186. package/src/storage-schema.ts +0 -360
  187. package/src/subagent-activity.ts +0 -1417
  188. package/src/submit-tool.ts +0 -950
  189. package/src/task-ledger.ts +0 -1338
  190. package/src/transport-budget.ts +0 -52
  191. package/src/verification-capability.ts +0 -1191
  192. package/src/verification-environment-io.ts +0 -389
  193. package/src/verification-environment.ts +0 -162
  194. package/src/verification-identity.ts +0 -77
  195. package/src/verification-scan.ts +0 -64
  196. package/src/windows-job-backend.ts +0 -419
  197. package/src/windows-job.c +0 -149
  198. package/src/worker-broker.ts +0 -806
  199. package/src/workflow-engine.ts +0 -28
  200. package/src/workflow-policy.ts +0 -1679
  201. package/src/workflow-recovery-policy.ts +0 -97
  202. package/src/workflow-scheduling.ts +0 -105
  203. package/src/workflow-state-machine.ts +0 -4355
  204. package/src/workflow-status.ts +0 -576
  205. package/src/workspace-io-entry.mjs +0 -76
  206. package/src/workspace-io-worker.mjs +0 -1312
  207. package/src/workspace-io.ts +0 -89
  208. package/src/workspace-store.ts +0 -634
@@ -0,0 +1,41 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vis-timeline.js","assets/rolldown-runtime.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./cadence.js";var t={zh:{title:`已记录顺序(非时间轴测量)`,live:`已提交页面`,current:`当前`,search:`搜索分段…`,fit:`⤢ 适应`,follow:`◎ 跟随`,zoomHint:`滚轮缩放 · 拖拽平移 · 点击色块看分析`,replay:`回放`,exitReplay:`退出回放`,play:`播放`,pause:`暂停`,speed:`速度`,empty:`暂无对话`,emptyHint:`打开一个对话后,这里直接显示它的时间线与分析。`,selectHint:`点击时间轴色块或左侧分段查看分析。`,loading:`加载中…`,noMatch:`没有匹配的分段(检查搜索/筛选)。`,copy:`复制`,copied:`已复制`,lanes:{input:`输入`,model:`模型`,tools:`工具`},filters:{input:`输入`,model:`模型`,tools:`工具`},tabs:{overview:`概述`,preview:`预览`,raw:`原始内容`,source:`来源`},status:{done:`已完成`,running:`执行中`,error:`失败`},f:{source:`来源`,status:`状态`,dur:`时长`,len:`长度`,pos:`位置`,segs:`分段`,msgKey:`消息`,toolCall:`调用`,conv:`对话`,time:`时间`}},en:{title:`Recorded sequence`,live:`committed page — not wall time`,current:`active`,search:`Filter loaded events…`,fit:`⤢ Fit`,follow:`◎ Follow`,zoomHint:`wheel zoom · drag pan · click a block for analysis`,replay:`Visual replay`,exitReplay:`Exit replay`,play:`Play`,pause:`Pause`,speed:`Speed`,empty:`No recorded scope`,emptyHint:`Select recorded events. More history remains available through the page controls.`,selectHint:`Click a ruler block or a left segment for analysis.`,loading:`Loading…`,noMatch:`No matching segments (check search/filters).`,copy:`Copy`,copied:`Copied`,lanes:{input:`Input`,model:`Model`,tools:`Tools`},filters:{input:`Input`,model:`Model`,tools:`Tools`},tabs:{overview:`Overview`,preview:`Preview`,raw:`Raw`,source:`Source`},status:{done:`Done`,running:`Running`,error:`Failed`},f:{source:`Source`,status:`Status`,dur:`Duration`,len:`Length`,pos:`Position`,segs:`Segments`,msgKey:`Message`,toolCall:`Call`,conv:`Conversation`,time:`Time`}}};function n(e){return String(e??``).replace(/[&<>"']/g,e=>({"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`})[e])}function r(e){return`page event ${Math.floor(e/1e3)+1}`}function i(e){if(e==null)return`—`;let t=Math.max(0,e)/1e3;return t<1?`${Math.round(e)}ms`:t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m${Math.round(t%60)}s`}function a(e,t){return e.kind===`user`?t===`zh`?`用户`:`user`:e.kind===`thinking`?t===`zh`?`思考`:`think`:e.kind===`text`?t===`zh`?`回答`:`text`:e.kind===`file`?t===`zh`?`文件`:`file`:e.kind===`system`?t===`zh`?`系统`:`sys`:e.kind===`result`?t===`zh`?`结果`:`done`:e.kind===`tool`?(e.meta?.tool??`tool`).slice(0,10):e.kind}var o=[`#3b82f6`,`#22c55e`,`#ec4899`,`#06b6d4`,`#f97316`,`#84cc16`,`#818cf8`,`#fb7185`,`#eab308`,`#14b8a6`],s={read:`#2dd4bf`,get:`#2dd4bf`,list:`#2dd4bf`,glob:`#2dd4bf`,grep:`#2dd4bf`,search:`#2dd4bf`,fetch:`#2dd4bf`,cat:`#2dd4bf`,show:`#2dd4bf`,query:`#2dd4bf`,edit:`#f59e0b`,write:`#f59e0b`,patch:`#f59e0b`,apply:`#f59e0b`,create:`#f59e0b`,save:`#f59e0b`,move:`#f59e0b`,rename:`#f59e0b`,bash:`#a78bfa`};function c(e){let t=String(e??`tool`);if(s[t])return s[t];let n=0;for(let e=0;e<t.length;e++)n=(n<<5)-n+t.charCodeAt(e)|0;return o[Math.abs(n)%o.length]}var l={thinking:`#38bdf8`,text:`#3b82f6`};function u(e){return e.status===`error`?`#f87171`:e.lane===`tools`?c(e.meta?.tool??(e.kind===`file`?`file`:`tool`)):e.lane===`model`&&(e.kind===`thinking`||e.kind===`text`)?l[e.kind]:null}var d={mount(o,s){let d=`en`,f=!1,p=()=>t[d],m=[],h=null,ee=null,g=null,_=new Map,v=new Map,y=new Set,b=null,x=null,S=`overview`,te=``,C={input:!0,model:!0,tools:!0},w={on:!1,idx:0,playing:!1,speed:1,raf:0,basePos:0,baseClock:0},T=0,E=null,D=null,O=null,k=null,ne=null,A=null,re=!1,ie=0,ae=0,j=!0,oe=!1,M=null,N=0;function se(){D||(D=(async()=>{try{let t=await e(()=>import(`./vis-timeline.js`).then(e=>e.t),__vite__mapDeps([0,1]));return{Timeline:t.Timeline,DataSet:t.DataSet}}catch{return re=!0,null}})(),D.then(e=>{f||(E=e,Y(!1))}))}function P(){return ne||=document.createElement(`div`),ne}function F(){K();try{O?.destroy()}catch{}O=null,k=null,A=null}o.innerHTML=`
3
+ <div class="rtr">
4
+
5
+ <div class="rtr-hd">
6
+ <h2>🧭 <span class="t-title"></span></h2>
7
+ <span class="rtr-live"></span>
8
+ <span class="sp"></span>
9
+ <input type="search" class="q" />
10
+ <button class="rtr-btn act-replay"></button>
11
+ <button class="rtr-btn act-lang">EN</button>
12
+ <button class="rtr-btn act-search-all">Search retained history</button>
13
+ <button class="rtr-btn on" data-lane="input" aria-pressed="true">Owner/context</button>
14
+ <button class="rtr-btn on" data-lane="model" aria-pressed="true">Messages</button>
15
+ <button class="rtr-btn on" data-lane="tools" aria-pressed="true">Tools</button>
16
+ </div>
17
+ <div class="rtr-convs"></div>
18
+ <div class="rtr-ruler"><div class="rtr-rulerbar"><span class="hint"></span><span class="sp"></span><button class="rtr-btn act-follow"></button><button class="rtr-btn act-fit"></button></div><div class="rtr-legend"></div><div class="rtr-tlbody"></div></div>
19
+ <div class="rtr-replaybar" hidden></div>
20
+ <div class="rtr-bd">
21
+ <div class="rtr-list"></div>
22
+ <div class="rtr-detail"></div>
23
+ </div>
24
+ </div>`;let I=e=>o.querySelector(e),ce=I(`.t-title`),le=I(`.rtr-live`),L=I(`.q`),R=I(`.act-replay`),ue=I(`.act-lang`),de=I(`.act-search-all`),z=I(`.rtr-convs`),B=I(`.rtr-ruler`),V=I(`.rtr-replaybar`),H=I(`.rtr-list`),fe=I(`.rtr-detail`);function U(){let e=p();ce.textContent=e.title,le.textContent=`● ${e.live}`,L.placeholder=e.search,L.setAttribute(`aria-label`,e.search),R.textContent=w.on?`⏹ ${e.exitReplay}`:`▶ ${e.replay}`,R.classList.toggle(`on`,w.on),ue.textContent=d===`zh`?`EN`:`中文`}function pe(e){return m.find(t=>t.id===e)}function W(){return _.get(g??``)??[]}function G(){let e=te.trim().toLowerCase();return W().filter(t=>!(!C[t.lane]||e&&!`${t.title}\n${t.summary}\n${t.source}\n${t.meta?.tool??``}`.toLowerCase().includes(e)))}function me(){let e=p();m.length?z.innerHTML=m.map(t=>`<button class="rtr-conv${t.id===g?` sel`:``}" data-id="${n(t.id)}">${t.id===h?`<span class="cur">●</span> `:``}${n(t.title||e.empty)}${t.isStreaming?` ⏳`:``}</button>`).join(``):z.innerHTML=`<span style="opacity:.55;font-size:12px">${n(e.emptyHint)}</span>`}function he(){let e=p(),t=B.querySelector(`.hint`),r=B.querySelector(`.act-fit`),i=B.querySelector(`.act-follow`);t&&(t.textContent=re?`Local timeline vendor unavailable — degraded ordinal preview only. Retained list/details remain available.`:E?e.zoomHint:`Loading local timeline vendor…`),r&&(r.textContent=e.fit),i&&(i.textContent=e.follow,i.classList.toggle(`on`,j));let a=B.querySelector(`.rtr-tlbody`),o=G();se();let s=!!a&&a.clientWidth>0&&a.clientHeight>0;if(!E||!g||!o.length||!s){O&&F(),a&&Ce(a,o);return}a&&a.firstChild!==P()&&(a.innerHTML=``,a.appendChild(P()));let c=[...new Map(o.map(e=>[e.group,{id:e.group,content:n(e.groupLabel)}])).values()];if(!O||A!==g){F(),k=new E.DataSet(Se(o)),O=new E.Timeline(P(),k,c,{stack:!0,orientation:`top`,showMajorLabels:!1,showCurrentTime:!1,showMinorLabels:!1,zoomable:!0,moveable:!0,selectable:!0,multiselect:!1,zoomMin:10,zoomMax:2592e6,margin:{item:3,axis:6},tooltip:{followMouse:!0,overflowMethod:`cap`},height:matchMedia(`(max-width: 640px)`).matches?`200px`:`252px`}),O.on(`select`,e=>{if(oe)return;let t=e.items?.[0];t===void 0?b&&(b=null,Y(!1)):X(String(t),{scroll:!0})}),O.on(`rangechange`,e=>{xe(),e?.byUser&&(j=!1,B.querySelector(`.act-follow`)?.classList.remove(`on`))}),O.on(`rangechanged`,()=>{K(),xe(),w.on&&Pe(!1)}),O.on(`itemover`,e=>{e.item!==void 0&&e.event&&ge(String(e.item),e.event)}),O.on(`itemout`,()=>K()),A=g,j=!0;try{O.fit({animation:!1})}catch{}xe(),ie=requestAnimationFrame(()=>{try{!f&&O&&A===g&&O.redraw()}catch{}})}else{try{O.setGroups(c),k.clear(),k.add(Se(o))}catch{}if(j&&!w.on){let e=o.at(-1);e&&O.moveTo(e.t,{animation:!1})}}try{oe=!0,O.setSelection(b?[b]:[])}catch{}finally{oe=!1}}function ge(e,t){let a=W().find(t=>t.key===e);if(!a)return;let s=o.querySelector(`.rtr-tip`);s||(s=document.createElement(`div`),s.className=`rtr-tip`,o.appendChild(s)),s.innerHTML=`<div class="tt">${n(a.title)}</div><div class="tm">${n(a.source??``)}</div><div class="tm">${n(r(a.t))}${a.dur===void 0?``:` · ${n(i(a.dur))}`}${a.end>a.t?` → ${n(r(a.end))}`:``}</div>`,s.style.display=`block`;let c=o.getBoundingClientRect(),l=Math.min(Math.max(8,(t.clientX??0)-c.left+14),Math.max(8,c.width-330)),u=Math.min(Math.max(8,(t.clientY??0)-c.top+16),Math.max(8,c.height-90));s.style.left=`${l}px`,s.style.top=`${u}px`}function K(){o.querySelector(`.rtr-tip`)?.remove()}function _e(e){if(!e.length)return 1;let t=1/0,n=-1/0;for(let r of e){r.t<t&&(t=r.t);let e=Math.max(r.end??r.t,r.t);e>n&&(n=e)}return Math.max(1,n-t)}function ve(){try{let e=P().clientWidth||800,t=P().querySelector(`.vis-labelset`);return Math.max(50,e-(t?t.getBoundingClientRect().width:0))}catch{return 800}}function ye(){try{if(!O)return 0;let e=O.getWindow?.();if(!e)return 0;let t=e.start instanceof Date?e.start.getTime():Number(e.start),n=e.end instanceof Date?e.end.getTime():Number(e.end);return Math.max(1,(n||0)-(t||0))*2/ve()}catch{return 0}}function be(){try{if(!k||!O)return;let e=ye(),t=Math.max(.5,e/8),n=[];for(let r of G()){let i=r.t,a=Math.max(r.end??i,i),o=Math.max(a,i+e),s=k.get(r.key)?.end,c=s instanceof Date?s.getTime():Number(s??a);Math.abs(c-o)>t&&n.push({id:r.key,end:new Date(o)})}n.length&&k.update(n)}catch{}}let q=0;function xe(){q||=requestAnimationFrame(()=>{q=0,be()})}function Se(e){let t=ye()||Math.max(1,_e(e)*1e-4);return e.map(e=>{let n=e.t,r=Math.max(e.end??n,n),i=Math.max(r,n+t),a=e.status===`error`,o=`lane-${e.lane}${a?` st-error`:``}${e.status===`running`?` st-running`:``}`,s=u(e),c=s?`background-color:${s};border-color:${s};`:void 0;return{id:e.key,group:e.group,start:new Date(n),end:new Date(i),type:`range`,content:``,className:o,...c?{style:c}:{}}})}function Ce(e,t){let i=p();if(O&&F(),!g||!t.length){e.innerHTML=[`input`,`model`,`tools`].map(e=>`<div class="rtr-lane"><span class="ln">${n(i.lanes[e])}</span><div class="rtr-track"></div></div>`).join(``),e._vis=null;return}let a=Math.min(...t.map(e=>e.t)),o=Math.max(...t.map(e=>Math.max(e.end??e.t,e.t))),s=Math.max(1,o-a),c=re?`Degraded: local vendor unavailable; ordinal preview only`:`Ordinal preview — not wall/native time`,l=e.clientWidth,d=l>0?2/l*s:0;e.innerHTML=`
25
+ <div class="rtr-axis"><span>${n(r(a))}</span><span>${n(c)}</span><span>${n(r(o))}</span></div>
26
+ ${[`input`,`model`,`tools`].map(e=>{let r=t.map((e,t)=>({s:e,i:t})).filter(({s:t})=>t.lane===e);return`<div class="rtr-lane"><span class="ln">${n(i.lanes[e])}</span><div class="rtr-track">${r.map(({s:t,i:r})=>{let i=(t.t-a)/s*100,o=Math.max(t.end??t.t,t.t),c=(Math.max(o,t.t+d)-t.t)/s*100,l=u(t);return`<span class="rtr-blk lane-${e}${t.status===`error`?` st-error`:``}${t.status===`running`?` st-running`:``}${t.key===b?` sel`:``}" data-i="${r}" title="${n(t.title)}" style="left:${i.toFixed(2)}%;width:${c.toFixed(2)}%${l?`;background-color:${l};border-color:${l}`:``}"></span>`}).join(``)}</div></div>`}).join(``)}`,e._vis=t}function we(){let e=p(),t=G();if(!g){H.innerHTML=`<div class="rtr-empty">${n(e.selectHint)}</div>`;return}if(!t.length){H.innerHTML=`<div class="rtr-empty">${n(W().length?e.noMatch:e.emptyHint)}</div>`;return}let o=w.on?t.slice(0,w.idx+1):t;H.innerHTML=o.map(e=>{let t=e.status===`error`?null:e.kind===`tool`?c(e.meta?.tool??`tool`):e.kind===`thinking`||e.kind===`text`?l[e.kind]:null;return`<button class="rtr-row${e.key===b?` sel`:``}${e.status===`error`?` err`:``}" data-key="${n(e.key)}">
27
+ <span class="rtr-chip"${t?` style="border-color:${t};color:${t}"`:``}>${n(a(e,d))}</span>
28
+ <span class="tt">${n(e.title)}</span>
29
+ <time>${n(r(e.t))}${e.dur===void 0?``:` · ${n(i(e.dur))}`}</time>
30
+ </button>`}).join(``),Ee(t)}function Te(){let e=B.querySelector(`.rtr-legend`);if(!e)return;let t=G(),r=new Map;t.some(e=>e.kind===`thinking`)&&r.set(d===`zh`?`思考`:`think`,l.thinking),t.some(e=>e.kind===`text`)&&r.set(d===`zh`?`回答`:`text`,l.text);for(let e of t){if(e.lane!==`tools`||e.status===`error`)continue;let t=e.meta?.tool??(e.kind===`file`?`file`:null);t&&!r.has(t)&&r.set(t,c(t))}e.innerHTML=[...r.entries()].map(([e,t])=>`<span class="lg-item"><i style="background:${t}"></i>${n(e)}</span>`).join(``),e.style.display=r.size?``:`none`}function Ee(e){let t=p();if(!w.on||!e.length){V.hidden=!0,V.innerHTML=``;return}V.hidden=!1;let r=Math.max(0,e.length-1),i=Math.min(w.idx,r);V.innerHTML=`
31
+ <button class="rtr-btn act-play">${w.playing?`⏸ ${n(t.pause)}`:`▶ ${n(t.play)}`}</button>
32
+ <input type="range" aria-label="Visual replay position" min="0" max="${r}" value="${i}" />
33
+ <span>${i+1}/${e.length}</span>
34
+ <label>${n(t.speed)} <select class="spd">${[.5,1,2,4].map(e=>`<option value="${e}"${e===w.speed?` selected`:``}>${e}x</option>`).join(``)}</select></label>`}function J(e,t){return`<dt>${n(e)}</dt><dd>${t}</dd>`}function De(){let e=p(),t=e.f,a=pe(g??``),o=W().find(e=>e.key===b)??null,s=o?v.get(`${g}\n${o.key}`):null;if(!o||!a){fe.innerHTML=`<div class="rtr-empty">${n(a?e.selectHint:e.emptyHint)}</div>`;return}let c=[`overview`,`preview`,`raw`,`source`].map(t=>`<button class="rtr-dtab${S===t?` on`:``}" data-tab="${t}">${n(e.tabs[t])}</button>`).join(``),l=``;if(!s)l=`<div class="rtr-empty"><span class="rtr-spin">⏳</span> ${n(e.loading)}</div>`;else if(S===`overview`){let r=s.analysis??{},a=e.status[o.status]??o.status;l=`<dl class="rtr-kv">
35
+ ${J(`Recorded clock`,n(o.clock))}${J(t.source,n(o.source??`—`))}${J(t.status,n(a))}${J(`Native check elapsed (otherwise unavailable)`,n(i(o.dur)))}
36
+ ${J(t.len,n(o.meta?.chars?`${o.meta.chars} 字`:`${(s.detail??``).length} 字`))}${J(t.pos,n(r.position??`—`))}
37
+ </dl>`,l+=`<div class="rtr-sec">${n(e.tabs.preview)}</div><pre>${n((s.detail??``).slice(0,800))}</pre>`}else l=S===`preview`?`<pre>${n((s.detail??``).slice(0,2e3))}</pre>`:S===`raw`?`<pre>${n(s.detail??``)}</pre><p>Recorded event metadata; long fields are independently paged.</p><button class="rtr-btn act-open-detail">Inspect retained fields</button><button class="rtr-btn act-copy">📋 ${n(e.copy)}</button>`:`<dl class="rtr-kv">
38
+ ${J(t.msgKey,n(o.key))}${o.meta?.toolCallId?J(t.toolCall,n(o.meta.toolCallId)):``}
39
+
40
+ ${J(t.conv,n(`${a.title??``} · ${String(a.id).slice(0,8)}`))}${J(t.time,n(r(o.t)))}
41
+ </dl>`;fe.innerHTML=`<h3 style="margin:0 0 8px">${n(o.title)}</h3><div class="rtr-dtabs">${c}</div>${l}`}function Y(e=!0){f||T||(T=requestAnimationFrame(()=>{T=0;let t=e&&!w.on&&H.scrollHeight-H.scrollTop-H.clientHeight<80,n=document.activeElement,r=n&&o.contains(n)?n.matches(`.rtr-row[data-key]`)?`.rtr-row[data-key="${CSS.escape(n.dataset.key)}"]`:n.matches(`.rtr-conv[data-id]`)?`.rtr-conv[data-id="${CSS.escape(n.dataset.id)}"]`:n.matches(`.rtr-dtab[data-tab]`)?`.rtr-dtab[data-tab="${CSS.escape(n.dataset.tab)}"]`:n.matches(`.rtr-replaybar input[type=range]`)?`.rtr-replaybar input[type=range]`:n.matches(`.spd`)?`.spd`:n.matches(`.act-play`)?`.act-play`:null:null;if(me(),he(),Te(),we(),x){let e=x;x=null;let t=typeof CSS<`u`&&CSS.escape?CSS.escape(e):e,n=H.querySelector(`[data-key="${t}"]`);n&&n.scrollIntoView({block:`nearest`})}De(),r&&!n.isConnected&&o.querySelector(r)?.focus({preventScroll:!0}),t&&(H.scrollTop=H.scrollHeight)}))}function Oe(e){g=e,b=null,w.on=!1,$(),j=!0,U(),e&&!_.has(e)&&s.readSegments(e),Y(!1)}function X(e,t={}){if(K(),e===b&&!t.force){b=null,Y(!1);return}if(b=e,w.on){let t=G().findIndex(t=>t.key===e);t>=0&&(w.idx=t)}let n=`${g}\n${e}`;e&&!v.has(n)&&!y.has(n)&&(y.add(n),s.readSegment(g,e)),t.scroll&&(x=e),Y()}function Z(){let e=G();return{segs:e.map((e,t)=>({seg:e,p0:t*1e3,p1:(t+1)*1e3})),totalLen:e.length*1e3}}function ke(e,t){let n=-1;for(let r=0;r<e.segs.length&&e.segs[r].p0<=t;r++)n=r;return n}function Ae(e,t,n){return e.segs[Math.max(0,n)]?.seg.t??0}function je(e){return w.playing?Math.min(e.totalLen,w.basePos+(performance.now()-w.baseClock)*w.speed):w.basePos}function Q(e){try{if(!O)return;let t=P().querySelector(`.rtr-playhead`);t||(P().style.position=`relative`,t=document.createElement(`div`),t.className=`rtr-playhead`,P().appendChild(t));let n=O.getWindow?.();if(!n)return;let r=n.start instanceof Date?n.start.getTime():Number(n.start),i=n.end instanceof Date?n.end.getTime():Number(n.end),a=Math.max(1,(i||0)-(r||0)),o=ve(),s=(P().clientWidth||o)-o;t.style.left=`${s+(e-r)/a*o}px`,t.style.display=`block`}catch{}}function Me(){let e=P().querySelector(`.rtr-playhead`);e&&(e.style.display=`none`)}function Ne(e){try{if(!O)return;let t=O.getWindow?.();if(!t)return;let n=t.start instanceof Date?t.start.getTime():Number(t.start),r=t.end instanceof Date?t.end.getTime():Number(t.end),i=(r-n)*.08;(e<n+i||e>r-i)&&O.moveTo(e,{animation:!1})}catch{}}function Pe(e){let t=Z();if(!t.segs.length){Me();return}let n=je(t),r=Ae(t,n,ke(t,n));Q(r),e&&Ne(r)}function $(){if(w.playing){let e=Z();e.segs.length&&(w.basePos=je(e))}w.playing=!1,w.raf&&cancelAnimationFrame(w.raf),w.raf=0}function Fe(){$();let e=Z();e.segs.length&&(w.basePos=Math.max(0,Math.min(e.totalLen,w.basePos)),w.baseClock=performance.now(),w.playing=!0,w.raf=requestAnimationFrame(Ie))}function Ie(){if(!w.playing)return;let e=Z();if(!e.segs.length){$();return}let t=je(e),n=ke(e,t);if(n>=0){w.idx=n;let t=e.segs[n].seg.key;t!==b&&(b=t,x=t,Y());let r=Math.min(e.segs.length,n+12);for(let t=n;t<r;t++){let n=e.segs[t].seg.key,r=`${g}\n${n}`;n&&!v.has(r)&&!y.has(r)&&(y.add(r),s.readSegment(g,n))}}let r=Ae(e,t,n);Q(r),Ne(r),t>=e.totalLen?($(),Y()):w.raf=requestAnimationFrame(Ie)}z.addEventListener(`click`,e=>{let t=e.target.closest(`[data-id]`);t&&Oe(t.dataset.id)}),B.addEventListener(`click`,e=>{if(e.target.closest(`.act-follow`)){if(j=!j,j){let e=G().at(-1);e&&O?.moveTo(e.t,{animation:!1})}e.target.closest(`.act-follow`).classList.toggle(`on`,j);return}if(e.target.closest(`.act-fit`)){try{O?.fit({animation:!0}),j=!1,B.querySelector(`.act-follow`)?.classList.remove(`on`)}catch{}return}if(O)return;let t=B.querySelector(`.rtr-tlbody`),n=e.target.closest(`[data-i]`);if(n&&t?._vis){let e=t._vis[Number(n.dataset.i)];e&&X(e.key,{scroll:!0})}}),H.addEventListener(`click`,e=>{let t=e.target.closest(`[data-key]`);t&&X(t.dataset.key,{scroll:!0})}),fe.addEventListener(`click`,e=>{let t=e.target.closest(`[data-tab]`);if(t)S=t.dataset.tab,Y();else if(e.target.closest(`.act-open-detail`))s.openDetail(g,b);else if(e.target.closest(`.act-copy`)){let t=v.get(`${g}\n${b}`),n=t?`${t.seg.title}\n${t.detail}`:``;n&&navigator.clipboard?.writeText(n).then(()=>{f||(e.target.textContent=`✅ ${p().copied}`,ae=setTimeout(Y,1200))},()=>{})}}),L.addEventListener(`input`,()=>{te=L.value,Y()}),R.addEventListener(`click`,()=>{if(g){if(w.on=!w.on,$(),w.on){w.idx=0,w.basePos=0,b=null;let e=Z().segs[0];e&&(b=e.seg.key,Q(e.seg.t),X(e.seg.key,{force:!0}))}else Me(),j=!0;U(),Y(!1)}}),V.addEventListener(`click`,e=>{e.target.closest(`.act-play`)&&(w.playing?$():Fe(),Y())}),V.addEventListener(`input`,e=>{if(e.target.matches(`input[type="range"]`)){$();let t=Z(),n=Number(e.target.value);w.idx=n;let r=t.segs[n];w.basePos=r?r.p0:0,b=r?r.seg.key:null,r&&Q(r.seg.t),Y()}}),V.addEventListener(`change`,e=>{e.target.matches(`.spd`)&&(w.speed=Number(e.target.value),w.playing&&Fe())}),ue.addEventListener(`click`,()=>{d=d===`zh`?`en`:`zh`,U(),Y()}),de.addEventListener(`click`,()=>s.searchHistory());for(let e of o.querySelectorAll(`[data-lane]`))e.addEventListener(`click`,()=>{let t=e.dataset.lane;C[t]=!C[t],e.classList.toggle(`on`,C[t]),e.setAttribute(`aria-pressed`,String(C[t])),Y(!1)});let Le=s.onData(e=>{if(!f&&e&&typeof e==`object`)switch(e.kind){case`state`:{m=e.conversations;let t=ee;if(h=e.activeId??null,ee=h,h&&h!==g&&(h!==t||!m.some(e=>e.id===g))){Oe(h);return}Y();break}case`segs`:if(!e.convId||!Array.isArray(e.segs))break;if(e.reset||!_.has(e.convId)?_.set(e.convId,[...e.segs]):_.get(e.convId).push(...e.segs),e.convId===g&&!b&&e.segs.length&&!w.on){b=e.segs[e.segs.length-1].key,X(b,{force:!0});return}Y();break;case`seg_detail`:if(e.key){let t=`${e.convId}\n${e.key}`;y.delete(t),v.set(t,{detail:String(e.detail??``),seg:e.seg,analysis:e.analysis}),e.convId===g&&e.key===b&&Y(!1)}}});try{let e=B.querySelector(`.rtr-tlbody`);e&&typeof ResizeObserver<`u`&&(M=new ResizeObserver(()=>{N||=setTimeout(()=>{N=0,Y(!1)},150)}),M.observe(e))}catch{}return U(),Y(!1),s.readState(),()=>{f=!0,$(),ie&&cancelAnimationFrame(ie),ae&&clearTimeout(ae),T&&cancelAnimationFrame(T),q&&cancelAnimationFrame(q),N&&clearTimeout(N);try{M?.disconnect()}catch{}M=null,F(),Le(),o.innerHTML=``}}};export{d as default};