@abelxiaoxing/cadence 1.8.4 → 2.0.1
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.md +324 -117
- package/THIRD_PARTY_NOTICES.md +15 -0
- package/agents/design-explorer.md +14 -18
- package/agents/diagnosis-worker.md +14 -14
- package/agents/implementation-worker.md +16 -17
- package/config/workflow-task.example.json +7 -0
- package/docs/remote-access.md +60 -0
- package/docs/reuse-and-distribution.md +44 -0
- package/docs/service-management.md +108 -0
- package/licenses/bundled-web.txt +6245 -0
- package/licenses/pi-web-ui-MIT.txt +21 -0
- package/licenses/pi-web-ui-reuse.md +22 -0
- package/package.json +92 -20
- package/src/index.ts +21 -1802
- package/src/native-build.ts +6 -0
- package/src/native-client.ts +103 -0
- package/src/native-export.ts +58 -0
- package/src/native-history.ts +359 -0
- package/src/operator-cli.mjs +453 -1937
- package/src/plan-proposal.ts +87 -0
- package/src/sdk-worker.mjs +549 -0
- package/src/service/contracts/active.ts +82 -0
- package/src/service/contracts/budget.ts +148 -0
- package/src/service/contracts/build.ts +67 -0
- package/src/service/contracts/capture.ts +48 -0
- package/src/service/contracts/core.ts +33 -0
- package/src/service/contracts/current.ts +261 -0
- package/src/service/contracts/domain.ts +68 -0
- package/src/service/contracts/history.ts +2245 -0
- package/src/service/contracts/models.ts +139 -0
- package/src/service/coordination.ts +862 -0
- package/src/service/private-files.ts +204 -0
- package/src/service-cli.mjs +5592 -0
- package/src/service-client.ts +747 -0
- package/src/service-contract.ts +245 -0
- package/src/service-host.mjs +22382 -0
- package/src/service-http-client.ts +425 -0
- package/src/service-wire.ts +372 -0
- package/src/task-shell.ts +1045 -0
- package/src/task-store.ts +479 -0
- package/src/task-types.ts +184 -0
- package/src/verification-diagnostics.ts +29 -72
- package/src/worker-capture.mjs +1197 -0
- package/src/worker-public.mjs +1753 -0
- package/src/worker-redaction.mjs +608 -0
- package/src/worker-tools.mjs +202 -0
- package/web/dist/assets/KaTeX_AMS-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_AMS-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_AMS-Regular.woff2 +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold.woff +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold.woff +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Bold.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-Bold.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Bold.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic.woff +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Italic.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-Italic.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Italic.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Regular.woff2 +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic.woff +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/web/dist/assets/KaTeX_Math-Italic.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-Italic.woff +0 -0
- package/web/dist/assets/KaTeX_Math-Italic.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/web/dist/assets/KaTeX_Script-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_Script-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_Script-Regular.woff2 +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular.woff2 +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular.woff2 +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular.woff2 +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular.woff2 +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular.ttf +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular.woff +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/web/dist/assets/cadence.css +2 -0
- package/web/dist/assets/cadence.js +7 -0
- package/web/dist/assets/markdown.js +296 -0
- package/web/dist/assets/react.js +9 -0
- package/web/dist/assets/rolldown-runtime.js +1 -0
- package/web/dist/assets/timeline-client.js +41 -0
- package/web/dist/assets/vis-timeline.css +1274 -0
- package/web/dist/assets/vis-timeline.js +32 -0
- package/web/dist/index.html +18 -0
- package/web/dist/manifest.json +505 -0
- package/config/plan-draft.example.json +0 -125
- package/config/plan-draft.multiple-tasks.example.json +0 -375
- package/config/plan-draft.quick.example.json +0 -78
- package/prompts/abel-design.md +0 -382
- package/prompts/abel-diagnose.md +0 -71
- package/prompts/abel-implement.md +0 -284
- package/prompts/abel-init.md +0 -52
- package/src/activation.ts +0 -44
- package/src/activity-contracts.ts +0 -82
- package/src/agent-registry.ts +0 -53
- package/src/apply-transaction.ts +0 -1437
- package/src/artifact-store.ts +0 -213
- package/src/build-windows-job.mjs +0 -95
- package/src/candidate-artifact.ts +0 -143
- package/src/candidate-context.ts +0 -289
- package/src/candidate-patch.ts +0 -271
- package/src/candidate-workspace.ts +0 -80
- package/src/canonical.ts +0 -16
- package/src/change-contract-schema.ts +0 -191
- package/src/change-contract.ts +0 -324
- package/src/change-verification.ts +0 -1617
- package/src/contracts.ts +0 -2466
- package/src/control-contracts.ts +0 -382
- package/src/delivery-compiler.ts +0 -1805
- package/src/delivery-revision.ts +0 -42
- package/src/design-control.ts +0 -1299
- package/src/design-diagnostics.ts +0 -181
- package/src/design-journal.ts +0 -1773
- package/src/directory-sync.ts +0 -36
- package/src/durable-contracts.ts +0 -227
- package/src/durable-workflow.ts +0 -822
- package/src/evidence-draft.ts +0 -122
- package/src/execution-profile.ts +0 -64
- package/src/execution-retention.ts +0 -77
- package/src/file-snapshot.ts +0 -163
- package/src/implement-continuation.ts +0 -559
- package/src/implement-graph.ts +0 -690
- package/src/implement-plan.ts +0 -72
- package/src/install-config.d.mts +0 -6
- package/src/isolation-backend.ts +0 -353
- package/src/model-source.ts +0 -22
- package/src/openspec-cli.ts +0 -494
- package/src/operator-cli-entry.mjs +0 -24
- package/src/operator-tools.ts +0 -309
- package/src/package-candidate-process.ts +0 -206
- package/src/package-candidate.ts +0 -24
- package/src/package-delivery.ts +0 -486
- package/src/package-state.ts +0 -320
- package/src/package-verification.ts +0 -635
- package/src/package-workflow.ts +0 -305
- package/src/packet-runtime.ts +0 -459
- package/src/phase-execution.ts +0 -2163
- package/src/pi-adapter.ts +0 -19
- package/src/plan-draft-summary.ts +0 -527
- package/src/plan-draft.ts +0 -502
- package/src/remove-path.ts +0 -32
- package/src/run-state.ts +0 -420
- package/src/run-store.ts +0 -1179
- package/src/safe-path.ts +0 -77
- package/src/scoped-grep-worker.mjs +0 -23
- package/src/scoped-tools.ts +0 -775
- package/src/single-task-draft.ts +0 -142
- package/src/sqlite-schema.ts +0 -171
- package/src/state-root.ts +0 -215
- package/src/storage-schema.ts +0 -360
- package/src/subagent-activity.ts +0 -1417
- package/src/subagent-process.ts +0 -476
- package/src/task-ledger.ts +0 -1338
- package/src/transport-budget.ts +0 -50
- package/src/verification-capability.ts +0 -1191
- package/src/verification-environment-io.ts +0 -389
- package/src/verification-environment.ts +0 -162
- package/src/verification-identity.ts +0 -77
- package/src/verification-scan.ts +0 -64
- package/src/windows-job-backend.ts +0 -419
- package/src/windows-job.c +0 -149
- package/src/workflow-engine.ts +0 -28
- package/src/workflow-policy.ts +0 -1670
- package/src/workflow-recovery-policy.ts +0 -97
- package/src/workflow-scheduling.ts +0 -105
- package/src/workflow-state-machine.ts +0 -4341
- package/src/workflow-status.ts +0 -576
- package/src/workspace-io-entry.mjs +0 -76
- package/src/workspace-io-worker.mjs +0 -1312
- package/src/workspace-io.ts +0 -89
- 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=>({"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`})[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};
|