@hachej/boring-ui-cli 0.1.84 → 0.1.86

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 (69) hide show
  1. package/dist/server/pluginFrontRuntime.js +11 -0
  2. package/package.json +9 -9
  3. package/public/assets/{DebugDrawer-B95rQQLA.js → DebugDrawer-BrLAMo90.js} +1 -1
  4. package/public/assets/{DiagramPane-3WzsIIUu.js → DiagramPane-9ACaB3GP.js} +4 -4
  5. package/public/assets/{abnfDiagram-VRR7QNED-DMg6L8e1.js → abnfDiagram-VRR7QNED-BNxhN0Ca.js} +1 -1
  6. package/public/assets/{architectureDiagram-ZJ3FMSHR-xyfLRk47.js → architectureDiagram-ZJ3FMSHR-D04gPfN0.js} +1 -1
  7. package/public/assets/{blockDiagram-677ZJIJ3-Bu1Yl5_b.js → blockDiagram-677ZJIJ3-B_2F6T3O.js} +1 -1
  8. package/public/assets/{c4Diagram-LMCZKHZV-gsFI3nvD.js → c4Diagram-LMCZKHZV-Dd60ISfX.js} +1 -1
  9. package/public/assets/channel-pdYpGxUx.js +1 -0
  10. package/public/assets/{chunk-32BRIVSS-DNBjt8B2.js → chunk-32BRIVSS-DYokVZ0B.js} +1 -1
  11. package/public/assets/{chunk-C7G6YPKG-B2JZ1HYv.js → chunk-C7G6YPKG-DxTPnJ1O.js} +1 -1
  12. package/public/assets/{chunk-EX3LRPZG-DSBzBjQk.js → chunk-EX3LRPZG-C1L2sd8r.js} +1 -1
  13. package/public/assets/{chunk-HOUHSVGY-DiawINs_.js → chunk-HOUHSVGY-DHimRQ-s.js} +1 -1
  14. package/public/assets/{chunk-ICXQ74PX-BbOKLD7o.js → chunk-ICXQ74PX-Bpw8ZS7i.js} +1 -1
  15. package/public/assets/{chunk-MOJQB5TN-DyZWfbFF.js → chunk-MOJQB5TN-WnIp1p4Z.js} +1 -1
  16. package/public/assets/{chunk-OGEWGWER-wlweWvam.js → chunk-OGEWGWER-cupX-xkE.js} +1 -1
  17. package/public/assets/{chunk-PUDLZKDR-CIdvauxU.js → chunk-PUDLZKDR-m6M09z91.js} +1 -1
  18. package/public/assets/{chunk-Q4XR5HBZ-YEPRjy6B.js → chunk-Q4XR5HBZ-D-G6ffc4.js} +1 -1
  19. package/public/assets/{chunk-V7JOEXUC-CpHjTt_4.js → chunk-V7JOEXUC-6wLSP_1m.js} +1 -1
  20. package/public/assets/{chunk-VR4S4FIN-D1IwtOQ7.js → chunk-VR4S4FIN-Dghu2M3G.js} +1 -1
  21. package/public/assets/{chunk-WYO6CB5R-Gw5nLT_W.js → chunk-WYO6CB5R-B6u9-P_N.js} +2 -2
  22. package/public/assets/{chunk-ZGVPDNZ5-BYBs0HT1.js → chunk-ZGVPDNZ5-DsktkToC.js} +1 -1
  23. package/public/assets/classDiagram-OUVF2IWQ-Cm4QMUJL.js +1 -0
  24. package/public/assets/classDiagram-v2-EOCWNBFH-Cm4QMUJL.js +1 -0
  25. package/public/assets/{cynefinDiagram-TSTJHNR4-CPRaJfXu.js → cynefinDiagram-TSTJHNR4-Bz3MMQPS.js} +1 -1
  26. package/public/assets/{dagre-VKFMJZFB-DbOw2XDI.js → dagre-VKFMJZFB-QzdqynPg.js} +1 -1
  27. package/public/assets/{diagram-FQU43EPY-tIdCRanv.js → diagram-FQU43EPY-BeaTxuUD.js} +1 -1
  28. package/public/assets/{diagram-G47NLZAW-2QEf04tG.js → diagram-G47NLZAW-DB4oQolZ.js} +1 -1
  29. package/public/assets/{diagram-NH7WQ7WH-CMJ24Axf.js → diagram-NH7WQ7WH-CVh9DspW.js} +1 -1
  30. package/public/assets/{diagram-OA4YK3LP-CeO0BXC_.js → diagram-OA4YK3LP-Dfjjs4Lc.js} +1 -1
  31. package/public/assets/{diagram-WEI45ONY-CP_7pYuB.js → diagram-WEI45ONY-BSUhcDR_.js} +1 -1
  32. package/public/assets/{dist-BXbpk8mR.js → dist-B0WZdZX6.js} +1 -1
  33. package/public/assets/{ebnfDiagram-CCIWWBDH-DqP933x2.js → ebnfDiagram-CCIWWBDH-DbukxspC.js} +1 -1
  34. package/public/assets/{erDiagram-Q63AITRT-BeP4fzZS.js → erDiagram-Q63AITRT-hhTT8RZr.js} +1 -1
  35. package/public/assets/flowDiagram-23GEKE2U-BIY1jcXE.js +1 -0
  36. package/public/assets/{ganttDiagram-NO4QXBWP-BrsvT3FJ.js → ganttDiagram-NO4QXBWP-eUAkrlg-.js} +1 -1
  37. package/public/assets/{gitGraphDiagram-IHSO6WYX-CRTgtMcN.js → gitGraphDiagram-IHSO6WYX-CVZEoxXa.js} +1 -1
  38. package/public/assets/{highlighted-body-OFNGDK62-BosMGayu.js → highlighted-body-OFNGDK62-Y6dXsFsr.js} +1 -1
  39. package/public/assets/{index-C7fIP7f-.js → index-D28uQ8CD.js} +10 -10
  40. package/public/assets/{infoDiagram-FWYZ7A6U-BhkEKrVy.js → infoDiagram-FWYZ7A6U-CG-ujlgQ.js} +1 -1
  41. package/public/assets/{ishikawaDiagram-FXEZZL3T-C-RRvhAL.js → ishikawaDiagram-FXEZZL3T-DyaFzLMh.js} +1 -1
  42. package/public/assets/{journeyDiagram-5HDEW3XC-C1SPGZQS.js → journeyDiagram-5HDEW3XC-BZy1_4QC.js} +1 -1
  43. package/public/assets/{kanban-definition-HUTT4EX6-DYMrvl6P.js → kanban-definition-HUTT4EX6-Du9NL5YB.js} +1 -1
  44. package/public/assets/{line-IzJ7BG2a.js → line-C0wt0c7B.js} +1 -1
  45. package/public/assets/mermaid-GHXKKRXX-Du4W40SQ.js +1 -0
  46. package/public/assets/{mindmap-definition-LN4V7U3C-DlicRbgv.js → mindmap-definition-LN4V7U3C-B1q_xyqk.js} +1 -1
  47. package/public/assets/{pegDiagram-2B236MQR-kciNfGXY.js → pegDiagram-2B236MQR-DcNJgcxc.js} +1 -1
  48. package/public/assets/{pieDiagram-ENE6RG2P-BSDmgAc2.js → pieDiagram-ENE6RG2P-DktDTeBG.js} +1 -1
  49. package/public/assets/{quadrantDiagram-ABIIQ3AL-UgtdJv1o.js → quadrantDiagram-ABIIQ3AL-CCcp49zr.js} +1 -1
  50. package/public/assets/{railroadDiagram-RFXS5EU6-Dt9IsHAA.js → railroadDiagram-RFXS5EU6-CIS_LQWY.js} +1 -1
  51. package/public/assets/{requirementDiagram-TGXJPOKE-BrbCGwgu.js → requirementDiagram-TGXJPOKE-CJinh53R.js} +1 -1
  52. package/public/assets/{sankeyDiagram-HTMAVEWB-Bn2L57F1.js → sankeyDiagram-HTMAVEWB-CKgDt-cv.js} +1 -1
  53. package/public/assets/{sequenceDiagram-DBY2YBRQ-BzRTwb1C.js → sequenceDiagram-DBY2YBRQ-BblvRcB_.js} +1 -1
  54. package/public/assets/{stateDiagram-2N3HPSRC-CdKZKlE2.js → stateDiagram-2N3HPSRC-Dx0I2Bbv.js} +1 -1
  55. package/public/assets/stateDiagram-v2-6OUMAXLB-Cu3wgEJ3.js +1 -0
  56. package/public/assets/{swimlanes-5IMT3BWC-D90Woo9j.js → swimlanes-5IMT3BWC-DT9qZXRs.js} +1 -1
  57. package/public/assets/swimlanesDiagram-G3AALYLV-C7QeTTAu.js +8 -0
  58. package/public/assets/{timeline-definition-FHXFAJF6-BHlJSjrC.js → timeline-definition-FHXFAJF6-XSpqDVul.js} +1 -1
  59. package/public/assets/{vennDiagram-L72KCM5P-trYkPwVK.js → vennDiagram-L72KCM5P-CGpOAL19.js} +1 -1
  60. package/public/assets/{wardleyDiagram-EHGQE667-BNGPIc6U.js → wardleyDiagram-EHGQE667-BT4kzav5.js} +1 -1
  61. package/public/assets/{xychartDiagram-FW5EYKEG-7LPn8d-F.js → xychartDiagram-FW5EYKEG-Cb2F6-0D.js} +1 -1
  62. package/public/index.html +9 -9
  63. package/public/assets/channel-DuDYQMaX.js +0 -1
  64. package/public/assets/classDiagram-OUVF2IWQ-_qupMqQk.js +0 -1
  65. package/public/assets/classDiagram-v2-EOCWNBFH-_qupMqQk.js +0 -1
  66. package/public/assets/flowDiagram-23GEKE2U-D-F6Mm0f.js +0 -1
  67. package/public/assets/mermaid-GHXKKRXX-CrYGbfjk.js +0 -1
  68. package/public/assets/stateDiagram-v2-6OUMAXLB-lxMdpUPE.js +0 -1
  69. package/public/assets/swimlanesDiagram-G3AALYLV-CpyGNSGM.js +0 -8
@@ -1105,6 +1105,7 @@ async function createPluginFrontRuntimeHost(options = {}) {
1105
1105
  const trackedWorkspaces = /* @__PURE__ */ new Map();
1106
1106
  const trackedPluginRevisions = /* @__PURE__ */ new Map();
1107
1107
  const transformCache = /* @__PURE__ */ new Map();
1108
+ const workspaceDisposalEpoch = /* @__PURE__ */ new Map();
1108
1109
  const mintedSupportPathsByCacheKey = /* @__PURE__ */ new Map();
1109
1110
  const mintedSupportPathRefCounts = /* @__PURE__ */ new Map();
1110
1111
  const limiter = new TransformLimiter(Math.max(1, options.maxTransformConcurrency ?? DEFAULT_MAX_TRANSFORM_CONCURRENCY));
@@ -1419,6 +1420,7 @@ async function createPluginFrontRuntimeHost(options = {}) {
1419
1420
  try {
1420
1421
  const resolved = await validateRequest(request);
1421
1422
  validated = resolved;
1423
+ const epochAtValidation = workspaceDisposalEpoch.get(resolved.workspaceId) ?? 0;
1422
1424
  const cached = transformCache.get(resolved.cacheKey);
1423
1425
  if (cached) {
1424
1426
  emit({
@@ -1512,6 +1514,14 @@ async function createPluginFrontRuntimeHost(options = {}) {
1512
1514
  );
1513
1515
  }
1514
1516
  });
1517
+ promise.catch(() => {
1518
+ });
1519
+ if ((workspaceDisposalEpoch.get(runtimeRequest.workspaceId) ?? 0) !== epochAtValidation) {
1520
+ throw new PluginFrontRuntimeError(ErrorCode.enum.PATH_NOT_FOUND, 404, "validate", "plugin runtime workspace was evicted while serving", {
1521
+ workspaceId: runtimeRequest.workspaceId,
1522
+ pluginId: runtimeRequest.pluginId
1523
+ });
1524
+ }
1515
1525
  transformCache.set(runtimeRequest.cacheKey, { runtimeId: runtimeRequest.runtimeId, promise });
1516
1526
  const response = await promise;
1517
1527
  emit({
@@ -1677,6 +1687,7 @@ async function createPluginFrontRuntimeHost(options = {}) {
1677
1687
  await invalidateMatching((entry) => entry.workspaceId === workspaceId && entry.pluginId === pluginId && (keepRevision === void 0 || entry.revision !== keepRevision));
1678
1688
  }
1679
1689
  async function disposeWorkspace(workspaceId) {
1690
+ workspaceDisposalEpoch.set(workspaceId, (workspaceDisposalEpoch.get(workspaceId) ?? 0) + 1);
1680
1691
  trackedWorkspaces.delete(workspaceId);
1681
1692
  trackedPluginRevisions.delete(workspaceId);
1682
1693
  await invalidateMatching((entry) => entry.workspaceId === workspaceId);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hachej/boring-ui-cli",
3
- "version": "0.1.84",
3
+ "version": "0.1.86",
4
4
  "description": "Turn an agent into an app",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -21,14 +21,14 @@
21
21
  "typescript": "^6.0.3",
22
22
  "vite": "^8.1.2",
23
23
  "yaml": "^2.9.0",
24
- "@hachej/boring-agent": "0.1.84",
25
- "@hachej/boring-automation": "0.1.84",
26
- "@hachej/boring-diagram": "0.1.84",
27
- "@hachej/boring-tasks": "0.1.84",
28
- "@hachej/boring-ui-kit": "0.1.84",
29
- "@hachej/boring-ask-user": "0.1.84",
30
- "@hachej/boring-workspace": "0.1.84",
31
- "@hachej/boring-ui-plugin-cli": "0.1.84"
24
+ "@hachej/boring-agent": "0.1.86",
25
+ "@hachej/boring-ask-user": "0.1.86",
26
+ "@hachej/boring-automation": "0.1.86",
27
+ "@hachej/boring-tasks": "0.1.86",
28
+ "@hachej/boring-diagram": "0.1.86",
29
+ "@hachej/boring-ui-kit": "0.1.86",
30
+ "@hachej/boring-ui-plugin-cli": "0.1.86",
31
+ "@hachej/boring-workspace": "0.1.86"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@tailwindcss/vite": "^4.3.1",
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{n as t,t as n}from"./jsx-runtime-CBD9r_Rc.js";import{Ct as r,G as i,St as a,Tt as o,d as s,wt as c}from"./createLucideIcon-Wu4zuv2w.js";import{A as l,E as u,M as d,N as f,T as p,j as m,k as h}from"./index-C7fIP7f-.js";var g=e(t(),1),_=e(n(),1);function v({value:e,label:t}){let[n,r]=(0,g.useState)(!1);return(0,_.jsx)(i,{type:`button`,variant:`ghost`,size:`icon-xs`,onClick:(0,g.useCallback)(()=>{p(e).then(e=>{e&&(r(!0),window.setTimeout(()=>r(!1),1200))})},[e]),className:`text-muted-foreground/60`,"aria-label":t,title:t,children:n?(0,_.jsx)(f,{className:`h-3 w-3`}):(0,_.jsx)(l,{className:`h-3 w-3`})})}function y({label:e,value:t}){return(0,_.jsxs)(`div`,{className:`rounded-md border border-border/40 bg-muted/20 p-2`,children:[(0,_.jsxs)(`div`,{className:`mb-1 flex items-center justify-between gap-2`,children:[(0,_.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-[0.16em] text-muted-foreground`,children:e}),(0,_.jsx)(v,{value:t,label:`Copy ${e}`})]}),(0,_.jsx)(`code`,{className:`block break-all font-mono text-[11px] leading-relaxed text-foreground dark:text-zinc-100`,children:t})]})}function b({sessionId:e}){return(0,_.jsxs)(`div`,{className:`flex flex-col gap-3 overflow-auto p-3 text-[11px] text-muted-foreground dark:text-zinc-300`,children:[(0,_.jsx)(`p`,{className:`text-muted-foreground dark:text-zinc-300`,children:`This web chat is backed by a runtime session. Use the id below for support or debugging.`}),(0,_.jsx)(y,{label:`Runtime session id`,value:e})]})}var x=2500,S=20;function C({apiBaseUrl:e,fetch:t,sessionId:n,requestHeaders:r,storageScope:a}){let[o,s]=(0,g.useState)({kind:`loading`}),[c,l]=(0,g.useState)(0),u=(0,g.useRef)(0),d=(0,g.useCallback)(()=>{u.current=0,l(e=>e+1)},[]);return(0,g.useEffect)(()=>{let i=!1,o=null;return s({kind:`loading`}),(t??globalThis.fetch.bind(globalThis))(j(e,`/api/v1/agent/sessions/${encodeURIComponent(n)}/system-prompt`),{headers:M(r,a)}).then(async e=>{if(i)return;if(e.ok){let t=await e.json();if(typeof t.systemPrompt==`string`){u.current=0,s({kind:`ok`,text:t.systemPrompt});return}}let t=(await e.json().catch(()=>null))?.error?.message??`HTTP ${e.status}`;e.status===404&&u.current<S?(s({kind:`empty`,reason:t}),o=setTimeout(()=>{i||(u.current++,l(e=>e+1))},x)):s(e.status===404?{kind:`empty`,reason:t}:{kind:`error`,reason:t})}).catch(e=>{i||s({kind:`error`,reason:e instanceof Error?e.message:String(e)})}),()=>{i=!0,o&&clearTimeout(o)}},[e,t,n,r,c,a]),(0,_.jsxs)(`div`,{className:`flex flex-col h-full min-h-0`,children:[(0,_.jsxs)(`div`,{className:`shrink-0 flex items-center justify-between px-3 pt-2 pb-1 border-b border-border/40`,children:[(0,_.jsx)(`span`,{className:`text-[10px] text-muted-foreground/80 font-mono`,children:o.kind===`ok`?`${o.text.length.toLocaleString()} chars`:o.kind===`loading`?`loading…`:o.kind===`empty`?`waiting for session · retry ${u.current}/${S}`:`error`}),o.kind!==`loading`&&(0,_.jsx)(i,{type:`button`,variant:`ghost`,size:`icon-xs`,onClick:d,className:`text-muted-foreground/60`,"aria-label":`Refresh system prompt`,children:(0,_.jsx)(h,{className:`h-3 w-3`})})]}),(o.kind===`loading`||o.kind===`empty`)&&(0,_.jsx)(`p`,{className:`text-[11px] text-muted-foreground p-3`,children:o.kind===`loading`?`Loading…`:o.reason}),o.kind===`error`&&(0,_.jsx)(`p`,{className:`text-[11px] text-destructive p-3`,children:o.reason}),o.kind===`ok`&&(0,_.jsx)(`pre`,{className:`flex-1 overflow-auto px-3 py-2 font-mono text-[11px] leading-relaxed text-foreground whitespace-pre-wrap break-words`,children:o.text})]})}function w(e){let t=e,n=t?.type??`?`;if(n===`text`){let e=String(t.text??``);return e.slice(0,80)+(e.length>80?`…`:``)}if(n===`tool-invocation`){let e=t.toolInvocation,n=String(e?.state??``);return`${e?.toolName??`?`}() · ${n}`}if(n===`reasoning`){let e=String(t.text??t.reasoning??``);return e.slice(0,80)+(e.length>80?`…`:``)}return n}function T(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n],i=r,a=i.createdAt?new Date(i.createdAt).toISOString().slice(11,23):null;for(let e=0;e<r.parts.length;e++){let i=r.parts[e];t.push({msgId:r.id,msgIndex:n,role:r.role,time:a,partIndex:e,partType:i?.type??`unknown`,part:i})}}return t}function E({messages:e}){let t=T(e),[n,r]=(0,g.useState)(null),i=(0,g.useRef)(null),a=(0,g.useRef)(t.length);return(0,g.useEffect)(()=>{t.length!==a.current&&(i.current?.scrollIntoView({behavior:`smooth`}),a.current=t.length)},[t.length]),t.length===0?(0,_.jsx)(`p`,{className:`text-[11px] text-muted-foreground p-3`,children:`No messages yet.`}):(0,_.jsxs)(`div`,{className:`flex flex-col h-full min-h-0`,children:[(0,_.jsxs)(`div`,{className:`shrink-0 px-3 pt-2 pb-1 text-[10px] text-muted-foreground/80 font-mono border-b border-border/40`,children:[e.length,` msg · `,t.length,` parts`]}),(0,_.jsxs)(`div`,{className:`flex-1 overflow-auto`,children:[t.map(e=>{let t=`${e.msgId}:${e.partIndex}`,i=n===t;return(0,_.jsxs)(`div`,{className:`border-b border-border/30 last:border-0`,children:[(0,_.jsxs)(s,{type:`button`,variant:`ghost`,onClick:()=>r(i?null:t),className:`h-auto w-full justify-start gap-1.5 rounded-none px-2 py-1.5 text-left`,children:[(0,_.jsx)(`span`,{className:`mt-0.5 shrink-0 text-muted-foreground/40`,children:i?(0,_.jsx)(d,{className:`h-3 w-3`}):(0,_.jsx)(m,{className:`h-3 w-3`})}),(0,_.jsx)(`span`,{className:`font-mono text-[10px] shrink-0 w-20`,children:e.time?(0,_.jsx)(`span`,{className:`text-muted-foreground/60`,children:e.time}):(0,_.jsxs)(`span`,{className:`text-muted-foreground/30`,children:[`m`,e.msgIndex]})}),(0,_.jsx)(`span`,{className:u(`shrink-0 font-mono text-[10px] w-14`,e.role===`user`?`text-accent`:`text-muted-foreground`),children:e.role}),(0,_.jsx)(`span`,{className:`shrink-0 font-mono text-[10px] text-muted-foreground/60 w-24`,children:e.partType}),(0,_.jsx)(`span`,{className:`flex-1 min-w-0 font-mono text-[11px] text-foreground truncate`,children:w(e.part)})]}),i&&(0,_.jsx)(`pre`,{className:`px-3 pb-2 font-mono text-[10px] leading-relaxed text-foreground/80 whitespace-pre-wrap break-words bg-muted/20`,children:JSON.stringify(e.part,null,2)})]},t)}),(0,_.jsx)(`div`,{ref:i})]})]})}var D=[{id:`session`,label:`Session`},{id:`prompt`,label:`System prompt`},{id:`messages`,label:`Messages`}],O=280,k=800;function A({apiBaseUrl:e,fetch:t,sessionId:n,messages:i,requestHeaders:s,storageScope:l,width:d,onWidthChange:f}){let[p,m]=(0,g.useState)(`session`);return(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`div`,{onMouseDown:(0,g.useCallback)(e=>{e.preventDefault();let t=e.clientX,n=d,r=e=>{let r=t-e.clientX;f(Math.min(k,Math.max(O,n+r)))},i=()=>{window.removeEventListener(`mousemove`,r),window.removeEventListener(`mouseup`,i)};window.addEventListener(`mousemove`,r),window.addEventListener(`mouseup`,i)},[d,f]),className:`w-1 shrink-0 cursor-col-resize hover:bg-accent/40 active:bg-accent/60 transition-colors`,"aria-hidden":!0}),(0,_.jsx)(`aside`,{style:{width:d},className:u(`flex h-full shrink-0 flex-col border-l border-border/60`,`bg-[oklch(from_var(--background)_calc(l-0.01)_c_h)]`),children:(0,_.jsxs)(a,{value:p,onValueChange:e=>m(e),className:`flex flex-col flex-1 min-h-0 overflow-hidden`,children:[(0,_.jsx)(`header`,{className:`flex shrink-0 items-center gap-0 border-b border-border/60 px-1`,children:(0,_.jsx)(c,{variant:`line`,className:`h-auto gap-0 p-0 w-full`,children:D.map(({id:e,label:t})=>(0,_.jsx)(o,{value:e,className:`h-8 flex-none px-3 py-2 text-[11px] font-medium data-[state=active]:after:bg-[color:var(--accent)]`,children:t},e))})}),(0,_.jsx)(r,{value:`session`,forceMount:!0,className:`flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden`,children:(0,_.jsx)(b,{sessionId:n})}),(0,_.jsx)(r,{value:`prompt`,forceMount:!0,className:`flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden`,children:(0,_.jsx)(C,{apiBaseUrl:e,fetch:t,sessionId:n,requestHeaders:s,storageScope:l})}),(0,_.jsx)(r,{value:`messages`,forceMount:!0,className:`flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden`,children:(0,_.jsx)(E,{messages:i})})]})})]})}function j(e,t){return`${e?.replace(/\/$/,``)??``}${t}`}function M(e,t){if(!e&&!t)return;let n={...e??{}},r=Object.keys(n).some(e=>e.toLowerCase()===`x-boring-storage-scope`);return t&&!r&&(n[`x-boring-storage-scope`]=t),n}export{A as DebugDrawer};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{n as t,t as n}from"./jsx-runtime-CBD9r_Rc.js";import{Ct as r,G as i,St as a,Tt as o,d as s,wt as c}from"./createLucideIcon-Wu4zuv2w.js";import{A as l,E as u,M as d,N as f,T as p,j as m,k as h}from"./index-D28uQ8CD.js";var g=e(t(),1),_=e(n(),1);function v({value:e,label:t}){let[n,r]=(0,g.useState)(!1);return(0,_.jsx)(i,{type:`button`,variant:`ghost`,size:`icon-xs`,onClick:(0,g.useCallback)(()=>{p(e).then(e=>{e&&(r(!0),window.setTimeout(()=>r(!1),1200))})},[e]),className:`text-muted-foreground/60`,"aria-label":t,title:t,children:n?(0,_.jsx)(f,{className:`h-3 w-3`}):(0,_.jsx)(l,{className:`h-3 w-3`})})}function y({label:e,value:t}){return(0,_.jsxs)(`div`,{className:`rounded-md border border-border/40 bg-muted/20 p-2`,children:[(0,_.jsxs)(`div`,{className:`mb-1 flex items-center justify-between gap-2`,children:[(0,_.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-[0.16em] text-muted-foreground`,children:e}),(0,_.jsx)(v,{value:t,label:`Copy ${e}`})]}),(0,_.jsx)(`code`,{className:`block break-all font-mono text-[11px] leading-relaxed text-foreground dark:text-zinc-100`,children:t})]})}function b({sessionId:e}){return(0,_.jsxs)(`div`,{className:`flex flex-col gap-3 overflow-auto p-3 text-[11px] text-muted-foreground dark:text-zinc-300`,children:[(0,_.jsx)(`p`,{className:`text-muted-foreground dark:text-zinc-300`,children:`This web chat is backed by a runtime session. Use the id below for support or debugging.`}),(0,_.jsx)(y,{label:`Runtime session id`,value:e})]})}var x=2500,S=20;function C({apiBaseUrl:e,fetch:t,sessionId:n,requestHeaders:r,storageScope:a}){let[o,s]=(0,g.useState)({kind:`loading`}),[c,l]=(0,g.useState)(0),u=(0,g.useRef)(0),d=(0,g.useCallback)(()=>{u.current=0,l(e=>e+1)},[]);return(0,g.useEffect)(()=>{let i=!1,o=null;return s({kind:`loading`}),(t??globalThis.fetch.bind(globalThis))(j(e,`/api/v1/agent/sessions/${encodeURIComponent(n)}/system-prompt`),{headers:M(r,a)}).then(async e=>{if(i)return;if(e.ok){let t=await e.json();if(typeof t.systemPrompt==`string`){u.current=0,s({kind:`ok`,text:t.systemPrompt});return}}let t=(await e.json().catch(()=>null))?.error?.message??`HTTP ${e.status}`;e.status===404&&u.current<S?(s({kind:`empty`,reason:t}),o=setTimeout(()=>{i||(u.current++,l(e=>e+1))},x)):s(e.status===404?{kind:`empty`,reason:t}:{kind:`error`,reason:t})}).catch(e=>{i||s({kind:`error`,reason:e instanceof Error?e.message:String(e)})}),()=>{i=!0,o&&clearTimeout(o)}},[e,t,n,r,c,a]),(0,_.jsxs)(`div`,{className:`flex flex-col h-full min-h-0`,children:[(0,_.jsxs)(`div`,{className:`shrink-0 flex items-center justify-between px-3 pt-2 pb-1 border-b border-border/40`,children:[(0,_.jsx)(`span`,{className:`text-[10px] text-muted-foreground/80 font-mono`,children:o.kind===`ok`?`${o.text.length.toLocaleString()} chars`:o.kind===`loading`?`loading…`:o.kind===`empty`?`waiting for session · retry ${u.current}/${S}`:`error`}),o.kind!==`loading`&&(0,_.jsx)(i,{type:`button`,variant:`ghost`,size:`icon-xs`,onClick:d,className:`text-muted-foreground/60`,"aria-label":`Refresh system prompt`,children:(0,_.jsx)(h,{className:`h-3 w-3`})})]}),(o.kind===`loading`||o.kind===`empty`)&&(0,_.jsx)(`p`,{className:`text-[11px] text-muted-foreground p-3`,children:o.kind===`loading`?`Loading…`:o.reason}),o.kind===`error`&&(0,_.jsx)(`p`,{className:`text-[11px] text-destructive p-3`,children:o.reason}),o.kind===`ok`&&(0,_.jsx)(`pre`,{className:`flex-1 overflow-auto px-3 py-2 font-mono text-[11px] leading-relaxed text-foreground whitespace-pre-wrap break-words`,children:o.text})]})}function w(e){let t=e,n=t?.type??`?`;if(n===`text`){let e=String(t.text??``);return e.slice(0,80)+(e.length>80?`…`:``)}if(n===`tool-invocation`){let e=t.toolInvocation,n=String(e?.state??``);return`${e?.toolName??`?`}() · ${n}`}if(n===`reasoning`){let e=String(t.text??t.reasoning??``);return e.slice(0,80)+(e.length>80?`…`:``)}return n}function T(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n],i=r,a=i.createdAt?new Date(i.createdAt).toISOString().slice(11,23):null;for(let e=0;e<r.parts.length;e++){let i=r.parts[e];t.push({msgId:r.id,msgIndex:n,role:r.role,time:a,partIndex:e,partType:i?.type??`unknown`,part:i})}}return t}function E({messages:e}){let t=T(e),[n,r]=(0,g.useState)(null),i=(0,g.useRef)(null),a=(0,g.useRef)(t.length);return(0,g.useEffect)(()=>{t.length!==a.current&&(i.current?.scrollIntoView({behavior:`smooth`}),a.current=t.length)},[t.length]),t.length===0?(0,_.jsx)(`p`,{className:`text-[11px] text-muted-foreground p-3`,children:`No messages yet.`}):(0,_.jsxs)(`div`,{className:`flex flex-col h-full min-h-0`,children:[(0,_.jsxs)(`div`,{className:`shrink-0 px-3 pt-2 pb-1 text-[10px] text-muted-foreground/80 font-mono border-b border-border/40`,children:[e.length,` msg · `,t.length,` parts`]}),(0,_.jsxs)(`div`,{className:`flex-1 overflow-auto`,children:[t.map(e=>{let t=`${e.msgId}:${e.partIndex}`,i=n===t;return(0,_.jsxs)(`div`,{className:`border-b border-border/30 last:border-0`,children:[(0,_.jsxs)(s,{type:`button`,variant:`ghost`,onClick:()=>r(i?null:t),className:`h-auto w-full justify-start gap-1.5 rounded-none px-2 py-1.5 text-left`,children:[(0,_.jsx)(`span`,{className:`mt-0.5 shrink-0 text-muted-foreground/40`,children:i?(0,_.jsx)(d,{className:`h-3 w-3`}):(0,_.jsx)(m,{className:`h-3 w-3`})}),(0,_.jsx)(`span`,{className:`font-mono text-[10px] shrink-0 w-20`,children:e.time?(0,_.jsx)(`span`,{className:`text-muted-foreground/60`,children:e.time}):(0,_.jsxs)(`span`,{className:`text-muted-foreground/30`,children:[`m`,e.msgIndex]})}),(0,_.jsx)(`span`,{className:u(`shrink-0 font-mono text-[10px] w-14`,e.role===`user`?`text-accent`:`text-muted-foreground`),children:e.role}),(0,_.jsx)(`span`,{className:`shrink-0 font-mono text-[10px] text-muted-foreground/60 w-24`,children:e.partType}),(0,_.jsx)(`span`,{className:`flex-1 min-w-0 font-mono text-[11px] text-foreground truncate`,children:w(e.part)})]}),i&&(0,_.jsx)(`pre`,{className:`px-3 pb-2 font-mono text-[10px] leading-relaxed text-foreground/80 whitespace-pre-wrap break-words bg-muted/20`,children:JSON.stringify(e.part,null,2)})]},t)}),(0,_.jsx)(`div`,{ref:i})]})]})}var D=[{id:`session`,label:`Session`},{id:`prompt`,label:`System prompt`},{id:`messages`,label:`Messages`}],O=280,k=800;function A({apiBaseUrl:e,fetch:t,sessionId:n,messages:i,requestHeaders:s,storageScope:l,width:d,onWidthChange:f}){let[p,m]=(0,g.useState)(`session`);return(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`div`,{onMouseDown:(0,g.useCallback)(e=>{e.preventDefault();let t=e.clientX,n=d,r=e=>{let r=t-e.clientX;f(Math.min(k,Math.max(O,n+r)))},i=()=>{window.removeEventListener(`mousemove`,r),window.removeEventListener(`mouseup`,i)};window.addEventListener(`mousemove`,r),window.addEventListener(`mouseup`,i)},[d,f]),className:`w-1 shrink-0 cursor-col-resize hover:bg-accent/40 active:bg-accent/60 transition-colors`,"aria-hidden":!0}),(0,_.jsx)(`aside`,{style:{width:d},className:u(`flex h-full shrink-0 flex-col border-l border-border/60`,`bg-[oklch(from_var(--background)_calc(l-0.01)_c_h)]`),children:(0,_.jsxs)(a,{value:p,onValueChange:e=>m(e),className:`flex flex-col flex-1 min-h-0 overflow-hidden`,children:[(0,_.jsx)(`header`,{className:`flex shrink-0 items-center gap-0 border-b border-border/60 px-1`,children:(0,_.jsx)(c,{variant:`line`,className:`h-auto gap-0 p-0 w-full`,children:D.map(({id:e,label:t})=>(0,_.jsx)(o,{value:e,className:`h-8 flex-none px-3 py-2 text-[11px] font-medium data-[state=active]:after:bg-[color:var(--accent)]`,children:t},e))})}),(0,_.jsx)(r,{value:`session`,forceMount:!0,className:`flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden`,children:(0,_.jsx)(b,{sessionId:n})}),(0,_.jsx)(r,{value:`prompt`,forceMount:!0,className:`flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden`,children:(0,_.jsx)(C,{apiBaseUrl:e,fetch:t,sessionId:n,requestHeaders:s,storageScope:l})}),(0,_.jsx)(r,{value:`messages`,forceMount:!0,className:`flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden`,children:(0,_.jsx)(E,{messages:i})})]})})]})}function j(e,t){return`${e?.replace(/\/$/,``)??``}${t}`}function M(e,t){if(!e&&!t)return;let n={...e??{}},r=Object.keys(n).some(e=>e.toLowerCase()===`x-boring-storage-scope`);return t&&!r&&(n[`x-boring-storage-scope`]=t),n}export{A as DebugDrawer};